package com.yeshi.fanli.service.impl.help;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
|
import javax.annotation.Resource;
|
|
import com.yeshi.fanli.entity.SystemEnum;
|
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.yeshi.fanli.dao.mybatis.help.AppPageNotificationMapper;
|
import com.yeshi.fanli.entity.AppVersionInfo;
|
import com.yeshi.fanli.entity.bus.help.AppPageNotification;
|
import com.yeshi.fanli.entity.bus.homemodule.AdActivityVersionControl;
|
import com.yeshi.fanli.entity.bus.homemodule.FloatAD;
|
import com.yeshi.fanli.entity.bus.homemodule.AdActivityVersionControl.AdActivityType;
|
import com.yeshi.fanli.entity.common.JumpDetailV2;
|
import com.yeshi.fanli.exception.banner.SwiperPictureException;
|
import com.yeshi.fanli.service.inter.config.AppVersionService;
|
import com.yeshi.fanli.service.inter.help.AppPageNotificationService;
|
import com.yeshi.fanli.service.inter.homemodule.AdActivityVersionControlService;
|
import com.yeshi.fanli.util.StringUtil;
|
|
@Service
|
public class AppPageNotificationServiceImpl implements AppPageNotificationService {
|
|
@Resource
|
private AppPageNotificationMapper appPageNotificationMapper;
|
|
@Resource
|
private AppVersionService appVersionService;
|
|
@Resource
|
private AdActivityVersionControlService adActivityVersionControlService;
|
|
@Override
|
public AppPageNotification getAppPageNotificationByType(String type, SystemEnum system) {
|
|
return appPageNotificationMapper.selectByType(type,system);
|
}
|
|
@Cacheable(value = "configCache", key = "'getValidNotificationByTypeCache-'+#type+'-'+ #platform+'-'+#versionCode+'-'+#system")
|
@Override
|
public AppPageNotification getValidNotificationByTypeCache(String type, String platform, Integer versionCode, SystemEnum system) {
|
List<AppPageNotification> recordList = appPageNotificationMapper.listValidByType(type,system);
|
if (recordList == null || recordList.size() == 0)
|
return null;
|
|
// 过滤版本
|
AppVersionInfo app = appVersionService.getClientVersion(platform, versionCode,system);
|
if (app == null) {
|
return null;
|
}
|
List<Long> versionIdList = new ArrayList<>();
|
versionIdList.add(app.getId());
|
|
List<Long> sourceIdList = new ArrayList<>();
|
for (AppPageNotification an : recordList)
|
sourceIdList.add(an.getId());
|
Set<Long> sourceIds = adActivityVersionControlService.filterSourceIdByVersion(sourceIdList,
|
AdActivityType.notification, versionIdList);
|
if (sourceIds == null || sourceIds.size() == 0)
|
return null;
|
long sourceId = sourceIds.iterator().next();
|
|
for (AppPageNotification record : recordList) {
|
if (record.getId().longValue() == sourceId)
|
return record;
|
}
|
return null;
|
}
|
|
@Override
|
public void addAppPageNotification(AppPageNotification apn) throws Exception {
|
if (apn == null)
|
return;
|
if (apn.getType() == null)
|
throw new Exception("类型为空");
|
AppPageNotification old = getAppPageNotificationByType(apn.getType().name(),apn.getSystem());
|
|
if (old != null)
|
throw new Exception("已存在改类型");
|
|
apn.setCreateTime(new Date());
|
apn.setUpdateTime(new Date());
|
apn.setMd5(StringUtil.Md5(apn.getType().name() + "#" + apn.getContent() + "#" + apn.getContentUrl()));
|
appPageNotificationMapper.insertSelective(apn);
|
}
|
|
@Override
|
public void insertSelective(AppPageNotification record) {
|
appPageNotificationMapper.insertSelective(record);
|
}
|
|
@Override
|
public void updateByPrimaryKey(AppPageNotification record) {
|
appPageNotificationMapper.updateByPrimaryKey(record);
|
}
|
|
@Override
|
public void updateByPrimaryKeySelective(AppPageNotification record) {
|
appPageNotificationMapper.updateByPrimaryKeySelective(record);
|
}
|
|
@Override
|
public AppPageNotification selectByPrimaryKey(Long id) {
|
return appPageNotificationMapper.selectByPrimaryKey(id);
|
}
|
|
@Override
|
public int deleteBatchByPrimaryKey(List<Long> list) {
|
return appPageNotificationMapper.deleteBatchByPrimaryKey(list);
|
}
|
|
@Override
|
public List<AppPageNotification> listQuery(long start, int count, String key, Integer show, Integer canClose, SystemEnum system) {
|
return appPageNotificationMapper.listQuery(start, count, key, show, canClose,system);
|
}
|
|
@Override
|
public long countQuery(String key, Integer show, Integer canClose, SystemEnum system) {
|
return appPageNotificationMapper.countQuery(key, show, canClose,system);
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void setVersions(Long id, List<Long> versions) throws Exception {
|
AppPageNotification record = appPageNotificationMapper.selectByPrimaryKey(id);
|
if (record == null) {
|
throw new Exception("专题不存在");
|
}
|
|
Set<Long> oldSet = new HashSet<>();
|
|
List<AdActivityVersionControl> versionList = adActivityVersionControlService
|
.listByTypeAndSourceId(AdActivityType.notification, id);
|
if (versionList != null) {
|
for (AdActivityVersionControl control : versionList)
|
oldSet.add(control.getVersion().getId());
|
}
|
|
Set<Long> newSet = new HashSet<>();
|
for (Long version : versions) {
|
newSet.add(version);
|
}
|
|
Set<Long> delSet = new HashSet<>();
|
delSet.addAll(oldSet);
|
delSet.removeAll(newSet);
|
for (Long versionId : delSet) {
|
adActivityVersionControlService.deleteBySourceAndVersion(id, AdActivityType.notification, versionId);
|
}
|
|
Set<Long> addSet = new HashSet<>();
|
addSet.addAll(newSet);
|
addSet.removeAll(oldSet);
|
// 添加映射
|
for (Long versionId : addSet) {
|
AdActivityVersionControl control = new AdActivityVersionControl();
|
control.setCreateTime(new Date());
|
control.setSourceId(id);
|
control.setType(AdActivityType.notification);
|
control.setVersion(new AppVersionInfo(versionId));
|
try {
|
adActivityVersionControlService.addVersionControl(control);
|
} catch (Exception e) {
|
throw new SwiperPictureException(2, e.getMessage());
|
}
|
}
|
}
|
|
}
|