package com.supwisdom.dlpay.system.service.impl;
import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.api.dao.CardDao;
-import com.supwisdom.dlpay.api.dao.PersonDao;
-import com.supwisdom.dlpay.api.dao.PersondtlDao;
-import com.supwisdom.dlpay.api.domain.TCard;
-import com.supwisdom.dlpay.api.domain.TPerson;
-import com.supwisdom.dlpay.api.domain.TPersondtl;
+import com.supwisdom.dlpay.api.dao.*;
+import com.supwisdom.dlpay.api.domain.*;
import com.supwisdom.dlpay.framework.dao.*;
import com.supwisdom.dlpay.framework.domain.*;
import com.supwisdom.dlpay.framework.util.DateUtil;
private SysparaDao sysparaDao;
@Autowired
private BusinessparaDao businessparaDao;
+ @Autowired
+ private ShopdtlDao shopdtlDao;
+ @Autowired
+ private AccountDao accountDao;
@Override
public LevelBean getLevel() {
}, pageable);
if (page.getContent() != null && page.getContent().size() > 0) {
- page.getContent().get(0).settPointsMain(tPointsMain);
+/* page.getContent().get(0).settPointsMain(tPointsMain);*/
+ for (TPointsdtl temp:page.getContent()){
+ temp.settPointsMain(tPointsMain);
+ }
}
return new PageResult<>(page);
}
@Override
public LevelBean getConpoints() {
Sort sort = new Sort(Sort.Direction.ASC, "id");
- List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype("month", sort);
- List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype("day", sort);
+ List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype(TradeDict.CONSUME_POINTS_MONTH, sort);
+ List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype(TradeDict.CONSUME_POINTS_DAY, sort);
LevelBean levelBean = new LevelBean();
if (!StringUtil.isEmpty(monthlist)) levelBean.setMonthList(monthlist);
if (!StringUtil.isEmpty(daylist)) levelBean.setDayList(daylist);
@Override
public Boolean singleHandlePoints(String userid, Double amount, String billno) throws ParseException {
- int rate = 1;
+ double rate = 1;
// 1.根据当天日期判断当天是否该用户的特殊日期或者生日,得到实际倍率
String nowDateTemp = DateUtil.getNow("yyyyMMdd");
TPerson person = personDao.findByUseridAndIdtype(userid, "idcard");
if (person != null && !StringUtil.isEmpty(person.getIdno())) {
String nowDate = DateUtil.getNow("MMdd");
- String brithdate = person.getIdno().substring(10, 4);
+ String brithdate = person.getIdno().substring(10, 14);
if (nowDate.equals(brithdate)) {
rate = 2;
}
}
//1.1判断不循环
- List<TPointsActive> noActives = pointsActiveDao.findAllByType("no");
+ List<TPointsActive> noActives = pointsActiveDao.findAllByType(TradeDict.ACTIVE_FLAG_NO);
for (TPointsActive noActivetemp : noActives) {
- if (rate < Integer.parseInt(noActivetemp.getRate())) {
+ if (rate < Double.parseDouble(noActivetemp.getRate())) {
String noStartdate = noActivetemp.getStartdate();
String noEnddate = noActivetemp.getEnddate();
if (DateUtil.compareDatetime(nowDateTemp, noStartdate) >= 0 && DateUtil.compareDatetime(noEnddate, nowDateTemp) >= 0) {
- rate = Integer.parseInt(noActivetemp.getRate());
+ rate = Double.parseDouble(noActivetemp.getRate());
}
}
}
//1.2判断年循环
- List<TPointsActive> yearActives = pointsActiveDao.findAllByType("year");
+ List<TPointsActive> yearActives = pointsActiveDao.findAllByType(TradeDict.ACTIVE_FLAG_YEAR);
for (TPointsActive yearActivetemp : yearActives) {
- if (rate < Integer.parseInt(yearActivetemp.getRate())) {
+ if (rate < Double.parseDouble(yearActivetemp.getRate())) {
String yearStartdate = yearActivetemp.getStartdate();
String yearEnddate = yearActivetemp.getEnddate();
String yearDateTemp = DateUtil.getNow("MMdd");
if (DateUtil.compareDatetime(yearDateTemp, yearStartdate) >= 0 && DateUtil.compareDatetime(yearEnddate, yearDateTemp) >= 0) {
- rate = Integer.parseInt(yearActivetemp.getRate());
+ rate = Double.parseDouble(yearActivetemp.getRate());
}
}
}
//1.3判断月循环
- List<TPointsActive> monthActives = pointsActiveDao.findAllByType("month");
+ List<TPointsActive> monthActives = pointsActiveDao.findAllByType(TradeDict.ACTIVE_FLAG_MONTH);
for (TPointsActive monthActivetemp : monthActives) {
- if (rate < Integer.parseInt(monthActivetemp.getRate())) {
+ if (rate < Double.parseDouble(monthActivetemp.getRate())) {
int weekNumber = DateUtil.howWeeksByMonth(nowDateTemp);
int weekday = DateUtil.getWeekday(nowDateTemp);
if ((weekday == 7 && weekNumber - 1 == monthActivetemp.getWeeknumber()) || weekNumber == monthActivetemp.getWeeknumber()) {
List<String> sList = Arrays.asList(monthActivetemp.getWeekday().split("[,]"));
for (String emp : sList) {
if (weekday == Integer.parseInt(emp)) {
- rate = Integer.parseInt(monthActivetemp.getRate());
+ rate = Double.parseDouble(monthActivetemp.getRate());
}
}
}
tPointsMainTemp = pointsMain.orElse(null);
Integer levelid = pointsMain.orElse(null).getLevelid();
if (levelid != null) {
- personLevel = personLevelDao.getOne(levelid);
+ personLevel = personLevelDao.findById(levelid).orElse(null);
} else {
if (pointsMain.orElse(null).getPoints() == null) {
pointsMain.orElse(null).setPoints(0);
//计算得到的积分
resultPoints = resultInt * personLevel.getSinglePoints();
//获得流水积分
- List<TPointsdtl> tPointsdtls = pointsDtlDao.findAllByUseridAndTypeAndFlagstatus(userid, "consume", "in");
+ List<TPointsdtl> tPointsdtls = pointsDtlDao.findAllByUseridAndTypeAndFlagstatusAndTransdateAndStatus(userid, TradeDict.CONSUME_FLAG_SINGLE, "in",DateUtil.getNow("yyyyMMdd"),"init");
int allPoints = tPointsdtls.stream().mapToInt(o -> Integer.parseInt(o.getPoints())).sum();
- TBusinesspara consumePointsLi = businessparaDao.findByParakey("consumePointsLi");
+ TBusinesspara consumePointsLi = businessparaDao.findByParakey(TradeDict.PARA_FLAG_CON);
int pointslimit = 10000;
if (consumePointsLi != null && !StringUtils.isEmpty(consumePointsLi.getParaval())) {
pointslimit = Integer.parseInt(consumePointsLi.getParaval());
if (allPoints + resultPoints >= pointslimit) {
resultPoints = pointslimit - allPoints;
}
+ }else {
+ resultPoints = 0;
}
}
+ //判断流水中是否有这条记录
+ TPointsdtl tPointsdtl = pointsDtlDao.findAllByUseridAndBillnoAndType(userid, billno, TradeDict.CONSUME_FLAG_SINGLE);
+ if(tPointsdtl!=null){
+ return false;
+ }
//4. 对积分的主子表和流水表进行添加,查询用户的积分,得到的积分去查询等级表更新用户的等级
- return insertDtl(tPointsMainTemp, TradeDict.CONSUME_FLAG_SINGLE, resultPoints * rate, personLevel.getId(), billno);
+ BigDecimal a1 = new BigDecimal(resultPoints);
+ BigDecimal aa = new BigDecimal(rate);
+ Double dd=a1.multiply(aa).doubleValue();
+ //Math.round(dd) 四舍五入 Math.floor(96.8)去掉小数凑整:不论小数是多少,都不进位 (int) Math.ceil(96.1)去掉小数凑整:不管小数是多少,都进一
+ return insertDtl(tPointsMainTemp, TradeDict.CONSUME_FLAG_SINGLE, (int)Math.round(dd), personLevel.getId(), billno);
}
@Override
public Boolean dayHandlePoints(String userid, String billno) {
// 1.根据用户id查询积分流水表获得当日的消费金额
- List<TPersondtl> tPersondtl = persondtlDao.findAllByUseridAndTransdateAndReverseFlagAndStatus(userid, DateUtil.getNow("yyyyMMdd"), "none", "success");
- Double allConsume = tPersondtl.stream().mapToDouble(o -> o.getAmount()).sum();
+ List<TPersondtl> tPersondtl = getShopdtlByUseridAndTransdateAndReverseFlagAndStatus(userid, DateUtil.getNow("yyyyMMdd"), "none", "success");
+ Double allConsume = -tPersondtl.stream().mapToDouble(o -> o.getAmount()).sum();
// 2.循环日消费奖励规则
Sort sort = new Sort(Sort.Direction.ASC, "id");
- List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype("day", sort);
+ List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype(TradeDict.CONSUME_POINTS_DAY, sort);
for (TConsumePoints temp : daylist) {
// 3.判断用户是否达到日消费奖励积分的额度,达到再次判断是否获得过该规则的奖励
- if (allConsume > Double.parseDouble(temp.getConsumeamount())) {
- TPointsdtl tPointsdtltemp = pointsDtlDao.findAllByUseridAndTransdateAndRefno(userid, DateUtil.getNow("yyyyMMdd"), temp.getId());
+ if (allConsume >= Double.parseDouble(temp.getConsumeamount())) {
+ TPointsdtl tPointsdtltemp = pointsDtlDao.findAllByUseridAndTransdateAndRefnoAndStatusAndFlagstatus(userid, DateUtil.getNow("yyyyMMdd"), temp.getId(),"init","in");
if (tPointsdtltemp == null) {
// 4.奖励的积分对积分主子表和流水表进行添加
Optional<TPointsMain> tPointsMain = pointsMainDao.findById(userid);
}else {
tPointsMainTemp = tPointsMain.orElse(null);
}
- return insertDtl(tPointsMainTemp, TradeDict.CONSUME_FLAG_DAY, temp.getPoints(), temp.getId(), billno);
+ /* //判断流水中是否有这条记录
+ TPointsdtl tPointsdtl = pointsDtlDao.findAllByUseridAndBillnoAndType(userid, billno, TradeDict.CONSUME_FLAG_DAY);
+ if(tPointsdtl!=null){
+ return false;
+ }*/
+ insertDtl(tPointsMainTemp, TradeDict.CONSUME_FLAG_DAY, temp.getPoints(), temp.getId(), billno);
}
}
}
@Override
public Boolean monthHandlePoints(String userid, String billno) {
// 1.根据用户id查询积分流水表获得当月的消费金额
- List<TPersondtl> tPersondtl = persondtlDao.findAllByUseridAndTransdateStartingWithAndReverseFlagAndStatus(userid, DateUtil.getNow("yyyyMM"), "none", "success");
- Double allConsume = tPersondtl.stream().mapToDouble(o -> o.getAmount()).sum();
+ List<TPersondtl> tPersondtl = getShopdtlByUseridAndTransdateStartingWithAndReverseFlagAndStatus(userid, DateUtil.getNow("yyyyMM"), "none", "success");
+ Double allConsume = -tPersondtl.stream().mapToDouble(o -> o.getAmount()).sum();
// 2.循环月消费奖励规则
Sort sort = new Sort(Sort.Direction.ASC, "id");
- List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype("month", sort);
+ List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype(TradeDict.CONSUME_POINTS_MONTH, sort);
for (TConsumePoints temp : monthlist) {
// 3.判断用户是否达到月消费奖励积分的额度,达到再次判断是否获得过该规则的奖励
- if (allConsume > Double.parseDouble(temp.getConsumeamount())) {
- TPointsdtl tPointsdtltemp = pointsDtlDao.findAllByUseridAndTransdateAndRefno(userid, DateUtil.getNow("yyyyMMdd"), temp.getId());
+ if (allConsume >= Double.parseDouble(temp.getConsumeamount())) {
+ TPointsdtl tPointsdtltemp = pointsDtlDao.findAllByUseridAndTransdateStartingWithAndRefnoAndStatusAndFlagstatus(userid, DateUtil.getNow("yyyyMM"), temp.getId(),"init","in");
if (tPointsdtltemp == null) {
// 4.奖励的积分对积分主子表和流水表进行添加
Optional<TPointsMain> tPointsMain = pointsMainDao.findById(userid);
}else {
tPointsMainTemp = tPointsMain.orElse(null);
}
- return insertDtl(tPointsMainTemp, TradeDict.CONSUME_FLAG_DAY, temp.getPoints(), temp.getId(), billno);
+ /*TPointsdtl tPointsdtl = pointsDtlDao.findAllByUseridAndBillnoAndType(userid, billno, TradeDict.CONSUME_FLAG_MONTH);
+ if(tPointsdtl!=null){
+ return false;
+ }*/
+ insertDtl(tPointsMainTemp, TradeDict.CONSUME_FLAG_MONTH, temp.getPoints(), temp.getId(), billno);
}
}
}
return null;
}
+ @Override
+ public Boolean refundHandlePoints(String userid, String billno) {
+ //1. 单次消费获得的积分处理 ,先查询原流水
+ TPointsdtl tPointsdtl = pointsDtlDao.findAllByUseridAndBillnoAndType(userid, billno, TradeDict.CONSUME_FLAG_SINGLE);
+ if(tPointsdtl==null){
+ return false;
+ }
+ Optional<TPointsMain> tPointsMain = pointsMainDao.findById(userid);
+ if(tPointsMain.orElse(null)==null){
+ return false;
+ }
+ //查询是否有退款记录
+ TPointsdtl tPointsdtlCheckSin = pointsDtlDao.findAllByUseridAndBillnoAndType(userid, billno, TradeDict.CONSUME_SINGLE_REFUND);
+ if(tPointsdtlCheckSin!=null){
+ return false;
+ }
+ this.insertDtl(tPointsMain.orElse(null),TradeDict.CONSUME_SINGLE_REFUND,-Integer.parseInt(tPointsdtl.getPoints()),tPointsdtl.getRefno(),billno);
+ //原流水改为退款状态
+ tPointsdtl.setStatus("refund");
+ pointsDtlDao.save(tPointsdtl);
+ //2. 日奖励获得的积分处理
+ // 2.1.根据用户id查询积分流水表获得当日的消费金额
+ List<TPersondtl> tPersondtl = getShopdtlByUseridAndTransdateAndReverseFlagAndStatus(userid, tPointsdtl.getTransdate(), "none", "success");
+ Double allConsume = -tPersondtl.stream().mapToDouble(o -> o.getAmount()).sum();
+ // 2.2.循环日消费奖励规则
+ Sort sort = new Sort(Sort.Direction.ASC, "id");
+ List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype(TradeDict.CONSUME_POINTS_DAY, sort);
+ for (TConsumePoints temp : daylist) {
+ // 2.3.判断用户是否达到日消费奖励积分的额度,没有达到再次判断是否获得过该规则的奖励
+ if (allConsume < Double.parseDouble(temp.getConsumeamount())) {
+ TPointsdtl tPointsdtltemp = pointsDtlDao.findAllByUseridAndTransdateAndRefnoAndStatusAndFlagstatus(userid, tPointsdtl.getTransdate(), temp.getId(),"init","in");
+ if (tPointsdtltemp != null) {
+ tPointsdtltemp.setStatus("refund");
+ pointsDtlDao.save(tPointsdtltemp);
+ // 2.4.奖励的积分对积分主子表和流水表进行删除
+ Optional<TPointsMain> tPointsMainDay = pointsMainDao.findById(userid);
+ TPointsMain tPointsMainTemp;
+ tPointsMainTemp = tPointsMainDay.orElse(null);
+ TPointsdtl tPointsdtlCheckDay = pointsDtlDao.findAllByUseridAndBillnoAndTypeAndRefno(userid, billno, TradeDict.CONSUME_DAY_REFUND,temp.getId());
+ if(tPointsdtlCheckDay!=null){
+ continue;
+ }
+ insertDtl(tPointsMainTemp, TradeDict.CONSUME_DAY_REFUND, -Integer.parseInt(tPointsdtltemp.getPoints()), temp.getId(), billno);
+ }
+ }
+ }
+ //3. 月奖励获得的积分处理
+ // 3.1.根据用户id查询积分流水表获得当月的消费金额
+ List<TPersondtl> tPersondtlMonth = getShopdtlByUseridAndTransdateStartingWithAndReverseFlagAndStatus(userid, tPointsdtl.getTransdate().substring(0,6), "none", "success");
+ Double allConsumeMonth = -tPersondtlMonth.stream().mapToDouble(o -> o.getAmount()).sum();
+ List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype(TradeDict.CONSUME_POINTS_MONTH, sort);
+ // 2.2.循环月消费奖励规则
+ for (TConsumePoints temp : monthlist) {
+ // 3.3.判断用户是否达到月消费奖励积分的额度,没有达到再次判断是否获得过该规则的奖励
+ if (allConsumeMonth < Double.parseDouble(temp.getConsumeamount())) {
+ TPointsdtl tPointsdtltemp = pointsDtlDao.findAllByUseridAndTransdateStartingWithAndRefnoAndStatusAndFlagstatus(userid, tPointsdtl.getTransdate(), temp.getId(),"init","in");
+ if (tPointsdtltemp != null) {
+ tPointsdtltemp.setStatus("refund");
+ pointsDtlDao.save(tPointsdtltemp);
+ // 3.4.奖励的积分对积分主子表和流水表进行删除
+ Optional<TPointsMain> tPointsMainMonth = pointsMainDao.findById(userid);
+ TPointsMain tPointsMainTemp;
+ tPointsMainTemp = tPointsMainMonth.orElse(null);
+ TPointsdtl tPointsdtlCheckMonth = pointsDtlDao.findAllByUseridAndBillnoAndTypeAndRefno(userid, billno, TradeDict.CONSUME_MONTH_REFUND,temp.getId());
+ if(tPointsdtlCheckMonth!=null){
+ continue;
+ }
+ insertDtl(tPointsMainTemp, TradeDict.CONSUME_MONTH_REFUND, -Integer.parseInt(tPointsdtltemp.getPoints()), temp.getId(), billno);
+ }
+ }
+ }
+ return null;
+ }
+//主要处理消费,日奖励,月奖励,退款,过期的流水表
public Boolean insertDtl(TPointsMain tPointsMain, String type, int points, Integer refno, String billno) {
//主表流水
- tPointsMain.setPoints(tPointsMain.getPoints() + points);
- tPointsMain.setAccumPoints(tPointsMain.getAccumPoints() + points);
+ tPointsMain.setPoints((tPointsMain.getPoints() + points)>=0?tPointsMain.getPoints() + points:0);
+ //如果过期流水
+ if(points<0&&TradeDict.CONSUME_FLAG_OUTPOINTS.equals(type)){
+ tPointsMain.setOutPoints(tPointsMain.getOutPoints()+(-points));
+ }else {
+ tPointsMain.setAccumPoints((tPointsMain.getAccumPoints() + points)>=0?tPointsMain.getAccumPoints() + points:0);
+ }
TPersonLevel tPersonLevelByPoints = getLevelByPoints(tPointsMain.getPoints());
- if (tPersonLevelByPoints.getId() > tPointsMain.getLevelid()) {
+ //if (tPersonLevelByPoints.getId() > tPointsMain.getLevelid()) {
tPointsMain.setLevelid(tPersonLevelByPoints.getId());
- }
+ // }
tPointsMain.setUpdatetime(DateUtil.getNow());
TPointsMain tPointsMainResult = pointsMainDao.save(tPointsMain);
//子表流水
TPointsDetail tPointsDetail = new TPointsDetail();
tPointsDetail.setUserid(tPointsMain.getUserid());
tPointsDetail.setPoints(points);
- TBusinesspara consumePointsLi = businessparaDao.findByParakey("dayPointsLi");
+ if(points<0){
+ if(TradeDict.CONSUME_FLAG_OUTPOINTS.equals(type)){
+ tPointsDetail.setStatus(TradeDict.DETAIL_FLAG_OUTDATE);
+ }else {
+ tPointsDetail.setStatus(TradeDict.DETAIL_FLAG_REFUND);
+ }
+ }else {
+ tPointsDetail.setStatus(TradeDict.DETAIL_FLAG_NORMAL);
+ }
+ TBusinesspara consumePointsLi = businessparaDao.findByParakey(TradeDict.PARA_FLAG_DAY);
if (consumePointsLi != null && !StringUtils.isEmpty(consumePointsLi.getParaval())) {
String outdate = DateUtil.getNowInterDay(Integer.parseInt(consumePointsLi.getParaval()));
tPointsDetail.setOutDate(outdate);
tPointsdtl.setRefno(refno);
tPointsdtl.setType(type);
tPointsdtl.setUserid(tPointsMain.getUserid());
- tPointsdtl.setPoints("+" + points);
+ if(points>0){
+ tPointsdtl.setPoints("+" + points);
+ }else {
+ tPointsdtl.setPoints(points+"");
+ }
tPointsdtl.setStatus("init");
tPointsdtl.setAftpoints(tPointsMainResult.getPoints());
tPointsdtl.setBillno(billno);
tPointsdtl.setTransdate(DateUtil.getNow("yyyyMMdd"));
tPointsdtl.setTranstime(DateUtil.getNow("HHmmss"));
tPointsdtl.setDetailid(tPointsDetailresult.getDetailid());
- tPointsdtl.setFlagstatus("in");
+ if(points>=0){
+ tPointsdtl.setFlagstatus("in");
+ }else {
+ tPointsdtl.setFlagstatus("out");
+ }
tPointsdtl.setMainstatus("init");
TPointsdtl tPointsdtlresult = pointsDtlDao.save(tPointsdtl);
return new PageResult<>(page);
}
+ @Override
+ public TPointsActive getActiveByName(String name){
+ return pointsActiveDao.findAllByName(name);
+ }
@Override
TBusinesspara tBusinesspara = new TBusinesspara();
tBusinesspara.setTenantId("{tenantid}");
- tBusinesspara.setParakey("dayPointsLi");
+ tBusinesspara.setParakey(TradeDict.PARA_FLAG_DAY);
tBusinesspara.setParaval(levelBean.getDayPointsLi());
businessparaDao.save(tBusinesspara);
- tBusinesspara.setParakey("taskPointsLi");
+ tBusinesspara.setParakey(TradeDict.PARA_FLAG_TASK);
tBusinesspara.setParaval(levelBean.getTaskPointsLi());
businessparaDao.save(tBusinesspara);
- tBusinesspara.setParakey("consumePointsLi");
+ tBusinesspara.setParakey(TradeDict.PARA_FLAG_CON);
tBusinesspara.setParaval(levelBean.getConsumePointsLi());
businessparaDao.save(tBusinesspara);
return JsonResult.ok();
@Override
public LevelBean getPointsSet() {
- TBusinesspara dayPointsLi = businessparaDao.findByParakey("dayPointsLi");
- TBusinesspara taskPointsLi = businessparaDao.findByParakey("taskPointsLi");
- TBusinesspara consumePointsLi = businessparaDao.findByParakey("consumePointsLi");
+ TBusinesspara dayPointsLi = businessparaDao.findByParakey(TradeDict.PARA_FLAG_DAY);
+ TBusinesspara taskPointsLi = businessparaDao.findByParakey(TradeDict.PARA_FLAG_TASK);
+ TBusinesspara consumePointsLi = businessparaDao.findByParakey(TradeDict.PARA_FLAG_CON);
LevelBean levelBean1 = new LevelBean();
if (dayPointsLi != null && !StringUtils.isEmpty(dayPointsLi.getParaval())) {
levelBean1.setDayPointsLi(dayPointsLi.getParaval());
public PageResult getPointsReportList(LevelBean param) {
List<LevelBean> levelBeans = new ArrayList<>();
if (!StringUtil.isEmpty(param.getName())) {
- if ("consume".equals(param.getName())) {
- param.setType("consume");
+ if ((TradeDict.CONSUME_FLAG_SINGLE).equals(param.getName())) {
+ param.setType(TradeDict.CONSUME_FLAG_SINGLE);
LevelBean levelBean = getPointsDtlByType(param);
levelBean.setPointsName("消费积分");
levelBeans.add(levelBean);
- } else if ("task".equals(param.getName())) {
+ } else if ((TradeDict.TASK_FLAG_FINISH).equals(param.getName())) {
List<TPointsTask> all = pointsTaskDao.findAll();
all.stream().forEach(e -> {
LevelBean levelBeanTask = new LevelBean();
levelBeanTask.setStartDate(param.getStartDate());
levelBeanTask.setEndDate(param.getEndDate());
levelBeanTask.setRefno(e.getTaskid());
- levelBeanTask.setType("task");
+ levelBeanTask.setType(TradeDict.TASK_FLAG_FINISH);
LevelBean levelBean1 = getPointsDtlByType(levelBeanTask);
levelBean1.setPointsName(e.getTaskname());
levelBeans.add(levelBean1);
taskLevelBean.setPointsCount(taskCount);
taskLevelBean.setPointsName("日常任务积分合计");
levelBeans.add(taskLevelBean);
- } else if ("consumeday".equals(param.getName())) {
- param.setType("consumeday");
+ } else if ((TradeDict.CONSUME_FLAG_DAY).equals(param.getName())) {
+ param.setType(TradeDict.CONSUME_FLAG_DAY);
LevelBean dayTempResult = getPointsDtlByType(param);
dayTempResult.setPointsName("日累计奖励积分");
levelBeans.add(dayTempResult);
- } else if ("consumemonth".equals(param.getName())) {
- param.setType("consumemonth");
+ } else if ((TradeDict.CONSUME_FLAG_MONTH).equals(param.getName())) {
+ param.setType(TradeDict.CONSUME_FLAG_MONTH);
LevelBean monthTempResult = getPointsDtlByType(param);
monthTempResult.setPointsName("月累计奖励积分");
levelBeans.add(monthTempResult);
} else {
param.setRefno(Integer.parseInt(param.getName()));
- param.setType("task");
+ param.setType(TradeDict.TASK_FLAG_FINISH);
LevelBean levelBean1 = getPointsDtlByType(param);
Optional<TPointsTask> tpointsTask = pointsTaskDao.findById(Integer.parseInt(param.getName()));
if (tpointsTask.orElse(null) != null) {
levelBeanTask.setStartDate(param.getStartDate());
levelBeanTask.setEndDate(param.getEndDate());
levelBeanTask.setRefno(e.getTaskid());
- levelBeanTask.setType("task");
+ levelBeanTask.setType(TradeDict.TASK_FLAG_FINISH);
LevelBean levelBean1 = getPointsDtlByType(levelBeanTask);
levelBean1.setPointsName(e.getTaskname());
levelBeans.add(levelBean1);
personLevelBean.setStartDate(param.getStartDate());
personLevelBean.setEndDate(param.getEndDate());
// personLevelBean.setRefnoList(personLevelTemp);
- personLevelBean.setType("consume");
+ personLevelBean.setType(TradeDict.CONSUME_FLAG_SINGLE);
LevelBean personLevelResult = getPointsDtlByType(personLevelBean);
personLevelResult.setPointsName("消费积分");
levelBeans.add(personLevelResult);
//统计日累计消费积分
Sort sort = new Sort(Sort.Direction.ASC, "id");
- List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype("day", sort);
+ List<TConsumePoints> daylist = consumePointsDao.findAllByAndRuletype(TradeDict.CONSUME_POINTS_DAY, sort);
List<Integer> dayTemp = daylist.stream().map(TConsumePoints::getId).collect(Collectors.toList());
LevelBean dayTempBean = new LevelBean();
dayTempBean.setStartDate(param.getStartDate());
dayTempBean.setEndDate(param.getEndDate());
// dayTempBean.setRefnoList(dayTemp);
- dayTempBean.setType("consumeday");
+ dayTempBean.setType(TradeDict.CONSUME_FLAG_DAY);
LevelBean dayTempResult = getPointsDtlByType(dayTempBean);
dayTempResult.setPointsName("日累计奖励积分");
levelBeans.add(dayTempResult);
//统计月累计消费积分
- List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype("month", sort);
+ List<TConsumePoints> monthlist = consumePointsDao.findAllByAndRuletype(TradeDict.CONSUME_POINTS_MONTH, sort);
List<Integer> monthTemp = monthlist.stream().map(TConsumePoints::getId).collect(Collectors.toList());
LevelBean monthTempBean = new LevelBean();
monthTempBean.setStartDate(param.getStartDate());
monthTempBean.setEndDate(param.getEndDate());
//monthTempBean.setRefnoList(monthTemp);
- monthTempBean.setType("consumemonth");
+ monthTempBean.setType(TradeDict.CONSUME_FLAG_MONTH);
LevelBean monthTempResult = getPointsDtlByType(monthTempBean);
monthTempResult.setPointsName("月累计奖励积分");
levelBeans.add(monthTempResult);
public JsonResult getPointsReportParam() {
List<TDictionary> tDictionaries = dictionaryDao.findAllByDicttype("pointsNameDetail");
List<String> strings = new ArrayList<>();
- strings.add("task");
- strings.add("consume");
- strings.add("consumeday");
- strings.add("consumemonth");
+ strings.add(TradeDict.TASK_FLAG_FINISH);
+ strings.add(TradeDict.CONSUME_FLAG_SINGLE);
+ strings.add(TradeDict.CONSUME_FLAG_DAY);
+ strings.add(TradeDict.CONSUME_FLAG_MONTH);
List<TPointsdtl> tPointsdtls = pointsDtlDao.findAll(new Specification<TPointsdtl>() {
@Override
public Predicate toPredicate(Root<TPointsdtl> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
});
Integer allPoints = tPointsdtls.stream().mapToInt(o -> Integer.parseInt(o.getPoints())).sum();
LevelBean levelBean = new LevelBean();
- levelBean.setType("outpoints");
+ levelBean.setType(TradeDict.CONSUME_FLAG_OUTPOINTS);
LevelBean outpoints = getPointsDtlByType(levelBean);
return JsonResult.ok().put("paramList", tDictionaries)
.put("allPoints", allPoints)
.put("outpoints", outpoints.getPointsSum());
}
+
+ @Override
+ public JsonResult finishTask(String userid, String taskid) {
+ Optional<TPointsTask> tPointsTaskTemp = pointsTaskDao.findById(Integer.valueOf(taskid));
+ if(tPointsTaskTemp.orElse(null)==null){
+ return JsonResult.error("没有该任务");
+ }
+ TPersonLevel personLevel;
+ TPointsMain tPointsMainTemp;
+ Optional<TPointsMain> pointsMain = pointsMainDao.findById(userid);
+ if (pointsMain.orElse(null) != null) {
+ tPointsMainTemp = pointsMain.orElse(null);
+ } else {
+ TPointsMain tPointsMain = new TPointsMain();
+ tPointsMain.setUserid(userid);
+ tPointsMain.setPoints(0);
+ tPointsMain.setAccumPoints(0);
+ tPointsMain.setSumpayPoints(0);
+ tPointsMain.setOutPoints(0);
+ tPointsMain.setUpdatetime(DateUtil.getNow());
+ personLevel = getLevelByPoints(tPointsMain.getPoints());
+ if (personLevel == null) {
+ logger.error("请设置积分等级");
+ return JsonResult.error("请设置积分等级");
+ }
+ tPointsMain.setLevelid(personLevel.getId());
+ tPointsMainTemp = tPointsMain;
+ }
+ //判断是否达到任务积分上限
+ LevelBean levelBeanTask = new LevelBean();
+ levelBeanTask.setStartDate(DateUtil.getNow("yyyyMMdd"));
+ levelBeanTask.setEndDate(DateUtil.getNow("yyyyMMdd"));
+ levelBeanTask.setType(TradeDict.TASK_FLAG_FINISH);
+ LevelBean levelBean1 = getPointsDtlByType(levelBeanTask);
+ TBusinesspara consumePointsLi = businessparaDao.findByParakey(TradeDict.PARA_FLAG_TASK);
+ int pointslimit = 10000;
+ Integer allPoints = levelBean1.getPointsSum();
+ if (consumePointsLi != null && !StringUtils.isEmpty(consumePointsLi.getParaval())) {
+ pointslimit = Integer.parseInt(consumePointsLi.getParaval());
+ }
+ TPointsTask tPointsTask = tPointsTaskTemp.orElse(null);
+ if (allPoints < pointslimit) {
+ if (allPoints + tPointsTask.getTaskpoints() >= pointslimit) {
+ tPointsTask.setTaskpoints(pointslimit - allPoints);
+ }
+ }
+ if(TradeDict.TASK_FLAG_FIRST.equals(tPointsTask.getType())){
+ TPointsdtl tPointsdtlFirst = pointsDtlDao.findAllByUseridAndRefno(userid, Integer.valueOf(taskid));
+ if(tPointsdtlFirst!=null){
+ return JsonResult.error("已经完成该任务");
+ }
+ insertDtl(tPointsMainTemp, TradeDict.TASK_FLAG_FINISH, tPointsTask.getTaskpoints(), Integer.valueOf(taskid), null);
+ }else if(TradeDict.TASK_FLAG_EVETIME.equals(tPointsTask.getType())){
+ insertDtl(tPointsMainTemp, TradeDict.TASK_FLAG_FINISH, tPointsTask.getTaskpoints(), Integer.valueOf(taskid), null);
+ }else if(TradeDict.TASK_FLAG_EVEDAY.equals(tPointsTask.getType())){
+ TPointsdtl tPointsdtlFirst = pointsDtlDao.findAllByUseridAndRefnoAndTransdate(userid, Integer.valueOf(taskid),DateUtil.getNow("yyyyMMdd"));
+ if(tPointsdtlFirst!=null){
+ return JsonResult.error("今天已经完成该任务");
+ }
+ insertDtl(tPointsMainTemp, TradeDict.TASK_FLAG_FINISH, tPointsTask.getTaskpoints(), Integer.valueOf(taskid), null);
+ }
+ return JsonResult.ok();
+ }
+
+ @Override
+ public JsonResult getTPointsTaskNoPage() {
+ return JsonResult.ok().put("dataList",pointsTaskDao.findAll());
+ }
+
+ @Override
+ public JsonResult pointsOutdate(){
+ String yesterday = DateUtil.getYesterdayDay();
+ List<TPointsDetail> pointsDetails = pointsDetailDao.findAllByOutDateAndStatus("20200821","normal");
+ for (TPointsDetail temp:pointsDetails){
+ TPointsdtl tPointsdtlFirst = pointsDtlDao.findAllByUseridAndRefnoAndType(temp.getUserid(), temp.getDetailid(),TradeDict.CONSUME_FLAG_OUTPOINTS);
+ if(tPointsdtlFirst!=null){
+ continue;
+ }
+ //原流水状态进行改变
+ Optional<TPointsdtl> tPointsdtl = pointsDtlDao.findById(temp.getPointsdtlId());
+ if(tPointsdtl.orElse(null)!=null){
+ tPointsdtl.orElse(null).setStatus(TradeDict.DETAIL_FLAG_OUTDATE);
+ pointsDtlDao.save(tPointsdtl.orElse(null));
+ }
+ Optional<TPointsMain> byId = pointsMainDao.findById(temp.getUserid());
+ insertDtl(byId.orElse(null),TradeDict.CONSUME_FLAG_OUTPOINTS,-temp.getPoints(),temp.getDetailid(),null);
+ temp.setStatus(TradeDict.DETAIL_FLAG_OUTDATE);
+ pointsDetailDao.save(temp);
+ }
+ return JsonResult.ok();
+ }
+
+
+
+ @Override
+ public JsonResult pointsCompensate() throws ParseException {
+ String yesterday = DateUtil.getYesterdayDay();
+ List<TPersondtl> tPersondtl = persondtlDao.findAllByTransdateAndReverseFlagAndStatusAndTradeflag("20200821", "none", "success","out");
+ //消费流水补偿
+ for(TPersondtl temp:tPersondtl){
+ singleHandlePoints(temp.getUserid(),temp.getAmount(),temp.getRefno());
+ dayHandlePoints(temp.getUserid(),temp.getRefno());
+ monthHandlePoints(temp.getUserid(),temp.getRefno());
+ }
+ //退款流水补偿
+ List<TPersondtl> tPersondtlReve = persondtlDao.findAllByTransdateAndReverseFlagAndStatusAndTradeflag("20200821", "refund", "success","out");
+ for(TPersondtl temp:tPersondtlReve){
+ //退款怎么确认,refno和支付时一样吗
+ refundHandlePoints(temp.getUserid(),temp.getRefno());
+ }
+ return JsonResult.ok();
+ }
+
+ public List<TPersondtl> getShopdtlByUseridAndTransdateAndReverseFlagAndStatus(String userid,String transdate,String reverseFlag,String status){
+ //TAccount account = accountDao.findByUserid(userid);
+ List<TPersondtl> tShopdtls = persondtlDao.findAllByUseridAndTransdateAndReverseFlagAndStatusAndTradeflag(userid, transdate, reverseFlag, status,"out");
+ return tShopdtls;
+ }
+ public List<TPersondtl> getShopdtlByUseridAndTransdateStartingWithAndReverseFlagAndStatus(String userid,String transdate,String reverseFlag,String status){
+ //TAccount account = accountDao.findByUserid(userid);
+ List<TPersondtl> tShopdtls = persondtlDao.findAllByUseridAndTransdateStartingWithAndReverseFlagAndStatusAndTradeflag(userid, transdate, reverseFlag, status,"out");
+ return tShopdtls;
+ }
+
}