Selaa lähdekoodia

Merge remote-tracking branch 'origin/test'

zzy.zhiyuan.foxmail 8 vuotta sitten
vanhempi
commit
28bcd4de70

+ 5 - 0
pom.xml

118
			<artifactId>slf4j-log4j12</artifactId>
118
			<artifactId>slf4j-log4j12</artifactId>
119
			<version>1.7.21</version>
119
			<version>1.7.21</version>
120
		</dependency>
120
		</dependency>
121
		<dependency>
122
			<groupId>com.googlecode.json-simple</groupId>
123
			<artifactId>json-simple</artifactId>
124
			<version>1.1.1</version>
125
		</dependency>
121
	</dependencies>
126
	</dependencies>
122
	<build>
127
	<build>
123
		<resources>
128
		<resources>

+ 65 - 13
src/main/java/com/ekexiu/portal/dao/ProfessorDao.java

206
                    organization.setName(orgName);
206
                    organization.setName(orgName);
207
                    professor.setOrganization(organization);
207
                    professor.setOrganization(organization);
208
                    professor.setTitle(rs.getString(5));
208
                    professor.setTitle(rs.getString(5));
209
                    professor.setAuthentication(rs.getInt(6));
209
                    Integer auth = rs.getInt(6);
210
                    if(rs.wasNull()){
211
                    	auth = null;
212
                    }
213
                    professor.setAuthentication(auth);
210
                    professor.setAuthType(rs.getInt(7));
214
                    professor.setAuthType(rs.getInt(7));
211
                    professor.setAuthStatus(rs.getInt(8));
215
                    professor.setAuthStatus(rs.getInt(8));
212
                    professor.setId(rs.getString(9));
216
                    professor.setId(rs.getString(9));
240
            try{
244
            try{
241
                if(rs.next()){
245
                if(rs.next()){
242
                	Professor professor = new Professor();
246
                	Professor professor = new Professor();
243
                    professor.setAuthentication(rs.getInt(1));
247
                	Integer auth = rs.getInt(1);
248
                    if(rs.wasNull()){
249
                    	auth = null;
250
                    }
251
                    professor.setAuthentication(auth);
244
                    professor.setAuthType(rs.getInt(2));
252
                    professor.setAuthType(rs.getInt(2));
245
                    professor.setAuthStatus(rs.getInt(3));
253
                    professor.setAuthStatus(rs.getInt(3));
246
                    professor.setAuthStatusExpert(rs.getInt(4));
254
                    professor.setAuthStatusExpert(rs.getInt(4));
291
                    	title = null;
299
                    	title = null;
292
                	}
300
                	}
293
                    professor.setTitle(title);
301
                    professor.setTitle(title);
294
                    professor.setAuthentication(rs.getInt(4));
302
                    Integer auth = rs.getInt(4);
303
                    if(rs.wasNull()){
304
                    	auth = null;
305
                    }
306
                    professor.setAuthentication(auth);
295
                    professor.setAuthType(rs.getInt(5));
307
                    professor.setAuthType(rs.getInt(5));
296
                    professor.setAuthStatus(rs.getInt(6));
308
                    professor.setAuthStatus(rs.getInt(6));
297
                    professor.setId(rs.getString(7));
309
                    professor.setId(rs.getString(7));
363
                		title = null;
375
                		title = null;
364
                	}
376
                	}
365
                    professor.setTitle(title);
377
                    professor.setTitle(title);
366
                    professor.setAuthentication(rs.getInt(4));
378
                    Integer auth = rs.getInt(4);
379
                    if(rs.wasNull()){
380
                    	auth = null;
381
                    }
382
                    professor.setAuthentication(auth);
367
                    professor.setAuthType(rs.getInt(5));
383
                    professor.setAuthType(rs.getInt(5));
368
                    professor.setAuthStatus(rs.getInt(6));
384
                    professor.setAuthStatus(rs.getInt(6));
369
                    professor.setId(rs.getString(7));
385
                    professor.setId(rs.getString(7));
445
                    	title = null;
461
                    	title = null;
446
                    }
462
                    }
447
                    professor.setTitle(title);
463
                    professor.setTitle(title);
448
                    professor.setAuthentication(rs.getInt(8));
464
                    Integer auth = rs.getInt(8);
465
                    if(rs.wasNull()){
466
                    	auth = null;
467
                    }
468
                    professor.setAuthentication(auth);
449
                    professor.setAuthType(rs.getInt(9));
469
                    professor.setAuthType(rs.getInt(9));
450
                    professor.setAuthStatus(rs.getInt(10));
470
                    professor.setAuthStatus(rs.getInt(10));
451
                    professor.setId(rs.getString(11));
471
                    professor.setId(rs.getString(11));
536
                    organization.setName(orgName);
556
                    organization.setName(orgName);
537
                    professor.setOrganization(organization);
557
                    professor.setOrganization(organization);
538
                    professor.setTitle(rs.getString(9));
558
                    professor.setTitle(rs.getString(9));
539
                    professor.setAuthentication(rs.getInt(10));
559
                    Integer auth = rs.getInt(10);
560
                    if(rs.wasNull()){
561
                    	auth = null;
562
                    }
563
                    professor.setAuthentication(auth);
540
                    professor.setAuthType(rs.getInt(11));
564
                    professor.setAuthType(rs.getInt(11));
541
                    professor.setAuthStatus(rs.getInt(12));
565
                    professor.setAuthStatus(rs.getInt(12));
542
                    professor.setId(rs.getString(13));
566
                    professor.setId(rs.getString(13));
649
                    	title = null;
673
                    	title = null;
650
                	}
674
                	}
651
                    professor.setTitle(title);
675
                    professor.setTitle(title);
652
                    professor.setAuthentication(rs.getInt(4));
676
                    Integer auth = rs.getInt(4);
677
                    if(rs.wasNull()){
678
                    	auth = null;
679
                    }
680
                    professor.setAuthentication(auth);
653
                    professor.setAuthType(rs.getInt(5));
681
                    professor.setAuthType(rs.getInt(5));
654
                    professor.setAuthStatus(rs.getInt(6));
682
                    professor.setAuthStatus(rs.getInt(6));
655
                    professor.setId(rs.getString(7));
683
                    professor.setId(rs.getString(7));
707
                    	title = null;
735
                    	title = null;
708
                	}
736
                	}
709
                    professor.setTitle(title);
737
                    professor.setTitle(title);
710
                    professor.setAuthentication(rs.getInt(4));
738
                    Integer auth = rs.getInt(4);
739
                    if(rs.wasNull()){
740
                    	auth = null;
741
                    }
742
                    professor.setAuthentication(auth);
711
                    professor.setAuthType(rs.getInt(5));
743
                    professor.setAuthType(rs.getInt(5));
712
                    professor.setAuthStatus(rs.getInt(6));
744
                    professor.setAuthStatus(rs.getInt(6));
713
                    professor.setId(rs.getString(7));
745
                    professor.setId(rs.getString(7));
915
                    	title = null;
947
                    	title = null;
916
                    }
948
                    }
917
                    professor.setTitle(title);
949
                    professor.setTitle(title);
918
                    professor.setAuthentication(rs.getInt(4));
950
                    Integer auth = rs.getInt(4);
951
                    if(rs.wasNull()){
952
                    	auth = null;
953
                    }
954
                    professor.setAuthentication(auth);
919
                    professor.setAuthType(rs.getInt(5));
955
                    professor.setAuthType(rs.getInt(5));
920
                    professor.setAuthStatus(rs.getInt(6));
956
                    professor.setAuthStatus(rs.getInt(6));
921
                    professor.setId(rs.getString(7));
957
                    professor.setId(rs.getString(7));
1126
                    	title = null;
1162
                    	title = null;
1127
                    }
1163
                    }
1128
                    professor.setTitle(title);
1164
                    professor.setTitle(title);
1129
                    professor.setAuthentication(rs.getInt(4));
1165
                    Integer auth = rs.getInt(4);
1166
                    if(rs.wasNull()){
1167
                    	auth = null;
1168
                    }
1169
                    professor.setAuthentication(auth);
1130
                    professor.setAuthType(rs.getInt(5));
1170
                    professor.setAuthType(rs.getInt(5));
1131
                    professor.setAuthStatus(rs.getInt(6));
1171
                    professor.setAuthStatus(rs.getInt(6));
1132
                    professor.setId(rs.getString(7));
1172
                    professor.setId(rs.getString(7));
1346
						title = null;
1386
						title = null;
1347
					}
1387
					}
1348
					professor.setTitle(title);
1388
					professor.setTitle(title);
1349
					professor.setAuthentication(rs.getInt(8));
1389
					Integer auth = rs.getInt(8);
1390
                    if(rs.wasNull()){
1391
                    	auth = null;
1392
                    }
1393
                    professor.setAuthentication(auth);
1350
					professor.setAuthType(rs.getInt(9));
1394
					professor.setAuthType(rs.getInt(9));
1351
					professor.setAuthStatus(rs.getInt(10));
1395
					professor.setAuthStatus(rs.getInt(10));
1352
					professor.setId(rs.getString(11));
1396
					professor.setId(rs.getString(11));
1546
						title = null;
1590
						title = null;
1547
					}
1591
					}
1548
					professor.setTitle(title);
1592
					professor.setTitle(title);
1549
					professor.setAuthentication(rs.getInt(9));
1593
					Integer auth = rs.getInt(9);
1594
                    if(rs.wasNull()){
1595
                    	auth = null;
1596
                    }
1597
                    professor.setAuthentication(auth);
1550
					professor.setId(rs.getString(10));
1598
					professor.setId(rs.getString(10));
1551
					professor.setName(rs.getString(11));
1599
					professor.setName(rs.getString(11));
1552
					String descp = rs.getString(12);
1600
					String descp = rs.getString(12);
1751
						title = null;
1799
						title = null;
1752
					}
1800
					}
1753
					userInfo.setTitle(title);
1801
					userInfo.setTitle(title);
1754
					userInfo.setAuthentication(rs.getInt(8));
1802
					Integer auth = rs.getInt(8);
1803
					if(rs.wasNull()){
1804
						auth = null;
1805
					}
1806
					userInfo.setAuthentication(auth);
1755
					userInfo.setAuthType(rs.getInt(9));
1807
					userInfo.setAuthType(rs.getInt(9));
1756
					userInfo.setAuthStatus(rs.getInt(10));
1808
					userInfo.setAuthStatus(rs.getInt(10));
1757
					userInfo.setId(rs.getString(11));
1809
					userInfo.setId(rs.getString(11));

+ 5 - 1
src/main/java/com/ekexiu/portal/dao/UserOpenIdDao.java

30

30

31
    @SelectOne
31
    @SelectOne
32
    @Nullable
32
    @Nullable
33
    UserOpenId query(Connection con, String oauthType, String userid) throws SQLException;
33
    UserOpenId queryByUserid(Connection con, String oauthType, String userid) throws SQLException;
34
    
35
    @SelectOne
36
    @Nullable
37
    UserOpenId queryByOpenid(Connection con, String oauthType, String openid) throws SQLException;
34
}
38
}

+ 232 - 165
src/main/java/com/ekexiu/portal/oauth/OAuthService.java

19
import com.ekexiu.portal.dao.ProfessorDao;
19
import com.ekexiu.portal.dao.ProfessorDao;
20
import com.ekexiu.portal.dao.UserDao;
20
import com.ekexiu.portal.dao.UserDao;
21
import com.ekexiu.portal.dao.UserOpenIdDao;
21
import com.ekexiu.portal.dao.UserOpenIdDao;
22
import com.ekexiu.portal.po.Professor;
22
import com.ekexiu.portal.po.User;
23
import com.ekexiu.portal.po.User;
23
import com.ekexiu.portal.po.UserOpenId;
24
import com.ekexiu.portal.po.UserOpenId;
24
import com.ekexiu.portal.pojo.SessionUser;
25
import com.ekexiu.portal.pojo.SessionUser;
25
import com.ekexiu.portal.service.SysService;
26

26

