Эх сурвалжийг харах

增加体验功能,账套为演示账套

chenw 7 жил өмнө
parent
commit
57920aec82

+ 38 - 4
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java

@@ -6,6 +6,7 @@ import com.usoftchina.saas.account.constant.AccountType;
 import com.usoftchina.saas.account.dto.AccountCopyDTO;
 import com.usoftchina.saas.account.dto.AccountCopyDTO;
 import com.usoftchina.saas.account.dto.AccountDTO;
 import com.usoftchina.saas.account.dto.AccountDTO;
 import com.usoftchina.saas.account.dto.AccountUpdateDTO;
 import com.usoftchina.saas.account.dto.AccountUpdateDTO;
+import com.usoftchina.saas.account.dto.CompanyBaseDTO;
 import com.usoftchina.saas.auth.common.cookie.CookieInfo;
 import com.usoftchina.saas.auth.common.cookie.CookieInfo;
 import com.usoftchina.saas.auth.common.jwt.JwtHelper;
 import com.usoftchina.saas.auth.common.jwt.JwtHelper;
 import com.usoftchina.saas.auth.common.jwt.JwtInfo;
 import com.usoftchina.saas.auth.common.jwt.JwtInfo;
@@ -14,6 +15,7 @@ import com.usoftchina.saas.auth.dto.AuthDTO;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.dto.TokenDTO;
 import com.usoftchina.saas.auth.dto.TokenDTO;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import com.usoftchina.saas.auth.service.AuthorizeCountService;
 import com.usoftchina.saas.auth.service.AuthorizeCountService;
 import com.usoftchina.saas.auth.service.AuthorizeLogService;
 import com.usoftchina.saas.auth.service.AuthorizeLogService;
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.base.Result;
@@ -23,10 +25,7 @@ import com.usoftchina.saas.page.PageDefault;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.server.web.ServletUtils;
 import com.usoftchina.saas.server.web.ServletUtils;
 import com.usoftchina.saas.socket.api.SocketMessageApi;
 import com.usoftchina.saas.socket.api.SocketMessageApi;
-import com.usoftchina.saas.utils.BeanMapper;
-import com.usoftchina.saas.utils.CollectionUtils;
-import com.usoftchina.saas.utils.JsonUtils;
-import com.usoftchina.saas.utils.StringUtils;
+import com.usoftchina.saas.utils.*;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +35,9 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 
 /**
 /**
  * @author yingp
  * @author yingp
@@ -117,6 +119,38 @@ public class AuthController {
         return Result.error(result.getCode(), result.getMessage());
         return Result.error(result.getCode(), result.getMessage());
     }
     }
 
 
+
+    @PostMapping("/virtual/authorize/{mobile}")
+    public Result<AuthDTO> virtualAuthorize(HttpServletRequest request, @PathVariable("mobile") String mobile) {
+        //构造虚拟account,生成token
+        String randomNum = DateUtils.format(new Date(), "hhmmss");
+        AccountDTO accountDTO = new AccountDTO();
+        accountDTO.setId(-99999L);
+        accountDTO.setUsername("virtual" + randomNum);
+        accountDTO.setRealname("游客" + randomNum);
+        accountDTO.setMobile(mobile);
+        accountDTO.setType(0);
+        //公司信息
+        List<CompanyBaseDTO> companies = new ArrayList<CompanyBaseDTO>();
+        CompanyBaseDTO companyBaseDTO = new CompanyBaseDTO();
+        companyBaseDTO.setId(2L);
+        companyBaseDTO.setName("演示账套");
+
+        companies.add(companyBaseDTO);
+        accountDTO.setCompanies(companies);
+
+        Long companyId = 2L;            //演示账套companyId  :  2
+        String appId = "trade-app";     //App_ID
+        JwtInfo info = new JwtInfo(appId, companyId, accountDTO.getId(), accountDTO.getUsername(), accountDTO.getRealname());
+        JwtToken jwtToken = JwtHelper.generateToken(info, privateKeyPath, expire);
+        TokenDTO tokenDTO = BeanMapper.map(jwtToken, TokenDTO.class);
+        // 登录日志
+        authorizeLogService.saveVirtual(VirtualAuthorizeLog.from(request)
+                .setMobile(Long.parseLong(accountDTO.getMobile()))
+                .setAppId(appId).build());
+        return Result.success(new AuthDTO(tokenDTO, accountDTO));
+    }
+
     /**
     /**
      * 账户中心登录时jsonp回调
      * 账户中心登录时jsonp回调
      *
      *

+ 8 - 0
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/mapper/AuthorizeLogMapper.java

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.auth.mapper;
 package com.usoftchina.saas.auth.mapper;
 
 
 import com.usoftchina.saas.auth.po.AuthorizeLog;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;
@@ -26,4 +27,11 @@ public interface AuthorizeLogMapper {
      * @return
      * @return
      */
      */
     List<AuthorizeLog> selectByAppIdAndAccountId(@Param("appId") String appId, @Param("accountId") Long accountId);
     List<AuthorizeLog> selectByAppIdAndAccountId(@Param("appId") String appId, @Param("accountId") Long accountId);
