# 需求

活动对象与其他多个对象是多对多的关系,数据库中有多张中间关联表。复制一个活动,需要复制该活动与多个实体之间的关系。

# 初完成

List<ActivityTemplateDO> templateDOList = activityTemplateService.selectByTemplateActivityId(id);
templateDOList.stream().peek(activityTemplateDO -> activityTemplateDO.setId(null))
        .peek(activityTemplateDO -> activityTemplateDO.setActivityId(activityDO.getId()))
        .forEach(activityTemplateService::insertSelective);
List<ChannelDTO> channelDTOList = pinDaoService.selectChannelDTOlistByActivityId(id);
channelDTOList.stream().peek(channelDTO -> channelDTO.setId(null))
        .peek(channelDTO -> channelDTO.setActivityId(activityDO.getId()))
        .forEach(pinDaoService::insertSelective);
List<ActivityDevice> activityDeviceList = activityDeviceService.selectDevicelistByActivityId(id);
activityDeviceList.stream().peek(activityDevice -> activityDevice.setId(null))
        .peek(activityDevice -> activityDevice.setActivityId(activityDO.getId()))
        .forEach(activityDeviceService::insertSelective);
List<ActivityConnection> activityConnectionList = activityConnectionService.selectConnectionlistByActivityId(id);
activityConnectionList.stream().peek(activityConnection -> activityConnection.setId(null))
        .peek(activityConnection -> activityConnection.setActivityId(activityDO.getId()))
        .forEach(activityConnectionService::insertSelective);
List<Age> ageList = ageService.selectAgelistByActivityId(id);
ageList.stream().peek(age -> age.setId(null))
        .peek(age -> age.setActivityId(activityDO.getId()))
        .forEach(ageService::insertSelective);
List<Gender> genderList = genderService.selectGenderlistByActivityId(id);
genderList.stream().peek(gender -> gender.setId(null))
        .peek(gender -> gender.setActivityId(activityDO.getId()))
        .forEach(genderService::insertSelective);

# 解决方案

使用泛型,几个实体类继承于一个接口,几个 service 类继承于一个接口。

由于 service 类的接口需要装配到 Spring 中,并注入进来,最后并不能使代码更简单,还是采用这种看起来很蠢的代码吧。