提交 252f07a1 编写于 作者: yongbo.wang's avatar yongbo.wang

Merge branch 'release' into 'master'

Release



See merge request !24
流水线 #25799 已失败 于阶段
in 0 second
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<groupId>com.pica.cloud.account</groupId> <groupId>com.pica.cloud.account</groupId>
<artifactId>pica-cloud-account-client</artifactId> <artifactId>pica-cloud-account-client</artifactId>
<version>1.0.1</version> <version>1.0.3.1</version>
<name>pica-cloud-account-client</name> <name>pica-cloud-account-client</name>
<packaging>jar</packaging> <packaging>jar</packaging>
......
...@@ -3,8 +3,8 @@ package com.pica.cloud.account.account.client; ...@@ -3,8 +3,8 @@ package com.pica.cloud.account.account.client;
import com.pica.cloud.account.account.common.req.AccountInfoReq; import com.pica.cloud.account.account.common.req.AccountInfoReq;
import com.pica.cloud.foundation.entity.PicaResponse; import com.pica.cloud.foundation.entity.PicaResponse;
import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List; import java.util.List;
/** /**
...@@ -20,4 +20,9 @@ public interface AccountInfoClient { ...@@ -20,4 +20,9 @@ public interface AccountInfoClient {
@PostMapping("/account/info/doctorIds") @PostMapping("/account/info/doctorIds")
PicaResponse<List<Integer>> getDoctorIds(@RequestBody AccountInfoReq req); PicaResponse<List<Integer>> getDoctorIds(@RequestBody AccountInfoReq req);
@GetMapping(value = "/account/token/continue")
PicaResponse<String> tokenContinueTime(@RequestHeader(value = "token") String token,
@RequestHeader(value = "sourceType") Integer sourceType,
@RequestParam(value = "seconds", required = false) Integer seconds);
} }
package com.pica.cloud.account.account.client;
import com.pica.cloud.foundation.entity.PicaResponse;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author andong
* @create 2019/7/19
*/
@FeignClient(name = "13201-pica-cloud-account")
public interface CaptchaClient {
@GetMapping("/account/account/acknowledge")
PicaResponse<Boolean> acknowledge(@RequestParam("captchaToken") String captchaToken,
@RequestParam("captchaAnswer") String captchaAnswer);
}
...@@ -29,6 +29,12 @@ ...@@ -29,6 +29,12 @@
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency> </dependency>
<!--Spring cloud dependencies begin--> <!--Spring cloud dependencies begin-->
...@@ -57,50 +63,41 @@ ...@@ -57,50 +63,41 @@
<dependency> <dependency>
<groupId>com.pica.cloud.foundation</groupId> <groupId>com.pica.cloud.foundation</groupId>
<artifactId>pica-cloud-service-starter</artifactId> <artifactId>pica-cloud-service-starter</artifactId>
<version>1.2.5-SNAPSHOT</version> <version>1.2.6-SNAPSHOT</version>
<!--<version>1.3.2.5</version>-->
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>com.pica.cloud.foundation</groupId>
<artifactId>pica-cloud-redis</artifactId> <artifactId>pica-cloud-redis</artifactId>
<groupId>com.pica.cloud.foundation</groupId>
</exclusion> </exclusion>
<exclusion> <exclusion>
<groupId>com.xuxueli</groupId> <artifactId>pica-cloud-entity</artifactId>
<artifactId>xxl-job-core</artifactId> <groupId>com.pica.cloud.foundation</groupId>
</exclusion>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency> <!--<dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>-->
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.17</version>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.1.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.pica.cloud.foundation</groupId> <groupId>com.pica.cloud.foundation</groupId>
<artifactId>pica-cloud-utils</artifactId> <artifactId>pica-cloud-utils</artifactId>
<version>2.0.1-SNAPSHOT</version> <version>1.3.2-OLD</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
</exclusion>
<exclusion>
<groupId>com.pica.cloud.foundation</groupId>
<artifactId>pica-cloud-entity</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<dependency> <dependency>
...@@ -130,6 +127,12 @@ ...@@ -130,6 +127,12 @@
<version>1.0.1</version> <version>1.0.1</version>
</dependency> </dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.1.0</version>
</dependency>
<dependency> <dependency>
<groupId>net.spy</groupId> <groupId>net.spy</groupId>
<artifactId>spymemcached</artifactId> <artifactId>spymemcached</artifactId>
...@@ -150,6 +153,61 @@ ...@@ -150,6 +153,61 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>com.pica.cloud.patient</groupId>
<artifactId>pica-cloud-smartcontract-client</artifactId>
<version>1.0.8</version>
</dependency>
<dependency>
<groupId>com.pica.cloud.riskcontrol</groupId>
<artifactId>pica-cloud-riskcontrol-client</artifactId>
<version>1.0.3.1</version>
</dependency>
<!-- apple identifyToken校验 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>jwks-rsa</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.pica.cloud.foundation</groupId>
<artifactId>pica-cloud-proof-client</artifactId>
<version>1.0.1</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>
...@@ -171,6 +229,7 @@ ...@@ -171,6 +229,7 @@
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
...@@ -219,6 +278,23 @@ ...@@ -219,6 +278,23 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
<configurationFile>src/main/resources/mybatis-generator.xml</configurationFile>
</configuration>
</plugin>
</plugins> </plugins>
</build> </build>
</project> </project>
package com.pica.cloud.account.account.server; package com.pica.cloud.account.account.server;
import com.pica.cloud.foundation.service.starter.XxlJobConfiguration;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
...@@ -9,7 +9,7 @@ import org.springframework.cloud.netflix.feign.EnableFeignClients; ...@@ -9,7 +9,7 @@ import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication(scanBasePackages = "com.pica.cloud", exclude = {XxlJobConfiguration.class}) @SpringBootApplication(scanBasePackages = "com.pica.cloud")
@EnableDiscoveryClient @EnableDiscoveryClient
@EnableSwagger2 @EnableSwagger2
@EnableFeignClients(basePackages = "com.pica.cloud") @EnableFeignClients(basePackages = "com.pica.cloud")
......
package com.pica.cloud.account.account.server; package com.pica.cloud.account.account.server;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.entity.Doctor;
import com.pica.cloud.account.account.server.entity.EncryptEntity; import com.pica.cloud.account.account.server.entity.EncryptEntity;
import com.pica.cloud.account.account.server.req.BaseRequest; import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.server.req.PatientReq;
import com.pica.cloud.account.account.server.util.AESUtil; import com.pica.cloud.account.account.server.util.AESUtil;
import com.pica.cloud.account.account.server.util.RSAUtil; import com.pica.cloud.account.account.server.util.RSAUtil;
import org.springframework.boot.autoconfigure.SpringBootApplication; import com.pica.cloud.foundation.encryption.common.constants.EncryptConstants;
import com.pica.cloud.foundation.encryption.util.EncryptUtils;
import java.util.ArrayList;
public class Test { public class Test {
...@@ -21,7 +22,7 @@ public class Test { ...@@ -21,7 +22,7 @@ public class Test {
//获取验证码参数 //获取验证码参数
BaseRequest request = new BaseRequest(); BaseRequest request = new BaseRequest();
request.setFlag(1); request.setFlag(3);
request.setMobile("13024112070"); request.setMobile("13024112070");
String string = JSONObject.toJSONString(request); String string = JSONObject.toJSONString(request);
System.out.println(string); System.out.println(string);
...@@ -83,15 +84,13 @@ public class Test { ...@@ -83,15 +84,13 @@ public class Test {
String publicKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa6j3SJwXr/pLLwb6Pq8pi9StPq+Wvm6vu+LWQB1hNqClWk0jQm5GnF6Kj0ac2gqgsMsutc3hhMaaX2QZvLX+gFQHC/ufGBdBbpPtDeGWsQItsMf/xqqlkLPkc7eVTyfsmrpQM7BG9LVvaPVXPVUcZfJNBaYuR4+Sf6Zi2ayI/hQIDAQAB"; String publicKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa6j3SJwXr/pLLwb6Pq8pi9StPq+Wvm6vu+LWQB1hNqClWk0jQm5GnF6Kj0ac2gqgsMsutc3hhMaaX2QZvLX+gFQHC/ufGBdBbpPtDeGWsQItsMf/xqqlkLPkc7eVTyfsmrpQM7BG9LVvaPVXPVUcZfJNBaYuR4+Sf6Zi2ayI/hQIDAQAB";
BaseRequest login = new BaseRequest(); BaseRequest login = new BaseRequest();
login.setMobile("13024112588"); login.setMobile("13024112588");
login.setPassword("d0dcbf0d12a6b1e7fbfa2ce5848f3eff"); login.setPassword("D0DCBF0D12A6B1E7FBFA2CE5848F3EFF"); //qq123456
String con = JSONObject.toJSONString(login); String contentResult = AESUtil.aesEncrypt(JSONObject.toJSONString(login), "YCPQPx4qpQjEjDea");
String contentResult = AESUtil.aesEncrypt(con, "YCPQPx4qpQjEjDea");
String keyResult = RSAUtil.encrypt("YCPQPx4qpQjEjDea",publicKey); String keyResult = RSAUtil.encrypt("YCPQPx4qpQjEjDea",publicKey);
EncryptEntity encryptTest = new EncryptEntity(); EncryptEntity encryptTest = new EncryptEntity();
encryptTest.setContent(contentResult); encryptTest.setContent(contentResult);
encryptTest.setKey(keyResult); encryptTest.setKey(keyResult);
System.out.println(JSONObject.toJSONString(encryptTest)); System.out.println(JSONObject.toJSONString(encryptTest));
System.out.println("--------------------修改密码接口-------------"); System.out.println("--------------------修改密码接口-------------");
BaseRequest changePwd = new BaseRequest(); BaseRequest changePwd = new BaseRequest();
changePwd.setOldPwd("D0DCBF0D12A6B1E7FBFA2CE5848F3EFF"); changePwd.setOldPwd("D0DCBF0D12A6B1E7FBFA2CE5848F3EFF");
...@@ -107,8 +106,8 @@ public class Test { ...@@ -107,8 +106,8 @@ public class Test {
System.out.println("--------------------获取验证码接口-------------"); System.out.println("--------------------获取验证码接口-------------");
BaseRequest authCode = new BaseRequest(); BaseRequest authCode = new BaseRequest();
authCode.setFlag(3); authCode.setFlag(1);
authCode.setMobile("13024112092"); authCode.setMobile("13024119988");
String authCodeStr = JSONObject.toJSONString(authCode); String authCodeStr = JSONObject.toJSONString(authCode);
System.out.println(authCodeStr); System.out.println(authCodeStr);
String contentResult2 = AESUtil.aesEncrypt(authCodeStr, "YCPQPx4qpQjEjDea"); String contentResult2 = AESUtil.aesEncrypt(authCodeStr, "YCPQPx4qpQjEjDea");
...@@ -122,9 +121,9 @@ public class Test { ...@@ -122,9 +121,9 @@ public class Test {
//获取注册参数 //获取注册参数
BaseRequest register = null; BaseRequest register = null;
register = new BaseRequest(); register = new BaseRequest();
register.setMobile("13024112092"); register.setMobile("13024119988");
register.setPassword("D0DCBF0D12A6B1E7FBFA2CE5848F3EFF"); register.setPassword("D0DCBF0D12A6B1E7FBFA2CE5848F3EFF");
register.setAuthCode("843895"); register.setAuthCode("868578");
String registerString3 = JSONObject.toJSONString(register); String registerString3 = JSONObject.toJSONString(register);
String contentResult3 = AESUtil.aesEncrypt(registerString3, "YCPQPx4qpQjEjDea"); String contentResult3 = AESUtil.aesEncrypt(registerString3, "YCPQPx4qpQjEjDea");
String keyResult3 = RSAUtil.encrypt("YCPQPx4qpQjEjDea",publicKey); String keyResult3 = RSAUtil.encrypt("YCPQPx4qpQjEjDea",publicKey);
...@@ -135,15 +134,22 @@ public class Test { ...@@ -135,15 +134,22 @@ public class Test {
System.out.println("--------------------一键登录接口-------------"); System.out.println("--------------------一键登录接口-------------");
BaseRequest loginRegister = null; BaseRequest loginRegister = null;
loginRegister = new BaseRequest(); loginRegister = new BaseRequest();
loginRegister.setMobile("13024112081"); loginRegister.setMobile("13024112588");
loginRegister.setAuthCode("163173"); loginRegister.setAuthCode("529196");
String registerString4 = JSONObject.toJSONString(loginRegister); String registerString4 = JSONObject.toJSONString(loginRegister);
//AES CONTENT
String contentResult4 = AESUtil.aesEncrypt(registerString4, "YCPQPx4qpQjEjDea"); String contentResult4 = AESUtil.aesEncrypt(registerString4, "YCPQPx4qpQjEjDea");
//RSA KEY
String keyResult4 = RSAUtil.encrypt("YCPQPx4qpQjEjDea",publicKey); String keyResult4 = RSAUtil.encrypt("YCPQPx4qpQjEjDea",publicKey);
EncryptEntity encryptTest4 = new EncryptEntity(); EncryptEntity encryptTest4 = new EncryptEntity();
encryptTest4.setContent(contentResult4); encryptTest4.setContent(contentResult4);
encryptTest4.setKey(keyResult4); encryptTest4.setKey(keyResult4);
System.out.println(JSONObject.toJSONString(encryptTest4)); System.out.println(JSONObject.toJSONString(encryptTest4));
...@@ -165,8 +171,8 @@ public class Test { ...@@ -165,8 +171,8 @@ public class Test {
System.out.println("--------------------忘记密码-------------"); System.out.println("--------------------忘记密码-------------");
BaseRequest forgetPwd = new BaseRequest(); BaseRequest forgetPwd = new BaseRequest();
forgetPwd.setPassword("0B9A75D6A88721A4BCF94F0FD668C56B"); forgetPwd.setPassword("0B9A75D6A88721A4BCF94F0FD668C56B");
forgetPwd.setMobile("13024112092"); forgetPwd.setMobile("13024112688");
forgetPwd.setAuthCode("095502"); forgetPwd.setAuthCode("997736");
String changePwdStr9 = JSONObject.toJSONString(forgetPwd); String changePwdStr9 = JSONObject.toJSONString(forgetPwd);
System.out.println(changePwdStr9); System.out.println(changePwdStr9);
String contentResult9 = AESUtil.aesEncrypt(changePwdStr9, "YCPQPx4qpQjEjDea"); String contentResult9 = AESUtil.aesEncrypt(changePwdStr9, "YCPQPx4qpQjEjDea");
...@@ -178,8 +184,9 @@ public class Test { ...@@ -178,8 +184,9 @@ public class Test {
System.out.println("--------------------修改手机号-------------"); System.out.println("--------------------修改手机号-------------");
BaseRequest changeMobile = new BaseRequest(); BaseRequest changeMobile = new BaseRequest();
changeMobile.setMobile("13024112092"); changeMobile.setMobile("13024112588");
changeMobile.setAuthCode("623849"); changeMobile.setAuthCode("510312");
changeMobile.setFlag(3);
String string1 = JSONObject.toJSONString(changeMobile); String string1 = JSONObject.toJSONString(changeMobile);
System.out.println(string1); System.out.println(string1);
String changeMobileContent = AESUtil.aesEncrypt(string1, "YCPQPx4qpQjEjDea"); String changeMobileContent = AESUtil.aesEncrypt(string1, "YCPQPx4qpQjEjDea");
...@@ -189,11 +196,28 @@ public class Test { ...@@ -189,11 +196,28 @@ public class Test {
changeMobileEntity.setContent(changeMobileContent); changeMobileEntity.setContent(changeMobileContent);
System.out.println(JSONObject.toJSONString(changeMobileEntity)); System.out.println(JSONObject.toJSONString(changeMobileEntity));
System.out.println("---------------------------------------------------------------");
}
BaseRequest changeMobileu = new BaseRequest();
changeMobileu.setMobile("13024112588");
changeMobileu.setAuthCode("871756");
changeMobileu.setUnionId("o3EP_wNH2g4FGcUNByXJIbQyUVPI");
changeMobileu.setFlag(2);
String string1u= JSONObject.toJSONString(changeMobileu);
System.out.println(string1u);
String changeMobileContentu = AESUtil.aesEncrypt(string1u, "YCPQPx4qpQjEjDea");
String changeMobileKeyu = RSAUtil.encrypt("YCPQPx4qpQjEjDea",publicKey);
EncryptEntity changeMobileEntityu = new EncryptEntity();
changeMobileEntityu.setKey(changeMobileKeyu);
changeMobileEntityu.setContent(changeMobileContentu);
System.out.println(JSONObject.toJSONString(changeMobileEntityu));
}
} }
package com.pica.cloud.account.account.server.configuration;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created on 2019/11/14 13:44
* author:crs
* Description:JobExecutorConfiguration
*/
@Configuration
public class JobExecutorConfiguration {
private Logger logger = LoggerFactory.getLogger(JobExecutorConfiguration.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info("pica-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppName(appName);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
package com.pica.cloud.account.account.server.configuration; package com.pica.cloud.account.account.server.configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@Configuration @Configuration
@RefreshScope //@RefreshScope
public class PropertiesConfiguration { public class PropertiesConfiguration {
private Logger logger = LoggerFactory.getLogger(PropertiesConfiguration.class);
@Value("${pica.cloud.message.url}") @Value("${pica.cloud.message.url}")
private String messageUrl; private String messageUrl;
@Value("${environment.name}")
private String environment;
public String getMessageUrl() { public String getMessageUrl() {
return messageUrl; return messageUrl;
...@@ -20,4 +25,8 @@ public class PropertiesConfiguration { ...@@ -20,4 +25,8 @@ public class PropertiesConfiguration {
this.messageUrl = messageUrl; this.messageUrl = messageUrl;
} }
public String getEnvironment(){
return environment;
}
} }
package com.pica.cloud.account.account.server.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @Description ThreadPoolConfig
* @Author Chongwen.jiang
* @Date 2020/2/27 16:37
* @ModifyDate 2020/2/27 16:37
* @Params
* @Return
*/
@Configuration
public class ThreadPoolConfig {
@Bean(name = "accountThreadPool")
public ThreadPoolTaskExecutor getExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(3);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(100);
executor.setKeepAliveSeconds(60);
executor.setThreadNamePrefix("account_ThreadPool");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
System.out.println("accountThreadPool init end-");
return executor;
}
}
...@@ -45,4 +45,34 @@ public class Constants { ...@@ -45,4 +45,34 @@ public class Constants {
*/ */
public static final String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/** 密码登录错误次数缓存key */
public static final String PWD_ERROR_NUM_KEY = "pwd-error-{mobile}";
/** 账号锁定缓存key */
public static final String ACCOUNT_LOCK_KEY = "account-lock-{mobile}";
/** 密码登录错误次数缓存时长*/
public static final int PWD_ERROR_NUM_SECONDS = 24 * 60 * 60;
/** 苹果后台获取公钥路径 */
public static final String APPLE_GET_PUBLIC_KEY_URL = "https://appleid.apple.com/auth/keys";
/** 苹果组织官网地址 */
public static final String APPLE_ISSUE_URL = "https://appleid.apple.com";
/** h5端发送短信验证码接口开关缓存key */
public static final String AUTHCODE_H5_SWITCH_KEY = "AUTH-CODE-H5-SWITCH";
/** 验证码缓存key前缀 */
public static final String AUTH_CODE_PREFIX = "authCode-";
/** 注册逻辑幂等处理缓存key */
public static final String REPEAT_REGISTER_PREFIX = "repeat-register—";
/** h5拼图缓存key */
public static final String JIGSAW_CODE_KEY = "jigsaw-code-{mobile}";
/** h5拼图缓存时长*/
public static final int JIGSAW_CODE_EXPIRE_SECONDS = 60;
/** 风控记录过数据 */
public static final String RC_RECORDED_DATA_KEY = "risk-{mobile}-{ip}";
} }
package com.pica.cloud.account.account.server.controller; package com.pica.cloud.account.account.server.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.configuration.PropertiesConfiguration; import com.pica.cloud.account.account.server.configuration.PropertiesConfiguration;
import com.pica.cloud.account.account.server.constants.Constants; import com.pica.cloud.account.account.server.constants.Constants;
...@@ -9,7 +10,9 @@ import com.pica.cloud.account.account.server.enums.AccountExceptionEnum; ...@@ -9,7 +10,9 @@ import com.pica.cloud.account.account.server.enums.AccountExceptionEnum;
import com.pica.cloud.account.account.server.exception.AccountException; import com.pica.cloud.account.account.server.exception.AccountException;
import com.pica.cloud.account.account.server.util.PICAPSendMsgModel; import com.pica.cloud.account.account.server.util.PICAPSendMsgModel;
import com.pica.cloud.foundation.entity.PicaException; import com.pica.cloud.foundation.entity.PicaException;
import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.entity.PicaResultCode; import com.pica.cloud.foundation.entity.PicaResultCode;
import com.pica.cloud.foundation.entity.PicaWarnException;
import com.pica.cloud.foundation.utils.constants.SysCode; import com.pica.cloud.foundation.utils.constants.SysCode;
import com.pica.cloud.foundation.utils.controller.BaseController; import com.pica.cloud.foundation.utils.controller.BaseController;
import com.pica.cloud.foundation.utils.entity.PicaUser; import com.pica.cloud.foundation.utils.entity.PicaUser;
...@@ -32,6 +35,10 @@ import java.util.*; ...@@ -32,6 +35,10 @@ import java.util.*;
*/ */
public abstract class AccountBaseController extends BaseController { public abstract class AccountBaseController extends BaseController {
private static final String KEY_PREFIX = "token-doctor-"; private static final String KEY_PREFIX = "token-doctor-";
private Logger logger = LoggerFactory.getLogger(AccountBaseController.class); private Logger logger = LoggerFactory.getLogger(AccountBaseController.class);
@Autowired @Autowired
...@@ -61,6 +68,19 @@ public abstract class AccountBaseController extends BaseController { ...@@ -61,6 +68,19 @@ public abstract class AccountBaseController extends BaseController {
} }
} }
public String getDeviceInfoLow(String key) {
String deviceInfo = this.getRequest().getHeader("deviceinfo");
if (StringUtils.isBlank(key) || StringUtils.isBlank(deviceInfo)) {
return StringUtils.EMPTY;
}
try {
JSONObject jsonObject = JSONObject.parseObject(deviceInfo);
return jsonObject.toJSONString();
} catch (Exception ex) {
return StringUtils.EMPTY;
}
}
//保存token,并返回token值(web或app,不包含h5) //保存token,并返回token值(web或app,不包含h5)
public String saveToken(String token, PicaUser picaUser) { public String saveToken(String token, PicaUser picaUser) {
if (StringUtils.isNotEmpty(token)) { if (StringUtils.isNotEmpty(token)) {
...@@ -123,12 +143,33 @@ public abstract class AccountBaseController extends BaseController { ...@@ -123,12 +143,33 @@ public abstract class AccountBaseController extends BaseController {
picapSendMsgModel.setSysName(SysCode.APP.sysName()); picapSendMsgModel.setSysName(SysCode.APP.sysName());
String postData = JSON.toJSONString(picapSendMsgModel); String postData = JSON.toJSONString(picapSendMsgModel);
logger.info("sendMobileTo-mobile:{}, senderId-{}",mobile, senderId);
long start = System.currentTimeMillis();
String jsonObj = HttpClientUtil.httpExecute(messageUrl, postData); String jsonObj = HttpClientUtil.httpExecute(messageUrl, postData);
if (StringUtils.isNotBlank(jsonObj)) { long end1 = System.currentTimeMillis();
logger.info("发送短信成功,返回结果:{}", jsonObj); logger.info("sendMobileMessage-send message used {} million seconds", end1-start);
} else { logger.info("sendMobileTo-{}", jsonObj);
logger.error("发送短信失败");
if (StringUtils.isEmpty(jsonObj)) {
logger.error("send message fail, response is empty");
throw new PicaWarnException(AccountExceptionEnum.PICA_MESSAGE_SERVICE_CALL_FAIL.getCode(),
AccountExceptionEnum.PICA_MESSAGE_SERVICE_CALL_FAIL.getMessage());
}
try {
PicaResponse resp = JSON.parseObject(jsonObj, PicaResponse.class);
if(Objects.nonNull(resp) && PicaResultCode.SUCCESS.code().equals(resp.getCode())){
logger.info("send message success, the result is: {}", jsonObj);
} else {
logger.error("send message fail, response code not equals success code");
throw new PicaWarnException(AccountExceptionEnum.PICA_MESSAGE_SERVICE_CALL_FAIL.getCode(),
AccountExceptionEnum.PICA_MESSAGE_SERVICE_CALL_FAIL.getMessage());
}
} catch (JSONException e) {
logger.error("send message fail, response object is not a json object");
throw new PicaWarnException(AccountExceptionEnum.PICA_MESSAGE_SERVICE_CALL_FAIL.getCode(),
AccountExceptionEnum.PICA_MESSAGE_SERVICE_CALL_FAIL.getMessage());
} }
} }
/** /**
...@@ -143,6 +184,7 @@ public abstract class AccountBaseController extends BaseController { ...@@ -143,6 +184,7 @@ public abstract class AccountBaseController extends BaseController {
accountUser.setLoginFrom(this.getSourceType()); accountUser.setLoginFrom(this.getSourceType());
accountUser.setLoginPlatform(this.getProductType()); accountUser.setLoginPlatform(this.getProductType());
accountUser.setLoginIp(super.getIpAddr()); accountUser.setLoginIp(super.getIpAddr());
accountUser.setUserTokenTourist(this.getUserTokenTourist());
return accountUser; return accountUser;
} }
...@@ -188,4 +230,9 @@ public abstract class AccountBaseController extends BaseController { ...@@ -188,4 +230,9 @@ public abstract class AccountBaseController extends BaseController {
} }
return null; return null;
} }
public String getUserTokenTourist() {
HttpServletRequest request = super.getRequest();
return request.getHeader("user_token_tourist");
}
} }
...@@ -34,14 +34,14 @@ public class CaptchaController { ...@@ -34,14 +34,14 @@ public class CaptchaController {
return PicaResponse.toResponse(captchaToken); return PicaResponse.toResponse(captchaToken);
} }
/*
@ApiOperation("校验图形验证码") @ApiOperation("校验图形验证码")
@GetMapping("/acknowledge") @GetMapping("/acknowledge")
public PicaResponse<Boolean> acknowledge(@ApiParam("token") @RequestParam("token") String token, public PicaResponse<Boolean> acknowledge(@ApiParam("captchaToken") @RequestParam("captchaToken") String captchaToken,
@ApiParam("answer") @RequestParam("answer") String answer) { @ApiParam("captchaAnswer") @RequestParam("captchaAnswer") String captchaAnswer) {
boolean valid = captchaService.acknowledge(token, answer); boolean valid = captchaService.acknowledge(captchaToken, captchaAnswer);
return PicaResponse.toResponse(valid); return PicaResponse.toResponse(valid);
} }
*/
} }
package com.pica.cloud.account.account.server.controller; package com.pica.cloud.account.account.server.controller;
import com.pica.cloud.account.account.server.util.AESUtil;
import com.pica.cloud.account.account.server.util.RSAUtil; import com.pica.cloud.account.account.server.util.RSAUtil;
import com.pica.cloud.foundation.entity.PicaResponse; import com.pica.cloud.foundation.entity.PicaResponse;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -7,6 +8,8 @@ import io.swagger.annotations.ApiOperation; ...@@ -7,6 +8,8 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
/** /**
...@@ -24,7 +27,24 @@ public class CipherController { ...@@ -24,7 +27,24 @@ public class CipherController {
@ApiOperation("获取公钥Key接口") @ApiOperation("获取公钥Key接口")
@GetMapping(value = "/cipher/key") @GetMapping(value = "/cipher/key")
public PicaResponse<String> getPublicKey() { public PicaResponse<String> getPublicKey() {
return PicaResponse.toResponse(rsaPublicKey); //提高qps 100 8失败率至 300 1 失败率
String testPubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa6j3SJwXr/pLLwb6Pq8pi9StPq+Wvm6vu+LWQB1hNqClWk0jQm5GnF6Kj0ac2gqgsMsutc3hhMaaX2QZvLX+gFQHC/ufGBdBbpPtDeGWsQItsMf/xqqlkLPkc7eVTyfsmrpQM7BG9LVvaPVXPVUcZfJNBaYuR4+Sf6Zi2ayI/hQIDAQAB";
String prodPubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnVzDlG6DJBwTsn7jFriKOmzqfm+d4vy6DtKqMfrEPg6hU3bfbR9XRfwqAFrS4+QowybpuyWCa7DFyKl0JyEa/GSrfjbXSpalFHhmWH0z0hCF1m/UvlPA0BaiYFy9ucXF9Uh8RaHkZGVmV+RbVISk4pjlZdRcK5EQ5hciBFGtgGwIDAQAB";
// return PicaResponse.toResponse(rsaPublicKey);
return PicaResponse.toResponse(rsaPublicKey); //
} }
// /**
// *
// * @param key
// * @return
// * @throws Exception
// */
// @ApiOperation("解密操作")
// @GetMapping(value = "/cipher/decrypt")
// public PicaResponse<String> decryptPublicKey(@RequestParam String key) throws Exception {
// return PicaResponse.toResponse(RSAUtil.decrypt(key, AESUtil.privateKey));
// }
} }
...@@ -48,7 +48,7 @@ public class DoctorController extends AccountBaseController { ...@@ -48,7 +48,7 @@ public class DoctorController extends AccountBaseController {
@ApiOperation("修改医生信息接口") @ApiOperation("修改医生信息接口")
@PutMapping(value = "/info", produces = "application/json;charset=utf-8") @PutMapping(value = "/info", produces = "application/json;charset=utf-8")
public PicaResponse modifyDoctorInfo(@RequestBody Doctor doctor) { public PicaResponse modifyDoctorInfo(@RequestBody Doctor doctor) {
doctorService.modifyDoctorInfo(doctor); doctorService.modifyDoctorInfo(doctor,super.getDoctorIdByToken());
return PicaResponse.toResponse(); return PicaResponse.toResponse();
} }
...@@ -64,7 +64,7 @@ public class DoctorController extends AccountBaseController { ...@@ -64,7 +64,7 @@ public class DoctorController extends AccountBaseController {
if (doctor != null && doctor.getMobilePhone() != null) { if (doctor != null && doctor.getMobilePhone() != null) {
AccountUtils.checkMobilePhone(doctor.getMobilePhone()); AccountUtils.checkMobilePhone(doctor.getMobilePhone());
AccountUtils.checkPassword(doctor.getPassword()); AccountUtils.checkPassword(doctor.getPassword());
Integer userId = doctorService.addDoctorInfo(doctor); Integer userId = doctorService.addDoctorInfo(doctor,super.getDoctorIdByToken());
return PicaResponse.toResponse(userId); return PicaResponse.toResponse(userId);
} else { } else {
throw new AccountException(AccountExceptionEnum.PICA_PARAMS_ERROR); throw new AccountException(AccountExceptionEnum.PICA_PARAMS_ERROR);
...@@ -75,7 +75,7 @@ public class DoctorController extends AccountBaseController { ...@@ -75,7 +75,7 @@ public class DoctorController extends AccountBaseController {
@ApiOperation("客服系统删除医生信息") @ApiOperation("客服系统删除医生信息")
@DeleteMapping(value = "/delete/{id}") @DeleteMapping(value = "/delete/{id}")
public PicaResponse deleteDoctor(@PathVariable("id") Integer id) { public PicaResponse deleteDoctor(@PathVariable("id") Integer id) {
doctorService.deleteDoctorInfo(id); doctorService.deleteDoctorInfo(id,super.getDoctorIdByToken());
return PicaResponse.toResponse(); return PicaResponse.toResponse();
} }
} }
...@@ -45,14 +45,17 @@ public class ModifyMobileController extends AccountBaseController { ...@@ -45,14 +45,17 @@ public class ModifyMobileController extends AccountBaseController {
public PicaResponse modifyMobile(@RequestBody EncryptEntity entity) throws Exception { public PicaResponse modifyMobile(@RequestBody EncryptEntity entity) throws Exception {
Long doctorId = super.getDoctorIdByToken(); Long doctorId = super.getDoctorIdByToken();
Doctor doctorInfo = doctorService.getDoctorInfo(doctorId.intValue()); Doctor doctorInfo = doctorService.getDoctorInfo(doctorId.intValue());
//旧的手机号
String mobilePhone = doctorInfo.getMobilePhone(); String mobilePhone = doctorInfo.getMobilePhone();
Integer acctId = modifyMobileService.getAcctIdByMobile(mobilePhone); Integer acctId = modifyMobileService.getAcctIdByMobile(mobilePhone);
BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class); BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class);
//新的手机号
String mobile = request.getMobile(); String mobile = request.getMobile();
accountUtils.checkMobilePhoneAndAuthCode(mobile, AccountTypeEnum.SYSCODE_TYPE_MODIFY_MOBILE.getCode() + "", request.getAuthCode()); accountUtils.checkMobilePhoneAndAuthCode(mobile, AccountTypeEnum.SYSCODE_TYPE_MODIFY_MOBILE.getCode() + "", request.getAuthCode());
//判断当前手机号是否已经注册过 //判断当前手机号是否已经注册过
AccountInfoEntity accountInfoEntity = accountService.getAccountByMobilePhone(mobile); AccountInfoEntity accountInfoEntity = accountService.getAccountByMobilePhone(mobile);
if (accountInfoEntity == null) { if (accountInfoEntity == null) {
modifyMobileService.recodeMobileModify(acctId,mobilePhone,mobile);
modifyMobileService.modify(acctId, mobile); modifyMobileService.modify(acctId, mobile);
return PicaResponse.toResponse(); return PicaResponse.toResponse();
} else { } else {
......
...@@ -3,18 +3,20 @@ package com.pica.cloud.account.account.server.controller; ...@@ -3,18 +3,20 @@ package com.pica.cloud.account.account.server.controller;
import com.pica.cloud.account.account.server.entity.AccountInfoEntity; import com.pica.cloud.account.account.server.entity.AccountInfoEntity;
import com.pica.cloud.account.account.server.entity.Doctor; import com.pica.cloud.account.account.server.entity.Doctor;
import com.pica.cloud.account.account.server.entity.EncryptEntity; import com.pica.cloud.account.account.server.entity.EncryptEntity;
import com.pica.cloud.account.account.server.enums.AccountTypeEnum; import com.pica.cloud.account.account.server.entity.LoginResult;
import com.pica.cloud.account.account.server.enums.AccountExceptionEnum; import com.pica.cloud.account.account.server.enums.AccountExceptionEnum;
import com.pica.cloud.account.account.server.enums.AccountTypeEnum;
import com.pica.cloud.account.account.server.enums.SourceTypeEnum;
import com.pica.cloud.account.account.server.exception.AccountException; import com.pica.cloud.account.account.server.exception.AccountException;
import com.pica.cloud.account.account.server.mapper.AccountInfoDetailMapper; import com.pica.cloud.account.account.server.mapper.AccountInfoDetailMapper;
import com.pica.cloud.account.account.server.req.BaseRequest; import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.server.service.DoctorService; import com.pica.cloud.account.account.server.service.DoctorService;
import com.pica.cloud.account.account.server.service.PasswordService; import com.pica.cloud.account.account.server.service.PasswordService;
import com.pica.cloud.account.account.server.service.RegisterService;
import com.pica.cloud.account.account.server.util.AESUtil; import com.pica.cloud.account.account.server.util.AESUtil;
import com.pica.cloud.account.account.server.util.AccountUtils; import com.pica.cloud.account.account.server.util.AccountUtils;
import com.pica.cloud.account.account.server.util.CryptoUtil; import com.pica.cloud.account.account.server.util.CryptoUtil;
import com.pica.cloud.foundation.entity.PicaResponse; import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.utils.entity.PicaUser;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -38,9 +40,11 @@ public class PasswordController extends AccountBaseController { ...@@ -38,9 +40,11 @@ public class PasswordController extends AccountBaseController {
@Autowired @Autowired
private DoctorService doctorService; private DoctorService doctorService;
@Autowired
private RegisterService registerService;
/** /**
* 修改密码 * 重置密码
* *
* @return * @return
*/ */
...@@ -78,11 +82,71 @@ public class PasswordController extends AccountBaseController { ...@@ -78,11 +82,71 @@ public class PasswordController extends AccountBaseController {
@PostMapping(value = "/reset") @PostMapping(value = "/reset")
public PicaResponse forgetPassword(@RequestBody EncryptEntity entity) throws Exception { public PicaResponse forgetPassword(@RequestBody EncryptEntity entity) throws Exception {
BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class); BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class);
accountUtils.checkMobilePhoneAndAuthCode(request.getMobile(), AccountTypeEnum.SYSCODE_TYPE_RESET_PASSWORD.getCode() + "", request.getAuthCode()); if (request.getBizType() != null &&
if (StringUtils.isEmpty(request.getPassword())) { request.getBizType().equals(1)) {
throw new AccountException(AccountExceptionEnum.PICA_PASSWORD_ERROR); AccountInfoEntity account = accountInfoDetailMapper.selectByMobile(AESUtil.encryptV0(request.getMobile()));
request.setProductType(super.getProductType());
if (account == null) {
if (SourceTypeEnum.APPLE.getCode().equals(super.getSourceType())) {
// 验证码校验
accountUtils.checkRegisterMobilePhoneAndAuthCode(
request.getMobile(),
AccountTypeEnum.SYSCODE_TYPE_FORGET_PASSWORD.getCode() + "",
request.getAuthCode());
} else {
// 验证码校验
accountUtils.checkRegisterMobilePhoneAndAuthCode(
request.getMobile(),
AccountTypeEnum.SYSCODE_TYPE_RESET_PASSWORD.getCode() + "",
request.getAuthCode());
}
if (StringUtils.isEmpty(request.getPassword())) {
throw new AccountException(AccountExceptionEnum.PICA_PASSWORD_ERROR);
}
// 新版-未注册-则默认注册
request.setSourceType(super.getSourceType());
request.setLoginIp(super.getIpAddr());
LoginResult result = registerService.register(request);
// 已补全密码
result.setEntireFlag(3);
return PicaResponse.toResponse(result);
} else {
// 新版-已注册了的则找回密码
reSetPwd(request, account);
// 后台生成token返回,删除账号锁定缓存
return PicaResponse.toResponse(passwordService.findPwdLogin(request, account));
}
} else {
// 老版
return reSetPwd(request, null);
}
}
/**
* @Description 找回密码
* @Author Chongwen.jiang
* @Date 2020/2/21 20:07
* @ModifyDate 2020/2/21 20:07
* @Params [request, entity]
* @Return com.pica.cloud.foundation.entity.PicaResponse
*/
private PicaResponse reSetPwd(BaseRequest request, AccountInfoEntity entity) {
// 4重置密码 5忘记密码
if (SourceTypeEnum.APPLE.getCode().equals(super.getSourceType())) {
// ios
accountUtils.checkMobilePhoneAndAuthCode(request.getMobile(), "5", request.getAuthCode());
if (StringUtils.isEmpty(request.getPassword())) {
throw new AccountException(AccountExceptionEnum.PICA_PASSWORD_ERROR);
}
passwordService.forgetPassword(request, entity);
return PicaResponse.toResponse();
} else {
accountUtils.checkMobilePhoneAndAuthCode(request.getMobile(), "4", request.getAuthCode());
if (StringUtils.isEmpty(request.getPassword())) {
throw new AccountException(AccountExceptionEnum.PICA_PASSWORD_ERROR);
}
passwordService.forgetPassword(request, entity);
return PicaResponse.toResponse();
} }
passwordService.forgetPassword(request);
return PicaResponse.toResponse();
} }
} }
//package com.pica.cloud.account.account.server.controller;
//
//import com.alibaba.fastjson.JSON;
//import com.pica.cloud.foundation.entity.PicaResponse;
//import com.pica.cloud.foundation.entity.PicaUser;
//import com.pica.cloud.foundation.redis.ICacheClient;
//
//import com.pica.cloud.foundation.service.starter.common.BaseController;
//import com.pica.cloud.foundation.service.starter.interceptor.LoginPermission;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.RestController;
//import redis.clients.jedis.Jedis;
//import redis.clients.jedis.JedisSentinelPool;
//
//import java.util.*;
//
//@RestController
//public class RedisTestController extends BaseController {
// @Autowired
// private ICacheClient redisClient;
//
// @RequestMapping(value = "/redis", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
// @LoginPermission
// public PicaResponse<Map<String, String>> redis() {
// // http://localhost:11501/hospital/hospitals/redis
// // cluster
// String token = getTokenFromHeader();
// Map<String, String> map = new HashMap<>();
// map.put("id", "1111111");
// map.put("token", token);
// map.put("sysCode", getSysCodeFromHeader());
//
// try {
// token = redisClient.saveToken(map, 3600);
// } catch (Exception ex) {
// // nothing to do
// }
// System.out.println(token);
// Map<String, String> map1 = redisClient.getToken(token);
// System.out.println(JSON.toJSON(map1));
// PicaUser user = fetchPicaUser();
// System.out.println(JSON.toJSON(user));
//
// // sentinel
// Set<String> set1 = new HashSet<>();
// set1.add("192.168.140.27:17000");
// set1.add("192.168.140.28:17000");
// set1.add("192.168.140.29:17000");
// JedisSentinelPool pool1 = new JedisSentinelPool("master01", set1, "Uu49Kz1olY85HQBu");
// Jedis jedis1 = pool1.getResource();
// System.out.println("sentinel dev - " + jedis1.get("token-" + token));
//
// Set<String> set2 = new HashSet<>();
// set2.add("192.168.110.68:17000");
// set2.add("192.168.110.69:17001");
// set2.add("192.168.110.70:17002");
// JedisSentinelPool pool2 = new JedisSentinelPool("master01", set2, "Uu49Kz1olY85HQBu");
// Jedis jedis2 = pool2.getResource();
// System.out.println("sentinel test - " + jedis2.get("token-" + token));
//
// Set<String> set3 = new HashSet<>();
// set3.add("192.168.110.177:17000");
// set3.add("192.168.110.178:17000");
// set3.add("192.168.110.179:17000");
// JedisSentinelPool pool3 = new JedisSentinelPool("master01", set3, "Uu49Kz1olY85HQBu");
// Jedis jedis3 = pool3.getResource();
// System.out.println("sentinel uat - " + jedis3.get("token-" + token));
//
// redisClient.deleteToken(token);
//
// try {
// PicaUser user1 = fetchPicaUser();
// } catch (Exception ex) {
// System.out.println("Exception -> the user has been deleted");
// }
//
// Map<String, String> map2 = new HashMap<>();
// map2.put("id", "1111111");
// map2.put("token", token);
// map2.put("sysCode", getSysCodeFromHeader());
// try {
// token = redisClient.saveToken(map2, 3600);
// } catch (Exception ex) {
// // nothing to do
// }
//
// String clusterKey = "cluster-key-001";
// String clusterValue = "cluster-value-001";
//
// redisClient.set(clusterKey, clusterValue);
// System.out.println("cluster -> " + redisClient.get(clusterKey));
// System.out.println("dev get cluster value -> " + pool1.getResource().get(clusterKey));
// System.out.println("test1 get cluster value -> " + pool2.getResource().get(clusterKey));
// System.out.println("uat get cluster value -> " + pool3.getResource().get(clusterKey));
//
// String sentKey = "sent-key-001";
// String sentValue = "sent-value-001";
// pool1.getResource().set(sentKey, sentValue);
// System.out.println("dev sentinel -> " + pool1.getResource().get(sentKey));
//
// pool2.getResource().set(sentKey, sentValue);
// System.out.println("test1 sentinel -> " + pool2.getResource().get(sentKey));
//
// pool3.getResource().set(sentKey, sentValue);
// System.out.println("uat sentinel -> " + pool3.getResource().get(sentKey));
//
// return PicaResponse.toResponse(token);
// }
//}
package com.pica.cloud.account.account.server.controller; package com.pica.cloud.account.account.server.controller;
import com.pica.cloud.account.account.common.req.OCINRequest;
import com.pica.cloud.account.account.server.entity.EncryptEntity; import com.pica.cloud.account.account.server.entity.EncryptEntity;
import com.pica.cloud.account.account.server.entity.LoginResult; import com.pica.cloud.account.account.server.entity.LoginResult;
import com.pica.cloud.account.account.server.enums.AccountExceptionEnum;
import com.pica.cloud.account.account.server.enums.AccountTypeEnum; import com.pica.cloud.account.account.server.enums.AccountTypeEnum;
import com.pica.cloud.account.account.server.exception.AccountException;
import com.pica.cloud.account.account.server.req.BaseRequest; import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.common.req.OCINRequest;
import com.pica.cloud.account.account.server.service.RegisterService; import com.pica.cloud.account.account.server.service.RegisterService;
import com.pica.cloud.account.account.server.util.AccountUtils; import com.pica.cloud.account.account.server.util.AccountUtils;
import com.pica.cloud.account.account.server.util.CryptoUtil; import com.pica.cloud.account.account.server.util.CryptoUtil;
import com.pica.cloud.foundation.entity.PicaException;
import com.pica.cloud.foundation.entity.PicaResponse; import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.redis.ICacheClient; import com.pica.cloud.foundation.redis.ICacheClient;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -28,9 +24,6 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -28,9 +24,6 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/register") @RequestMapping("/register")
public class RegisterController extends AccountBaseController { public class RegisterController extends AccountBaseController {
@Autowired @Autowired
private RegisterService registerService; private RegisterService registerService;
...@@ -38,7 +31,6 @@ public class RegisterController extends AccountBaseController { ...@@ -38,7 +31,6 @@ public class RegisterController extends AccountBaseController {
private AccountUtils accountUtils; private AccountUtils accountUtils;
@Autowired @Autowired
@Qualifier("cacheMigrateClient")
private ICacheClient redisClient; private ICacheClient redisClient;
@ApiOperation("PC端,移动端注册接口") @ApiOperation("PC端,移动端注册接口")
...@@ -49,15 +41,20 @@ public class RegisterController extends AccountBaseController { ...@@ -49,15 +41,20 @@ public class RegisterController extends AccountBaseController {
//接口幂等性处理(redis中没有就进行注册逻辑,如果已经存在,就不处理) //接口幂等性处理(redis中没有就进行注册逻辑,如果已经存在,就不处理)
String authCode = request.getAuthCode(); String authCode = request.getAuthCode();
String flag = AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode() + ""; String flag = AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode() + "";
accountUtils.checkMobilePhoneAndAuthCode(mobile, flag, authCode); //验证码验证的原子操作
accountUtils.checkRegisterMobilePhoneAndAuthCode(mobile, flag, authCode);
accountUtils.checkPassword(request.getPassword()); accountUtils.checkPassword(request.getPassword());
LoginResult result = null; LoginResult result = null;
request.setFlag(AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode()); request.setFlag(AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode());
request.setProductType(super.getProductType()); request.setProductType(super.getProductType());
request.setSourceType(super.getSourceType()); Integer sourceType = super.getSourceType();
request.setSourceType(sourceType);
request.setLoginIp(super.getIpAddr()); request.setLoginIp(super.getIpAddr());
request.setUserTokenTourist(super.getUserTokenTourist());
result = registerService.register(request); result = registerService.register(request);
if (sourceType==3){
result.setDoctorId("");
}
return PicaResponse.toResponse(result); return PicaResponse.toResponse(result);
} }
......
package com.pica.cloud.account.account.server.controller;
import com.pica.cloud.account.account.server.util.AESUtil;
import com.pica.cloud.foundation.entity.PicaResponse;
import io.swagger.annotations.Api;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Created on 2020/1/20 15:03
* author:crs
* Description:性能测试需要
*/
@Api(description = "性能测试接口")
@RequestMapping("/function")
@RestController
public class TestMobileController {
@GetMapping("/encry")
public PicaResponse getEncryMobile(String mobile) {
if (StringUtils.isNotEmpty(mobile)) {
return PicaResponse.toResponse(AESUtil.encryptV0(mobile));
} else {
return PicaResponse.toResponse(null, "数据为空");
}
}
}
...@@ -6,6 +6,8 @@ import io.swagger.annotations.Api; ...@@ -6,6 +6,8 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Map; import java.util.Map;
...@@ -30,6 +32,16 @@ public class TokenController extends AccountBaseController { ...@@ -30,6 +32,16 @@ public class TokenController extends AccountBaseController {
return PicaResponse.toResponse(token); return PicaResponse.toResponse(token);
} }
@ApiOperation(value = "token续时")
@GetMapping(value = "/token/continue")
public PicaResponse tokenContinueTime(
@RequestHeader(value = "token") String token,
@RequestHeader(value = "sourceType") Integer sourceType,
@RequestParam(value = "seconds", required = false) Integer seconds) throws Exception {
tokenService.tokenContinueTime(token, sourceType, seconds);
return PicaResponse.toResponse();
}
} }
package com.pica.cloud.account.account.server.entity;
import java.util.Date;
public class AccountAppleInfo {
private Integer id;
private String appleUserId;
private String appleId;
private String info;
private Integer deleteFlag;
private Integer createdId;
private Date createdTime;
private Integer modifiedId;
private Date modifiedTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAppleUserId() {
return appleUserId;
}
public void setAppleUserId(String appleUserId) {
this.appleUserId = appleUserId == null ? null : appleUserId.trim();
}
public String getAppleId() {
return appleId;
}
public void setAppleId(String appleId) {
this.appleId = appleId == null ? null : appleId.trim();
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info == null ? null : info.trim();
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Integer getCreatedId() {
return createdId;
}
public void setCreatedId(Integer createdId) {
this.createdId = createdId;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public Integer getModifiedId() {
return modifiedId;
}
public void setModifiedId(Integer modifiedId) {
this.modifiedId = modifiedId;
}
public Date getModifiedTime() {
return modifiedTime;
}
public void setModifiedTime(Date modifiedTime) {
this.modifiedTime = modifiedTime;
}
}
\ No newline at end of file
...@@ -15,6 +15,17 @@ public class AccountUser extends PicaUser { ...@@ -15,6 +15,17 @@ public class AccountUser extends PicaUser {
//登录ip //登录ip
private String loginIp; private String loginIp;
//用户本地token
private String userTokenTourist;
public String getUserTokenTourist() {
return userTokenTourist;
}
public void setUserTokenTourist(String userTokenTourist) {
this.userTokenTourist = userTokenTourist;
}
public Integer getAcctId() { public Integer getAcctId() {
return acctId; return acctId;
} }
......
// Copyright 2016-2101 Pica.
package com.pica.cloud.account.account.server.entity.AesBean;
/**
* @ClassName AesAuthCodeReq
* @Description TODO
* @Author peijun.zhao
* @Date 2020/4/21 18:33
* @ModifyDate 2020/4/21 18:33
* @Version 1.0
*/
public class AesAuthCodeReq {
private Integer bizType;
private String device_token;
private String mobile;
private Integer flag;
private String token;
private String authCode;
private String password;
/**
* 加密后的密文
*/
private String key;
/**
* 加密后的数据
*/
private String content;
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getDevice_token() {
return device_token;
}
public void setDevice_token(String device_token) {
this.device_token = device_token;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public Integer getFlag() {
return flag;
}
public void setFlag(Integer flag) {
this.flag = flag;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getAuthCode() {
return authCode;
}
public void setAuthCode(String authCode) {
this.authCode = authCode;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.pica.cloud.account.account.server.entity;
import java.util.Date;
public class Hospital {
private Integer id;
private Integer provinceId;
private String provinceName;
private Long cityId;
private String cityName;
private Long countyId;
private String countyName;
private Long townId;
private String townName;
private Long villageId;
private String villageName;
private String name;
private String hospitalAddress;
private Integer type;
private Integer orgType;
private Integer levelGrade;
private String contacts;
private String tel;
private Integer sourceType;
private Integer enable;
private Integer deleteFlag;
private Integer creatId;
private Date creatTime;
private Integer modifyId;
private Date modifyTime;
private Integer hospitalStatisticsType;
private Integer hospitalRank;
private String hospitalAlias;
private Integer parentId;
private String hospitalClass;
private String hospitalLevel;
private String hospitalGrade;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getProvinceId() {
return provinceId;
}
public void setProvinceId(Integer provinceId) {
this.provinceId = provinceId;
}
public String getProvinceName() {
return provinceName;
}
public void setProvinceName(String provinceName) {
this.provinceName = provinceName == null ? null : provinceName.trim();
}
public Long getCityId() {
return cityId;
}
public void setCityId(Long cityId) {
this.cityId = cityId;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName == null ? null : cityName.trim();
}
public Long getCountyId() {
return countyId;
}
public void setCountyId(Long countyId) {
this.countyId = countyId;
}
public String getCountyName() {
return countyName;
}
public void setCountyName(String countyName) {
this.countyName = countyName == null ? null : countyName.trim();
}
public Long getTownId() {
return townId;
}
public void setTownId(Long townId) {
this.townId = townId;
}
public String getTownName() {
return townName;
}
public void setTownName(String townName) {
this.townName = townName == null ? null : townName.trim();
}
public Long getVillageId() {
return villageId;
}
public void setVillageId(Long villageId) {
this.villageId = villageId;
}
public String getVillageName() {
return villageName;
}
public void setVillageName(String villageName) {
this.villageName = villageName == null ? null : villageName.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getHospitalAddress() {
return hospitalAddress;
}
public void setHospitalAddress(String hospitalAddress) {
this.hospitalAddress = hospitalAddress == null ? null : hospitalAddress.trim();
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getOrgType() {
return orgType;
}
public void setOrgType(Integer orgType) {
this.orgType = orgType;
}
public Integer getLevelGrade() {
return levelGrade;
}
public void setLevelGrade(Integer levelGrade) {
this.levelGrade = levelGrade;
}
public String getContacts() {
return contacts;
}
public void setContacts(String contacts) {
this.contacts = contacts == null ? null : contacts.trim();
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel == null ? null : tel.trim();
}
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public Integer getEnable() {
return enable;
}
public void setEnable(Integer enable) {
this.enable = enable;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Integer getCreatId() {
return creatId;
}
public void setCreatId(Integer creatId) {
this.creatId = creatId;
}
public Date getCreatTime() {
return creatTime;
}
public void setCreatTime(Date creatTime) {
this.creatTime = creatTime;
}
public Integer getModifyId() {
return modifyId;
}
public void setModifyId(Integer modifyId) {
this.modifyId = modifyId;
}
public Date getModifyTime() {
return modifyTime;
}
public void setModifyTime(Date modifyTime) {
this.modifyTime = modifyTime;
}
public Integer getHospitalStatisticsType() {
return hospitalStatisticsType;
}
public void setHospitalStatisticsType(Integer hospitalStatisticsType) {
this.hospitalStatisticsType = hospitalStatisticsType;
}
public Integer getHospitalRank() {
return hospitalRank;
}
public void setHospitalRank(Integer hospitalRank) {
this.hospitalRank = hospitalRank;
}
public String getHospitalAlias() {
return hospitalAlias;
}
public void setHospitalAlias(String hospitalAlias) {
this.hospitalAlias = hospitalAlias == null ? null : hospitalAlias.trim();
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getHospitalClass() {
return hospitalClass;
}
public void setHospitalClass(String hospitalClass) {
this.hospitalClass = hospitalClass == null ? null : hospitalClass.trim();
}
public String getHospitalLevel() {
return hospitalLevel;
}
public void setHospitalLevel(String hospitalLevel) {
this.hospitalLevel = hospitalLevel == null ? null : hospitalLevel.trim();
}
public String getHospitalGrade() {
return hospitalGrade;
}
public void setHospitalGrade(String hospitalGrade) {
this.hospitalGrade = hospitalGrade == null ? null : hospitalGrade.trim();
}
}
\ No newline at end of file
package com.pica.cloud.account.account.server.entity;
import java.util.Date;
public class LogLoginAes {
private Integer id;
private Integer channel;
private String mobile;
private Integer sourceType;
private String deviceToken;
private String deviceInfo;
private String oneToken;
private Integer createId;
private Date createTime;
private Integer modifyId;
private Date modifyTime;
private Integer deleteFlag;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getChannel() {
return channel;
}
public void setChannel(Integer channel) {
this.channel = channel;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile == null ? null : mobile.trim();
}
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public String getDeviceToken() {
return deviceToken;
}
public void setDeviceToken(String deviceToken) {
this.deviceToken = deviceToken == null ? null : deviceToken.trim();
}
public String getDeviceInfo() {
return deviceInfo;
}
public void setDeviceInfo(String deviceInfo) {
this.deviceInfo = deviceInfo == null ? null : deviceInfo.trim();
}
public String getOneToken() {
return oneToken;
}
public void setOneToken(String oneToken) {
this.oneToken = oneToken == null ? null : oneToken.trim();
}
public Integer getCreateId() {
return createId;
}
public void setCreateId(Integer createId) {
this.createId = createId;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Integer getModifyId() {
return modifyId;
}
public void setModifyId(Integer modifyId) {
this.modifyId = modifyId;
}
public Date getModifyTime() {
return modifyTime;
}
public void setModifyTime(Date modifyTime) {
this.modifyTime = modifyTime;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
}
\ No newline at end of file
...@@ -38,6 +38,38 @@ public class LogLoginEntity extends AccountLogEntity { ...@@ -38,6 +38,38 @@ public class LogLoginEntity extends AccountLogEntity {
private int deleteFlag; private int deleteFlag;
private String token;
private int isLogin;
private String userTokenTourist;
public int getIsLogin() {
return isLogin;
}
public void setIsLogin(int isLogin) {
this.isLogin = isLogin;
}
public String getUserTokenTourist() {
return userTokenTourist;
}
public void setUserTokenTourist(String userTokenTourist) {
this.userTokenTourist = userTokenTourist;
}
private QueryMobileEntity queryMobileEntity;
public QueryMobileEntity getQueryMobileEntity() {
return queryMobileEntity;
}
public void setQueryMobileEntity(QueryMobileEntity queryMobileEntity) {
this.queryMobileEntity = queryMobileEntity;
}
public Integer getId() { public Integer getId() {
return id; return id;
} }
...@@ -149,4 +181,12 @@ public class LogLoginEntity extends AccountLogEntity { ...@@ -149,4 +181,12 @@ public class LogLoginEntity extends AccountLogEntity {
public void setDeleteFlag(int deleteFlag) { public void setDeleteFlag(int deleteFlag) {
this.deleteFlag = deleteFlag; this.deleteFlag = deleteFlag;
} }
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
} }
\ No newline at end of file
package com.pica.cloud.account.account.server.entity;
import java.util.Date;
public class LogLoginOnekey {
private Integer id;
private Integer logLoginId;
private Integer deviceType;
private String mobile;
private String tradeNo;
private Integer fanqizha;
private String tag;
private String info;
private Integer deleteFlag;
private Integer createId;
private Date createTime;
private Integer modifyId;
private Date modifyTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getLogLoginId() {
return logLoginId;
}
public void setLogLoginId(Integer logLoginId) {
this.logLoginId = logLoginId;
}
public Integer getDeviceType() {
return deviceType;
}
public void setDeviceType(Integer deviceType) {
this.deviceType = deviceType;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile == null ? null : mobile.trim();
}
public String getTradeNo() {
return tradeNo;
}
public void setTradeNo(String tradeNo) {
this.tradeNo = tradeNo == null ? null : tradeNo.trim();
}
public Integer getFanqizha() {
return fanqizha;
}
public void setFanqizha(Integer fanqizha) {
this.fanqizha = fanqizha;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag == null ? null : tag.trim();
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info == null ? null : info.trim();
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Integer getCreateId() {
return createId;
}
public void setCreateId(Integer createId) {
this.createId = createId;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Integer getModifyId() {
return modifyId;
}
public void setModifyId(Integer modifyId) {
this.modifyId = modifyId;
}
public Date getModifyTime() {
return modifyTime;
}
public void setModifyTime(Date modifyTime) {
this.modifyTime = modifyTime;
}
}
\ No newline at end of file
package com.pica.cloud.account.account.server.entity;
import java.util.Date;
public class LogMobileModify {
private Integer id;
private Integer acctId;
private String mobilePhoneNew;
private String mobilePhoneOld;
private Date modifiedTime;
private Integer modifiedId;
private Integer deleteFlag;
private Integer createdId;
private Date createdTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAcctId() {
return acctId;
}
public void setAcctId(Integer acctId) {
this.acctId = acctId;
}
public String getMobilePhoneNew() {
return mobilePhoneNew;
}
public void setMobilePhoneNew(String mobilePhoneNew) {
this.mobilePhoneNew = mobilePhoneNew == null ? null : mobilePhoneNew.trim();
}
public String getMobilePhoneOld() {
return mobilePhoneOld;
}
public void setMobilePhoneOld(String mobilePhoneOld) {
this.mobilePhoneOld = mobilePhoneOld == null ? null : mobilePhoneOld.trim();
}
public Date getModifiedTime() {
return modifiedTime;
}
public void setModifiedTime(Date modifiedTime) {
this.modifiedTime = modifiedTime;
}
public Integer getModifiedId() {
return modifiedId;
}
public void setModifiedId(Integer modifiedId) {
this.modifiedId = modifiedId;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Integer getCreatedId() {
return createdId;
}
public void setCreatedId(Integer createdId) {
this.createdId = createdId;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
}
\ No newline at end of file
package com.pica.cloud.account.account.server.entity; package com.pica.cloud.account.account.server.entity;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.pica.cloud.account.account.server.util.AESUtil;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -14,7 +15,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -14,7 +15,7 @@ import io.swagger.annotations.ApiModelProperty;
public class LoginResult { public class LoginResult {
@ApiModelProperty("token") @ApiModelProperty("token")
private String token; private String token;
@ApiModelProperty("用户id") @ApiModelProperty("用户id,未加密处理Web需要")
private Long userId; private Long userId;
@ApiModelProperty("是否绑定") @ApiModelProperty("是否绑定")
private String bindFlag; private String bindFlag;
...@@ -22,6 +23,11 @@ public class LoginResult { ...@@ -22,6 +23,11 @@ public class LoginResult {
private String unionId; private String unionId;
@ApiModelProperty("是否完善过信息,1.信息未补全, 2信息已补全,3已补全密码") @ApiModelProperty("是否完善过信息,1.信息未补全, 2信息已补全,3已补全密码")
private int entireFlag; private int entireFlag;
@ApiModelProperty("未加密手机号")
private String mobile;
@ApiModelProperty("用户id,已经加密处理")
private String doctorId;
public String getToken() { public String getToken() {
return token; return token;
...@@ -62,4 +68,21 @@ public class LoginResult { ...@@ -62,4 +68,21 @@ public class LoginResult {
public void setEntireFlag(int entireFlag) { public void setEntireFlag(int entireFlag) {
this.entireFlag = entireFlag; this.entireFlag = entireFlag;
} }
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getDoctorId() {
return doctorId;
}
public void setDoctorId(String doctorId) {
this.doctorId = doctorId;
}
} }
package com.pica.cloud.account.account.server.entity;
/**
* @program: pica-cloud-account
* @description:
* @author: wfy
* @create: 2020-02-12 17:09
*/
public class MobileDataEntity {
private String mobileName;
private String tradeNo;
private Integer fanqizha;
private String tag;
public String getMobileName() {
return mobileName;
}
public void setMobileName(String mobileName) {
this.mobileName = mobileName;
}
public String getTradeNo() {
return tradeNo;
}
public void setTradeNo(String tradeNo) {
this.tradeNo = tradeNo;
}
public Integer getFanqizha() {
return fanqizha;
}
public void setFanqizha(Integer fanqizha) {
this.fanqizha = fanqizha;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
@Override
public String toString() {
return "MobileDataEntity{" +
"mobileName='" + mobileName + '\'' +
", tradeNo='" + tradeNo + '\'' +
", fanqizha=" + fanqizha +
", tag='" + tag + '\'' +
'}';
}
}
package com.pica.cloud.account.account.server.entity;
import java.util.Date;
/**
* @author andong
* @create 2019/11/18
*/
public class PProtocolLog {
private Integer id;
private String userId;
private Integer protocolId;
private Short status;
private Integer type;
private Integer userType;
private Integer deleteFlag;
private Integer createdId;
private Date createdTime;
private Integer modifiedId;
private Date modifiedTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public Integer getProtocolId() {
return protocolId;
}
public void setProtocolId(Integer protocolId) {
this.protocolId = protocolId;
}
public Short getStatus() {
return status;
}
public void setStatus(Short status) {
this.status = status;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getUserType() {
return userType;
}
public void setUserType(Integer userType) {
this.userType = userType;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Integer getCreatedId() {
return createdId;
}
public void setCreatedId(Integer createdId) {
this.createdId = createdId;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public Integer getModifiedId() {
return modifiedId;
}
public void setModifiedId(Integer modifiedId) {
this.modifiedId = modifiedId;
}
public Date getModifiedTime() {
return modifiedTime;
}
public void setModifiedTime(Date modifiedTime) {
this.modifiedTime = modifiedTime;
}
}
package com.pica.cloud.account.account.server.entity;
import java.util.Date;
public class PUserRole {
private Integer id;
private Integer systemId;
private Integer userRoleId;
private Integer userId;
private Integer userType;
private String param1;
private String param2;
private String param3;
private String param4;
private String param5;
private Integer status;
private Integer deleteFlag;
private Integer creatId;
private Date creatTime;
private Integer modifyId;
private Date modifyTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getSystemId() {
return systemId;
}
public void setSystemId(Integer systemId) {
this.systemId = systemId;
}
public Integer getUserRoleId() {
return userRoleId;
}
public void setUserRoleId(Integer userRoleId) {
this.userRoleId = userRoleId;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getUserType() {
return userType;
}
public void setUserType(Integer userType) {
this.userType = userType;
}
public String getParam1() {
return param1;
}
public void setParam1(String param1) {
this.param1 = param1 == null ? null : param1.trim();
}
public String getParam2() {
return param2;
}
public void setParam2(String param2) {
this.param2 = param2 == null ? null : param2.trim();
}
public String getParam3() {
return param3;
}
public void setParam3(String param3) {
this.param3 = param3 == null ? null : param3.trim();
}
public String getParam4() {
return param4;
}
public void setParam4(String param4) {
this.param4 = param4 == null ? null : param4.trim();
}
public String getParam5() {
return param5;
}
public void setParam5(String param5) {
this.param5 = param5 == null ? null : param5.trim();
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Integer getCreatId() {
return creatId;
}
public void setCreatId(Integer creatId) {
this.creatId = creatId;
}
public Date getCreatTime() {
return creatTime;
}
public void setCreatTime(Date creatTime) {
this.creatTime = creatTime;
}
public Integer getModifyId() {
return modifyId;
}
public void setModifyId(Integer modifyId) {
this.modifyId = modifyId;
}
public Date getModifyTime() {
return modifyTime;
}
public void setModifyTime(Date modifyTime) {
this.modifyTime = modifyTime;
}
}
\ No newline at end of file
package com.pica.cloud.account.account.server.entity;
import java.util.Date;
public class PermissionDoctorRole {
private Long id;
private Long doctorId;
private Long hospitalId;
private Long roleId;
private Integer deleteFlag;
private Long createdId;
private Date createdTime;
private Long modifiedId;
private Date modifiedTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getDoctorId() {
return doctorId;
}
public void setDoctorId(Long doctorId) {
this.doctorId = doctorId;
}
public Long getHospitalId() {
return hospitalId;
}
public void setHospitalId(Long hospitalId) {
this.hospitalId = hospitalId;
}
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Long getCreatedId() {
return createdId;
}
public void setCreatedId(Long createdId) {
this.createdId = createdId;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public Long getModifiedId() {
return modifiedId;
}
public void setModifiedId(Long modifiedId) {
this.modifiedId = modifiedId;
}
public Date getModifiedTime() {
return modifiedTime;
}
public void setModifiedTime(Date modifiedTime) {
this.modifiedTime = modifiedTime;
}
}
\ No newline at end of file
package com.pica.cloud.account.account.server.entity;
/**
* @program: pica-cloud-account
* @description:
* @author: wfy
* @create: 2020-02-12 17:06
*/
public class QueryMobileEntity {
private String code;
private String message;
private Integer chargeStatus;
private MobileDataEntity data;
private String mobile;
private Integer sourceType;
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getChargeStatus() {
return chargeStatus;
}
public void setChargeStatus(Integer chargeStatus) {
this.chargeStatus = chargeStatus;
}
public MobileDataEntity getData() {
return data;
}
public void setData(MobileDataEntity data) {
this.data = data;
}
@Override
public String toString() {
return "QueryMobileEntity{" +
"code='" + code + '\'' +
", message='" + message + '\'' +
", chargeStatus=" + chargeStatus +
", data=" + data +
", mobile='" + mobile + '\'' +
", sourceType=" + sourceType +
'}';
}
}
...@@ -25,7 +25,39 @@ public enum AccountExceptionEnum { ...@@ -25,7 +25,39 @@ public enum AccountExceptionEnum {
PICA_PARAMS_ERROR("216517", "传递参数有误"), PICA_PARAMS_ERROR("216517", "传递参数有误"),
PICA_SYSCODE_RETRY("216518", "请X秒后重试"), PICA_SYSCODE_RETRY("216518", "请X秒后重试"),
PICA_NOT_EXIST("216519", "该用户不存在"), PICA_NOT_EXIST("216519", "该用户不存在"),
PICA_REGISTER_FAIL("216520", "注册失败"); PICA_REGISTER_FAIL("216520", "注册失败"),
PICA_WECHAT_CODE_ERROR("216521", "微信登录授权code不正确"),
PICA_WECHAT_UNBIND("216522", "该微信号已绑定其他云鹊医账户,你可以使用微信登录云鹊医,在「设置」页解除绑定"),
PICA_WECHAT_BIND_OTHER("216524", "该手机号已绑定其他微信号,你可以在「设置」页解除绑定"),
PICA_WECHAT_UNBIND_CURRENT("216523", "正在绑定中,请稍等"),
PICA_PASSWORD_RULE_ERROR("216525","该手机号{mobile}尚未设置密码,请先设置密码。"),
PICA_PWD_MISMATCH_4("216526", "密码错误,请重试"),
PICA_PWD_MISMATCH_5("216527", "该账号{mobile}的密码错误次数已达上限请24小时后再试,或请使用其他登录方式或找回密码"),
PICA_APPLE_TOKEN_ERROR("216528", "Apple登录授权token不正确"),
PICA_APPLE_BIND_OTHER("216529", "该Apple账号已绑定其他账户"),
PICA_MOBILE_BIND_OTHER("216530", "该手机号已绑定其他Apple账号"),
PICA_MOBILE_REG_FALSE("216531", "请输入正确的手机号"),
PICA_MOBILE_NOT_REGIST("216533", "该手机号{mobile}尚未设置密码,请先设置密码。"),
PICA_MOBILE_NOT_SETED_PASSWORD("216534", "该手机号{mobile}尚未设置密码,请先设置密码。"),
// 风控禁止发送
PICA_RC_SEND_FAIL("216536", "发送异常"),
PICA_RC_TRIGGER("216537", "需要触发风控滑动验证"),
// 账号、IP、设备在黑名单内,前端提示发送成功,后端不发送短信
PICA_RC_BLACKLIST("216538", "发送成功"),
PICA_RC_DAY_LIMIT("216539", "今日获取验证码次数已超过上限,请使用账户密码登录"),
PICA_RC_60_SECOND_LIMIT("216540", "验证码发送频率过高,请{remainTime}秒后再试"),
PICA_MESSAGE_SERVICE_CALL_FAIL("216542", "短信发送失败"),
PICA_BIND_WECHAT_FAIL("216543", "绑定微信失败"),
PICA_CAP_CODE_ERROR("216544", "拼图验证失败"),
PICA_CAP_GET_INVOKE_ERROR("216545", "拼图获取失败"),
PICA_RC_BUSINESS_ERROR("216546", "参数格式错误"),
PICA_MOBILE_NOT_REGIST_H5("216547", "该手机号尚未设置密码,设置密码请前往云鹊医APP,或使用其他方式登录。"),
PICA_MOBILE_NOT_SETED_PASSWORD_H5("216548", "该手机号尚未设置密码,设置密码请前往云鹊医APP,或使用其他方式登录。"),
PICA_PWD_MISMATCH_5_H5("216549", "该账号密码错误次数已达上限请24小时后再试,或请使用其他登录方式"),
xxx_xxx("","");
private String code; private String code;
......
...@@ -13,6 +13,8 @@ public enum AccountTypeEnum { ...@@ -13,6 +13,8 @@ public enum AccountTypeEnum {
LOGIN_WE_CHAT(3, "微信登录"), LOGIN_WE_CHAT(3, "微信登录"),
LOGIN_OUT(4, "退出登录"), LOGIN_OUT(4, "退出登录"),
LOGIN_REGISTER(5, "注册登录"), LOGIN_REGISTER(5, "注册登录"),
LOGIN_APPLE(6, "Apple登录"),
LOGIN_ONE_CLICK(7, "一键登录"),
//登录态相关枚举 //登录态相关枚举
LOGIN_STATUS_SUCCESS(1, "登录成功"), LOGIN_STATUS_SUCCESS(1, "登录成功"),
...@@ -30,18 +32,23 @@ public enum AccountTypeEnum { ...@@ -30,18 +32,23 @@ public enum AccountTypeEnum {
DEVICE_TYPE_ADMIN(5, "admin"), DEVICE_TYPE_ADMIN(5, "admin"),
//验证码获取类型: flag:0登录(默认)1注册 2微信登录绑定手机 3修改手机 4重置密码 //验证码获取类型: flag:0登录(默认)1注册 2微信登录绑定手机 3修改手机 4重置密码
//5忘记密码 7患者招募提交问卷(效验) 8Appe登录绑定手机
SYSCODE_TYPE_LOGIN(0, "登录"), SYSCODE_TYPE_LOGIN(0, "登录"),
SYSCODE_TYPE_REGISTER(1, "注册"), SYSCODE_TYPE_REGISTER(1, "注册"),
SYSCODE_TYPE_WE_CHAT(2, "微信登录绑定手机"), SYSCODE_TYPE_WE_CHAT(2, "微信登录绑定手机"),
SYSCODE_TYPE_MODIFY_MOBILE(3, "修改手机号"), SYSCODE_TYPE_MODIFY_MOBILE(3, "修改手机号"),
SYSCODE_TYPE_RESET_PASSWORD(4, "重置密码"), SYSCODE_TYPE_RESET_PASSWORD(4, "重置密码"),
SYSCODE_TYPE_FORGET_PASSWORD(5, "重置密码"),
SYSCODE_TYPE_SMO_COMIIT_QUESTIONNAIRE(6, "患者招募提交问卷"),
SYSCODE_TYPE_APPLE(8, "Appe登录绑定手机"),
//联合登录类型 //联合登录类型
UNION_LOGIN_WE_CHAT(1, "微信"), UNION_LOGIN_WE_CHAT(1, "微信"),
UNION_LOGIN_QQ(2, "QQ"), UNION_LOGIN_QQ(2, "QQ"),
union_login_blog(3, "微博"), union_login_blog(3, "微博"),
UNION_LOGIN_APPLE(4, "苹果"),
//微信绑定状态 //微信/apple绑定状态
BIND_STATUS_SUCCESS(1, "已绑定"), BIND_STATUS_SUCCESS(1, "已绑定"),
BIND_STATUS_FAILURE(0, "未绑定"), BIND_STATUS_FAILURE(0, "未绑定"),
......
package com.pica.cloud.account.account.server.enums;
/**
* @Description 统一校验响应枚举类
* @Author Chongwen.jiang
* @Date 2020/2/20 18:19
* @ModifyDate 2020/2/20 18:19
* @Params
* @Return
*/
public enum RcRepTypeEnum {
// 风控禁止发送
RC_ALLOW_SEND_MSG("1", "允许发送"),
RC_SEND_FAIL("2", "发送失败"),
RC_TRIGGER("3", "需要触发风控滑动验证"),
// 账号、IP、设备在黑名单内,前端提示发送成功,后端不发送短信
RC_BLACKLIST("4", "发送成功"),
RC_DAY_LIMIT("5", "今日获取验证码次数已超过上限,请使用账户密码登录"),
RC_60_SECOND_LIMIT("6", "验证码发送频率过高,请{remainTime}秒后再试"),
XXX("0", "xxxxxx");
private String code;
private String msg;
RcRepTypeEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setType(String msg) {
this.msg = msg;
}
}
package com.pica.cloud.account.account.server.enums;
/**
* @Description 统一校验业务类型枚举类
* @Author Chongwen.jiang
* @Date 2020/2/20 18:19
* @ModifyDate 2020/2/20 18:19
* @Params
* @Return
*/
public enum SourceTypeEnum {
ANDROID(1, "安卓"),
APPLE(2, "ios"),
SAAS(3, "saas"),
H5(4, "h5"),
ADMIN(5, "admin"),
XXX(10, "xxxxxx");
private Integer code;
private String type;
SourceTypeEnum(Integer code, String type) {
this.code = code;
this.type = type;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
package com.pica.cloud.account.account.server.job;
import com.pica.cloud.account.account.server.mapper.AccountInfoDetailMapper;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* Created on 2019/10/29 15:37
* author:crs
* Description:doctor表重复记录处理
*/
@JobHandler(value = "AccountRepeatDataJob")
@Component
public class AccountRepeatDataJob extends IJobHandler {
@Autowired
private AccountInfoDetailMapper accountInfoDetailMapper;
@Override
public ReturnT<String> execute(String s) throws Exception {
accountInfoDetailMapper.processAccountRepeatData();
XxlJobLogger.log("repeat date-----");
return SUCCESS;
}
}
package com.pica.cloud.account.account.server.job;
import com.pica.cloud.account.account.server.mapper.DoctorMapper;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* Created on 2019/12/16 17:53
* author:crs
* Description:记录doctor修改记录日志
*/
//@JobHandler(value = "DoctorLogHandler")
//@Component
//public class DoctorLogHandler extends IJobHandler {
//
// @Autowired
// private DoctorMapper doctorMapper;
//
// @Override
// public ReturnT<String> execute(String s) throws Exception {
// XxlJobLogger.log("doctorLogRecord start-----");
// Integer rows = doctorMapper.updateDoctorModifyRecord();
// XxlJobLogger.log("doctorLogRecord end-----"+rows);
// return SUCCESS;
// }
//}
...@@ -15,41 +15,41 @@ import org.springframework.stereotype.Component; ...@@ -15,41 +15,41 @@ import org.springframework.stereotype.Component;
* author:crs * author:crs
* Description:doctor表重复记录处理 * Description:doctor表重复记录处理
*/ */
@Component //@Component
public class DoctorRepeatDataJob { //public class DoctorRepeatDataJob {
private final String KEY = "cache_process_doctor_repeat"; // private final String KEY = "cacheProcessDoctorRepeat";
//
private Logger logger = LoggerFactory.getLogger(this.getClass()); // private Logger logger = LoggerFactory.getLogger(this.getClass());
//
@Autowired // @Autowired
@Qualifier("cacheMigrateClient") //
private ICacheClient cacheClient; // private ICacheClient cacheClient;
//
@Autowired // @Autowired
private DoctorMapper doctorMapper; // private DoctorMapper doctorMapper;
//
/** // /**
* 1、使用分布式锁保证一个微服务执行; // * 1、使用分布式锁保证一个微服务执行;
* 2、定时任务; // * 2、定时任务;
*/ // */
@Scheduled(cron = "0 0 0 1/1 * ?") // @Scheduled(cron = "0 0 0/1 * * ?")
public void processDoctorRepeatData() { // public void processDoctorRepeatData() {
Long result = cacheClient.setnx(KEY, "1"); // //通过接口幂等性逻辑处理
//如果为1说明获取到分布式锁 // String exist = cacheClient.get(KEY);
if (result == 1) { // if (exist==null){
//10分钟后锁过期 // cacheClient.set(KEY,"1");
cacheClient.expire(KEY, 60 * 10); // cacheClient.expire(KEY, 60 * 10);
logger.info("开始执行刷新doctor表中重复的记录"); // logger.info("DoctorRepeatDataJob:开始执行刷新doctor表中重复的记录");
int row = doctorMapper.processDoctorRepeatData(); // int row = doctorMapper.processDoctorRepeatData();
logger.info("此次数据刷新影响的行数:{}", row); // logger.info("此次数据刷新影响的行数:{}", row);
try { // try {
//防止任务一秒跑完,其他机器的时间晚了几秒 // //防止任务一秒跑完,其他机器的时间晚了几秒
Thread.sleep(30*1000); // Thread.sleep(30*1000);
} catch (InterruptedException ex) { // } catch (InterruptedException ex) {
logger.error(ex.getMessage(), ex); // logger.error(ex.getMessage(), ex);
} // }
//释放锁 // //释放锁
cacheClient.del(KEY); // cacheClient.del(KEY);
} // }
} // }
} //}
package com.pica.cloud.account.account.server.job;
import com.pica.cloud.account.account.server.mapper.HospitalMapper;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* Created on 2019/12/16 17:53
* author:crs
* Description:记录doctor修改记录日志
*/
//@JobHandler(value = "HospitalLogHandler")
//@Component
//public class HospitalLogHandler extends IJobHandler {
//
// @Autowired
// private HospitalMapper hospitalMapper;
//
// @Override
// public ReturnT<String> execute(String s) throws Exception {
// XxlJobLogger.log("hospitalLogRecord start-----");
// Integer rows = hospitalMapper.updateDoctorModifyRecord();
// XxlJobLogger.log("hospitalLogRecord end-----"+rows);
// return SUCCESS;
// }
//}
package com.pica.cloud.account.account.server.job;
import com.pica.cloud.account.account.server.mapper.PermissionDoctorRoleMapper;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* Created on 2019/12/16 17:53
* author:crs
* Description:记录doctor修改记录日志
*/
@JobHandler(value = "PermissionRoleLogHandler")
@Component
public class PermissionRoleLogHandler extends IJobHandler {
@Autowired
private PermissionDoctorRoleMapper permissionDoctorRoleMapper;
@Override
public ReturnT<String> execute(String s) throws Exception {
XxlJobLogger.log("permissionRoleLogRecord start-----");
Integer rows = permissionDoctorRoleMapper.updatePermissionModifyRecord();
XxlJobLogger.log("permissionLogRecord end-----"+rows);
return SUCCESS;
}
}
...@@ -21,7 +21,7 @@ public class AccountLogEntityUtils { ...@@ -21,7 +21,7 @@ public class AccountLogEntityUtils {
* @return * @return
*/ */
public static LogLoginEntity getLogLoginEntity(Integer acctId, Integer productType, Integer sourceType, public static LogLoginEntity getLogLoginEntity(Integer acctId, Integer productType, Integer sourceType,
int code, String ipAddr, int code1, int code2) { int code, String ipAddr, int code1, int code2,String token,int isLogin,String userTokenTourist) {
LogLoginEntity entity = new LogLoginEntity(); LogLoginEntity entity = new LogLoginEntity();
Date currentTime = new Date(); Date currentTime = new Date();
entity.setAcctId(acctId); entity.setAcctId(acctId);
...@@ -37,6 +37,9 @@ public class AccountLogEntityUtils { ...@@ -37,6 +37,9 @@ public class AccountLogEntityUtils {
entity.setLoginIp(ipAddr); entity.setLoginIp(ipAddr);
entity.setLoginStatus(code1); entity.setLoginStatus(code1);
entity.setLogType(code2); entity.setLogType(code2);
entity.setToken(token);
entity.setIsLogin(isLogin);
entity.setUserTokenTourist(userTokenTourist);
return entity; return entity;
} }
......
...@@ -4,11 +4,13 @@ package com.pica.cloud.account.account.server.log; ...@@ -4,11 +4,13 @@ package com.pica.cloud.account.account.server.log;
import com.pica.cloud.account.account.server.entity.LogLoginEntity; import com.pica.cloud.account.account.server.entity.LogLoginEntity;
import com.pica.cloud.account.account.server.entity.LogPWDModifyEntity; import com.pica.cloud.account.account.server.entity.LogPWDModifyEntity;
import com.pica.cloud.account.account.server.entity.LogUserInfoEntity; import com.pica.cloud.account.account.server.entity.LogUserInfoEntity;
import com.pica.cloud.account.account.server.entity.QueryMobileEntity;
import com.pica.cloud.account.account.server.enums.AccountTypeEnum; import com.pica.cloud.account.account.server.enums.AccountTypeEnum;
import com.pica.cloud.account.account.server.mapper.LogLoginMapper; import com.pica.cloud.account.account.server.mapper.LogLoginMapper;
import com.pica.cloud.account.account.server.mapper.LogPWDModifyMapper; import com.pica.cloud.account.account.server.mapper.LogPWDModifyMapper;
import com.pica.cloud.account.account.server.mapper.LogUserInfoMapper; import com.pica.cloud.account.account.server.mapper.LogUserInfoMapper;
import com.pica.cloud.account.account.server.model.OneClickProcessor;
import com.pica.cloud.account.account.server.util.BeanUtil; import com.pica.cloud.account.account.server.util.BeanUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -28,6 +30,8 @@ public class AccountLogTask implements Runnable { ...@@ -28,6 +30,8 @@ public class AccountLogTask implements Runnable {
private LogUserInfoMapper logUserInfoMapper; private LogUserInfoMapper logUserInfoMapper;
private OneClickProcessor oneClickProcessor;
/** /**
* 日志类型 * 日志类型
*/ */
...@@ -44,6 +48,8 @@ public class AccountLogTask implements Runnable { ...@@ -44,6 +48,8 @@ public class AccountLogTask implements Runnable {
loginLogMapper = BeanUtil.getBean(LogLoginMapper.class); loginLogMapper = BeanUtil.getBean(LogLoginMapper.class);
logPWDModifyMapper = BeanUtil.getBean(LogPWDModifyMapper.class); logPWDModifyMapper = BeanUtil.getBean(LogPWDModifyMapper.class);
logUserInfoMapper = BeanUtil.getBean(LogUserInfoMapper.class); logUserInfoMapper = BeanUtil.getBean(LogUserInfoMapper.class);
oneClickProcessor = BeanUtil.getBean(OneClickProcessor.class);
} }
@Override @Override
...@@ -53,6 +59,11 @@ public class AccountLogTask implements Runnable { ...@@ -53,6 +59,11 @@ public class AccountLogTask implements Runnable {
if (type == AccountTypeEnum.LOG_TYPE_LOGIN.getCode()) { if (type == AccountTypeEnum.LOG_TYPE_LOGIN.getCode()) {
logger.info("login record......"); logger.info("login record......");
loginLogMapper.insert((LogLoginEntity) picaLogEntity); loginLogMapper.insert((LogLoginEntity) picaLogEntity);
QueryMobileEntity queryMobileEntity = ((LogLoginEntity) picaLogEntity).getQueryMobileEntity();
if(queryMobileEntity != null){
// 记录一键登录日志
oneClickProcessor.savelogLoginOnekey(queryMobileEntity,((LogLoginEntity) picaLogEntity).getId());
}
} else if (type == AccountTypeEnum.LOG_TYPE_PASSWORD.getCode()) { } else if (type == AccountTypeEnum.LOG_TYPE_PASSWORD.getCode()) {
logPWDModifyMapper.insert((LogPWDModifyEntity) picaLogEntity); logPWDModifyMapper.insert((LogPWDModifyEntity) picaLogEntity);
} else if (type == AccountTypeEnum.LOG_TYPE_USER_INFO.getCode()) { } else if (type == AccountTypeEnum.LOG_TYPE_USER_INFO.getCode()) {
......
package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.AccountAppleInfo;
import org.apache.ibatis.annotations.Param;
public interface AccountAppleInfoMapper {
int insert(AccountAppleInfo record);
int insertSelective(AccountAppleInfo record);
AccountAppleInfo selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(AccountAppleInfo record);
int updateByPrimaryKey(AccountAppleInfo record);
AccountAppleInfo selectByUserId(@Param("id") String appleUserId);
}
\ No newline at end of file
...@@ -2,6 +2,9 @@ package com.pica.cloud.account.account.server.mapper; ...@@ -2,6 +2,9 @@ package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.AccountInfoEntity; import com.pica.cloud.account.account.server.entity.AccountInfoEntity;
import org.apache.ibatis.annotations.Param;
import java.util.HashMap;
public interface AccountInfoDetailMapper { public interface AccountInfoDetailMapper {
/** /**
...@@ -58,5 +61,8 @@ public interface AccountInfoDetailMapper { ...@@ -58,5 +61,8 @@ public interface AccountInfoDetailMapper {
int insertSelective(AccountInfoEntity record); int insertSelective(AccountInfoEntity record);
void updateDeleteByPrimaryKey(Integer acctId); void updateDeleteByPrimaryKey(@Param("map") HashMap<String, Long> map);
void processAccountRepeatData();
} }
...@@ -3,15 +3,17 @@ package com.pica.cloud.account.account.server.mapper; ...@@ -3,15 +3,17 @@ package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.AccountUnionEntity; import com.pica.cloud.account.account.server.entity.AccountUnionEntity;
import java.util.Map;
public interface AccountUnionMapper { public interface AccountUnionMapper {
/** /**
* 解除绑定关系 * 解除绑定关系
* *
* @param acctId 账户id * @param map
* @return * @return
*/ */
int updateUnbindByAcctId(Integer acctId); int updateUnbindByAcctId(Map<String, Object> map);
/** /**
* 是否绑定过手机号 * 是否绑定过手机号
...@@ -21,8 +23,7 @@ public interface AccountUnionMapper { ...@@ -21,8 +23,7 @@ public interface AccountUnionMapper {
*/ */
AccountUnionEntity selectByUnionId(String unionId); AccountUnionEntity selectByUnionId(String unionId);
AccountUnionEntity selectByAcctId(Map<String, Object> map);
int deleteByPrimaryKey(Integer id);
int insert(AccountUnionEntity record); int insert(AccountUnionEntity record);
...@@ -34,5 +35,9 @@ public interface AccountUnionMapper { ...@@ -34,5 +35,9 @@ public interface AccountUnionMapper {
int updateByPrimaryKey(AccountUnionEntity record); int updateByPrimaryKey(AccountUnionEntity record);
/**
* 通过unionid更新记录信息
* @param unionId
*/
void updateUnionStatus(String unionId);
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.pica.cloud.account.account.server.mapper; ...@@ -2,6 +2,7 @@ package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.AgreementLogEntity; import com.pica.cloud.account.account.server.entity.AgreementLogEntity;
import com.pica.cloud.account.account.server.entity.PProtocolLog;
public interface AgreementLogEntityMapper { public interface AgreementLogEntityMapper {
int deleteByPrimaryKey(Long id); int deleteByPrimaryKey(Long id);
...@@ -15,4 +16,10 @@ public interface AgreementLogEntityMapper { ...@@ -15,4 +16,10 @@ public interface AgreementLogEntityMapper {
int updateByPrimaryKeySelective(AgreementLogEntity record); int updateByPrimaryKeySelective(AgreementLogEntity record);
int updateByPrimaryKey(AgreementLogEntity record); int updateByPrimaryKey(AgreementLogEntity record);
Integer getLatestProtocolId(int type);
int insertProtocolLog(PProtocolLog record);
int updateSignNum(Integer id);
} }
\ No newline at end of file
...@@ -6,6 +6,8 @@ import com.pica.cloud.account.account.server.entity.DoctorEntity; ...@@ -6,6 +6,8 @@ import com.pica.cloud.account.account.server.entity.DoctorEntity;
import com.pica.cloud.account.account.server.entity.PICAPDoctor; import com.pica.cloud.account.account.server.entity.PICAPDoctor;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.HashMap;
public interface DoctorMapper { public interface DoctorMapper {
/** /**
* 获取医生信息 * 获取医生信息
...@@ -83,13 +85,26 @@ public interface DoctorMapper { ...@@ -83,13 +85,26 @@ public interface DoctorMapper {
PICAPDoctor queryDoctor(long doctorId); PICAPDoctor queryDoctor(long doctorId);
void updateDeleteByPrimaryKey(Integer id); void updateDeleteByPrimaryKey(@Param("map") HashMap<String, Long> map);
/** /**
* 通过手机号获取用户id * 通过手机号获取用户id
*
* @param mobile * @param mobile
* @return * @return
*/ */
//Long selectDoctorIdByMobile(String mobile); //Long selectDoctorIdByMobile(String mobile);
Integer getAcctIdByDoctorId(long id);
/**
* 更新p_doctor表的修改记录
*
* @return
*/
Integer updateDoctorModifyRecord();
} }
\ No newline at end of file
package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.Hospital;
public interface HospitalMapper {
int deleteByPrimaryKey(Integer id);
int insert(Hospital record);
int insertSelective(Hospital record);
Hospital selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Hospital record);
int updateByPrimaryKey(Hospital record);
Integer updateDoctorModifyRecord();
}
\ No newline at end of file
package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.LogLoginAes;
public interface LogLoginAesMapper {
int deleteByPrimaryKey(Integer id);
int insert(LogLoginAes record);
int insertSelective(LogLoginAes record);
LogLoginAes selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(LogLoginAes record);
int updateByPrimaryKey(LogLoginAes record);
}
\ No newline at end of file
package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.LogLoginOnekey;
public interface LogLoginOnekeyMapper {
int deleteByPrimaryKey(Integer id);
int insert(LogLoginOnekey record);
int insertSelective(LogLoginOnekey record);
LogLoginOnekey selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(LogLoginOnekey record);
int updateByPrimaryKey(LogLoginOnekey record);
}
\ No newline at end of file
package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.LogMobileModify;
public interface LogMobileModifyMapper {
int deleteByPrimaryKey(Integer id);
int insert(LogMobileModify record);
int insertSelective(LogMobileModify record);
LogMobileModify selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(LogMobileModify record);
int updateByPrimaryKey(LogMobileModify record);
}
\ No newline at end of file
package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.PUserRole;
public interface PUserRoleMapper {
int deleteByPrimaryKey(Integer id);
int insert(PUserRole record);
int insertSelective(PUserRole record);
PUserRole selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(PUserRole record);
int updateByPrimaryKey(PUserRole record);
}
\ No newline at end of file
package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.PermissionDoctorRole;
public interface PermissionDoctorRoleMapper {
int deleteByPrimaryKey(Long id);
int insert(PermissionDoctorRole record);
int insertSelective(PermissionDoctorRole record);
PermissionDoctorRole selectByPrimaryKey(Long id);
int updateByPrimaryKeySelective(PermissionDoctorRole record);
int updateByPrimaryKey(PermissionDoctorRole record);
/**
* 记录用户权限修改记录
*
* @return
*/
Integer updatePermissionModifyRecord();
}
\ No newline at end of file
// Copyright 2016-2101 Pica.
package com.pica.cloud.account.account.server.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @ClassName AuthCodeReq
* @Description h5拼图对象
* @Author Chongwen.jiang
* @Date 2020/3/23 13:29
* @ModifyDate 2020/3/23 13:29
* @Version 1.0
*/
@ApiModel(value = "JigsawCodeModel", description = "h5拼图对象")
public class JigsawCodeModel {
@ApiModelProperty(value = "背景图")
private String backImage;
@ApiModelProperty(value = "滑动图")
private String slidingImage;
@ApiModelProperty(value = "y坐标")
private Integer yHeight;
@ApiModelProperty(value = "时间戳")
private String capCode;
public String getBackImage() {
return backImage;
}
public void setBackImage(String backImage) {
this.backImage = backImage;
}
public String getSlidingImage() {
return slidingImage;
}
public void setSlidingImage(String slidingImage) {
this.slidingImage = slidingImage;
}
public Integer getyHeight() {
return yHeight;
}
public void setyHeight(Integer yHeight) {
this.yHeight = yHeight;
}
public String getCapCode() {
return capCode;
}
public void setCapCode(String capCode) {
this.capCode = capCode;
}
}
package com.pica.cloud.account.account.server.model;
import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.entity.LogLoginOnekey;
import com.pica.cloud.account.account.server.entity.MobileDataEntity;
import com.pica.cloud.account.account.server.entity.QueryMobileEntity;
import com.pica.cloud.account.account.server.mapper.LogLoginOnekeyMapper;
import com.pica.cloud.account.account.server.util.AESUtil;
import com.pica.cloud.account.account.server.util.HttpUtil;
import com.pica.cloud.account.account.server.util.MD5;
import com.pica.cloud.account.account.server.util.RSAUtil;
import com.pica.cloud.account.account.server.util.SignUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @program: pica-cloud-account
* @description:
* @author: wfy
* @create: 2020-02-24 13:57
*/
@Component
public class OneClickProcessor {
private static final String DEFAULT_ENCRYPT_TYPE = "0";
private Logger logger = LoggerFactory.getLogger(this.getClass());
//手机号加解密方式 0 AES 1 RSA , 可以不传,不传则手机号解密直接使用AES解密
private String aesEncryptType = DEFAULT_ENCRYPT_TYPE;
private String rsaEncryptType = "1";
private String encryptType = DEFAULT_ENCRYPT_TYPE;
private static final String SHANYAN_SUCCESS_CODE = "200000";
//创建应用时填入的rsa公钥对应的私钥字符串
public static final String privateKey = "";
public static final Integer TYPE_IOS = 2;
public static final Integer TYPE_ANDROID = 1;
private static final String TOKEN = "token";
private static final String APPID = "appId";
private static final String ENCRYPT_TYPE = "encryptType";
private static final String SIGN = "sign";
@Value("${shanyan.url.mobilequery}")
private String mobileQueryUrl;
@Value("${shanyan.android.appId}")
private String androidAppId;
@Value("${shanyan.android.appKey}")
private String androidAppKey;
@Value("${shanyan.ios.appId}")
private String iosAppId;
@Value("${shanyan.ios.appKey}")
private String iosAppKey;
@Autowired
private LogLoginOnekeyMapper logLoginOnekeyMapper;
public QueryMobileEntity tokenExchangeMobile(String token, Integer type) {
if (type == null || StringUtils.isEmpty(token)) {
return null;
}
String appId;
String appKey;
if (type.equals(TYPE_ANDROID)) {
appId = androidAppId;
appKey = androidAppKey;
} else if (type.equals(TYPE_IOS)) {
appId = iosAppId;
appKey = iosAppKey;
} else {
return null;
}
//从SDK获取的token参数
QueryMobileEntity queryMobileEntity = null;
try {
Map<String, String> params = new HashMap<>();
params.put(TOKEN, token);
params.put(APPID, appId);
params.put(ENCRYPT_TYPE, encryptType);//可以不传,不传则解密直接使用AES解密
params.put(SIGN, SignUtils.getSign(params, appKey));
queryMobileEntity = HttpUtil.postForm(mobileQueryUrl, params, QueryMobileEntity.class);
if (null != queryMobileEntity) {
logger.info("一键登录token换取手机号结果:{}", queryMobileEntity);
String code = queryMobileEntity.getCode(); //返回码 200000为成功
if (SHANYAN_SUCCESS_CODE.equals(code)) {
MobileDataEntity mobileDataEntity = queryMobileEntity.getData();
String mobile = mobileDataEntity.getMobileName();
if (aesEncryptType.equals(encryptType)) {
String key = MD5.getMD5Code(appKey);
mobile = AESUtil.decrypt(mobile, key.substring(0, 16), key.substring(16));
} else if (rsaEncryptType.equals(encryptType)) {
mobile = RSAUtil.decryptByPrivateKeyForLongStr(mobile, privateKey);
}
queryMobileEntity.setMobile(mobile);
}
}
} catch (Exception e) {
logger.error(e.getMessage());
}
return queryMobileEntity;
}
@Async
public void savelogLoginOnekey(QueryMobileEntity queryMobileEntity,Integer logLoginId) {
LogLoginOnekey l = new LogLoginOnekey();
l.setDeviceType(queryMobileEntity.getSourceType());
MobileDataEntity data = queryMobileEntity.getData();
l.setFanqizha(data.getFanqizha());
l.setTradeNo(data.getTradeNo());
l.setMobile(AESUtil.encryptV0(queryMobileEntity.getMobile()));
l.setLogLoginId(logLoginId);
l.setInfo(JSONObject.toJSONString(queryMobileEntity));
Date d = new Date();
l.setCreateId(-1);
l.setCreateTime(d);
l.setModifyId(-1);
l.setModifyTime(d);
logLoginOnekeyMapper.insertSelective(l);
}
}
package com.pica.cloud.account.account.server.queue; package com.pica.cloud.account.account.server.queue;
import org.springframework.amqp.core.*; //import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; //import org.springframework.context.annotation.Configuration;
/** /**
...@@ -10,40 +10,40 @@ import org.springframework.context.annotation.Configuration; ...@@ -10,40 +10,40 @@ import org.springframework.context.annotation.Configuration;
* author:crs * author:crs
* Description:消息队列配置 * Description:消息队列配置
*/ */
@Configuration //@Configuration
public class QueueConfig { //public class QueueConfig {
//
public final static String QUEUE_NAME = "register_queue_account_13201"; // public final static String QUEUE_NAME = "register_queue_account_13201";
public final static String EXCHANGE_NAME = "register_exchange"; // public final static String EXCHANGE_NAME = "register_exchange";
public final static String ROUTE_KEY_NAME = "register_finish"; // public final static String ROUTE_KEY_NAME = "register_finish";
//
/** // /**
* 创建一个消息队列 // * 创建一个消息队列
* // *
* @return // * @return
*/ // */
@Bean // @Bean
public Queue queue() { // public Queue queue() {
return new Queue(QUEUE_NAME, true, false, true); // return new Queue(QUEUE_NAME, true, false, true);
} // }
//
/** // /**
* 创建交换机 // * 创建交换机
* // *
* @return // * @return
*/ // */
@Bean // @Bean
public TopicExchange directExchange() { // public TopicExchange directExchange() {
return new TopicExchange(EXCHANGE_NAME); // return new TopicExchange(EXCHANGE_NAME);
} // }
//
/** // /**
* 把消息队里和交换机进行绑定 // * 把消息队里和交换机进行绑定
* // *
* @return // * @return
*/ // */
@Bean // @Bean
public Binding binding() { // public Binding binding() {
return BindingBuilder.bind(queue()).to(directExchange()).with(ROUTE_KEY_NAME); // return BindingBuilder.bind(queue()).to(directExchange()).with(ROUTE_KEY_NAME);
} // }
} //}
package com.pica.cloud.account.account.server.queue; package com.pica.cloud.account.account.server.queue;
import org.springframework.amqp.core.AmqpTemplate; //import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; //import org.springframework.stereotype.Component;
/** /**
* Created on 2019/9/11 17:37 * Created on 2019/9/11 17:37
* author:crs * author:crs
* Description:消息生产者 * Description:消息生产者
*/ */
@Component //@Component
public class QueueProducer { //public class QueueProducer {
//
@Autowired // @Autowired
private AmqpTemplate amqpTemplate; // private AmqpTemplate amqpTemplate;
//
/** // /**
* 发送消息 // * 发送消息
* // *
* @param message // * @param message
*/ // */
public void send(byte[] message) { // public void send(byte[] message) {
amqpTemplate.convertAndSend(QueueConfig.EXCHANGE_NAME, QueueConfig.ROUTE_KEY_NAME, message); // amqpTemplate.convertAndSend(QueueConfig.EXCHANGE_NAME, QueueConfig.ROUTE_KEY_NAME, message);
} // }
} //}
...@@ -34,6 +34,34 @@ public class BaseRequest { ...@@ -34,6 +34,34 @@ public class BaseRequest {
private String captchaToken; private String captchaToken;
@ApiModelProperty("图片验证码答案") @ApiModelProperty("图片验证码答案")
private String captchaAnswer; private String captchaAnswer;
@ApiModelProperty("业务类型,1-新老业务区分标识,2-手机号格式校验业务,3-密码登录校验业务")
private Integer bizType;
@ApiModelProperty("设备id")
private String device_token;
@ApiModelProperty("苹果身份token")
private String identifyToken;
@ApiModelProperty("苹果用户id")
private String appleUserId;
@ApiModelProperty("appleId")
private String appleId;
@ApiModelProperty("apple用户信息(json字符串)")
private String info;
@ApiModelProperty("capCode")
private String capCode;
@ApiModelProperty("滑动图片的x位置")
private Integer xPos;
@ApiModelProperty("h5端适配缩放后背景图实际宽度")
private Integer imageW;
@ApiModelProperty("用户本地token")
private String userTokenTourist;
public String getUserTokenTourist() {
return userTokenTourist;
}
public void setUserTokenTourist(String userTokenTourist) {
this.userTokenTourist = userTokenTourist;
}
public String getCaptchaToken() { public String getCaptchaToken() {
return captchaToken; return captchaToken;
...@@ -146,4 +174,76 @@ public class BaseRequest { ...@@ -146,4 +174,76 @@ public class BaseRequest {
public void setWeChatLoginType(Integer weChatLoginType) { public void setWeChatLoginType(Integer weChatLoginType) {
this.weChatLoginType = weChatLoginType; this.weChatLoginType = weChatLoginType;
} }
public String getAppleUserId() {
return appleUserId;
}
public void setAppleUserId(String appleUserId) {
this.appleUserId = appleUserId;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getIdentifyToken() {
return identifyToken;
}
public void setIdentifyToken(String identifyToken) {
this.identifyToken = identifyToken;
}
public String getAppleId() {
return appleId;
}
public void setAppleId(String appleId) {
this.appleId = appleId;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getDevice_token() {
return device_token;
}
public void setDevice_token(String device_token) {
this.device_token = device_token;
}
public String getCapCode() {
return capCode;
}
public void setCapCode(String capCode) {
this.capCode = capCode;
}
public Integer getxPos() {
return xPos;
}
public void setxPos(Integer xPos) {
this.xPos = xPos;
}
public Integer getImageW() {
return imageW;
}
public void setImageW(Integer imageW) {
this.imageW = imageW;
}
} }
package com.pica.cloud.account.account.server.req;
/**
* @program: pica-cloud-account
* @description:
* @author: wfy
* @create: 2020-02-12 15:58
*/
public class OneClickLoginReq {
private Integer sourceType;
private String token = "";
private String loginIp;
private Integer productType = 0;
private String userTokenTourist;
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
public Integer getProductType() {
return productType;
}
public void setProductType(Integer productType) {
this.productType = productType;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public String getUserTokenTourist() {
return userTokenTourist;
}
public void setUserTokenTourist(String userTokenTourist) {
this.userTokenTourist = userTokenTourist;
}
}
package com.pica.cloud.account.account.server.req;
/**
* @program: pica-cloud-account
* @description:
* @author: wfy
* @create: 2020-02-12 17:11
*/
public class QueryMobileReq {
private String token;
private String appId;
private String clientIp;
private String encryptType;
private String outId;
private String sign;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getClientIp() {
return clientIp;
}
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
public String getEncryptType() {
return encryptType;
}
public void setEncryptType(String encryptType) {
this.encryptType = encryptType;
}
public String getOutId() {
return outId;
}
public void setOutId(String outId) {
this.outId = outId;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
}
// Copyright 2016-2101 Pica.
package com.pica.cloud.account.account.server.resp;
import io.swagger.annotations.ApiModel;
/**
* @ClassName UnifiedVerificationResp
* @Description 统一验证响应类
* @Author Chongwen.jiang
* @Date 2020/2/20 20:48
* @ModifyDate 2020/2/20 20:48
* @Version 1.0
*/
@ApiModel(value = "UnifiedVerificationResp", description = "统一验证响应类")
public class UnifiedVerificationResp {
private Integer bizCode;
private String bizMsg;
public Integer getBizCode() {
return bizCode;
}
public void setBizCode(Integer bizCode) {
this.bizCode = bizCode;
}
public String getBizMsg() {
return bizMsg;
}
public void setBizMsg(String bizMsg) {
this.bizMsg = bizMsg;
}
}
package com.pica.cloud.account.account.server.service; package com.pica.cloud.account.account.server.service;
import ch.qos.logback.core.rolling.helper.IntegerTokenConverter;
import com.pica.cloud.account.account.server.entity.Account; import com.pica.cloud.account.account.server.entity.Account;
import com.pica.cloud.account.account.server.entity.AccountInfoEntity; import com.pica.cloud.account.account.server.entity.AccountInfoEntity;
......
// Copyright 2016-2101 Pica.
package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.server.model.JigsawCodeModel;
import com.pica.cloud.account.account.server.req.BaseRequest;
import javax.servlet.http.HttpServletRequest;
/**
* @ClassName AuthCodeService
* @Description 验证码业务
* @Author Chongwen.jiang
* @Date 2020/3/5 17:01
* @ModifyDate 2020/3/5 17:01
* @Version 1.0
*/
public interface AuthCodeService {
int rcValidate(HttpServletRequest request, BaseRequest baseRequest, String deviceInfoStr, Integer sourceType);
void recordRcData(HttpServletRequest req, BaseRequest baseRequest, String deviceIp);
int validateJigsawCode(HttpServletRequest request, BaseRequest req);
JigsawCodeModel getJigsawCode(HttpServletRequest request, Integer sourceType, String mobile);
}
...@@ -22,21 +22,21 @@ public interface DoctorService { ...@@ -22,21 +22,21 @@ public interface DoctorService {
* *
* @param doctor 待修改数据 * @param doctor 待修改数据
*/ */
void modifyDoctorInfo(Doctor doctor); void modifyDoctorInfo(Doctor doctor,Long doctorId);
/** /**
* 修改医生信息 * 修改医生信息
* *
* @param id 待修改数据 * @param id 待修改数据
*/ */
void deleteDoctorInfo(Integer id); void deleteDoctorInfo(Integer id,Long modifyId);
/** /**
* 客服系统新增医生用户 * 客服系统新增医生用户
* *
* @param doctor 新的医生数据 * @param doctor 新的医生数据
*/ */
Integer addDoctorInfo(Doctor doctor); Integer addDoctorInfo(Doctor doctor,Long doctorId);
/** /**
* doctor绑定微信 * doctor绑定微信
......
package com.pica.cloud.account.account.server.service; package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.server.entity.LogLoginAes;
import com.pica.cloud.account.account.server.entity.LoginResult; import com.pica.cloud.account.account.server.entity.LoginResult;
import com.pica.cloud.account.account.server.entity.PICAPDoctor; import com.pica.cloud.account.account.server.entity.PICAPDoctor;
import com.pica.cloud.account.account.server.req.BaseRequest; import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.server.resp.UnifiedVerificationResp;
import com.pica.cloud.foundation.entity.PicaResponse;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
import com.pica.cloud.account.account.server.req.OneClickLoginReq;
import com.pica.cloud.account.account.server.vo.OneClickLoginResultVo;
public interface LoginService { public interface LoginService {
/** /**
...@@ -39,9 +47,9 @@ public interface LoginService { ...@@ -39,9 +47,9 @@ public interface LoginService {
/** /**
* 解除绑定 * 解除绑定
* *
* @param acctId 账户id * @param doctorId 账户id
*/ */
void unbindWeChat(Integer acctId); void unbindWeChat(long doctorId);
/** /**
...@@ -49,7 +57,41 @@ public interface LoginService { ...@@ -49,7 +57,41 @@ public interface LoginService {
* *
* @param request 参数模型 * @param request 参数模型
*/ */
void bindWeChat(BaseRequest request); String bindWeChat(long doctorId, BaseRequest request);
PICAPDoctor queryDoctor(long doctorId); PICAPDoctor queryDoctor(long doctorId);
/**
* @Description 统一校验(传空则不会校验)
* @Author Chongwen.jiang
* @Date 2020/2/20 16:55
* @ModifyDate 2020/2/20 16:55
* @Params [request]
* @Return com.pica.cloud.foundation.entity.PicaResponse
*/
void preLoginValidate(BaseRequest request);
LoginResult oneClickLogin(OneClickLoginReq req);
/**
* @Description 苹果登录授权
* @Author Chongwen.jiang
* @Date 2020/2/24 10:10
* @ModifyDate 2020/2/24 10:10
* @Params [baseRequest]
* @Return com.pica.cloud.account.account.server.entity.LoginResult
*/
LoginResult loginByApple(BaseRequest baseRequest);
/**
* @Description 苹果登录绑定手机号
* @Author Chongwen.jiang
* @Date 2020/2/24 10:10
* @ModifyDate 2020/2/24 10:10
* @Params [request]
* @Return com.pica.cloud.account.account.server.entity.LoginResult
*/
LoginResult loginByAppleStep(BaseRequest request);
int insertLoginAesLog(LogLoginAes aes);
} }
...@@ -13,4 +13,14 @@ public interface ModifyMobileService { ...@@ -13,4 +13,14 @@ public interface ModifyMobileService {
Integer getAcctIdByMobile(String phone); Integer getAcctIdByMobile(String phone);
/**
* 记录手机号的变更记录
* @param acctId
* @param mobilePhone
* @param mobile
*/
void recodeMobileModify(Integer acctId, String mobilePhone, String mobile);
} }
package com.pica.cloud.account.account.server.service; package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.server.entity.AccountInfoEntity;
import com.pica.cloud.account.account.server.entity.LoginResult;
import com.pica.cloud.account.account.server.req.BaseRequest; import com.pica.cloud.account.account.server.req.BaseRequest;
public interface PasswordService { public interface PasswordService {
...@@ -18,5 +20,7 @@ public interface PasswordService { ...@@ -18,5 +20,7 @@ public interface PasswordService {
* *
* @param request 参数模型 * @param request 参数模型
*/ */
void forgetPassword(BaseRequest request); void forgetPassword(BaseRequest request, AccountInfoEntity entity);
LoginResult findPwdLogin(BaseRequest request, AccountInfoEntity accountInfo);
} }
package com.pica.cloud.account.account.server.service; package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.server.entity.LoginResult; import com.pica.cloud.account.account.server.entity.LoginResult;
import com.pica.cloud.account.account.server.entity.QueryMobileEntity;
import com.pica.cloud.account.account.server.req.BaseRequest; import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.common.req.OCINRequest; import com.pica.cloud.account.account.common.req.OCINRequest;
import com.pica.cloud.foundation.entity.PicaResponse; import com.pica.cloud.foundation.entity.PicaResponse;
...@@ -25,4 +26,6 @@ public interface RegisterService { ...@@ -25,4 +26,6 @@ public interface RegisterService {
void ocinRegister(OCINRequest request); void ocinRegister(OCINRequest request);
LoginResult register(BaseRequest baseRequest, QueryMobileEntity queryMobileEntity);
} }
...@@ -10,4 +10,7 @@ import java.util.Map; ...@@ -10,4 +10,7 @@ import java.util.Map;
public interface TokenService { public interface TokenService {
String getToken(Map<String, Object> map); String getToken(Map<String, Object> map);
void tokenContinueTime(String token, Integer sourceType, Integer seconds);
} }
...@@ -2,12 +2,14 @@ package com.pica.cloud.account.account.server.service.impl; ...@@ -2,12 +2,14 @@ package com.pica.cloud.account.account.server.service.impl;
import com.pica.cloud.account.account.server.entity.Account; import com.pica.cloud.account.account.server.entity.Account;
import com.pica.cloud.account.account.server.entity.AccountInfoEntity; import com.pica.cloud.account.account.server.entity.AccountInfoEntity;
import com.pica.cloud.account.account.server.enums.AccountTypeEnum;
import com.pica.cloud.account.account.server.mapper.AccountInfoDetailMapper; import com.pica.cloud.account.account.server.mapper.AccountInfoDetailMapper;
import com.pica.cloud.account.account.server.mapper.AccountMapper; import com.pica.cloud.account.account.server.mapper.AccountMapper;
import com.pica.cloud.account.account.server.service.AccountService; import com.pica.cloud.account.account.server.service.AccountService;
import com.pica.cloud.foundation.encryption.common.constants.EncryptConstants; import com.pica.cloud.foundation.encryption.common.constants.EncryptConstants;
import com.pica.cloud.foundation.encryption.util.EncryptUtils; import com.pica.cloud.foundation.encryption.util.EncryptUtils;
import com.pica.cloud.foundation.redis.ICacheClient; import com.pica.cloud.foundation.redis.ICacheClient;
import com.pica.cloud.foundation.utils.entity.PicaUser;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -18,10 +20,7 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -18,10 +20,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* @author andong * @author andong
...@@ -39,7 +38,7 @@ public class AccountServiceImpl implements AccountService { ...@@ -39,7 +38,7 @@ public class AccountServiceImpl implements AccountService {
@Autowired @Autowired
private AccountInfoDetailMapper accountInfoDetailMapper; private AccountInfoDetailMapper accountInfoDetailMapper;
@Autowired @Autowired
@Qualifier("cacheMigrateClient")
private ICacheClient cacheClient; private ICacheClient cacheClient;
@Value("${doubleWritingMode}") @Value("${doubleWritingMode}")
...@@ -91,8 +90,8 @@ public class AccountServiceImpl implements AccountService { ...@@ -91,8 +90,8 @@ public class AccountServiceImpl implements AccountService {
accountInfo.setRegTime(currentTime); accountInfo.setRegTime(currentTime);
accountInfo.setDeleteFlag(1); accountInfo.setDeleteFlag(1);
accountInfo.setSex(0); accountInfo.setSex(0);
accountInfo.setRegisterProduct(1); accountInfo.setRegisterProduct(AccountTypeEnum.PRODUCT_TYPE_DOCTOR.getCode());
accountInfo.setRegisterSource(5); accountInfo.setRegisterSource(AccountTypeEnum.DEVICE_TYPE_H5.getCode());
accountInfoDetailMapper.insertSelective(accountInfo); accountInfoDetailMapper.insertSelective(accountInfo);
Integer acctId = accountInfo.getId(); Integer acctId = accountInfo.getId();
//doctor表,存入用户id //doctor表,存入用户id
...@@ -103,6 +102,7 @@ public class AccountServiceImpl implements AccountService { ...@@ -103,6 +102,7 @@ public class AccountServiceImpl implements AccountService {
account.setModifyId(0L); account.setModifyId(0L);
account.setAcctId(acctId); account.setAcctId(acctId);
account.setCreatTime(currentTime); account.setCreatTime(currentTime);
account.setRegisterSource(AccountTypeEnum.DEVICE_TYPE_H5.getCode());
account.setModifyTime(currentTime); account.setModifyTime(currentTime);
account.setFirstLoginTime(currentTime); account.setFirstLoginTime(currentTime);
account.setLastLoginTime(currentTime); account.setLastLoginTime(currentTime);
...@@ -124,6 +124,17 @@ public class AccountServiceImpl implements AccountService { ...@@ -124,6 +124,17 @@ public class AccountServiceImpl implements AccountService {
map.put("id", cacheClient.hget(key, "id")); map.put("id", cacheClient.hget(key, "id"));
map.put("hospital_id", cacheClient.hget(key, "hospital_id")); map.put("hospital_id", cacheClient.hget(key, "hospital_id"));
map.put("hospital", cacheClient.hget(key, "hospital")); map.put("hospital", cacheClient.hget(key, "hospital"));
map.put("name", cacheClient.hget(key, "name"));
// Map<String, String> result = cacheClient.hgetall(key);
// Iterator<Map.Entry<String, String>> iterator = result.entrySet().iterator();
// while(iterator.hasNext()){
// Map.Entry<String, String> next = iterator.next();
// String key1 = next.getKey();
// String value = next.getValue();
// logger.info("更新用户缓存信息已完成数量:{}", key1 + "------>"+value);
// }
// PicaUser picaUser = cacheClient.getToken("F64279B337EA4AE3965853A7CCFDF5A3", PicaUser.class);
// logger.info("更新用户缓存信息已完成数量:", picaUser.toString());
return map; return map;
} }
...@@ -160,21 +171,57 @@ public class AccountServiceImpl implements AccountService { ...@@ -160,21 +171,57 @@ public class AccountServiceImpl implements AccountService {
} }
} }
//更新缓存中hospital_id,hospital信息 //更新缓存中hospital_id,hospital信息
//成功返回0,失败返回1 //成功返回0,失败返回1
private int refresh(Map<String, Object> doctorMap) { private int refresh(Map<String, Object> doctorMap) {
String doctorId = doctorMap.get("id").toString(); String doctorId = doctorMap.get("id").toString();
/*
String hospitalId = doctorMap.get("hospital_id") == null ? StringUtils.EMPTY : doctorMap.get("hospital_id").toString(); String hospitalId = doctorMap.get("hospital_id") == null ? StringUtils.EMPTY : doctorMap.get("hospital_id").toString();
String hospital = doctorMap.get("hospital") == null ? StringUtils.EMPTY : doctorMap.get("hospital").toString(); String hospital = doctorMap.get("hospital") == null ? StringUtils.EMPTY : doctorMap.get("hospital").toString();
String mobile = doctorMap.get("mobile_phone") == null ? StringUtils.EMPTY : doctorMap.get("mobile_phone").toString();
String status = doctorMap.get("status") == null ? StringUtils.EMPTY : doctorMap.get("status").toString();
String avatar_image_url = doctorMap.get("avatar_image_url") == null ? StringUtils.EMPTY : doctorMap.get("avatar_image_url").toString();
String email = doctorMap.get("email") == null ? StringUtils.EMPTY : doctorMap.get("email").toString();
String province = doctorMap.get("province") == null ? StringUtils.EMPTY : doctorMap.get("province").toString();
String province_name = doctorMap.get("province") == null ? StringUtils.EMPTY : doctorMap.get("province_name").toString();
String city = doctorMap.get("city") == null ? StringUtils.EMPTY : doctorMap.get("city").toString();
String city_name = doctorMap.get("city_name") == null ? StringUtils.EMPTY : doctorMap.get("city_name").toString();
String county = doctorMap.get("county") == null ? StringUtils.EMPTY : doctorMap.get("county").toString();
String county_name = doctorMap.get("county_name") == null ? StringUtils.EMPTY : doctorMap.get("county_name").toString();
String town = doctorMap.get("town") == null ? StringUtils.EMPTY : doctorMap.get("town").toString();
String town_name = doctorMap.get("town_name") == null ? StringUtils.EMPTY : doctorMap.get("town_name").toString();
String title = doctorMap.get("title") == null ? StringUtils.EMPTY : doctorMap.get("title").toString();
String title_id = doctorMap.get("title_id") == null ? StringUtils.EMPTY : doctorMap.get("title_id").toString();
*/
String name = doctorMap.get("name") == null ? StringUtils.EMPTY : doctorMap.get("name").toString();
String key = KEY_PREFIX + doctorId; String key = KEY_PREFIX + doctorId;
try { try {
String cacheId = cacheClient.hget(key, "id"); String cacheId = cacheClient.hget(key, "id");
if (StringUtils.isBlank(cacheId)) { if (StringUtils.isBlank(cacheId)) {
return 0; //未找到用户缓存数据,不做更新 return 0; //未找到用户缓存数据,不做更新
} }
cacheClient.hset(key, "hospital_id", StringUtils.isEmpty(hospitalId) ? "0" : hospitalId); /**
cacheClient.hset(key, "hospital", hospital); cacheClient.hset(key, "hospital_id", StringUtils.isEmpty(hospitalId) ? "0" : hospitalId);
cacheClient.hset(key, "hospital", hospital);
cacheClient.hset(key, "province_name", province_name);
cacheClient.hset(key, "city_name", city_name);
cacheClient.hset(key, "county_name", county_name);
cacheClient.hset(key, "town_name", town_name);
cacheClient.hset(key, "province_id", province);
cacheClient.hset(key, "city_id", city);
cacheClient.hset(key, "county_id", county);
cacheClient.hset(key, "town_id", town);
cacheClient.hset(key, "mobile", mobile);
cacheClient.hset(key, "status", status);
cacheClient.hset(key, "avatar_image_url", avatar_image_url);
cacheClient.hset(key, "email", email);
cacheClient.hset(key, "title_id", title_id);
cacheClient.hset(key, "title", title);
*/
cacheClient.hset(key, "name", name);
return 0; return 0;
} catch (Exception ex) { } catch (Exception ex) {
return 1; return 1;
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册