最近项目中在做人员的编辑过程中,由于人员和岗位是一对多关系,而权限绑定着岗位ID,不可以直接失效再做插入,需要对编辑后的岗位集合和数据库中原先的岗位集合根据组织编码需要去循环比对做判断。
假设A集合(编辑后的岗位集合),B集合(数据库中岗位集合)。
- A没有,B有,删除
- A有,B没有,新增
- A和B都有,更新
public int[] updatePtPostList(String staffCode, List<UcPost> ucPtPostList) {
int[] result;
List<UcPost> queryPostList = queryPost(staffCode, ptPost, 0);//获得岗位表里的兼职岗集合
List<UcPost> addPostList = new ArrayList();//需要新增的兼职岗位List(传入List有,岗位表List没有)
List<UcPost> updatePostList = new ArrayList();//需要更新的兼职岗List(传入List有,岗位表List也有)
List<UcPost> deletePostList = new ArrayList();//需要删除的岗位List(传入List没有,岗位表List有)
if (null == ucPtPostList || ucPtPostList.isEmpty()) {//如果传入的新ucPtPostList为空,删除数据库中存在的兼职岗
if (null != queryPostList && !queryPostList.isEmpty()) {
int oldSize = queryPostList.size();
for (int i = 0; i < oldSize; i++) {
UcPost oldPost = queryPostList.get(i);
oldPost.setState(0);
deletePostList.add(oldPost);
}
}
}
else {
if (null != queryPostList && !queryPostList.isEmpty()) {
int oldSize = queryPostList.size();
int newSize = queryPostList.size();
boolean flag1 = true;
for (int i = 0; i < newSize; i++) {//外层循环传入LIST
UcPost newPost = ucPtPostList.get(i);
String newOrgCode = newPost.getOrgCode();//查询岗位表兼职岗部门编码
for (int j = 0; j < oldSize; j++) {//内层循环岗位表LIST
UcPost oldPost = queryPostList.get(j);
String oldOrgCode = oldPost.getOrgCode();//查询修改的兼职岗部门编码
if (oldOrgCode.equals(newOrgCode)) {//部门ID相同更新
newPost.setPostId(oldPost.getPostId());//将岗位表ID赋给新LIST
newPost.setState(1);
updatePostList.add(newPost);
flag1 = false;
break;
}
}
if (flag1) {//true代表岗位表中没有该兼职信息,添加
newPost.setState(1);
addPostList.add(newPost);
}
}
boolean flag2 = true;
for (int i = 0; i < oldSize; i++) {//外层为岗位表List
UcPost oldPost = queryPostList.get(i);
String oldOrgCode = oldPost.getOrgCode();//查询修改的兼职岗部门编码
for (int j = 0; j < newSize; j++) {//内层为传入获取的List
UcPost newPost = ucPtPostList.get(j);
String newOrgCode = newPost.getOrgCode();//查询岗位表兼职岗部门编码
if (newOrgCode.equals(oldOrgCode)) {
flag2 = false;
break;
}
}
if (flag2) {//true说明岗位表里有,传入List里没有,删除
oldPost.setState(0);
deletePostList.add(oldPost);
}
}
}
else {//查询到数据库岗位表里没有,全部插入
for (int i = 0; i < ucPtPostList.size(); i++) {
UcPost newPost = ucPtPostList.get(i);
newPost.setState(1);
addPostList.add(newPost);
}
}
}
result = sql.insertBatch(UcPost.class, addPostList);//批量插入
result = sql.updateBatchTemplateById(UcPost.class, updatePostList);//批量更新
result = sql.updateBatchTemplateById(UcPost.class, deletePostList);//批量删除
return result;
}