27
@Path("/oauth")
27
@Path("/oauth")
28
public class OAuthService {
28
public class OAuthService {
29

29

30
    private long expriesWithOpenId = 1000 * 60 * 10;
31

32
    @Autowrie
33
    private UserOpenIdDao userOpenIdDao;
34
    @Autowrie
35
    private UserDao userDao;
36
    @Autowrie
37
    private ProfessorDao professorDao;
38

39
    private Map<String, OAuthHandler> handlers;
40

41
    public Map<String, OAuthHandler> getHandlers() {
42
        return handlers;
43
    }
44

45
    public void setHandlers(Map<String, OAuthHandler> handlers) {
46
        this.handlers = handlers;
47
    }
48

49
    public UserOpenIdDao getUserOpenIdDao() {
50
        return userOpenIdDao;
51
    }
52

53
    public void setUserOpenIdDao(UserOpenIdDao userOpenIdDao) {
54
        this.userOpenIdDao = userOpenIdDao;
55
    }
56

57
    public UserDao getUserDao() {
58
        return userDao;
59
    }
60

61
    public void setUserDao(UserDao userDao) {
62
        this.userDao = userDao;
63
    }
64

65
    public long getExpriesWithOpenId() {
66
        return expriesWithOpenId;
67
    }
68

69
    public void setExpriesWithOpenId(long expriesWithOpenId) {
70
        this.expriesWithOpenId = expriesWithOpenId;
71
    }
72

73
    public ProfessorDao getProfessorDao() {
74
        return professorDao;
75
    }
76

77
    public void setProfessorDao(ProfessorDao professorDao) {
78
        this.professorDao = professorDao;
79
    }
80

81
    @Get
82
    @Path("/validCode")
83
    public AuthLoginResponse validCode(@JdbcConn Connection con, String code, String state) throws SQLException, JfwBaseException {
84
        OAuthHandler oah = this.handlers.get(state);
85
        if (oah == null)
86
            throw new IllegalArgumentException("非法的参数{state=" + state);
87
        OAuthUser ou = oah.login(code);
88
        UserOpenId uoi = this.userOpenIdDao.query(con, oah.getType(), ou.getOpenId());
89

90
        StateCode<OAuthUser, UserOpenId> sc = new StateCode<OAuthUser, UserOpenId>();
91
        final String key = JfwAppContext.cacheObjectAndGenKey(sc);
92
        sc.setKey(ou);
93
        sc.setValue(uoi);
94
        sc.setBuildTime(System.currentTimeMillis());
95
        sc.setExpiredTime(sc.getBuildTime() + this.expriesWithOpenId);
96
        JfwAppContext.getScheduledExecutorService().schedule(new Runnable() {
97
            @Override
98
            public void run() {
99
                JfwAppContext.removeCachedObject(key);
100
            }
101
        }, this.expriesWithOpenId, TimeUnit.MILLISECONDS);
102
        AuthLoginResponse alr = new AuthLoginResponse();
103
        alr.setAssociated(null != uoi);
104
        alr.setAuthCode(key);
105
        return alr;
106
    }
107

108
    @SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
109
            "userAuth=String.valueOf(result.isAuth())", "userEmail=result.getEmail()==null?\"\":result.getEmail()",
110
            "userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
111
    @Post
112
    @Path("/login")
113
    public SessionUser login(@JdbcConn Connection con, String authCode) throws SQLException, JfwBaseException {
114
        @SuppressWarnings("unchecked")
115
        StateCode<OAuthUser, UserOpenId> sc = (StateCode<OAuthUser, UserOpenId>) JfwAppContext.getCachedObject(authCode);
116
        JfwAppContext.removeCachedObject(authCode);
117
        if (sc == null || sc.getExpiredTime() < System.currentTimeMillis())
118
            throw new JfwBaseException(-1, "authCode is expired");
119
        if (null == sc.getValue())
120
            throw new JfwBaseException(-2, "authCode is invalid openid not associate local user");
121

122
        User user = this.userDao.query(con, sc.getValue().getUserid());
123
        if (null == user)
124
            return null;
125
        SessionUser ret = new SessionUser();
126
        ret.setId(user.getId());
127
        if (null != this.professorDao.query(con, user.getId())) {
128
            ret.setName(this.professorDao.query(con, user.getId()).getName());
129
        }
130
        ret.setMobilePhone(user.getMobilePhone());
131
        ret.setType(user.getUserType());
132
        ret.setEmail(user.getEmail());
133
        ret.setAuth(!SysService.DEFAULT_PASS_WORD.equals(user.getPasswd()));
134
        return ret;
135
    }
136

137
    @Post
138
    @Path("/validOpenid")
139
    public AuthLoginResponse validOpenid(@JdbcConn Connection con, String authType, String openid) throws SQLException, JfwBaseException {
140
        OAuthUser ou = new OAuthUser();
141
        ou.setType(authType);
142
        ou.setOpenId(openid);
143
        UserOpenId uoi = this.userOpenIdDao.query(con, authType, openid);
144
        AuthLoginResponse alr = new AuthLoginResponse();
145
        StateCode<OAuthUser, UserOpenId> sc = new StateCode<OAuthUser, UserOpenId>();
146
        final String key = JfwAppContext.cacheObjectAndGenKey(sc);
147
        sc.setKey(ou);
148
        sc.setValue(uoi);
149
        sc.setBuildTime(System.currentTimeMillis());
150
        sc.setExpiredTime(sc.getBuildTime() + this.expriesWithOpenId);
151
        JfwAppContext.getScheduledExecutorService().schedule(new Runnable() {
152
            @Override
153
            public void run() {
154
                JfwAppContext.removeCachedObject(key);
155
            }
156
        }, this.expriesWithOpenId, TimeUnit.MILLISECONDS);
157
        alr.setAssociated(null != uoi);
158
        alr.setAuthCode(key);
159
        return alr;
160
    }
161

162
    
163

164
    @Get
165
    @Path("/redirectUris")
166
    public Map<String, String> getRedirectUris() {
167
        Map<String, String> ret = new HashMap<String, String>();
168
        for (Map.Entry<String, OAuthHandler> h : this.handlers.entrySet()) {
169
            ret.put(h.getKey(), h.getValue().getLoginUrl());
170
        }
171
        return ret;
172
    }
173

174
    public static class AuthLoginResponse {
175
        private boolean associated;
176
        private String authCode;
177

178
        public boolean isAssociated() {
179
            return associated;
180
        }
181

182
        public void setAssociated(boolean associated) {
183
            this.associated = associated;
184
        }
185

186
        public String getAuthCode() {
187
            return authCode;
188
        }
189

190
        public void setAuthCode(String authCode) {
191
            this.authCode = authCode;
192
        }
193
    }
30
	private long expriesWithOpenId = 1000 * 60 * 10;
31

32
	@Autowrie
33
	private UserOpenIdDao userOpenIdDao;
34
	@Autowrie
35
	private UserDao userDao;
36
	@Autowrie
37
	private ProfessorDao professorDao;
38

39
	private Map<String, OAuthHandler> handlers;
40

41
	public Map<String, OAuthHandler> getHandlers() {
42
		return handlers;
43
	}
44

45
	public void setHandlers(Map<String, OAuthHandler> handlers) {
46
		this.handlers = handlers;
47
	}
48

49
	public UserOpenIdDao getUserOpenIdDao() {
50
		return userOpenIdDao;
51
	}
52

53
	public void setUserOpenIdDao(UserOpenIdDao userOpenIdDao) {
54
		this.userOpenIdDao = userOpenIdDao;
55
	}
56

57
	public UserDao getUserDao() {
58
		return userDao;
59
	}
60

61
	public void setUserDao(UserDao userDao) {
62
		this.userDao = userDao;
63
	}
64

65
	public long getExpriesWithOpenId() {
66
		return expriesWithOpenId;
67
	}
68

69
	public void setExpriesWithOpenId(long expriesWithOpenId) {
70
		this.expriesWithOpenId = expriesWithOpenId;
71
	}
72

73
	public ProfessorDao getProfessorDao() {
74
		return professorDao;
75
	}
76

77
	public void setProfessorDao(ProfessorDao professorDao) {
78
		this.professorDao = professorDao;
79
	}
80

81
	@Get
82
	@Path("/validCode")
83
	public AuthLoginResponse validCode(@JdbcConn Connection con, String code, String state) throws SQLException, JfwBaseException {
84
		OAuthHandler oah = this.handlers.get(state);
85
		if (oah == null)
86
			throw new IllegalArgumentException("非法的参数{state=" + state);
87
		OAuthUser ou = oah.login(code);
88
		UserOpenId uoi = this.userOpenIdDao.queryByOpenid(con, oah.getType(), ou.getOpenId());
89

90
		StateCode<OAuthUser, UserOpenId> sc = new StateCode<OAuthUser, UserOpenId>();
91
		final String key = JfwAppContext.cacheObjectAndGenKey(sc);
92
		sc.setKey(ou);
93
		sc.setValue(uoi);
94
		sc.setBuildTime(System.currentTimeMillis());
95
		sc.setExpiredTime(sc.getBuildTime() + this.expriesWithOpenId);
96
		JfwAppContext.getScheduledExecutorService().schedule(new Runnable() {
97
			@Override
98
			public void run() {
99
				JfwAppContext.removeCachedObject(key);
100
			}
101
		}, this.expriesWithOpenId, TimeUnit.MILLISECONDS);
102
		AuthLoginResponse alr = new AuthLoginResponse();
103
		alr.setAssociated(null != uoi);
104
		alr.setAuthCode(key);
105
		return alr;
106
	}
107

108
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
109
			"userAuth=String.valueOf(result.isAuth())", "userEmail=result.getEmail()==null?\"\":result.getEmail()",
110
			"userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
111
	@Post
112
	@Path("/login")
113
	public SessionUser login(@JdbcConn Connection con, String authCode) throws SQLException, JfwBaseException {
114
		@SuppressWarnings("unchecked")
115
		StateCode<OAuthUser, UserOpenId> sc = (StateCode<OAuthUser, UserOpenId>) JfwAppContext.getCachedObject(authCode);
116

117
		if (sc == null || sc.getExpiredTime() < System.currentTimeMillis())
118
			throw new JfwBaseException(-1, "authCode is expired");
119
		if (null == sc.getValue())
120
			throw new JfwBaseException(-2, "authCode is invalid openid not associate local user");
121

122
		User user = this.userDao.query(con, sc.getValue().getUserid());
123
		if (null == user)
124
			return null;
125
		
126
		JfwAppContext.removeCachedObject(authCode);
127
		SessionUser ret = new SessionUser();
128
		ret.setId(user.getId());
129
		Professor professor = this.professorDao.queryOne(con, user.getId());
130
		if (null != professor) {
131
			ret.setName(professor.getName());
132
		}
133
		ret.setMobilePhone(user.getMobilePhone());
134
		ret.setType(user.getUserType());
135
		ret.setEmail(user.getEmail());
136
		ret.setAuth(true);
137
		return ret;
138
	}
139

140
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
141
			"userAuth=String.valueOf(result.isAuth())", "userEmail=result.getEmail()==null?\"\":result.getEmail()",
142
			"userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
143
	@Post
144
	@Path("/openidLogin")
145
	public SessionUser openidLogin(@JdbcConn Connection con, String openid, String oauthType) throws SQLException, JfwBaseException {
146
		if (null == this.handlers.get(oauthType)) {
147
			throw new JfwBaseException(-1, "invalid oauthType");
148
		}
149
		UserOpenId uoi = this.userOpenIdDao.queryByOpenid(con, oauthType, openid);
150
		if (uoi != null) {
151
			User user = this.userDao.query(con, uoi.getUserid());
152
			if (user != null) {
153
				SessionUser ret = new SessionUser();
154
				ret.setId(user.getId());
155
				Professor professor = this.professorDao.queryOne(con, user.getId());
156
				if (null != professor) {
157
					ret.setName(professor.getName());
158
				}
159
				ret.setMobilePhone(user.getMobilePhone());
160
				ret.setType(user.getUserType());
161
				ret.setEmail(user.getEmail());
162
				ret.setAuth(true);
163
				return ret;
164
			}
165
		}
166
		return null;
167
	}
168

169
	@Post
170
	@Path("/associate")
171
	public void associate(@JdbcConn(false) Connection con, String userid, String openid, String oauthType) throws SQLException, JfwBaseException {
172
		if (null == this.handlers.get(oauthType)) {
173
			throw new JfwBaseException(-1, "invalid oauthType");
174
		}
175
		UserOpenId uoi = new UserOpenId();
176
		uoi.setOauthType(oauthType);
177
		uoi.setUserid(userid);
178
		uoi.setOpenid(openid);
179
		try {
180
			userOpenIdDao.insert(con, uoi);
181
			con.commit();
182
		} catch (SQLException e) {
183
			if ("23505".equals(e.getSQLState())) {
184
				try {
185
					con.rollback();
186
				} catch (Throwable th) {
187
				}
188
				throw new JfwBaseException(-2, "duplicate associate");
189
			} else {
190
				throw e;
191
			}
192
		}
193
	}
194
	
195
	
196
	
197
	@Post
198
	@Path("/checkAssociated")
199
	public boolean associcated(@JdbcConn(false) Connection con,String userid,String oauthType)throws SQLException,JfwBaseException{
200
		if (null == this.handlers.get(oauthType)) {
201
			throw new JfwBaseException(-1, "invalid oauthType");
202
		}
203
		return userOpenIdDao.queryByUserid(con, oauthType, userid)!=null;
204
	}
205

206
	@Post
207
	@Path("/validOpenid")
208
	public AuthLoginResponse validOpenid(@JdbcConn Connection con, String authType, String openid) throws SQLException, JfwBaseException {
209
		OAuthUser ou = new OAuthUser();
210
		ou.setType(authType);
211
		ou.setOpenId(openid);
212
		UserOpenId uoi = this.userOpenIdDao.queryByOpenid(con, authType, openid);
213
		AuthLoginResponse alr = new AuthLoginResponse();
214
		StateCode<OAuthUser, UserOpenId> sc = new StateCode<OAuthUser, UserOpenId>();
215
		final String key = JfwAppContext.cacheObjectAndGenKey(sc);
216
		sc.setKey(ou);
217
		sc.setValue(uoi);
218
		sc.setBuildTime(System.currentTimeMillis());
219
		sc.setExpiredTime(sc.getBuildTime() + this.expriesWithOpenId);
220
		JfwAppContext.getScheduledExecutorService().schedule(new Runnable() {
221
			@Override
222
			public void run() {
223
				JfwAppContext.removeCachedObject(key);
224
			}
225
		}, this.expriesWithOpenId, TimeUnit.MILLISECONDS);
226
		alr.setAssociated(null != uoi);
227
		alr.setAuthCode(key);
228
		return alr;
229
	}
230

231
	@Get
232
	@Path("/redirectUris")
233
	public Map<String, String> getRedirectUris() {
234
		Map<String, String> ret = new HashMap<String, String>();
235
		for (Map.Entry<String, OAuthHandler> h : this.handlers.entrySet()) {
236
			ret.put(h.getKey(), h.getValue().getLoginUrl());
237
		}
238
		return ret;
239
	}
240

241
	public static class AuthLoginResponse {
242
		private boolean associated;
243
		private String authCode;
244

245
		public boolean isAssociated() {
246
			return associated;
247
		}
248

249
		public void setAssociated(boolean associated) {
250
			this.associated = associated;
251
		}
252

253
		public String getAuthCode() {
254
			return authCode;
255
		}
256

257
		public void setAuthCode(String authCode) {
258
			this.authCode = authCode;
259
		}
260
	}
194

261

195
}
262
}

+ 7 - 0
src/main/java/com/ekexiu/portal/pojo/SessionUser.java

8
	private String email;
8
	private String email;
9
	private String mobilePhone;
9
	private String mobilePhone;
10
	private String name;
10
	private String name;
11
	private String authentication;
11
	private String authStatus;
12
	private String authStatus;
12
	
13
	
13
	public String getName() {
14
	public String getName() {
46
	public void setMobilePhone(String mobilePhone) {
47
	public void setMobilePhone(String mobilePhone) {
47
		this.mobilePhone = mobilePhone;
48
		this.mobilePhone = mobilePhone;
48
	}
49
	}
50
	public String getAuthentication() {
51
		return authentication;
52
	}
53
	public void setAuthentication(String authentication) {
54
		this.authentication = authentication;
55
	}
49
	public String getAuthStatus() {
56
	public String getAuthStatus() {
50
		return authStatus;
57
		return authStatus;
51
	}
58
	}

+ 12 - 0
src/main/java/com/ekexiu/portal/service/ProfessorService.java

302
		this.professorDao.update(con, professor);
302
		this.professorDao.update(con, professor);
303
	}
303
	}
304
	
304
	
305
	@Post
306
	@Path("/updatePro")
307
	public void updatePro(@JdbcConn(true) Connection con,EditProfessor professor)throws SQLException, IOException{
308
		if(professor.getOrgName()!=null)
309
			if(null != this.orgDao.queryByName(con, professor.getOrgName())){
310
				professor.setOrgId(this.orgDao.queryByName(con, professor.getOrgName()));
311
			} else {
312
				professor.setOrgId(this.orgService.createOrganization(con, professor.getOrgName()));
313
			}
314
		this.professorDao.update(con, professor);
315
	}
316
	
305
	@Get
317
	@Get
306
	@Path("/queryInvite")
318
	@Path("/queryInvite")
