刚到新公司接到任务
要求用户可以自定义排序位置
修改排序时就成问题了
代码如下
主要使用List Comparator操作
public Result update(CompanyClassifyEx companyClassifyEx){
//类型
if(companyClassifyEx.getPid()==19){
companyClassifyEx.setType(new BigDecimal("1"));
}else if(companyClassifyEx.getPid()==1){
companyClassifyEx.setType(new BigDecimal("0"));
}
SessionInfo userInfo = (SessionInfo) session.getAttribute("userInfo");
companyClassifyEx.setCompanyId(userInfo.getCompanyId());
companyClassifyEx.setCreateBy(Integer.parseInt(userInfo.getUserId()));
List<CompanyClassify> companyClassifyList = companyClassifyMapperEx.detailsCompanyClassifyOrder(companyClassifyEx);
if(companyClassifyList.size()!=0){
return new Result(Result.ERROR, "数据已存在");
}
companyClassifyEx.setDicId(null);
List<CompanyClassify> companyClassifyListOrder = companyClassifyMapperEx.detailsCompanyClassifyOrder(companyClassifyEx);
List<CompanyClassify> companyClassifyListNew = new ArrayList<>();
//重新排序
for(CompanyClassify companyClassifyThisOrder:companyClassifyListOrder) {
companyClassifyThisOrder.setOrderBy(companyClassifyThisOrder.getOrderBy()+1);
companyClassifyListNew.add(companyClassifyThisOrder);
}
companyClassifyEx.setCreateTime(new Date());
companyClassifyListNew.add(companyClassifyEx);
//按照OrderBy升序
Comparator<CompanyClassify> bya = Comparator.comparing(CompanyClassify::getOrderBy);
//按照CreateTime倒序
Comparator<CompanyClassify> byb = Comparator.comparing(CompanyClassify::getCreateTime).reversed();
//将companyClassifyListNew按照OrderBy字段先升序再按照CreateTime字段进行倒序排列
Collections.sort(companyClassifyListNew,bya.thenComparing(byb));
Integer i=1;
for(CompanyClassify updateByPrimaryKey:companyClassifyListNew){
updateByPrimaryKey.setOrderBy(i);
companyClassifyMapper.updateByPrimaryKeySelective(updateByPrimaryKey);
i++;
}
return new Result(Result.OK, "修改成功");
}
可以继续优化,大佬也可以给小弟提一点建议 可以用其他更好的方法实现