+
+    /**
+     * 保存虚拟登陆的LOG
+     * @param virtualAuthorizeLog
+     * @return
+     */
+    int insertVirtual(VirtualAuthorizeLog virtualAuthorizeLog);
 }
 }

+ 117 - 0
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/po/VirtualAuthorizeLog.java

@@ -0,0 +1,117 @@
+package com.usoftchina.saas.auth.po;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author chenw
+ * @date 2018/11/26
+ */
+public class VirtualAuthorizeLog implements Serializable{
+    private Long id;
+    private Long mobile;
+    private String clientIp;
+    private String userAgent;
+    private Date loginTime;
+    private String appId;
+
+    public VirtualAuthorizeLog() {
+    }
+
+    public VirtualAuthorizeLog(Long mobile, String clientIp, String userAgent, String appId) {
+        this.mobile = mobile;
+        this.clientIp = clientIp;
+        this.userAgent = userAgent;
+        this.loginTime = new Date();
+        this.appId = appId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(Long mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getClientIp() {
+        return clientIp;
+    }
+
+    public void setClientIp(String clientIp) {
+        this.clientIp = clientIp;
+    }
+
+    public String getUserAgent() {
+        return userAgent;
+    }
+
+    public void setUserAgent(String userAgent) {
+        this.userAgent = userAgent;
+    }
+
+    public Date getLoginTime() {
+        return loginTime;
+    }
+
+    public void setLoginTime(Date loginTime) {
+        this.loginTime = loginTime;
+    }
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public static Builder from(HttpServletRequest request) {
+        return new Builder(request);
+    }
+
+    public static class Builder {
+        private Long mobile;
+        private String clientIp;
+        private String userAgent;
+        private String appId;
+
+        public Builder(HttpServletRequest request) {
+            this.clientIp = request.getRemoteAddr();
+            this.userAgent = request.getHeader("User-Agent");
+        }
+
+        public Builder setMobile(Long mobile) {
+            this.mobile = mobile;
+            return this;
+        }
+
+        public Builder setClientIp(String clientIp) {
+            this.clientIp = clientIp;
+            return this;
+        }
+
+        public Builder setUserAgent(String userAgent) {
+            this.userAgent = userAgent;
+            return this;
+        }
+
+        public Builder setAppId(String appId) {
+            this.appId = appId;
+            return this;
+        }
+
+        public VirtualAuthorizeLog build() {
+            return new VirtualAuthorizeLog(mobile, clientIp, userAgent, appId);
+        }
+    }
+}

+ 8 - 0
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/service/AuthorizeLogService.java

@@ -3,6 +3,7 @@ package com.usoftchina.saas.auth.service;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.page.PageRequest;
 
 
 /**
 /**
@@ -25,4 +26,11 @@ public interface AuthorizeLogService {
      * @return
      * @return
      */
      */
     PageInfo<AuthorizeLogDTO> findByPage(PageRequest page);
     PageInfo<AuthorizeLogDTO> findByPage(PageRequest page);
+
+    /**
+     * 保存虚拟账户登录LOG
+     * @param virtualAuthorizeLog
+     * @return
+     */
+    boolean saveVirtual(VirtualAuthorizeLog virtualAuthorizeLog);
 }
 }

