package com.ks.lijin.service.remote;
|
|
import com.ks.lijin.exception.LiJinException;
|
import com.ks.lijin.exception.LiJinExpendRecordException;
|
import com.ks.lijin.exception.TaoKeApiException;
|
import com.ks.lijin.mapper.LiJinExpendRecordMapper;
|
import com.ks.lijin.pojo.DO.LiJinExpendRecord;
|
import com.ks.lijin.pojo.DO.LiJinProviderAccount;
|
import com.ks.lijin.pojo.DO.LiJinProviderNotice;
|
import com.ks.lijin.pojo.DTO.LiJinCreateParam;
|
import com.ks.lijin.pojo.DTO.taobao.TaoBaoGoodsBrief;
|
import com.ks.lijin.pojo.DTO.taobao.TaoKeAppInfo;
|
import com.ks.lijin.pojo.DTO.taobao.TaoLiJinDTO;
|
import com.ks.lijin.pojo.Enums.NoticeTypeEnum;
|
import com.ks.lijin.query.ExpendRecordQuery;
|
import com.ks.lijin.service.LiJinExpendRecordService;
|
import com.ks.lijin.service.LiJinProviderAccountService;
|
import com.ks.lijin.service.LiJinProviderNoticeService;
|
import com.ks.lijin.utils.taobao.TaoKeApiUtil;
|
import org.apache.dubbo.config.annotation.Service;
|
import org.springframework.core.task.TaskExecutor;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.List;
|
|
@Service(version = "1.0")
|
public class LiJinExpendRecordServiceImpl implements LiJinExpendRecordService {
|
|
@Resource(name = "taskExecutor")
|
private TaskExecutor executor;
|
|
@Resource
|
private LiJinExpendRecordMapper liJinExpendRecordMapper;
|
|
@Resource
|
private LiJinProviderNoticeService liJinProviderNoticeService;
|
|
@Resource
|
private LiJinProviderAccountService liJinProviderAccountService;
|
|
@Override
|
public long count(LiJinExpendRecord obj) {
|
ExpendRecordQuery query = new ExpendRecordQuery();
|
// query.appId = appId;
|
// query.uid = uid;
|
return liJinExpendRecordMapper.count(query);
|
}
|
|
|
@Override
|
public List<LiJinExpendRecord> listByPage(int page, int pageSize, LiJinExpendRecord obj) {
|
ExpendRecordQuery query = new ExpendRecordQuery();
|
// query.appId = appId;
|
// query.uid = uid;
|
// query.drawStateList = Arrays.asList(new Integer[]{LuckyActivityJoinRecord.DRAW_STATE_UNOPEN});
|
query.start = (page - 1) * pageSize;
|
query.count = pageSize;
|
return liJinExpendRecordMapper.listByPage(query);
|
}
|
|
@Override
|
public void save(LiJinExpendRecord t) {
|
if (t.getId() != null) {
|
t.setUpdateTime(new Date());
|
liJinExpendRecordMapper.updateByPrimaryKeySelective(t);
|
} else {
|
t.setCreateTime(new Date());
|
liJinExpendRecordMapper.insertSelective(t);
|
}
|
}
|
|
@Override
|
public void delete(Long id) {
|
liJinExpendRecordMapper.deleteByPrimaryKey(id);
|
}
|
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public LiJinExpendRecord createLiJin(String uid, BigDecimal money, TaoBaoGoodsBrief goods)
|
throws LiJinExpendRecordException {
|
|
// TODO 验证次数
|
int expendNum = countTodayNumByExpend(uid);
|
// TODO 验证金额
|
BigDecimal bigDecimal = countTodayMoneyByExpend(uid);
|
|
|
Date date = new Date();
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
SimpleDateFormat formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String date_str = format.format(date);
|
String sendEndTime_str = date_str + " 22:00:00";
|
String useEndTime_str = date_str + " 23:59:59";
|
|
/* 创建淘礼金 */
|
String name = "自购淘礼金红包";
|
// 发放开始时间
|
Date sendStartTime = date;
|
// 发放截止时间 - 分享当日22:00
|
Date sendEndTime = null;
|
// 使用结束日期 - 分享当日 23:59
|
Date useEndTime = null;
|
|
try {
|
sendEndTime = formatStr.parse(sendEndTime_str);
|
useEndTime = formatStr.parse(useEndTime_str);
|
} catch (ParseException e2) {
|
e2.printStackTrace();
|
}
|
|
LiJinCreateParam params = new LiJinCreateParam();
|
params.setTitle("自购淘礼金红包");
|
params.setUid(uid + "");
|
params.setGoodsId(goods.getAuctionId());
|
params.setUseEndTime(useEndTime);
|
params.setSendStartTime(sendStartTime);
|
params.setSendEndTime(sendEndTime);
|
params.setNum(1);
|
params.setMoney(money);
|
|
// params.setPid(); // pid缺少 TODO
|
// params.setAppkey();
|
// params.setAppsecret();
|
|
return createTaoLiJin(params);
|
}
|
|
|
@Transactional(rollbackFor = Exception.class)
|
public LiJinExpendRecord createTaoLiJin(LiJinCreateParam params) throws LiJinExpendRecordException {
|
String appkey =params.getAppkey();
|
String appsecret = params.getAppsecret();
|
|
// 创建淘礼金红包
|
TaoLiJinDTO taoLiJinDTO = null;
|
try {
|
taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(params.getGoodsId(), params.getTitle(), params.getMoney(),
|
params.getNum(), params.getSendStartTime(), params.getSendEndTime(),
|
params.getUseStartTime(), params.getUseEndTime(), new TaoKeAppInfo(appkey, appsecret, params.getPid()));
|
} catch (LiJinException e) {
|
// 通知相应供应商 TODO
|
executor.execute(new Runnable() {
|
@Override
|
public void run() {
|
LiJinProviderAccount account = liJinProviderAccountService.getByAppInfo(appkey, appsecret);
|
if (account == null) {
|
return;
|
}
|
|
LiJinProviderNotice notice = new LiJinProviderNotice();
|
notice.setRead(false);
|
notice.setProviderId(account.getProviderId());
|
|
if (e.getCode() == LiJinException.CODE_TLJ_FORBIDDEN) {
|
// 该商品不支持创建淘礼金红包
|
} else if (e.getCode() == LiJinException.CODE_TLJ_NO_MONEY) {
|
// 官方玩法钱包余额不足
|
notice.setTitle("玩法钱包余额不足");
|
notice.setContent("账号:"+ appkey +"官方玩法钱包余额不足");
|
notice.setType(NoticeTypeEnum.noMoney.name());
|
liJinProviderNoticeService.save(notice);
|
} else if (e.getCode() == LiJinException.CODE_TLJ_UN_PAID) {
|
// 未创建账户
|
}
|
}
|
});
|
} catch (TaoKeApiException e1) {
|
// TODO
|
}
|
|
if (taoLiJinDTO == null) {
|
throw new LiJinExpendRecordException(101, "淘宝API推广红包创建失败");
|
}
|
|
// 保存记录
|
LiJinExpendRecord record = new LiJinExpendRecord();
|
record.setUid(params.getUid());
|
record.setGoodsId(params.getGoodsId() + "");
|
record.setTitle(params.getTitle());
|
record.setNum(params.getNum());
|
record.setMoney(params.getMoney());
|
record.setRightsId(taoLiJinDTO.getRightsId());
|
record.setSendUrl(taoLiJinDTO.getSendUrl());
|
record.setCreateTime(new Date());
|
liJinExpendRecordMapper.insertSelective(record);
|
|
return record;
|
}
|
|
@Override
|
public int countTodayNumByExpend(String uid) {
|
return liJinExpendRecordMapper.countTodayNumByExpend(uid);
|
}
|
|
@Override
|
public BigDecimal countTodayMoneyByExpend(String uid) {
|
return liJinExpendRecordMapper.countTodayMoneyByExpend(uid);
|
}
|
|
}
|