package com.yeshi.fanli.service.impl.user;
|
|
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 javax.annotation.Resource;
|
|
import org.springframework.stereotype.Service;
|
|
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.entity.bus.user.ThreeSaleDetail;
|
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.service.inter.user.invite.ThreeSaleDetailService;
|
import com.yeshi.fanli.util.RedisManager;
|
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;
|
|
@Service
|
public class PreviewInfoServiceImpl implements PreviewInfoService {
|
|
@Resource
|
private PreviewInfoDao previewInfoDao;
|
|
@Resource
|
private BindingAccountService bindingAccountService;
|
|
@Resource
|
private RedisManager redisManager;
|
|
@Resource
|
private ThreeSaleDetailService threeSaleDetailService;
|
|
|
|
|
@Override
|
public void save(Long createUid, Long preUid, PreviewEnum type, String content) {
|
String id = StringUtil.Md5(createUid + "#" + type.name());
|
PreviewInfo info = new PreviewInfo();
|
info.setId(id);
|
info.setUid(preUid);
|
info.setCreateUid(createUid);
|
info.setContent(content);
|
info.setType(type);
|
info.setUpdateTime(new Date());
|
previewInfoDao.save(info);
|
|
if (type == PreviewEnum.extractRecord) {
|
return;
|
}
|
|
if (StringUtil.isNullOrEmpty(content)) {
|
removePreview(preUid, type);
|
} else {
|
adddPreview(preUid, type, content);
|
}
|
|
}
|
|
// 缓存10分钟
|
private void adddPreview(Long uid, PreviewEnum type, String content) {
|
String key = StringUtil.Md5("preview" + uid + "#" + type.name());
|
redisManager.cacheCommonString(key, content, 60 * 10);
|
}
|
|
// 缓存10分钟
|
private void removePreview(Long uid, PreviewEnum type) {
|
String key = StringUtil.Md5("preview" + uid + "#" + type.name());
|
redisManager.removeCommonString(key);
|
}
|
|
|
@Override
|
public String getRedisContent(Long uid, PreviewEnum previewEnum) {
|
String key = StringUtil.Md5("preview" + uid + "#" + previewEnum.name());
|
return redisManager.getCommonString(key);
|
}
|
|
|
@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, 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 (money == null || money.compareTo(BigDecimal.ZERO) <= 0)
|
throw new PreviewInfoException(1, "请输入正确的金额");
|
if (StringUtil.isNullOrEmpty(time))
|
throw new PreviewInfoException(1, "提现时间不能为空");
|
|
Date parse = TimeUtil.parseDotCommon2(time);
|
if (parse == null)
|
throw new PreviewInfoException(1, "请输入正确的时间格式,如:2020.01.01 01:01");
|
|
|
Gson gson = new Gson();
|
List<Extract> list = new ArrayList<Extract>();
|
|
Extract extract = new Extract();
|
extract.setName(alipay.getName());
|
extract.setAccount(alipay.getAccount());
|
extract.setMoney(money);
|
extract.setReceiveTime(TimeUtil.parseDotCommon2(time));
|
extract.setId(java.lang.System.currentTimeMillis());
|
|
String id = StringUtil.Md5(uid + "#" + PreviewEnum.extractRecord.name());
|
PreviewInfo previewInfo = previewInfoDao.get(id);
|
if (previewInfo == null) {
|
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, uid, PreviewEnum.extractRecord, gson.toJson(list));
|
}
|
|
|
|
@Override
|
public void previewExtractRecord(Long uid) throws PreviewInfoException{
|
String id = StringUtil.Md5(uid + "#" + PreviewEnum.extractRecord.name());
|
PreviewInfo previewInfo = previewInfoDao.get(id);
|
if (previewInfo == null) {
|
throw new PreviewInfoException(1, "请添加提现记录信息");
|
}
|
|
String content = previewInfo.getContent();
|
if (StringUtil.isNullOrEmpty(content)) {
|
throw new PreviewInfoException(1, "请添加提现记录信息");
|
}
|
|
adddPreview(uid, PreviewEnum.extractRecord, content);
|
}
|
|
|
|
@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, uid, PreviewEnum.extractRecord, gson.toJson(list));
|
|
// 取消预览
|
removePreview(uid, PreviewEnum.extractRecord);
|
}
|
|
|
|
@Override
|
public void saveMineInfo(MineInfoVO infoVO) throws PreviewInfoException {
|
Long uid = infoVO.getUid();
|
Long preUid = infoVO.getPreUid();
|
if (uid == null || preUid == null)
|
throw new PreviewInfoException(1, "请完善所有数据");
|
|
if (uid.longValue() != preUid.longValue()) {
|
// preUid 必须是下级
|
ThreeSaleDetail detail = threeSaleDetailService.getByBossUidAndWorkerUid(uid, preUid);
|
if (detail == null)
|
throw new PreviewInfoException(1, preUid + "不是您的下级");
|
}
|
|
if (StringUtil.isNullOrEmpty(infoVO.getSelfRebate()) || StringUtil.isNullOrEmpty(infoVO.getShareBonus())
|
|| StringUtil.isNullOrEmpty(infoVO.getTeamBonus())) {
|
throw new PreviewInfoException(1, "请完善所有数据");
|
}
|
|
Gson gson = new Gson();
|
save(uid, preUid, 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, "请输入创建时间");
|
Date parse = TimeUtil.parseDotCommon2(time);
|
if (parse == null)
|
throw new PreviewInfoException(1, "请输入正确的时间格式,如:2020.01.01 01:01");
|
|
|
String content = ""; // TODO
|
// save(uid, PreviewEnum.moneyArrival, gson.toJson(infoVO));
|
return content;
|
}
|
}
|