Просмотр исходного кода

添加上传银行账户信息页面

xuexb 6 лет назад
Родитель
Сommit
b1f931a25d

+ 1 - 1
mooctest-user-server/Dockerfile

@@ -1,6 +1,6 @@
 FROM openjdk:alpine
 RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main/" > /etc/apk/repositories
-EXPOSE 80
+EXPOSE 8081
 ADD target/mooctest-user-server.jar /root
 WORKDIR /root
 ENTRYPOINT ["java", "-jar", "-Djava.security.egd=file:/dev/./urandom", "mooctest-user-server.jar"]

+ 17 - 1
mooctest-user-server/pom.xml

@@ -234,13 +234,29 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-zookeeper-config</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itextpdf</artifactId>
+            <version>5.5.10</version>
+        </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itext-asian</artifactId>
+            <version>5.2.0</version>
+        </dependency>
+        <!--aliyun -->
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+            <version>2.8.2</version>
+        </dependency>
     </dependencies>
     <dependencyManagement>
         <dependencies>
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-dependencies</artifactId>
-                <version>Brixton.RELEASE</version>
+                <version>Brixton.SR7</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>

+ 18 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/BankAccountInfoDao.java

@@ -0,0 +1,18 @@
+package cn.iselab.mooctest.user.mapper;
+
+import cn.iselab.mooctest.user.model.BankAccountInfo;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @Description: 作用描述
+ * @Author: xuexb
+ * @CreateDate: 19-2-25$ 下午3:26$
+ */
+@Transactional
+public interface BankAccountInfoDao extends CrudRepository<BankAccountInfo, Long>, JpaSpecificationExecutor<BankAccountInfo> {
+    BankAccountInfo findBankAccountInfoByUserId(Long userId);
+}

+ 41 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/BankAccountInfo.java

@@ -0,0 +1,41 @@
+package cn.iselab.mooctest.user.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+
+/**
+ * @Description: 作用描述
+ * @Author: xuexb
+ * @CreateDate: 19-2-25$ 下午3:20$
+ */
+@Data
+@Entity
+@Table(name = "bank_account_info")
+public class BankAccountInfo {
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    @Column(name = "user_id")
+    private Long userId;
+
+    @Column(name = "real_name")
+    private String realName;
+
+    @Column(name = "id_number")
+    private String IDNumber;
+
+    @Column(name = "bank_info")
+    private String bankInfo;
+
+    @Column(name = "bank_card_number")
+    private String bankCardNumber;
+
+    @Column(name = "id_card_front_url")
+    private String IDCardFrontUrl;
+
+    @Column(name = "id_card_back_url")
+    private String IDCardBackUrl;
+}

+ 24 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/util/OSSUtil.java

@@ -0,0 +1,24 @@
+package cn.iselab.mooctest.user.util;
+
+import com.aliyun.oss.OSSClient;
+import org.springframework.beans.factory.annotation.Value;
+
+/**
+ * @Description: 作用描述
+ * @Author: xuexb
+ * @CreateDate: 19-2-24$ 下午11:58$
+ */
+public class OSSUtil {
+    @Value("${oss.endPoint}")
+    private String endPoint;
+    @Value("${oss.accessKeyId}")
+    private String accessKeyId;
+    @Value("${oss.accessKeySecret}")
+    private String accessKeySecret;
+
+    private static OSSClient ossClient;
+
+    public void destory() {
+        ossClient.shutdown();
+    }
+}

+ 51 - 9
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/PageController.java

@@ -1,6 +1,8 @@
 package cn.iselab.mooctest.user.web.ctrl;
 
 import cn.iselab.mooctest.rpc.user.data.UserDTO;
+import cn.iselab.mooctest.rpc.user.data.UserWechatDTO;
+import cn.iselab.mooctest.rpc.user.data.WechatUserInfoDTO;
 import cn.iselab.mooctest.user.constants.ResponseStatus;
 import cn.iselab.mooctest.user.constants.UrlConstants;
 import cn.iselab.mooctest.user.data.Callback;