307
	public List<EditProfessor> queryInvite(@JdbcConn Connection con, String id) throws SQLException{
319
	public List<EditProfessor> queryInvite(@JdbcConn Connection con, String id) throws SQLException{

+ 346 - 106
src/main/java/com/ekexiu/portal/service/SysService.java

31
import com.ekexiu.portal.dao.OrgUserDao;
31
import com.ekexiu.portal.dao.OrgUserDao;
32
import com.ekexiu.portal.dao.ProfessorDao;
32
import com.ekexiu.portal.dao.ProfessorDao;
33
import com.ekexiu.portal.dao.UserDao;
33
import com.ekexiu.portal.dao.UserDao;
34
import com.ekexiu.portal.dao.UserOpenIdDao;
34
import com.ekexiu.portal.mail.MailService;
35
import com.ekexiu.portal.mail.MailService;
35
import com.ekexiu.portal.mobile.MobilePhoneService;
36
import com.ekexiu.portal.mobile.MobilePhoneService;
37
import com.ekexiu.portal.oauth.OAuthService;
38
import com.ekexiu.portal.oauth.OAuthUser;
36
import com.ekexiu.portal.po.OrgUser;
39
import com.ekexiu.portal.po.OrgUser;
37
import com.ekexiu.portal.po.Organization;
40
import com.ekexiu.portal.po.Organization;
38
import com.ekexiu.portal.po.Professor;
41
import com.ekexiu.portal.po.Professor;
39
import com.ekexiu.portal.po.User;
42
import com.ekexiu.portal.po.User;
43
import com.ekexiu.portal.po.UserOpenId;
40
import com.ekexiu.portal.pojo.SessionUser;
44
import com.ekexiu.portal.pojo.SessionUser;
41
45
42
@Path
46
@Path
56
	@Autowrie
60
	@Autowrie
57
	private ProfessorDao professorDao;
61
	private ProfessorDao professorDao;
58
	@Autowrie
62
	@Autowrie
63
	private ProfessorService professorService;
64
	@Autowrie
59
	private MailService mailservice;
65
	private MailService mailservice;
60
	@Autowrie
66
	@Autowrie
61
	private MobilePhoneService mobilePhoneServcie;
67
	private MobilePhoneService mobilePhoneServcie;
62
	@Autowrie
68
	@Autowrie
63
	private GrowthLogService growthLogService;
69
	private GrowthLogService growthLogService;
70
	@Autowrie
71
	private GrowthRuleService rule;
72
	@Autowrie
73
	private OAuthService oauthService;
74
	@Autowrie
75
	private UserOpenIdDao userOpenIdDao;
64
76
65
	private String bindMailSubject;
77
	private String bindMailSubject;
66
78
67
	private String bindMailReplaceKey;
79
	private String bindMailReplaceKey;
68
	private String bindMailReplaceContentTempalte;
80
	private String bindMailReplaceContentTempalte;
69
	private long timeLimitWithBindMail = 10 * 60 * 1000;
81
	private long timeLimitWithBindMail = 10 * 60 * 1000;
70
	
71
	private String bindOrgMailReplaceKey; 
72
	private String bindOrgMailSubject; 
82
83
	private String bindOrgMailReplaceKey;
84
	private String bindOrgMailSubject;
73
	private String bindOrgMailReplaceContentTempalte;
85
	private String bindOrgMailReplaceContentTempalte;
74
	private long timeLimitWithBindOrgMail = 10 * 60 * 1000;
86
	private long timeLimitWithBindOrgMail = 10 * 60 * 1000;
75
87
77
	private String regMailReplaceKey;
89
	private String regMailReplaceKey;
78
	private String regMailReplaceContentTempalte;
90
	private String regMailReplaceContentTempalte;
79
	private long timeLimitWithRegMail = 10 * 60 * 1000;
91
	private long timeLimitWithRegMail = 10 * 60 * 1000;
80
	
92
81
	private String orgRegMailSubject = "注册[科袖网]企业用户";
93
	private String orgRegMailSubject = "注册[科袖网]企业用户";
82
	private String orgRegMailReplaceKey;
94
	private String orgRegMailReplaceKey;
83
	private String orgRegMailReplaceContentTempalte;
95
	private String orgRegMailReplaceContentTempalte;
84
	private long timeLimitWithOrgRegMail = 10 * 60 * 1000;
96
	private long timeLimitWithOrgRegMail = 10 * 60 * 1000;
85
	
97
86
	private String sendConsultMailSubject;
98
	private String sendConsultMailSubject;
87
	private String sendConsultMailContentTemplate;
99
	private String sendConsultMailContentTemplate;
88
	private String sendConsultSMSContentTemplate;
100
	private String sendConsultSMSContentTemplate;
99
	private String mailRetrievePasswordReplaceKey;
111
	private String mailRetrievePasswordReplaceKey;
100
	private String mailRetrievePasswordSubject;
112
	private String mailRetrievePasswordSubject;
101
	private long timeLimitWithMailRetrivePassword = 10 * 60 * 1000;
113
	private long timeLimitWithMailRetrivePassword = 10 * 60 * 1000;
102
	
114
103
	private String orgMailRetrievePasswordContentTemplate;
115
	private String orgMailRetrievePasswordContentTemplate;
104
	private String orgMailRetrievePasswordReplaceKey;
116
	private String orgMailRetrievePasswordReplaceKey;
105
	private String orgMailRetrievePasswordSubject;
117
	private String orgMailRetrievePasswordSubject;
108
	private String regMobilePhoneReplaceKey;
120
	private String regMobilePhoneReplaceKey;
109
	private String regMobilePhoneContentTemplate;
121
	private String regMobilePhoneContentTemplate;
110
	private long timeLimitWithRegMobilePhone = 3 * 60 * 1000;
122
	private long timeLimitWithRegMobilePhone = 3 * 60 * 1000;
111
	
123
112
	private String loginMobilePhoneReplaceKey;
124
	private String loginMobilePhoneReplaceKey;
113
	private String loginMobilePhoneContentTemplate;
125
	private String loginMobilePhoneContentTemplate;
114
	private long timeLimitWithLoginMobilePhone = 3 * 60 * 1000;
126
	private long timeLimitWithLoginMobilePhone = 3 * 60 * 1000;
120
	private String inviteReplaceCode = "invitCodeKey";
132
	private String inviteReplaceCode = "invitCodeKey";
121
	private String inviteMailSubject = "[ 科袖网 ]特邀科研专家邀请函";
133
	private String inviteMailSubject = "[ 科袖网 ]特邀科研专家邀请函";
122
	private String inviteMailContentTempalte;
134
	private String inviteMailContentTempalte;
123
	
135
124
	private String inviteStaffReplaceKey = "stateCode";
136
	private String inviteStaffReplaceKey = "stateCode";
125
	private String inviteStaffMailTempalte;
137
	private String inviteStaffMailTempalte;
126
	private String inviteStaffOrgKey = "orgKey";
138
	private String inviteStaffOrgKey = "orgKey";
127
	private String inviteStaffSubject = "[ 科袖网 ]企业员工邀请函";
139
	private String inviteStaffSubject = "[ 科袖网 ]企业员工邀请函";
128
	
140
129
	private String retrieveOrgSuccessTempalte;
141
	private String retrieveOrgSuccessTempalte;
130
	private String retrieveOrgSuccessSubject;
142
	private String retrieveOrgSuccessSubject;
131
	private String retrieveOrgFailTempalte;
143
	private String retrieveOrgFailTempalte;
227
		this.growthLogService = growthLogService;
239
		this.growthLogService = growthLogService;
228
	}
240
	}
229
241
242
	public GrowthRuleService getRule() {
243
		return rule;
244
	}
245
246
	public void setRule(GrowthRuleService rule) {
247
		this.rule = rule;
248
	}
249
230
	public String getPhoneRetrievePasswordReplaceKey() {
250
	public String getPhoneRetrievePasswordReplaceKey() {
231
		return phoneRetrievePasswordReplaceKey;
251
		return phoneRetrievePasswordReplaceKey;
232
	}
252
	}
515
		this.professorDao = professorDao;
535
		this.professorDao = professorDao;
516
	}
536
	}
517
537
538
	public ProfessorService getProfessorService() {
539
		return professorService;
540
	}
541
542
	public void setProfessorService(ProfessorService professorService) {
543
		this.professorService = professorService;
544
	}
545
518
	public MailService getMailservice() {
546
	public MailService getMailservice() {
519
		return mailservice;
547
		return mailservice;
520
	}
548
	}
627
		this.retrieveOrgFailSubject = retrieveOrgFailSubject;
655
		this.retrieveOrgFailSubject = retrieveOrgFailSubject;
628
	}
656
	}
629
657
658
	public OAuthService getOauthService() {
659
		return oauthService;
660
	}
661
662
	public void setOauthService(OAuthService oauthService) {
663
		this.oauthService = oauthService;
664
	}
665
666
	public UserOpenIdDao getUserOpenIdDao() {
667
		return userOpenIdDao;
668
	}
669
670
	public void setUserOpenIdDao(UserOpenIdDao userOpenIdDao) {
671
		this.userOpenIdDao = userOpenIdDao;
672
	}
673
630
	/**
674
	/**
631
	 * 验证注册时填写的手机号和邮箱是否已经注册过
675
	 * 验证注册时填写的手机号和邮箱是否已经注册过
632
	 * 
676
	 * 
646
			return true;
690
			return true;
647
		}
691
		}
648
	}
692
	}
649
	
693
650
	@Get
694
	@Get
651
	@Path("/isRegOrg")
695
	@Path("/isRegOrg")
652
	public boolean isRegOrg(@JdbcConn Connection con,String email)throws SQLException{
696
	public boolean isRegOrg(@JdbcConn Connection con, String email) throws SQLException {
653
		OrgUser orgUser = this.orgUserDao.queryByEmail(con, email);
697
		OrgUser orgUser = this.orgUserDao.queryByEmail(con, email);
654
		if(null != orgUser){
698
		if (null != orgUser) {
655
			return false;
699
			return false;
656
		}else{
700
		} else {
657
			return true;
701
			return true;
658
		}
702
		}
659
	}
703
	}
660
	
704
661
	@Get
705
	@Get
662
	@Path("/isOrgUser")
706
	@Path("/isOrgUser")
663
	public boolean isOrgUser(@JdbcConn Connection con,String orgName)throws SQLException, JfwBaseException{
707
	public boolean isOrgUser(@JdbcConn Connection con, String orgName) throws SQLException, JfwBaseException {
664
		String orgId = this.orgDao.queryByName(con, orgName);
708
		String orgId = this.orgDao.queryByName(con, orgName);
665
		if(orgId == null){
709
		if (orgId == null) {
666
			return true;
710
			return true;
667
		}else{
668
			if(this.orgUserDao.queryOne(con, orgId) == null){
711
		} else {
712
			if (this.orgUserDao.queryOne(con, orgId) == null) {
669
				return true;
713
				return true;
670
			}else{
714
			} else {
671
				String authStatus = (this.orgDao.query(con, orgId)).getAuthStatus();
715
				String authStatus = (this.orgDao.query(con, orgId)).getAuthStatus();
672
				if("3".equals(authStatus)){
716
				if ("3".equals(authStatus)) {
673
					throw new JfwBaseException(3, "该企业为科袖认证企业");
717
					throw new JfwBaseException(3, "该企业为科袖认证企业");
674
				}else if("2".equals(authStatus)){
718
				} else if ("2".equals(authStatus)) {
675
					throw new JfwBaseException(4, "该企业正在进行认证审核");
719
					throw new JfwBaseException(4, "该企业正在进行认证审核");
676
				}else{
720
				} else {
677
					throw new JfwBaseException(2, "该企业已注册科袖账号");
721
					throw new JfwBaseException(2, "该企业已注册科袖账号");
678
				}
722
				}
679
			}
723
			}
709
	 */
753
	 */
710
	@Post
754
	@Post
711
	@Path("/regmobile")
755
	@Path("/regmobile")
712
	public String regMobile(@JdbcConn(true) Connection con, String state, String mobilePhone, String validateCode, 
713
			String password, @Nullable String inviterId)throws SQLException, JfwBaseException {
756
	public String regMobile(@JdbcConn(true) Connection con, String state, String mobilePhone, String validateCode, String password, @Nullable String inviterId) throws SQLException, JfwBaseException {
714
		@SuppressWarnings("unchecked")
757
		@SuppressWarnings("unchecked")
715
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(state);
758
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(state);
716
		if (sc == null || sc.getExpiredTime() < System.currentTimeMillis())
759
		if (sc == null || sc.getExpiredTime() < System.currentTimeMillis())
717
			throw new JfwBaseException(-1, "验证超时");
760
			throw new JfwBaseException(-1, "验证超时");
761
		if (!sc.getKey().equals(mobilePhone)) {
762
			throw new JfwBaseException(-2, "手机号与验证手机不匹配");
763
		}
764
		if (!sc.getValue().equals(validateCode)) {
765
			throw new JfwBaseException(-3, "验证码错误");
766
		}
718
		try {
767
		try {
719
			if (!sc.getKey().equals(mobilePhone)) {
720
				throw new JfwBaseException(-2, "手机号与验证手机不匹配");
768
			User user = new User();
769
			user.setId(StringUtil.buildUUID());
770
			String passwd = StringUtil.md5(password);
771
			user.setMobilePhone(mobilePhone);
772
			user.setPasswd(passwd);
773
			user.setUserType("0");
774
			user.setInviterId(inviterId);
775
			user.setActiveTime(DATE.format(new Date()));
776
			this.userDao.insert(con, user);
777
			if (inviterId != null) {
778
				this.growthLogService.invite(con, inviterId, user.getId());
721
			}
779
			}
722
			if (!sc.getValue().equals(validateCode)) {
723
				throw new JfwBaseException(-3, "验证码错误");
780
			return user.getId();
781
		} finally {
782
			JfwAppContext.removeCachedObject(state);
783
		}
784
	}
785
786
	private void associatedOpenId(Connection con, User user, String oauthType, String openid, String authCode) throws SQLException, JfwBaseException {
787
		if (oauthType != null) {
788
			if (oauthService.getHandlers().get(oauthType) == null) {
789
				throw new JfwBaseException(-4, "invalid oautyType");
790
			}
791
			if (openid != null) {
792
				UserOpenId uoi = new UserOpenId();
793
				uoi.setOauthType(oauthType);
794
				uoi.setOpenid(openid);
795
				uoi.setUserid(user.getId());
796
				try {
797
					userOpenIdDao.insert(con, uoi);
798
				} catch (SQLException e) {
799
					if ("23505".equals(e.getSQLState())) {
800
						throw new JfwBaseException(-6, "associated openid");
801
					}
802
					throw e;
803
				}
804
805
			} else {
806
				throw new JfwBaseException(-5, "关链第三方登录时,OPENID不可都为空");
807
			}
808
		} else if (null != authCode) {
809
			@SuppressWarnings("unchecked")
810
			StateCode<OAuthUser, UserOpenId> ac = (StateCode<OAuthUser, UserOpenId>) JfwAppContext.getCachedObject(authCode);
811
			if (ac == null || ac.getExpiredTime() < System.currentTimeMillis())
812
				throw new JfwBaseException(-7, "authCode is expired");
813
			OAuthUser ou = ac.getKey();
814
			openid = ou.getOpenId();
815
			oauthType = ou.getType();
816
			UserOpenId uoi = new UserOpenId();
817
			uoi.setOauthType(oauthType);
818
			uoi.setOpenid(openid);
819
			uoi.setUserid(user.getId());
820
			try {
821
				userOpenIdDao.insert(con, uoi);
822
				JfwAppContext.removeCachedObject(authCode);
823
			} catch (SQLException e) {
824
				if ("23505".equals(e.getSQLState())) {
825
					throw new JfwBaseException(-8, "associated openid");
826
				}
827
				throw e;
724
			}
828
			}
829
830
		}
831
	}
832
833
	@Post
834
	@Path("/mobileReg")
835
	public String mobileReg(@JdbcConn(true) Connection con, String state, String mobilePhone, String validateCode, String password, @Nullable String inviterId,
836
			String name,	@Nullable String oauthType, @Nullable String openid, @Nullable String authCode) throws SQLException, JfwBaseException, IOException {
837
		@SuppressWarnings("unchecked")
838
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(state);
839
		if (sc == null || sc.getExpiredTime() < System.currentTimeMillis())
840
			throw new JfwBaseException(-1, "验证超时");
841
		if (!sc.getKey().equals(mobilePhone)) {
842
			throw new JfwBaseException(-2, "手机号与验证手机不匹配");
843
		}
844
		if (!sc.getValue().equals(validateCode)) {
845
			throw new JfwBaseException(-3, "验证码错误");
846
		}
847
		try {
725
			User user = new User();
848
			User user = new User();
726
			user.setId(StringUtil.buildUUID());
849
			user.setId(StringUtil.buildUUID());
727
			String passwd = StringUtil.md5(password);
850
			String passwd = StringUtil.md5(password);
728
			user.setMobilePhone(mobilePhone);
851
			user.setMobilePhone(mobilePhone);
729
			user.setPasswd(passwd);
852
			user.setPasswd(passwd);
730
			user.setUserType("0");
853
			user.setUserType("0");
731
	        user.setInviterId(inviterId);
732
	        user.setActiveTime(DATE.format(new Date()));
854
			user.setInviterId(inviterId);
855
			user.setActiveTime(DATE.format(new Date()));
733
			this.userDao.insert(con, user);
856
			this.userDao.insert(con, user);
734
			if(inviterId != null){
857
			this.associatedOpenId(con, user, oauthType, openid, authCode);
858
			if (inviterId != null) {
735
				this.growthLogService.invite(con, inviterId, user.getId());
859
				this.growthLogService.invite(con, inviterId, user.getId());
736
			}
860
			}
861
			Professor professor = new Professor();
862
			professor.setId(user.getId());
863
			professor.setName(name);
864
			this.professorService.insert(con, professor, null);
737
			return user.getId();
865
			return user.getId();
738
		} finally {
866
		} finally {
739
			JfwAppContext.removeCachedObject(state);
867
			JfwAppContext.removeCachedObject(state);
770
			user.setActiveTime(DATE.format(new Date()));
898
			user.setActiveTime(DATE.format(new Date()));
771
			this.userDao.insert(con, user);
899
			this.userDao.insert(con, user);
772
			con.commit();
900
			con.commit();
773
			if(sc.getValue() != null){
901
			if (sc.getValue() != null) {
774
				this.growthLogService.invite(con, sc.getValue(), user.getId());
902
				this.growthLogService.invite(con, sc.getValue(), user.getId());
775
			}
903
			}
776
		} catch (SQLException e) {
904
		} catch (SQLException e) {
787
		}
915
		}
788
	}
916
	}
789
917
918
	@Get
919
	@Path("/mailReg")
