增加导入用户信息功能
diff --git a/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java b/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java
index 6ee3e99..a5384e2 100644
--- a/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java
+++ b/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java
@@ -1,10 +1,16 @@
package com.supwisdom.dlpay.api.dao;
import com.supwisdom.dlpay.api.domain.TPersonIdentity;
+import com.supwisdom.dlpay.framework.domain.TPerson;
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;
@Repository
public interface PersonIdentityDao extends JpaRepository<TPersonIdentity, String> {
TPersonIdentity getByThirdUid(String thirdUid);
+
+ @Query(value = "select * from TB_PERSON_IDENTITY where userid =:userid",nativeQuery = true)
+ TPersonIdentity getByUserid(@Param("userid")String userid);
}
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
index b61b293..1de4f1d 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
@@ -5,7 +5,8 @@
import javax.persistence.*;
@Entity
-@Table(name = "TB_PERSON_IDENTITY")
+@Table(name = "TB_PERSON_IDENTITY",
+ indexes = {@Index(name = "person_userid_idx", columnList = "userid")})
public class TPersonIdentity {
// 市民卡号
@Id
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TPerson.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TPerson.java
index a2e361c..8b79e4c 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TPerson.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TPerson.java
@@ -1,7 +1,5 @@
package com.supwisdom.dlpay.framework.domain;
-import org.hibernate.annotations.GenericGenerator;
-
import javax.persistence.*;
@Entity
@@ -10,8 +8,6 @@
@Index(name = "person_idno_uk", unique = true, columnList = "idtype,idno")})
public class TPerson {
@Id
- @GenericGenerator(name = "idGenerator", strategy = "uuid")
- @GeneratedValue(generator = "idGenerator")
@Column(name = "USERID", nullable = false, length = 32)
private String userid;
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java b/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
index 918cb87..8289e96 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
@@ -1,6 +1,7 @@
package com.supwisdom.dlpay.system.service;
import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.api.bean.UserInforResponse;
import com.supwisdom.dlpay.api.domain.TAccount;
import com.supwisdom.dlpay.api.domain.TPersonIdentity;
import com.supwisdom.dlpay.api.domain.TPointsAccount;
@@ -9,6 +10,7 @@
import com.supwisdom.dlpay.system.bean.PersonParamBean;
import com.supwisdom.dlpay.water.bean.UserAccountSearchBean;
import com.supwisdom.dlpay.water.pojo.UserAccountDTO;
+import org.jetbrains.annotations.Nullable;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@@ -45,6 +47,9 @@
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
TPersonIdentity getPersonIdentityByThirdUid(String thirdUid);
+ @Transactional(rollbackFor = Exception.class)
+ TPersonIdentity getPersonIdentityByThirdUidOrUserid(String thirdUid,String userid);
+
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
TPersonIdentity updateCoamount(String thirdUid,Double amount);
@@ -54,5 +59,11 @@
@Transactional(rollbackFor = Exception.class, readOnly = true)
PageResult<UserAccountDTO> queryUserAccByParam(UserAccountSearchBean param);
+ @Transactional(rollbackFor = Exception.class)
+ TPersonIdentity saveUserInfoFromPayApi(UserInforResponse payApiUser, TPersonIdentity localIdentity,TPerson person);
+
double subtract(Double minuend, Double subtractor);
+
+ @Transactional(rollbackFor = Exception.class)
+ TPerson savePerson(UserInforResponse userInfo);
}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
index ea422fd..b70140a 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
@@ -1,6 +1,7 @@
package com.supwisdom.dlpay.system.service.impl;
import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.api.bean.UserInforResponse;
import com.supwisdom.dlpay.api.dao.AccountDao;
import com.supwisdom.dlpay.api.dao.PersonDao;
import com.supwisdom.dlpay.api.dao.PersonIdentityDao;
@@ -189,14 +190,20 @@
@Override
public TPersonIdentity getPersonIdentityByThirdUid(String thirdUid) {
- TPersonIdentity personIdentity = personIdentityDao.getByThirdUid(thirdUid);
- if (personIdentity != null) {
- return personIdentity;
- }
- return null;
+ return personIdentityDao.getByThirdUid(thirdUid);
}
- @Override
+ @Override
+ public TPersonIdentity getPersonIdentityByThirdUidOrUserid(String thirdUid, String userid) {
+ TPersonIdentity personIdentity = personIdentityDao.getByThirdUid(thirdUid);
+ if (personIdentity != null) {
+ return personIdentity;
+ } else {
+ return personIdentityDao.getByUserid(userid);
+ }
+ }
+
+ @Override
public TPersonIdentity updateCoamount(String thirdUid, Double amount) {
TPersonIdentity personIdentity = personIdentityDao.getByThirdUid(thirdUid);
if (null == personIdentity) {
@@ -249,7 +256,47 @@
return new PageResult<>(count.longValue(), list);
}
- public double subtract(Double minuend,Double subtractor){
+ @Override
+ public TPersonIdentity saveUserInfoFromPayApi(UserInforResponse payApiUser, TPersonIdentity localIdentity,TPerson person) {
+ String dateTime = systemUtilService.getSysdatetime().getHostdatetime();
+ if (null == localIdentity) {
+ TPersonIdentity identity = buildNwIdentity(person, payApiUser, dateTime);
+ identity.setCoamount(0.0);
+ identity.setAccamount(0.0);
+ return personIdentityDao.save(identity);
+ } else {
+ if (payApiUser.getCardno().equals(localIdentity.getThirdUid())) {
+ localIdentity.setCardphyId(payApiUser.getCardphyid());
+ localIdentity.setStatus(payApiUser.getCardstatus());
+ localIdentity.setPerson(person);
+ return personIdentityDao.save(localIdentity);
+ } else {
+ TPersonIdentity identity = buildNwIdentity(person, payApiUser, dateTime);
+ identity.setCoamount(localIdentity.getCoamount());
+ identity.setAccamount(localIdentity.getAccamount());
+ personIdentityDao.delete(localIdentity);
+ return personIdentityDao.save(identity);
+ }
+ }
+ }
+
+ @Override
+ public TPerson savePerson(UserInforResponse userInfo) {
+ Optional<TPerson> optional = personDao.findById(userInfo.getUserid());
+ String dateTime = systemUtilService.getSysdatetime().getHostdatetime();
+ if (optional.isPresent()) {
+ TPerson person = optional.get();
+ savePersonInfo(person, userInfo, dateTime);
+ return personDao.save(person);
+ }else {
+ TPerson person = new TPerson();
+ person.setUserid(userInfo.getUserid());
+ savePersonInfo(person, userInfo, dateTime);
+ return personDao.save(person);
+ }
+ }
+
+ public double subtract(Double minuend, Double subtractor){
if (minuend == null) {
minuend = 0.0;
}
@@ -266,4 +313,23 @@
new BigDecimal(String.valueOf(d2))
).doubleValue();
}
+
+ private void savePersonInfo(TPerson person, UserInforResponse payApiUser,String dateTime) {
+ person.setIdtype(payApiUser.getIdtype());
+ person.setLastsaved(dateTime);
+ person.setMobile(payApiUser.getPhone());
+ person.setName(payApiUser.getUsername());
+ person.setSex(payApiUser.getSex());
+ person.setStatus(payApiUser.getTransstatus());
+ }
+
+ private TPersonIdentity buildNwIdentity(TPerson person, UserInforResponse payApiUser,String dateTime) {
+ TPersonIdentity identity = new TPersonIdentity();
+ identity.setThirdUid(payApiUser.getCardno());
+ identity.setCardphyId(payApiUser.getCardphyid());
+ identity.setCreatetime(dateTime);
+ identity.setStatus(payApiUser.getCardstatus());
+ identity.setPerson(person);
+ return identity;
+ }
}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
index 22591b6..68dbea4 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -41,18 +41,18 @@
}
}
-class QueryUserParam : APIRequestParam() {
- @Sign
- var userid: String? = null // 用户ID二选一 (两者都传取userid)
- @Sign
- var uid: String? = null // 用户ID二选一
-
- override fun checkParam(): Boolean {
- if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
-
- return true
- }
-}
+//class QueryUserParam : APIRequestParam() {
+// @Sign
+// var userid: String? = null // 用户ID二选一 (两者都传取userid)
+// @Sign
+// var uid: String? = null // 用户ID二选一
+//
+// override fun checkParam(): Boolean {
+// if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
+//
+// return true
+// }
+//}
class ModifyUserParam : APIRequestParam() {
@Sign
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
index 3ba083b..f433ab1 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
@@ -94,9 +94,22 @@
@PostMapping("/card/purseinit")
fun cardPurseInit(param: CardPayRequest): ResponseEntity<Any> {
try {//1. 通过 citizenCardno 检查用户以及合法性
- val personIdentity = userDataService.getPersonIdentityByThirdUid(param.citizenCardno)
- ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
- .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "未查询到您的身份信息"))
+ val userInfo = userProxy.querybycardno(QueryUserParam().apply {
+ this.citizencardno = param.citizenCardno
+ })
+ if (userInfo.retcode != 0) {
+ logger.error { "获取卡号为${param.citizenCardno}的用户信息失败,错误信息:${userInfo.retmsg}" }
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, userInfo.retmsg))
+ }
+ if (userInfo.cardstatus != TradeDict.STATUS_NORMAL || userInfo.transstatus != TradeDict.STATUS_NORMAL) {
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "用户消费状态异常"))
+ }
+ val person = userDataService.savePerson(userInfo)
+ val localIdentity = userDataService.
+ getPersonIdentityByThirdUidOrUserid(param.citizenCardno,userInfo.userid)
+ val personIdentity = userDataService.saveUserInfoFromPayApi(userInfo, localIdentity,person)
val notaccAmount = userDataService.subtract(personIdentity.coamount, personIdentity.accamount)
//2. 通过 deviceno 查询设备费率参数
val todayAmount = collectdtlService.getTodayAmount(personIdentity.person.userid) ?: 0.0
@@ -275,14 +288,21 @@
if (userInfo.cardstatus != TradeDict.STATUS_NORMAL || userInfo.transstatus != TradeDict.STATUS_NORMAL) {
return ModelAndView("error/500").addObject("errorMsg", "用户消费状态异常")
}
+ val person = userDataService.savePerson(userInfo)
+ val localIdentity = userDataService.
+ getPersonIdentityByThirdUidOrUserid(null,userInfo.userid)
+ val personIdentity = userDataService.saveUserInfoFromPayApi(userInfo, localIdentity,person)
val collectDtl = collectdtlService.pretendAsCard(userInfo, cobillno)
val deviceParam = deviceService.getParaMapByDeviceno(collectDtl.deviceno)
- val personIdentity = userDataService.getPersonIdentityByThirdUid(userInfo.cardno)
- ?: return ModelAndView("error/500").addObject("errorMsg", "未查询到您的身份信息")
val notaccAmount = userDataService.subtract(personIdentity.coamount, personIdentity.accamount)
if (notaccAmount > deviceParam[WaterDeviceParam.permitNotAccAmount]!!.toInt()) {
return ModelAndView("error/500").
- addObject("errorMsg", "你的未入账金额为${notaccAmount},已超过最大限额:${deviceParam[WaterDeviceParam.permitNotAccAmount]!!.toInt()}")
+ addObject("errorMsg", "你的未入账金额为$notaccAmount,已超过最大限额:${deviceParam[WaterDeviceParam.permitNotAccAmount]!!.toInt()}")
+ }
+ val todayAmount = collectdtlService.getTodayAmount(personIdentity.person.userid) ?: 0.0
+ if (todayAmount > deviceParam[WaterDeviceParam.dayAmountLimit]!!.toInt()) {
+ return ModelAndView("error/500").
+ addObject("errorMsg", "今日消费$todayAmount,已达每日限额")
}
if (collectDtl.status != TradeDict.DTL_STATUS_INIT) {
return ModelAndView("error/500").addObject("errorMsg", "流水状态异常")