package com.yeshi.fanli.service.impl.user;
|
|
import java.io.File;
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.Comparator;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.UUID;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.yeshi.utils.FileUtil;
|
import org.yeshi.utils.tencentcloud.COSManager;
|
|
import com.google.gson.Gson;
|
import com.google.gson.reflect.TypeToken;
|
import com.yeshi.fanli.dao.user.PreviewInfoDao;
|
import com.yeshi.fanli.entity.bus.user.BindingAccount;
|
import com.yeshi.fanli.entity.bus.user.Extract;
|
import com.yeshi.fanli.entity.bus.user.PreviewInfo;
|
import com.yeshi.fanli.entity.bus.user.PreviewInfo.PreviewEnum;
|
import com.yeshi.fanli.exception.user.PreviewInfoException;
|
import com.yeshi.fanli.service.inter.money.extract.BindingAccountService;
|
import com.yeshi.fanli.service.inter.user.PreviewInfoService;
|
import com.yeshi.fanli.util.FilePathEnum;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.TimeUtil;
|
import com.yeshi.fanli.vo.money.MoneyStatisticVO;
|
import com.yeshi.fanli.vo.user.MineInfoVO;
|
|
import net.coobird.thumbnailator.Thumbnails;
|
|
@Service
|
public class PreviewInfoServiceImpl implements PreviewInfoService {
|
|
@Resource
|
private PreviewInfoDao previewInfoDao;
|
|
@Resource
|
private BindingAccountService bindingAccountService;
|
|
|
|
@Override
|
public void save(Long uid, PreviewEnum type, String content) {
|
String id = StringUtil.Md5(uid + "#" + type.name());
|
|
PreviewInfo info = new PreviewInfo();
|
info.setId(id);
|
info.setUid(uid);
|
info.setContent(content);
|
info.setType(type);
|
info.setUpdateTime(new Date());
|
previewInfoDao.save(info);
|
}
|
|
@Override
|
public PreviewInfo get(Long uid, PreviewEnum previewEnum) {
|
String id = StringUtil.Md5(uid + "#" + previewEnum.name());
|
return previewInfoDao.get(id);
|
}
|
|
@Override
|
public void saveMoneyInfo(Long uid, MoneyStatisticVO vo) throws PreviewInfoException {
|
if (vo == null)
|
throw new PreviewInfoException(1, "请完善页面信息");
|
save(uid, PreviewEnum.moneyInfo, new Gson().toJson(vo));
|
}
|
|
|
@Override
|
public void saveExtractRecord(Long uid, String time, BigDecimal money) throws PreviewInfoException {
|
BindingAccount alipay = bindingAccountService.getBindingAccountByUidAndType(uid, BindingAccount.TYPE_ALIPAY);
|
if (alipay == null)
|
throw new PreviewInfoException(1, "未绑定提现账号");
|
if (StringUtil.isNullOrEmpty(time))
|
throw new PreviewInfoException(1, "提现时间不能为空");
|
if (money.compareTo(BigDecimal.ZERO) <= 0)
|
throw new PreviewInfoException(1, "提现金额不能小于0");
|
|
Gson gson = new Gson();
|
List<Extract> list = null;
|
|
Extract extract = new Extract();
|
extract.setName(alipay.getName());
|
extract.setAccount(alipay.getAccount());
|
extract.setMoney(money);
|
extract.setReceiveTime(TimeUtil.parseDotCommon(time));
|
extract.setId(java.lang.System.currentTimeMillis());
|
|
String id = StringUtil.Md5(uid + "#" + PreviewEnum.extractRecord.name());
|
PreviewInfo previewInfo = previewInfoDao.get(id);
|
if (previewInfo == null) {
|
list = new ArrayList<Extract>();
|
list.add(extract);
|
} else {
|
String content = previewInfo.getContent();
|
if (!StringUtil.isNullOrEmpty(content)) {
|
list = gson.fromJson(content, new TypeToken<ArrayList<Extract>>() {}.getType());
|
}
|
|
if (list == null) {
|
list = new ArrayList<>();
|
}
|
list.add(extract);
|
|
// 与之前数据比对排序
|
if (list.size() > 1) {
|
Comparator<Extract> cm = new Comparator<Extract>() {
|
@Override
|
public int compare(Extract o1, Extract o2) {
|
return (int) (o2.getReceiveTime().getTime() - o1.getReceiveTime().getTime());
|
}
|
};
|
Collections.sort(list, cm);
|
}
|
}
|
save(uid, PreviewEnum.extractRecord, gson.toJson(list));
|
}
|
|
|
|
@Override
|
public void deleteExtractRecord(Long uid, long tid) {
|
String id = StringUtil.Md5(uid + "#" + PreviewEnum.extractRecord.name());
|
PreviewInfo previewInfo = previewInfoDao.get(id);
|
if (previewInfo == null) {
|
return;
|
}
|
|
String content = previewInfo.getContent();
|
if (StringUtil.isNullOrEmpty(content)) {
|
return;
|
}
|
|
Gson gson = new Gson();
|
List<Extract> list = gson.fromJson(content, new TypeToken<ArrayList<Extract>>() {}.getType());
|
if (list == null || list.size() == 0) {
|
return;
|
}
|
|
for (Extract extract: list) {
|
if (extract.getId() == tid) {
|
list.remove(extract);
|
break;
|
}
|
}
|
save(uid, PreviewEnum.extractRecord, gson.toJson(list));
|
}
|
|
|
|
@Override
|
public void saveMineInfo(MineInfoVO infoVO, MultipartFile file) throws Exception {
|
Long uid = infoVO.getUid();
|
if (file != null) {
|
// 谷歌压缩图片
|
String targetPath = FileUtil.getCacheDir() + "/preview" + uid + "_" + System.currentTimeMillis()+ ".jpg";
|
Thumbnails.of(file.getInputStream()).size(200, 200).toFile(targetPath);
|
// 执行上传
|
String filePath =FilePathEnum.userPreview.getPath() + UUID.randomUUID().toString().replace("-", "") + ".jpg";
|
String fileLink = COSManager.getInstance().uploadFile(new File(targetPath), filePath).getUrl();
|
// 删除本地图片
|
if (new File(targetPath).exists()) {
|
new File(targetPath).delete();
|
}
|
infoVO.setPortrait(fileLink);
|
|
// 删除之前上传图
|
String id = StringUtil.Md5(uid + "#" + PreviewEnum.mineInfo.name());
|
PreviewInfo previewInfo = previewInfoDao.get(id);
|
if (previewInfo != null && !StringUtil.isNullOrEmpty(previewInfo.getContent())) {
|
MineInfoVO dto = new Gson().fromJson(previewInfo.getContent(), MineInfoVO.class);
|
if (dto != null && StringUtil.isNullOrEmpty(dto.getPortrait()));
|
COSManager.getInstance().deleteFile(dto.getPortrait());
|
}
|
}
|
Gson gson = new Gson();
|
save(uid, PreviewEnum.mineInfo, gson.toJson(infoVO));
|
}
|
|
|
@Override
|
public String saveMoneyArrival(Long uid, BigDecimal money, String time,String orderNo) throws PreviewInfoException {
|
if (uid == null )
|
throw new PreviewInfoException(1, "请先登录");
|
if (money == null )
|
throw new PreviewInfoException(1, "请输入金额");
|
if(StringUtil.isNullOrEmpty(time))
|
throw new PreviewInfoException(1, "请输入创建时间");
|
if(StringUtil.isNullOrEmpty(time))
|
throw new PreviewInfoException(1, "请输入订单号");
|
String content = ""; // TODO
|
// save(uid, PreviewEnum.moneyArrival, gson.toJson(infoVO));
|
return content;
|
}
|
}
|