Browse Source

用户账号视图查询数据问题

wangmh 8 years ago
parent
commit
1aff926a69

+ 51 - 0
sso-common/src/main/java/com/uas/sso/entity/UserAccount.java

@@ -2,6 +2,7 @@ package com.uas.sso.entity;
 
 import javax.persistence.*;
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 用户账号,包括个人账号
@@ -79,6 +80,11 @@ public class UserAccount implements Serializable {
     @Column(name = "email_valid_code")
     private Short emailValidCode;
 
+    /**
+     * 身份认证状态
+     */
+    private Short identityValidCode;
+
     /**
      * 账户是否冻结(1、冻结)
      */
@@ -115,6 +121,35 @@ public class UserAccount implements Serializable {
     @Column(name = "app_uid")
     private String appId;
 
+    /**
+     * 上次登录时间
+     */
+    private Date lastLoginTime;
+
+    public UserAccount() {
+    }
+
+    public UserAccount(Long userUU, String vipName, String mobile, String mobileArea, Short mobileValidCode, String password, String erpPassword, String salt, String email, Short emailValidCode, Short identityValidCode, Integer lock, Long spaceUU, String spaceName, String businessCode, String spaceDomain, String appId, Date lastLoginTime) {
+        this.userUU = userUU;
+        this.vipName = vipName;
+        this.mobile = mobile;
+        this.mobileArea = mobileArea;
+        this.mobileValidCode = mobileValidCode;
+        this.password = password;
+        this.erpPassword = erpPassword;
+        this.salt = salt;
+        this.email = email;
+        this.emailValidCode = emailValidCode;
+        this.identityValidCode = identityValidCode;
+        this.lock = lock;
+        this.spaceUU = spaceUU;
+        this.spaceName = spaceName;
+        this.businessCode = businessCode;
+        this.spaceDomain = spaceDomain;
+        this.appId = appId;
+        this.lastLoginTime = lastLoginTime;
+    }
+
     public Long getUserUU() {
         return userUU;
     }
@@ -195,6 +230,14 @@ public class UserAccount implements Serializable {
         this.emailValidCode = emailValidCode;
     }
 
+    public Short getIdentityValidCode() {
+        return identityValidCode;
+    }
+
+    public void setIdentityValidCode(Short identityValidCode) {
+        this.identityValidCode = identityValidCode;
+    }
+
     public Integer getLock() {
         return lock;
     }
@@ -242,4 +285,12 @@ public class UserAccount implements Serializable {
     public void setAppId(String appId) {
         this.appId = appId;
     }
+
+    public Date getLastLoginTime() {
+        return lastLoginTime;
+    }
+
+    public void setLastLoginTime(Date lastLoginTime) {
+        this.lastLoginTime = lastLoginTime;
+    }
 }

+ 15 - 4
sso-server/src/main/java/com/uas/sso/controller/LoginController.java

@@ -143,7 +143,7 @@ public class LoginController extends BaseController {
 
             // 没有记录
             if (CollectionUtils.isEmpty(userAccounts)) {
-                return error("您的账号绑定企业并且当前应用不支持个人账号");
+                return error("您的账号绑定企业并且当前应用不支持个人账号");
             }
 
             // 应用允许个人账号,并且账号未绑定企业,或者只绑定了一个企业,直接登录
@@ -218,15 +218,15 @@ public class LoginController extends BaseController {
         String type = AccountTypeUtils.getAccountType(username);
         if (AccountTypeUtils.MOBILE.equals(type)) {
             // 手机号登录
-            return userAccountService.findOneByMobile(appId, username, spaceUU);
+            return userAccountService.findOneByMobile(appId, username, Long.valueOf(spaceUU));
         }
         if (AccountTypeUtils.EMAIL.equals(type)) {
             // 邮箱登录
-            return userAccountService.findOneByEmail(appId, username, spaceUU);
+            return userAccountService.findOneByEmail(appId, username, Long.valueOf(spaceUU));
         }
         if (AccountTypeUtils.UU_NUMBER.equals(type)) {
             // uu号登录
-            return userAccountService.findOneByUserUU(appId, Long.valueOf(username), spaceUU);
+            return userAccountService.findOneByUserUU(appId, Long.valueOf(username), Long.valueOf(spaceUU));
         }
 
         // 其余情况
@@ -345,4 +345,15 @@ public class LoginController extends BaseController {
         }
         return success(userService.getPwdErrorCount(username));
     }
+
+    /**
+     * 退出接口
+     * @return
+     */
+    @RequestMapping(value = "/logout", method = RequestMethod.GET)
+    public ModelMap logout() {
+        SSOHelper.clearLogin(request, response);
+        return success();
+    }
+
 }

+ 0 - 73
sso-server/src/main/java/com/uas/sso/dao/UserAccountDao.java

@@ -1,73 +0,0 @@
-package com.uas.sso.dao;
-
-import com.uas.sso.entity.UserAccount;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-
-import java.util.List;
-
-/**
- * 用户账号dao
- *
- * @author wangmh
- * @date 2018/1/8
- */
-public interface UserAccountDao extends JpaRepository<UserAccount, Long>, JpaSpecificationExecutor<UserAccount> {
-
-    /**
-     * 根据手机号和企业uu号查找用户账号
-     *
-     * @param appId 登录的应用
-     * @param mobile 手机号
-     * @param spaceUU 企业uu号
-     * @return 用户账户信息
-     */
-    UserAccount findByAppIdAndMobileAndSpaceUU(String appId, String mobile, String spaceUU);
-
-    /**
-     * 根据邮箱和企业uu号查找用户账号
-     *
-     * @param appId 登录的应用
-     * @param email 邮箱
-     * @param spaceUU 企业uu号
-     * @return 用户账户信息
-     */
-    UserAccount findByAppIdAndEmailAndSpaceUU(String appId, String email, String spaceUU);
-
-    /**
-     * 根据用户uu号和企业uu号查找用户账号
-     *
-     * @param appId 登录的应用
-     * @param userUU 用户uu号
-     * @param spaceUU 企业uu号
-     * @return 用户账户信息
-     */
-    UserAccount findByAppIdAndUserUUAndSpaceUU(String appId, Long userUU, String spaceUU);
-
-    /**
-     * 根据手机号和查找用户账号(包括个人账号)
-     *
-     * @param appId 登录应用
-     * @param mobile 手机号
-     * @return 用户账户信息
-     */
-    List<UserAccount> findByAppIdAndMobile(String appId, String mobile);
-
-    /**
-     * 根据邮箱查找用户账号(包括个人账号)
-     *
-     * @param appId 登录应用
-     * @param email 邮箱
-     * @return 用户账户信息
-     */
-    List<UserAccount> findByAppIdAndEmail(String appId, String email);
-
-    /**
-     * 根据用户uu号查找用户账号(包括个人账号)
-     *
-     * @param appId 登录应用
-     * @param userUU 用户uu号
-     * @return 用户账户信息
-     */
-    List<UserAccount> findByAppIdAndUserUU(String appId, Long userUU);
-}

+ 14 - 0
sso-server/src/main/java/com/uas/sso/entity/User.java

@@ -171,6 +171,9 @@ public class User implements Serializable {
     @Column(name = "_lock")
     private Integer lock;
 
+    /**
+     * 用户登录记录
+     */
     @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST})
     @JoinColumn(name = "record_id")
     private UserRecord userRecord;
@@ -182,6 +185,9 @@ public class User implements Serializable {
     @JoinColumn(name = "useruu", nullable = false)
     private List<UserQuestion> questions;
 
+    @ManyToMany(mappedBy = "users")
+    private List<Userspace> userspaces;
+
     public User() {
     }
 
@@ -400,4 +406,12 @@ public class User implements Serializable {
     public void setQuestions(List<UserQuestion> questions) {
         this.questions = questions;
     }
+
+    public List<Userspace> getUserspaces() {
+        return userspaces;
+    }
+
+    public void setUserspaces(List<Userspace> userspaces) {
+        this.userspaces = userspaces;
+    }
 }

+ 15 - 0
sso-server/src/main/java/com/uas/sso/entity/UserRecord.java

@@ -26,6 +26,9 @@ public class UserRecord implements Serializable {
     @Column(name = "pwd_error_count", nullable = false)
     private int pwdErrorCount;
 
+    @OneToOne(mappedBy = "userRecord")
+    private User user;
+
     public UserRecord() {
         this.pwdErrorCount = 0;
     }
@@ -53,4 +56,16 @@ public class UserRecord implements Serializable {
     public void setPwdErrorCount(int pwdErrorCount) {
         this.pwdErrorCount = pwdErrorCount;
     }
+
+    public void setLastLoginTime(Timestamp lastLoginTime) {
+        this.lastLoginTime = lastLoginTime;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
 }

+ 97 - 37
sso-server/src/main/java/com/uas/sso/entity/Userspace.java

@@ -76,35 +76,59 @@ public class Userspace implements Serializable {
     @Column(name = "reg_address")
     private String regAddress;
 
+    /**
+     * 注册地址所在省份、州、直辖市、行政区
+     */
+    @Column(name = "reg_province")
+    private String province;
+
+    /**
+     * 注册地址所在城市
+     */
+    @Column(name = "reg_city")
+    private String city;
+
+    /**
+     * 注册地址所在区域
+     */
+    @Column(name = "reg_district")
+    private String district;
+
+    /**
+     * 注册地址所在街道
+     */
+    @Column(name = "reg_street")
+    private String street;
+
     /**
      * 公司地址经度
      */
     @Column(name = "company_longitude")
-    private String longitude;
+    private String companyLongitude;
 
     /**
      * 公司地址纬度
      */
     @Column(name = "company_latitude")
-    private String latitude;
+    private String companyLatitude;
 
     /**
      * 公司所在国家
      */
     @Column(name = "company_country")
-    private String country;
+    private String companyCountry;
 
     /**
      * 公司所在省份、州、直辖市、行政区
      */
     @Column(name = "company_province")
-    private String province;
+    private String companyProvince;
 
     /**
      * 公司所在城市
      */
     @Column(name = "company_city")
-    private String city;
+    private String companyCity;
 
     /**
      * 公司地址
@@ -175,6 +199,10 @@ public class Userspace implements Serializable {
     public Userspace() {
     }
 
+    public Userspace(String spaceName) {
+        this.spaceName = spaceName;
+    }
+
     public Long getSpaceUU() {
         return spaceUU;
     }
@@ -247,68 +275,100 @@ public class Userspace implements Serializable {
         this.regAddress = regAddress;
     }
 
-    public String getCompanyAddress() {
-        return companyAddress;
+    public String getProvince() {
+        return province;
     }
 
-    public void setCompanyAddress(String companyAddress) {
-        this.companyAddress = companyAddress;
+    public void setProvince(String province) {
+        this.province = province;
     }
 
-    public Short getValidCode() {
-        return validCode;
+    public String getCity() {
+        return city;
     }
 
-    public void setValidCode(Short validCode) {
-        this.validCode = validCode;
+    public void setCity(String city) {
+        this.city = city;
     }
 
-    public String getLogoImage() {
-        return logoImage;
+    public String getDistrict() {
+        return district;
     }
 
-    public void setLogoImage(String logoImage) {
-        this.logoImage = logoImage;
+    public void setDistrict(String district) {
+        this.district = district;
     }
 
-    public String getLongitude() {
-        return longitude;
+    public String getStreet() {
+        return street;
     }
 
-    public void setLongitude(String longitude) {
-        this.longitude = longitude;
+    public void setStreet(String street) {
+        this.street = street;
     }
 
-    public String getLatitude() {
-        return latitude;
+    public String getCompanyLongitude() {
+        return companyLongitude;
     }
 
-    public void setLatitude(String latitude) {
-        this.latitude = latitude;
+    public void setCompanyLongitude(String companyLongitude) {
+        this.companyLongitude = companyLongitude;
     }
 
-    public String getCountry() {
-        return country;
+    public String getCompanyLatitude() {
+        return companyLatitude;
     }
 
-    public void setCountry(String country) {
-        this.country = country;
+    public void setCompanyLatitude(String companyLatitude) {
+        this.companyLatitude = companyLatitude;
     }
 
-    public String getProvince() {
-        return province;
+    public String getCompanyCountry() {
+        return companyCountry;
     }
 
-    public void setProvince(String province) {
-        this.province = province;
+    public void setCompanyCountry(String companyCountry) {
+        this.companyCountry = companyCountry;
     }
 
-    public String getCity() {
-        return city;
+    public String getCompanyProvince() {
+        return companyProvince;
     }
 
-    public void setCity(String city) {
-        this.city = city;
+    public void setCompanyProvince(String companyProvince) {
+        this.companyProvince = companyProvince;
+    }
+
+    public String getCompanyCity() {
+        return companyCity;
+    }
+
+    public void setCompanyCity(String companyCity) {
+        this.companyCity = companyCity;
+    }
+
+    public String getCompanyAddress() {
+        return companyAddress;
+    }
+
+    public void setCompanyAddress(String companyAddress) {
+        this.companyAddress = companyAddress;
+    }
+
+    public Short getValidCode() {
+        return validCode;
+    }
+
+    public void setValidCode(Short validCode) {
+        this.validCode = validCode;
+    }
+
+    public String getLogoImage() {
+        return logoImage;
+    }
+
+    public void setLogoImage(String logoImage) {
+        this.logoImage = logoImage;
     }
 
     public String getTelephone() {

+ 9 - 3
sso-server/src/main/java/com/uas/sso/service/UserAccountService.java

@@ -12,6 +12,12 @@ import java.util.List;
  */
 public interface UserAccountService {
 
+    /**
+     * 查询所有账号
+     * @return
+     */
+    List<UserAccount> findAll();
+
     /**
      * 根据手机号查找用户账号
      *
@@ -20,7 +26,7 @@ public interface UserAccountService {
      * @param spaceUU 企业uu号
      * @return
      */
-    UserAccount findOneByMobile(String appId, String mobile, String spaceUU);
+    UserAccount findOneByMobile(String appId, String mobile, Long spaceUU);
 
     /**
      * 根据邮箱查找用户账号
@@ -30,7 +36,7 @@ public interface UserAccountService {
      * @param spaceUU 企业uu号
      * @return
      */
-    UserAccount findOneByEmail(String appId, String email, String spaceUU);
+    UserAccount findOneByEmail(String appId, String email, Long spaceUU);
 
     /**
      * 根据uu号查找用户账号
@@ -40,7 +46,7 @@ public interface UserAccountService {
      * @param spaceUU
      * @return
      */
-    UserAccount findOneByUserUU(String appId, Long userUU, String spaceUU);
+    UserAccount findOneByUserUU(String appId, Long userUU, Long spaceUU);
 
     /**
      * 根据手机号和应用找到用户账号信息

+ 77 - 14
sso-server/src/main/java/com/uas/sso/service/impl/UserAccountServiceImpl.java

@@ -1,15 +1,17 @@
 package com.uas.sso.service.impl;
 
-import com.uas.sso.dao.UserAccountDao;
 import com.uas.sso.entity.UserAccount;
 import com.uas.sso.service.UserAccountService;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.uas.sso.util.CollectionUtils;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
 import java.util.List;
 
 /**
- * 用户账户service实现类
+ * 用户账户视图service实现类
  *
  * @author wangmh
  * @date 2018/1/8
@@ -17,36 +19,97 @@ import java.util.List;
 @Service
 public class UserAccountServiceImpl implements UserAccountService {
 
-    @Autowired
-    private UserAccountDao userAccountDao;
+    @PersistenceContext
+    private EntityManager entityManager;
+
+    /**
+     * 视图sql
+     */
+    private static final String JPQL= "select new UserAccount(user.userUU, user.vipName, user.mobile, user.mobileArea, " +
+            "user.mobileValidCode, user.password, user.erpPassword, user.salt, user.email, user.emailValidCode, " +
+            "user.identityValidCode, user.lock, us.spaceUU, us.spaceName, us.businessCode, " +
+            "us.domain, app.uid, ur.lastLoginTime) from UserRecord ur, User user inner join user.userspaces us inner join us.apps app where user.userRecord.id = ur.id ";
+
+    @Override
+    public List<UserAccount> findAll() {
+        //建立有类型的查询
+        TypedQuery<UserAccount> reportTypedQuery= entityManager.createQuery(JPQL, UserAccount.class);
+        List<UserAccount> reports= reportTypedQuery.getResultList();
+        return reports;
+    }
 
     @Override
-    public UserAccount findOneByMobile(String appId, String mobile, String spaceUU) {
-        return userAccountDao.findByAppIdAndMobileAndSpaceUU(appId, mobile, spaceUU);
+    public UserAccount findOneByMobile(String appId, String mobile, Long spaceUU) {
+        String sql = JPQL + " and app.uid = ?1 and user.mobile = ?2 and us.spaceUU = ?3";
+        //建立有类型的查询
+        TypedQuery<UserAccount> reportTypedQuery= entityManager.createQuery(sql, UserAccount.class);
+        //另外有详细查询条件的在jpql中留出参数位置来(?1 ?2 ?3....),然后在这设置
+        reportTypedQuery.setParameter(1, appId);
+        reportTypedQuery.setParameter(2, mobile);
+        reportTypedQuery.setParameter(3, spaceUU);
+        List<UserAccount> reports= reportTypedQuery.getResultList();
+        return CollectionUtils.isEmpty(reports) ? null : reports.get(0);
     }
 
     @Override
-    public UserAccount findOneByEmail(String appId, String email, String spaceUU) {
-        return userAccountDao.findByAppIdAndEmailAndSpaceUU(appId, email, spaceUU);
+    public UserAccount findOneByEmail(String appId, String email, Long spaceUU) {
+        String sql = JPQL + " and app.uid = ?1 and user.email = ?2 and us.spaceUU = ?3";
+        //建立有类型的查询
+        TypedQuery<UserAccount> reportTypedQuery= entityManager.createQuery(sql, UserAccount.class);
+        //另外有详细查询条件的在jpql中留出参数位置来(?1 ?2 ?3....),然后在这设置
+        reportTypedQuery.setParameter(1, appId);
+        reportTypedQuery.setParameter(2, email);
+        reportTypedQuery.setParameter(3, spaceUU);
+        List<UserAccount> reports= reportTypedQuery.getResultList();
+        return CollectionUtils.isEmpty(reports) ? null : reports.get(0);
     }
 
     @Override
-    public UserAccount findOneByUserUU(String appId, Long userUU, String spaceUU) {
-        return userAccountDao.findByAppIdAndUserUUAndSpaceUU(appId, userUU, spaceUU);
+    public UserAccount findOneByUserUU(String appId, Long userUU, Long spaceUU) {
+        String sql = JPQL + " and app.uid = ?1 and user.userUU = ?2 and us.spaceUU = ?3";
+        //建立有类型的查询
+        TypedQuery<UserAccount> reportTypedQuery= entityManager.createQuery(sql, UserAccount.class);
+        //另外有详细查询条件的在jpql中留出参数位置来(?1 ?2 ?3....),然后在这设置
+        reportTypedQuery.setParameter(1, appId);
+        reportTypedQuery.setParameter(2, userUU);
+        reportTypedQuery.setParameter(3, spaceUU);
+        List<UserAccount> reports= reportTypedQuery.getResultList();
+        return CollectionUtils.isEmpty(reports) ? null : reports.get(0);
     }
 
     @Override
     public List<UserAccount> findByMobile(String appId, String mobile) {
-        return userAccountDao.findByAppIdAndMobile(appId, mobile);
+        String sql = JPQL + " and app.uid = ?1 and user.mobile = ?2";
+        //建立有类型的查询
+        TypedQuery<UserAccount> reportTypedQuery= entityManager.createQuery(sql, UserAccount.class);
+        //另外有详细查询条件的在jpql中留出参数位置来(?1 ?2 ?3....),然后在这设置
+        reportTypedQuery.setParameter(1, appId);
+        reportTypedQuery.setParameter(2, mobile);
+        List<UserAccount> reports= reportTypedQuery.getResultList();
+        return reports;
     }
 
     @Override
     public List<UserAccount> findByEmail(String appId, String email) {
-        return userAccountDao.findByAppIdAndEmail(appId, email);
+        String sql = JPQL + " and app.uid = ?1 and user.email = ?2";
+        //建立有类型的查询
+        TypedQuery<UserAccount> reportTypedQuery= entityManager.createQuery(sql, UserAccount.class);
+        //另外有详细查询条件的在jpql中留出参数位置来(?1 ?2 ?3....),然后在这设置
+        reportTypedQuery.setParameter(1, appId);
+        reportTypedQuery.setParameter(2, email);
+        List<UserAccount> reports= reportTypedQuery.getResultList();
+        return reports;
     }
 
     @Override
     public List<UserAccount> findByUserUU(String appId, Long userUU) {
-        return userAccountDao.findByAppIdAndUserUU(appId, userUU);
+        String sql = JPQL + " and app.uid = ?1 and user.userUU = ?2";
+        //建立有类型的查询
+        TypedQuery<UserAccount> reportTypedQuery= entityManager.createQuery(sql, UserAccount.class);
+        //另外有详细查询条件的在jpql中留出参数位置来(?1 ?2 ?3....),然后在这设置
+        reportTypedQuery.setParameter(1, appId);
+        reportTypedQuery.setParameter(2, userUU);
+        List<UserAccount> reports= reportTypedQuery.getResultList();
+        return reports;
     }
 }