package com.yeshi.makemoney.app.service.impl.team;
|
|
import java.io.InputStream;
|
import java.lang.Exception;
|
import javax.annotation.Resource;
|
|
import com.yeshi.makemoney.app.entity.config.SystemConfigKey;
|
import com.yeshi.makemoney.app.entity.team.SpreadImg;
|
import com.yeshi.makemoney.app.entity.user.UserExtraInfo;
|
import com.yeshi.makemoney.app.entity.user.UserInfo;
|
import com.yeshi.makemoney.app.exception.team.SpreadImgException;
|
import com.yeshi.makemoney.app.exception.team.UserSpreadImgException;
|
import com.yeshi.makemoney.app.exception.user.UserInfoException;
|
import com.yeshi.makemoney.app.service.inter.config.SystemConfigService;
|
import com.yeshi.makemoney.app.service.inter.team.SpreadImgService;
|
import com.yeshi.makemoney.app.service.inter.user.UserExtraInfoService;
|
import com.yeshi.makemoney.app.service.inter.user.UserInfoService;
|
import com.yeshi.makemoney.app.utils.DrawImageUtil;
|
import com.yeshi.makemoney.app.utils.ImageUtil;
|
import org.springframework.stereotype.Service;
|
|
import java.net.URLDecoder;
|
import java.util.*;
|
|
import org.yeshi.utils.HttpUtil;
|
import org.yeshi.utils.StringUtil;
|
import org.yeshi.utils.bean.BeanUtil;
|
|
import com.yeshi.makemoney.app.dao.team.UserSpreadImgDao;
|
import com.yeshi.makemoney.app.entity.team.UserSpreadImg;
|
import com.yeshi.makemoney.app.service.inter.team.UserSpreadImgService;
|
import com.yeshi.makemoney.app.service.query.team.UserSpreadImgQuery;
|
import com.yeshi.makemoney.app.dao.team.UserSpreadImgDao.DaoQuery;
|
|
import org.springframework.data.mongodb.core.query.Criteria;
|
import org.springframework.data.mongodb.core.query.Query;
|
import org.yeshi.utils.entity.FileUploadResult;
|
import org.yeshi.utils.tencentcloud.COSManager;
|
|
@Service
|
public class UserSpreadImgServiceImpl implements UserSpreadImgService {
|
|
@Resource
|
private UserSpreadImgDao userSpreadImgDao;
|
|
@Resource
|
private SpreadImgService spreadImgService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private SystemConfigService systemConfigService;
|
|
@Resource
|
private UserExtraInfoService userExtraInfoService;
|
|
@Override
|
public List<UserSpreadImg> list(UserSpreadImgQuery userSpreadImgQuery, int page, int pageSize) {
|
DaoQuery daoQuery = new DaoQuery();
|
try {
|
BeanUtil.copyProperties(userSpreadImgQuery, daoQuery);
|
} catch (IllegalAccessException e) {
|
e.printStackTrace();
|
}
|
daoQuery.start = (page - 1) * pageSize;
|
daoQuery.count = pageSize;
|
return userSpreadImgDao.list(daoQuery);
|
}
|
|
@Override
|
public long count(UserSpreadImgQuery userSpreadImgQuery) {
|
DaoQuery daoQuery = new DaoQuery();
|
try {
|
BeanUtil.copyProperties(userSpreadImgQuery, daoQuery);
|
} catch (IllegalAccessException e) {
|
e.printStackTrace();
|
}
|
return userSpreadImgDao.count(daoQuery);
|
}
|
|
@Override
|
public UserSpreadImg get(String id) {
|
Query query = new Query();
|
query.addCriteria(Criteria.where("_id").is(id));
|
return userSpreadImgDao.findOne(query);
|
}
|
|
@Override
|
public void add(UserSpreadImg userSpreadImg) throws Exception {
|
//查询主键ID是否存在
|
if (userSpreadImgDao.get(userSpreadImg.getId()) != null) {
|
throw new Exception("已存在");
|
}
|
|
if (userSpreadImg.getCreateTime() == null) {
|
userSpreadImg.setCreateTime(new Date());
|
}
|
//保存
|
userSpreadImgDao.save(userSpreadImg);
|
}
|
|
@Override
|
public void update(UserSpreadImg userSpreadImg) {
|
if (userSpreadImg.getUpdateTime() == null) {
|
userSpreadImg.setUpdateTime(new Date());
|
}
|
//更新
|
userSpreadImgDao.updateSelective(userSpreadImg);
|
}
|
|
@Override
|
public void delete(List<String> idList) {
|
for (String id : idList) {
|
userSpreadImgDao.delete(id);
|
}
|
}
|
|
@Override
|
public List<UserSpreadImg> getUserSpreadImgs(Long uid) {
|
DaoQuery daoQuery = new DaoQuery();
|
daoQuery.uid = uid;
|
daoQuery.count = 20;
|
return userSpreadImgDao.list(daoQuery);
|
}
|
|
@Override
|
public void drawImgs(Long uid, String inviteCode) throws UserInfoException, SpreadImgException, UserSpreadImgException {
|
|
UserInfo user = userInfoService.get(uid);
|
if (user == null) {
|
throw new UserInfoException(UserInfoException.CODE_NOT_EXIST, "用户不存在");
|
}
|
|
//获取目前可用的邀请图素材
|
List<SpreadImg> list = spreadImgService.listSpreadImgs(user.getSystem(), new Date());
|
if (list == null || list.size() == 0) {
|
throw new SpreadImgException(SpreadImgException.CODE_NOT_EXIST, "没有可用的素材");
|
}
|
//获取所有素材的MD5
|
List<String> resourceMD5List = new ArrayList<>();
|
Map<String, SpreadImg> resourceMap = new HashMap<>();
|
for (SpreadImg img : list) {
|
resourceMD5List.add(img.getId());
|
resourceMap.put(img.getId(), img);
|
}
|
|
//获取用户现有的分享图
|
List<UserSpreadImg> userSpreadImgList = getUserSpreadImgs(uid);
|
List<String> md5List = new ArrayList<>();
|
Map<String, UserSpreadImg> userMap = new HashMap<>();
|
for (UserSpreadImg img : userSpreadImgList) {
|
md5List.add(img.getSourceMD5());
|
userMap.put(img.getSourceMD5(), img);
|
}
|
|
//删除素材中不存在的图片
|
|
//临时变量,防止数据被污染
|
List<String> tempMD5List=new ArrayList<>();
|
tempMD5List.addAll(md5List);
|
tempMD5List.removeAll(resourceMD5List);
|
for (String md5 : tempMD5List) {
|
deleteUserSpreadImg(userMap.get(md5));
|
}
|
|
//添加素材中的图片
|
resourceMD5List.removeAll(md5List);
|
for (String md5 : resourceMD5List) {
|
SpreadImg spreadImg = resourceMap.get(md5);
|
if (spreadImg != null) {
|
UserSpreadImg img = new UserSpreadImg();
|
try {
|
InputStream inputStream = DrawImageUtil.drawInvite(HttpUtil.getImage(spreadImg.getUrl()), inviteCode, systemConfigService.getValueCache(user.getSystem(), SystemConfigKey.appLink));
|
String key = "/imgs/userspreadimg/" + uid + "-" + md5 + ".jpg";
|
FileUploadResult result = COSManager.getInstance().uploadFile(inputStream, key);
|
if (result == null) {
|
throw new Exception("图片上传出错");
|
}
|
img.setUrl(ImageUtil.getCOSImageUrl(key));
|
} catch (Exception e) {
|
throw new UserSpreadImgException(UserSpreadImgException.CODE_DRAW_IMG_ERROR, e.getMessage());
|
}
|
img.setUid(uid);
|
img.setSourceMD5(spreadImg.getId());
|
img.setId(img.toId());
|
userSpreadImgDao.save(img);
|
}
|
}
|
}
|
|
@Override
|
public void drawImgs(Long uid) throws UserInfoException, SpreadImgException, UserSpreadImgException {
|
UserExtraInfo extraInfo = userExtraInfoService.get(uid);
|
if (extraInfo == null || StringUtil.isNullOrEmpty(extraInfo.getInviteCode())) {
|
throw new UserInfoException(UserInfoException.CODE_NO_INVITE_CODE, "邀请码不存在");
|
}
|
drawImgs(uid, extraInfo.getInviteCode());
|
}
|
|
private void deleteUserSpreadImg(UserSpreadImg img) {
|
if (img == null) {
|
return;
|
}
|
//删除实体
|
userSpreadImgDao.delete(img.getId());
|
//删除图片
|
COSManager.getInstance().deleteFileByKey(ImageUtil.getUrlKey(img.getUrl()));
|
}
|
|
|
|
|
}
|