/*** 专业方向主键,用于下拉框搜索*/private Long disasterTypeId;/*** 专业方向*/private List disasterType;
业务层
/*** 新增专家信息库** @param expertInfo 专家信息库* @return 结果*/@Override@Transactional(rollbackFor = Exception.class)public int insertExpertInfo(ExpertInfo expertInfo) {expertInfo.setCreateTime(DateUtils.getNowDate());expertInfo.setCreateBy(SecurityUtils.getUsername());AssertUtil.insertDataBaseIsOk(expertInfoMapper.insertExpertInfo(expertInfo), "添加数据失败");return expertInfoMapper.batchInsertDisasterTypeRelation(expertInfo.getId(), expertInfo.getDisasterType());}/*** 修改专家信息库** @param expertInfo 专家信息库* @return 结果*/@Override@Transactional(rollbackFor = Exception.class)public int updateExpertInfo(ExpertInfo expertInfo) {expertInfo.setUpdateBy(SecurityUtils.getUsername());expertInfo.setUpdateTime(DateUtils.getNowDate());ExpertInfo oldExpertInfo = selectExpertInfoById(expertInfo.getId());Set oldDisasterTypeSet = oldExpertInfo.getDisasterType().stream().collect(Collectors.toMap(DisasterType::getId, o -> o)).keySet();Set newDisasterTypeSet = expertInfo.getDisasterType().stream().collect(Collectors.toMap(DisasterType::getId, o -> o)).keySet();//用集合交、并、补运算获取新增记录Set addDisasterTypeSet = new HashSet<>(newDisasterTypeSet);addDisasterTypeSet.removeAll(oldDisasterTypeSet);if (!CollectionUtils.isEmpty(addDisasterTypeSet)) {List t = new ArrayList<>(32);for (Long id : addDisasterTypeSet) {t.add(new DisasterType(id));}expertInfoMapper.batchInsertDisasterTypeRelation(expertInfo.getId(), t);}//用集合交、并、补运算获取删除记录Set deleteDisasterTypeSet = new HashSet<>(oldDisasterTypeSet);deleteDisasterTypeSet.removeAll(newDisasterTypeSet);if (!CollectionUtils.isEmpty(deleteDisasterTypeSet)) {List t = new ArrayList<>(32);for (Long id : deleteDisasterTypeSet) {t.add(new DisasterType(id));}expertInfoMapper.batchDeleteDisasterTypeRelationByIdAndDisasterTypeId(expertInfo.getId(), t);}return expertInfoMapper.updateExpertInfo(expertInfo);}/*** 批量删除专家信息库** @param ids 需要删除的专家信息库主键* @return 结果*/@Override@Transactional(rollbackFor = Exception.class)public int deleteExpertInfoByIds(Long[] ids) {for (Long id : ids) {expertInfoMapper.batchDeleteDisasterTypeRelationById(id);}return expertInfoMapper.deleteExpertInfoByIds(ids);}
mapper
/*** 批量插入专业方向中间表** @param id 专家主键* @param disasterType 专业方向* @return 结果* @author weimingzhong* @date 2022/11/28 14:43*/int batchInsertDisasterTypeRelation(@Param("id") Long id, @Param("disasterType") List disasterType);/*** 批量删除专业方向中间表** @param id 专家主键* @param disasterType 专业方向* @return 结果* @author weimingzhong* @date 2022/11/28 14:43*/int batchDeleteDisasterTypeRelationByIdAndDisasterTypeId(@Param("id") Long id, @Param("disasterType") List disasterType);/*** 批量删除专业方向中间表** @param id 专家主键* @return 结果* @author weimingzhong* @date 2022/11/28 14:43*/int batchDeleteDisasterTypeRelationById(Long id);
mybatis
insert into erss_expert_info_disaster_type_relationexpert_id,disaster_type_id#{id},#{item.id}delete from erss_expert_info_disaster_type_relationwhere expert_id = #{id}and disaster_type_id in#{item.id}delete from erss_expert_info_disaster_type_relationwhere expert_id = #{id}