##问题详解
在做批量删除时,发现若批量删除整页时,会自动跳到第一页首页,而不是返回删除当前页的上一页,不符合产品要求且使界面交互不好,给用户带来糟糕体验。
##思路详解
在controller层传参时要考虑到不仅要传入需要删除的id集合,同时传入pageSize,pageNum以及总条数集合的查询条件(如:本示例会传入groupId(分组id)),在删除成功后初始化当前页,先根据查询条件查询出总条数数量,在pageSize不等于null或为0的情况下。算出余数[(pageSize*pageNum-count)%pageSize ].若余数为0,则当前页等于pageNum-1;若余数不为0,则当前页=pageNum.将结果当前页传给前台即可。
##后台代码实现
#controller层#
@Api(description = "分组下的学生",value = "分组下的学生")
@RestController
@RequestMapping("studentGroup")
public class StudentGroupController {
@Autowired
private RestStudentGroupService restStudentGroupService;
@RequestMapping(value = "deleteGroupStudent",method = RequestMethod.POST)
@ApiOperation(value = "删除分组中的学生",notes = "删除分组中的学生")
public ResponseObj deleteGroupStudent(@RequestParam(value = "groupId",required = true)Long groupId,
@RequestParam(value = "ids",required = true)String ids,
@RequestParam(value = "pageSize",required = false)Integer pagesize,
@RequestParam(value = "pageNum",required = false)Integer pageNum){
return restStudentGroupService.deleteGroupStudent(groupId,ids,pagesize,pageNum);
}
}
#service层#
@FeignClient(value = ServiceName.VALUE)
public interface RestStudentGroupService {
@RequestMapping(value = "/school/cloud/student/deleteGroupStudent",method = RequestMethod.POST)
public ResponseObj deleteGroupStudent(@RequestParam(value = "groupId")Long groupId,
@RequestParam(value = "ids")String ids,
@RequestParam(value = "pageSize")Integer pagesize,
@RequestParam(value = "pageNum")Integer pageNum);
}
#serviceImpl层#
@Service
public class RestStudentGroupServiceImpl implements RestStudentGroupService {
@Autowired
private DubboStudentGroupService dubboStudentGroupService ;
@Override
public ResponseObj deleteGroupStudent(Long groupId,String ids,Integer pageSize,Integer pageNum) {
List idList = TextUtils.split(ids);
if(groupId == null || idList== null || idList.size() == 0){
ResponseObj responseObj = ResponseObj.ERROR("参数错误");
responseObj.setSuccess(true);
return responseObj;
}
ServiceResult serviceResult = dubboStudentGroupService .deleteCorpGroup(idList, groupId);
if(!serviceResult.getSuccess()){
throw new RuntimeException("分组下学生查询失败");
}
//应前端要求加此dto,封装传给前台的当前页属性
CurrenPageDto currenPageDto=new CurrenPageDto();
//初始化当前页
Integer currentPage = 1;
//查出该分组id下的学生数量
ServiceResult itemCountLongs = dubboStudentGroupService.getTotalCount(groupId);
Long itemCountLong= itemCountLongs.getResult();
Integer itemCount = itemCountLong!=null ? itemCountLong.intValue() : 0;
//"查询到学生数量:{},pageSize:{}", itemCount,pageSize;
if(pageSize != null && pageSize != 0){
//算出余数
Integer temp = (pageNum*pageSize-itemCount)%pageSize;
if(temp == 0){
//余数为0的话就pageNum-1
currentPage = (pageNum - 1) == 0 ? 1 : (pageNum -1) ;
}else {
//余数不为0则等于pageNum
currentPage = pageNum;
}
currenPageDto.setPresentPage(currentPage);
}
ResponseObj responseObj = ResponseObj.SUCCESS();
responseObj.setData(currenPageDto);
return responseObj;
}
}
#dubbo接口的service层#
①://删除分组下的学生
ServiceResult deleteCorpGroup(List idList,Long groupId);
②://根据条件查询对应的条目总数
ServiceResult getTotalCount(Long groupId);
#dubbo接口的serviceImpl层#
①://删除分组下的学生
@Override
public ServiceResult deleteCorpGroup(List idList, Long groupId) {
ServiceResult result = new ServiceResult<>();
try {
studentGroupDao.deleteCorpGroup(idList, groupId);
} catch (Exception e) {
log.error("调用{}方法 异常", "[RestStudentGroupServiceImpl .deleteCorpGroup]");
log.error("方法使用参数:[idList:{},groupId:{}]", idList, groupId);
log.error("异常信息:{}", e);
result.setErrMessage("调用deleteCorpGroup方法异常,异常信息:" + e.getMessage());
}
return result;
}
②://根据条件查询对应的条目总数
@Override
public ServiceResult getTotalCount(Long groupId) {
ServiceResult result = new ServiceResult<>();
try {
long count = studentGroupDao.getFindCorpGroupDirectoryCount(groupId);
result.setResult(count);
} catch (Exception e) {
log.error("调用{}方法 异常", "[RestStudentGroupServiceImpl .getTotalCount]");
log.error("方法使用参数:[groupId:{}]", groupId);
log.error("异常信息:{}", e);
result.setErrMessage("调用getTotalCount方法异常,异常信息:" + e.getMessage());
}
return result;
}
#dubbo接口的dao层#
①://删除分组下的学生
Long deleteCorpGroup(@Param(value = "idList") List idList,@Param(value = "groupId") Long groupId);
②://根据条件查询对应的条目总数
Long getFindCorpGroupDirectoryCount(@Param(value = "groupId") Long groupId);
#dubbo接口的sql#
①://删除分组下的学生
delete from student_group where group_id = #{groupId} and id in
#{id}
②://根据条件查询对应的条目总数
#Entity类(学生分组类)#(get,set函数省略)
public class StudentGroup implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @描述:
* @字段:id BIGINT(19)
*/
private Long StudentGroupId;
/**
* @描述:
* @字段:group_id BIGINT(19)
*/
private Long groupId;
/**
* @描述:
* @字段:id BIGINT(19)
* 此id为学生表id
*/
private Long id;
/**
* @描述:创建时间
* @字段:create_time DATETIME(19)
*/
private java.util.Date createTime;
* @描述:创建人用户名
* @字段:create_user_name VARCHAR(30)
*/
private String createUserName;
/**
* @描述:创建人用户ID
* @字段:create_user_id BIGINT(19)
*/
private Long createUserId;
/**
* @描述:更新时间
* @字段:update_time DATETIME(19)
*/
private java.util.Date updateTime;
* @描述:更新人用户名
* @字段:update_user_name VARCHAR(30)
*/
private String updateUserName;
/**
* @描述:更新人用户ID
* @字段:update_user_id BIGINT(19)
*/
private Long updateUserId;
}
#Entity类(学生类)#(get,set函数省略)
public class Student implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Long id;
private String name ;
private Integer age;
}