920
	public void emailReg(@JdbcConn(false) Connection con, String key) throws SQLException, JfwBaseException, IOException {
921
		@SuppressWarnings("unchecked")
922
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(key);
923
		if (sc == null || sc.getExpiredTime() < System.currentTimeMillis()) {
924
			throw new JfwBaseException(-1, "验证链接已失效");
925
		}
926
		try {
927
			User user = new User();
928
			user.setEmail(sc.getCode());
929
			user.setId(StringUtil.buildUUID());
930
			user.setSendMailStatus(0);
931
			user.setPasswd(StringUtil.md5(sc.getKey()));
932
			user.setUserType("0");
933
			user.setInviterId(sc.getValue());
934
			user.setActiveTime(DATE.format(new Date()));
935
			this.userDao.insert(con, user);
936
			if (sc.getValue() != null) {
937
				this.growthLogService.invite(con, sc.getValue(), user.getId());
938
			}
939
			Professor professor = new Professor();
940
			professor.setId(user.getId());
941
			professor.setName(sc.getDescp());
942
			this.professorService.insert(con, professor, null);
943
			con.commit();
944
		} catch (SQLException e) {
945
			try {
946
				con.rollback();
947
			} catch (Exception ee) {
948
			}
949
			if ("23505".equals(e.getSQLState())) {
950
				throw new JfwBaseException(-3, "邮箱[" + sc.getCode() + "]已被注册过了");
951
			}
952
			throw e;
953
		} finally {
954
			JfwAppContext.removeCachedObject(key);
955
		}
956
	}
957
790
	/**
958
	/**
791
	 * 发送邮箱注册验证邮件
959
	 * 发送邮箱注册验证邮件
792
	 * 
960
	 * 
800
	 */
968
	 */
801
	@Post
969
	@Post
802
	@Path("/regmail")
970
	@Path("/regmail")
803
	public void regMail(@JdbcConn(false) Connection con,String mail,String password,@Nullable String inviterId)throws JfwBaseException, SQLException {
971
	public void regMail(@JdbcConn(false) Connection con, String mail, String password, @Nullable String inviterId) throws JfwBaseException, SQLException {
804
		User user = this.userDao.queryByEmailOrMobilePhone(con, mail);
972
		User user = this.userDao.queryByEmailOrMobilePhone(con, mail);
805
		if (null != user) {
973
		if (null != user) {
806
			throw new JfwBaseException(-1, "邮箱[" + mail + "]已被注册过了");
974
			throw new JfwBaseException(-1, "邮箱[" + mail + "]已被注册过了");
829
			}, this.timeLimitWithRegMail, TimeUnit.MILLISECONDS);
997
			}, this.timeLimitWithRegMail, TimeUnit.MILLISECONDS);
830
		}
998
		}
831
	}
999
	}
832
	
1000
1001
	@Post
1002
	@Path("/emailReg")
1003
	public void emailReg(@JdbcConn(false) Connection con, String mail, String password, @Nullable String inviterId, String name)
1004
			throws JfwBaseException, SQLException {
1005
		User user = this.userDao.queryByEmailOrMobilePhone(con, mail);
1006
		if (null != user) {
1007
			throw new JfwBaseException(-1, "邮箱[" + mail + "]已被注册过了");
1008
		} else {
1009
1010
			StateCode<String, String> sc = new StateCode<String, String>();
1011
			final String key = JfwAppContext.cacheObjectAndGenKey(sc);
1012
			Map<String, String> map = new HashMap<>();
1013
			map.put(this.regMailReplaceKey, key);
1014
			try {
1015
				this.mailservice.sendSimpleMail(mail, this.regMailReplaceContentTempalte, map, this.regMailSubject);
1016
			} catch (MessagingException e) {
1017
				JfwAppContext.removeCachedObject(key);
1018
				throw new JfwBaseException(-2, "给邮箱[" + mail + "]发邮件错误", e);
1019
			}
1020
			sc.setCode(mail);
1021
			sc.setKey(password);
1022
			sc.setValue(inviterId);
1023
			sc.setDescp(name);
1024
			sc.setBuildTime(System.currentTimeMillis());
1025
			sc.setExpiredTime(sc.getBuildTime() + this.timeLimitWithRegMail);
1026
			JfwAppContext.getScheduledExecutorService().schedule(new Runnable() {
1027
				@Override
1028
				public void run() {
1029
					JfwAppContext.removeCachedObject(key);
1030
				}
1031
			}, this.timeLimitWithRegMail, TimeUnit.MILLISECONDS);
1032
		}
1033
	}
1034
833
	/**
1035
	/**
834
	 * 验证企业邮箱并注册企业账号
1036
	 * 验证企业邮箱并注册企业账号
1037
	 * 
835
	 * @param con
1038
	 * @param con
836
	 * @param key 邮箱验证的返回值
1039
	 * @param key
1040
	 *            邮箱验证的返回值
837
	 * @throws SQLException
1041
	 * @throws SQLException
838
	 * @throws JfwBaseException
1042
	 * @throws JfwBaseException
839
	 * @throws IOException
1043
	 * @throws IOException
847
			throw new JfwBaseException(-1, "验证链接已失效");
1051
			throw new JfwBaseException(-1, "验证链接已失效");
848
		}
1052
		}
849
		String orgId = this.orgDao.queryByName(con, sc.getValue());
1053
		String orgId = this.orgDao.queryByName(con, sc.getValue());
850
		if((orgId != null) && (this.orgUserDao.queryOne(con, orgId)!= null)){
1054
		if ((orgId != null) && (this.orgUserDao.queryOne(con, orgId) != null)) {
851
			throw new JfwBaseException(2, "该企业已注册科袖账号");
1055
			throw new JfwBaseException(2, "该企业已注册科袖账号");
852
		}
1056
		}
853
		try {
1057
		try {
854
			OrgUser orgUser = new OrgUser();
1058
			OrgUser orgUser = new OrgUser();
855
			orgUser.setEmail(sc.getCode());
1059
			orgUser.setEmail(sc.getCode());
856
			if(orgId != null){
1060
			if (orgId != null) {
857
				orgUser.setId(orgId);
1061
				orgUser.setId(orgId);
858
			}else{
1062
			} else {
859
				orgUser.setId(this.orgService.createOrganization(con, sc.getValue()));
1063
				orgUser.setId(this.orgService.createOrganization(con, sc.getValue()));
860
			}
1064
			}
861
			orgUser.setPasswd(StringUtil.md5(sc.getKey()));
1065
			orgUser.setPasswd(StringUtil.md5(sc.getKey()));
876
			JfwAppContext.removeCachedObject(key);
1080
			JfwAppContext.removeCachedObject(key);
877
		}
1081
		}
878
	}
1082
	}
879
	
1083
880
	/**
1084
	/**
881
	 * 给注册的企业邮箱发送验证邮件
1085
	 * 给注册的企业邮箱发送验证邮件
1086
	 * 
882
	 * @param con
1087
	 * @param con
883
	 * @param orgName 企业名称
884
	 * @param mail 企业邮箱
885
	 * @param password 密码
1088
	 * @param orgName
1089
	 *            企业名称
1090
	 * @param mail
1091
	 *            企业邮箱
1092
	 * @param password
1093
	 *            密码
886
	 * @throws JfwBaseException
1094
	 * @throws JfwBaseException
887
	 * @throws SQLException
1095
	 * @throws SQLException
888
	 */
1096
	 */
889
	@Post
1097
	@Post
890
	@Path("/regOrgMail")
1098
	@Path("/regOrgMail")
