From f0a2bdc3ee185f4661c05b8c5323d33c51a24e92 Mon Sep 17 00:00:00 2001 From: Xia Kaixiang Date: Sun, 5 May 2019 19:04:13 +0800 Subject: [PATCH] =?utf8?q?=E5=BC=80=E6=88=B7=E3=80=81=E6=9F=A5=E8=AF=A2?= =?utf8?q?=E5=AE=8C=E6=95=B4=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../supwisdom/dlpay/api/dao/AccountDao.java | 3 + .../supwisdom/dlpay/api/dao/PersonDao.java | 6 +- .../supwisdom/dlpay/api/domain/TPerson.java | 22 +--- .../dlpay/api/domain/TPersonIdentity.java | 9 ++ .../exception/RequestParamCheckException.java | 14 +++ .../framework/service/SystemUtilService.java | 2 + .../service/impl/SystemUtilServiceImpl.java | 6 + .../dlpay/framework/util/HmacUtil.java | 29 +---- .../dlpay/framework/util/StringUtil.java | 102 +++++++++++++++- .../dlpay/framework/util/SysparaUtil.java | 4 +- .../dlpay/framework/util/TradeErrorCode.java | 21 ++++ .../dlpay/framework/util/XmlUtils.java | 49 +------- .../com/supwisdom/dlpay/util/ConstUtil.java | 15 --- .../supwisdom/dlpay/util/ConstantUtil.java | 22 ++++ .../com/supwisdom/dlpay/api/ThirdPayCall.kt | 2 +- .../dlpay/api/bean/api_request_param.kt | 69 +++++++++++ ...e_service.kt => consume_api_controller.kt} | 8 +- .../dlpay/api/controller/notify_controller.kt | 5 +- .../api/controller/user_api_controller.kt | 90 ++++++++++++++ .../api/service/impl/person_service_impl.kt | 2 +- .../api/service/impl/user_service_impl.kt | 110 ++++++++++++++++++ .../{user => api}/service/user_service.kt | 14 ++- .../dlpay/app/bean/app_request_param.kt | 2 + .../dlpay/framework/framework_util.kt | 13 +++ .../supwisdom/dlpay/shop/bean/shop_param.kt | 8 -- .../dlpay/user/controller/user_controller.kt | 70 ----------- .../user/service/impl/user_service_impl.kt | 57 --------- .../dlpay/controller/UserControllerTest.kt | 21 ++-- 28 files changed, 508 insertions(+), 267 deletions(-) create mode 100644 src/main/java/com/supwisdom/dlpay/exception/RequestParamCheckException.java delete mode 100644 src/main/java/com/supwisdom/dlpay/util/ConstUtil.java create mode 100644 src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java create mode 100644 src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt rename src/main/kotlin/com/supwisdom/dlpay/api/controller/{consume_service.kt => consume_api_controller.kt} (97%) create mode 100644 src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt rename src/main/kotlin/com/supwisdom/dlpay/{user => api}/service/user_service.kt (59%) create mode 100644 src/main/kotlin/com/supwisdom/dlpay/app/bean/app_request_param.kt delete mode 100644 src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt delete mode 100644 src/main/kotlin/com/supwisdom/dlpay/user/service/impl/user_service_impl.kt diff --git a/src/main/java/com/supwisdom/dlpay/api/dao/AccountDao.java b/src/main/java/com/supwisdom/dlpay/api/dao/AccountDao.java index 01817202..beb4a881 100644 --- a/src/main/java/com/supwisdom/dlpay/api/dao/AccountDao.java +++ b/src/main/java/com/supwisdom/dlpay/api/dao/AccountDao.java @@ -30,4 +30,7 @@ public interface AccountDao extends JpaRepository { @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value = "0")}) @Query("select a from TAccount a where a.userid = ?1") TAccount getByUseridForUpdateNowait(String userid); + + @Query("select a from TAccount a where a.userid = ?1 and a.subjno=?2") + TAccount findByUseridAndSubjno(String userid, String subjno); } diff --git a/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java b/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java index 2898f3f2..03fbfcd4 100644 --- a/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java +++ b/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java @@ -2,11 +2,15 @@ package com.supwisdom.dlpay.api.dao; import com.supwisdom.dlpay.api.domain.TPerson; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; /** * Created by shuwei on 2019/4/12. */ public interface PersonDao extends JpaRepository { - TPerson findByThirdUniqueIdenty(String thirdUniqueIdenty); + @Query(value = "from TPerson where idtype=?1 and idno=?2 ") + TPerson findByIdentity(String idtype, String idno); + + TPerson findByUserid(String userid); } diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java index 2b8cf43f..fafd0e66 100644 --- a/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java +++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPerson.java @@ -6,7 +6,8 @@ import javax.persistence.*; @Entity @Table(name = "TB_PERSON", - indexes = {@Index(name = "person_name_idx", columnList = "name")}) + indexes = {@Index(name = "person_name_idx", columnList = "name"), + @Index(name = "person_idno_uk", unique = true, columnList = "idtype,idno")}) public class TPerson { @Id @GenericGenerator(name = "idGenerator", strategy = "uuid") @@ -53,16 +54,10 @@ public class TPerson { @Column(name = "LASTSAVED", length = 14) private String lastsaved; - /** - * 第三方唯一标识,可为学工号,银行卡号等 - */ - @Column(name = "THIRD_UNIQUE_IDENTY", length = 32) - private String thirdUniqueIdenty; - public TPerson() { } - public TPerson(String name, String sex, String status, String idtype, String idno, String country, String nation, String email, String tel, String mobile, String addr, String zipcode, String lastsaved, String thirdUniqueIdenty) { + public TPerson(String name, String sex, String status, String idtype, String idno, String country, String nation, String email, String tel, String mobile, String addr, String zipcode, String lastsaved) { this.name = name; this.sex = sex; this.status = status; @@ -76,9 +71,10 @@ public class TPerson { this.addr = addr; this.zipcode = zipcode; this.lastsaved = lastsaved; - this.thirdUniqueIdenty = thirdUniqueIdenty; } + + public String getUserid() { return userid; } @@ -190,12 +186,4 @@ public class TPerson { public void setLastsaved(String lastsaved) { this.lastsaved = lastsaved; } - - public String getThirdUniqueIdenty() { - return thirdUniqueIdenty; - } - - public void setThirdUniqueIdenty(String thirdUniqueIdenty) { - this.thirdUniqueIdenty = thirdUniqueIdenty; - } } 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 d8251487..73a8126a 100644 --- a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java +++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java @@ -18,6 +18,15 @@ public class TPersonIdentity { @JoinColumn(name = "USERID") private TPerson person; //绑定的系统用户 + public TPersonIdentity() { + } + + public TPersonIdentity(String thirdUserid, String thirdSyscode, TPerson person) { + this.thirdUserid = thirdUserid; + this.thirdSyscode = thirdSyscode; + this.person = person; + } + public String getThirdUserid() { return thirdUserid; } diff --git a/src/main/java/com/supwisdom/dlpay/exception/RequestParamCheckException.java b/src/main/java/com/supwisdom/dlpay/exception/RequestParamCheckException.java new file mode 100644 index 00000000..328a08d3 --- /dev/null +++ b/src/main/java/com/supwisdom/dlpay/exception/RequestParamCheckException.java @@ -0,0 +1,14 @@ +package com.supwisdom.dlpay.exception; + +public class RequestParamCheckException extends Exception { + private int errCode; + + public RequestParamCheckException(int errCode, String message) { + super(String.format("Req-%d,%s", errCode, message)); + this.errCode = errCode; + } + + public int getErrCode() { + return errCode; + } +} diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java b/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java index 23c71724..af90257c 100644 --- a/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java +++ b/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java @@ -76,4 +76,6 @@ public interface SystemUtilService { /********************** 获取【系统参数】【业务参数】通用方法 **********************/ + String getSubsystemSignKey(String syscode); + } diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java index c1d9971c..80fad1f4 100644 --- a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java +++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java @@ -234,4 +234,10 @@ public class SystemUtilServiceImpl implements SystemUtilService { return null; } + @Override + public String getSubsystemSignKey(String syscode){ + // fixme: 验证数据无误性签名秘钥 + return ""; + } + } diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java index 8e4e55d1..7ea105c5 100644 --- a/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java +++ b/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java @@ -34,33 +34,6 @@ public class HmacUtil { return result; } - /** - * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串 - * - * @param params 需要排序并参与字符拼接的参数组 - * @return 拼接后字符串 - */ - public static String createLinkString(Map params) { - - List keys = new ArrayList(params.keySet()); - Collections.sort(keys); - - String prestr = ""; - - for (int i = 0; i < keys.size(); i++) { - String key = keys.get(i); - String value = params.get(key); - - if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符 - prestr = prestr + key + "=" + value; - } else { - prestr = prestr + key + "=" + value + "&"; - } - } - - return prestr; - } - private static String HMACSHAX(String data, String key, String alg) { String algorithm = ""; if ("SHA1".equals(alg)) { @@ -134,7 +107,7 @@ public class HmacUtil { mapValue.put("outtradeno", refno); mapValue.put("yktshopid", "2"); mapValue.put("shopid", "68512084"); - String signstr = createLinkString(HmacUtil.paraFilter(mapValue)); + String signstr = StringUtil.createLinkString(HmacUtil.paraFilter(mapValue)); String sign = HmacUtil.HMACSHA1(signstr, "adc4ac6822fd462780f878b86cb94688"); System.out.println("{\"tradeaccount\":\"10000097\",\"tradename\":\"在线点餐\",\"tradeamount\":\"1\"," + "\"paidamount\": \"1\",\"outtradeno\":\"" + refno + "\",\"yktshopid\": \"2\",\"shopid\":\"68512084\",\"sign\": \"" + sign + "\"}"); diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java index c3ff38a8..9ca18000 100644 --- a/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java +++ b/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java @@ -1,6 +1,8 @@ package com.supwisdom.dlpay.framework.util; -import java.util.List; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class StringUtil { /** @@ -31,4 +33,102 @@ public class StringUtil { return str1 == null ? str2 == null : str1.equals(str2); } + /** + * 手机号验证 + * + * @param str + * @return + */ + public static boolean isMobile(String str) { + Pattern p = Pattern.compile("^1[0-9]{10}$"); // 验证手机号 + Matcher m = p.matcher(str); + return m.matches(); + } + + /** + * 邮箱格式验证 + */ + public static boolean isEmail(String email) { + boolean ret = true; + Pattern pattern = Pattern.compile("^([a-zA-Z0-9]+[_|\\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\\.]?)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,3}$"); + final Matcher mat = pattern.matcher(email); + if (!mat.find()) { + ret = false; + } + return ret; + } + + /** + * 身份证格式验证 + * + * @param str + * @return + */ + public static boolean isIdentity(String str) { + // 中国公民身份证格式:长度为15或18位,最后一位可以为字母 + Pattern pattern = Pattern.compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])"); + final Matcher m = pattern.matcher(str); + return m.matches(); + } + + /** + * 除去数组中的空值和签名参数 + * + * @param sArray 签名参数组 + * @return 去掉空值与签名参数后的新签名参数组 + */ + public static Map paraFilter(Map sArray) { + Map result = new HashMap(); + if (sArray == null || sArray.size() <= 0) { + return result; + } + for (String key : sArray.keySet()) { + String value = sArray.get(key); + if (null == value || "".equals(value.trim()) || "null".equalsIgnoreCase(value.trim()) || key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("sign_type")) { + continue; + } + result.put(key, value); + } + return result; + } + + /** + * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串 + * + * @param params 需要排序并参与字符拼接的参数组 + * @return 拼接后字符串 + */ + public static String createLinkString(Map params) { + + List keys = new ArrayList(params.keySet()); + Collections.sort(keys); + + String prestr = ""; + + for (int i = 0; i < keys.size(); i++) { + String key = keys.get(i); + String value = params.get(key); + + if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符 + prestr = prestr + key + "=" + value; + } else { + prestr = prestr + key + "=" + value + "&"; + } + } + + return prestr; + } + + public static boolean isCharAndNum(String inputStr) { + Pattern p = Pattern.compile("\\w+"); + Matcher m = p.matcher(inputStr); + if (m.matches()) { + // 除字母和数字外还包含其它字符 + return false; + } else { + return true; + } + } + + } diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java index d3e9b114..07e4aafd 100644 --- a/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java +++ b/src/main/java/com/supwisdom/dlpay/framework/util/SysparaUtil.java @@ -10,7 +10,9 @@ public class SysparaUtil { public static final String SYSPARA_VALUETYPE_STRING = "string"; //字符串 - public static final int SYSPARAID_NO1 = 1; //paraid=1 + public static final int SYSPARAID_NO1 = 1; //系统默认最大余额限制的ID public static final int SYSPARAID_NO2 = 2; //paraid=2 + public static final double SYSPARA_NO1_DEFAULT = 10000.0; // 系统默认最大余额限制 + } diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java index 6c97c509..13062efd 100644 --- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java +++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java @@ -84,4 +84,25 @@ public class TradeErrorCode { * */ public static final int LOCK_READ_TIMEOUT = 10015; + + /** + * 请求参数错误 + * */ + public static final int REQUEST_PARAM_ERROR = 20000; + + /** + * 请求参数错误签名错误 + * */ + public static final int REQUEST_SIGN_ERROR = 20001; + + /** + * 注册用户已经存在 + */ + public static final int REGISTER_USER_EXIST = 20003; + + + //================= 业务处理错误 ==================// + + public static final int BUSINESS_DEAL_ERROR = 30000; //业务处理错误 + } diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java b/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java index fefbc517..38695bc0 100644 --- a/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java +++ b/src/main/java/com/supwisdom/dlpay/framework/util/XmlUtils.java @@ -83,6 +83,7 @@ public class XmlUtils { } return null; } + public static Map parseXml(String xml) throws Exception { Map map = new HashMap(); Document document = DocumentHelper.parseText(xml); @@ -92,53 +93,5 @@ public class XmlUtils { map.put(e.getName(), e.getText()); return map; } - /** - * 除去数组中的空值和签名参数 - * - * @param sArray 签名参数组 - * @return 去掉空值与签名参数后的新签名参数组 - */ - public static Map paraFilter(Map sArray) { - Map result = new HashMap(); - if (sArray == null || sArray.size() <= 0) { - return result; - } - for (String key : sArray.keySet()) { - String value = sArray.get(key); - if (value == null || "".equals(value) || "sign".equalsIgnoreCase(key) - || "sign_type".equalsIgnoreCase(key)) { - continue; - } - result.put(key, value); - } - - return result; - } - - /** - * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串 - * - * @param params 需要排序并参与字符拼接的参数组 - * @return 拼接后字符串 - */ - public static String createLinkString(Map params) { - List keys = new ArrayList(params.keySet()); - Collections.sort(keys); - - String prestr = ""; - - for (int i = 0; i < keys.size(); i++) { - String key = keys.get(i); - String value = params.get(key); - - if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符 - prestr = prestr + key + "=" + value; - } else { - prestr = prestr + key + "=" + value + "&"; - } - } - - return prestr; - } } diff --git a/src/main/java/com/supwisdom/dlpay/util/ConstUtil.java b/src/main/java/com/supwisdom/dlpay/util/ConstUtil.java deleted file mode 100644 index 4a54efa0..00000000 --- a/src/main/java/com/supwisdom/dlpay/util/ConstUtil.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.supwisdom.dlpay.util; - -/** - * Created by shuwei on 2019/4/9. - */ -public class ConstUtil { - public static final String STATUS_INIT = "init"; - public static final String STATUS_SUCCESS = "success"; - public static final String STATUS_FAIL = "fail"; - - public static final String ENABLE_YES = "yes"; - - public static final String ENABLE_NO = "no"; - -} diff --git a/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java b/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java new file mode 100644 index 00000000..7342e18f --- /dev/null +++ b/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java @@ -0,0 +1,22 @@ +package com.supwisdom.dlpay.util; + +/** + * Created by shuwei on 2019/4/9. + */ +public class ConstantUtil { + + public static final String ENABLE_YES = "yes"; + public static final String ENABLE_NO = "no"; + + public static final String SEX_MALE = "male"; + public static final String SEX_FEMALE = "female"; + + public static final String IDTYPE_IDENTITY = "1"; //身份证 + public static final String IDTYPE_PASSPORT = "2"; //护照 + public static final String IDTYPE_DRIVING_LICENSE = "3"; //驾照 + public static final String IDTYPE_HKM_PASS = "4"; //港澳通行证 + public static final String IDTYPE_STUEMPNO = "5"; //学工号 + public static final String IDTYPE_OTHER = "9"; //其他 + public static final String[] IDTYPE_DICTS = {"1", "2", "3", "4", "5", "9"}; //联动 + +} diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt b/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt index e5844c41..2b3b6eef 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt @@ -41,7 +41,7 @@ class CallService { params.put("timestamp", time) params.put("sign_method", "HMAC"); params.put("limitflag", "off") //是否判断消费限额,on-判断;off-不判断。默认on(判断限额)。为空或不为off都是on; - var signstr = HmacUtil.createLinkString(HmacUtil.paraFilter(params)) + var signstr = StringUtil.createLinkString(HmacUtil.paraFilter(params)) val sign = HmacUtil.HMACSHA1(signstr, appkey) signstr = "$signstr&sign=$sign&sourcetype=food" val c = Client.create() 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 new file mode 100644 index 00000000..9fd9e5d4 --- /dev/null +++ b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt @@ -0,0 +1,69 @@ +package com.supwisdom.dlpay.api.bean + +import com.supwisdom.dlpay.exception.RequestParamCheckException +import com.supwisdom.dlpay.framework.util.MD5 +import com.supwisdom.dlpay.framework.util.StringUtil +import com.supwisdom.dlpay.framework.util.TradeErrorCode +import com.supwisdom.dlpay.util.ConstantUtil + +open class APIRequestParam { + open val param_map = mutableMapOf() + + open fun checkSign(key: String): Boolean { + val sign = param_map["sign"] + if (StringUtil.isEmpty(sign)) return false //未签名 + + //判断签名 + val signdata = StringUtil.createLinkString(StringUtil.paraFilter(param_map)) + val md5Sign = MD5.encodeByMD5(signdata + key) //默认MD5 + if (sign.equals(md5Sign, true)) { + return true + } + return false + } +} + +class OpenUserParam : APIRequestParam() { + var syscode: String = "" //必传 + var uid: String = "" //必传 + var name: String = "" //必传 + var sex: String? = "" + var idtype: String = "" //必传 + var idno: String = "" //必传 + var mobile: String? = "" + var tel: String? = "" + var email: String? = "" + var address: String? = "" + var zipcode: String? = "" + var sign: String = "" //必传 + + fun checkParam(): Boolean { + if (StringUtil.isEmpty(syscode)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "子系统注册代码不能为空") + if (StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空") + if (StringUtil.isEmpty(name)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "姓名不能为空") + if (!StringUtil.isEmpty(sex) && !ConstantUtil.SEX_MALE.equals(sex, true) && !ConstantUtil.SEX_FEMALE.equals(sex, true)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "性别非法[male|female]") + if (StringUtil.isEmpty(idtype) || !ConstantUtil.IDTYPE_DICTS.contains(idtype)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件类型非法") + if (StringUtil.isEmpty(idno) || !StringUtil.isCharAndNum(idno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件号不能为空,且仅支持数字和字母") + if (ConstantUtil.IDTYPE_IDENTITY == idtype && !StringUtil.isIdentity(idno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "身份证格式错误") + if (!StringUtil.isEmpty(mobile) && !StringUtil.isMobile(mobile)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "手机号格式错误") + if (!StringUtil.isEmpty(email) && !StringUtil.isEmail(email)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "邮箱格式错误") + + param_map.plus(mapOf("syscode" to syscode, "uid" to uid, "name" to name, "sex" to sex, "idtype" to idtype, "idno" to idno, "mobile" to mobile, "tel" to tel, "email" to email, "address" to address, "zipcode" to zipcode, "sign" to sign)) + return true + } +} + +class QueryUserParam : APIRequestParam() { + var syscode: String = "" //必传 + var userid: String? = "" // 用户ID二选一 (两者都传取userid) + var uid: String? = "" // 用户ID二选一 + var sign: String = "" //必传 + + fun checkParam(): Boolean { + if (StringUtil.isEmpty(syscode)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "子系统注册代码不能为空") + if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空") + + param_map.plus(mapOf("syscode" to syscode, "userid" to userid, "uid" to uid, "sign" to sign)) + return true + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt similarity index 97% rename from src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_service.kt rename to src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt index f83569b9..66cdb7d1 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_service.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt @@ -10,7 +10,7 @@ import com.supwisdom.dlpay.api.service.PersonService import com.supwisdom.dlpay.exception.TransactionException import com.supwisdom.dlpay.framework.ResponseBodyBuilder import com.supwisdom.dlpay.framework.util.* -import com.supwisdom.dlpay.util.ConstUtil +import com.supwisdom.dlpay.util.ConstantUtil import com.supwisdom.dlpay.util.PaytypeUtil import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.ResponseEntity @@ -76,7 +76,7 @@ class ConsumeController { //一卡通支付款 112240 return try { val paytype = paytypeService.getByPaytype(PaytypeUtil.YKTPAY) - if (paytype == null || ConstUtil.ENABLE_YES != paytype.enable) { + if (paytype == null || ConstantUtil.ENABLE_YES != paytype.enable) { ResponseEntity.ok(ResponseBodyBuilder.create() .fail(1, "支付方式未开启")) } @@ -129,7 +129,7 @@ class ConsumeController { val dtl = personBalancePayService.wip(refno) val person = personService.getPersonByUserid(dtl.userid) val code = CallService.callYktPay(paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.YKTPAY), - dtl, DateUtil.getNow(), person.thirdUniqueIdenty, yktshopid, devphyid) + dtl, DateUtil.getNow(), "", yktshopid, devphyid) if (code.retcode == "0") { PersonTransBuilder.newBuilder(accountUtilServcie) .done(dtl.refno, TradeDict.DTL_STATUS_SUCCESS, personBalancePayService) @@ -164,7 +164,7 @@ class ConsumeController { wechattype: String, realip: String?, qrcode: String?, openid: String?): ResponseEntity { return try { val paytype = paytypeService.getByPaytype(PaytypeUtil.WECHAT) - if (paytype == null || ConstUtil.ENABLE_YES != paytype.enable) { + if (paytype == null || ConstantUtil.ENABLE_YES != paytype.enable) { ResponseEntity.ok(ResponseBodyBuilder.create() .fail(1, "支付方式未开启")) } diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_controller.kt index d0fabc1d..408cc3db 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_controller.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_controller.kt @@ -5,6 +5,7 @@ import com.supwisdom.dlpay.api.service.AccountUtilServcie import com.supwisdom.dlpay.api.service.PaytypeService import com.supwisdom.dlpay.api.service.PersonBalancePayService import com.supwisdom.dlpay.framework.util.MD5 +import com.supwisdom.dlpay.framework.util.StringUtil import com.supwisdom.dlpay.framework.util.TradeDict import com.supwisdom.dlpay.framework.util.XmlUtils import com.supwisdom.dlpay.util.PaytypeUtil @@ -62,9 +63,9 @@ class NotifyController { logger.error("签名错误") return "" } - map = XmlUtils.paraFilter(map) + map = StringUtil.paraFilter(map) //TODO 校验签名 - var signStr = XmlUtils.createLinkString(map) + var signStr = StringUtil.createLinkString(map) val config = paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.WECHAT) if (config["appkey"].isNullOrEmpty()) { logger.error("签名错误") diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt index 998597ce..69f081e1 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt @@ -1,11 +1,101 @@ package com.supwisdom.dlpay.api.controller +import com.supwisdom.dlpay.api.bean.OpenUserParam +import com.supwisdom.dlpay.api.bean.QueryUserParam +import com.supwisdom.dlpay.api.service.UserService +import com.supwisdom.dlpay.exception.RequestParamCheckException +import com.supwisdom.dlpay.exception.TransactionException +import com.supwisdom.dlpay.framework.ResponseBodyBuilder +import com.supwisdom.dlpay.framework.service.SystemUtilService +import com.supwisdom.dlpay.framework.util.TradeErrorCode +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/api/user") class UserAPIController { + @Autowired + private lateinit var useService: UserService + @Autowired + private lateinit var systemUtilService: SystemUtilService + + @PostMapping("/open") + fun openAccount(@RequestBody request: OpenUserParam): ResponseEntity { + return try { + if (request.checkParam() && request.checkSign(systemUtilService.getSubsystemSignKey(request.syscode))) { + ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误")) + } + useService.findByThirdUniqueIdenty(request.uid, request.syscode).let { + if (null != it) { + ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.REGISTER_USER_EXIST, "改用户唯一号已经注册")) + } + + useService.registerUser(request).let { + if (null != it) { + ResponseEntity.ok(ResponseBodyBuilder.create() + .data("userid", it.userid) + .data("uid", request.uid) + .success()) + } + + ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "用户注册失败")) + } + } + } catch (ex: RequestParamCheckException) { + ResponseEntity.ok(ResponseBodyBuilder.create() + .requestException(ex, "请求参数错误")) + } catch (et: TransactionException) { + ResponseEntity.ok(ResponseBodyBuilder.create() + .transException(et, "业务处理错误")) + } + } + + @PostMapping("/query") + fun queryAccount(@RequestBody request: QueryUserParam): ResponseEntity { + return try { + if (request.checkParam() && request.checkSign(systemUtilService.getSubsystemSignKey(request.syscode))) { + ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误")) + } + + useService.findByUseridOrThirdUniqueIdenty(request.userid, request.uid, request.syscode).let { + if (null != it) { + val account = useService.findAccountByUserid(it.userid, null) + ResponseEntity.ok(ResponseBodyBuilder.create() + .data("userid", it.userid) + .data("name", it.name) + .data("idtype", it.idtype) + .data("idno", it.idno) + .data("status", it.status) + .data("balance", account.let { + if (null == it) { + 0.0 + } else { + it.availbal + } + }) + .data("points", 0) //积分 + .success()) + } + + ResponseEntity.ok(ResponseBodyBuilder.create() + .fail(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户不存在")) + } + } catch (ex: RequestParamCheckException) { + ResponseEntity.ok(ResponseBodyBuilder.create() + .requestException(ex, "请求参数错误")) + } catch (et: TransactionException) { + ResponseEntity.ok(ResponseBodyBuilder.create() + .transException(et, "业务处理错误")) + } + } } \ No newline at end of file diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/person_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/person_service_impl.kt index 5ba6a54a..6d05a8d2 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/person_service_impl.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/person_service_impl.kt @@ -15,7 +15,7 @@ class PersonServiceImpl : PersonService { lateinit var personDao: PersonDao override fun getPersonByThirdUniqueIdenty(thirdUniqueIdenty: String): TPerson { - return personDao.findByThirdUniqueIdenty(thirdUniqueIdenty) + return personDao.findByUserid(thirdUniqueIdenty) } override fun getPersonByUserid(userid: String): TPerson { diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt new file mode 100644 index 00000000..77c687f5 --- /dev/null +++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt @@ -0,0 +1,110 @@ +package com.supwisdom.dlpay.api.service.impl + +import com.supwisdom.dlpay.api.bean.OpenUserParam +import com.supwisdom.dlpay.api.dao.AccountDao +import com.supwisdom.dlpay.api.dao.PersonDao +import com.supwisdom.dlpay.api.dao.PersonIdentityDao +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.framework.service.SystemUtilService +import com.supwisdom.dlpay.api.service.UserService +import com.supwisdom.dlpay.exception.TransactionProcessException +import com.supwisdom.dlpay.framework.util.* +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Service +import java.net.URLDecoder + +/** + * Created by shuwei on 2019/4/15. + */ +@Service +class UserServiceImpl : UserService { + @Autowired + private lateinit var personDao: PersonDao + @Autowired + private lateinit var accountDao: AccountDao + @Autowired + private lateinit var personIdentityDao: PersonIdentityDao + @Autowired + private lateinit var systemUtilService: SystemUtilService + + override fun registerUser(param: OpenUserParam): TPerson { + val username = URLDecoder.decode(param.name, Charsets.UTF_8.toString()) + var person = personDao.findByIdentity(param.idtype, param.idno) + if (null != person && username != person.name) + throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "证件指定用户与请求的用户名不匹配") + + val systemdatetime = systemUtilService.sysdatetime + if (null == person) { + person = personDao.save(TPerson().apply { + name = username + sex = param.sex ?: null + status = TradeDict.STATUS_NORMAL + idtype = param.idtype + idno = param.idno + email = param.email ?: null + tel = param.tel ?: null + mobile = param.mobile ?: null + addr = param.address?.let { URLDecoder.decode(param.address, Charsets.UTF_8.toString()) } + zipcode = param.zipcode ?: null + lastsaved = systemdatetime.hostdatetime + }) + } + + if (accountDao.findByUseridAndSubjno(person.userid, Subject.SUBJNO_PERSONAL_DEPOSIT) == null) { + //开户 + TAccount().apply { + accname = person.name + subjno = Subject.SUBJNO_PERSONAL_DEPOSIT + userid = person.userid + status = person.status + balance = 0.0 + availbal = 0.0 + frozebal = 0.0 + lowfreeFlag = false + lowfreeLimit = lowfreeLimit + daylimit = daylimit + maxbal = systemUtilService.getSysparaValueAsDouble(SysparaUtil.SYSPARAID_NO1, SysparaUtil.SYSPARA_NO1_DEFAULT) + lasttransdate = systemdatetime.hostdate + lastdayTransamt = 0.0 + lastdayDpsamt = 0.0 + opendate = systemdatetime.hostdate + tac = this.generateTac() + accountDao.save(this) + } + } + personIdentityDao.save(TPersonIdentity().apply { + thirdUserid = param.uid + thirdSyscode = param.syscode + person = person + }) //保存绑定关系 + + return person + } + + override fun findByThirdUniqueIdenty(thirdUniqueIdenty: String, syscode: String): TPerson? { + return personIdentityDao.getPersonIdentityById(thirdUniqueIdenty, syscode)?.let { it.person } + } + + override fun findByUseridOrThirdUniqueIdenty(userid: String?, thirdUniqueIdenty: String?, syscode: String): TPerson? { + return if (!StringUtil.isEmpty(userid)) { + personDao.findByUserid(userid) + } else { + personIdentityDao.getPersonIdentityById(thirdUniqueIdenty, syscode)?.let { it.person } + } + } + + override fun findPersonByUserid(userid: String): TPerson? { + return personDao.findByUserid(userid) + } + + override fun findAccountByUserid(userid: String, subjno: String?): TAccount? { + return if (!StringUtil.isEmpty(subjno)) { + accountDao.findByUseridAndSubjno(userid, subjno) + } else { + accountDao.findByUseridAndSubjno(userid, Subject.SUBJNO_PERSONAL_DEPOSIT) + } + } + +} \ No newline at end of file diff --git a/src/main/kotlin/com/supwisdom/dlpay/user/service/user_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt similarity index 59% rename from src/main/kotlin/com/supwisdom/dlpay/user/service/user_service.kt rename to src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt index 6bac9c97..f01258d9 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/user/service/user_service.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt @@ -1,5 +1,6 @@ -package com.supwisdom.dlpay.user.service +package com.supwisdom.dlpay.api.service +import com.supwisdom.dlpay.api.bean.OpenUserParam import com.supwisdom.dlpay.api.domain.TAccount import com.supwisdom.dlpay.api.domain.TPerson import org.springframework.transaction.annotation.Propagation @@ -10,14 +11,19 @@ import org.springframework.transaction.annotation.Transactional */ interface UserService { @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class)) - fun save(person: TPerson): TPerson + fun registerUser(param: OpenUserParam): TPerson @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true) - fun findByThirdUniqueIdenty(thirdUniqueIdenty: String): TPerson? + fun findByThirdUniqueIdenty(thirdUniqueIdenty: String, syscode: String): TPerson? + + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true) + fun findByUseridOrThirdUniqueIdenty(userid: String?, thirdUniqueIdenty: String?, syscode: String): TPerson? + @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true) fun findPersonByUserid(userid: String): TPerson? @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true) - fun findAccountByUserid(userid: String): TAccount? + fun findAccountByUserid(userid: String, subjno:String?): TAccount? + } \ No newline at end of file diff --git a/src/main/kotlin/com/supwisdom/dlpay/app/bean/app_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/app/bean/app_request_param.kt new file mode 100644 index 00000000..d8572811 --- /dev/null +++ b/src/main/kotlin/com/supwisdom/dlpay/app/bean/app_request_param.kt @@ -0,0 +1,2 @@ +package com.supwisdom.dlpay.app.bean + diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt index e5ed5fe1..894ad77e 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt @@ -1,13 +1,18 @@ package com.supwisdom.dlpay.framework +import com.google.gson.Gson +import com.supwisdom.dlpay.exception.RequestParamCheckException import com.supwisdom.dlpay.exception.TransactionCheckException import com.supwisdom.dlpay.exception.TransactionException import com.supwisdom.dlpay.framework.util.TradeErrorCode +import org.apache.log4j.Logger + class ResponseBodyBuilder private constructor() { companion object { private const val INVALIDE_RETCODE = -0x7FFFFFFF private val RESERVED_KEY = setOf("retcode", "retmsg", "exception") + private val LOGGER = Logger.getLogger(ResponseBodyBuilder::class.java) fun create() = ResponseBodyBuilder() } @@ -51,6 +56,12 @@ class ResponseBodyBuilder private constructor() { return build() } + fun requestException(exception: RequestParamCheckException, msg: String): Map { + data("exception", exception.message!!) + result(exception.errCode, "$msg - [${exception.message}]") + return build() + } + fun data(name: String, value: Any): ResponseBodyBuilder { if (name in RESERVED_KEY) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "返回值 <$name> 为保留值,不能使用") @@ -62,6 +73,8 @@ class ResponseBodyBuilder private constructor() { private fun build(): Map { if (retCode == INVALIDE_RETCODE) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未设置返回码!") + } else if (retCode != 0) { + LOGGER.error(Gson().toJson(this.respData)) } return this.respData.plus(mapOf("retcode" to retCode, "retmsg" to retMsg)) } diff --git a/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt b/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt index 4b8388a6..749dd3a7 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/shop/bean/shop_param.kt @@ -10,12 +10,4 @@ class ShopParam { var mobile: String = "" var contactman: String = "" var uniqueId: String? = "" -} - -class UserParam { - var uniqueId: String? = "" - var userid: String? = "" - var name: String = "" - var addr: String? = "" - var mobile: String? = "" } \ No newline at end of file diff --git a/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt deleted file mode 100644 index 47cb7178..00000000 --- a/src/main/kotlin/com/supwisdom/dlpay/user/controller/user_controller.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.supwisdom.dlpay.user.controller - -import com.supwisdom.dlpay.api.domain.TPerson -import com.supwisdom.dlpay.framework.ResponseBodyBuilder -import com.supwisdom.dlpay.framework.util.TradeDict -import com.supwisdom.dlpay.shop.bean.UserParam -import com.supwisdom.dlpay.user.service.UserService -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.http.ResponseEntity -import org.springframework.web.bind.annotation.* - -/** - * Created by shuwei on 2019/4/15. - */ -@RestController -@RequestMapping("/api/user") -class UserController { - @Autowired - private lateinit var useService: UserService - - @PostMapping("/open") - fun openAccount(@RequestBody request: UserParam): ResponseEntity { - if (!request.uniqueId.isNullOrEmpty()) { - val person = useService.findByThirdUniqueIdenty(request.uniqueId!!) - if (person != null) { - return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(1, "[uniqueId]该值已存在")) - } - } - if (request.name.isEmpty()) { - return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(1, "[name]不能为空")) - } - val person = TPerson() - person.addr = request.addr - person.name = request.name - person.mobile = request.mobile - person.status = TradeDict.STATUS_NORMAL - person.thirdUniqueIdenty = request.uniqueId - useService.save(person) - return ResponseEntity.ok(ResponseBodyBuilder.create() - .data("userid", person.userid) - .success()) - } - - @PostMapping("/get") - fun queryShop(@RequestBody request: UserParam): ResponseEntity { - if (!request.uniqueId.isNullOrEmpty()) { - val person = useService.findByThirdUniqueIdenty(request.uniqueId!!) - if (person != null) { - val account = useService.findAccountByUserid(person.userid) - return ResponseEntity.ok(ResponseBodyBuilder.create() - .data("person", person) - .data("account", account!!) - .success()) - } - } else if (!request.userid.isNullOrEmpty()) { - val person = useService.findPersonByUserid(request.userid!!) - if (person != null) { - val account = useService.findAccountByUserid(person.userid) - return ResponseEntity.ok(ResponseBodyBuilder.create() - .data("person", person) - .data("account", account!!) - .success()) - } - } - return ResponseEntity.ok(ResponseBodyBuilder.create() - .fail(1, "数据不存在")) - } -} \ No newline at end of file diff --git a/src/main/kotlin/com/supwisdom/dlpay/user/service/impl/user_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/user/service/impl/user_service_impl.kt deleted file mode 100644 index cb57ca13..00000000 --- a/src/main/kotlin/com/supwisdom/dlpay/user/service/impl/user_service_impl.kt +++ /dev/null @@ -1,57 +0,0 @@ -package com.supwisdom.dlpay.user.service.impl - -import com.supwisdom.dlpay.api.dao.AccountDao -import com.supwisdom.dlpay.api.dao.PersonDao -import com.supwisdom.dlpay.api.domain.TAccount -import com.supwisdom.dlpay.api.domain.TPerson -import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.util.Subject -import com.supwisdom.dlpay.user.service.UserService -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.stereotype.Service - -/** - * Created by shuwei on 2019/4/15. - */ -@Service -class UserServiceImpl : UserService { - @Autowired - private lateinit var personDao: PersonDao - @Autowired - private lateinit var accountDao: AccountDao - @Autowired - private lateinit var systemUtilService: SystemUtilService - - override fun save(person: TPerson): TPerson { - //TODO check tac - personDao.save(person) - if (accountDao.findByUserid(person.userid) == null) { - val systemdatetime = systemUtilService.sysdatetime - TAccount().apply { - accname = person.name - opendate = systemdatetime.hostdate - userid = person.userid - status = person.status - subjno = Subject.SUBJNO_PERSONAL_DEPOSIT - balance = 0.0 - availbal = 0.0 - frozebal = 0.0 - lowfreeFlag = false - accountDao.save(this) - } - } - return person - } - - override fun findByThirdUniqueIdenty(thirdUniqueIdenty: String): TPerson? { - return personDao.findByThirdUniqueIdenty(thirdUniqueIdenty) - } - - override fun findPersonByUserid(userid: String): TPerson? { - return personDao.getOne(userid) - } - - override fun findAccountByUserid(userid: String): TAccount? { - return accountDao.findByUserid(userid) - } -} \ No newline at end of file diff --git a/src/test/kotlin/com/supwisdom/dlpay/controller/UserControllerTest.kt b/src/test/kotlin/com/supwisdom/dlpay/controller/UserControllerTest.kt index 41479741..44724a30 100644 --- a/src/test/kotlin/com/supwisdom/dlpay/controller/UserControllerTest.kt +++ b/src/test/kotlin/com/supwisdom/dlpay/controller/UserControllerTest.kt @@ -2,9 +2,10 @@ package com.supwisdom.dlpay.controller import com.google.gson.Gson import com.supwisdom.dlpay.MvcBaseTest +import com.supwisdom.dlpay.api.bean.OpenUserParam +import com.supwisdom.dlpay.api.bean.QueryUserParam import com.supwisdom.dlpay.api.domain.TAccount import com.supwisdom.dlpay.api.domain.TPerson -import com.supwisdom.dlpay.shop.bean.UserParam import org.junit.Assert import org.junit.Test import org.springframework.http.MediaType @@ -24,11 +25,12 @@ class UserControllerTest : MvcBaseTest() { @Test fun open() { - val userParam = UserParam() - userParam.uniqueId = ""//random req + val userParam = OpenUserParam() + userParam.syscode = "ykt" + userParam.uid = ""//random req userParam.name = "测试名称" - val ret = mvc.perform(MockMvcRequestBuilders.post("/user/open").content(gson.toJson(userParam)) + val ret = mvc.perform(MockMvcRequestBuilders.post("/api/user/open").content(gson.toJson(userParam)) .contentType(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.status().isOk) .andDo(MockMvcResultHandlers.print()) @@ -44,11 +46,12 @@ class UserControllerTest : MvcBaseTest() { @Test fun get() { - val userParam = UserParam() - userParam.uniqueId = "testuseruniqueId"//测试用 - userParam.name = "测试名称:testuseruniqueId" + + val userParam = QueryUserParam() + userParam.syscode = "ykt" + userParam.uid = "testuseruniqueId"//测试用 val gson = Gson() - val ret = mvc.perform(MockMvcRequestBuilders.post("/user/open").content(gson.toJson(userParam)) + val ret = mvc.perform(MockMvcRequestBuilders.post("/api/user/open").content(gson.toJson(userParam)) .contentType(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.status().isOk) .andDo(MockMvcResultHandlers.print()) @@ -60,7 +63,7 @@ class UserControllerTest : MvcBaseTest() { Assert.assertNotNull(retBeanOpen.userid) userParam.userid = retBeanOpen.userid - val retGet = mvc.perform(MockMvcRequestBuilders.get("/user/get").content(gson.toJson(userParam)) + val retGet = mvc.perform(MockMvcRequestBuilders.get("/api/user/query").content(gson.toJson(userParam)) .contentType(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.status().isOk) .andDo(MockMvcResultHandlers.print()) -- 2.17.1