Merge branch 'hotfix/1.0.25'
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/PersonDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java
index 988afaa..5483aa1 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java
@@ -19,4 +19,8 @@
TPerson findByUserid(String userid);
Page<TPerson> findAllByNameContaining(String name, Pageable pageable);
+
+ TPerson findByUseridAndAndName(String userid,String name);
+
+ TPerson findByUseridAndIdtype(String userid,String idtype);
}
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 18c15d9..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
@@ -2,6 +2,7 @@
import com.supwisdom.dlpay.api.domain.TPersondtl;
import com.supwisdom.dlpay.framework.data.CountAmountBean;
+import com.supwisdom.dlpay.framework.domain.TPointsdtl;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
@@ -9,10 +10,18 @@
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
+import java.util.List;
+
@Repository
public interface PersondtlDao extends JpaRepository<TPersondtl, String>,JpaSpecificationExecutor<TPersondtl> {
Page<TPersondtl> findByUseridAndStatus(String userid,String status, Pageable pageable);
@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> findAllByUseridAndTransdateAndReverseFlagAndStatusAndTradeflag(String userid, String transdate,String reverseFlag,String status,String tradeflag);
+
+ 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/ConsumePointsDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ConsumePointsDao.java
new file mode 100644
index 0000000..57fd086
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ConsumePointsDao.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TConsumePoints;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface ConsumePointsDao extends JpaRepository<TConsumePoints, Integer> {
+ List<TConsumePoints> findAllByAndRuletype(String ruletype, Sort sort);
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PersonLevelDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PersonLevelDao.java
new file mode 100644
index 0000000..c0bd26d
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PersonLevelDao.java
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TPersonLevel;
+import com.supwisdom.dlpay.framework.domain.TRole;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface PersonLevelDao extends JpaRepository<TPersonLevel, Integer> {
+
+ @Query(value = "from TPersonLevel t where t.pointsLower<=:points and t.pointsUpper>=:points ")
+ TPersonLevel findTPersonLevelByPoints(@Param("points")Integer points);
+}
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
new file mode 100644
index 0000000..5bdf552
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsActiveDao.java
@@ -0,0 +1,18 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TPointsActive;
+import com.supwisdom.dlpay.framework.domain.TPointsMain;
+import com.supwisdom.dlpay.framework.domain.TShop;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+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
new file mode 100644
index 0000000..8c33de2
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDetailDao.java
@@ -0,0 +1,17 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TBusinesspara;
+import com.supwisdom.dlpay.framework.domain.TPointsDetail;
+import com.supwisdom.dlpay.framework.domain.TPointsTask;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+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
new file mode 100644
index 0000000..0bbf7a3
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDtlDao.java
@@ -0,0 +1,36 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TPointsActive;
+import com.supwisdom.dlpay.framework.domain.TPointsdtl;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface PointsDtlDao extends JpaRepository<TPointsdtl, Integer>, JpaSpecificationExecutor<TPointsdtl> {
+
+ Page<TPointsdtl> findAllByUserid(String userid, Pageable pageable);
+
+ List<TPointsdtl> findAllByUseridAndTypeAndFlagstatusAndTransdateAndStatus(String userid, String type,String flagstatus,String transdate,String status);
+
+ 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/dao/PointsMainDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsMainDao.java
new file mode 100644
index 0000000..6769b7f
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsMainDao.java
@@ -0,0 +1,11 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TPointsMain;
+import com.supwisdom.dlpay.framework.domain.TPointsTask;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface PointsMainDao extends JpaRepository<TPointsMain, String> {
+
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsTaskDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsTaskDao.java
new file mode 100644
index 0000000..8da33a8
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsTaskDao.java
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.framework.dao;
+
+import com.supwisdom.dlpay.framework.domain.TPointsTask;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface PointsTaskDao extends JpaRepository<TPointsTask, Integer> {
+
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TConsumePoints.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TConsumePoints.java
new file mode 100644
index 0000000..84fb2c1
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TConsumePoints.java
@@ -0,0 +1,89 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+
+@Entity
+@Table(name = "TB_CONSUME_POINTS")
+public class TConsumePoints {
+ @Id
+ @SequenceGenerator(name = "conpointsno", sequenceName = "SEQ_CONPOINTSNO", allocationSize = 1, initialValue = 1)
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "conpointsno")
+ @Column(name = "ID", nullable = false, precision = 32)
+ private Integer id;
+
+ @Column(name = "NAME", length = 32)
+ private String name;
+
+ @Column(name = "CONSUMEAMOUNT")
+ private String consumeamount;
+
+ @Column(name = "POINTS")
+ @NotNull
+ private Integer points;
+
+ @Column(name = "RULETYPE")
+ private String ruletype;
+
+ @Column(name = "UPDATETIME")
+ private String updatetime;
+
+ @Column(name = "OPERATORID")
+ private String operatorid;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getConsumeamount() {
+ return consumeamount;
+ }
+
+ public void setConsumeamount(String consumeamount) {
+ this.consumeamount = consumeamount;
+ }
+
+ public Integer getPoints() {
+ return points;
+ }
+
+ public void setPoints(Integer points) {
+ this.points = points;
+ }
+
+ public String getRuletype() {
+ return ruletype;
+ }
+
+ public void setRuletype(String ruletype) {
+ this.ruletype = ruletype;
+ }
+
+ public String getUpdatetime() {
+ return updatetime;
+ }
+
+ public void setUpdatetime(String updatetime) {
+ this.updatetime = updatetime;
+ }
+
+ public String getOperatorid() {
+ return operatorid;
+ }
+
+ public void setOperatorid(String operatorid) {
+ this.operatorid = operatorid;
+ }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPersonLevel.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPersonLevel.java
new file mode 100644
index 0000000..b6dd60b
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPersonLevel.java
@@ -0,0 +1,113 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+
+@Entity
+@Table(name = "TB_PERSON_LEVEL")
+public class TPersonLevel {
+ @Id
+ @SequenceGenerator(name = "personno", sequenceName = "SEQ_PERSONNO", allocationSize = 1, initialValue = 1)
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "personno")
+ @Column(name = "ID", nullable = false, precision = 32)
+ private Integer id;
+
+ @Column(name = "NAME", length = 32)
+ private String name;
+
+ @Column(name = "POINTSLOWER")
+ @NotNull
+ private Integer pointsLower;
+
+ @Column(name = "POINTSUPPER")
+ private Integer pointsUpper;
+
+ @Column(name = "UPDATETIME")
+ private String updatetime;
+
+ @Column(name = "OPERATORID")
+ private String operatorid;
+
+ @Column(name = "SINGLECONSUMEAMOUNT")
+ private Integer singleConsumeAmount;
+
+ @Column(name = "singleamount")
+ private Integer singleAmount;
+
+ @Column(name = "singlepoints")
+ private Integer singlePoints;
+
+ public Integer getSingleConsumeAmount() {
+ return singleConsumeAmount;
+ }
+
+ public void setSingleConsumeAmount(Integer singleConsumeAmount) {
+ this.singleConsumeAmount = singleConsumeAmount;
+ }
+
+ public Integer getSingleAmount() {
+ return singleAmount;
+ }
+
+ public void setSingleAmount(Integer singleAmount) {
+ this.singleAmount = singleAmount;
+ }
+
+ public Integer getSinglePoints() {
+ return singlePoints;
+ }
+
+ public void setSinglePoints(Integer singlePoints) {
+ this.singlePoints = singlePoints;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Integer getPointsLower() {
+ return pointsLower;
+ }
+
+ public void setPointsLower(Integer pointsLower) {
+ this.pointsLower = pointsLower;
+ }
+
+ public Integer getPointsUpper() {
+ return pointsUpper;
+ }
+
+ public void setPointsUpper(Integer pointsUpper) {
+ this.pointsUpper = pointsUpper;
+ }
+
+ public String getUpdatetime() {
+ return updatetime;
+ }
+
+ public void setUpdatetime(String updatetime) {
+ this.updatetime = updatetime;
+ }
+
+ public String getOperatorid() {
+ return operatorid;
+ }
+
+ public void setOperatorid(String operatorid) {
+ this.operatorid = operatorid;
+ }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsActive.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsActive.java
new file mode 100644
index 0000000..4ec689c
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsActive.java
@@ -0,0 +1,155 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_POINTS_ACTIVE")
+public class TPointsActive {
+ @Id
+ @SequenceGenerator(name = "activeno", sequenceName = "SEQ_ACTIVENO", allocationSize = 1, initialValue = 1)
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "activeno")
+ @Column(name = "ID", nullable = false, precision = 32)
+ private Integer id;
+
+ @Column(name = "NAME", length = 32)
+ private String name;
+
+ @Column(name = "TYPE")
+ private String type;
+
+ @Column(name = "STARTDATE")
+ private String startdate;
+
+ @Column(name = "ENDDATE")
+ private String enddate;
+
+ @Column(name = "WEEKNUMBER")
+ private Integer weeknumber;
+
+ @Column(name = "WEEKDAY")
+ private String weekday;
+
+ @Column(name = "RATE")
+ private String rate;
+
+ @Column(name = "REMARK")
+ private String remark;
+
+ @Column(name = "UPDATETIME")
+ private String updatetime;
+
+ @Column(name = "OPERATORID")
+ private String operatorid;
+
+ @Transient
+ private String yearStartDate;
+
+ @Transient
+ private String yearEndDate;
+
+ public String getYearStartDate() {
+ return yearStartDate;
+ }
+
+ public void setYearStartDate(String yearStartDate) {
+ this.yearStartDate = yearStartDate;
+ }
+
+ public String getYearEndDate() {
+ return yearEndDate;
+ }
+
+ public void setYearEndDate(String yearEndDate) {
+ this.yearEndDate = yearEndDate;
+ }
+
+ public String getUpdatetime() {
+ return updatetime;
+ }
+
+ public void setUpdatetime(String updatetime) {
+ this.updatetime = updatetime;
+ }
+
+ public String getOperatorid() {
+ return operatorid;
+ }
+
+ public void setOperatorid(String operatorid) {
+ this.operatorid = operatorid;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getStartdate() {
+ return startdate;
+ }
+
+ public void setStartdate(String startdate) {
+ this.startdate = startdate;
+ }
+
+ public String getEnddate() {
+ return enddate;
+ }
+
+ public void setEnddate(String enddate) {
+ this.enddate = enddate;
+ }
+
+ public Integer getWeeknumber() {
+ return weeknumber;
+ }
+
+ public void setWeeknumber(Integer weeknumber) {
+ this.weeknumber = weeknumber;
+ }
+
+ public String getWeekday() {
+ return weekday;
+ }
+
+ public void setWeekday(String weekday) {
+ this.weekday = weekday;
+ }
+
+ public String getRate() {
+ return rate;
+ }
+
+ public void setRate(String rate) {
+ this.rate = rate;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+}
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
new file mode 100644
index 0000000..6493001
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsDetail.java
@@ -0,0 +1,79 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+
+@Entity
+@Table(name = "TB_POINTS_DETAIL")
+public class TPointsDetail {
+ @Id
+ @GenericGenerator(name = "idGeneratorDeta", strategy = "sequence")
+ @GeneratedValue(generator = "idGeneratorDeta")
+ @Column(name = "DETAILID", nullable = false, precision = 32)
+ private Integer detailid;
+
+ @Column(name = "POINTSDTLID", length = 32)
+ private Integer pointsdtlId;
+
+ @Column(name = "USERID")
+ private String userid;
+
+ @Column(name = "POINTS")
+ private Integer points;
+
+ @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;
+ }
+
+ public void setDetailid(Integer detailid) {
+ this.detailid = detailid;
+ }
+
+ public Integer getPointsdtlId() {
+ return pointsdtlId;
+ }
+
+ public void setPointsdtlId(Integer pointsdtlId) {
+ this.pointsdtlId = pointsdtlId;
+ }
+
+ public String getUserid() {
+ return userid;
+ }
+
+ public void setUserid(String userid) {
+ this.userid = userid;
+ }
+
+ public Integer getPoints() {
+ return points;
+ }
+
+ public void setPoints(Integer points) {
+ this.points = points;
+ }
+
+ public String getOutDate() {
+ return outDate;
+ }
+
+ public void setOutDate(String outDate) {
+ this.outDate = outDate;
+ }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsMain.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsMain.java
new file mode 100644
index 0000000..1aea319
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsMain.java
@@ -0,0 +1,117 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+
+@Entity
+@Table(name = "TB_POINTS_MAIN")
+public class TPointsMain {
+ @Id
+ @Column(name = "USERID", nullable = false, precision = 32)
+ private String userid;
+
+ @Column(name = "POINTS", length = 32)
+ private Integer points;
+
+ @Column(name = "ACCUMPOINTS")
+ private Integer accumPoints;
+
+ @Column(name = "SUMPAYPOINTS")
+ private Integer sumpayPoints;
+
+ @Column(name = "OUTPOINTS")
+ private Integer outPoints;
+
+ @Column(name = "UPDATETIME")
+ private String updatetime;
+
+ @Column(name = "LEVELID")
+ private Integer levelid;
+
+ @Transient
+ private String name;
+ @Transient
+ private String cardno;
+ @Transient
+ private String levelname;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Integer getLevelid() {
+ return levelid;
+ }
+
+ public void setLevelid(Integer levelid) {
+ this.levelid = levelid;
+ }
+
+ public String getCardno() {
+ return cardno;
+ }
+
+ public void setCardno(String cardno) {
+ this.cardno = cardno;
+ }
+
+ public String getLevelname() {
+ return levelname;
+ }
+
+ public void setLevelname(String levelname) {
+ this.levelname = levelname;
+ }
+
+ public String getUserid() {
+ return userid;
+ }
+
+ public void setUserid(String userid) {
+ this.userid = userid;
+ }
+
+ public Integer getPoints() {
+ return points;
+ }
+
+ public void setPoints(Integer points) {
+ this.points = points;
+ }
+
+ public Integer getAccumPoints() {
+ return accumPoints;
+ }
+
+ public void setAccumPoints(Integer accumPoints) {
+ this.accumPoints = accumPoints;
+ }
+
+ public Integer getSumpayPoints() {
+ return sumpayPoints;
+ }
+
+ public void setSumpayPoints(Integer sumpayPoints) {
+ this.sumpayPoints = sumpayPoints;
+ }
+
+ public Integer getOutPoints() {
+ return outPoints;
+ }
+
+ public void setOutPoints(Integer outPoints) {
+ this.outPoints = outPoints;
+ }
+
+ public String getUpdatetime() {
+ return updatetime;
+ }
+
+ public void setUpdatetime(String updatetime) {
+ this.updatetime = updatetime;
+ }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsTask.java
new file mode 100644
index 0000000..a0b32d3
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsTask.java
@@ -0,0 +1,100 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+
+@Entity
+@Table(name = "TB_POINTS_TASK")
+public class TPointsTask {
+ @Id
+ @SequenceGenerator(name = "taskno", sequenceName = "SEQ_TASKNO", allocationSize = 1, initialValue = 1)
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "taskno")
+ @Column(name = "TASKID", nullable = false, precision = 32)
+ private Integer taskid;
+
+ @Column(name = "TASKNAME", length = 32)
+ private String taskname;
+
+ @Column(name = "TYPE")
+ private String type;
+
+ @Column(name = "TASKPOINTS")
+ @NotNull
+ private Integer taskpoints;
+
+ @Column(name = "REMARK")
+ private String remark;
+
+ @Column(name = "STARTTIME")
+ private String starttime;
+
+ @Column(name = "ENDTIME")
+ private String endtime;
+
+ @Column(name = "ENABLE")
+ private String enable;
+
+ public Integer getTaskid() {
+ return taskid;
+ }
+
+ public void setTaskid(Integer taskid) {
+ this.taskid = taskid;
+ }
+
+ public String getTaskname() {
+ return taskname;
+ }
+
+ public void setTaskname(String taskname) {
+ this.taskname = taskname;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public Integer getTaskpoints() {
+ return taskpoints;
+ }
+
+ public void setTaskpoints(Integer taskpoints) {
+ this.taskpoints = taskpoints;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public String getStarttime() {
+ return starttime;
+ }
+
+ public void setStarttime(String starttime) {
+ this.starttime = starttime;
+ }
+
+ public String getEndtime() {
+ return endtime;
+ }
+
+ public void setEndtime(String endtime) {
+ this.endtime = endtime;
+ }
+
+ public String getEnable() {
+ return enable;
+ }
+
+ public void setEnable(String enable) {
+ this.enable = enable;
+ }
+}
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
new file mode 100644
index 0000000..8d42159
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsdtl.java
@@ -0,0 +1,166 @@
+package com.supwisdom.dlpay.framework.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_POINTSDTL")
+public class TPointsdtl {
+ @Id
+ @GenericGenerator(name = "idGeneratorDtl", strategy = "sequence")
+ @GeneratedValue(generator = "idGeneratorDtl")
+ @Column(name = "ID", nullable = false, precision = 32)
+ private Integer id;
+
+ @Column(name = "REFNO", length = 32)
+ private Integer refno;
+
+ @Column(name = "TYPE")
+ private String type;
+
+ @Column(name = "USERID")
+ private String userid;
+
+ @Column(name = "POINTS")
+ private String points;
+
+ @Column(name = "STATUS", length = 32)
+ private String status;
+
+ @Column(name = "AFTPOINTS")
+ private Integer aftpoints;
+
+ @Column(name = "BILLNO")
+ private String billno;
+
+ @Column(name = "TRANSDATE")
+ private String transdate;
+
+ @Column(name = "TRANSTIME", length = 32)
+ private String transtime;
+
+ @Column(name = "DETAILID")
+ private Integer detailid;
+
+ @Column(name = "MAINSTATUS")
+ private String mainstatus;
+
+ @Column(name = "FLAGSTATUS")
+ private String flagstatus;
+
+ @Transient
+ private TPointsMain tPointsMain;
+
+ public TPointsMain gettPointsMain() {
+ return tPointsMain;
+ }
+
+ public void settPointsMain(TPointsMain tPointsMain) {
+ this.tPointsMain = tPointsMain;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Integer getRefno() {
+ return refno;
+ }
+
+ public void setRefno(Integer refno) {
+ this.refno = refno;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getUserid() {
+ return userid;
+ }
+
+ public void setUserid(String userid) {
+ this.userid = userid;
+ }
+
+ public String getPoints() {
+ return points;
+ }
+
+ public void setPoints(String points) {
+ this.points = points;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public Integer getAftpoints() {
+ return aftpoints;
+ }
+
+ public void setAftpoints(Integer aftpoints) {
+ this.aftpoints = aftpoints;
+ }
+
+ public String getBillno() {
+ return billno;
+ }
+
+ public void setBillno(String billno) {
+ this.billno = billno;
+ }
+
+ public String getTransdate() {
+ return transdate;
+ }
+
+ public void setTransdate(String transdate) {
+ this.transdate = transdate;
+ }
+
+ public String getTranstime() {
+ return transtime;
+ }
+
+ public void setTranstime(String transtime) {
+ this.transtime = transtime;
+ }
+
+ public Integer getDetailid() {
+ return detailid;
+ }
+
+ public void setDetailid(Integer detailid) {
+ this.detailid = detailid;
+ }
+
+ public String getMainstatus() {
+ return mainstatus;
+ }
+
+ public void setMainstatus(String mainstatus) {
+ this.mainstatus = mainstatus;
+ }
+
+ public String getFlagstatus() {
+ return flagstatus;
+ }
+
+ public void setFlagstatus(String flagstatus) {
+ this.flagstatus = flagstatus;
+ }
+}
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 fe39ac8..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
@@ -4,6 +4,7 @@
import org.slf4j.LoggerFactory;
import java.sql.Timestamp;
+import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
@@ -25,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
*/
@@ -358,4 +367,68 @@
public static Boolean sameDay(Timestamp d1, Timestamp d2) {
return (compareDay(d1, d2) == 0);
}
+
+ /**
+ * 格式化字符串日期
+ * @param dateStr 字符串日期
+ * @param srcFormat 字符串日期格式
+ * @param destFormat 目标格式
+ * @return
+ */
+ public static String formatDateStr(String dateStr, String srcFormat, String destFormat) {
+ Date date = getDate(dateStr, srcFormat);
+ if(date==null){
+ return dateStr;
+ }
+ return formatDate(date, destFormat);
+ }
+
+ /**
+ * Description: string 格式的日期转换成java.util.Date格式的日期
+ *
+ * @param @param datetime
+ * @param @param pattern
+ * @param @return
+ * @param @throws ParseException
+ * @return Date Modify History: 2010-8-5 Linqing.He create
+ */
+ public static Date getDate(String datetime, String pattern) {
+ if(datetime==null){
+ return null;
+ }
+ SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
+ Date startDate = null;
+ try {
+ startDate = dateFormat.parse(datetime);
+ }catch (Exception e) {
+ logger.error("error:",e);
+ }
+ return startDate;
+ }
+
+ /**
+ * 按照给定格式,格式化日期对象
+ * @param date 日期对象
+ * @param pattern 给定格式
+ * @return
+ */
+ public static String formatDate(Date date, String pattern) {
+ DateFormat formatter = new SimpleDateFormat(pattern);
+ return formatter.format(date);
+ }
+
+
+ /*
+ * 判断当前日期是这个月的第几周
+ *
+ * */
+ public static int howWeeksByMonth(String datetemp) throws ParseException {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+ Date date = sdf.parse(datetemp);
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(date);
+ int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);
+ System.out.println(weekOfMonth);
+ return weekOfMonth;
+ }
}
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 9c2162f..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
@@ -110,4 +110,44 @@
public static final String REVERSE_FLAG_WIP = "wip";
public static final String REVERSE_FLAG_CANCEL = "cancel";
public static final String REVERSE_FLAG_REFUND = "refund";
+
+
+ /*
+ * 积分中心模块
+ *
+ *
+ * */
+ //积分流水表的类型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/bean/LevelBean.java b/payapi/src/main/java/com/supwisdom/dlpay/system/bean/LevelBean.java
new file mode 100644
index 0000000..cbfbee5
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/bean/LevelBean.java
@@ -0,0 +1,245 @@
+package com.supwisdom.dlpay.system.bean;
+
+import com.supwisdom.dlpay.framework.domain.TConsumePoints;
+import com.supwisdom.dlpay.framework.domain.TPersonLevel;
+import com.supwisdom.dlpay.framework.domain.TPointsActive;
+import com.supwisdom.dlpay.framework.domain.TPointsTask;
+
+import java.util.List;
+
+public class LevelBean extends PageBean {
+ private List<TPersonLevel> tPersonLevels;
+ private TPointsTask tPointsTask;
+ private String name;
+ private String idno;
+ private String userid;
+ private Integer levelid;
+ private Integer conPointsid;
+ private List<TConsumePoints> tConsumePoints;
+ private List<TConsumePoints> monthList;
+ private List<TConsumePoints> dayList;
+ private Integer pointslimit;
+ private Integer pointsdate;
+ private TPointsActive pointsActive;
+ private String type;
+ private Integer activeid;
+ private String startDate;
+ private String endDate;
+ private String pointsName;
+ private String consumePointsLi;
+ private String taskPointsLi;
+ private String dayPointsLi;
+ private Integer pointsSum;
+ private Integer pointsCount;
+ private Integer refno;
+ private List<Integer> refnoList;
+
+ public Integer getRefno() {
+ return refno;
+ }
+
+ public void setRefno(Integer refno) {
+ this.refno = refno;
+ }
+
+ public List<Integer> getRefnoList() {
+ return refnoList;
+ }
+
+ public void setRefnoList(List<Integer> refnoList) {
+ this.refnoList = refnoList;
+ }
+
+ public Integer getPointsSum() {
+ return pointsSum;
+ }
+
+ public void setPointsSum(Integer pointsSum) {
+ this.pointsSum = pointsSum;
+ }
+
+ public Integer getPointsCount() {
+ return pointsCount;
+ }
+
+ public void setPointsCount(Integer pointsCount) {
+ this.pointsCount = pointsCount;
+ }
+
+ public LevelBean() {
+ }
+
+ public LevelBean(String name, String startDate, String endDate) {
+ this.name = name;
+ this.startDate = startDate;
+ this.endDate = endDate;
+ }
+
+ public String getConsumePointsLi() {
+ return consumePointsLi;
+ }
+
+ public void setConsumePointsLi(String consumePointsLi) {
+ this.consumePointsLi = consumePointsLi;
+ }
+
+ public String getTaskPointsLi() {
+ return taskPointsLi;
+ }
+
+ public void setTaskPointsLi(String taskPointsLi) {
+ this.taskPointsLi = taskPointsLi;
+ }
+
+ public String getDayPointsLi() {
+ return dayPointsLi;
+ }
+
+ public void setDayPointsLi(String dayPointsLi) {
+ this.dayPointsLi = dayPointsLi;
+ }
+
+ public String getPointsName() {
+ return pointsName;
+ }
+
+ public void setPointsName(String pointsName) {
+ this.pointsName = pointsName;
+ }
+
+ public String getStartDate() {
+ return startDate;
+ }
+
+ public void setStartDate(String startDate) {
+ this.startDate = startDate;
+ }
+
+ public String getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(String endDate) {
+ this.endDate = endDate;
+ }
+
+ public Integer getActiveid() {
+ return activeid;
+ }
+
+ public void setActiveid(Integer activeid) {
+ this.activeid = activeid;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public TPointsActive getPointsActive() {
+ return pointsActive;
+ }
+
+ public void setPointsActive(TPointsActive pointsActive) {
+ this.pointsActive = pointsActive;
+ }
+
+ public Integer getPointsdate() {
+ return pointsdate;
+ }
+
+ public void setPointsdate(Integer pointsdate) {
+ this.pointsdate = pointsdate;
+ }
+
+ public Integer getPointslimit() {
+ return pointslimit;
+ }
+
+ public void setPointslimit(Integer pointslimit) {
+ this.pointslimit = pointslimit;
+ }
+
+ public List<TConsumePoints> getMonthList() {
+ return monthList;
+ }
+
+ public void setMonthList(List<TConsumePoints> monthList) {
+ this.monthList = monthList;
+ }
+
+ public List<TConsumePoints> getDayList() {
+ return dayList;
+ }
+
+ public void setDayList(List<TConsumePoints> dayList) {
+ this.dayList = dayList;
+ }
+
+ public Integer getConPointsid() {
+ return conPointsid;
+ }
+
+ public void setConPointsid(Integer conPointsid) {
+ this.conPointsid = conPointsid;
+ }
+
+ public List<TConsumePoints> gettConsumePoints() {
+ return tConsumePoints;
+ }
+
+ public void settConsumePoints(List<TConsumePoints> tConsumePoints) {
+ this.tConsumePoints = tConsumePoints;
+ }
+
+ public Integer getLevelid() {
+ return levelid;
+ }
+
+ public void setLevelid(Integer levelid) {
+ this.levelid = levelid;
+ }
+
+ public String getUserid() {
+ return userid;
+ }
+
+ public void setUserid(String userid) {
+ this.userid = userid;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getIdno() {
+ return idno;
+ }
+
+ public void setIdno(String idno) {
+ this.idno = idno;
+ }
+
+ public TPointsTask gettPointsTask() {
+ return tPointsTask;
+ }
+
+ public void settPointsTask(TPointsTask tPointsTask) {
+ this.tPointsTask = tPointsTask;
+ }
+
+ public List<TPersonLevel> gettPersonLevels() {
+ return tPersonLevels;
+ }
+
+ public void settPersonLevels(List<TPersonLevel> tPersonLevels) {
+ this.tPersonLevels = tPersonLevels;
+ }
+}
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
new file mode 100644
index 0000000..273e6da
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/PointsController.java
@@ -0,0 +1,366 @@
+package com.supwisdom.dlpay.system.controller;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.framework.dao.DictionaryDao;
+import com.supwisdom.dlpay.framework.dao.SysparaDao;
+import com.supwisdom.dlpay.framework.domain.*;
+import com.supwisdom.dlpay.framework.security.OperUtil;
+import com.supwisdom.dlpay.framework.util.*;
+import com.supwisdom.dlpay.system.bean.CitizenCardSearchBean;
+import com.supwisdom.dlpay.system.bean.CitizenCardShowBean;
+import com.supwisdom.dlpay.system.bean.LevelBean;
+import com.supwisdom.dlpay.system.service.OperatorService;
+import com.supwisdom.dlpay.system.service.ParamService;
+import com.supwisdom.dlpay.system.service.PointsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+@Controller
+public class PointsController {
+
+ @Autowired
+ private PointsService pointsService;
+ @Autowired
+ private OperatorService operatorService;
+
+
+ @GetMapping("/level/index")
+ public String index() {
+ return "system/level/index";
+ }
+
+ @GetMapping("/level/list")
+ @PreAuthorize("hasPermission('/user/list','')")
+ @ResponseBody
+ public JsonResult getDataList() {
+ try {
+ LevelBean levelBean = pointsService.getLevel();
+ return JsonResult.ok().put("datalist", levelBean.gettPersonLevels());
+ } catch (Exception e) {
+ e.printStackTrace();
+ return JsonResult.error("系统查询错误");
+ }
+ }
+
+ @PostMapping("/level/add")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public JsonResult add(@RequestBody LevelBean levelBean) {
+ TOperator operator = OperUtil.getCurrentOper();
+ if (operator != null) {
+ operator = operatorService.getOperatorByCode(operator.getOpercode());
+ }
+ for (TPersonLevel tPersonLevel : levelBean.gettPersonLevels()) {
+ if (StringUtil.isEmpty(tPersonLevel.getName())
+ || tPersonLevel.getPointsLower() == null) {
+ return JsonResult.error("参数错误");
+ }
+ /* if (tPersonLevel.getPointsLower() > tPersonLevel.getPointsUpper()) {
+ return JsonResult.error("积分下限必须小于积分上限");
+ }*/
+ tPersonLevel.setUpdatetime(DateUtil.getNow());
+ tPersonLevel.setOperatorid(operator.getOpercode());
+ }
+ return pointsService.saveLevel(levelBean);
+ }
+
+ @PostMapping("/level/delete")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public JsonResult deleteLevel(@RequestBody LevelBean levelBean) {
+ TPersonLevel tPersonLevel = new TPersonLevel();
+ tPersonLevel.setId(levelBean.getLevelid());
+ return pointsService.deleteLevel(tPersonLevel);
+ }
+
+ @GetMapping("/task/list")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public PageResult<TPointsTask> getTPointsTask(@RequestParam("page") Integer pageNo,
+ @RequestParam("limit") Integer pageSize) {
+ try {
+ if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+ if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+ LevelBean searchBean = new LevelBean();
+ searchBean.setPageNo(pageNo);
+ searchBean.setPageSize(pageSize);
+ return pointsService.getTPointsTask(searchBean);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return new PageResult<>(99, "系统查询错误");
+ }
+ }
+
+
+ @PostMapping("/task/add")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public JsonResult saveTask(@RequestBody LevelBean levelBean) {
+ if (levelBean.gettPointsTask().getTaskid() == null
+ || levelBean.gettPointsTask().getTaskpoints() == null) {
+ return JsonResult.error("参数错误");
+ }
+ return pointsService.saveTask(levelBean.gettPointsTask());
+ }
+
+ @GetMapping("/task/loadadd")
+ public String add() {
+ return "system/level/taskadd";
+ }
+
+
+ @GetMapping("/userpoints/index")
+ public String userpointsindex() {
+ return "system/level/userpointsindex";
+ }
+
+ @GetMapping("/userpoints/list")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public PageResult<TPointsDetail> getTPointsByname(@RequestParam("name") String name,
+ @RequestParam("idno") String idno,
+ @RequestParam(value = "startDate", required = false) String startDate,
+ @RequestParam(value = "endDate", required = false) String endDate,
+ @RequestParam(value = "pointsName", required = false) String pointsName,
+ @RequestParam("page") Integer pageNo,
+ @RequestParam("limit") Integer pageSize) {
+ try {
+ LevelBean searchBean = new LevelBean();
+ searchBean.setName(name);
+ searchBean.setIdno(idno);
+ searchBean.setPageNo(pageNo);
+ searchBean.setPageSize(pageSize);
+ if (!StringUtil.isEmpty(startDate)) {
+ searchBean.setStartDate(DateUtil.formatDateStr(startDate, "yyyy年MM月dd日", "yyyyMMdd"));
+ }
+ if (!StringUtil.isEmpty(endDate)) {
+ searchBean.setEndDate(DateUtil.formatDateStr(endDate, "yyyy年MM月dd日", "yyyyMMdd"));
+ }
+ if (!StringUtil.isEmpty(pointsName)) {
+ searchBean.setPointsName(pointsName);
+ }
+ return pointsService.getTPointsByname(searchBean);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return new PageResult<>(99, "系统查询错误");
+ }
+ }
+
+
+// @GetMapping("/pointsdetail/list")
+// @PreAuthorize("hasPermission('/user/add','')")
+// @ResponseBody
+// public PageResult<TPointsDetail> getTPointsdetailByname(@RequestParam("page") Integer pageNo,
+// @RequestParam("limit") Integer pageSize,
+// @RequestParam("userid") String userid) {
+// try {
+// LevelBean searchBean = new LevelBean();
+// searchBean.setUserid(userid);
+// searchBean.setPageNo(pageNo);
+// searchBean.setPageSize(pageSize);
+// return pointsService.getTPointsdetailByname(searchBean);
+// } catch (Exception e) {
+// e.printStackTrace();
+// return new PageResult<>(99, "系统查询错误");
+// }
+// }
+
+// @GetMapping("/pointsdetail/pointsdetailindex")
+// public String pointsdetail() {
+// return "system/level/pointsdetail";
+// }
+
+
+ @GetMapping("/consume/rulelist")
+ @PreAuthorize("hasPermission('/user/list','')")
+ @ResponseBody
+ public JsonResult getConpointsList() {
+ try {
+ LevelBean levelBean = pointsService.getConpoints();
+ return JsonResult.ok().put("monthConsumeList", levelBean.getMonthList())
+ .put("dayConsumeList", levelBean.getDayList());
+ } catch (Exception e) {
+ e.printStackTrace();
+ return JsonResult.error("系统查询错误");
+ }
+ }
+
+ @PostMapping("/consume/addRulelist")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public JsonResult addRulelist(@RequestBody LevelBean levelBean) {
+ TOperator operator = OperUtil.getCurrentOper();
+ if (operator != null) {
+ operator = operatorService.getOperatorByCode(operator.getOpercode());
+ }
+ for (TConsumePoints tConsumePoints : levelBean.gettConsumePoints()) {
+ if (StringUtil.isEmpty(tConsumePoints.getConsumeamount()) || tConsumePoints.getPoints() == null) {
+ return JsonResult.error("参数错误");
+ }
+ tConsumePoints.setUpdatetime(DateUtil.getNow());
+ tConsumePoints.setOperatorid(operator.getOpercode());
+ }
+ return pointsService.saveConpoints(levelBean);
+ }
+
+ @PostMapping("/consume/deleteRule")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public JsonResult deleteRule(@RequestBody LevelBean levelBean) {
+ TConsumePoints tConsumePoints = new TConsumePoints();
+ tConsumePoints.setId(levelBean.getConPointsid());
+ return pointsService.deleteConpoints(tConsumePoints);
+ }
+
+
+ /*
+ * 活动日管理
+ *
+ * */
+ @GetMapping("/pointsActive/index")
+ public String pointsActiveIndex() {
+ return "system/level/pointsactiveindex";
+ }
+
+ @GetMapping("/pointsActive/list")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public PageResult<TPointsActive> getActiveList(@RequestParam("page") Integer pageNo,
+ @RequestParam("limit") Integer pageSize,
+ @RequestParam("name") String name,
+ @RequestParam("type") String type) {
+ try {
+ LevelBean searchBean = new LevelBean();
+ searchBean.setName(name);
+ searchBean.setType(type);
+ searchBean.setPageNo(pageNo);
+ searchBean.setPageSize(pageSize);
+ return pointsService.getActiveList(searchBean);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return new PageResult<>(99, "系统查询错误");
+ }
+ }
+
+ @PostMapping("/pointsActive/delete")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public JsonResult deletePointsActive(@RequestBody LevelBean levelBean) {
+ TPointsActive tPointsActive = new TPointsActive();
+ tPointsActive.setId(levelBean.getActiveid());
+ return pointsService.deleteActive(tPointsActive);
+ }
+
+ @PostMapping("/pointsActive/add")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public JsonResult addPointsActive(@RequestBody LevelBean levelBean) {
+ TOperator operator = OperUtil.getCurrentOper();
+ if (operator != null) {
+ operator = operatorService.getOperatorByCode(operator.getOpercode());
+ }
+ 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("参数不能为空");
+ }
+ }
+
+ @GetMapping("/pointsActive/loadadd")
+ public String add(ModelMap map) {
+ return "system/level/pointsactiveadd";
+ }
+
+ @PostMapping("/pointsSet/add")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public JsonResult addPointsSet(@RequestBody LevelBean levelBean) {
+
+ if (!StringUtils.isEmpty(levelBean.getDayPointsLi()) &&
+ !StringUtils.isEmpty(levelBean.getTaskPointsLi()) &&
+ !StringUtils.isEmpty(levelBean.getConsumePointsLi())) {
+ return pointsService.addPointsSet(levelBean);
+ } else {
+ return JsonResult.error("参数不能为空");
+ }
+ }
+
+ @GetMapping("/pointsSet/list")
+ @PreAuthorize("hasPermission('/user/add','')")
+ @ResponseBody
+ public JsonResult getPointsSet() {
+ try {
+ return JsonResult.ok().put("data", pointsService.getPointsSet());
+ } catch (Exception e) {
+ e.printStackTrace();
+ return JsonResult.error("系统查询错误");
+ }
+ }
+
+
+ /*
+ * 发放积分统计
+ *
+ * */
+ @GetMapping("/pointsReport/index")
+ public String pointsReportIndex() {
+ return "system/level/pointsreport";
+ }
+
+ @GetMapping("/pointsReport/list")
+ @PreAuthorize("hasPermission('/user/card','')")
+ @ResponseBody
+ public PageResult<LevelBean> getPointsReportList(
+ @RequestParam(value = "startdate", required = false) String startdate,
+ @RequestParam(value = "enddate", required = false) String enddate,
+ @RequestParam(value = "name", required = false) String name) {
+ try {
+ if(StringUtils.isEmpty(startdate)){
+ startdate = DateUtil.getNow("yyyy年MM月dd日");
+ }
+ if(StringUtils.isEmpty(enddate)){
+ enddate = DateUtil.getNow("yyyy年MM月dd日");
+ }
+ LevelBean levelBean = new LevelBean(name, startdate, enddate);
+ return pointsService.getPointsReportList(levelBean);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return new PageResult<>(99, "系统查询错误");
+ }
+ }
+
+ @GetMapping("/pointsReport/param")
+ @PreAuthorize("hasPermission('/user/card','')")
+ @ResponseBody
+ public JsonResult getPointsReportParam() {
+ try {
+ return pointsService.getPointsReportParam();
+ } catch (Exception e) {
+ e.printStackTrace();
+ 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
new file mode 100644
index 0000000..b32f9cf
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java
@@ -0,0 +1,155 @@
+package com.supwisdom.dlpay.system.service;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.api.domain.TAccount;
+import com.supwisdom.dlpay.api.domain.TPerson;
+import com.supwisdom.dlpay.api.domain.TPersonIdentity;
+import com.supwisdom.dlpay.api.domain.TPointsAccount;
+import com.supwisdom.dlpay.framework.domain.*;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.system.bean.CitizenCardSearchBean;
+import com.supwisdom.dlpay.system.bean.CitizenCardShowBean;
+import com.supwisdom.dlpay.system.bean.LevelBean;
+import com.supwisdom.dlpay.system.bean.PersonParamBean;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.ParseException;
+import java.util.List;
+
+public interface PointsService {
+
+ /*
+ * 用户等级
+ *
+ * */
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult saveLevel(LevelBean levelBean);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult deleteLevel(TPersonLevel tPersonLevel);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+ LevelBean getLevel();
+
+ /*
+ *
+ * 任务
+ *
+ * */
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+ PageResult<TPointsTask> getTPointsTask(LevelBean levelBean);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult saveTask(TPointsTask tPointsTask);
+
+
+ /*
+ *
+ * 会员积分
+ *
+ * */
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+ PageResult getTPointsByname(LevelBean levelBean);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+ PageResult getTPointsdetailByname(LevelBean levelBean);
+
+
+ /*
+ * 消费获得积分规则
+ * */
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult saveConpoints(LevelBean levelBean);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult deleteConpoints(TConsumePoints consumePoints);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+ LevelBean getConpoints();
+
+ /*
+ * 通过消费获得积分
+ *
+ * */
+ //单次消费进行积分处理
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ Boolean singleHandlePoints(String userid,Double amount,String billno) throws ParseException;
+
+ //日消费进行积分处理
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ Boolean dayHandlePoints(String userid,String billno);
+
+ //月消费进行积分处理
+ @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);
+
+ /*
+ *
+ * 活动日管理 *
+ * */
+ PageResult getActiveList(LevelBean levelBean);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult deleteActive(TPointsActive tPointsActive);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult saveActive(TPointsActive tPointsActive);
+
+ TPointsActive getActiveByName(String name);
+
+ /*
+ *
+ * 其他设置
+ * */
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ JsonResult addPointsSet(LevelBean levelBean);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ LevelBean getPointsSet();
+
+
+ /*
+ *发放积分统计
+ *
+ * */
+ PageResult<LevelBean> getPointsReportList(LevelBean levelBean);
+
+ @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
new file mode 100644
index 0000000..8bf82ae
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java
@@ -0,0 +1,971 @@
+package com.supwisdom.dlpay.system.service.impl;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+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;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.framework.util.TradeDict;
+import com.supwisdom.dlpay.system.bean.LevelBean;
+import com.supwisdom.dlpay.system.service.ParamService;
+import com.supwisdom.dlpay.system.service.PointsService;
+import com.supwisdom.dlpay.util.ConstantUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+@Service
+public class PointsServiceImpl implements PointsService {
+ private Logger logger = LoggerFactory.getLogger(PointsServiceImpl.class);
+
+ @Autowired
+ private PersonLevelDao personLevelDao;
+ @Autowired
+ private PointsTaskDao pointsTaskDao;
+ @Autowired
+ private PointsMainDao pointsMainDao;
+ @Autowired
+ private CardDao cardDao;
+ @Autowired
+ private PersonDao personDao;
+ @Autowired
+ private PointsDetailDao pointsDetailDao;
+ @Autowired
+ private PointsDtlDao pointsDtlDao;
+ @Autowired
+ private ConsumePointsDao consumePointsDao;
+ @Autowired
+ private DictionaryDao dictionaryDao;
+ @Autowired
+ private PersondtlDao persondtlDao;
+ @Autowired
+ private PointsActiveDao pointsActiveDao;
+ @Autowired
+ private ParamService paramService;
+ @Autowired
+ private SysparaDao sysparaDao;
+ @Autowired
+ private BusinessparaDao businessparaDao;
+ @Autowired
+ private ShopdtlDao shopdtlDao;
+ @Autowired
+ private AccountDao accountDao;
+
+ @Override
+ public LevelBean getLevel() {
+ LevelBean levelBean = new LevelBean();
+ Sort sort = new Sort(Sort.Direction.ASC, "id");
+ List<TPersonLevel> list = personLevelDao.findAll(sort);
+ if (!StringUtil.isEmpty(list)) levelBean.settPersonLevels(list);
+ return levelBean;
+ }
+
+ @Override
+ public JsonResult saveLevel(LevelBean levelBean) {
+ List<TPersonLevel> tPersonLevel = levelBean.gettPersonLevels();
+ personLevelDao.saveAll(tPersonLevel);
+ return JsonResult.ok("成功");
+ }
+
+ @Override
+ public JsonResult deleteLevel(TPersonLevel tPersonLevel) {
+ Optional<TPersonLevel> ret = personLevelDao.findById(tPersonLevel.getId());
+ if (!ret.isPresent()) {
+ return JsonResult.error("等级不存在");
+ }
+ if (tPersonLevel.getId() == 1) {
+ return JsonResult.error("该等级不能删除");
+ }
+ personLevelDao.deleteById(tPersonLevel.getId());
+ return JsonResult.ok("成功");
+ }
+
+
+ @Override
+ public PageResult<TPointsTask> getTPointsTask(LevelBean param) {
+ Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize());
+ return new PageResult<>(pointsTaskDao.findAll(pageable));
+ }
+
+ @Override
+ public JsonResult saveTask(TPointsTask tPointsTask) {
+ pointsTaskDao.save(tPointsTask);
+ return JsonResult.ok("成功");
+ }
+
+
+ @Override
+ public PageResult getTPointsByname(LevelBean param) {
+ TCard tCard = cardDao.findCardByCardnoAndCardtype(param.getIdno(), ConstantUtil.CARDTYPE_CITIZENCARD);
+ if (tCard == null || StringUtil.isEmpty(tCard.getUserid())) {
+ return new PageResult<>(99, "未查询到该用户的信息");
+ }
+ TPerson tPerson = personDao.findByUseridAndAndName(tCard.getUserid(), param.getName());
+ if (tPerson == null) {
+ return new PageResult<>(99, "未查询到该用户的信息");
+ }
+ Optional<TPointsMain> pointsMain = pointsMainDao.findById(tCard.getUserid());
+ TPointsMain tPointsMain;
+ TPersonLevel tPersonLevel;
+ if (pointsMain.orElse(null) == null) {
+ tPointsMain = new TPointsMain();
+ tPointsMain.setPoints(0);
+ tPointsMain.setUpdatetime(DateUtil.getNow("yyyy-MM-dd HH:mm:ss"));
+ tPersonLevel = personLevelDao.findTPersonLevelByPoints(tPointsMain.getPoints());
+ if (tPersonLevel == null) {
+ return new PageResult<>(99, "请设置0积分等级");
+ }
+ } else {
+ tPointsMain = pointsMain.orElse(null);
+ tPointsMain.setUpdatetime(DateUtil.parseToDateFormat(tPointsMain.getUpdatetime()));
+ Optional<TPersonLevel> tPersonLeveltemp = personLevelDao.findById(tPointsMain.getLevelid());
+ tPersonLevel = tPersonLeveltemp.orElse(null);
+ }
+ tPointsMain.setName(param.getName());
+ tPointsMain.setCardno(param.getIdno());
+ tPointsMain.setLevelname(tPersonLevel.getName());
+ Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize());
+
+// Page<TPointsdtl> page = pointsDtlDao.findAllByUserid(tCard.getUserid(),pageable);
+
+ Page<TPointsdtl> page = pointsDtlDao.findAll(new Specification<TPointsdtl>() {
+ @Override
+ public Predicate toPredicate(Root<TPointsdtl> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+ List<Predicate> predicates = new ArrayList<>();
+ if (!StringUtil.isEmpty(tCard.getUserid())) {
+ predicates.add(criteriaBuilder.equal(root.get("userid").as(String.class), tCard.getUserid().trim()));
+ }
+ if (!StringUtil.isEmpty(param.getStartDate())) {
+ predicates.add(criteriaBuilder.ge(root.get("transdate").as(Long.class), Long.valueOf(DateUtil.unParseToDateFormat(param.getStartDate()))));
+ }
+ if (!StringUtil.isEmpty(param.getEndDate())) {
+ predicates.add(criteriaBuilder.le(root.get("transdate").as(Long.class), Long.valueOf(DateUtil.unParseToDateFormat(param.getEndDate()))));
+ }
+ if (!StringUtil.isEmpty(param.getPointsName())) {
+ predicates.add(criteriaBuilder.equal(root.get("type").as(String.class), param.getPointsName().trim()));
+ }
+ return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+ }
+ }, pageable);
+
+ if (page.getContent() != null && page.getContent().size() > 0) {
+/* page.getContent().get(0).settPointsMain(tPointsMain);*/
+ for (TPointsdtl temp:page.getContent()){
+ temp.settPointsMain(tPointsMain);
+ }
+ }
+ return new PageResult<>(page);
+ }
+
+ @Override
+ public PageResult getTPointsdetailByname(LevelBean param) {
+ Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize());
+ return new PageResult<>(pointsDtlDao.findAllByUserid(param.getUserid(), pageable));
+ }
+
+
+ @Override
+ public LevelBean getConpoints() {
+ Sort sort = new Sort(Sort.Direction.ASC, "id");
+ 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);
+ return levelBean;
+ }
+
+ @Override
+ public JsonResult saveConpoints(LevelBean levelBean) {
+ List<TConsumePoints> consumePoints = levelBean.gettConsumePoints();
+ consumePointsDao.saveAll(consumePoints);
+ return JsonResult.ok("成功");
+ }
+
+ @Override
+ public JsonResult deleteConpoints(TConsumePoints tConsumePoints) {
+ Optional<TConsumePoints> ret = consumePointsDao.findById(tConsumePoints.getId());
+ if (!ret.isPresent()) {
+ return JsonResult.error("消费规则不存在");
+ }
+ if (tConsumePoints.getId() == 1) {
+ return JsonResult.error("该消费规则不能删除");
+ }
+ consumePointsDao.deleteById(tConsumePoints.getId());
+ return JsonResult.ok("成功");
+ }
+
+ @Override
+ public Boolean singleHandlePoints(String userid, Double amount, String billno) throws ParseException {
+ 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, 14);
+ if (nowDate.equals(brithdate)) {
+ rate = 2;
+ }
+ }
+ //1.1判断不循环
+ List<TPointsActive> noActives = pointsActiveDao.findAllByType(TradeDict.ACTIVE_FLAG_NO);
+ for (TPointsActive noActivetemp : noActives) {
+ 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 = Double.parseDouble(noActivetemp.getRate());
+ }
+ }
+ }
+ //1.2判断年循环
+ List<TPointsActive> yearActives = pointsActiveDao.findAllByType(TradeDict.ACTIVE_FLAG_YEAR);
+ for (TPointsActive yearActivetemp : yearActives) {
+ 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 = Double.parseDouble(yearActivetemp.getRate());
+ }
+ }
+ }
+ //1.3判断月循环
+ List<TPointsActive> monthActives = pointsActiveDao.findAllByType(TradeDict.ACTIVE_FLAG_MONTH);
+ for (TPointsActive monthActivetemp : monthActives) {
+ 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 = Double.parseDouble(monthActivetemp.getRate());
+ }
+ }
+ }
+ }
+ }
+ //2. 查询用户的等级,获取单次消费获得积分的规则
+ TPersonLevel personLevel;
+ TPointsMain tPointsMainTemp;
+ Optional<TPointsMain> pointsMain = pointsMainDao.findById(userid);
+ if (pointsMain.orElse(null) != null) {
+ tPointsMainTemp = pointsMain.orElse(null);
+ Integer levelid = pointsMain.orElse(null).getLevelid();
+ if (levelid != null) {
+ personLevel = personLevelDao.findById(levelid).orElse(null);
+ } else {
+ if (pointsMain.orElse(null).getPoints() == null) {
+ pointsMain.orElse(null).setPoints(0);
+ }
+ personLevel = getLevelByPoints(pointsMain.orElse(null).getPoints());
+ if (personLevel == null) {
+ logger.error("请设置积分等级");
+ return false;
+ }
+ }
+ } 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 false;
+ }
+ tPointsMain.setLevelid(personLevel.getId());
+ tPointsMainTemp = tPointsMain;
+ }
+ //3. 根据规则计算积分,得到的积分与当日积分上限进行比较,得到实际获得的积分
+ int resultPoints = 0;
+ if (amount >= personLevel.getSingleConsumeAmount()) {
+ BigDecimal bigDecimal = new BigDecimal(amount);
+ BigDecimal result = bigDecimal.divide(new BigDecimal(personLevel.getSingleAmount()), 0, BigDecimal.ROUND_DOWN);
+ int resultInt = result.intValue();
+ //计算得到的积分
+ resultPoints = resultInt * personLevel.getSinglePoints();
+ //获得流水积分
+ 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(TradeDict.PARA_FLAG_CON);
+ int pointslimit = 10000;
+ if (consumePointsLi != null && !StringUtils.isEmpty(consumePointsLi.getParaval())) {
+ pointslimit = Integer.parseInt(consumePointsLi.getParaval());
+ }
+ if (allPoints < pointslimit) {
+ 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. 对积分的主子表和流水表进行添加,查询用户的积分,得到的积分去查询等级表更新用户的等级
+ 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 = 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(TradeDict.CONSUME_POINTS_DAY, sort);
+ for (TConsumePoints temp : daylist) {
+ // 3.判断用户是否达到日消费奖励积分的额度,达到再次判断是否获得过该规则的奖励
+ 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);
+ TPointsMain tPointsMainTemp;
+ if(tPointsMain.orElse(null)==null){
+ tPointsMainTemp = new TPointsMain();
+ tPointsMainTemp.setUserid(userid);
+ tPointsMainTemp.setPoints(0);
+ tPointsMainTemp.setAccumPoints(0);
+ tPointsMainTemp.setSumpayPoints(0);
+ tPointsMainTemp.setOutPoints(0);
+ tPointsMainTemp.setUpdatetime(DateUtil.getNow());
+ TPersonLevel personLevel = getLevelByPoints(tPointsMainTemp.getPoints());
+ if (personLevel == null) {
+ logger.error("请设置积分等级");
+ return false;
+ }
+ tPointsMainTemp.setLevelid(personLevel.getId());
+ }else {
+ tPointsMainTemp = tPointsMain.orElse(null);
+ }
+ /* //判断流水中是否有这条记录
+ 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);
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Boolean monthHandlePoints(String userid, String billno) {
+ // 1.根据用户id查询积分流水表获得当月的消费金额
+ 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(TradeDict.CONSUME_POINTS_MONTH, sort);
+ for (TConsumePoints temp : monthlist) {
+ // 3.判断用户是否达到月消费奖励积分的额度,达到再次判断是否获得过该规则的奖励
+ 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);
+ TPointsMain tPointsMainTemp;
+ if(tPointsMain.orElse(null)==null){
+ tPointsMainTemp = new TPointsMain();
+ tPointsMainTemp.setUserid(userid);
+ tPointsMainTemp.setPoints(0);
+ tPointsMainTemp.setAccumPoints(0);
+ tPointsMainTemp.setSumpayPoints(0);
+ tPointsMainTemp.setOutPoints(0);
+ tPointsMainTemp.setUpdatetime(DateUtil.getNow());
+ TPersonLevel personLevel = getLevelByPoints(tPointsMainTemp.getPoints());
+ if (personLevel == null) {
+ logger.error("请设置积分等级");
+ return false;
+ }
+ tPointsMainTemp.setLevelid(personLevel.getId());
+ }else {
+ tPointsMainTemp = tPointsMain.orElse(null);
+ }
+ /*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)>=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);
+ 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);
+ } else {
+ logger.error("请设置过期天数");
+ }
+ TPointsDetail tPointsDetailresult = pointsDetailDao.save(tPointsDetail);
+ //积分流水表信息
+ TPointsdtl tPointsdtl = new TPointsdtl();
+ tPointsdtl.setRefno(refno);
+ tPointsdtl.setType(type);
+ tPointsdtl.setUserid(tPointsMain.getUserid());
+ 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());
+ if(points>=0){
+ tPointsdtl.setFlagstatus("in");
+ }else {
+ tPointsdtl.setFlagstatus("out");
+ }
+ tPointsdtl.setMainstatus("init");
+ TPointsdtl tPointsdtlresult = pointsDtlDao.save(tPointsdtl);
+
+ tPointsDetail.setPointsdtlId(tPointsdtlresult.getId());
+ pointsDetailDao.save(tPointsDetail);
+ return true;
+ }
+
+ public TPersonLevel getLevelByPoints(Integer points) {
+ Sort sort = new Sort(Sort.Direction.DESC, "id");
+ List<TPersonLevel> all = personLevelDao.findAll(sort);
+ for (TPersonLevel temp : all) {
+ if (points >= temp.getPointsLower()) {
+ return temp;
+ }
+ }
+ return null;
+ }
+
+
+ @Override
+ public PageResult getActiveList(LevelBean param) {
+ Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize(), Sort.by("id"));
+ Page<TPointsActive> page = pointsActiveDao.findAll(new Specification<TPointsActive>() {
+ @Override
+ public Predicate toPredicate(Root<TPointsActive> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+ List<Predicate> predicates = new ArrayList<>();
+ if (!StringUtil.isEmpty(param.getName())) {
+ predicates.add(criteriaBuilder.like(root.get("name").as(String.class), "%" + param.getName().trim() + "%"));
+ }
+ if (!StringUtil.isEmpty(param.getType())) {
+ predicates.add(criteriaBuilder.equal(root.get("type").as(String.class), param.getType().trim()));
+ }
+ return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+ }
+ }, pageable);
+
+ return new PageResult<>(page);
+ }
+ @Override
+ public TPointsActive getActiveByName(String name){
+ return pointsActiveDao.findAllByName(name);
+ }
+
+
+ @Override
+ public JsonResult deleteActive(TPointsActive tPointsActive) {
+ pointsActiveDao.deleteById(tPointsActive.getId());
+ return JsonResult.ok("成功");
+ }
+
+
+ @Override
+ public JsonResult saveActive(TPointsActive tPointsActive) {
+ if ("no".equals(tPointsActive.getType())) {
+ tPointsActive.setWeeknumber(null);
+ tPointsActive.setStartdate(DateUtil.formatDateStr(tPointsActive.getStartdate(), "yyyy年MM月dd日", "yyyyMMdd"));
+ tPointsActive.setEnddate(DateUtil.formatDateStr(tPointsActive.getEnddate(), "yyyy年MM月dd日", "yyyyMMdd"));
+ }
+ if ("year".equals(tPointsActive.getType())) {
+ tPointsActive.setWeeknumber(null);
+ tPointsActive.setStartdate(DateUtil.formatDateStr(tPointsActive.getYearStartDate(), "MM月dd日", "MMdd"));
+ tPointsActive.setEnddate(DateUtil.formatDateStr(tPointsActive.getYearEndDate(), "MM月dd日", "MMdd"));
+ }
+ pointsActiveDao.save(tPointsActive);
+ return JsonResult.ok("成功");
+ }
+
+ @Override
+ public JsonResult addPointsSet(LevelBean levelBean) {
+
+ TBusinesspara tBusinesspara = new TBusinesspara();
+ tBusinesspara.setTenantId("{tenantid}");
+ tBusinesspara.setParakey(TradeDict.PARA_FLAG_DAY);
+ tBusinesspara.setParaval(levelBean.getDayPointsLi());
+ businessparaDao.save(tBusinesspara);
+ tBusinesspara.setParakey(TradeDict.PARA_FLAG_TASK);
+ tBusinesspara.setParaval(levelBean.getTaskPointsLi());
+ businessparaDao.save(tBusinesspara);
+ tBusinesspara.setParakey(TradeDict.PARA_FLAG_CON);
+ tBusinesspara.setParaval(levelBean.getConsumePointsLi());
+ businessparaDao.save(tBusinesspara);
+ return JsonResult.ok();
+ }
+
+ @Override
+ public LevelBean getPointsSet() {
+ 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());
+ }
+ if (taskPointsLi != null && !StringUtils.isEmpty(taskPointsLi.getParaval())) {
+ levelBean1.setTaskPointsLi(taskPointsLi.getParaval());
+ }
+ if (consumePointsLi != null && !StringUtils.isEmpty(consumePointsLi.getParaval())) {
+ levelBean1.setConsumePointsLi(consumePointsLi.getParaval());
+ }
+ return levelBean1;
+ }
+
+
+ @Override
+ public PageResult getPointsReportList(LevelBean param) {
+ List<LevelBean> levelBeans = new ArrayList<>();
+ if (!StringUtil.isEmpty(param.getName())) {
+ 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 ((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(TradeDict.TASK_FLAG_FINISH);
+ LevelBean levelBean1 = getPointsDtlByType(levelBeanTask);
+ levelBean1.setPointsName(e.getTaskname());
+ levelBeans.add(levelBean1);
+ });
+ Integer taskSum = levelBeans.stream().mapToInt(o -> o.getPointsSum()).sum();
+ Integer taskCount = levelBeans.stream().mapToInt(o -> o.getPointsCount()).sum();
+ LevelBean taskLevelBean = new LevelBean();
+ taskLevelBean.setPointsSum(taskSum);
+ taskLevelBean.setPointsCount(taskCount);
+ taskLevelBean.setPointsName("日常任务积分合计");
+ levelBeans.add(taskLevelBean);
+ } 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 ((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(TradeDict.TASK_FLAG_FINISH);
+ LevelBean levelBean1 = getPointsDtlByType(param);
+ Optional<TPointsTask> tpointsTask = pointsTaskDao.findById(Integer.parseInt(param.getName()));
+ if (tpointsTask.orElse(null) != null) {
+ levelBean1.setPointsName(tpointsTask.orElse(null).getTaskname());
+ }
+ levelBeans.add(levelBean1);
+ }
+ return new PageResult<>(levelBeans);
+ } else {
+ //统计每个任务获取的积分
+ 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(TradeDict.TASK_FLAG_FINISH);
+ LevelBean levelBean1 = getPointsDtlByType(levelBeanTask);
+ levelBean1.setPointsName(e.getTaskname());
+ levelBeans.add(levelBean1);
+ });
+ Integer taskSum = levelBeans.stream().mapToInt(o -> o.getPointsSum()).sum();
+ Integer taskCount = levelBeans.stream().mapToInt(o -> o.getPointsCount()).sum();
+ LevelBean taskLevelBean = new LevelBean();
+ taskLevelBean.setPointsSum(taskSum);
+ taskLevelBean.setPointsCount(taskCount);
+ taskLevelBean.setPointsName("日常任务积分合计");
+ levelBeans.add(taskLevelBean);
+ //统计单次消费积分
+ List<TPersonLevel> personLevels = personLevelDao.findAll();
+ List<Integer> personLevelTemp = personLevels.stream().map(TPersonLevel::getId).collect(Collectors.toList());
+ LevelBean personLevelBean = new LevelBean();
+ personLevelBean.setStartDate(param.getStartDate());
+ personLevelBean.setEndDate(param.getEndDate());
+ // personLevelBean.setRefnoList(personLevelTemp);
+ 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(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(TradeDict.CONSUME_FLAG_DAY);
+ LevelBean dayTempResult = getPointsDtlByType(dayTempBean);
+ dayTempResult.setPointsName("日累计奖励积分");
+ levelBeans.add(dayTempResult);
+ //统计月累计消费积分
+ 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(TradeDict.CONSUME_FLAG_MONTH);
+ LevelBean monthTempResult = getPointsDtlByType(monthTempBean);
+ monthTempResult.setPointsName("月累计奖励积分");
+ levelBeans.add(monthTempResult);
+ //消费积分合计
+ LevelBean consume = new LevelBean();
+ consume.setPointsSum(personLevelResult.getPointsSum() + dayTempResult.getPointsSum() + monthTempResult.getPointsSum());
+ consume.setPointsCount(personLevelResult.getPointsCount() + dayTempResult.getPointsCount() + monthTempResult.getPointsCount());
+ consume.setPointsName("消费积分合计");
+ levelBeans.add(consume);
+ //all.stream().map(TPointsTask::getTaskid).collect(Collectors.toList());
+ return new PageResult<>(levelBeans);
+ }
+ }
+
+ LevelBean getPointsDtlByType(LevelBean param) {
+ List<TPointsdtl> tPointsdtls = pointsDtlDao.findAll(new Specification<TPointsdtl>() {
+ @Override
+ public Predicate toPredicate(Root<TPointsdtl> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+ List<Predicate> predicates = new ArrayList<>();
+ if (!StringUtil.isEmpty(param.getStartDate())) {
+ predicates.add(criteriaBuilder.ge(root.get("transdate").as(Long.class), Long.valueOf(DateUtil.formatDateStr(param.getStartDate(), "yyyy年MM月dd日", "yyyyMMdd"))));
+ }
+ if (!StringUtil.isEmpty(param.getEndDate())) {
+ predicates.add(criteriaBuilder.le(root.get("transdate").as(Long.class), Long.valueOf(DateUtil.formatDateStr(param.getEndDate(), "yyyy年MM月dd日", "yyyyMMdd"))));
+ }
+ if (param.getRefno() != null) {
+ predicates.add(criteriaBuilder.equal(root.get("refno").as(Integer.class), param.getRefno()));
+ }
+ if (param.getType() != null) {
+ predicates.add(criteriaBuilder.equal(root.get("type").as(String.class), param.getType()));
+ }
+ if (!CollectionUtils.isEmpty(param.getRefnoList())) {
+ CriteriaBuilder.In<Object> in = criteriaBuilder.in(root.get("refno"));
+ for (Integer refnoTemp : param.getRefnoList()) {
+ in.value(refnoTemp);
+ }
+ predicates.add(criteriaBuilder.and(in));
+ }
+ return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+ }
+ });
+ Integer allPoints = tPointsdtls.stream().mapToInt(o -> Integer.parseInt(o.getPoints())).sum();
+ LevelBean levelBean = new LevelBean();
+ levelBean.setPointsSum(allPoints);
+ levelBean.setPointsCount(tPointsdtls.size());
+ return levelBean;
+ }
+
+ @Override
+ public JsonResult getPointsReportParam() {
+ List<TDictionary> tDictionaries = dictionaryDao.findAllByDicttype("pointsNameDetail");
+ List<String> strings = new ArrayList<>();
+ 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) {
+ List<Predicate> predicates = new ArrayList<>();
+ if (!CollectionUtils.isEmpty(strings)) {
+ CriteriaBuilder.In<Object> in = criteriaBuilder.in(root.get("type"));
+ for (String temp : strings) {
+ in.value(temp);
+ }
+ predicates.add(criteriaBuilder.and(in));
+ }
+ return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+ }
+ });
+ Integer allPoints = tPointsdtls.stream().mapToInt(o -> Integer.parseInt(o.getPoints())).sum();
+ LevelBean levelBean = new LevelBean();
+ 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 5e431b7..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) {
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 861212a..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
@@ -5,6 +5,7 @@
import com.supwisdom.dlpay.api.domain.TTransactionMain
import com.supwisdom.dlpay.exception.TransactionProcessException
import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.system.service.PointsService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.dao.DataAccessException
import org.springframework.stereotype.Service
@@ -66,6 +67,10 @@
@Autowired
private lateinit var kafkaSendMsgService: KafkaSendMsgService
+ @Autowired
+ private lateinit var pointsService: PointsService
+
+
fun init(builder: TransactionBuilder): TTransactionMain {
try {
@@ -102,6 +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);
+ }
}
}
@@ -137,4 +153,4 @@
}
}
-}
\ No newline at end of file
+}
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/index.html b/payapi/src/main/resources/templates/system/level/index.html
new file mode 100644
index 0000000..ced51a0
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/level/index.html
@@ -0,0 +1,926 @@
+<div class="layui-tab layui-tab-card">
+ <ul class="layui-tab-title">
+ <li class="layui-this">会员等级设置</li>
+ <li>日常任务积分设置</li>
+ <li>消费奖励积分设置</li>
+ <li>其他设置</li>
+ <span class="layui-breadcrumb pull-right">
+ <a href="#">积分中心</a>
+ <a><cite>积分规则管理</cite></a>
+ </span>
+ </ul>
+ <div class="layui-tab-content">
+ <div class="layui-tab-item layui-show" style="background-color: white">
+ <form id="level-form" lay-filter="user-form" class="layui-form model-form layui-form-pane">
+ <div style="margin: 20px">
+ <button type="button" class="layui-btn" id="add">添加等级</button>
+ <button type="button" class="layui-btn" lay-filter="level-form-submit" lay-submit>保存
+ </button>
+ </div>
+ <div style="margin: 20px;background-color: darkgray" id="levelstr">
+
+ <div class="levelclass layui-card">
+ <div class="layui-card-header" style="font-weight: 700">1级会员设置:</div>
+ <div class="layui-card-body">
+ <div style="display: flex;width: 398px;float: left;margin-left: 90px">
+ <div style="display: inline;margin-top: 8px;margin-right: 15px">会员名称</div>
+ <input type="text" name="name" required lay-verify="required"
+ autocomplete="off"
+ class="layui-input"
+ style="width: 210px;display: inline;height: 38px;text-align: center"
+ id="lename">
+ </div>
+ <div style="display: flex;width: 400px">
+ <div style="display: inline;margin-top: 8px;margin-right: 15px">累计积分</div>
+ <div class="layui-form-item" style="display: inline">
+ <label class="layui-form-label" style="width: 80px">大于</label>
+ <div class="layui-input-inline" style="margin-right: 0px;width: 150px">
+ <input type="number" name="pointsLower" required lay-verify="required"
+ autocomplete="off"
+ class="layui-input"
+ id="lelow" style="text-align: center">
+ </div>
+ <label class="layui-form-label" style="width: 60px">分</label>
+ </div>
+ </div>
+ <input type="text" name="levelid" id="levelid1" style="display: none"/>
+ <div style="display: flex;margin-left: 90px">
+ <div style="display: inline;margin-top: 8px;margin-right: 15px">单笔消费</div>
+ <div class="layui-form-item" style="display: inline">
+ <label class="layui-form-label" style="width: 80px">实付满</label>
+ <div class="layui-input-inline" style="margin-right: 0px;width: 110px">
+ <input type="number" name="singleConsumeAmount"
+ id="singleConsumeAmount" class="layui-input"
+ style="text-align: center" required lay-verify="required"/>
+ </div>
+ <label class="layui-form-label" style="width: 110px">元,每消费</label>
+ <div class="layui-input-inline" style="margin-right: 0px;width: 110px">
+ <input type="number" name="singleAmount" id="singleAmount"
+ class="layui-input" required style="text-align: center"
+ lay-verify="required"/>
+ </div>
+ <label class="layui-form-label" style="width: 110px">元,可获得</label>
+ <div class="layui-input-inline" style="margin-right: 0px;width: 110px">
+ <input type="number" name="singlePoints" id="singlePoints"
+ class="layui-input" required style="text-align: center"
+ lay-verify="required"/>
+ </div>
+ <label class="layui-form-label" style="width: 60px">分</label>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+ </div>
+
+ </form>
+ </div>
+ <div class="layui-tab-item" style="background-color: white">
+ <table class="layui-table" id="tasktable" lay-filter="tasktable"></table>
+ </div>
+ <div class="layui-tab-item" style="background-color: white">
+ <form id="consume-form" lay-filter="consume-form" class="layui-form model-form">
+ <button type="button" class="layui-btn" lay-filter="consume-form-submit" lay-submit
+ style="margin-left: 20px">保存
+ </button>
+ <div style="margin: 20px">
+ <div style="font-weight: 700">日累积消费积分设置
+ <button type="button" class="layui-btn" id="consumeAdd" style="margin-left: 30px">添加
+ </button>
+ </div>
+ <div>
+ <div id="consumeid">
+ <div class="consumeclass" style="margin-top: 10px">当日累计消费金额满
+ <input type="text" name="conAmount" required lay-verify="required"
+ autocomplete="off"
+ class="layui-input"
+ style="width: 60px;display: inline;height: 28px;margin: 6px"
+ id="conAmount">元时,可额外获得
+ <input type="text" name="conPoints" required lay-verify="required"
+ autocomplete="off"
+ class="layui-input"
+ style="width: 60px;display: inline;height: 28px;margin: 6px"
+ id="conPoints">积分;
+ <input type="text" name="conPointsid" id="conPointsid" style="display: none"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div style="margin: 20px">
+ <div style="font-weight: 700">月累积消费积分设置
+ <button type="button" class="layui-btn" id="consumeMonthAdd"
+ style="margin-left: 30px">添加
+ </button>
+ </div>
+ <div>
+ <div id="consumeMonthid">
+ <div class="consumeclass" style="margin-top: 10px">当月累计消费金额满
+ <input type="text" name="conMonthAmount" required lay-verify="required"
+ autocomplete="off"
+ class="layui-input"
+ style="width: 60px;display: inline;height: 28px;margin: 6px"
+ id="conMonthAmount">元时,可额外获得
+ <input type="text" name="conMonthPoints" required lay-verify="required"
+ autocomplete="off"
+ class="layui-input"
+ style="width: 60px;display: inline;height: 28px;margin: 6px"
+ id="conMonthPoints">积分;
+ <input type="text" name="conMonthPointsid" id="conMonthPointsid"
+ style="display: none"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+ <div class="layui-tab-item" style="background-color: white">
+ <form id="set-form" lay-filter="set-form" class="layui-form model-form layui-form-pane">
+ <button type="button" class="layui-btn" lay-filter="set-form-submit" lay-submit
+ style="margin-left: 20px">保存
+ </button>
+ <div class=" layui-card">
+ <div class="layui-card-header" style="font-weight: 700">积分上限设置</div>
+ <div class="layui-card-body">
+ <div style="display:flex;width: 400px">
+ <div style="display: inline;margin-top: 8px;margin-right: 15px">单日消费积分上限</div>
+ <div class="layui-form-item" style="display: inline">
+ <div class="layui-input-inline" style="margin-right: 0px;width: 150px">
+ <input type="number" required lay-verify="required" autocomplete="off" class="layui-input"
+ id="consumePointsLi" style="text-align: center">
+ </div>
+ <label class="layui-form-label" style="width: 60px">分</label>
+ </div>
+ </div>
+ <div style="display:flex;width: 400px">
+ <div style="display: inline;margin-top: 8px;margin-right: 15px">单日任务积分上限</div>
+ <div class="layui-form-item" style="display: inline">
+ <div class="layui-input-inline" style="margin-right: 0px;width: 150px">
+ <input type="number" required lay-verify="required" autocomplete="off"
+ class="layui-input"
+ id="taskPointsLi" style="text-align: center">
+ </div>
+ <label class="layui-form-label" style="width: 60px">分</label>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class=" layui-card">
+ <div class="layui-card-header" style="font-weight: 700">积分到期设置</div>
+ <div class="layui-card-body">
+ <div style="display:flex;width: 600px">
+ <div style="display: inline;margin-top: 8px;margin-right: 15px">每隔</div>
+ <div class="layui-form-item" style="display: inline">
+ <div class="layui-input-inline" style="margin-right: 0px;width: 150px">
+ <input type="number" required lay-verify="required" autocomplete="off"
+ class="layui-input" id="dayPointsLi" style="text-align: center">
+ </div>
+ <label class="layui-form-label" style="width: 60px">日</label>
+ </div>
+ <div style="display: inline;margin-top: 8px;margin-right: 15px">
+ 清除积分。<span style="font-weight: 200">(不影响历史积分,从修改当日起生效。)</span></div>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+</div>
+<script>
+ layui.use(['layer', 'upload', 'form', 'element', 'admin', 'table', 'layedit'], function () {
+ //
+ // 等级添加
+ //
+ var form = layui.form;
+ var layer = layui.layer;
+ let table = layui.table;
+ let admin = layui.admin;
+ let element = layui.element;
+ let re = function myIsNaN(value) {
+ return typeof value === 'number' && !isNaN(value);
+ }
+ // 表单提交事件
+ form.on('submit(level-form-submit)', function (data) {
+ let token = $("meta[name='_csrf_token']").attr("value");
+ let tPersonLevels = [];
+ $('.levelclass').each(function (index, e) {
+ let tperson = {}
+ $(this).find('input').each(function (index, e) {
+ if ($(e).attr('name') == "name") {
+ tperson.name = $(this).val();
+ }
+ if ($(e).attr('name') == "pointsLower") {
+ tperson.pointsLower = $(this).val();
+ }
+ if ($(e).attr('name') == "pointsUpper") {
+ tperson.pointsUpper = $(this).val();
+ }
+ if ($(e).attr('name') == "levelid") {
+ tperson.id = $(this).val();
+ }
+ if ($(e).attr('name') == "singleConsumeAmount") {
+ tperson.singleConsumeAmount = $(this).val();
+ }
+ if ($(e).attr('name') == "singleAmount") {
+ tperson.singleAmount = $(this).val();
+ }
+ if ($(e).attr('name') == "singlePoints") {
+ tperson.singlePoints = $(this).val();
+ }
+ });
+ tPersonLevels.push(tperson);
+ });
+
+ var data = {'tPersonLevels': tPersonLevels};
+ var url = '[[@{/level/add}]]';
+ layer.confirm('确认保存?', {
+ icon: 3, title: '提示'
+
+ }, function (index) {
+ layer.load(2);
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: url,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': token,
+ },
+ data: JSON.stringify(data),
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code === 200) {
+ layer.msg(result.msg, {icon: 1});
+ admin.refresh();
+ // parent.location.reload();
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ layer.close(index);
+ });
+ return false;
+ });
+ var x = 2;
+ $("#add").click(function () {
+ let str = ' <div class="levelclass layui-card"><div class="layui-card-header" style="font-weight: 700"> ' + x +
+ '级会员设置:</div> <div class="layui-card-body"><div style="display: flex;width: 398px;float: left;margin-left: 90px">' +
+ '<div style="display: inline;margin-top: 8px;margin-right: 15px"> 会员名称</div> ' +
+ '<input type="text" name="name" required lay-verify="required" autocomplete="off" class="layui-input" ' +
+ 'style="width: 210px;display: inline;height: 38px;text-align: center" id="lename"></div> ' +
+ '<div style="display: flex;width: 400px">\n' +
+ ' <div style="display: inline;margin-top: 8px;margin-right: 15px">累计积分</div>\n' +
+ ' <div class="layui-form-item" style="display: inline">\n' +
+ ' <label class="layui-form-label" style="width: 80px">大于</label>\n' +
+ ' <div class="layui-input-inline" style="margin-right: 0px;width: 150px">\n' +
+ ' <input type="number" name="pointsLower" required lay-verify="required"\n' +
+ ' autocomplete="off" style="text-align: center"' +
+ ' class="layui-input"\n' +
+ ' id="lelow">\n' +
+ ' </div>\n' +
+ ' <label class="layui-form-label" style="width: 60px">分</label>\n' +
+ ' </div>\n' +
+ ' </div>\n' +
+ ' <input type="text" name="levelid" id="levelid' + x + '" style="display: none"/>\n' +
+ ' <div style="display: flex;margin-left: 90px">\n' +
+ ' <div style="display: inline;margin-top: 8px;margin-right: 15px">单笔消费</div>\n' +
+ ' <div class="layui-form-item" style="display: inline">\n' +
+ ' <label class="layui-form-label" style="width: 80px">实付满</label>\n' +
+ ' <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+ ' <input type="number" name="singleConsumeAmount" id="singleConsumeAmount" class="layui-input" style="text-align: center" required lay-verify="required"/>\n' +
+ ' </div>\n' +
+ ' <label class="layui-form-label" style="width: 110px">元,每消费</label>\n' +
+ ' <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+ ' <input type="number" name="singleAmount" id="singleAmount" class="layui-input" required\n' +
+ ' lay-verify="required" style="text-align: center"/>\n' +
+ ' </div>\n' +
+ ' <label class="layui-form-label" style="width: 110px">元,可获得</label>\n' +
+ ' <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+ ' <input type="number" name="singlePoints" id="singlePoints" class="layui-input" required\n' +
+ ' lay-verify="required" style="text-align: center"/>\n' +
+ ' </div>\n' +
+ ' <label class="layui-form-label" style="width: 60px">分</label>\n' +
+ '<button type="button" class="layui-btn layui-btn-danger removeclass" id="removeid' + x + '" style="display: inline">删除</button>' +
+ ' </div>\n' +
+ ' </div>\n' +
+ ' </div>\n' +
+ ' </div>';
+ if (x !== 2) {
+ let temp = x - 1;
+ document.getElementById("removeid" + temp).style.display = "none";
+ }
+ $("#levelstr").append(str);
+ x++;
+ });
+ $("body").on('click', ".removeclass", function () {
+ let _this = this;
+ let deletetemid = x - 1;
+ let levelidtemp = {"levelid": $("#levelid" + deletetemid).val()};
+ let token = $("meta[name='_csrf_token']").attr("value");
+ layer.confirm('确认删除?', {
+ icon: 3, title: '提示'
+
+ }, function (index) {
+ if (levelidtemp.levelid) {
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: '[[@{/level/delete}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': token,
+ },
+ data: JSON.stringify(levelidtemp),
+ success: function (result) {
+ if (result.code === 200) {
+ layer.msg(result.msg, {icon: 1});
+ let tempp = deletetemid - 1;
+ if (tempp > 1) {
+ document.getElementById("removeid" + tempp).style.display = "inline";
+ }
+ $(_this).parent().parent().parent().parent().remove();
+ x--;
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ } else {
+ let tempp = deletetemid - 1;
+ if (tempp > 1) {
+ document.getElementById("removeid" + tempp).style.display = "inline";
+ }
+ $(_this).parent().parent().parent().parent().remove();
+ x--;
+ }
+ layer.close(index);
+ });
+ })
+
+
+ //
+ // 等级查询
+ //
+ let datalist = [];
+ $.ajax({
+ type: "GET",
+ dataType: "json",
+ url: '[[@{/level/list}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code === 200) {
+ datalist = result.datalist
+ for (let i = 0; i < datalist.length; i++) {
+ if (i === 0) {
+ $("#lename").val(datalist[i].name);
+ $("#lelow").val(datalist[i].pointsLower);
+ $("#leupp").val(datalist[i].pointsUpper);
+ $("#levelid1").val(datalist[i].id);
+ $("#singleConsumeAmount").val(datalist[i].singleConsumeAmount);
+ $("#singleAmount").val(datalist[i].singleAmount);
+ $("#singlePoints").val(datalist[i].singlePoints);
+ }
+ if (i > 0) {
+ var strr = ' <div class="levelclass layui-card"><div class="layui-card-header" style="font-weight: 700"> ' + x +
+ '级会员设置:</div> <div class="layui-card-body"><div style="display: flex;width: 398px;float: left;margin-left: 90px">' +
+ '<div style="display: inline;margin-top: 8px;margin-right: 15px"> 会员名称</div> ' +
+ '<input type="text" name="name" required lay-verify="required" autocomplete="off" ' + 'value="' + datalist[i].name + '"' +
+ ' class="layui-input" ' +
+ 'style="width: 210px;display: inline;height: 38px;text-align: center" id="lename"></div> ' +
+ '<div style="display: flex;width: 400px">\n' +
+ ' <div style="display: inline;margin-top: 8px;margin-right: 15px">累计积分</div>\n' +
+ ' <div class="layui-form-item" style="display: inline">\n' +
+ ' <label class="layui-form-label" style="width: 80px">大于</label>\n' +
+ ' <div class="layui-input-inline" style="margin-right: 0px;width: 150px">\n' +
+ ' <input type="number" name="pointsLower" required lay-verify="required"\n' + 'value="' + datalist[i].pointsLower + '"' +
+ ' autocomplete="off" style="text-align: center" \n' +
+ ' class="layui-input"\n' +
+ ' id="lelow">\n' +
+ ' </div>\n' +
+ ' <label class="layui-form-label" style="width: 60px">分</label>\n' +
+ ' </div>\n' +
+ ' </div>\n' +
+ ' <input type="text" name="levelid" id="levelid' + x + '" style="display: none"' + ' value="' + datalist[i].id + '"/> ' +
+ ' <div style="display: flex;margin-left: 90px">\n' +
+ ' <div style="display: inline;margin-top: 8px;margin-right: 15px">单笔消费</div>\n' +
+ ' <div class="layui-form-item" style="display: inline">\n' +
+ ' <label class="layui-form-label" style="width: 80px">实付满</label>\n' +
+ ' <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+ ' <input type="number" name="singleConsumeAmount" style="text-align: center" id="singleConsumeAmount" class="layui-input" ' + 'value="' + datalist[i].singleConsumeAmount + '" required lay-verify="required"/>\n' +
+ ' </div>\n' +
+ ' <label class="layui-form-label" style="width: 110px">元,每消费</label>\n' +
+ ' <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+ ' <input type="number" name="singleAmount" id="singleAmount" style="text-align: center" class="layui-input" ' + 'value="' + datalist[i].singleAmount + '" required\n' +
+ ' lay-verify="required"/>\n' +
+ ' </div>\n' +
+ ' <label class="layui-form-label" style="width: 110px">元,可获得</label>\n' +
+ ' <div class="layui-input-inline" style="margin-right: 0px;width: 110px">\n' +
+ ' <input type="number" name="singlePoints" id="singlePoints" class="layui-input" ' + 'value="' + datalist[i].singlePoints + '"required\n' +
+ ' lay-verify="required" style="text-align: center"/>\n' +
+ ' </div>\n' +
+ ' <label class="layui-form-label" style="width: 60px">分</label>\n' +
+ '<button type="button" class="layui-btn layui-btn-danger removeclass" id="removeid' + x + '" style="display: inline">删除</button>' +
+ ' </div>\n' +
+ ' </div>\n' +
+ ' </div>\n' +
+ ' </div>'
+ ;
+ if (x !== 2) {
+ let temp = x - 1;
+ document.getElementById("removeid" + temp).style.display = "none";
+ }
+ $("#levelstr").append(strr);
+ x++;
+ }
+ }
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+
+
+ //
+ // 任务积分
+ //
+ // 渲染表格
+ table.render({
+ elem: '#tasktable',
+ url: '[[@{/task/list}]]',
+ page: true,
+ cols: [
+ [
+ {
+ field: 'taskname',
+ title: '任务名称',
+ width: 200,
+ fixed: 'left',
+ align: 'center',
+ sort: true
+ },
+ {field: 'taskpoints', title: '可获积分', width: 200, align: 'center', sort: true},
+ {field: 'remark', title: '说明', width: 400, align: 'center', sort: true},
+ {
+ align: 'center',
+ title: '操作',
+ fixed: 'right',
+ width: 200,
+ templet: function (item) {
+ let html = ' <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> ';
+ return html;
+ }
+ }
+ ]
+ ]
+ });
+
+ // 工具条点击事件
+ table.on('tool(tasktable)', function (obj) {
+ let data = obj.data;
+ let layEvent = obj.event;
+ if (layEvent === 'edit') {
+ showModel(data);
+ }
+ });
+
+ let showModel = function (data) {
+ let title = '任务修改';
+ admin.putTempData('t_bean', data);
+ admin.popupCenter({
+ title: title,
+ path: '[[@{/task/loadadd}]]',
+ finish: function () {
+ table.reload('tasktable', {});
+ }
+ });
+ };
+
+ /*
+ *
+ * 消费奖励积分设置
+ * */
+ form.on('submit(consume-form-submit)', function (data) {
+ let token = $("meta[name='_csrf_token']").attr("value");
+ let tConsumePoints = [];
+ $('.consumeclass').each(function (index, e) {
+ let tConsumePoint = {}
+ $(this).find('input[type="text"]').each(function (index, e) {
+ if ($(e).attr('name') == "conAmount") {
+ tConsumePoint.consumeamount = $(this).val();
+ }
+ if ($(e).attr('name') == "conPoints") {
+ tConsumePoint.ruletype = "day";
+ tConsumePoint.points = $(this).val();
+ }
+ if ($(e).attr('name') == "conPointsid") {
+ tConsumePoint.id = $(this).val();
+ }
+ if ($(e).attr('name') == "conMonthAmount") {
+ tConsumePoint.consumeamount = $(this).val();
+ }
+ if ($(e).attr('name') == "conMonthPoints") {
+ tConsumePoint.ruletype = "month";
+ tConsumePoint.points = $(this).val();
+ }
+ if ($(e).attr('name') == "conMonthPointsid") {
+ tConsumePoint.id = $(this).val();
+ }
+ });
+ tConsumePoints.push(tConsumePoint);
+ });
+ var data = {'tConsumePoints': tConsumePoints};
+ layer.confirm('确认保存?', {
+ icon: 3, title: '提示'
+
+ }, function (index) {
+ layer.load(2);
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: '[[@{/consume/addRulelist}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': token,
+ },
+ data: JSON.stringify(data),
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code === 200) {
+ layer.msg(result.msg, {icon: 1});
+ getrulelist();
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ layer.close(index);
+ });
+ return false;
+ });
+ var conx = 2;
+ var conMonthx = 2;
+ $("#consumeAdd").click(function () {
+ let consumestr = ' <div class="consumeclass">当日累计消费金额满 ' +
+ '<input type="text" name="conAmount" required lay-verify="required" autocomplete="off" ' +
+ 'class="layui-input" style="width: 60px;display: inline;height: 28px;margin: 6px" id="lename">' +
+ '元时,可额外获得 <input type="text" name="conPoints" required lay-verify="required"' +
+ ' autocomplete="off" class="layui-input" ' +
+ 'style="width: 60px;display: inline;height: 28px;margin: 6px" id="lelow">积分;' +
+ ' <input type="text" name="conPointsid" id="conPointsid' + conx + '" style="display: none"/> ' +
+ '<button type="button" class="layui-btn layui-btn-danger removeconsume" id="removecon' + conx + '" style="display: inline">删除</button></div>';
+ if (conx !== 2) {
+ let temp = conx - 1;
+ document.getElementById("removecon" + temp).style.display = "none";
+ }
+ $("#consumeid").append(consumestr);
+ conx++;
+ });
+ $("#consumeMonthAdd").click(function () {
+ let consumeMonthstr = ' <div class="consumeclass">当月累计消费金额满 ' +
+ '<input type="text" name="conMonthAmount" required lay-verify="required" autocomplete="off" ' +
+ 'class="layui-input" style="width: 60px;display: inline;height: 28px;margin: 6px" id="lename">' +
+ '元时,可额外获得 <input type="text" name="conMonthPoints" required lay-verify="required"' +
+ ' autocomplete="off" class="layui-input" ' +
+ 'style="width: 60px;display: inline;height: 28px;margin: 6px" id="lelow">积分;' +
+ ' <input type="text" name="conMonthPointsid" id="conMonthPointsid' + conMonthx + '" style="display: none"/> ' +
+ '<button type="button" class="layui-btn layui-btn-danger removeMonthconsume" id="removeMonthcon' + conMonthx + '" style="display: inline">删除</button></div>';
+ if (conMonthx !== 2) {
+ let temp = conMonthx - 1;
+ document.getElementById("removeMonthcon" + temp).style.display = "none";
+ }
+ $("#consumeMonthid").append(consumeMonthstr);
+ conMonthx++;
+ });
+ $("body").on('click', ".removeconsume", function () {
+ let _this = this;
+ let deletetemid = conx - 1;
+ let conPointsidtemp = {"conPointsid": $("#conPointsid" + deletetemid).val()};
+ let token = $("meta[name='_csrf_token']").attr("value");
+ layer.confirm('确认删除?', {
+ icon: 3, title: '提示'
+
+ }, function (index) {
+ if (conPointsidtemp.conPointsid) {
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: '[[@{/consume/deleteRule}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': token,
+ },
+ data: JSON.stringify(conPointsidtemp),
+ success: function (result) {
+ if (result.code === 200) {
+ layer.msg(result.msg, {icon: 1});
+ let tempp = deletetemid - 1;
+ if (tempp > 1) {
+ document.getElementById("removecon" + tempp).style.display = "inline";
+ }
+ $(_this).parent().remove();
+ conx--;
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ } else {
+ let tempp = deletetemid - 1;
+ if (tempp > 1) {
+ document.getElementById("removecon" + tempp).style.display = "inline";
+ }
+ $(_this).parent().remove();
+ conx--;
+ }
+ layer.close(index);
+ });
+ }),
+ $("body").on('click', ".removeMonthconsume", function () {
+ let _this = this;
+ let deletetemid = conMonthx - 1;
+ let conPointsidtemp = {"conPointsid": $("#conMonthPointsid" + deletetemid).val()};
+ let token = $("meta[name='_csrf_token']").attr("value");
+ layer.confirm('确认删除?', {
+ icon: 3, title: '提示'
+
+ }, function (index) {
+ if (conPointsidtemp.conPointsid) {
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: '[[@{/consume/deleteRule}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': token,
+ },
+ data: JSON.stringify(conPointsidtemp),
+ success: function (result) {
+ if (result.code === 200) {
+ layer.msg(result.msg, {icon: 1});
+ let tempp = deletetemid - 1;
+ if (tempp > 1) {
+ document.getElementById("removeMonthcon" + tempp).style.display = "inline";
+ }
+ $(_this).parent().remove();
+ conMonthx--;
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ } else {
+ let tempp = deletetemid - 1;
+ if (tempp > 1) {
+ document.getElementById("removeMonthcon" + tempp).style.display = "inline";
+ }
+ $(_this).parent().remove();
+ conMonthx--;
+ }
+ layer.close(index);
+ });
+ });
+ //
+ // 消费奖励积分设置查询
+ //
+ let monthConsumeList = [];
+ let dayConsumeList = [];
+ let getrulelist = function () {
+ $.ajax({
+ type: "GET",
+ dataType: "json",
+ url: '[[@{/consume/rulelist}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code === 200) {
+ monthConsumeList = result.monthConsumeList
+ dayConsumeList = result.dayConsumeList
+ for (let temp = 0; temp <= conx; temp++) {
+ $("#removecon" + temp).parent().remove();
+ }
+ for (let temp = 0; temp <= conMonthx; temp++) {
+ $("#removeMonthcon" + temp).parent().remove();
+ }
+ conx = 2;
+ conMonthx = 2;
+ for (let i = 0; i < dayConsumeList.length; i++) {
+ if (i === 0) {
+ $("#conAmount").val(dayConsumeList[i].consumeamount);
+ $("#conPoints").val(dayConsumeList[i].points);
+ $("#conPointsid").val(dayConsumeList[i].id);
+ }
+ if (i > 0) {
+ let daystrr = ' <div class="consumeclass">当日累计消费金额满 ' +
+ '<input type="text" name="conAmount" required lay-verify="required" autocomplete="off" ' + 'value="' + dayConsumeList[i].consumeamount + '"' +
+ 'class="layui-input" style="width: 60px;display: inline;height: 28px;margin: 6px" id="lename">' +
+ '元时,可额外获得 <input type="text" name="conPoints" required lay-verify="required" ' + 'value="' + dayConsumeList[i].points + '" ' +
+ ' autocomplete="off" class="layui-input" ' +
+ 'style="width: 60px;display: inline;height: 28px;margin: 6px" id="lelow">积分;' +
+ ' <input type="text" name="conPointsid" id="conPointsid' + conx + '" style="display: none" ' + 'value="' + dayConsumeList[i].id + '"/> ' +
+ '<button type="button" class="layui-btn layui-btn-danger removeconsume" id="removecon' + conx + '" style="display: inline">删除</button></div>';
+ if (conx !== 2) {
+ let temp = conx - 1;
+ document.getElementById("removecon" + temp).style.display = "none";
+ }
+ $("#consumeid").append(daystrr);
+ conx++;
+ }
+ }
+ for (let i = 0; i < monthConsumeList.length; i++) {
+ if (i === 0) {
+ $("#conMonthAmount").val(monthConsumeList[i].consumeamount);
+ $("#conMonthPoints").val(monthConsumeList[i].points);
+ $("#conMonthPointsid").val(monthConsumeList[i].id);
+ }
+ if (i > 0) {
+ let monthstrr = ' <div class="consumeclass">当月累计消费金额满 ' +
+ '<input type="text" name="conMonthAmount" required lay-verify="required" autocomplete="off" ' + 'value="' + monthConsumeList[i].consumeamount + '" ' +
+ 'class="layui-input" style="width: 60px;display: inline;height: 28px;margin: 6px" id="lename">' +
+ '元时,可额外获得 <input type="text" name="conMonthPoints" required lay-verify="required" ' + 'value="' + monthConsumeList[i].points + '"' +
+ ' autocomplete="off" class="layui-input" ' +
+ 'style="width: 60px;display: inline;height: 28px;margin: 6px" id="lelow">积分;' +
+ ' <input type="text" name="conMonthPointsid" id="conMonthPointsid' + conMonthx + '" style="display: none" ' + 'value="' + monthConsumeList[i].id + '"/> ' +
+ '<button type="button" class="layui-btn layui-btn-danger removeMonthconsume" id="removeMonthcon' + conMonthx + '" style="display: inline">删除</button></div>';
+ if (conMonthx !== 2) {
+ let temp = conMonthx - 1;
+ document.getElementById("removeMonthcon" + temp).style.display = "none";
+ }
+ $("#consumeMonthid").append(monthstrr);
+ conMonthx++;
+ }
+ }
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ }
+ getrulelist();
+
+
+
+ /*
+ * 其他设置
+ *
+ * */
+
+ /*
+ *
+ * 消费奖励积分设置
+ * */
+ form.on('submit(set-form-submit)', function (data) {
+ let token = $("meta[name='_csrf_token']").attr("value");
+ let consumePointsLi = $("#consumePointsLi").val();
+ let taskPointsLi = $("#taskPointsLi").val();
+ let dayPointsLi = $("#dayPointsLi").val();
+ var data = {'consumePointsLi': consumePointsLi, 'taskPointsLi': taskPointsLi,'dayPointsLi': dayPointsLi};
+ layer.confirm('确认保存?', {
+ icon: 3, title: '提示'
+
+ }, function (index) {
+ layer.load(2);
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: '[[@{/pointsSet/add}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': token,
+ },
+ data: JSON.stringify(data),
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code === 200) {
+ layer.msg(result.msg, {icon: 1});
+ getPointsSet();
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ layer.close(index);
+ });
+ return false;
+ });
+
+ let getPointsSet = function () {
+ $.ajax({
+ type: "GET",
+ dataType: "json",
+ url: '[[@{/pointsSet/list}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code === 200) {
+ let dataSet = result.data;
+ console.log(dataSet)
+ $("#consumePointsLi").val(dataSet.consumePointsLi);
+ $("#taskPointsLi").val(dataSet.taskPointsLi);
+ $("#dayPointsLi").val(dataSet.dayPointsLi);
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ }
+ getPointsSet();
+ })
+</script>
diff --git a/payapi/src/main/resources/templates/system/level/pointsactiveadd.html b/payapi/src/main/resources/templates/system/level/pointsactiveadd.html
new file mode 100644
index 0000000..3a5a4d5
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/level/pointsactiveadd.html
@@ -0,0 +1,213 @@
+<!-- operator表单弹窗 -->
+<form id="active-form" lay-filter="active-form" class="layui-form model-form">
+ <input name="id" id="id" type="hidden"/>
+ <div class="layui-form-item">
+ <label class="layui-form-label" style="width: 100px"><span style="color: red;">*</span>活动日名称:</label>
+ <div class="layui-input-block" style="margin-left: 130px">
+ <input name="name" placeholder="请输入活动日名称" type="text" class="layui-input" maxlength="100"
+ lay-verify="required" required/>
+ </div>
+ </div>
+ <div class="layui-form-item" id="radio-value">
+ <label class="layui-form-label" style="width: 100px"><span style="color: red;">*</span>循环方式:</label>
+ <div class="layui-input-block" style="margin-left: 130px;width: 290px" >
+ <input type="radio" name="type" value="no" title="不循环" checked/>
+ <input type="radio" name="type" value="month" title="月循环"/>
+ <input type="radio" name="type" value="year" title="年循环"/>
+ </div>
+ </div>
+ <div class="layui-form-item" id="start-date" >
+ <label class="layui-form-label" style="width: 100px"><span style="color: red;">*</span>开始日期:</label>
+ <div class="layui-input-block" style="margin-left: 130px">
+ <input type="text" name="startdate" class="layui-input" id="start-date-value" placeholder="请选择开始日期,年-月-日">
+ </div>
+ </div>
+ <div class="layui-form-item" id="end-date" >
+ <label class="layui-form-label" style="width: 100px"><span style="color: red;">*</span>结束日期:</label>
+ <div class="layui-input-block" style="margin-left: 130px">
+ <input type="text" name="enddate" class="layui-input" id="end-date-value" placeholder="请选择结束日期,年-月-日">
+ </div>
+ </div>
+ <div class="layui-form-item" id="month" style="display: none">
+ <label class="layui-form-label" style="width: 100px"><span style="color: red;">*</span>每月:</label>
+ <div class="layui-input-block" style="margin-left: 130px">
+ <select id="weeknumber" name="weeknumber" >
+ <option value="1">第一周</option>
+ <option value="2">第二周</option>
+ <option value="3">第三周</option>
+ <option value="4">第四周</option>
+ <option value="5">第五周</option>
+ </select>
+ <select name="weekday" xm-select="roleId" >
+ <option value="1">星期一</option>
+ <option value="2">星期二</option>
+ <option value="3">星期三</option>
+ <option value="4">星期四</option>
+ <option value="5">星期五</option>
+ <option value="6">星期六</option>
+ <option value="7">星期七</option>
+ </select>
+ </div>
+ </div>
+ <div class="layui-form-item" id="year-start-date" style="display: none">
+ <label class="layui-form-label" style="width: 100px"><span style="color: red;">*</span>每年开始日期:</label>
+ <div class="layui-input-block" style="margin-left: 130px">
+ <input type="text" name="yearStartDate" class="layui-input" id="year-start-value" placeholder="请选择月-日,如5月4日">
+ </div>
+ </div>
+ <div class="layui-form-item" id="year-end-date" style="display: none">
+ <label class="layui-form-label" style="width: 100px"><span style="color: red;">*</span>每年结束日期:</label>
+ <div class="layui-input-block" style="margin-left: 130px">
+ <input type="text" name="yearEndDate" class="layui-input" id="year-end-value" placeholder="请选择月-日,如5月4日">
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label" style="width: 100px"><span style="color: red;">*</span>积分获取倍速:</label>
+ <div class="layui-input-block" style="margin-left: 130px">
+ <input name="rate" placeholder="请输入积分获取倍速" type="text" class="layui-input" maxlength="11"
+ lay-verify="required" required/>
+ </div>
+ </div>
+ <div class="layui-form-item" >
+ <label class="layui-form-label" style="width: 100px">备注:</label>
+ <div class="layui-input-block" style="margin-left: 130px">
+ <input name="remark" placeholder="请输入备注" type="text" class="layui-input" maxlength="100" />
+ </div>
+ </div>
+
+ <div class="layui-form-item model-form-footer">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+ <button class="layui-btn" lay-filter="active-form-submit" lay-submit id="submitbtn">保存</button>
+ </div>
+</form>
+
+<script>
+ layui.use(['layer', 'admin','laydate', 'form', 'formSelects',], function () {
+ var layer = layui.layer;
+ var admin = layui.admin;
+ var form = layui.form;
+ var laydate = layui.laydate;
+ var formSelects = layui.formSelects;
+ 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');
+ form.render('select');
+ // 回显user数据
+ var bean = admin.getTempData('t_bean');
+ if (bean) {
+ if (bean.type == "no") {
+ $("#start-date").show();
+ $("#end-date").show();
+ $("#month").hide();
+ $("#year-start-date").hide();
+ $("#year-end-date").hide();
+ bean.startdate = bean.startdate.substring(0, 4) + "年" + bean.startdate.substring(4, 6) + "月" + bean.startdate.substring(6, 8)+"日";
+ bean.enddate = bean.enddate.substring(0, 4) + "年" + bean.enddate.substring(4, 6) + "月" + bean.enddate.substring(6, 8)+"日";
+ }
+ if (bean.type == "month") {
+ $("#start-date").hide();
+ $("#end-date").hide();
+ $("#month").show();
+ $("#year-start-date").hide();
+ $("#year-end-date").hide();
+ let weektemp = bean.weekday.split(",");
+ formSelects.value('roleId', weektemp);
+ }
+ if (bean.type == "year") {
+ $("#start-date").hide();
+ $("#end-date").hide();
+ $("#month").hide();
+ $("#year-start-date").show();
+ $("#year-end-date").show();
+ bean.yearStartDate = bean.startdate.substring(0, 2) + "月" + bean.startdate.substring(2, 4) + "日" ;
+ bean.yearEndDate = bean.enddate.substring(0, 2) + "月" + bean.enddate.substring(2, 4) + "日" ;
+ }
+ form.val('active-form', bean);
+ }
+ // 表单提交事件
+ form.on('submit(active-form-submit)', function (data) {
+ layer.load(2);
+ let token = $("meta[name='_csrf_token']").attr("value");
+ console.log(data.field.weekday)
+ let datatemp = {'pointsActive': data.field};
+ $.ajax({
+ type : "POST",
+ dataType : "json",
+ url : url,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN':token,
+ },
+ data : JSON.stringify(datatemp),
+ success : function(result) {
+ layer.closeAll('loading');
+ if (result.code === 200) {
+ layer.msg(result.msg, {icon: 1});
+ admin.finishPopupCenter();
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error : function() {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ return false;
+ });
+
+ $('#radio-value').click(function () {
+ let radios = document.getElementsByName("type");
+ let value = 0;
+ for(let i=0;i<radios.length;i++){
+ if(radios[i].checked == true){
+ value = radios[i].value;
+ }
+ }
+ if(value == "no"){
+ $("#start-date").show();
+ $("#end-date").show();
+ $("#month").hide();
+ $("#year-start-date").hide();
+ $("#year-end-date").hide();
+ }else if(value == "month"){
+ $("#start-date").hide();
+ $("#end-date").hide();
+ $("#month").show();
+ $("#year-start-date").hide();
+ $("#year-end-date").hide();
+ }else if(value == "year"){
+ $("#start-date").hide();
+ $("#end-date").hide();
+ $("#month").hide();
+ $("#year-start-date").show();
+ $("#year-end-date").show();
+ }
+ });
+ });
+</script>
diff --git a/payapi/src/main/resources/templates/system/level/pointsactiveindex.html b/payapi/src/main/resources/templates/system/level/pointsactiveindex.html
new file mode 100644
index 0000000..0c1806a
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/level/pointsactiveindex.html
@@ -0,0 +1,177 @@
+<div class="layui-card">
+ <div class="layui-card-header">
+ <h2 class="header-title">活动日管理</h2>
+ <span class="layui-breadcrumb pull-right">
+ <a href="#">积分中心</a>
+ <a><cite>活动日管理</cite></a>
+ </span>
+ </div>
+ <div class="layui-card-body">
+ <div class="layui-form toolbar">
+ 活动日名称:
+ <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-type">
+ <option value=""> 全部</option>
+ <option value="no">不循环</option>
+ <option value="month">月循环</option>
+ <option value="year">年循环</option>
+ </select>
+ </div>
+ <button id="btn-chkstatus-type" class="layui-btn icon-btn" data-type="search"><i
+ class="layui-icon"></i>搜索
+ </button>
+ <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">
+ <button id="btn-add-active" class="layui-btn icon-btn" data-type="add"><i
+ class="layui-icon"></i>新增
+ </button>
+ </div>
+ </div>
+ <table class="layui-table" id="pointsActiveTable" lay-filter="pointsActiveTable"></table>
+ </div>
+</div>
+
+
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+ var form = layui.form;
+ var table = layui.table;
+ var admin = layui.admin;
+ form.render("select");
+ // 渲染表格
+ table.render({
+ elem: '#pointsActiveTable',
+ url: '[[@{/pointsActive/list}]]',
+ page: true,
+ where: {name: null, type: null},
+ cols: [
+ [
+ {field: 'id', title: '编号', width: 130, align: 'center', fixed: 'left', sort: true},
+ {field: 'name', title: '活动日名称', width: 160, align: 'center'},
+ {
+ field: 'type', title: '循环方式', width: 160, align: 'center', templet: function (item) {
+ if (item.type == "no") {
+ return "不循环"
+ }
+ if (item.type == "month") {
+ return "月循环"
+ }
+ if (item.type == "year") {
+ return "年循环"
+ }
+ }
+ },
+ {
+ field: 'startdate',
+ title: '起止日期',
+ width: 250,
+ align: 'center',
+ templet: function (item) {
+ if (item.type == "no") {
+ let str = item.startdate.substring(0, 4) + "." + item.startdate.substring(4, 6) + "." + item.startdate.substring(6, 8);
+ let enstr = item.enddate.substring(0, 4) + "." + item.enddate.substring(4, 6) + "." + item.enddate.substring(6, 8);
+ return str + "-" + enstr;
+ }
+ if (item.type == "month") {
+ return "每月第" + item.weeknumber + "周的第" + item.weekday + "天";
+ }
+ if (item.type == "year") {
+ let str = item.startdate.substring(0, 2) + "月" + item.startdate.substring(2, 4) + "日";
+ let strend = item.enddate.substring(0, 2) + "月" + item.enddate.substring(2, 4) + "日";
+ return "每年" + str + "-" + strend;
+ }
+ }
+ },
+ {field: 'remark', title: '备注', width: 160, align: 'center'},
+ {
+ align: 'center',
+ title: '操作',
+ fixed: 'right',
+ width: 200,
+ templet: function (item) {
+ let html = ' <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>修改</a> ';
+ html += '<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>';
+ return html;
+ }
+ }
+ ]
+ ]
+ });
+
+ // 搜索按钮点击事件
+ $('#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-type').click(function () {
+ $("#search-chkstatus-type").val("");
+ $('#shop-manager-search-type option:selected').val("");
+ });
+
+ // 工具条点击事件
+ //监听单元格
+ table.on('tool(pointsActiveTable)', function (obj) {
+ var data = obj.data;
+ if ('edit' == obj.event) {
+ //修改
+ showModel(data);
+ } else if ('del' == obj.event) {
+ //删除
+ layer.confirm("确定要删除该活动日吗?", function () {
+ var token = $("meta[name='_csrf_token']").attr("value");
+ let param = {"activeid": data.id};
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: '[[@{/pointsActive/delete}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': token,
+ },
+ data: JSON.stringify(param),
+ success: function (result) {
+ if (result.code === 200) {
+ layer.msg(result.msg, {icon: 1});
+ admin.refresh();
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ });
+ }
+ });
+ $('#btn-add-active').click(function () {
+ showModel();
+ });
+ let showModel = function (data) {
+ let title = data ? '编辑活动日' : '新增活动日';
+ admin.putTempData('t_bean', data);
+ admin.popupCenter({
+ title: title,
+ path: '[[@{/pointsActive/loadadd}]]',
+ finish: function () {
+ table.reload('pointsActiveTable', {});
+ }
+ });
+ };
+
+ });
+</script>
diff --git a/payapi/src/main/resources/templates/system/level/pointsreport.html b/payapi/src/main/resources/templates/system/level/pointsreport.html
new file mode 100644
index 0000000..aa84fd1
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/level/pointsreport.html
@@ -0,0 +1,161 @@
+<div class="layui-card">
+ <div class="layui-card-header">
+ <h2 class="header-title">发放积分统计</h2>
+ <span class="layui-breadcrumb pull-right">
+ <a href="#">积分中心</a>
+ <a><cite>发放积分统计</cite></a>
+ </span>
+ </div>
+ <div class="layui-card-body">
+ <div class="layui-form toolbar">
+ <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="startDateReport"
+ placeholder="开始日期"
+ autocomplete="off" class="layui-input"/>
+ </div>
+ -
+ <div class="layui-input-inline" style="width: 120px;">
+ <input type="text" name="endDate" id="endDateReport" placeholder="结束日期"
+ autocomplete="off"
+ class="layui-input"/>
+ </div>
+ </div>
+ <div class="layui-inline" style="margin-right: 20px">
+ 积分名称:
+ <select id="points-name">
+ <option selected='selected' value=""> 全部</option>
+ </select>
+ </div>
+ <button id="btn-chkstatus-report" class="layui-btn icon-btn" data-type="search"><i
+ class="layui-icon"></i>搜索
+ </button>
+ <button id="btn-reset-report" class="layui-btn layui-btn-primary" data-type="reset"><i
+ class="layui-icon"></i>清 空
+ </button>
+ </div>
+ <table class="layui-table" id="pointsReportTable" lay-filter="pointsReportTable"></table>
+ </div>
+</div>
+
+<script type="text/html" id="subjectday-toolbar">
+ <div class="layui-btn-container">
+ <button class="layui-btn layui-btn-sm" id="btn-fold-subjectday" lay-event="subjectdayShowFold"
+ style="color: #020202;background-color: #f2f2f2;font-weight: 700">
+ <div>累计发放积分:<span id="points" style="color: #0096f8">0</span> 累计回收积分:<span id="outPoints"
+ style="color: #0096f8">0</span>
+ </div>
+ </button>
+ </div>
+</script>
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
+ var form = layui.form;
+ var table = layui.table;
+ var admin = layui.admin;
+ var laydate = layui.laydate;
+ let element = layui.element;
+ let init_date = new Date();
+ laydate.render({
+ elem: '#startDateReport'
+ , format: 'yyyy年MM月dd日'
+ , value: init_date
+ ,trigger: 'click'
+ });
+ laydate.render({
+ elem: '#endDateReport'
+ , format: 'yyyy年MM月dd日'
+ , value: init_date
+ ,trigger: 'click'
+ });
+ // 渲染表格
+ table.render({
+ elem: '#pointsReportTable',
+ url: '[[@{/pointsReport/list}]]',
+ page: false,
+ toolbar: '#subjectday-toolbar',
+ defaultToolbar: [ 'exports', 'print'],
+ where: {startdate: null, enddate: null},
+ cols: [
+ [
+ {
+ field: 'pointsName',
+ title: '积分名称',
+ width: 300,
+ align: 'center'
+
+ },
+ {
+ field: 'pointsCount',
+ title: '次数',
+ width: 320,
+ align: 'center'
+
+ },
+ {
+ field: 'pointsSum',
+ title: '积分',
+ width: 320,
+ align: 'center'
+
+ }
+
+ ]
+ ]
+ });
+
+ // 搜索按钮点击事件
+ $('#btn-chkstatus-report').click(function () {
+ let name = $("#points-name").val();
+ let startDate = $("#startDateReport").val();
+ let endDate = $("#endDateReport").val();
+ table.reload('pointsReportTable', {where: {name: name, startdate: startDate, enddate: endDate}});
+ });
+
+ $('#btn-reset-report').click(function () {
+ $("#startDateReport").val("");
+ $("#endDateReport").val("");
+ });
+
+ let getPointsReportParam = function () {
+ $.ajax({
+ type: "GET",
+ dataType: "json",
+ url: '[[@{/pointsReport/param}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ success: function (result) {
+ if (result.code === 200) {
+ let dataSet = result.paramList;
+ let allPoints = result.allPoints;
+ let outpoints = result.outpoints;
+ $("#points").text(allPoints);
+ $("#outPoints").text(outpoints);
+ for(let i=0;i<dataSet.length;i++){
+ if(dataSet[i].dictval!=="outpoints"){
+ $("#points-name").append('<option value="'+dataSet[i].dictval+'">'+dataSet[i].dicttypename+'</option>');
+ }
+ }
+ form.render();
+ element.init();
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ }
+ getPointsReportParam();
+ });
+</script>
diff --git a/payapi/src/main/resources/templates/system/level/taskadd.html b/payapi/src/main/resources/templates/system/level/taskadd.html
new file mode 100644
index 0000000..e5e059c
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/level/taskadd.html
@@ -0,0 +1,82 @@
+<!-- operator表单弹窗 -->
+<form id="task-form" lay-filter="task-form" class="layui-form model-form">
+ <input name="taskid" id="taskid" type="hidden"/>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">任务名称</label>
+ <div class="layui-input-block">
+ <input name="taskname" type="text" class="layui-input" maxlength="100" readonly="readonly"
+ style="background-color: #f1f1f1;"/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">任务积分/次</label>
+ <div class="layui-input-block">
+ <input name="taskpoints" type="text" class="layui-input" maxlength="300"/>
+ </div>
+ </div>
+ <div class="layui-form-item">
+ <label class="layui-form-label">说明</label>
+ <div class="layui-input-block">
+ <textarea name="remark" type="text" class="layui-input" maxlength="300"
+ style="height: 80px;padding: 10px"/>
+ </div>
+ </div>
+ <div class="layui-form-item model-form-footer">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+ <button class="layui-btn" lay-filter="task-form-submit" lay-submit id="submitbtn">保存</button>
+ </div>
+</form>
+
+<script>
+ layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+ var layer = layui.layer;
+ var admin = layui.admin;
+ var form = layui.form;
+ var url = '[[@{/task/add}]]';
+ form.render('radio');
+ form.render('select');
+ // 回显user数据
+ var bean = admin.getTempData('t_bean');
+ if (bean) {
+ form.val('task-form', bean);
+ }
+ // 表单提交事件
+ form.on('submit(task-form-submit)', function (data) {
+ layer.load(2);
+ let token = $("meta[name='_csrf_token']").attr("value");
+ console.log(data.field)
+ let datatemp = {'tPointsTask': data.field};
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ url: url,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': token,
+ },
+ data: JSON.stringify(datatemp),
+ success: function (result) {
+ layer.closeAll('loading');
+ if (result.code === 200) {
+ layer.msg(result.msg, {icon: 1});
+ admin.finishPopupCenter();
+ } else if (result.code === 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error: function () {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ return false;
+ });
+ });
+</script>
diff --git a/payapi/src/main/resources/templates/system/level/userpointsindex.html b/payapi/src/main/resources/templates/system/level/userpointsindex.html
new file mode 100644
index 0000000..14a84f1
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/level/userpointsindex.html
@@ -0,0 +1,205 @@
+<div class="layui-card">
+ <div class="layui-card-header">
+ <h2 class="header-title">会员积分查询</h2>
+ <span class="layui-breadcrumb pull-right">
+ <a href="#">积分中心</a>
+ <a><cite>会员积分查询</cite></a>
+ </span>
+ </div>
+ <div class="layui-card-body">
+ <div class="layui-form toolbar">
+ 姓名:
+ <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">
+ <option value=""> 全部</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="startDateSelect"
+ placeholder="开始日期"
+ autocomplete="off" class="layui-input"/>
+ </div>
+ -
+ <div class="layui-input-inline" style="width: 120px;">
+ <input type="text" name="endDate" id="endDateSelect" placeholder="结束日期"
+ autocomplete="off"
+ class="layui-input"/>
+ </div>
+ </div>
+ <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-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>
+ </div>
+ <table class="layui-table" id="userPointsTable" lay-filter="userPointsTable"></table>
+ </div>
+</div>
+
+<script type="text/html" id="subjectday-toolbar">
+ <div class="layui-btn-container">
+ <button class="layui-btn layui-btn-sm" id="btn-fold-subjectday" lay-event="subjectdayShowFold" style="color: #020202;background-color: #f2f2f2;font-weight: 700">
+ <div>累计获得积分:<span id="points" style="color: #0096f8">0</span> 累计失效积分:<span id="outPoints" style="color: #0096f8">0</span></div>
+ </button>
+ </div>
+</script>
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
+ var form = layui.form;
+ var table = layui.table;
+ var admin = layui.admin;
+ var laydate = layui.laydate;
+ form.render("select");
+ laydate.render({
+ elem: '#startDateSelect'
+ ,format: 'yyyy年MM月dd日'
+ ,trigger: 'click'
+ });
+ laydate.render({
+ elem: '#endDateSelect'
+ ,format: 'yyyy年MM月dd日'
+ ,trigger: 'click'
+ });
+ // 渲染表格
+ table.render({
+ elem: '#userPointsTable',
+ url: '[[@{/userpoints/list}]]',
+ page: true,
+ toolbar:'#subjectday-toolbar',
+ defaultToolbar: [],
+ where: {name: null, idno: null},
+ cols: [
+ [
+ {
+ field: 'name',
+ title: '姓名',
+ width: 180,
+ align: 'center',
+ sort: true,
+ templet: function (item) {
+ return item.tPointsMain.name;
+ }
+ },
+ {
+ field: 'cardno',
+ title: '市民卡账号',
+ width: 160,
+ align: 'center',
+ templet: function (item) {
+ return item.tPointsMain.cardno;
+ }
+ },
+ {
+ field: 'levelname',
+ title: '会员等级',
+ width: 160,
+ align: 'center',
+ templet: function (item) {
+ $("#points").text(item.tPointsMain.points);
+ $("#outPoints").text(item.tPointsMain.outPoints);
+ return item.tPointsMain.levelname;
+ }
+ },
+ {
+ field: 'transtime',
+ title: '积分时间',
+ width: 160,
+ align: 'center',
+ templet: function (item) {
+ let datetemp = item.transdate + item.transtime;
+ return admin.formatDate(datetemp);
+ }
+ },
+ {
+ field: 'type',
+ title: '积分名称',
+ width: 140,
+ align: 'center',
+ 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'},
+
+ ]
+ ]
+ });
+
+ // 搜索按钮点击事件
+ $('#btn-chkstatus-search-select').click(function () {
+ let name = $("#search-chkstatus-get").val();
+ let idno = $("#search-account").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-select').click(function () {
+ $("#search-chkstatus-get").val("");
+ $("#search-account").val("");
+ /* $("#startDateSelect").val("");
+ $("#endDateSelect").val("");*/
+ });
+
+ /* // 工具条点击事件
+ table.on('tool(userPointsTable)', function (obj) {
+ let data = obj.data;
+ let layEvent = obj.event;
+ if (layEvent === 'edit') {
+ showModel(data);
+ }
+ });
+
+ let showModel = function (data) {
+ let title = '查看积分明细';
+ admin.putTempData('t_bean', data);
+ admin.popupCenter({
+ title: title,
+ path: '[[@{/pointsdetail/pointsdetailindex}]]'
+ });
+ };*/
+
+ });
+</script>
diff --git a/payapi/src/main/resources/templates/system/user/index.html b/payapi/src/main/resources/templates/system/user/index.html
index a1d07a8..245461a 100644
--- a/payapi/src/main/resources/templates/system/user/index.html
+++ b/payapi/src/main/resources/templates/system/user/index.html
@@ -146,4 +146,4 @@
});
}
});
-</script>
\ No newline at end of file
+</script>