891
	public void regOrgMail(@JdbcConn(false) Connection con,String orgName,String mail,String password)throws JfwBaseException, SQLException {
1099
	public void regOrgMail(@JdbcConn(false) Connection con, String orgName, String mail, String password) throws JfwBaseException, SQLException {
892
		OrgUser orgUser = this.orgUserDao.queryByEmail(con, mail);
1100
		OrgUser orgUser = this.orgUserDao.queryByEmail(con, mail);
893
		if (null != orgUser) {
1101
		if (null != orgUser) {
894
			throw new JfwBaseException(-1, "邮箱[" + mail + "]已被注册过了");
1102
			throw new JfwBaseException(-1, "邮箱[" + mail + "]已被注册过了");
944
		this.mailservice.sendSimpleMail(user.getEmail(), mailContent, null, this.inviteMailSubject);
1152
		this.mailservice.sendSimpleMail(user.getEmail(), mailContent, null, this.inviteMailSubject);
945
		return "send success !";
1153
		return "send success !";
946
	}
1154
	}
947
	
1155
948
	@Post
1156
	@Post
949
	@Path("/inviteStaff/{key}")
1157
	@Path("/inviteStaff/{key}")
950
	public Map<String, String> inviteStaff(@JdbcConn Connection con,@PathVar String key)throws SQLException, JfwBaseException{
1158
	public Map<String, String> inviteStaff(@JdbcConn Connection con, @PathVar String key) throws SQLException, JfwBaseException {
951
		@SuppressWarnings("unchecked")
1159
		@SuppressWarnings("unchecked")
952
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(key);
1160
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(key);
953
		if(sc == null){
1161
		if (sc == null) {
954
			throw new JfwBaseException(-1, "验证链接已失效");
1162
			throw new JfwBaseException(-1, "验证链接已失效");
955
		}
1163
		}
956
		Organization org = this.orgDao.query(con, sc.getKey());
1164
		Organization org = this.orgDao.query(con, sc.getKey());
957
		if(org == null){
1165
		if (org == null) {
958
			throw new JfwBaseException(-2, "不存在的企业");
1166
			throw new JfwBaseException(-2, "不存在的企业");
959
		}
1167
		}
960
		Map<String, String> map = new HashMap<String, String>();
1168
		Map<String, String> map = new HashMap<String, String>();
962
		map.put("orgName", org.getName());
1170
		map.put("orgName", org.getName());
963
		map.put("email", sc.getValue());
1171
		map.put("email", sc.getValue());
964
		return map;
1172
		return map;
965
		
1173
966
	}
1174
	}
967
	
1175
968
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
1176
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
969
			"userAuth=String.valueOf(result.isAuth())", "userEmail=result.getEmail()==null?\"\":result.getEmail()",
1177
			"userAuth=String.valueOf(result.isAuth())", "userEmail=result.getEmail()==null?\"\":result.getEmail()",
970
			"userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1178
			"userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
971
	@Post
1179
	@Post
972
	@Path("/regInviteStaff")
1180
	@Path("/regInviteStaff")
973
	@SuppressWarnings("unchecked")
1181
	@SuppressWarnings("unchecked")
974
	public SessionUser regInviteStaff(@JdbcConn(true) Connection con,String key,String state,String phone,String validateCode,String name,String passwd)throws SQLException, JfwBaseException{
1182
	public SessionUser regInviteStaff(@JdbcConn(true) Connection con, String key, String state, String phone, String validateCode, String name, String passwd)
1183
			throws SQLException, JfwBaseException {
975
		StateCode<String, String> stateCode = (StateCode<String, String>) JfwAppContext.getCachedObject(key);
1184
		StateCode<String, String> stateCode = (StateCode<String, String>) JfwAppContext.getCachedObject(key);
976
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(state);
1185
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(state);
977
		if (stateCode == null) {
1186
		if (stateCode == null) {
994
			user.setEmail(stateCode.getValue());
1203
			user.setEmail(stateCode.getValue());
995
			user.setPasswd(StringUtil.md5(passwd));
1204
			user.setPasswd(StringUtil.md5(passwd));
996
			user.setUserType("0");
1205
			user.setUserType("0");
997
	        user.setActiveTime(DATE.format(new Date()));
998
	        Professor professor = new Professor();
999
	        professor.setId(id);
1000
	        professor.setName(name);
1001
	        professor.setOrgId(stateCode.getKey());
1002
	        professor.setOrgAuth("1");
1206
			user.setActiveTime(DATE.format(new Date()));
1003
			this.userDao.insert(con, user);
1207
			this.userDao.insert(con, user);
1208
			Professor professor = new Professor();
1209
			professor.setId(id);
1210
			professor.setName(name);
1211
			professor.setOrgId(stateCode.getKey());
1212
			professor.setOrgAuth("1");
1213
			professor.setPhone(user.getMobilePhone());
1214
			professor.setEmail(user.getEmail());
1215
			int value = 0;
1216
			if (user.getMobilePhone() != null && user.getMobilePhone().trim().length() == 11) {
1217
				professor.setPhone(user.getMobilePhone());
1218
				value = value + this.rule.getBindMobile();
1219
				this.growthLogService.firstBindMobile(con, professor.getId());
1220
			}
1221
			if (user.getEmail() != null && !"".equals(user.getEmail())) {
1222
				professor.setEmail(user.getEmail());
1223
				value = value + this.rule.getBindEmail();
1224
				this.growthLogService.firstBindEmail(con, professor.getId());
1225
			}
1226
			professor.setScoreValue(value);
1227
			professor.setGrowthValue(value);
1004
			this.professorDao.insert(con, professor);
1228
			this.professorDao.insert(con, professor);
1005
			SessionUser ret = new SessionUser();
1229
			SessionUser ret = new SessionUser();
1006
			ret.setMobilePhone(phone);
1230
			ret.setMobilePhone(phone);
1015
			JfwAppContext.removeCachedObject(state);
1239
			JfwAppContext.removeCachedObject(state);
1016
		}
1240
		}
1017
	}
1241
	}
1018
	
1242
1019
	@Get
1243
	@Get
1020
	@Path("/inviteStaffMail")
1244
	@Path("/inviteStaffMail")
1021
	public boolean inviteStaffMail(@JdbcConn(false) Connection con,String orgId,String mail) throws SQLException, JfwBaseException {
1245
	public boolean inviteStaffMail(@JdbcConn(false) Connection con, String orgId, String mail) throws SQLException, JfwBaseException {
1022
		Organization org = this.orgDao.query(con, orgId);
1246
		Organization org = this.orgDao.query(con, orgId);
1023
		if(org == null){
1247
		if (org == null) {
1024
			throw new JfwBaseException(-1, "系统没有该企业");
1248
			throw new JfwBaseException(-1, "系统没有该企业");
1025
		}
1249
		}
1026
		StateCode<String, String> sc = new StateCode<String, String>();
1250
		StateCode<String, String> sc = new StateCode<String, String>();
1040
		sc.setCode(org.getName());
1264
		sc.setCode(org.getName());
1041
		return true;
1265
		return true;
1042
	}
1266
	}
1043
	
1267
1044
	@Post
1268
	@Post
1045
	@Path("/retrieveOrgSuccess")
1269
	@Path("/retrieveOrgSuccess")
1046
	public boolean retrieveOrgUserSuccess(@JdbcConn(false) Connection con,String mail) throws SQLException, JfwBaseException {
1270
	public boolean retrieveOrgUserSuccess(@JdbcConn(false) Connection con, String mail) throws SQLException, JfwBaseException {
1047
		try {
1271
		try {
1048
			this.mailservice.sendSimpleMail(mail, this.retrieveOrgSuccessTempalte, null, this.retrieveOrgSuccessSubject);
1272
			this.mailservice.sendSimpleMail(mail, this.retrieveOrgSuccessTempalte, null, this.retrieveOrgSuccessSubject);
1049
		} catch (MessagingException e) {
1273
		} catch (MessagingException e) {
1051
		}
1275
		}
1052
		return true;
1276
		return true;
1053
	}
1277
	}
1054
	
1278
1055
	@Post
1279
	@Post
1056
	@Path("/retrieveOrgFail")
1280
	@Path("/retrieveOrgFail")
1057
	public boolean retrieveOrgUserFail(@JdbcConn(false) Connection con,String mail) throws SQLException, JfwBaseException {
1281
	public boolean retrieveOrgUserFail(@JdbcConn(false) Connection con, String mail) throws SQLException, JfwBaseException {
1058
		try {
1282
		try {
1059
			this.mailservice.sendSimpleMail(mail, this.retrieveOrgFailTempalte, null, this.retrieveOrgFailSubject);
1283
			this.mailservice.sendSimpleMail(mail, this.retrieveOrgFailTempalte, null, this.retrieveOrgFailSubject);
1060
		} catch (MessagingException e) {
1284
		} catch (MessagingException e) {
1064
	}
1288
	}
1065
1289
1066
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
1290
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
1067
			"userAuth=String.valueOf(result.isAuth())", "userEmail=result.getEmail()==null?\"\":result.getEmail()",
1068
			"userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1291
			"userEmail=result.getEmail()==null?\"\":result.getEmail()","authentication=result.getAuthentication()==null?\"\":result.getAuthentication()",
1292
			"userAuth=String.valueOf(result.isAuth())", "userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1069
	@Post
1293
	@Post
1070
	@Path("/invitelogin")
1294
	@Path("/invitelogin")
1071
	public SessionUser inviteLogin(@JdbcConn Connection con, String key, String code) throws SQLException {
1295
	public SessionUser inviteLogin(@JdbcConn Connection con, String key, String code) throws SQLException {
1076
		if (!user.getInviteCode().equals(code)) {
1300
		if (!user.getInviteCode().equals(code)) {
1077
			return null;
1301
			return null;
1078
		}
1302
		}
1079
		Professor professor = this.professorDao.query(con, user.getId());
1303
		Professor professor = this.professorDao.queryOne(con, user.getId());
1080
		SessionUser ret = new SessionUser();
1304
		SessionUser ret = new SessionUser();
1081
		ret.setId(user.getId());
1305
		ret.setId(user.getId());
1082
		ret.setMobilePhone(user.getMobilePhone());
1306
		ret.setMobilePhone(user.getMobilePhone());
1083
		ret.setType(user.getUserType());
1307
		ret.setType(user.getUserType());
1084
		ret.setEmail(user.getEmail());
1308
		ret.setEmail(user.getEmail());
1085
		ret.setName(professor.getName());
1309
		if (professor != null) {
1310
			ret.setName(professor.getName());
1311
			ret.setAuthentication(professor.getAuthentication()+"");
1312
		}
1086
		ret.setAuth(!DEFAULT_PASS_WORD.equals(user.getPasswd()));
1313
		ret.setAuth(!DEFAULT_PASS_WORD.equals(user.getPasswd()));
1087
		return ret;
1314
		return ret;
1088
	}
1315
	}
1089
1316
1090
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
1317
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
1091
			"userAuth=String.valueOf(result.isAuth())", "userEmail=result.getEmail()==null?\"\":result.getEmail()",
1092
			"userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1318
			"userEmail=result.getEmail()==null?\"\":result.getEmail()","authentication=result.getAuthentication()==null?\"\":result.getAuthentication()",
1319
			"userAuth=String.valueOf(result.isAuth())", "userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1093
	@Post
1320
	@Post
1094
	@Path("/slogin")
1321
	@Path("/slogin")
1095
	public SessionUser sLogin(@JdbcConn Connection con, String code, String mobile) throws SQLException {
1322
	public SessionUser sLogin(@JdbcConn Connection con, String code, String mobile) throws SQLException {
1098
			return null;
1325
			return null;
1099
		if (!mobile.equals(user.getMobilePhone()))
1326
		if (!mobile.equals(user.getMobilePhone()))
1100
			return null;
1327
			return null;
1101
		Professor professor = this.professorDao.query(con, code);
1328
		Professor professor = this.professorDao.queryOne(con, code);
1102
		SessionUser ret = new SessionUser();
1329
		SessionUser ret = new SessionUser();
1103
		ret.setId(code);
1330
		ret.setId(code);
1104
		ret.setMobilePhone(mobile);
1331
		ret.setMobilePhone(mobile);
1105
		ret.setType(user.getUserType());
1332
		ret.setType(user.getUserType());
1106
		ret.setEmail(user.getEmail());
1333
		ret.setEmail(user.getEmail());
1107
		ret.setName(professor.getName());
1334
		if(professor != null){
1335
			ret.setName(professor.getName());
1336
			ret.setAuthentication(professor.getAuthentication()+"");
1337
		}
1108
		ret.setAuth(!DEFAULT_PASS_WORD.equals(user.getPasswd()));
1338
		ret.setAuth(!DEFAULT_PASS_WORD.equals(user.getPasswd()));
1109
		return ret;
1339
		return ret;
1110
	}
1340
	}
1111
1341
1112
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
1342
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
1113
			"userAuth=String.valueOf(result.isAuth())", "userEmail=result.getEmail()==null?\"\":result.getEmail()",
1114
			"userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1343
			"userEmail=result.getEmail()==null?\"\":result.getEmail()","authentication=result.getAuthentication()==null?\"\":result.getAuthentication()",
1344
			"userAuth=String.valueOf(result.isAuth())", "userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1115
	@Post
1345
	@Post
1116
	@Path("/login")
1346
	@Path("/login")
1117
	public SessionUser login(@JdbcConn Connection con, String lk, String pw) throws SQLException, JfwBaseException {
1347
	public SessionUser login(@JdbcConn Connection con, String lk, String pw) throws SQLException, JfwBaseException {
1128
		Professor pf = this.professorDao.query(con, user.getId());
1358
		Professor pf = this.professorDao.query(con, user.getId());
1129
		if (null != pf) {
1359
		if (null != pf) {
1130
			ret.setName(pf.getName());
1360
			ret.setName(pf.getName());
1361
			ret.setAuthentication(pf.getAuthentication()+"");
1131
		}
1362
		}
1132
		ret.setMobilePhone(user.getMobilePhone());
1363
		ret.setMobilePhone(user.getMobilePhone());
1133
		ret.setType(user.getUserType());
1364
		ret.setType(user.getUserType());
1135
		ret.setAuth(true);
1366
		ret.setAuth(true);
1136
		return ret;
1367
		return ret;
1137
	}
1368
	}
1138
	
1369
1139
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
1370
	@SetCookie(checkResultNull = true, path = "/", value = { "userid=result.getId()", "userMobilePhone=result.getMobilePhone()", "userType=result.getType()",
1140
			"userAuth=String.valueOf(result.isAuth())", "userEmail=result.getEmail()==null?\"\":result.getEmail()",
1141
			"userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1371
			"userEmail=result.getEmail()==null?\"\":result.getEmail()","authentication=result.getAuthentication()==null?\"\":result.getAuthentication()",
1372
			"userAuth=String.valueOf(result.isAuth())", "userName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1142
	@Post
1373
	@Post
1143
	@Path("/mobileLogin")
1374
	@Path("/mobileLogin")
1144
	public SessionUser mobileLogin(@JdbcConn Connection con,String state,String mobilePhone,String validateCode)throws SQLException, JfwBaseException {
1375
	public SessionUser mobileLogin(@JdbcConn Connection con, String state, String mobilePhone, String validateCode) throws SQLException, JfwBaseException {
1145
		@SuppressWarnings("unchecked")
1376
		@SuppressWarnings("unchecked")
1146
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(state);
1377
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(state);
1147
		if (sc == null || sc.getExpiredTime() < System.currentTimeMillis()){
1378
		if (sc == null || sc.getExpiredTime() < System.currentTimeMillis()) {
1148
			throw new JfwBaseException(-1, "验证超时");
1379
			throw new JfwBaseException(-1, "验证超时");
1149
		}
1380
		}
1150
		if (!sc.getKey().equals(mobilePhone)) {
1381
		if (!sc.getKey().equals(mobilePhone)) {
1154
			throw new JfwBaseException(-3, "验证码错误");
1385
			throw new JfwBaseException(-3, "验证码错误");
1155
		}
1386
		}
1156
		User user = userDao.queryByEmailOrMobilePhone(con, mobilePhone);
1387
		User user = userDao.queryByEmailOrMobilePhone(con, mobilePhone);
1157
		if (null == user){
1388
		if (null == user) {
1158
			throw new JfwBaseException(-4, "该用户还未注册");
1389
			throw new JfwBaseException(-4, "该用户还未注册");
1159
		}
1390
		}
1160
		try {
1391
		try {
1163
			Professor professor = this.professorDao.query(con, user.getId());
1394
			Professor professor = this.professorDao.query(con, user.getId());
1164
			if (null != professor) {
1395
			if (null != professor) {
1165
				ret.setName(professor.getName());
1396
				ret.setName(professor.getName());
1397
				ret.setAuthentication(professor.getAuthentication()+"");
1166
			}
1398
			}
1167
			ret.setMobilePhone(user.getMobilePhone());
1399
			ret.setMobilePhone(user.getMobilePhone());
1168
			ret.setType(user.getUserType());
1400
			ret.setType(user.getUserType());
1173
			JfwAppContext.removeCachedObject(state);
1405
			JfwAppContext.removeCachedObject(state);
1174
		}
1406
		}
1175
	}
1407
	}
1176
	
1408
1177
	@SetCookie(checkResultNull = true, path = "/", value = { "orgId=result.getId()", "orgType=result.getType()",
1409
	@SetCookie(checkResultNull = true, path = "/", value = { "orgId=result.getId()", "orgType=result.getType()",
1178
			"orgAuth=String.valueOf(result.isAuth())", "orgEmail=result.getEmail()==null?\"\":result.getEmail()",
1410
			"orgAuth=String.valueOf(result.isAuth())","orgEmail=result.getEmail()==null?\"\":result.getEmail()",
1179
			"orgName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1411
			"orgName=result.getName()==null?\"\":java.net.URLEncoder.encode(result.getName(),\"utf-8\")" })
1180
	@Post
1412
	@Post
1181
	@Path("/orgLogin")
1413
	@Path("/orgLogin")
1189
		SessionUser ret = new SessionUser();
1421
		SessionUser ret = new SessionUser();
1190
		ret.setId(orgUser.getId());
1422
		ret.setId(orgUser.getId());
1191
		Organization org = this.orgDao.query(con, orgUser.getId());
1423
		Organization org = this.orgDao.query(con, orgUser.getId());
1192
		if(org != null){
1424
		if (org != null) {
1193
			ret.setName(org.getName());
1425
			ret.setName(org.getName());
1194
		}
1426
		}
1195
		ret.setType(orgUser.getUserType());
1427
		ret.setType(orgUser.getUserType());
1197
		ret.setAuth(true);
1429
		ret.setAuth(true);
1198
		return ret;
1430
		return ret;
1199
	}
1431
	}
1200
	
1432
1201
	@Post
1433
	@Post
1202
	@Path("/cp")
1434
	@Path("/cp")
1203
	public boolean changePw(@JdbcConn(true) Connection con, String id, String npw, @Nullable String onw) throws SQLException {
1435
	public boolean changePw(@JdbcConn(true) Connection con, String id, String npw, @Nullable String onw) throws SQLException {
1207
			return this.userDao.updatePasswd(con, StringUtil.md5(npw), id, StringUtil.md5(onw)) > 0;
1439
			return this.userDao.updatePasswd(con, StringUtil.md5(npw), id, StringUtil.md5(onw)) > 0;
1208
		}
1440
		}
1209
	}
1441
	}
1210
	
1442
1211
	@Post
1443
	@Post
1212
	@Path("/cpOrg")
1444
	@Path("/cpOrg")
1213
	public boolean changeOrgPw(@JdbcConn(true) Connection con, String id, String npw, String onw) throws SQLException {
1445
	public boolean changeOrgPw(@JdbcConn(true) Connection con, String id, String npw, String onw) throws SQLException {
1268
			JfwAppContext.removeCachedObject(key);
1500
			JfwAppContext.removeCachedObject(key);
1269
		}
1501
		}
1270
	}
1502
	}
1271
	
1503
1272
	@Get
1504
	@Get
1273
	@Path("/reqBindOrgMail")
1505
	@Path("/reqBindOrgMail")
1274
	public boolean reqBindOrgMail(@JdbcConn(false) Connection con, String id, String mail) throws JfwBaseException, SQLException {
1506
	public boolean reqBindOrgMail(@JdbcConn(false) Connection con, String id, String mail) throws JfwBaseException, SQLException {
1301
		}
1533
		}
1302
		return true;
1534
		return true;
1303
	}
1535
	}
1304
	
1536
1305
	@Get
1537
	@Get
1306
	@Path("/bindOrgMail/{key}")
1538
	@Path("/bindOrgMail/{key}")
1307
	public String bindOrgMail(@JdbcConn(true) Connection con, @PathVar String key) throws SQLException, JfwBaseException {
1539
	public String bindOrgMail(@JdbcConn(true) Connection con, @PathVar String key) throws SQLException, JfwBaseException {
1308
		@SuppressWarnings("unchecked")
1540
		@SuppressWarnings("unchecked")
1309
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(key);
1541
		StateCode<String, String> sc = (StateCode<String, String>) JfwAppContext.getCachedObject(key);
1310
		if (sc == null || sc.getExpiredTime() < System.currentTimeMillis()){
1542
		if (sc == null || sc.getExpiredTime() < System.currentTimeMillis()) {
1311
			throw new JfwBaseException(-1, "验证链接已失效");
1543
			throw new JfwBaseException(-1, "验证链接已失效");
1312
		}
1544
		}
1313
		try {
1545
		try {
1317
			JfwAppContext.removeCachedObject(key);
1549
			JfwAppContext.removeCachedObject(key);
1318
		}
1550
		}
1319
	}
1551
	}
1320
	
1552
1321
	@Get
1553
	@Get
1322
	@Path("/vcWithBind")
1554
	@Path("/vcWithBind")