@@ -13,6 +15,7 @@ import cn.iselab.mooctest.user.util.EncryptionUtil;
 import cn.iselab.mooctest.user.web.data.UserVO;
 import cn.iselab.mooctest.user.web.logic.ThirdPartyLogic;
 import cn.iselab.mooctest.user.web.logic.UserLogic;
+import cn.iselab.mooctest.user.web.logic.WechatLogic;
 import com.sun.org.apache.xpath.internal.operations.Mod;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -41,6 +44,9 @@ public class PageController extends BaseController{
     @Autowired
     ThirdPartyAuthService thirdPartyAuthService;
 
+    @Autowired
+    WechatLogic wechatLogic;
+
     @RequestMapping(value = UrlConstants.PAGE + "login", method = RequestMethod.GET)
     public String login(@RequestParam(value = "redirect", required = false)String redirect, HttpServletRequest request){
 //        System.out.println(System.currentTimeMillis());
@@ -158,14 +164,38 @@ public class PageController extends BaseController{
             return "third_party_bind";
         }
         HttpSession session = request.getSession();
-        session.setAttribute("userId", ((UserDTO)result.getData()).getId());
-        session.setAttribute("userName", ((UserDTO)result.getData()).getEmail());
+        UserDTO user = userLogic.getUserById(((UserThirdParty)result.getData()).getId());
+        session.setAttribute("userId", user.getId());
+        session.setAttribute("userName", user.getEmail());
         String redirectUrl = (String)request.getSession().getAttribute("redirectURL");
         if (redirectUrl==null || redirectUrl.isEmpty())
             redirectUrl = UrlConstants.DFAULT_GOTO;
         return "redirect:"+redirectUrl;
     }
 
+    @RequestMapping(value = UrlConstants.PAGE + "login/wechat", method = RequestMethod.GET)
+    public String loginByWechat(@RequestParam("code")String code, Model model, HttpServletRequest request){
+        System.out.println("wechat_code: " + code);
+        UserWechatDTO userWechatDTO = wechatLogic.getUserByCode(code);
+        if(userWechatDTO.getType()==UserWechatDTO.NEW){
+            model.addAttribute("headImg",userWechatDTO.getUserInfo().getHeadimgurl());
+            model.addAttribute("thirdPartyName",userWechatDTO.getUserInfo().getNickname());
+            model.addAttribute("unionid",userWechatDTO.getUserInfo().getUnionid());
+            model.addAttribute("openid",userWechatDTO.getUserInfo().getOpenid());
+            model.addAttribute("from","wechat");
+            return "third_party_bind";
+        }
+        HttpSession session = request.getSession();
+        session.setAttribute("userId", userWechatDTO.getUser().getId());
+        session.setAttribute("userName", userWechatDTO.getUser().getEmail());
+        String redirectUrl = (String) session.getAttribute("redirectURL");
+        if (redirectUrl==null || redirectUrl.isEmpty())
+            redirectUrl = UrlConstants.DFAULT_GOTO;
+        return "redirect:"+redirectUrl;
+    }
+
+
+
     @RequestMapping(value = UrlConstants.PAGE + "thirdParty/bind", method = RequestMethod.POST)
     public String thirdPartyBind(UserVO userVO, Model model, HttpServletRequest request){
         UserVO user = userVO;
@@ -178,16 +208,28 @@ public class PageController extends BaseController{
             model.addAttribute("thirdPartyId", userVO.getThirdPartyId());
             model.addAttribute("headImg", userVO.getHeadImgUrl());
             model.addAttribute("from", userVO.getFrom());
+            model.addAttribute("openid", userVO.getOpenid());
+            model.addAttribute("unionid", userVO.getUnionid());
             return "third_party_bind";
         }
         UserDTO userToBind = (UserDTO) result.getData();
-        UserThirdParty userThirdParty = new UserThirdParty();
-        userThirdParty.setThirdPartyIdentity(userVO.getThirdPartyId());
-        userThirdParty.setUserId(userToBind.getId());
-        userThirdParty.setType(userVO.getFrom());
-        userThirdParty.setIsDelete(0);
-        System.out.println(userThirdParty.getUserId()+"--"+userThirdParty.getThirdPartyIdentity()+"---"+userThirdParty.getType());
-        thirdPartyAuthService.save(userThirdParty);
+        if(userVO.getFrom()=="wechat"){
+            UserWechatDTO userWechatDTO = new UserWechatDTO();
+            userWechatDTO.setUser(userToBind);
+            WechatUserInfoDTO wechatUserInfoDTO = new WechatUserInfoDTO();
+            wechatUserInfoDTO.setUnionid(userVO.getUnionid());
+            wechatUserInfoDTO.setOpenid(userVO.getOpenid());
+            userWechatDTO.setUserInfo(wechatUserInfoDTO);
+            wechatLogic.setUserWechat(userWechatDTO);
+        }else {
+            UserThirdParty userThirdParty = new UserThirdParty();
+            userThirdParty.setThirdPartyIdentity(userVO.getThirdPartyId());
+            userThirdParty.setUserId(userToBind.getId());
+            userThirdParty.setType(userVO.getFrom());
+            userThirdParty.setIsDelete(0);
+            System.out.println(userThirdParty.getUserId()+"--"+userThirdParty.getThirdPartyIdentity()+"---"+userThirdParty.getType());
+            thirdPartyAuthService.save(userThirdParty);
+        }
         HttpSession session = request.getSession();
         session.setAttribute("userId", ((UserDTO)result.getData()).getId());
         session.setAttribute("userName", ((UserDTO)result.getData()).getEmail());

+ 8 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/TestController.java

@@ -142,6 +142,14 @@ public class TestController extends BaseController{
                 + "client_secret: "+authConfiguration.getGitHubClientSecret();
     }
 
+    @RequestMapping(value = "/test/upload/page", method = RequestMethod.GET)
+    public ModelAndView uploadBankInfo(){
+        return new ModelAndView("upload_card_info");
+    }
 
+    @RequestMapping(value = "/test/upload/bankinfo", method = RequestMethod.POST)
+    public String doUpload(@RequestParam("real_name") String name){
+        return name;
+    }
 
 }

+ 4 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/data/UserVO.java

@@ -25,4 +25,8 @@ public class UserVO extends UserDTO {
    private String headImgUrl;
 
    private String from;
+
+   private String openid;
+
+   private String unionid;
 }

+ 2 - 0
mooctest-user-server/src/main/resources/templates/third_party_bind.html

@@ -33,6 +33,8 @@
                 <input id="thirdPartyId" name="thirdPartyId" type="hidden" th:value="${thirdPartyId}">
                 <input id="from" name="from" type="hidden" th:value="${from}">
                 <input id="headImgUrl" name="headImgUrl" type="hidden" th:value="${headImg}">
+                <input id="openid" name="openid" type="hidden" th:value="${openid}">
+                <input id="unionid" name="unionid" type="hidden" th:value="${unionid}">
                 <div class="wrap-input100 validate-input m-b-23" data-validate="请输入用户名">
                     <span class="label-input100">邮箱</span>
                     <input id="email" class="input100" type="text" name="email" placeholder="请输入用户名" required="邮箱账号不可为空">

+ 96 - 0
mooctest-user-server/src/main/resources/templates/upload_card_info.html

@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <title>慕测平台</title>
+    <meta name="keywords" content="" />
+    <meta name="description" content="" />
+
+    <link rel="stylesheet" type="text/css" th:href="@{/vendor/bootstrap/css/bootstrap.min.css}">
+    <link rel="stylesheet" type="text/css" th:href="@{/fonts/font-awesome-4.7.0/css/font-awesome.min.css}">
+    <link rel="stylesheet" type="text/css" th:href="@{/fonts/iconic/css/material-design-iconic-font.min.css}">
+    <link rel="stylesheet" type="text/css" th:href="@{/css/util.css}">
+    <link rel="stylesheet" type="text/css" th:href="@{/css/main.css}">
+</head>
+
+<body>
+
+<div class="limiter">
+    <div class="container-login100" th:style="'background-image:url(/images/bg.jpg);'">
+        <div class="wrap-login100 p-l-40 p-r-40 p-t-30 p-b-25" style="width: 800px">
+            <form th:action="@{/test/upload/bankinfo}" enctype="multipart/form-data" method="post" class="login100-form validate-form" style="align-content: center; padding-left: 40px; padding-right: 40px;">
+
+                <div id="login-logo" class="p-b-15" style="text-align: center;">
+                    <img style="width: 80px;" th:src="@{/images/mooctest.png}" >
+                </div>
+                <div class="wrap-input100 validate-input m-b-25">
+                    <span class="label-input100" style="font-size: medium; font-weight: bold">姓名:</span>
+                    <input id="real_name" name="real_name" type="text" placeholder="请填写真实姓名" required="不可为空">
+                </div>
+                <div class="wrap-input100 validate-input m-b-25">
+                    <span class="label-input100" style="font-size: medium; font-weight: bold">身份证号码:</span>
+                    <input id="ID_number" name="ID_number" type="text" maxlength="18" minlength="18" placeholder="请输入18位身份证号" required="不可为空">
+                </div>
+                <div class="wrap-input100 validate-input m-b-25">
+                    <span class="label-input100" style="font-size: medium; font-weight: bold">银行卡号:</span>
+                    <input id="bank_card" name="bank_card" type="text" placeholder="请填写银行卡号" required="不可为空">
+                </div>
+                <div class="wrap-input100 validate-input m-b-25">
+                    <span class="label-input100" style="font-size: medium; font-weight: bold">开户行信息:</span>
+                    <input id="bank_name" name="bank_name" type="text" placeholder="具体到支行" required="不可为空">
+                </div>
+                <div class="wrap-input100 validate-input m-b-25">
+                    <span class="label-input100" style="font-size: medium; font-weight: bold">身份证正面:</span>
+                    <div class="m-t-5" style="position: relative;">
+                        <input id="ID_card_front" style="position: absolute;opacity: 0;" name="ID_card_front" type="file" accept="image/png" onchange="changeFrontPic()" required="不可为空">
+                        <label for="ID_card_front">
+                            <img id="frontImg" src="/images/mooctest.png" style="width: 214px; height: 135px">
+                        </label>
+                    </div>
+                </div>
+                <div class="wrap-input100 validate-input m-b-25">
+                    <span class="label-input100" style="font-size: medium; font-weight: bold">身份证反面:</span>
+                    <div class="m-t-5" style="position: relative;">
+                        <input id="ID_card_back" style="position: absolute;opacity: 0;" name="ID_card_back" type="file" accept="image/png" onchange="changeBackPic()" required="不可为空">
+                        <label for="ID_card_back">
+                            <img id="backImg" src="/images/mooctest.png" style="width: 214px; height: 135px">
+                        </label>
+                    </div>
+                </div>
+                <div class="container-login100-form-btn">
+                    <div class="wrap-login100-form-btn">
+                        <div class="login100-form-bgbtn"></div>
+                        <button class="login100-form-btn">确 认 上 传</button>
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+</div>
+
+<script th:src="@{/vendor/jquery/jquery-3.2.1.min.js}"></script>
+<script th:src="@{/js/main.js}"></script>
+<script type="text/javascript">
+    function changeBackPic(){
+        var reads = new FileReader();
+        var f = document.getElementById("ID_card_back").files[0];
+        reads.readAsDataURL(f);
+        reads.onload=function(e){
+            document.getElementById("backImg").src=this.result;
+        }
+    }
+    function changeFrontPic(){
+        var reads = new FileReader();
+        var f = document.getElementById("ID_card_front").files[0];
+        reads.readAsDataURL(f);
+        reads.onload=function(e){
+            document.getElementById("frontImg").src=this.result;
+        }
+    }
+</script>
+</body>
+
+</html>