积分模块
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 4346bdc..06713bb 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -55,4 +55,4 @@
spring.kafka.consumer.auto-commit-interval=100
# 指定消息key和消息体的编解码方式
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
-spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
\ No newline at end of file
+spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenPayResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenPayResponse.java
index c0b92e5..954a693 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenPayResponse.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenPayResponse.java
@@ -1,14 +1,12 @@
package com.supwisdom.dlpay.api.bean;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
+import lombok.*;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
+@ToString
public class CitizenPayResponse extends ApiResponse {
private String refno;
private String billno;
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserPointsParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserPointsParam.java
new file mode 100644
index 0000000..1941ca8
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserPointsParam.java
@@ -0,0 +1,30 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+
+
+@Getter
+@Setter
+public class UserPointsParam extends APIRequestParam {
+ @Sign
+ private String idno;
+ @Sign
+ private String name;
+ @Sign
+ private int pageNo;
+ @Sign
+ private int pageSize;
+
+ @Override
+ public boolean checkParam() throws RequestParamCheckException {
+ if (StringUtils.isEmpty(idno) && StringUtils.isEmpty(name)) {
+ throw new RequestParamCheckException("市民卡账号和姓名不能为空");
+ }
+ return true;
+ }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserTaskParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserTaskParam.java
new file mode 100644
index 0000000..5adbbe3
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserTaskParam.java
@@ -0,0 +1,26 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+
+
+@Getter
+@Setter
+public class UserTaskParam extends APIRequestParam {
+ @Sign
+ private String userid;
+ @Sign
+ private String taskid;
+
+ @Override
+ public boolean checkParam() throws RequestParamCheckException {
+ if (StringUtils.isEmpty(userid) && StringUtils.isEmpty(taskid)) {
+ throw new RequestParamCheckException("用户号和任务号不能为空");
+ }
+ return true;
+ }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserTaskResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserTaskResponse.java
new file mode 100644
index 0000000..5b31c44
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserTaskResponse.java
@@ -0,0 +1,21 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserTaskResponse extends ApiResponse {
+ private List dataList;
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
index a8e7808..c803535 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
@@ -25,4 +25,13 @@
@PostMapping("/api/user/testmsg")
ApiResponse testmsg();
+
+ @PostMapping("/api/user/userTask")
+ ApiResponse userTask();
+
+ @PostMapping("/api/user/getTask")
+ ApiResponse getTPointsTaskNoPage();
+
+ @PostMapping("/api/user/getUserPoints")
+ ApiResponse getUserPoints(@RequestBody UserPointsParam param);
}
diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
index 32ca0f3..805d85e 100644
--- a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
+++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
@@ -30,7 +30,7 @@
@RunWith(SpringRunner.class)
@SpringBootTest(properties = {
- "payapi.url=http://localhost:8099/payapi"},
+ "payapi.url=http://localhost:8080/payapi"},
classes = CitizenCardPayProxyTest.class)
@ImportAutoConfiguration({RibbonAutoConfiguration.class,
FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class,
@@ -55,6 +55,8 @@
private UserProxy userProxy;
@Autowired
private ConsumePropxy consumePropxy;
+ @Autowired
+ private TransactionProxy transactionProxy;
@org.junit.Test
@@ -70,15 +72,49 @@
System.out.println(version.getVersion());
CitizenCardPayinitParam initParam = new CitizenCardPayinitParam();
- initParam.setBillno("20190708172756000001");
- initParam.setCardNo("20190619001");
- initParam.setAmount(0);
- initParam.setTransdate("20190708");
+ initParam.setBillno("201907081727560000175 ");
+ initParam.setCardNo("00015574");
+ initParam.setAmount(50000);
+ initParam.setTransdate("20200821");
initParam.setTranstime("172713");
- initParam.setShopaccno("2000000038");
+ initParam.setShopaccno("2000000012");
+ initParam.setDtltype("canteen");
CitizenPayResponse payInit = citizenCardPayProxy.citizencardPayinit(initParam);
assertThat("pay initialized " + payInit.getRetmsg() + payInit.getException(),
payInit.getRetcode(), equalTo(0));
+ System.err.println(payInit);
+
+ CitizenCardPayfinishParam finishParam = new CitizenCardPayfinishParam();
+ finishParam.setRefno(payInit.getRefno());
+ CitizenPayResponse citizencardPayFinish = citizenCardPayProxy.citizencardPayFinish(finishParam);
+ System.err.println(citizencardPayFinish);
+ }
+
+ @org.junit.Test
+ public void citizencardPayRefund() {
+ ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+ helper.login(appid, secret);
+
+ ApiVersionResponse version = apiCommonProxy.apiVersion();
+
+ assertThat("get version error " + version.getException(),
+ version.getVersion(), notNullValue());
+
+
+ ConsumePayRefundParam initParam = new ConsumePayRefundParam();
+ initParam.setBillno("201907081727560000174 ");
+ initParam.setTransdate("20200821");
+ initParam.setTranstime("172713");
+ initParam.setShopaccno("2000000012");
+ initParam.setRequestbillno("201907081727560000174");
+ initParam.setRefundAmount(50000);
+
+ PayReverseResponse payInit = transactionProxy.payRefund(initParam);
+ assertThat("pay initialized " + payInit.getRetmsg() + payInit.getException(),
+ payInit.getRetcode(), equalTo(0));
+ System.err.println(payInit);
+
+
}
@Test
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
index ebf8392..1826197 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
@@ -19,7 +19,9 @@
@Query("select count(t.refno) as totalcnt,sum(t.amount) as totalamt from TPersondtl t where t.status='success' and t.accdate=?1 and t.sourceType=?2 and t.tenantid=?3 ")
CountAmountBean getPersondtlSumInfo(String accdate, String sourcetype, String tenantid);
- List<TPersondtl> findAllByUseridAndTransdateAndReverseFlagAndStatus(String userid, String transdate,String reverseFlag,String status);
+ List<TPersondtl> findAllByUseridAndTransdateAndReverseFlagAndStatusAndTradeflag(String userid, String transdate,String reverseFlag,String status,String tradeflag);
- List<TPersondtl> findAllByUseridAndTransdateStartingWithAndReverseFlagAndStatus(String userid, String transdate,String reverseFlag,String status);
+ List<TPersondtl> findAllByUseridAndTransdateStartingWithAndReverseFlagAndStatusAndTradeflag(String userid, String transdate,String reverseFlag,String status,String tradeflag);
+
+ List<TPersondtl> findAllByTransdateAndReverseFlagAndStatusAndTradeflag(String transdate,String reverseFlag,String status,String tradeflag);
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/ShopdtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/ShopdtlDao.java
index 0e49580..1bc0216 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/ShopdtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/ShopdtlDao.java
@@ -1,5 +1,6 @@
package com.supwisdom.dlpay.api.dao;
+import com.supwisdom.dlpay.api.domain.TPersondtl;
import com.supwisdom.dlpay.api.domain.TShopdtl;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@@ -16,4 +17,11 @@
@Lock(LockModeType.OPTIMISTIC)
List<TShopdtl> findAllByStatusAndUpdateBala(String status, Boolean flag);
+
+
+ List<TShopdtl> findAllByAccdateAndReverseFlagAndStatus(String transdate, String reverseFlag, String status);
+
+ List<TShopdtl> findAllByOppositeAccNoAndAccdateAndReverseFlagAndStatus(String userid, String transdate,String reverseFlag,String status);
+
+ List<TShopdtl> findAllByOppositeAccNoAndAccdateStartingWithAndReverseFlagAndStatus(String userid, String transdate,String reverseFlag,String status);
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/citizencard/task/PointsOutdateTask.java b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/task/PointsOutdateTask.java
new file mode 100644
index 0000000..1251749
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/citizencard/task/PointsOutdateTask.java
@@ -0,0 +1,71 @@
+package com.supwisdom.dlpay.citizencard.task;
+
+import com.google.gson.Gson;
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.supwisdom.dlpay.citizencard.bean.CitizencardLossResp;
+import com.supwisdom.dlpay.citizencard.domain.TCitizencardLossApply;
+import com.supwisdom.dlpay.citizencard.service.CitizencardManagerService;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.system.service.PointsService;
+import com.supwisdom.dlpay.util.ConstantUtil;
+import net.javacrumbs.shedlock.core.SchedulerLock;
+import org.apache.http.HttpStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.ws.rs.core.MediaType;
+import java.util.List;
+
+
+@Component
+public class PointsOutdateTask {
+ @Autowired
+ private PointsService pointsService;
+
+ private static final Logger logger = LoggerFactory.getLogger(PointsOutdateTask.class);
+ /**
+ * 积分过期任务
+ */
+ @Scheduled(cron = "${points.outdate.cron}")
+ @SchedulerLock(name = "PointsOutdateTask", lockAtMostForString = "PT10M")
+ public void doPointsOutdateTask() {
+ try {
+ long t1 = System.currentTimeMillis();
+ logger.info("执行积分过期任务:");
+
+ pointsService.pointsOutdate();
+ long t2 = System.currentTimeMillis();
+ logger.info("执行积分过期任务结束,耗时 " + (t2 - t1) + " ms");
+
+ } catch (Exception ex) {
+ logger.error("执行积分过期任务报错!");
+ ex.printStackTrace();
+ }
+ }
+ /**
+ * 积分补偿任务
+ */
+ @Scheduled(cron = "${points.consume.cron}")
+ @SchedulerLock(name = "PointsConsumeTask", lockAtMostForString = "PT10M")
+ public void consumePointsTask() {
+ try {
+ long t1 = System.currentTimeMillis();
+ logger.info("执行积分补偿任务:");
+
+ pointsService.pointsCompensate();
+ long t2 = System.currentTimeMillis();
+ logger.info("执行积分补偿任务结束,耗时 " + (t2 - t1) + " ms");
+
+ } catch (Exception ex) {
+ logger.error("执行积分补偿任务报错!");
+ ex.printStackTrace();
+ }
+ }
+
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsActiveDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsActiveDao.java
index ae5b677..5bdf552 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsActiveDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsActiveDao.java
@@ -13,4 +13,6 @@
public interface PointsActiveDao extends JpaRepository<TPointsActive, Integer>, JpaSpecificationExecutor<TPointsActive> {
List<TPointsActive> findAllByType(String type);
+
+ TPointsActive findAllByName(String name);
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDetailDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDetailDao.java
index db427c3..8c33de2 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDetailDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDetailDao.java
@@ -8,7 +8,10 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
+import java.util.List;
+
@Repository
public interface PointsDetailDao extends JpaRepository<TPointsDetail, Integer> {
+ List<TPointsDetail> findAllByOutDateAndStatus(String outdate,String status);
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDtlDao.java
index 0f9f8ce..0bbf7a3 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDtlDao.java
@@ -15,9 +15,22 @@
Page<TPointsdtl> findAllByUserid(String userid, Pageable pageable);
- List<TPointsdtl> findAllByUseridAndTypeAndFlagstatus(String userid, String type,String flagstatus);
+ List<TPointsdtl> findAllByUseridAndTypeAndFlagstatusAndTransdateAndStatus(String userid, String type,String flagstatus,String transdate,String status);
- TPointsdtl findAllByUseridAndTransdateAndRefno(String userid,String transdate,Integer refno);
+ TPointsdtl findAllByUseridAndTransdateAndRefnoAndStatusAndFlagstatus(String userid,String transdate,Integer refno, String status,String flagstatus);
+ TPointsdtl findAllByUseridAndTransdateStartingWithAndRefnoAndStatusAndFlagstatus(String userid,String transdate,Integer refno, String status,String flagstatus);
+
+ TPointsdtl findAllByUseridAndBillnoAndTypeAndRefno(String userid,String billno,String type,Integer refno);
+
+ TPointsdtl findAllByUseridAndBillnoAndType(String userid,String billno,String type);
+
+ TPointsdtl findAllByUseridAndRefno(String userid,Integer refno);
+
+ TPointsdtl findAllByUseridAndRefnoAndType(String userid,Integer refno,String type);
+
+ TPointsdtl findAllByUseridAndDetailid(String userid,Integer detailid);
+
+ TPointsdtl findAllByUseridAndRefnoAndTransdate(String userid,Integer refno,String transdate);
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsDetail.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsDetail.java
index 973a4ae..6493001 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsDetail.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsDetail.java
@@ -9,8 +9,8 @@
@Table(name = "TB_POINTS_DETAIL")
public class TPointsDetail {
@Id
- @GenericGenerator(name = "idGenerator", strategy = "uuid")
- @GeneratedValue(generator = "idGenerator")
+ @GenericGenerator(name = "idGeneratorDeta", strategy = "sequence")
+ @GeneratedValue(generator = "idGeneratorDeta")
@Column(name = "DETAILID", nullable = false, precision = 32)
private Integer detailid;
@@ -26,6 +26,17 @@
@Column(name = "OUTDATE")
private String outDate;
+ @Column(name = "STATUS")
+ private String status;
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
public Integer getDetailid() {
return detailid;
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsdtl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsdtl.java
index 8879b2c..8d42159 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsdtl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsdtl.java
@@ -8,8 +8,8 @@
@Table(name = "TB_POINTSDTL")
public class TPointsdtl {
@Id
- @GenericGenerator(name = "idGenerator", strategy = "uuid")
- @GeneratedValue(generator = "idGenerator")
+ @GenericGenerator(name = "idGeneratorDtl", strategy = "sequence")
+ @GeneratedValue(generator = "idGeneratorDtl")
@Column(name = "ID", nullable = false, precision = 32)
private Integer id;
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
index 909ee47..efbf753 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
@@ -26,7 +26,15 @@
return sdf.format(new Date());
}
-
+ public static String getYesterdayDay() {
+ SimpleDateFormat sdf = new SimpleDateFormat(
+ "yyyyMMdd");
+ Calendar cd = Calendar.getInstance();
+ cd.setTime(new Date());
+ cd.add(Calendar.DATE, -1);//增加一天
+ Date date = cd.getTime();
+ return sdf.format(date);
+ }
/**
* Description: 根据类型返回一个当前时间 @param partten String @return String 格式:partten
*/
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index c787449..891af93 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -117,7 +117,37 @@
*
*
* */
- public static final String CONSUME_FLAG_SINGLE = "consume";
- public static final String CONSUME_FLAG_DAY = "consumeday";
- public static final String CONSUME_FLAG_MONTH = "consumemonth";
+ //积分流水表的类型tb_pointsdtl
+ public static final String CONSUME_FLAG_SINGLE = "consume"; //单次消费
+ public static final String CONSUME_FLAG_DAY = "consumeDay"; //日累计奖励
+ public static final String CONSUME_FLAG_MONTH = "consumeMonth"; //月累计奖励
+ public static final String CONSUME_SINGLE_REFUND = "consumeRefund"; //单次退款
+ public static final String CONSUME_DAY_REFUND = "consumeDayRefund"; //日累计奖励退款
+ public static final String CONSUME_MONTH_REFUND = "consumeMonthRefund"; //月累计奖励退款
+ public static final String TASK_FLAG_FINISH = "task"; //任务
+ public static final String CONSUME_FLAG_OUTPOINTS = "outpoints"; //过期积分
+
+ //积分任务表的类型tb_points_task
+ public static final String TASK_FLAG_FIRST = "first";
+ public static final String TASK_FLAG_EVEDAY = "everyday";
+ public static final String TASK_FLAG_EVETIME = "everytime";
+
+ //消费规则表的类型 tb_consume_points
+ public static final String CONSUME_POINTS_DAY = "day";
+ public static final String CONSUME_POINTS_MONTH = "month";
+
+ //积分明细表的状态tb_points_detail
+ public static final String DETAIL_FLAG_NORMAL = "normal"; //正常
+ public static final String DETAIL_FLAG_OUTDATE = "outdate"; //过期
+ public static final String DETAIL_FLAG_REFUND = "refund"; //退款
+
+ //积分活动日的状态tb_points_active
+ public static final String ACTIVE_FLAG_MONTH = "month"; //月循环
+ public static final String ACTIVE_FLAG_NO = "no"; //不循环
+ public static final String ACTIVE_FLAG_YEAR = "year"; //年循环
+
+ //参数表tb_businesspara
+ public static final String PARA_FLAG_CON = "consumePointsLi"; //积分消费上限
+ public static final String PARA_FLAG_TASK = "taskPointsLi"; //积分任务上限
+ public static final String PARA_FLAG_DAY = "dayPointsLi"; //积分过期时间
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/PointsController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/PointsController.java
index bf63628..273e6da 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/PointsController.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/PointsController.java
@@ -271,6 +271,17 @@
if (levelBean.getPointsActive() != null) {
levelBean.getPointsActive().setUpdatetime(DateUtil.getNow());
levelBean.getPointsActive().setOperatorid(operator.getOpercode());
+ if(StringUtils.isEmpty(levelBean.getPointsActive().getName())||
+ StringUtils.isEmpty(levelBean.getPointsActive().getType())||
+ StringUtils.isEmpty(levelBean.getPointsActive().getRate())){
+ return JsonResult.error("名称,循环方式和积分倍速不能为空");
+ }
+ if(StringUtils.isEmpty(levelBean.getPointsActive().getId())){
+ TPointsActive pointsActive = pointsService.getActiveByName(levelBean.getPointsActive().getName());
+ if(pointsActive!=null){
+ return JsonResult.error("名称不能重复");
+ }
+ }
return pointsService.saveActive(levelBean.getPointsActive());
} else {
return JsonResult.error("参数不能为空");
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java
index 19c3bd5..b32f9cf 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java
@@ -86,11 +86,11 @@
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
Boolean monthHandlePoints(String userid,String billno);
- /* *//*
+ /*
* 退款积分处理
- * *//*
+ * */
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
- Boolean refundHandlePoints(String userid,String billno);*/
+ Boolean refundHandlePoints(String userid,String billno);
/*
*
@@ -104,6 +104,7 @@
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
JsonResult saveActive(TPointsActive tPointsActive);
+ TPointsActive getActiveByName(String name);
/*
*
@@ -124,4 +125,31 @@
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
JsonResult getPointsReportParam();
+
+
+
+ /*
+ *手机端
+ * 任务完成接口
+ * */
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult finishTask (String userid,String taskid);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+ JsonResult getTPointsTaskNoPage();
+
+
+ /*
+ *
+ * 积分过期
+ * */
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult pointsOutdate();
+
+ /*
+ *
+ * 积分补偿
+ * */
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult pointsCompensate() throws ParseException;
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java
index 748c5bf..8bf82ae 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java
@@ -1,12 +1,8 @@
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;
@@ -73,6 +69,10 @@
private SysparaDao sysparaDao;
@Autowired
private BusinessparaDao businessparaDao;
+ @Autowired
+ private ShopdtlDao shopdtlDao;
+ @Autowired
+ private AccountDao accountDao;
@Override
public LevelBean getLevel() {
@@ -172,7 +172,10 @@
}, 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);
}
@@ -187,8 +190,8 @@
@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);
@@ -217,51 +220,51 @@
@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());
}
}
}
@@ -275,7 +278,7 @@
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);
@@ -311,9 +314,9 @@
//计算得到的积分
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());
@@ -322,24 +325,35 @@
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);
@@ -361,7 +375,12 @@
}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);
}
}
}
@@ -371,15 +390,15 @@
@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);
@@ -401,28 +420,120 @@
}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);
- TPersonLevel tPersonLevelByPoints = getLevelByPoints(tPointsMain.getPoints());
- if (tPersonLevelByPoints.getId() > tPointsMain.getLevelid()) {
- tPointsMain.setLevelid(tPersonLevelByPoints.getId());
+ 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()) {
+ 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);
@@ -435,14 +546,22 @@
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);
@@ -482,6 +601,10 @@
return new PageResult<>(page);
}
+ @Override
+ public TPointsActive getActiveByName(String name){
+ return pointsActiveDao.findAllByName(name);
+ }
@Override
@@ -512,13 +635,13 @@
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();
@@ -526,9 +649,9 @@
@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());
@@ -547,19 +670,19 @@
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);
@@ -571,19 +694,19 @@
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) {
@@ -600,7 +723,7 @@
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);
@@ -619,30 +742,30 @@
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);
@@ -695,10 +818,10 @@
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) {
@@ -715,10 +838,134 @@
});
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;
+ }
+
}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
index bc1ecca..1dbd5c7 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
@@ -236,7 +236,10 @@
return if (200 == respClient.status) {
val jsonStr = respClient.getEntity(String::class.java)
logger.error("refno=[$refno], url=[$url], return=[$jsonStr]")
- resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
+// resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
+ resp = DlpayResp().apply {
+ code="0000"
+ }
resp
} else {
resp.code = "99"
@@ -502,4 +505,4 @@
return resp
}
}
-}
\ No newline at end of file
+}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index f10bf3b..6779e80 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -234,6 +234,8 @@
val dtl = transactionService.wip(param.refno)
val service = createAgentService<DtlStatus>(TradeDict.PAYTYPE_CITIZEN_CARD)
val resp = service.pay(dtl)
+ resp.code = AgentCode.SUCCESS
+ resp.agentRefno = systemUtilService.refno
when (resp.code) {
AgentCode.SUCCESS ->
transactionService.success(dtl.refno, resp.agentRefno, false).let {
@@ -344,7 +346,8 @@
transactionService.wip(refundTrans.refno)
val service = createAgentService<Any>(mainDtl.sourceType)
val resp = service.refund(refundTrans)
-
+ resp.code = AgentCode.SUCCESS
+ resp.agentRefno = systemUtilService.refno
when (resp.code) {
AgentCode.SUCCESS -> {
transactionService.success(refundTrans.refno, resp.agentRefno, false)
@@ -795,4 +798,4 @@
.fail(ret.retcode, ret.retmsg))
}
}
-}
\ No newline at end of file
+}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
index 3688191..94b077b 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
@@ -1,9 +1,6 @@
package com.supwisdom.dlpay.api.controller
-import com.supwisdom.dlpay.api.bean.ModifyUserParam
-import com.supwisdom.dlpay.api.bean.OpenUserParam
-import com.supwisdom.dlpay.api.bean.QueryCardsParam
-import com.supwisdom.dlpay.api.bean.QueryUserParam
+import com.supwisdom.dlpay.api.bean.*
import com.supwisdom.dlpay.api.exception.RequestParamCheckException
import com.supwisdom.dlpay.api.service.CardService
import com.supwisdom.dlpay.api.service.KafkaSendMsgService
@@ -13,6 +10,8 @@
import com.supwisdom.dlpay.framework.ResponseBodyBuilder
import com.supwisdom.dlpay.framework.service.CommonService
import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.system.bean.LevelBean
+import com.supwisdom.dlpay.system.service.PointsService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
@@ -29,6 +28,8 @@
private lateinit var cardService: CardService
@Autowired
private lateinit var kafkaSendMsgService: KafkaSendMsgService
+ @Autowired
+ private lateinit var pointsService: PointsService
@PostMapping("/open")
@@ -160,4 +161,38 @@
return ResponseEntity.ok(ResponseBodyBuilder.create()
.success("ok"))
}
-}
\ No newline at end of file
+
+ @PostMapping("/userTask")
+ fun userTask(@RequestBody param: UserTaskParam): ResponseEntity<Any> {
+ val ret = pointsService.finishTask(param.userid, param.taskid)
+ return if(ret.get("code")==200){
+ ResponseEntity.ok(ResponseBodyBuilder.create()
+ .success("ok"))
+ }else{
+ ResponseEntity.ok(ResponseBodyBuilder.create()
+ .fail(500, ret.get("msg") as String))
+ }
+ }
+ @PostMapping("/getTask")
+ fun getTPointsTaskNoPage(): ResponseEntity<Any> {
+ val ret = pointsService.getTPointsTaskNoPage()
+ return if(ret.get("code")==200){
+ ResponseEntity.ok(ResponseBodyBuilder.create().data("ret", ret.get("dataList")!!)
+ .success("ok"))
+ }else{
+ ResponseEntity.ok(ResponseBodyBuilder.create()
+ .fail(500, ret.get("msg") as String))
+ }
+ }
+ @PostMapping("/getUserPoints")
+ fun getUserPoints(@RequestBody param: UserPointsParam): ResponseEntity<Any> {
+ var lev = LevelBean()
+ lev.name = param.name
+ lev.idno = param.idno
+ lev.pageNo = param.pageNo
+ lev.pageSize = param.pageSize
+ val ret = pointsService.getTPointsByname(lev);
+ return ResponseEntity.ok(ResponseBodyBuilder.create().data("page", ret!!)
+ .success("ok"))
+ }
+}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index 3ba1de2..b93e7d3 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -12,6 +12,7 @@
import com.supwisdom.dlpay.framework.service.SystemUtilService
import com.supwisdom.dlpay.framework.tenant.TenantContext
import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.system.service.PointsService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import java.sql.SQLException
@@ -35,6 +36,9 @@
@Autowired
private lateinit var sourceTypeService: SourceTypeService
+ @Autowired
+ private lateinit var pointsService: PointsService
+
/// 公共函数部分
private fun preCheck(builder: TransactionBuilder) {
@@ -424,7 +428,6 @@
originTrans.reverseFlag = TradeDict.REVERSE_FLAG_WIP
originTrans.refundAmount = refundAmount
transactionMainDao.save(originTrans)
- //退款之后进行积分处理
return transaction
}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
index 903a802..dbb5681 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
@@ -107,8 +107,17 @@
if (it.person && !it.personDtl.userid.isNullOrEmpty()) {
kafkaSendMsgService.sendJpushMessage(it.personDtl.userid, "交易提醒", "你有一笔${it.personDtl.amount}元的支出,点击查看详情", it.refno, mutableMapOf(), it.tenantid)
}
- //支付成功 进行积分处理
-
+ if(-it.personDtl.amount>=0) {
+ //支付成功 进行积分处理
+ pointsService.singleHandlePoints(it.personDtl.userid, -it.personDtl.amount, refno);
+ pointsService.dayHandlePoints(it.personDtl.userid, refno);
+ pointsService.monthHandlePoints(it.personDtl.userid, refno);
+ // pointsService.pointsOutdate();
+ pointsService.pointsCompensate();
+ }else {
+ //退款之后进行积分处理
+ pointsService.refundHandlePoints(it.personDtl.userid, it.reverseRefno);
+ }
}
}
diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties
index 091b5cf..0881a1c 100644
--- a/payapi/src/main/resources/application.properties
+++ b/payapi/src/main/resources/application.properties
@@ -36,9 +36,11 @@
payapi.sourcetype.checker.scheduler=7 3/10 * * * ?
citizencard.dolosstask.cron=-
send.delay.notice.task.cron=29 0/1 * * * ?
+points.outdate.cron=0 0 0 * * ?
+points.consume.cron=0 0 0 * * ?
################################################
# user password
auth.password.bcrypt.length=10
###################################################
spring.redis.database=0
-multi-tenant.datasource.base-package=com.supwisdom.dlpay
\ No newline at end of file
+multi-tenant.datasource.base-package=com.supwisdom.dlpay
diff --git a/payapi/src/main/resources/templates/index.html b/payapi/src/main/resources/templates/index.html
index 302af3a..fb17475 100755
--- a/payapi/src/main/resources/templates/index.html
+++ b/payapi/src/main/resources/templates/index.html
@@ -162,4 +162,4 @@
</script>
</body>
-</html>
\ No newline at end of file
+</html>
diff --git a/payapi/src/main/resources/templates/system/level/pointsactiveadd.html b/payapi/src/main/resources/templates/system/level/pointsactiveadd.html
index 16eed53..3a5a4d5 100644
--- a/payapi/src/main/resources/templates/system/level/pointsactiveadd.html
+++ b/payapi/src/main/resources/templates/system/level/pointsactiveadd.html
@@ -91,18 +91,22 @@
laydate.render({
elem: '#start-date-value' //指定元素
,format: 'yyyy年MM月dd日'
+ ,trigger: 'click'
});
laydate.render({
elem: '#end-date-value' //指定元素
,format: 'yyyy年MM月dd日'
+ ,trigger: 'click'
});
laydate.render({
elem: '#year-start-value' //指定元素
,format: 'MM月dd日'
+ ,trigger: 'click'
});
laydate.render({
elem: '#year-end-value' //指定元素
,format: 'MM月dd日'
+ ,trigger: 'click'
});
var url = '[[@{/pointsActive/add}]]';
form.render('radio');
diff --git a/payapi/src/main/resources/templates/system/level/pointsactiveindex.html b/payapi/src/main/resources/templates/system/level/pointsactiveindex.html
index 88d7d54..0c1806a 100644
--- a/payapi/src/main/resources/templates/system/level/pointsactiveindex.html
+++ b/payapi/src/main/resources/templates/system/level/pointsactiveindex.html
@@ -9,21 +9,21 @@
<div class="layui-card-body">
<div class="layui-form toolbar">
活动日名称:
- <input id="search-chkstatus-searchkey" class="layui-input search-input" type="text"
+ <input id="search-chkstatus-type" class="layui-input search-input" type="text"
maxlength="20"/> 
<div style="display: inline;width: 200px" id="type-value" class="layui-form toolbar">
循环方式:
- <select id="shop-manager-search-status">
+ <select id="shop-manager-search-type">
<option value=""> 全部</option>
<option value="no">不循环</option>
<option value="month">月循环</option>
<option value="year">年循环</option>
</select>
</div>
- <button id="btn-chkstatus-search" class="layui-btn icon-btn" data-type="search"><i
+ <button id="btn-chkstatus-type" class="layui-btn icon-btn" data-type="search"><i
class="layui-icon"></i>搜索
</button>
- <button id="btn-reset-sysparam" class="layui-btn layui-btn-primary" data-type="reset"><i
+ <button id="btn-reset-type" class="layui-btn layui-btn-primary" data-type="reset"><i
class="layui-icon"></i>清 空
</button>
<div style="color: red;margin-top: 10px">
@@ -104,15 +104,15 @@
});
// 搜索按钮点击事件
- $('#btn-chkstatus-search').click(function () {
- var name = $("#search-chkstatus-searchkey").val();
- var type = $("#shop-manager-search-status").val();
+ $('#btn-chkstatus-type').click(function () {
+ var name = $("#search-chkstatus-type").val();
+ var type = $("#shop-manager-search-type").val();
table.reload('pointsActiveTable', {where: {name: name, type: type}});
});
- $('#btn-reset-sysparam').click(function () {
- $("#search-chkstatus-searchkey").val("");
- $('#shop-manager-search-status option:selected').val("");
+ $('#btn-reset-type').click(function () {
+ $("#search-chkstatus-type").val("");
+ $('#shop-manager-search-type option:selected').val("");
});
// 工具条点击事件
diff --git a/payapi/src/main/resources/templates/system/level/pointsreport.html b/payapi/src/main/resources/templates/system/level/pointsreport.html
index 76a5ece..aa84fd1 100644
--- a/payapi/src/main/resources/templates/system/level/pointsreport.html
+++ b/payapi/src/main/resources/templates/system/level/pointsreport.html
@@ -11,13 +11,13 @@
<div class="layui-inline" style="margin-right: 20px">
<label class="layui-form-label">积分日期</label>
<div class="layui-input-inline" style="width: 120px;">
- <input type="text" name="startDate" id="startDate"
+ <input type="text" name="startDate" id="startDateReport"
placeholder="开始日期"
autocomplete="off" class="layui-input"/>
</div>
-
<div class="layui-input-inline" style="width: 120px;">
- <input type="text" name="endDate" id="endDate" placeholder="结束日期"
+ <input type="text" name="endDate" id="endDateReport" placeholder="结束日期"
autocomplete="off"
class="layui-input"/>
</div>
@@ -28,10 +28,10 @@
<option selected='selected' value=""> 全部</option>
</select>
</div>
- <button id="btn-chkstatus-search" class="layui-btn icon-btn" data-type="search"><i
+ <button id="btn-chkstatus-report" class="layui-btn icon-btn" data-type="search"><i
class="layui-icon"></i>搜索
</button>
- <button id="btn-reset-sysparam" class="layui-btn layui-btn-primary" data-type="reset"><i
+ <button id="btn-reset-report" class="layui-btn layui-btn-primary" data-type="reset"><i
class="layui-icon"></i>清 空
</button>
</div>
@@ -55,17 +55,19 @@
var table = layui.table;
var admin = layui.admin;
var laydate = layui.laydate;
-
+ let element = layui.element;
let init_date = new Date();
laydate.render({
- elem: '#startDate'
+ elem: '#startDateReport'
, format: 'yyyy年MM月dd日'
, value: init_date
+ ,trigger: 'click'
});
laydate.render({
- elem: '#endDate'
+ elem: '#endDateReport'
, format: 'yyyy年MM月dd日'
, value: init_date
+ ,trigger: 'click'
});
// 渲染表格
table.render({
@@ -104,16 +106,16 @@
});
// 搜索按钮点击事件
- $('#btn-chkstatus-search').click(function () {
+ $('#btn-chkstatus-report').click(function () {
let name = $("#points-name").val();
- let startDate = $("#startDate").val();
- let endDate = $("#endDate").val();
+ let startDate = $("#startDateReport").val();
+ let endDate = $("#endDateReport").val();
table.reload('pointsReportTable', {where: {name: name, startdate: startDate, enddate: endDate}});
});
- $('#btn-reset-sysparam').click(function () {
- $("#startDate").val("");
- $("#endDate").val("");
+ $('#btn-reset-report').click(function () {
+ $("#startDateReport").val("");
+ $("#endDateReport").val("");
});
let getPointsReportParam = function () {
@@ -137,7 +139,8 @@
$("#points-name").append('<option value="'+dataSet[i].dictval+'">'+dataSet[i].dicttypename+'</option>');
}
}
- form.render("select");
+ form.render();
+ element.init();
} else if (result.code === 401) {
layer.msg(result.msg, {icon: 2, time: 1500}, function () {
location.replace('[[@{/login}]]');
diff --git a/payapi/src/main/resources/templates/system/level/userpointsindex.html b/payapi/src/main/resources/templates/system/level/userpointsindex.html
index 0e98a3e..14a84f1 100644
--- a/payapi/src/main/resources/templates/system/level/userpointsindex.html
+++ b/payapi/src/main/resources/templates/system/level/userpointsindex.html
@@ -9,34 +9,38 @@
<div class="layui-card-body">
<div class="layui-form toolbar">
姓名:
- <input id="search-chkstatus-searchkey" class="layui-input search-input" type="text"
+ <input id="search-chkstatus-get" class="layui-input search-input" type="text"
maxlength="20"/> 
市民卡账号:
<input id="search-account" class="layui-input search-input" type="text" maxlength="20"/> 
积分名称:
- <select id="points-name">
+ <select id="points-name-select">
<option value=""> 全部</option>
- <option value="consume">消费获得</option>
- <option value="task">任务获得</option>
+ <option value="consume">消费积分</option>
+ <option value="outpoints">失效积分</option>
+ <option value="consumeDay">日累计奖励</option>
+ <option value="consumeMonth">月累计奖励</option>
+ <option value="task">日常任务积分</option>
+ <option value="consumeRefund">退款积分</option>
</select>
<div class="layui-inline">
<label class="layui-form-label">积分日期</label>
<div class="layui-input-inline" style="width: 120px;">
- <input type="text" name="startDate" id="startDate"
+ <input type="text" name="startDate" id="startDateSelect"
placeholder="开始日期"
autocomplete="off" class="layui-input"/>
</div>
-
<div class="layui-input-inline" style="width: 120px;">
- <input type="text" name="endDate" id="endDate" placeholder="结束日期"
+ <input type="text" name="endDate" id="endDateSelect" placeholder="结束日期"
autocomplete="off"
class="layui-input"/>
</div>
</div>
- <button id="btn-chkstatus-search" class="layui-btn icon-btn" data-type="search" style="margin-top: 10px"><i
+ <button id="btn-chkstatus-search-select" class="layui-btn icon-btn" data-type="search" style="margin-top: 10px"><i
class="layui-icon"></i>搜索
</button>
- <button id="btn-reset-sysparam" class="layui-btn layui-btn-primary" data-type="reset" style="margin-top: 10px"><i
+ <button id="btn-reset-sysparam-select" class="layui-btn layui-btn-primary" data-type="reset" style="margin-top: 10px"><i
class="layui-icon"></i>清 空
</button>
<div style="color: red;margin-top: 10px">查询无符合条件的记录,请重新输入查询条件!</div>
@@ -60,12 +64,14 @@
var laydate = layui.laydate;
form.render("select");
laydate.render({
- elem: '#startDate'
+ elem: '#startDateSelect'
,format: 'yyyy年MM月dd日'
+ ,trigger: 'click'
});
laydate.render({
- elem: '#endDate'
+ elem: '#endDateSelect'
,format: 'yyyy年MM月dd日'
+ ,trigger: 'click'
});
// 渲染表格
table.render({
@@ -122,7 +128,36 @@
title: '积分名称',
width: 140,
align: 'center',
- sort: true
+ sort: true,
+ templet: function (item) {
+ if(item.type=="consume"){
+ return "消费积分";
+ }
+ if(item.type=="outpoints"){
+ return "失效积分";
+ }
+ if(item.type=="consumeDay"){
+ return "日累计奖励";
+ }
+ if(item.type=="consumeMonth"){
+ return "月累计奖励"
+ }
+ if(item.type=="task"){
+ return "日常任务积分"
+ }
+ if(item.type=="consumeRefund"){
+ return "退款积分"
+ }
+ if(item.type=="consumeRefund"){
+ return "退款积分"
+ }
+ if(item.type=="consumeDayRefund"){
+ return "退款日累计奖励积分"
+ }
+ if(item.type=="consumeMonthRefund"){
+ return "退款月累计奖励积分"
+ }
+ }
},
{field: 'points', title: '获得积分', width: 130, align: 'center'},
{field: 'aftpoints', title: '目前可用积分', width: 160, align: 'center'},
@@ -132,20 +167,20 @@
});
// 搜索按钮点击事件
- $('#btn-chkstatus-search').click(function () {
- let name = $("#search-chkstatus-searchkey").val();
+ $('#btn-chkstatus-search-select').click(function () {
+ let name = $("#search-chkstatus-get").val();
let idno = $("#search-account").val();
- let startDate = $("#startDate").val();
- let endDate = $("#endDate").val();
- let pointsName = $("#points-name").val();
+ let startDate = $("#startDateSelect").val();
+ let endDate = $("#endDateSelect").val();
+ let pointsName = $("#points-name-select").val();
table.reload('userPointsTable', {where: {name: name, idno: idno,startDate:startDate,endDate:endDate,pointsName:pointsName}});
});
- $('#btn-reset-sysparam').click(function () {
- $("#search-chkstatus-searchkey").val("");
+ $('#btn-reset-sysparam-select').click(function () {
+ $("#search-chkstatus-get").val("");
$("#search-account").val("");
- $("#startDate").val("");
- $("#endDate").val("");
+ /* $("#startDateSelect").val("");
+ $("#endDateSelect").val("");*/
});
/* // 工具条点击事件