1323
	public String reqBindBindMobilePhone(@JdbcConn(false) Connection con, String userid, String mobilePhone) throws JfwBaseException, SQLException {
1555
	public String reqBindBindMobilePhone(@JdbcConn(false) Connection con, String userid, String mobilePhone) throws JfwBaseException, SQLException {
1359
1591
1360
	/**
1592
	/**
1361
	 * 发送手机验证码
1593
	 * 发送手机验证码
1594
	 * 
1362
	 * @param con
1595
	 * @param con
1363
	 * @param mobilePhone 验证的手机号
1596
	 * @param mobilePhone
1597
	 *            验证的手机号
1364
	 * @return
1598
	 * @return
1365
	 * @throws JfwBaseException
1599
	 * @throws JfwBaseException
1366
	 * @throws SQLException
1600
	 * @throws SQLException
1397
		}
1631
		}
1398
		return key;
1632
		return key;
1399
	}
1633
	}
1400
	
1634
1401
	@Get
1635
	@Get
1402
	@Path("/sendMobileForLogin")
1636
	@Path("/sendMobileForLogin")
1403
	public String sendMobileForLogin(@JdbcConn(false) Connection con, String mobilePhone) throws JfwBaseException, SQLException {
1637
	public String sendMobileForLogin(@JdbcConn(false) Connection con, String mobilePhone) throws JfwBaseException, SQLException {
1602
			JfwAppContext.removeCachedObject(state);
1836
			JfwAppContext.removeCachedObject(state);
1603
		}
1837
		}
1604
	}
1838
	}
1605
	
1839
1606
	@Get
1840
	@Get
1607
	@Path("/resetWithOrgEmail")
1841
	@Path("/resetWithOrgEmail")
1608
	public boolean resetWithOrgEmail(@JdbcConn(false) Connection con, String mail) throws JfwBaseException, SQLException {
1842
	public boolean resetWithOrgEmail(@JdbcConn(false) Connection con, String mail) throws JfwBaseException, SQLException {
1650
			JfwAppContext.removeCachedObject(state);
1884
			JfwAppContext.removeCachedObject(state);
1651
		}
1885
		}
1652
	}
1886
	}
1653
	
1887
1654
	/**
1888
	/**
1655
	 * 给指定邮箱发送邀请邮件
1889
	 * 给指定邮箱发送邀请邮件
1890
	 * 
1656
	 * @param con
1891
	 * @param con
1657
	 * @param mobilePhones 手机号数组
1658
	 * @param emails 邮箱
1659
	 * @param inviteCodes 邀请码
1892
	 * @param mobilePhones
1893
	 *            手机号数组
1894
	 * @param emails
1895
	 *            邮箱
1896
	 * @param inviteCodes
1897
	 *            邀请码
1660
	 * @throws SQLException
1898
	 * @throws SQLException
1661
	 * @throws MessagingException
1899
	 * @throws MessagingException
1662
	 */
1900
	 */
1663
	@Post
1901
	@Post
1664
	@Path("/sendmail")
1902
	@Path("/sendmail")
1665
	public int sendmail(@JdbcConn Connection con,@Nullable String[] mobilePhones,String[] emails,String[] inviteCodes) throws SQLException, MessagingException{
1666
		for (int i = 0; i < emails.length; i++){
1667
			if(mobilePhones[i] == ""){
1903
	public int sendmail(@JdbcConn Connection con, @Nullable String[] mobilePhones, String[] emails, String[] inviteCodes)
1904
			throws SQLException, MessagingException {
1905
		for (int i = 0; i < emails.length; i++) {
1906
			if (mobilePhones[i] == "") {
1668
				mobilePhones[i] = null;
1907
				mobilePhones[i] = null;
1669
			}
1908
			}
1670
			this.sendInviteMail(con, emails[i], mobilePhones[i], inviteCodes[i]);
1909
			this.sendInviteMail(con, emails[i], mobilePhones[i], inviteCodes[i]);
1671
			this.logger.info("成功发送邀请邮件:"+emails[i]);
1910
			this.logger.info("成功发送邀请邮件:" + emails[i]);
1672
		}
1911
		}
1673
		return emails.length;
1912
		return emails.length;
1674
	}
1913
	}
1675
	
1676
	public void sendInviteMail(@JdbcConn Connection con,String email,@Nullable String mobilePhone,String inviteCode)throws SQLException, MessagingException{
1914
1915
	public void sendInviteMail(@JdbcConn Connection con, String email, @Nullable String mobilePhone, String inviteCode)
1916
			throws SQLException, MessagingException {
1677
		String mailContent = this.inviteMailContentTempalte;
1917
		String mailContent = this.inviteMailContentTempalte;
1678
		mailContent = mailContent.replaceAll(this.inviteReplaceEmail, email);
1918
		mailContent = mailContent.replaceAll(this.inviteReplaceEmail, email);
1679
		mailContent = mailContent.replaceAll(this.inviteReplaceCode, inviteCode);
1919
		mailContent = mailContent.replaceAll(this.inviteReplaceCode, inviteCode);
1686
		mailContent = mailContent.replaceAll(this.inviteReplacePhone, phoneReplace);
1926
		mailContent = mailContent.replaceAll(this.inviteReplacePhone, phoneReplace);
1687
		this.mailservice.sendSimpleMail(email, mailContent, null, this.inviteMailSubject);
1927
		this.mailservice.sendSimpleMail(email, mailContent, null, this.inviteMailSubject);
1688
	}
1928
	}
1689
	
1690
	public void sendConsultMail(String mail) throws SQLException, JfwBaseException{
1929
1930
	public void sendConsultMail(String mail) throws SQLException, JfwBaseException {
1691
		try {
1931
		try {
1692
			mailservice.sendSimpleMail(mail, this.sendConsultMailContentTemplate, null, this.sendConsultMailSubject);
1932
			mailservice.sendSimpleMail(mail, this.sendConsultMailContentTemplate, null, this.sendConsultMailSubject);
1693
		} catch (Exception e) {
1933
		} catch (Exception e) {
1694
			throw new JfwBaseException(10011, "send mail to " + mail + " error", e);
1934
			throw new JfwBaseException(10011, "send mail to " + mail + " error", e);
1695
		}
1935
		}
1696
	}
1936
	}
1697
	
1698
	public void sendConsultSMS(String mobilePhone) throws SQLException, JfwBaseException{
1937
1938
	public void sendConsultSMS(String mobilePhone) throws SQLException, JfwBaseException {
1699
		try {
1939
		try {
1700
			this.mobilePhoneServcie.sendMarketMessage(mobilePhone, this.sendConsultSMSContentTemplate);
1940
			this.mobilePhoneServcie.sendMarketMessage(mobilePhone, this.sendConsultSMSContentTemplate);
1701
		} catch (Exception e) {
1941
		} catch (Exception e) {
1702
			throw new JfwBaseException(10012, "send mobile phone message to " + mobilePhone + " error", e);
1942
			throw new JfwBaseException(10012, "send mobile phone message to " + mobilePhone + " error", e);
1703
		}
1943
		}
1704
	}
1944
	}
1705
	
1945
1706
	public static void main(String[] args) {
1946
	public static void main(String[] args) {
1707
		System.out.println(String.format("%04d", new Random().nextInt(10000)));
1947
		System.out.println(String.format("%04d", new Random().nextInt(10000)));
1708
	}
1948
	}

+ 5 - 1
src/main/resources/project-test-dev.properties

71
com_ekexiu_portal_service_SysService.orgRegMailSubject=\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B
71
com_ekexiu_portal_service_SysService.orgRegMailSubject=\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B
72
com_ekexiu_portal_service_SysService.orgRegMailReplaceContentTempalte=<html style\="height\:auto;"><head><title>\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B\u90AE\u4EF6</title><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font-size\: 14px;border\: 0;margin\: 0;padding\: 0;color\: \#000000;}div,form,input,textarea,span,img,iframe {font-family\: PingFang SC,Arial,Helvetica Neue,Hiragino Sans GB,Microsoft Yahei,WenQuanYi Micro Hei,sans-serif;margin\: 0;padding\: 0;border\: 0;outline\: 0;}@media only screen and (max-width\: 600px) {div[class\="img-responsive"]{text-align\:center\!important;}}.cmp_color{color\:\#28b8fa;}.bodyCon{height\:auto;overflow\:hidden;background\:\#d9dfe2;}.img-responsive{margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;}.start p{color\:\#555555;font-size\:14.0px;line-height\:20px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;}.buttonGo{background-color\: \#308F9B;border-radius\:4px;text-align\: center;color\: \#fff;padding\: 6px 40px;font-size\: 15px;line-height\: 24px;text-decoration\: none;}.wrapper{width\: auto; margin\: auto; background\: rgb(255, 255, 255);}.wrapperCon{position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;}.basicinfo{padding\:30px 0;}.basicinfo p{margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24px;color\:\#555555;}.basicinfo p\:first-child{border-top\:1.0px solid \#eeeded;padding-top\:15.0px;}.copyBlock{background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;}</style></head><body class\="bodyCon"><div class\="img-responsive"><img src\="http\://www.ekexiu.com/images/cmp-logo.png"></div><div><div class\="wrapper" _ow\="600px"><div><div class\="row"></div><div class\="row"><div class\="wrapperCon"><div class\="start"><p>\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p>\u60A8\u597D\uFF01</p><p>\u60A8\u6B63\u5728\u901A\u8FC7\u672C\u90AE\u7BB1\u6CE8\u518C\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u6FC0\u6D3B\u60A8\u7684\u8D26\u6237\u3002</p><p><a class\="buttonGo" href\="http\://localhost/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">\u6FC0\u6D3B\u4F01\u4E1A\u8D26\u6237</a></p><p><span>\u82E5\u70B9\u51FB\u6309\u94AE\u65E0\u6CD5\u6253\u5F00\u7F51\u9875\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u7684\u94FE\u63A5\u8BD5\u8BD5\u3002</span><br /><a class\="cmp_color" href\="http\://localhost/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">http\://localhost/cmp-portal/cmp-settled-regOk.html?sc\=stateCode</a></p></div><div class\="basicinfo"><p>\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p>\u5BA2\u670D\u7535\u8BDD\uFF1A010-62343359</p><p>\u5BA2\u670D\u90AE\u7BB1\uFF1Aservice@ekexiu.com</p><p>\u5B98\u7F51\uFF1A<a class\="cmp_color" href\="http\://localhost/" target\="_blank">www.ekexiu.com</a></p></div></div></div></div><\!--footer\u5E95\u90E8--><div class\="copyBlock"><p>&copy; 2016-2017 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8  |  \u4EACICP\u590716042588\u53F7-1  |<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
72
com_ekexiu_portal_service_SysService.orgRegMailReplaceContentTempalte=<html style\="height\:auto;"><head><title>\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B\u90AE\u4EF6</title><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font-size\: 14px;border\: 0;margin\: 0;padding\: 0;color\: \#000000;}div,form,input,textarea,span,img,iframe {font-family\: PingFang SC,Arial,Helvetica Neue,Hiragino Sans GB,Microsoft Yahei,WenQuanYi Micro Hei,sans-serif;margin\: 0;padding\: 0;border\: 0;outline\: 0;}@media only screen and (max-width\: 600px) {div[class\="img-responsive"]{text-align\:center\!important;}}.cmp_color{color\:\#28b8fa;}.bodyCon{height\:auto;overflow\:hidden;background\:\#d9dfe2;}.img-responsive{margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;}.start p{color\:\#555555;font-size\:14.0px;line-height\:20px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;}.buttonGo{background-color\: \#308F9B;border-radius\:4px;text-align\: center;color\: \#fff;padding\: 6px 40px;font-size\: 15px;line-height\: 24px;text-decoration\: none;}.wrapper{width\: auto; margin\: auto; background\: rgb(255, 255, 255);}.wrapperCon{position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;}.basicinfo{padding\:30px 0;}.basicinfo p{margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24px;color\:\#555555;}.basicinfo p\:first-child{border-top\:1.0px solid \#eeeded;padding-top\:15.0px;}.copyBlock{background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;}</style></head><body class\="bodyCon"><div class\="img-responsive"><img src\="http\://www.ekexiu.com/images/cmp-logo.png"></div><div><div class\="wrapper" _ow\="600px"><div><div class\="row"></div><div class\="row"><div class\="wrapperCon"><div class\="start"><p>\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p>\u60A8\u597D\uFF01</p><p>\u60A8\u6B63\u5728\u901A\u8FC7\u672C\u90AE\u7BB1\u6CE8\u518C\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u6FC0\u6D3B\u60A8\u7684\u8D26\u6237\u3002</p><p><a class\="buttonGo" href\="http\://localhost/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">\u6FC0\u6D3B\u4F01\u4E1A\u8D26\u6237</a></p><p><span>\u82E5\u70B9\u51FB\u6309\u94AE\u65E0\u6CD5\u6253\u5F00\u7F51\u9875\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u7684\u94FE\u63A5\u8BD5\u8BD5\u3002</span><br /><a class\="cmp_color" href\="http\://localhost/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">http\://localhost/cmp-portal/cmp-settled-regOk.html?sc\=stateCode</a></p></div><div class\="basicinfo"><p>\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p>\u5BA2\u670D\u7535\u8BDD\uFF1A010-62343359</p><p>\u5BA2\u670D\u90AE\u7BB1\uFF1Aservice@ekexiu.com</p><p>\u5B98\u7F51\uFF1A<a class\="cmp_color" href\="http\://localhost/" target\="_blank">www.ekexiu.com</a></p></div></div></div></div><\!--footer\u5E95\u90E8--><div class\="copyBlock"><p>&copy; 2016-2017 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8  |  \u4EACICP\u590716042588\u53F7-1  |<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
73
#个人邮箱验证-重置密码
73
#个人邮箱验证-重置密码
74
com_ekexiu_portal_service_SysService.mailRetrievePasswordContentTemplate=<html style\="height\:auto;"><head><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font\: 14px/1.666 Tahoma, Arial;border\: 0;margin\: 0;padding\: 0;color\: \#000000;scrollbar-base-color\: \#dddddd;scrollbar-3dlight-color\: \#ffffff;scrollbar-highlight-color\: \#dddddd;scrollbar-shadow-color\: \#ffffff;scrollbar-darkshadow-color\: \#ffffff;scrollbar-track-color\: \#ffffff;scrollbar-arrow-color\: \#999999;}        div,form,input,textarea,span,img,iframe {margin\: 0;padding\: 0;border\: 0;outline\: 0;}input {cursor\: pointer;}blockquote { margin-left\: 30px;margin-right\: 0; padding\: 0; border\: 0;}blockquote blockquote { margin-left\: 0px;}pre { white-space\: pre-wrap;white-space\: -moz-pre-wrap;white-space\: -pre-wrap;white-space\: -o-pre-wrap;}@media only screen and (max-width\: 600px) {\tdiv[class\="img-responsive"]{\t\ttext-align\:center\!important;}}</style></head><body style\="height\:auto;padding\:0;margin\:0;border\:0;overflow\:hidden;background\:\#d9dfe2;"><div class\="img-responsive" style\="margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;"><img src\="http\://192.168.3.233/images/logo4.png"></div><div style\="width\:100.0%;"><div class\="wrapper" style\="width\: auto; margin\: auto; background\: rgb(255, 255, 255);" _ow\="600px"><div style\="margin\:auto"><div class\="row" style\="text-align\:left;"></div><div class\="row"><div style\="position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;"><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u597D\uFF01</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u6B63\u5728\u901A\u8FC7\u90AE\u7BB1\u9A8C\u8BC1\u627E\u56DE [\u79D1\u8896] \u5BC6\u7801\uFF0C\u8BF7\u8BBF\u95EE\u4E0B\u9762\u7684\u7F51\u5740\u5B8C\u6210\u90AE\u7BB1\u627E\u56DE\u5BC6\u7801\u9A8C\u8BC1\u3002</p><p><a style\="color\:\#ff9900" href\="http\://localhost/login-email-find03.html?sc\=stateCode" target\="_blank">http\://localhost/login-email-find03.html?sc\=stateCode</a></p><p style\="margin-top\:30.0px;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;border-top\:1.0px solid \#eeeded;padding-top\:15.0px;">\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u7535\u8BDD\: 010-62343359</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u90AE\u7BB1\: service@ekexiu.com</p><p style\="margin-top\:0;margin-bottom\:30.0px;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u5B98\u7F51\: <a style\="color\:\#ff9900" href\="http\://localhost/" target\="_blank">www.ekexiu.com</a></p></div></div></div><\!--footer\u5E95\u90E8--><div style\="background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;"><p style\="padding-bottom\:0;margin-bottom\:0;">&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"><span class\="beian-icon"></span> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p><p style\="padding-top\:0;margin-top\:0;">\u610F\u89C1\u5EFA\u8BAE\uFF1A<strong><a style\="color\:\#399A9B;" rel\="nofollow" href\="mailto\:service@ekexiu.com">service@ekexiu.com</a></strong>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A  010-62343359\uFF089\:00-17\:00\uFF09 </p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
74
com_ekexiu_portal_service_SysService.mailRetrievePasswordContentTemplate=<html style\="height\:auto;"><head><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font\: 14px/1.666 Tahoma, Arial;border\: 0;margin\: 0;padding\: 0;color\: \#000000;scrollbar-base-color\: \#dddddd;scrollbar-3dlight-color\: \#ffffff;scrollbar-highlight-color\: \#dddddd;scrollbar-shadow-color\: \#ffffff;scrollbar-darkshadow-color\: \#ffffff;scrollbar-track-color\: \#ffffff;scrollbar-arrow-color\: \#999999;}        div,form,input,textarea,span,img,iframe {margin\: 0;padding\: 0;border\: 0;outline\: 0;}input {cursor\: pointer;}blockquote { margin-left\: 30px;margin-right\: 0; padding\: 0; border\: 0;}blockquote blockquote { margin-left\: 0px;}pre { white-space\: pre-wrap;white-space\: -moz-pre-wrap;white-space\: -pre-wrap;white-space\: -o-pre-wrap;}@media only screen and (max-width\: 600px) {\tdiv[class\="img-responsive"]{\t\ttext-align\:center\!important;}}</style></head><body style\="height\:auto;padding\:0;margin\:0;border\:0;overflow\:hidden;background\:\#d9dfe2;"><div class\="img-responsive" style\="margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;"><img src\="http\://192.168.3.233/images/logo4.png"></div><div style\="width\:100.0%;"><div class\="wrapper" style\="width\: auto; margin\: auto; background\: rgb(255, 255, 255);" _ow\="600px"><div style\="margin\:auto"><div class\="row" style\="text-align\:left;"></div><div class\="row"><div style\="position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;"><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u597D\uFF01</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u6B63\u5728\u901A\u8FC7\u90AE\u7BB1\u9A8C\u8BC1\u627E\u56DE [\u79D1\u8896] \u5BC6\u7801\uFF0C\u8BF7\u8BBF\u95EE\u4E0B\u9762\u7684\u7F51\u5740\u5B8C\u6210\u90AE\u7BB1\u627E\u56DE\u5BC6\u7801\u9A8C\u8BC1\u3002</p><p><a style\="color\:\#ff9900" href\="http\://localhost/emaiFindPwdOk.html?sc\=stateCode" target\="_blank">http\://localhost/emaiFindPwdOk.html?sc\=stateCode</a></p><p style\="margin-top\:30.0px;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;border-top\:1.0px solid \#eeeded;padding-top\:15.0px;">\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u7535\u8BDD\: 010-62343359</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u90AE\u7BB1\: service@ekexiu.com</p><p style\="margin-top\:0;margin-bottom\:30.0px;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u5B98\u7F51\: <a style\="color\:\#ff9900" href\="http\://localhost/" target\="_blank">www.ekexiu.com</a></p></div></div></div><\!--footer\u5E95\u90E8--><div style\="background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;"><p style\="padding-bottom\:0;margin-bottom\:0;">&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"><span class\="beian-icon"></span> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p><p style\="padding-top\:0;margin-top\:0;">\u610F\u89C1\u5EFA\u8BAE\uFF1A<strong><a style\="color\:\#399A9B;" rel\="nofollow" href\="mailto\:service@ekexiu.com">service@ekexiu.com</a></strong>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A  010-62343359\uFF089\:00-17\:00\uFF09 </p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
75
com_ekexiu_portal_service_SysService.mailRetrievePasswordReplaceKey=stateCode
75
com_ekexiu_portal_service_SysService.mailRetrievePasswordReplaceKey=stateCode
76
com_ekexiu_portal_service_SysService.mailRetrievePasswordSubject=\u91CD\u7F6E\u5BC6\u7801
76
com_ekexiu_portal_service_SysService.mailRetrievePasswordSubject=\u91CD\u7F6E\u5BC6\u7801
77
#企业邮箱验证-重置密码
77
#企业邮箱验证-重置密码
266
com_ekexiu_portal_service_GrowthRuleService.signInFourDays::int=8
266
com_ekexiu_portal_service_GrowthRuleService.signInFourDays::int=8
267
com_ekexiu_portal_service_GrowthRuleService.signInFiveDays::int=9
267
com_ekexiu_portal_service_GrowthRuleService.signInFiveDays::int=9
268
com_ekexiu_portal_service_GrowthRuleService.signInSixDays::int=10
268
com_ekexiu_portal_service_GrowthRuleService.signInSixDays::int=10
269
com_ekexiu_portal_oauth_OAuthService.handlers-ref=oauthService_handlers
270
oauthService_handlers::map=java.util.HashMap
271
oauthService_handlers.map-key-1=weixin
272
oauthService_handlers.map-val-1-ref=com_ekexiu_portal_oauth_weixin_WeiXinHandler

+ 5 - 1
src/main/resources/project-test.properties

71
com_ekexiu_portal_service_SysService.orgRegMailSubject=\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B
71
com_ekexiu_portal_service_SysService.orgRegMailSubject=\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B
72
com_ekexiu_portal_service_SysService.orgRegMailReplaceContentTempalte=<html style\="height\:auto;"><head><title>\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B\u90AE\u4EF6</title><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font-size\: 14px;border\: 0;margin\: 0;padding\: 0;color\: \#000000;}div,form,input,textarea,span,img,iframe {font-family\: PingFang SC,Arial,Helvetica Neue,Hiragino Sans GB,Microsoft Yahei,WenQuanYi Micro Hei,sans-serif;margin\: 0;padding\: 0;border\: 0;outline\: 0;}@media only screen and (max-width\: 600px) {div[class\="img-responsive"]{text-align\:center\!important;}}.cmp_color{color\:\#28b8fa;}.bodyCon{height\:auto;overflow\:hidden;background\:\#d9dfe2;}.img-responsive{margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;}.start p{color\:\#555555;font-size\:14.0px;line-height\:20px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;}.buttonGo{background-color\: \#308F9B;border-radius\:4px;text-align\: center;color\: \#fff;padding\: 6px 40px;font-size\: 15px;line-height\: 24px;text-decoration\: none;}.wrapper{width\: auto; margin\: auto; background\: rgb(255, 255, 255);}.wrapperCon{position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;}.basicinfo{padding\:30px 0;}.basicinfo p{margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24px;color\:\#555555;}.basicinfo p\:first-child{border-top\:1.0px solid \#eeeded;padding-top\:15.0px;}.copyBlock{background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;}</style></head><body class\="bodyCon"><div class\="img-responsive"><img src\="http\://www.ekexiu.com/images/cmp-logo.png"></div><div><div class\="wrapper" _ow\="600px"><div><div class\="row"></div><div class\="row"><div class\="wrapperCon"><div class\="start"><p>\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p>\u60A8\u597D\uFF01</p><p>\u60A8\u6B63\u5728\u901A\u8FC7\u672C\u90AE\u7BB1\u6CE8\u518C\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u6FC0\u6D3B\u60A8\u7684\u8D26\u6237\u3002</p><p><a class\="buttonGo" href\="http\://192.168.3.233/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">\u6FC0\u6D3B\u4F01\u4E1A\u8D26\u6237</a></p><p><span>\u82E5\u70B9\u51FB\u6309\u94AE\u65E0\u6CD5\u6253\u5F00\u7F51\u9875\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u7684\u94FE\u63A5\u8BD5\u8BD5\u3002</span><br /><a class\="cmp_color" href\="http\://192.168.3.233/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">http\://192.168.3.233/cmp-portal/cmp-settled-regOk.html?sc\=stateCode</a></p></div><div class\="basicinfo"><p>\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p>\u5BA2\u670D\u7535\u8BDD\uFF1A010-62343359</p><p>\u5BA2\u670D\u90AE\u7BB1\uFF1Aservice@ekexiu.com</p><p>\u5B98\u7F51\uFF1A<a class\="cmp_color" href\="http\://192.168.3.233/" target\="_blank">www.ekexiu.com</a></p></div></div></div></div><\!--footer\u5E95\u90E8--><div class\="copyBlock"><p>&copy; 2016-2017 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8  |  \u4EACICP\u590716042588\u53F7-1  |<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
72
com_ekexiu_portal_service_SysService.orgRegMailReplaceContentTempalte=<html style\="height\:auto;"><head><title>\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B\u90AE\u4EF6</title><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font-size\: 14px;border\: 0;margin\: 0;padding\: 0;color\: \#000000;}div,form,input,textarea,span,img,iframe {font-family\: PingFang SC,Arial,Helvetica Neue,Hiragino Sans GB,Microsoft Yahei,WenQuanYi Micro Hei,sans-serif;margin\: 0;padding\: 0;border\: 0;outline\: 0;}@media only screen and (max-width\: 600px) {div[class\="img-responsive"]{text-align\:center\!important;}}.cmp_color{color\:\#28b8fa;}.bodyCon{height\:auto;overflow\:hidden;background\:\#d9dfe2;}.img-responsive{margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;}.start p{color\:\#555555;font-size\:14.0px;line-height\:20px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;}.buttonGo{background-color\: \#308F9B;border-radius\:4px;text-align\: center;color\: \#fff;padding\: 6px 40px;font-size\: 15px;line-height\: 24px;text-decoration\: none;}.wrapper{width\: auto; margin\: auto; background\: rgb(255, 255, 255);}.wrapperCon{position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;}.basicinfo{padding\:30px 0;}.basicinfo p{margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24px;color\:\#555555;}.basicinfo p\:first-child{border-top\:1.0px solid \#eeeded;padding-top\:15.0px;}.copyBlock{background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;}</style></head><body class\="bodyCon"><div class\="img-responsive"><img src\="http\://www.ekexiu.com/images/cmp-logo.png"></div><div><div class\="wrapper" _ow\="600px"><div><div class\="row"></div><div class\="row"><div class\="wrapperCon"><div class\="start"><p>\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p>\u60A8\u597D\uFF01</p><p>\u60A8\u6B63\u5728\u901A\u8FC7\u672C\u90AE\u7BB1\u6CE8\u518C\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u6FC0\u6D3B\u60A8\u7684\u8D26\u6237\u3002</p><p><a class\="buttonGo" href\="http\://192.168.3.233/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">\u6FC0\u6D3B\u4F01\u4E1A\u8D26\u6237</a></p><p><span>\u82E5\u70B9\u51FB\u6309\u94AE\u65E0\u6CD5\u6253\u5F00\u7F51\u9875\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u7684\u94FE\u63A5\u8BD5\u8BD5\u3002</span><br /><a class\="cmp_color" href\="http\://192.168.3.233/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">http\://192.168.3.233/cmp-portal/cmp-settled-regOk.html?sc\=stateCode</a></p></div><div class\="basicinfo"><p>\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p>\u5BA2\u670D\u7535\u8BDD\uFF1A010-62343359</p><p>\u5BA2\u670D\u90AE\u7BB1\uFF1Aservice@ekexiu.com</p><p>\u5B98\u7F51\uFF1A<a class\="cmp_color" href\="http\://192.168.3.233/" target\="_blank">www.ekexiu.com</a></p></div></div></div></div><\!--footer\u5E95\u90E8--><div class\="copyBlock"><p>&copy; 2016-2017 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8  |  \u4EACICP\u590716042588\u53F7-1  |<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
73
#个人邮箱验证-重置密码
73
#个人邮箱验证-重置密码
74
com_ekexiu_portal_service_SysService.mailRetrievePasswordContentTemplate=<html style\="height\:auto;"><head><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font\: 14px/1.666 Tahoma, Arial;border\: 0;margin\: 0;padding\: 0;color\: \#000000;scrollbar-base-color\: \#dddddd;scrollbar-3dlight-color\: \#ffffff;scrollbar-highlight-color\: \#dddddd;scrollbar-shadow-color\: \#ffffff;scrollbar-darkshadow-color\: \#ffffff;scrollbar-track-color\: \#ffffff;scrollbar-arrow-color\: \#999999;}        div,form,input,textarea,span,img,iframe {margin\: 0;padding\: 0;border\: 0;outline\: 0;}input {cursor\: pointer;}blockquote { margin-left\: 30px;margin-right\: 0; padding\: 0; border\: 0;}blockquote blockquote { margin-left\: 0px;}pre { white-space\: pre-wrap;white-space\: -moz-pre-wrap;white-space\: -pre-wrap;white-space\: -o-pre-wrap;}@media only screen and (max-width\: 600px) {\tdiv[class\="img-responsive"]{\t\ttext-align\:center\!important;}}</style></head><body style\="height\:auto;padding\:0;margin\:0;border\:0;overflow\:hidden;background\:\#d9dfe2;"><div class\="img-responsive" style\="margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;"><img src\="http\://192.168.3.233/images/logo4.png"></div><div style\="width\:100.0%;"><div class\="wrapper" style\="width\: auto; margin\: auto; background\: rgb(255, 255, 255);" _ow\="600px"><div style\="margin\:auto"><div class\="row" style\="text-align\:left;"></div><div class\="row"><div style\="position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;"><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u597D\uFF01</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u6B63\u5728\u901A\u8FC7\u90AE\u7BB1\u9A8C\u8BC1\u627E\u56DE [\u79D1\u8896] \u5BC6\u7801\uFF0C\u8BF7\u8BBF\u95EE\u4E0B\u9762\u7684\u7F51\u5740\u5B8C\u6210\u90AE\u7BB1\u627E\u56DE\u5BC6\u7801\u9A8C\u8BC1\u3002</p><p><a style\="color\:\#ff9900" href\="http\://192.168.3.233/login-email-find03.html?sc\=stateCode" target\="_blank">http\://192.168.3.233/login-email-find03.html?sc\=stateCode</a></p><p style\="margin-top\:30.0px;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;border-top\:1.0px solid \#eeeded;padding-top\:15.0px;">\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u7535\u8BDD\: 010-62343359</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u90AE\u7BB1\: service@ekexiu.com</p><p style\="margin-top\:0;margin-bottom\:30.0px;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u5B98\u7F51\: <a style\="color\:\#ff9900" href\="http\://192.168.3.233/" target\="_blank">www.ekexiu.com</a></p></div></div></div><\!--footer\u5E95\u90E8--><div style\="background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;"><p style\="padding-bottom\:0;margin-bottom\:0;">&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"><span class\="beian-icon"></span> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p><p style\="padding-top\:0;margin-top\:0;">\u610F\u89C1\u5EFA\u8BAE\uFF1A<strong><a style\="color\:\#399A9B;" rel\="nofollow" href\="mailto\:service@ekexiu.com">service@ekexiu.com</a></strong>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A  010-62343359\uFF089\:00-17\:00\uFF09 </p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
74
com_ekexiu_portal_service_SysService.mailRetrievePasswordContentTemplate=<html style\="height\:auto;"><head><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font\: 14px/1.666 Tahoma, Arial;border\: 0;margin\: 0;padding\: 0;color\: \#000000;scrollbar-base-color\: \#dddddd;scrollbar-3dlight-color\: \#ffffff;scrollbar-highlight-color\: \#dddddd;scrollbar-shadow-color\: \#ffffff;scrollbar-darkshadow-color\: \#ffffff;scrollbar-track-color\: \#ffffff;scrollbar-arrow-color\: \#999999;}        div,form,input,textarea,span,img,iframe {margin\: 0;padding\: 0;border\: 0;outline\: 0;}input {cursor\: pointer;}blockquote { margin-left\: 30px;margin-right\: 0; padding\: 0; border\: 0;}blockquote blockquote { margin-left\: 0px;}pre { white-space\: pre-wrap;white-space\: -moz-pre-wrap;white-space\: -pre-wrap;white-space\: -o-pre-wrap;}@media only screen and (max-width\: 600px) {\tdiv[class\="img-responsive"]{\t\ttext-align\:center\!important;}}</style></head><body style\="height\:auto;padding\:0;margin\:0;border\:0;overflow\:hidden;background\:\#d9dfe2;"><div class\="img-responsive" style\="margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;"><img src\="http\://192.168.3.233/images/logo4.png"></div><div style\="width\:100.0%;"><div class\="wrapper" style\="width\: auto; margin\: auto; background\: rgb(255, 255, 255);" _ow\="600px"><div style\="margin\:auto"><div class\="row" style\="text-align\:left;"></div><div class\="row"><div style\="position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;"><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u597D\uFF01</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u6B63\u5728\u901A\u8FC7\u90AE\u7BB1\u9A8C\u8BC1\u627E\u56DE [\u79D1\u8896] \u5BC6\u7801\uFF0C\u8BF7\u8BBF\u95EE\u4E0B\u9762\u7684\u7F51\u5740\u5B8C\u6210\u90AE\u7BB1\u627E\u56DE\u5BC6\u7801\u9A8C\u8BC1\u3002</p><p><a style\="color\:\#ff9900" href\="http\://192.168.3.233/emaiFindPwdOk.html?sc\=stateCode" target\="_blank">http\://192.168.3.233/emaiFindPwdOk.html?sc\=stateCode</a></p><p style\="margin-top\:30.0px;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;border-top\:1.0px solid \#eeeded;padding-top\:15.0px;">\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u7535\u8BDD\: 010-62343359</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u90AE\u7BB1\: service@ekexiu.com</p><p style\="margin-top\:0;margin-bottom\:30.0px;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u5B98\u7F51\: <a style\="color\:\#ff9900" href\="http\://192.168.3.233/" target\="_blank">www.ekexiu.com</a></p></div></div></div><\!--footer\u5E95\u90E8--><div style\="background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;"><p style\="padding-bottom\:0;margin-bottom\:0;">&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"><span class\="beian-icon"></span> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p><p style\="padding-top\:0;margin-top\:0;">\u610F\u89C1\u5EFA\u8BAE\uFF1A<strong><a style\="color\:\#399A9B;" rel\="nofollow" href\="mailto\:service@ekexiu.com">service@ekexiu.com</a></strong>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A  010-62343359\uFF089\:00-17\:00\uFF09 </p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
75
com_ekexiu_portal_service_SysService.mailRetrievePasswordReplaceKey=stateCode
75
com_ekexiu_portal_service_SysService.mailRetrievePasswordReplaceKey=stateCode
76
com_ekexiu_portal_service_SysService.mailRetrievePasswordSubject=\u91CD\u7F6E\u5BC6\u7801
76
com_ekexiu_portal_service_SysService.mailRetrievePasswordSubject=\u91CD\u7F6E\u5BC6\u7801
77
#企业邮箱验证-重置密码
77
#企业邮箱验证-重置密码
266
com_ekexiu_portal_service_GrowthRuleService.signInFourDays::int=8
266
com_ekexiu_portal_service_GrowthRuleService.signInFourDays::int=8
267
com_ekexiu_portal_service_GrowthRuleService.signInFiveDays::int=9
267
com_ekexiu_portal_service_GrowthRuleService.signInFiveDays::int=9
268
com_ekexiu_portal_service_GrowthRuleService.signInSixDays::int=10
268
com_ekexiu_portal_service_GrowthRuleService.signInSixDays::int=10
269
com_ekexiu_portal_oauth_OAuthService.handlers-ref=oauthService_handlers
270
oauthService_handlers::map=java.util.HashMap
271
oauthService_handlers.map-key-1=weixin
272
oauthService_handlers.map-val-1-ref=com_ekexiu_portal_oauth_weixin_WeiXinHandler

+ 6 - 1
src/main/resources/project.properties

71
com_ekexiu_portal_service_SysService.orgRegMailSubject=\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B
71
com_ekexiu_portal_service_SysService.orgRegMailSubject=\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B
72
com_ekexiu_portal_service_SysService.orgRegMailReplaceContentTempalte=<html style\="height\:auto;"><head><title>\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B\u90AE\u4EF6</title><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font-size\: 14px;border\: 0;margin\: 0;padding\: 0;color\: \#000000;}div,form,input,textarea,span,img,iframe {font-family\: PingFang SC,Arial,Helvetica Neue,Hiragino Sans GB,Microsoft Yahei,WenQuanYi Micro Hei,sans-serif;margin\: 0;padding\: 0;border\: 0;outline\: 0;}@media only screen and (max-width\: 600px) {div[class\="img-responsive"]{text-align\:center\!important;}}.cmp_color{color\:\#28b8fa;}.bodyCon{height\:auto;overflow\:hidden;background\:\#d9dfe2;}.img-responsive{margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;}.start p{color\:\#555555;font-size\:14.0px;line-height\:20px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;}.buttonGo{background-color\: \#308F9B;border-radius\:4px;text-align\: center;color\: \#fff;padding\: 6px 40px;font-size\: 15px;line-height\: 24px;text-decoration\: none;}.wrapper{width\: auto; margin\: auto; background\: rgb(255, 255, 255);}.wrapperCon{position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;}.basicinfo{padding\:30px 0;}.basicinfo p{margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24px;color\:\#555555;}.basicinfo p\:first-child{border-top\:1.0px solid \#eeeded;padding-top\:15.0px;}.copyBlock{background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;}</style></head><body class\="bodyCon"><div class\="img-responsive"><img src\="http\://www.ekexiu.com/images/cmp-logo.png"></div><div><div class\="wrapper" _ow\="600px"><div><div class\="row"></div><div class\="row"><div class\="wrapperCon"><div class\="start"><p>\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p>\u60A8\u597D\uFF01</p><p>\u60A8\u6B63\u5728\u901A\u8FC7\u672C\u90AE\u7BB1\u6CE8\u518C\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u6FC0\u6D3B\u60A8\u7684\u8D26\u6237\u3002</p><p><a class\="buttonGo" href\="http\://www.ekexiu.com/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">\u6FC0\u6D3B\u4F01\u4E1A\u8D26\u6237</a></p><p><span>\u82E5\u70B9\u51FB\u6309\u94AE\u65E0\u6CD5\u6253\u5F00\u7F51\u9875\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u7684\u94FE\u63A5\u8BD5\u8BD5\u3002</span><br /><a class\="cmp_color" href\="http\://www.ekexiu.com/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">http\://www.ekexiu.com/cmp-portal/cmp-settled-regOk.html?sc\=stateCode</a></p></div><div class\="basicinfo"><p>\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p>\u5BA2\u670D\u7535\u8BDD\uFF1A010-62343359</p><p>\u5BA2\u670D\u90AE\u7BB1\uFF1Aservice@ekexiu.com</p><p>\u5B98\u7F51\uFF1A<a class\="cmp_color" href\="http\://www.ekexiu.com/" target\="_blank">www.ekexiu.com</a></p></div></div></div></div><\!--footer\u5E95\u90E8--><div class\="copyBlock"><p>&copy; 2016-2017 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8  |  \u4EACICP\u590716042588\u53F7-1  |<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
72
com_ekexiu_portal_service_SysService.orgRegMailReplaceContentTempalte=<html style\="height\:auto;"><head><title>\u4F01\u4E1A\u8D26\u6237\u9A8C\u8BC1\u6FC0\u6D3B\u90AE\u4EF6</title><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font-size\: 14px;border\: 0;margin\: 0;padding\: 0;color\: \#000000;}div,form,input,textarea,span,img,iframe {font-family\: PingFang SC,Arial,Helvetica Neue,Hiragino Sans GB,Microsoft Yahei,WenQuanYi Micro Hei,sans-serif;margin\: 0;padding\: 0;border\: 0;outline\: 0;}@media only screen and (max-width\: 600px) {div[class\="img-responsive"]{text-align\:center\!important;}}.cmp_color{color\:\#28b8fa;}.bodyCon{height\:auto;overflow\:hidden;background\:\#d9dfe2;}.img-responsive{margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;}.start p{color\:\#555555;font-size\:14.0px;line-height\:20px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;}.buttonGo{background-color\: \#308F9B;border-radius\:4px;text-align\: center;color\: \#fff;padding\: 6px 40px;font-size\: 15px;line-height\: 24px;text-decoration\: none;}.wrapper{width\: auto; margin\: auto; background\: rgb(255, 255, 255);}.wrapperCon{position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;}.basicinfo{padding\:30px 0;}.basicinfo p{margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24px;color\:\#555555;}.basicinfo p\:first-child{border-top\:1.0px solid \#eeeded;padding-top\:15.0px;}.copyBlock{background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;}</style></head><body class\="bodyCon"><div class\="img-responsive"><img src\="http\://www.ekexiu.com/images/cmp-logo.png"></div><div><div class\="wrapper" _ow\="600px"><div><div class\="row"></div><div class\="row"><div class\="wrapperCon"><div class\="start"><p>\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p>\u60A8\u597D\uFF01</p><p>\u60A8\u6B63\u5728\u901A\u8FC7\u672C\u90AE\u7BB1\u6CE8\u518C\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u6FC0\u6D3B\u60A8\u7684\u8D26\u6237\u3002</p><p><a class\="buttonGo" href\="http\://www.ekexiu.com/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">\u6FC0\u6D3B\u4F01\u4E1A\u8D26\u6237</a></p><p><span>\u82E5\u70B9\u51FB\u6309\u94AE\u65E0\u6CD5\u6253\u5F00\u7F51\u9875\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u7684\u94FE\u63A5\u8BD5\u8BD5\u3002</span><br /><a class\="cmp_color" href\="http\://www.ekexiu.com/cmp-portal/cmp-settled-regOk.html?sc\=stateCode" target\="_blank">http\://www.ekexiu.com/cmp-portal/cmp-settled-regOk.html?sc\=stateCode</a></p></div><div class\="basicinfo"><p>\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p>\u5BA2\u670D\u7535\u8BDD\uFF1A010-62343359</p><p>\u5BA2\u670D\u90AE\u7BB1\uFF1Aservice@ekexiu.com</p><p>\u5B98\u7F51\uFF1A<a class\="cmp_color" href\="http\://www.ekexiu.com/" target\="_blank">www.ekexiu.com</a></p></div></div></div></div><\!--footer\u5E95\u90E8--><div class\="copyBlock"><p>&copy; 2016-2017 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8  |  \u4EACICP\u590716042588\u53F7-1  |<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
73
#个人邮箱验证-重置密码
73
#个人邮箱验证-重置密码
74
com_ekexiu_portal_service_SysService.mailRetrievePasswordContentTemplate=<html style\="height\:auto;"><head><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font\: 14px/1.666 Tahoma, Arial;border\: 0;margin\: 0;padding\: 0;color\: \#000000;scrollbar-base-color\: \#dddddd;scrollbar-3dlight-color\: \#ffffff;scrollbar-highlight-color\: \#dddddd;scrollbar-shadow-color\: \#ffffff;scrollbar-darkshadow-color\: \#ffffff;scrollbar-track-color\: \#ffffff;scrollbar-arrow-color\: \#999999;}        div,form,input,textarea,span,img,iframe {margin\: 0;padding\: 0;border\: 0;outline\: 0;}input {cursor\: pointer;}blockquote { margin-left\: 30px;margin-right\: 0; padding\: 0; border\: 0;}blockquote blockquote { margin-left\: 0px;}pre { white-space\: pre-wrap;white-space\: -moz-pre-wrap;white-space\: -pre-wrap;white-space\: -o-pre-wrap;}@media only screen and (max-width\: 600px) {\tdiv[class\="img-responsive"]{\t\ttext-align\:center\!important;}}</style></head><body style\="height\:auto;padding\:0;margin\:0;border\:0;overflow\:hidden;background\:\#d9dfe2;"><div class\="img-responsive" style\="margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;"><img src\="http\://www.ekexiu.com/images/logo4.png"></div><div style\="width\:100.0%;"><div class\="wrapper" style\="width\: auto; margin\: auto; background\: rgb(255, 255, 255);" _ow\="600px"><div style\="margin\:auto"><div class\="row" style\="text-align\:left;"></div><div class\="row"><div style\="position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;"><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u597D\uFF01</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u6B63\u5728\u901A\u8FC7\u90AE\u7BB1\u9A8C\u8BC1\u627E\u56DE [\u79D1\u8896] \u5BC6\u7801\uFF0C\u8BF7\u8BBF\u95EE\u4E0B\u9762\u7684\u7F51\u5740\u5B8C\u6210\u90AE\u7BB1\u627E\u56DE\u5BC6\u7801\u9A8C\u8BC1\u3002</p><p><a style\="color\:\#ff9900" href\="http\://www.ekexiu.com/login-email-find03.html?sc\=stateCode" target\="_blank">http\://www.ekexiu.com/login-email-find03.html?sc\=stateCode</a></p><p style\="margin-top\:30.0px;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;border-top\:1.0px solid \#eeeded;padding-top\:15.0px;">\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u7535\u8BDD\: 010-62343359</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u90AE\u7BB1\: service@ekexiu.com</p><p style\="margin-top\:0;margin-bottom\:30.0px;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u5B98\u7F51\: <a style\="color\:\#ff9900" href\="http\://www.ekexiu.com/" target\="_blank">www.ekexiu.com</a></p></div></div></div><\!--footer\u5E95\u90E8--><div style\="background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;"><p style\="padding-bottom\:0;margin-bottom\:0;">&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"><span class\="beian-icon"></span> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p><p style\="padding-top\:0;margin-top\:0;">\u610F\u89C1\u5EFA\u8BAE\uFF1A<strong><a style\="color\:\#399A9B;" rel\="nofollow" href\="mailto\:service@ekexiu.com">service@ekexiu.com</a></strong>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A  010-62343359\uFF089\:00-17\:00\uFF09 </p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
74
com_ekexiu_portal_service_SysService.mailRetrievePasswordContentTemplate=<html style\="height\:auto;"><head><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font\: 14px/1.666 Tahoma, Arial;border\: 0;margin\: 0;padding\: 0;color\: \#000000;scrollbar-base-color\: \#dddddd;scrollbar-3dlight-color\: \#ffffff;scrollbar-highlight-color\: \#dddddd;scrollbar-shadow-color\: \#ffffff;scrollbar-darkshadow-color\: \#ffffff;scrollbar-track-color\: \#ffffff;scrollbar-arrow-color\: \#999999;}        div,form,input,textarea,span,img,iframe {margin\: 0;padding\: 0;border\: 0;outline\: 0;}input {cursor\: pointer;}blockquote { margin-left\: 30px;margin-right\: 0; padding\: 0; border\: 0;}blockquote blockquote { margin-left\: 0px;}pre { white-space\: pre-wrap;white-space\: -moz-pre-wrap;white-space\: -pre-wrap;white-space\: -o-pre-wrap;}@media only screen and (max-width\: 600px) {\tdiv[class\="img-responsive"]{\t\ttext-align\:center\!important;}}</style></head><body style\="height\:auto;padding\:0;margin\:0;border\:0;overflow\:hidden;background\:\#d9dfe2;"><div class\="img-responsive" style\="margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;"><img src\="http\://www.ekexiu.com/images/logo4.png"></div><div style\="width\:100.0%;"><div class\="wrapper" style\="width\: auto; margin\: auto; background\: rgb(255, 255, 255);" _ow\="600px"><div style\="margin\:auto"><div class\="row" style\="text-align\:left;"></div><div class\="row"><div style\="position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;"><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u597D\uFF01</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u6B63\u5728\u901A\u8FC7\u90AE\u7BB1\u9A8C\u8BC1\u627E\u56DE [\u79D1\u8896] \u5BC6\u7801\uFF0C\u8BF7\u8BBF\u95EE\u4E0B\u9762\u7684\u7F51\u5740\u5B8C\u6210\u90AE\u7BB1\u627E\u56DE\u5BC6\u7801\u9A8C\u8BC1\u3002</p><p><a style\="color\:\#ff9900" href\="http\://www.ekexiu.com/emaiFindPwdOk.html?sc\=stateCode" target\="_blank">http\://www.ekexiu.com/emaiFindPwdOk.html?sc\=stateCode</a></p><p style\="margin-top\:30.0px;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;border-top\:1.0px solid \#eeeded;padding-top\:15.0px;">\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u7535\u8BDD\: 010-62343359</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u90AE\u7BB1\: service@ekexiu.com</p><p style\="margin-top\:0;margin-bottom\:30.0px;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u5B98\u7F51\: <a style\="color\:\#ff9900" href\="http\://www.ekexiu.com/" target\="_blank">www.ekexiu.com</a></p></div></div></div><\!--footer\u5E95\u90E8--><div style\="background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;"><p style\="padding-bottom\:0;margin-bottom\:0;">&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"><span class\="beian-icon"></span> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p><p style\="padding-top\:0;margin-top\:0;">\u610F\u89C1\u5EFA\u8BAE\uFF1A<strong><a style\="color\:\#399A9B;" rel\="nofollow" href\="mailto\:service@ekexiu.com">service@ekexiu.com</a></strong>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A  010-62343359\uFF089\:00-17\:00\uFF09 </p></div><\!--footer\u5E95\u90E8--></div></div></body></html>
75
com_ekexiu_portal_service_SysService.mailRetrievePasswordReplaceKey=stateCode
75
com_ekexiu_portal_service_SysService.mailRetrievePasswordReplaceKey=stateCode
76
com_ekexiu_portal_service_SysService.mailRetrievePasswordSubject=\u91CD\u7F6E\u5BC6\u7801
76
com_ekexiu_portal_service_SysService.mailRetrievePasswordSubject=\u91CD\u7F6E\u5BC6\u7801
77
#企业邮箱验证-重置密码
77
#企业邮箱验证-重置密码
264
com_ekexiu_portal_service_GrowthRuleService.signInFourDays::int=8
264
com_ekexiu_portal_service_GrowthRuleService.signInFourDays::int=8
265
com_ekexiu_portal_service_GrowthRuleService.signInFiveDays::int=9
265
com_ekexiu_portal_service_GrowthRuleService.signInFiveDays::int=9
266
com_ekexiu_portal_service_GrowthRuleService.signInSixDays::int=10
266
com_ekexiu_portal_service_GrowthRuleService.signInSixDays::int=10
267
com_ekexiu_portal_oauth_OAuthService.handlers-ref=oauthService_handlers
268
oauthService_handlers::map=java.util.HashMap
269
oauthService_handlers.map-key-1=weixin
270
oauthService_handlers.map-val-1-ref=com_ekexiu_portal_oauth_weixin_WeiXinHandler
271