+ 6 - 0
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/service/impl/AuthorizeLogServiceImpl.java

@@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.mapper.AuthorizeLogMapper;
 import com.usoftchina.saas.auth.mapper.AuthorizeLogMapper;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import com.usoftchina.saas.auth.service.AuthorizeLogService;
 import com.usoftchina.saas.auth.service.AuthorizeLogService;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.page.PageRequest;
@@ -39,4 +40,9 @@ public class AuthorizeLogServiceImpl implements AuthorizeLogService{
         );
         );
         return new PageInfo<>(BeanMapper.mapList(logs, AuthorizeLogDTO.class));
         return new PageInfo<>(BeanMapper.mapList(logs, AuthorizeLogDTO.class));
     }
     }
+
+    @Override
+    public boolean saveVirtual(VirtualAuthorizeLog virtualAuthorizeLog) {
+        return authorizeLogMapper.insertVirtual(virtualAuthorizeLog) > 0;
+    }
 }
 }

+ 5 - 0
base-servers/auth/auth-server/src/main/resources/mapper/AuthorizeLogMapper.xml

@@ -18,4 +18,9 @@
         select * from au_authorize_log where app_id=#{appId} and account_id=#{accountId}
         select * from au_authorize_log where app_id=#{appId} and account_id=#{accountId}
         order by login_time desc
         order by login_time desc
     </select>
     </select>
+    <insert id="insertVirtual" parameterType="com.usoftchina.saas.auth.po.VirtualAuthorizeLog">
+        insert into au_virtual_authorize_log(app_id,mobile,client_ip,user_agent,login_time)
+        values (#{appId,jdbcType=VARCHAR}, #{mobile,jdbcType=BIGINT}, #{clientIp,jdbcType=VARCHAR},
+        #{userAgent,jdbcType=VARCHAR}, #{loginTime,jdbcType=TIMESTAMP})
+    </insert>
 </mapper>
 </mapper>

+ 8 - 5
base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/AuthFilter.java

@@ -52,12 +52,15 @@ public class AuthFilter implements GlobalFilter, Ordered {
                 BaseContextHolder.setCompanyId(jwt.getCompanyId());
                 BaseContextHolder.setCompanyId(jwt.getCompanyId());
                 BaseContextHolder.setUserName(jwt.getRealName());
                 BaseContextHolder.setUserName(jwt.getRealName());
                 BaseContextHolder.setToken(token);
                 BaseContextHolder.setToken(token);
-                AccountDTO accountDTO = AccountCache.current().getAccount();
-                if (null == accountDTO) {
-                    throw new BizException(ExceptionCode.USER_NOT_EXIST);
+                if (jwt.getUserId() != -99999) {    //非虚拟用户登录时
+                    AccountDTO accountDTO = AccountCache.current().getAccount();
+                    if (null == accountDTO) {
+                        throw new BizException(ExceptionCode.USER_NOT_EXIST);
+                    }
+                    // 鉴别角色权限
+                    checkPermission(exchange.getRequest(), jwt, accountDTO);
                 }
                 }
-                // 鉴别角色权限
-                checkPermission(exchange.getRequest(), jwt, accountDTO);
+
             }
             }
             return chain.filter(exchange);
             return chain.filter(exchange);
         } finally {
         } finally {