package com.yeshi.fanli.service.impl.help; import java.io.IOException; import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import org.yeshi.utils.tencentcloud.COSManager; import com.yeshi.fanli.dao.mybatis.help.HelpClassMapper; import com.yeshi.fanli.entity.AppVersionInfo; import com.yeshi.fanli.entity.bus.help.HelpClass; import com.yeshi.fanli.entity.bus.homemodule.AdActivityVersionControl; import com.yeshi.fanli.entity.bus.homemodule.FloatAD; import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture; import com.yeshi.fanli.entity.bus.homemodule.AdActivityVersionControl.AdActivityType; import com.yeshi.fanli.exception.banner.SwiperPictureException; import com.yeshi.fanli.exception.config.HelpClassException; import com.yeshi.fanli.exception.homemodule.FloatADException; import com.yeshi.fanli.service.inter.help.HelpClassService; import com.yeshi.fanli.service.inter.homemodule.AdActivityVersionControlService; import com.yeshi.fanli.util.FilePathEnum; import com.yeshi.fanli.util.StringUtil; @Service public class HelpClassServiceImpl implements HelpClassService { @Resource private HelpClassMapper helpClassMapper; @Resource private AdActivityVersionControlService adActivityVersionControlService; @Override public int deleteByPrimaryKeyBatch(List list) { return helpClassMapper.deleteByPrimaryKeyBatch(list); } @Override public HelpClass selectByPrimaryKey(Long id) { return helpClassMapper.selectByPrimaryKey(id); } @Override public void save(HelpClass record, MultipartFile file) throws HelpClassException, Exception{ if (record == null) throw new HelpClassException(1, "参数不能为空"); String name = record.getName(); if (StringUtil.isNullOrEmpty(name)) throw new HelpClassException(1, "名称不能为空"); try { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String startTime_str = record.getStartTime_str(); if (startTime_str != null && startTime_str.trim().length() > 0) { startTime_str = startTime_str.replaceAll("T", " "); record.setStartTime(format.parse(startTime_str)); } String endTime_str = record.getEndTime_str(); if (endTime_str != null && endTime_str.trim().length() > 0) { endTime_str = endTime_str.replaceAll("T", " "); record.setEndTime(format.parse(endTime_str)); } } catch (ParseException e) { e.printStackTrace(); } // 图片上传 String picture = null; if (file != null) { InputStream inputStream = file.getInputStream(); String contentType = file.getContentType(); String type = contentType.substring(contentType.indexOf("/") + 1); String filePath =FilePathEnum.helpClass.getPath() + UUID.randomUUID().toString().replace("-", "") + "." + type; picture = COSManager.getInstance().uploadFile(inputStream, filePath).getUrl(); } Integer showState = record.getShowState(); if (showState == null) record.setShowState(0); record.setUpdateTime(new Date()); if (record.getId() == null) { int maxOrder = helpClassMapper.getMaxOrder(); record.setSort(maxOrder + 1); record.setCreateTime(new Date()); helpClassMapper.insertSelective(record); } else { // 修改 HelpClass resultObj = helpClassMapper.selectByPrimaryKey(record.getId()); if (resultObj == null) throw new FloatADException(1, "修改内容已不存在"); if (picture != null && picture.trim().length() > 0) { String pictureOld = resultObj.getPicture(); if (pictureOld != null && pictureOld.trim().length() > 0) { COSManager.getInstance().deleteFile(pictureOld); } // 存储新图 record.setPicture(picture); } else { record.setPicture(resultObj.getPicture()); } record.setSort(resultObj.getSort()); record.setCreateTime(resultObj.getCreateTime()); helpClassMapper.updateByPrimaryKey(record); } } @Override public int updateShowState(Long id) throws HelpClassException { if (id == null) { throw new HelpClassException(1, "传递参数不能为空"); } HelpClass helpClass = helpClassMapper.selectByPrimaryKey(id); if (helpClass == null) { throw new HelpClassException(1, "更新数据已不存在"); } Integer showState = helpClass.getShowState(); if (showState == null || showState == 0) { showState = 1; } else { showState = 0; } HelpClass help = new HelpClass(); help.setId(id); help.setShowState(showState); help.setUpdateTime(new Date()); helpClassMapper.updateByPrimaryKeySelective(help); return showState; } @Override public void updateSort(Integer moveType, Long id) throws HelpClassException { if (id == null || moveType == null) { throw new HelpClassException(1, "传递参数不能为空"); } HelpClass helpClass = helpClassMapper.selectByPrimaryKey(id); if (helpClass == null) { throw new HelpClassException(1, "更新数据已不存在"); } HelpClass changeObjct = helpClassMapper.getChangeOrder(moveType, helpClass.getSort()); if (changeObjct == null) { throw new HelpClassException(1, "已经是最边缘位置"); } else { Integer changeSort = changeObjct.getSort(); // 交换排序序号 changeObjct.setSort(helpClass.getSort()); helpClassMapper.updateByPrimaryKeySelective(changeObjct); helpClass.setSort(changeSort); helpClassMapper.updateByPrimaryKeySelective(helpClass); } } @Override public void uploadPic(MultipartFile file, Long id) throws HelpClassException, IOException { if (id == null || file == null) { throw new HelpClassException(1, "传递参数不能为空"); } HelpClass helpClass = helpClassMapper.selectByPrimaryKey(id); if (helpClass == null) { throw new HelpClassException(1, "更新数据已不存在"); } InputStream inputStream = file.getInputStream(); String contentType = file.getContentType(); String type = contentType.substring(contentType.indexOf("/") + 1); String filePath =FilePathEnum.helpClass.getPath()+ UUID.randomUUID().toString().replace("-", "") + "." + type; /* 修改图片时,先删除已存在图片 */ String picture = helpClass.getPicture(); if (!StringUtil.isNullOrEmpty(picture)) { COSManager.getInstance().deleteFile(picture); } String fileUrl = COSManager.getInstance().uploadFile(inputStream, filePath).getUrl(); /* 更新数据库信息 */ if (!StringUtil.isNullOrEmpty(fileUrl)) { helpClass.setUpdateTime(new Date()); helpClass.setPicture(fileUrl); helpClassMapper.updateByPrimaryKeySelective(helpClass); } } @Override public List query(int start, int count, String key, Integer state) throws HelpClassException { return helpClassMapper.listQuery(start, count, key, state); } @Override public long countQuery(String key, Integer state) { return helpClassMapper.countQuery(key, state); } @Override public List getClassByState(Integer state) throws HelpClassException { return helpClassMapper.getClassByState(state); } @Override public List getProvidedClass() throws HelpClassException { return helpClassMapper.getProvidedClass(); } @Transactional(rollbackFor = Exception.class) @Override public void setVersions(Long id, List versions) throws HelpClassException { HelpClass helpClass = helpClassMapper.selectByPrimaryKey(id); if (helpClass == null) { throw new HelpClassException(1, "此信息不存在,请刷新重试"); } Set oldSet = new HashSet<>(); List versionList = adActivityVersionControlService .listByTypeAndSourceId(AdActivityType.helpClass, id); if (versionList != null) { for (AdActivityVersionControl control : versionList) oldSet.add(control.getVersion().getId()); } Set newSet = new HashSet<>(); for (Long version : versions) { newSet.add(version); } Set delSet = new HashSet<>(); delSet.addAll(oldSet); delSet.removeAll(newSet); for (Long versionId : delSet) { adActivityVersionControlService.deleteBySourceAndVersion(id, AdActivityType.helpClass, versionId); } Set 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.helpClass); control.setVersion(new AppVersionInfo(versionId)); try { adActivityVersionControlService.addVersionControl(control); } catch (Exception e) { throw new HelpClassException(2, e.getMessage()); } } } }