Browse Source

Merge remote-tracking branch 'origin/dev' into test

jiapeng 7 years ago
parent
commit
b1e5a6d262

+ 22 - 6
pom.xml

@ -10,6 +10,7 @@
10 10
		<maven.compiler.source>1.7</maven.compiler.source>
11 11
		<maven.compiler.target>1.7</maven.compiler.target>
12 12
		<maven.war.filteringDeploymentDescriptors>true</maven.war.filteringDeploymentDescriptors>
13
		<maven.tomcat.path>/</maven.tomcat.path>
13 14
	</properties>
14 15

15 16
	<profiles>
@ -87,12 +88,8 @@
87 88
			<artifactId>jfwWebUtil</artifactId>
88 89
			<version>0.0.2-SNAPSHOT</version>
89 90
		</dependency>
90
		<dependency>
91
			<groupId>javax.servlet</groupId>
92
			<artifactId>servlet-api</artifactId>
93
			<scope>provided</scope>
94
			<version>2.5</version>
95
		</dependency>
91
		<!-- <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> 
92
			<scope>provided</scope> <version>2.5</version> </dependency> -->
96 93
		<dependency>
97 94
			<groupId>com.alibaba</groupId>
98 95
			<artifactId>druid</artifactId>
@ -179,6 +176,19 @@
179 176
			<version>7.0.0</version>
180 177
			<!-- sign depends on kernel, layout and forms -->
181 178
		</dependency>
179
		<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-websocket-api -->
180
		<dependency>
181
			<groupId>org.apache.tomcat</groupId>
182
			<artifactId>tomcat-catalina</artifactId>
183
			<version>7.0.69</version>
184
			<scope>provided</scope>
185
		</dependency>
186
		<dependency>
187
			<groupId>javax.websocket</groupId>
188
			<artifactId>javax.websocket-api</artifactId>
189
			<version>1.1</version>
190
			<scope>provided</scope>
191
		</dependency>
182 192
	</dependencies>
183 193
	<build>
184 194
		<resources>
@ -205,6 +215,12 @@
205 215
					<stopKey>foo</stopKey>
206 216
				</configuration>
207 217
			</plugin>
218
			<plugin>
219
				<groupId>org.apache.tomcat.maven</groupId>
220
				<artifactId>tomcat7-maven-plugin</artifactId>
221
				<version>2.1</version>
222
				<!-- <configuration> <path>/portal</path> </configuration> -->
223
			</plugin>
208 224
		</plugins>
209 225
		<finalName>portal</finalName>
210 226
	</build>

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

@ -2046,8 +2046,8 @@ public abstract class ProfessorDao {
2046 2046
					userInfo.setAuthStatus(rs.getInt(10));
2047 2047
					userInfo.setId(rs.getString(11));
2048 2048
					userInfo.setName(rs.getString(12));
2049
					userInfo.setEmail(rs.getString(13));
2050
					userInfo.setPhone(rs.getString(14));
2049
//					userInfo.setEmail(rs.getString(13));
2050
//					userInfo.setPhone(rs.getString(14));
2051 2051
					userInfo.setActiveTime(rs.getString(15));
2052 2052
					userInfo.setActiveState(!(rs.getString(15) == null));
2053 2053
					userInfo.setOrgAuth(rs.getString(16));

+ 58 - 0
src/main/java/com/ekexiu/portal/msg/ActorItem.java

@ -0,0 +1,58 @@
1
package com.ekexiu.portal.msg;
2

3
public class ActorItem {
4
	private String id;
5
	private long time;
6
	private String timeStr;
7
	private String cnt;
8
	private int num;
9
	/**
10
	 * @return 会话参与人ID
11
	 */
12
	public String getId() {
13
		return id;
14
	}
15
	public void setId(String id) {
16
		this.id = id;
17
	}
18
	/**
19
	 * @return 会话最近活动时间 UTC MilliSecond since UTC1970-01-01 00:00:00:000
20
	 */
21
	public long getTime() {
22
		return time;
23
	}
24

25
	public void setTime(long time) {
26
		this.time = time;
27
	}
28
	/**
29
	 * @return 会话最近活动时间 YYYYMMDDHH24MISSZZZ
30
	 */
31
	public String getTimeStr() {
32
		return timeStr;
33
	}
34
	public void setTimeStr(String timeStr) {
35
		this.timeStr = timeStr;
36
	}
37
	/**
38
	 * @return 会话最近活动内空
39
	 */
40
	public String getCnt() {
41
		return cnt;
42
	}
43
	public void setCnt(String cnt) {
44
		this.cnt = cnt;
45
	}
46
	/**
47
	 * @return 会话未读数
48
	 */
49
	public int getNum() {
50
		return num;
51
	}
52
	public void setNum(int num) {
53
		this.num = num;
54
	}
55
	
56
	
57
	
58
}

+ 370 - 0
src/main/java/com/ekexiu/portal/msg/Service.java

@ -0,0 +1,370 @@
1
package com.ekexiu.portal.msg;
2

3
import java.sql.Connection;
4
import java.sql.PreparedStatement;
5
import java.sql.ResultSet;
6
import java.sql.SQLException;
7
import java.text.SimpleDateFormat;
8
import java.util.ArrayList;
9
import java.util.Collections;
10
import java.util.Date;
11
import java.util.List;
12
import java.util.ListIterator;
13

14
import org.jfw.apt.annotation.Autowrie;
15
import org.jfw.apt.annotation.DefaultValue;
16
import org.jfw.apt.annotation.Nullable;
17
import org.jfw.apt.web.annotation.Path;
18
import org.jfw.apt.web.annotation.operate.Get;
19
import org.jfw.apt.web.annotation.operate.Post;
20
import org.jfw.apt.web.annotation.param.JdbcConn;
21
import org.jfw.util.DateUtil;
22
import org.jfw.util.PageQueryResult;
23
import org.jfw.util.exception.JfwBaseException;
24
import org.jfw.util.jdbc.JdbcUtil;
25
import org.jfw.util.jdbc.PreparedStatementConfig;
26
import org.jfw.util.jdbc.ResultSetExtractor;
27
import org.jfw.util.json.JsonService;
28

29
import com.ekexiu.portal.util.WebMsgSocketServlet;
30
import com.ekexiu.push.service.PushService;
31

32
@Path("/webMsg")
33
public class Service {
34

35
	public static final List<ActorItem> EMPTY_ACTORS = Collections.<ActorItem> emptyList();
36

37
	public static final int ERROR_OWNER_OR_ACTOR = JfwBaseException.MIN_LOGIC_ERROR_CODE + 1;
38

39
	@Autowrie
40
	private WebMsgDao webMsgDao;
41
	
42
	@Autowrie
43
	private PushService pushService;
44
	
45
	
46

47
	public PushService getPushService() {
48
		return pushService;
49
	}
50

51
	public void setPushService(PushService pushService) {
52
		this.pushService = pushService;
53
	}
54

55
	public WebMsgDao getWebMsgDao() {
56
		return webMsgDao;
57
	}
58

59
	public void setWebMsgDao(WebMsgDao webMsgDao) {
60
		this.webMsgDao = webMsgDao;
61
	}
62

63
	public static ActorItem build(WebMsgIdx wmi, String owner, SimpleDateFormat sf) {
64
		ActorItem item = new ActorItem();
65
		item.setCnt(wmi.getLastCnt());
66
		item.setTime(wmi.getLastTime());
67
		item.setTimeStr(sf.format(new Date(wmi.getLastTime())));
68
		String actor = wmi.getActor();
69
		if (owner.equals(actor)) {
70
			item.setId(wmi.getOwner());
71
			item.setNum(wmi.getNumOfActor());
72
		} else {
73
			item.setId(actor);
74
			item.setNum(wmi.getNumOfOwner());
75
		}
76

77
		return item;
78
	}
79

80
	public static List<ActorItem> build(List<WebMsgIdx> list, String owner) {
81
		if (list == null || list.isEmpty())
82
			return EMPTY_ACTORS;
83

84
		SimpleDateFormat sf = new SimpleDateFormat(DateUtil.TIMESTAMP_FORMAT);
85
		List<ActorItem> ret = new ArrayList<ActorItem>(list.size());
86
		for (ListIterator<WebMsgIdx> it = list.listIterator(); it.hasNext();) {
87
			ret.add(build(it.next(), owner, sf));
88
		}
89
		return ret;
90
	}
91

92
	public static void checkActors(String id, String id2) throws JfwBaseException {
93
		if (id.compareTo(id2) == 0)
94
			throw new JfwBaseException(ERROR_OWNER_OR_ACTOR, "消息的参与人不合法");
95
	}
96

97
	/**
98
	 * 查询指定用户的未删除会话
99
	 * 
100
	 * @param con
101
	 * @param id
102
	 *            用户ID
103
	 * @return
104
	 * @throws SQLException
105
	 */
106
	@Get
107
	@Path("/idx/qm")
108
	public List<ActorItem> query(@JdbcConn Connection con, String id) throws SQLException {
109
		List<WebMsgIdx> list = webMsgDao.query(con, id);
110
		return build(list, id);
111
	}
112

113
	/**
114
	 * 查询指定的未删除会话
115
	 * 
116
	 * @param con
117
	 * @param owner
118
	 *            会话所有人
119
	 * @param actor
120
	 *            会话参与人
121
	 * @return
122
	 * @throws SQLException
123
	 */
124
	@Get
125
	@Path("/idx/qo")
126
	public ActorItem query(@JdbcConn Connection con, String owner, String actor) throws SQLException {
127
		WebMsgIdx wmi = null;
128
		if (owner.compareTo(actor) < 0) {
129
			wmi = webMsgDao.query(con, owner, actor);
130
		} else {
131
			wmi = webMsgDao.query(con, actor, owner);
132
		}
133
		SimpleDateFormat sf = new SimpleDateFormat(DateUtil.TIMESTAMP_FORMAT);
134
		if (wmi != null) {
135
			return build(wmi, owner, sf);
136
		}
137
		return null;
138
	}
139

140
	/**
141
	 * 查询指定用户的未删除会话(分页,最后活动时间倒序)
142
	 * 
143
	 * @param con
144
	 * @param id
145
	 *            用户ID
146
	 * @return
147
	 * @throws SQLException
148
	 */
149
	@Get
150
	@Path("/idx/pq")
151
	public PageQueryResult<ActorItem> query(@JdbcConn Connection con, String id, @DefaultValue("1") int pageNo, @DefaultValue("10") int pageSize)
152
			throws SQLException {
153
		PageQueryResult<WebMsgIdx> wmis = this.webMsgDao.query(con, id, pageSize, pageNo);
154
		PageQueryResult<ActorItem> ret = new PageQueryResult<ActorItem>();
155
		ret.setPageNo(wmis.getPageNo());
156
		ret.setPageSize(wmis.getPageSize());
157
		ret.setTotal(wmis.getTotal());
158
		ret.setData(build(wmis.getData(), id));
159
		return ret;
160
	}
161

162
	/**
163
	 * 查询指定用户的未读消息数
164
	 * 
165
	 * @param con
166
	 * @param id
167
	 *            用户id
168
	 * @return
169
	 * @throws SQLException
170
	 */
171
	@Get
172
	@Path("/unReadedCount")
173
	public Integer queryUnReadedCount(@JdbcConn Connection con, final String id) throws SQLException {
174
		return JdbcUtil.query(con,
175
				"SELECT NUM_OF_OWNER FROM WEB_MSG_IDX WHERE OWNER =? AND SHOW_OF_OWNER='1' UNION ALL SELECT NUM_OF_ACTOR FROM WEB_MSG_IDX WHERE ACTOR =? AND SHOW_OF_ACTOR='1' ",
176
				new ResultSetExtractor<Integer>() {
177
					@Override
178
					public Integer extractData(ResultSet rs) throws SQLException {
179
						int ret = 0;
180
						while (rs.next()) {
181
							ret += rs.getInt(1);
182
						}
183
						return ret;
184
					}
185
				}, new PreparedStatementConfig() {
186
					@Override
187
					public void config(PreparedStatement ps) throws SQLException {
188
						ps.setString(1, id);
189
						ps.setString(2, id);
190
					}
191
				});
192
	}
193

194
	/**
195
	 * 发送消息
196
	 * 
197
	 * @param con
198
	 * @param sender
199
	 *            发送人ID
200
	 * @param reciver
201
	 *            接收人ID
202
	 * @param cnt
203
	 *            内容
204
	 * @return 发送时间(YYYYMMDDHH24MISSZZZ)
205
	 * @throws SQLException
206
	 * @throws JfwBaseException
207
	 */
208
	@Post
209
	@Path
210
	public String send(@JdbcConn Connection con, String sender, String reciver, String cnt) throws SQLException, JfwBaseException {
211
		checkActors(sender, reciver);
212
		boolean ownerSend = true;
213
		String owner = sender;
214
		String actor = reciver;
215
		boolean next = true;
216
		if (sender.compareTo(reciver) > 0) {
217
			ownerSend = false;
218
			owner = reciver;
219
			actor = sender;
220
		}
221
		WebMsgCnt wmc = new WebMsgCnt();
222
		wmc.setCnt(cnt);
223
		wmc.setReaded(false);
224
		wmc.setReciver(reciver);
225
		wmc.setSender(sender);
226
		WebMsgIdx wmi = null;
227

228
		while (next) {
229
			try {
230
				long time = System.currentTimeMillis();
231
				wmc.setSendTime(DateUtil.formatTimeStamp(time));
232
				webMsgDao.insert(con, wmc);
233
				int numOfUpdate = 0;
234
				if (ownerSend) {
235
					numOfUpdate = webMsgDao.incActorNum(con, owner, actor, cnt, time);
236
				} else {
237
					numOfUpdate = webMsgDao.incOwnerNum(con, owner, actor, cnt, time);
238
				}
239
				if (numOfUpdate == 0) {
240
					if (wmi == null) {
241
						wmi = new WebMsgIdx();
242
						wmi.setActor(actor);
243
						wmi.setLastCnt(cnt);
244

245
						wmi.setNumOfActor(ownerSend ? 1 : 0);
246
						wmi.setNumOfOwner(ownerSend ? 0 : 1);
247
						wmi.setOwner(owner);
248
						wmi.setShowOfActor(true);
249
						wmi.setShowOfOwner(true);
250
					}
251
					wmi.setLastTime(time);
252
					webMsgDao.insert(con, wmi);
253
				}
254
				con.commit();
255
				next = false;
256
				WebMsgSocketServlet.sendMessage(reciver, JsonService.toJson(wmc));
257
				try{
258
					pushService.pushWithAlias("通知","您收到了一条消息", "msgsend", reciver);
259
				}catch(Throwable thr){}
260
			} catch (SQLException e) {
261
				if ("23505".equals(e.getSQLState())) {
262
					con.rollback();
263
				}
264
				throw e;
265
			}
266
		}
267
		return wmc.getSendTime();
268
	}
269

270
	/**
271
	 * 查询消息内容
272
	 * 
273
	 * @param con
274
	 * @param sender
275
	 *            发送人ID
276
	 * @param reciver
277
	 *            接收人ID
278
	 * @param bt
279
	 *            >=开始时间(YYYYMMDDHH24MISSZZZ)
280
	 * @param et
281
	 *            <=结束时间(YYYYMMDDHH24MISSZZZ)
282
	 * @param both
283
	 *            是否包含反向消息
284
	 * @return
285
	 * @throws SQLException
286
	 */
287
	@Get
288
	@Path("/cnt/load")
289
	public List<WebMsgCnt> load(@JdbcConn Connection con, String sender, String reciver, @Nullable String bt, @Nullable String et,
290
			@DefaultValue("false") boolean both) throws SQLException {
291
		if (both) {
292
			return webMsgDao.queryAll(con, sender, reciver, bt, et);
293
		} else {
294
			return webMsgDao.query(con, sender, reciver, bt, et);
295
		}
296
	}
297

298
	/**
299
	 * 倒序查询消息内容
300
	 * 
301
	 * @param con
302
	 * @param sender
303
	 *            发送人
304
	 * @param reciver
305
	 *            接收人
306
	 * @param sendTime
307
	 *            <最后发送时间
308
	 * @param rows
309
	 *            返加数据最大条数
310
	 * @param both
311
	 *            是否包含反向消息
312
	 * @return
313
	 * @throws SQLException
314
	 */
315
	@Get
316
	@Path("/cnt/deload")
317
	public List<WebMsgCnt> deLoad(@JdbcConn Connection con, String sender, String reciver, @Nullable String sendTime, @DefaultValue("10") int rows,
318
			@DefaultValue("false") boolean both) throws SQLException {
319
		return both ? webMsgDao.queryAll4Desc(con, sender, reciver, sendTime, rows) : webMsgDao.query4Desc(con, sender, reciver, sendTime, rows);
320
	}
321
/**
322
 * 置消息为已读
323
 * @param con
324
 * @param sender
325
 * @param reciver
326
 * @param time  <=send_time 
327
 * @throws SQLException
328
 * @throws JfwBaseException
329
 */
330
	@Post
331
	@Path("/readed")
332
	public void readed(@JdbcConn(true) Connection con, String sender, String reciver, String time) throws SQLException, JfwBaseException {
333
		checkActors(sender, reciver);
334
		int num = webMsgDao.readed(con, sender, reciver, time);
335
		if (num > 0) {
336
			String owner = sender;
337
			String actor = reciver;
338
			boolean ownerSend = true;
339
			if (sender.compareTo(reciver) > 0) {
340
				owner = reciver;
341
				actor = sender;
342
				ownerSend = false;
343
			}
344
			if (ownerSend) {
345
				webMsgDao.decActorNum(con, owner, actor, num);
346
			} else {
347
				webMsgDao.decOwnerNum(con, owner, actor, num);
348
			}
349
		}
350
	}
351

352
	/**
353
	 * 删除会话
354
	 * @param con
355
	 * @param owner  要删除的会话的参与人ID
356
	 * @param actor    另一个参与人ID
357
	 * @throws SQLException
358
	 * @throws JfwBaseException
359
	 */
360
	@Post
361
	@Path("/disable/show")
362
	public void disableShow(@JdbcConn(true) Connection con, String owner, String actor) throws SQLException, JfwBaseException {
363
		checkActors(owner, actor);
364
		if (owner.compareTo(actor) < 0) {
365
			webMsgDao.disableOwnerShow(con, owner, actor);
366
		} else {
367
			webMsgDao.disableActorShow(con, actor, owner);
368
		}
369
	}
370
}

+ 63 - 0
src/main/java/com/ekexiu/portal/msg/WebMsgCnt.java

@ -0,0 +1,63 @@
1
package com.ekexiu.portal.msg;
2

3
import org.jfw.apt.orm.annotation.entry.Column;
4
import org.jfw.apt.orm.annotation.entry.PrimaryKey;
5
import org.jfw.apt.orm.annotation.entry.Table;
6
import org.jfw.apt.orm.core.enums.DE;
7

8
@PrimaryKey( { "sender","reciver","sendTime" })
9
@Table
10
public class WebMsgCnt {
11

12
	private String cnt;
13
	private String sendTime;
14
	private String sender;
15
	private String reciver;
16
	private boolean readed;
17
	
18
	
19
	/**
20
	 * 消息内容
21
	 * @return
22
	 */
23
	@Column(DE.text_de)
24
	public String getCnt() {
25
		return cnt;
26
	}
27
	public void setCnt(String cnt) {
28
		this.cnt = cnt;
29
	}
30
	
31
	@Column(DE.text_de)
32
	public String getSendTime() {
33
		return sendTime;
34
	}
35
	public void setSendTime(String sendTime) {
36
		this.sendTime = sendTime;
37
	}
38
	@Column(DE.text_de)
39
	public String getSender() {
40
		return sender;
41
	}
42
	public void setSender(String sender) {
43
		this.sender = sender;
44
	}
45
	@Column(DE.text_de)
46
	public String getReciver() {
47
		return reciver;
48
	}
49
	public void setReciver(String reciver) {
50
		this.reciver = reciver;
51
	}
52
	/**
53
	 * 是否已读
54
	 * @return
55
	 */
56
	@Column(DE.boolean_de)
57
	public boolean isReaded() {
58
		return readed;
59
	}
60
	public void setReaded(boolean readed) {
61
		this.readed = readed;
62
	}
63
}

+ 119 - 0
src/main/java/com/ekexiu/portal/msg/WebMsgDao.java

@ -0,0 +1,119 @@
1
package com.ekexiu.portal.msg;
2

3
import java.sql.Connection;
4
import java.sql.SQLException;
5
import java.util.List;
6

7
import org.jfw.apt.annotation.Nullable;
8
import org.jfw.apt.orm.annotation.dao.DAO;
9
import org.jfw.apt.orm.annotation.dao.method.Exclude;
10
import org.jfw.apt.orm.annotation.dao.method.From;
11
import org.jfw.apt.orm.annotation.dao.method.OrderBy;
12
import org.jfw.apt.orm.annotation.dao.method.SetSentence;
13
import org.jfw.apt.orm.annotation.dao.method.Where;
14
import org.jfw.apt.orm.annotation.dao.method.operator.Insert;
15
import org.jfw.apt.orm.annotation.dao.method.operator.LimitSelect;
16
import org.jfw.apt.orm.annotation.dao.method.operator.PageSelect;
17
import org.jfw.apt.orm.annotation.dao.method.operator.SelectList;
18
import org.jfw.apt.orm.annotation.dao.method.operator.SelectOne;
19
import org.jfw.apt.orm.annotation.dao.method.operator.UpdateWith;
20
import org.jfw.apt.orm.annotation.dao.param.Alias;
21
import org.jfw.apt.orm.annotation.dao.param.GroupSqlColumn;
22
import org.jfw.apt.orm.annotation.dao.param.GtEq;
23
import org.jfw.apt.orm.annotation.dao.param.LessThan;
24
import org.jfw.apt.orm.annotation.dao.param.LtEq;
25
import org.jfw.apt.orm.annotation.dao.param.Set;
26
import org.jfw.apt.orm.core.defaultImpl.StringHandler;
27
import org.jfw.util.PageQueryResult;
28

29
@DAO
30
public interface WebMsgDao {
31

32
	@Exclude({ "showOfOwner", "showOfActor" })
33
	@SelectList
34
	@OrderBy("ORDER BY LAST_TIME DESC")
35
	List<WebMsgIdx> query(Connection con, @GroupSqlColumn(handlerClass = StringHandler.class, isAnd = false, value = { "OWNER=? AND SHOW_OF_OWNER='1'",
36
			"ACTOR=? AND SHOW_OF_ACTOR='1'" }, force = false) String id) throws SQLException;
37

38
	@SelectOne
39
	@Nullable
40
	WebMsgIdx query(Connection con, String owner, String actor) throws SQLException;
41

42
	@Exclude({ "showOfOwner", "showOfActor" })
43
	@PageSelect
44
	@OrderBy("ORDER BY LAST_TIME DESC,OWNER DESC")
45
	PageQueryResult<WebMsgIdx> query(Connection con, @GroupSqlColumn(handlerClass = StringHandler.class, isAnd = false, value = {
46
			"OWNER=? AND SHOW_OF_OWNER='1'", "ACTOR=? AND SHOW_OF_ACTOR='1'" }, force = false) String id, int pageSize, int pageNo) throws SQLException;
47

48
	@Insert
49
	int insert(Connection con, WebMsgCnt cnt) throws SQLException;
50

51
	@Insert
52
	int insert(Connection con, WebMsgIdx idx) throws SQLException;
53

54
	@UpdateWith
55
	@From(WebMsgIdx.class)
56
	@SetSentence("NUM_OF_ACTOR = NUM_OF_ACTOR + 1,SHOW_OF_ACTOR='1'")
57
	int incActorNum(Connection con, String owner, String actor, @Set String lastCnt, @Set long lastTime) throws SQLException;
58

59
	@UpdateWith
60
	@From(WebMsgIdx.class)
61
	@SetSentence("NUM_OF_OWNER = NUM_OF_OWNER + 1,SHOW_OF_OWNER='1'")
62
	int incOwnerNum(Connection con, String owner, String actor, @Set String lastCnt, @Set long lastTime) throws SQLException;
63

64
	@UpdateWith
65
	@From(WebMsgIdx.class)
66

67
	int decActorNum(Connection con, String owner, String actor, @Set("= NUM_OF_ACTOR - ?") int numOfActor) throws SQLException;
68

69
	@UpdateWith
70
	@From(WebMsgIdx.class)
71
	int decOwnerNum(Connection con, String owner, String actor, @Set("= NUM_OF_OWNER - ?") int numOfOwner) throws SQLException;
72

73
	@SelectList
74
	@OrderBy("ORDER BY SEND_TIME ASC")
75
	List<WebMsgCnt> query(Connection con, String sender, String reciver, @Nullable @GtEq @Alias("sendTime") String bt,
76
			@Nullable @LtEq @Alias("sendTime") String et) throws SQLException;
77
	
78
	
79
	
80
	@LimitSelect
81
	@OrderBy("ORDER BY SEND_TIME DESC")
82
	List<WebMsgCnt> query4Desc(Connection con, String sender, String reciver,@Nullable @LessThan String sendTime,int rows) throws SQLException;
83
	
84

85
	@SelectList
86
	@OrderBy("ORDER BY SEND_TIME ASC")
87
	List<WebMsgCnt> queryAll(Connection con,
88
			@GroupSqlColumn(handlerClass = StringHandler.class, value = { "SENDER=?", "RECIVER=?" }, isAnd = false) String actor1,
89
			@GroupSqlColumn(handlerClass = StringHandler.class, value = { "SENDER=?", "RECIVER=?" }, isAnd = false) String actor2,
90
			@Nullable @GtEq @Alias("sendTime") String bt, @Nullable @LtEq @Alias("sendTime") String et) throws SQLException;
91

92
	@LimitSelect
93
	@OrderBy("ORDER BY SEND_TIME DESC")
94
	List<WebMsgCnt> queryAll4Desc(Connection con,
95
			@GroupSqlColumn(handlerClass = StringHandler.class, value = { "SENDER=?", "RECIVER=?" }, isAnd = false) String actor1,
96
			@GroupSqlColumn(handlerClass = StringHandler.class, value = { "SENDER=?", "RECIVER=?" }, isAnd = false) String actor2,
97
			@Nullable @LessThan String sendTime,int rows) throws SQLException;
98
	
99
	
100

101
	@UpdateWith
102
	@From(WebMsgCnt.class)
103
	@SetSentence("READED='1'")
104
	@Where("READED='0'")
105
	int readed(Connection con, String sender, String reciver, @LtEq String sendTime) throws SQLException;
106

107
	@UpdateWith
108
	@From(WebMsgIdx.class)
109
	@SetSentence("SHOW_OF_OWNER='0'")
110
	@Where("SHOW_OF_OWNER='1'")
111
	int disableOwnerShow(Connection con, String owner, String actor) throws SQLException;
112

113
	@UpdateWith
114
	@From(WebMsgIdx.class)
115
	@SetSentence("SHOW_OF_ACTOR='0'")
116
	@Where("SHOW_OF_ACTOR='1'")
117
	int disableActorShow(Connection con, String owner, String actor) throws SQLException;
118

119
}

+ 114 - 0
src/main/java/com/ekexiu/portal/msg/WebMsgIdx.java

@ -0,0 +1,114 @@
1
package com.ekexiu.portal.msg;
2

3
import org.jfw.apt.orm.annotation.entry.Column;
4
import org.jfw.apt.orm.annotation.entry.PrimaryKey;
5
import org.jfw.apt.orm.annotation.entry.Table;
6
import org.jfw.apt.orm.core.enums.DE;
7

8

9
@PrimaryKey({"owner","actor"})
10
@Table
11
public class WebMsgIdx {
12
	
13
	private String owner;
14
	private String  actor;
15
	private long lastTime;
16
	private int numOfOwner;
17
	private int numOfActor;
18
	private String lastCnt;
19
	private boolean showOfOwner;
20
	private boolean showOfActor;
21
	
22
	
23
	/**
24
	 * 所有者(两个ID相比小的是Owner)
25
	 * @return
26
	 */
27
	@Column(DE.text_de)
28
	public String getOwner() {
29
		return owner;
30
	}
31
	public void setOwner(String owner) {
32
		this.owner = owner;
33
	}
34
	/**
35
	 *参与者
36
	 * @return
37
	 */
38
	@Column(DE.text_de)
39
	public String getActor() {
40
		return actor;
41
	}
42
	public void setActor(String actor) {
43
		this.actor = actor;
44
	}
45
	/**
46
	 * 最后发送时间
47
	 * @return
48
	 */
49
	@Column(DE.long_de)
50
	public long getLastTime() {
51
		return lastTime;
52
	}
53
	public void setLastTime(long lastTime) {
54
		this.lastTime = lastTime;
55
	}
56
	/**
57
	 * 未读信息数(所有者)
58
	 * @return
59
	 */
60
	@Column(DE.int_de)
61
	public int getNumOfOwner() {
62
		return numOfOwner;
63
	}
64
	public void setNumOfOwner(int num) {
65
		this.numOfOwner = num;
66
	}
67
	
68
	
69
	/**
70
	 * 未读信息数(参有者)
71
	 * @return
72
	 */
73
	@Column(DE.int_de)
74
	public int getNumOfActor() {
75
		return numOfActor;
76
	}
77
	public void setNumOfActor(int numOfActor) {
78
		this.numOfActor = numOfActor;
79
	}
80
	/**
81
	 * 最后信息内容
82
	 * @return
83
	 */
84
	@Column(DE.text_de)
85
	public String getLastCnt() {
86
		return lastCnt;
87
	}
88
	public void setLastCnt(String lastCnt) {
89
		this.lastCnt = lastCnt;
90
	}
91
	
92
	/**
93
	 * 所有者是否显示(会话在所有者的列表中未被删除)
94
	 * @return
95
	 */
96
	@Column(DE.boolean_de)
97
	public boolean isShowOfOwner() {
98
		return showOfOwner;
99
	}
100
	public void setShowOfOwner(boolean showOfOwner) {
101
		this.showOfOwner = showOfOwner;
102
	}
103
	/**
104
	 * 参与者是否显示(会话在参与者的列表中未被删除)
105
	 * @return
106
	 */
107
	@Column(DE.boolean_de)
108
	public boolean isShowOfActor() {
109
		return showOfActor;
110
	}
111
	public void setShowOfActor(boolean showOfActor) {
112
		this.showOfActor = showOfActor;
113
	}
114
}

+ 48 - 8
src/main/java/com/ekexiu/portal/service/ProfessorService.java

@ -362,7 +362,7 @@ public class ProfessorService {
362 362
				this.professorDao.updateOrg(con, oid, id);
363 363
				if (old != null) {
364 364
					this.professorDao.updateOrgAuth(con, id, "0");
365
					this.demandDao.closeByCreator(con,id, id);
365
					this.demandDao.closeByCreator(con, id, id);
366 366
					this.orgResStaffDao.deletePro(con, id);
367 367
				}
368 368
				return true;
@ -450,6 +450,7 @@ public class ProfessorService {
450 450
		EditProfessor professor = this.professorDao.queryBaseInfo(con, id);
451 451
		if (null != professor) {
452 452
			professor.setHasHeadImage(this.imageService.hasProfessorImage(id));
453
			hiddenPrivacyInfo(professor);
453 454
		}
454 455
		return professor;
455 456
	}
@ -463,6 +464,7 @@ public class ProfessorService {
463 464
		List<EditProfessor> professors = this.professorDao.queryByName(con, name, total);
464 465
		for (EditProfessor professor : professors) {
465 466
			professor.setHasHeadImage(this.imageService.hasProfessorImage(professor.getId()));
467
			hiddenPrivacyInfo(professor);
466 468
		}
467 469
		return professors;
468 470
	}
@ -480,13 +482,18 @@ public class ProfessorService {
480 482
	@Get
481 483
	@Path("/{id}")
482 484
	public Professor query(@JdbcConn Connection con, @PathVar String id) throws SQLException {
483
		return this.professorDao.query(con, id);
485
		Professor ret = this.professorDao.query(con, id);
486
		if (null != ret) {
487
			hiddenPrivacyInfo(ret);
488
		}
489
		return ret;
490

484 491
	}
485 492

486 493
	@Get
487 494
	@Path("/qa")
488 495
	public List<Professor> queryAll(@JdbcConn Connection con) throws SQLException {
489
		return this.professorDao.query(con);
496
		return hiddenPrivacyInfo(this.professorDao.query(con));
490 497
	}
491 498

492 499
	@Get
@ -500,6 +507,7 @@ public class ProfessorService {
500 507
				professor.setHasHeadImage(this.imageService.hasProfessorImage(professor.getId()));
501 508
				professor.setResearchAreas(this.researchAreaDao.query(con, professor.getId()));
502 509
			}
510
			hiddenPrivacyInfo(professors);
503 511
			queryResult.setData(professors);
504 512
		}
505 513
		return queryResult;
@ -513,7 +521,7 @@ public class ProfessorService {
513 521
			professor.setHasHeadImage(this.imageService.hasProfessorImage(professor.getId()));
514 522
			professor.setResearchAreas(this.researchAreaDao.query(con, professor.getId()));
515 523
		}
516
		return professors;
524
		return hiddenPrivacyInfo(professors);
517 525
	}
518 526

519 527
	public void updateStarAvg(Connection con) throws SQLException {
@ -565,6 +573,8 @@ public class ProfessorService {
565 573
				editProfessor.setHasHeadImage(this.imageService.hasProfessorImage(editProfessor.getId()));
566 574
				editProfessor.setResearchAreas(this.researchAreaDao.query(con, editProfessor.getId()));
567 575
				editProfessor.setResources(this.resourceDao.queryList(con, editProfessor.getId()));
576
				editProfessor.setPhone(null);
577
				editProfessor.setEmail(null);
568 578
			}
569 579
		}
570 580
		return queryResult;
@ -599,6 +609,7 @@ public class ProfessorService {
599 609
				editProfessor.setResources(this.resourceDao.queryList(con, editProfessor.getId()));
600 610
			}
601 611
			queryResult.setData(editProfessors);
612
			hiddenPrivacyInfo(editProfessors);
602 613
		}
603 614
		return queryResult;
604 615
	}
@ -737,6 +748,7 @@ public class ProfessorService {
737 748
				editProfessor.setHasHeadImage(this.imageService.hasProfessorImage(editProfessor.getId()));
738 749
				editProfessor.setResearchAreas(this.researchAreaDao.query(con, editProfessor.getId()));
739 750
			}
751
			hiddenPrivacyInfo(editProfessors);
740 752
			queryResult.setData(editProfessors);
741 753
		}
742 754
		return queryResult;
@ -777,8 +789,8 @@ public class ProfessorService {
777 789
	}
778 790

779 791
	@Get
780
	@Path("/info/{id}")
781
	public ProfessorInfo qinfo(@JdbcConn(false) Connection con, @PathVar String id) throws SQLException {
792
	@Path("/editInfo/{id}")
793
	public ProfessorInfo editInfo(@JdbcConn(false) Connection con, @PathVar String id) throws SQLException {
782 794
		ProfessorInfo info = this.professorDao.queryInfo(con, id);
783 795
		if (info != null) {
784 796
			if (info.getOrgId() != null) {
@ -811,10 +823,21 @@ public class ProfessorService {
811 823

812 824
	}
813 825

826
	@Get
827
	@Path("/info/{id}")
828
	public ProfessorInfo qinfo(@JdbcConn(false) Connection con, @PathVar String id) throws SQLException {
829
		ProfessorInfo qi = this.editInfo(con, id);
830
		if (qi != null) {
831
			qi.setPhone(null);
832
			qi.setEmail(null);
833
		}
834
		return qi;
835
	}
836

814 837
	@Get
815 838
	@Path("/byShareId")
816 839
	public Professor query(@JdbcConn Connection con, long id) throws SQLException {
817
		return this.professorDao.query(con, id);
840
		return hiddenPrivacyInfo(this.professorDao.query(con, id));
818 841
	}
819 842

820 843
	/**
@ -836,7 +859,8 @@ public class ProfessorService {
836 859
		String[] ids = this.professorDao.queryProfessorIdWithSameKeyWord(con, professorId, rows);
837 860
		if (ids != null) {
838 861
			List<Professor> ret = this.professorDao.query(con, ids);
839
			return ret;
862

863
			return hiddenPrivacyInfo(ret);
840 864
		}
841 865
		return Collections.<Professor> emptyList();
842 866
	}
@ -875,6 +899,22 @@ public class ProfessorService {
875 899
		}
876 900
	}
877 901

902
	public static <T extends Professor> T hiddenPrivacyInfo(T p) {
903
		if (null != p) {
904
			p.setPhone(null);
905
			p.setEmail(null);
906
		}
907
		return p;
908
	}
909

910
	public static <T extends Professor> List<T> hiddenPrivacyInfo(List<T> ps) {
911
		if (ps != null && ps.size() > 0)
912
			for (Professor p : ps) {
913
				hiddenPrivacyInfo(p);
914
			}
915
		return ps;
916
	}
917

878 918
	//
879 919
	//
880 920
	// @Get

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

@ -145,6 +145,10 @@ public class SysService {
145 145
	private String inviteReplaceCode = "invitCodeKey";
146 146
	private String inviteMailSubject = "[ 科袖网 ]特邀科研专家邀请函";
147 147
	private String inviteMailContentTempalte;
148
	private String invitedUserId;
149
	private String invitedUserName;
150
	
151
	
148 152
149 153
	private String inviteStaffReplaceKey = "stateCode";
150 154
	private String inviteStaffMailTempalte;
@ -158,6 +162,22 @@ public class SysService {
158 162
159 163
	
160 164
	
165
	public String getInvitedUserName() {
166
		return invitedUserName;
167
	}
168
169
	public void setInvitedUserName(String invitedUserName) {
170
		this.invitedUserName = invitedUserName;
171
	}
172
173
	public String getInvitedUserId() {
174
		return invitedUserId;
175
	}
176
177
	public void setInvitedUserId(String invitedUserId) {
178
		this.invitedUserId = invitedUserId;
179
	}
180
161 181
	public String getBasePhoneReplaceKey() {
162 182
		return basePhoneReplaceKey;
163 183
	}
@ -789,6 +809,41 @@ public class SysService {
789 809
		user2.setEmail(user.getEmail());
790 810
		return user2;
791 811
	}
812
	
813
	@Get
814
	@Path("/baseUserInfo")
815
	public User queryBaseUser(@JdbcConn Connection con,String id) throws SQLException{
816
		User user = this.userDao.query(con, id);
817
		if(user!=null){
818
			user.setInviteCode(null);
819
			user.setInviterId(null);
820
			String mp = user.getMobilePhone();
821
			if(mp!=null && mp.length()>4){
822
				user.setMobilePhone(mp.substring(mp.length()-4));
823
			}
824
			String em = user.getEmail();
825
			if(em!=null){
826
				int idx = em.indexOf('@');
827
				if(idx>0){
828
					StringBuilder sb = new StringBuilder();
829
					sb.append(em);
830
					if(idx==1){
831
						sb.setCharAt(0, '*');
832
					}else{
833
						int b =Math.max(1, idx-4);
834
						for(;b<idx;++b){
835
							sb.setCharAt(b, '*');
836
						}
837
					}
838
					user.setEmail(sb.toString());
839
				}
840
			}
841
			user.setPasswd(null);
842
			user.setSendMailStatus(null);
843
			user.setUserType(null);
844
		}
845
		return user;
846
	}
792 847
793 848
	/**
794 849
	 * 手机验证注册
@ -1324,6 +1379,10 @@ public class SysService {
1324 1379
		if (user == null) {
1325 1380
			throw new JfwBaseException("系统没有此用户");
1326 1381
		}
1382
		Professor p = this.professorDao.query(con, id);
1383
		if(p==null){
1384
			throw new JfwBaseException("系统没有此用户的专家信息");
1385
		}
1327 1386
		if (user.getEmail() == null) {
1328 1387
			throw new JfwBaseException("邮箱不能为空");
1329 1388
		}
@ -1340,6 +1399,8 @@ public class SysService {
1340 1399
			phoneReplace = this.phoneContentTemplate.replaceAll(this.phoneReplaceKey, mobile);
1341 1400
		}
1342 1401
		mailContent = mailContent.replaceAll(this.inviteReplacePhone, phoneReplace);
1402
		mailContent = mailContent.replaceAll(this.invitedUserId, user.getId());
1403
		mailContent = mailContent.replaceAll(this.invitedUserName, p.getName());		
1343 1404
		this.mailservice.sendSimpleMail(user.getEmail(), mailContent, null, this.inviteMailSubject);
1344 1405
		return "send success !";
1345 1406
	}
@ -1828,51 +1889,51 @@ public class SysService {
1828 1889
		}
1829 1890
		return key;
1830 1891
	}
1831
	/**
1832
	 * 发送手机验证码
1833
	 * 
1834
	 * @param con
1835
	 * @param mobilePhone
1836
	 *            验证的手机号
1837
	 * @return
1838
	 * @throws JfwBaseException
1839
	 * @throws SQLException
1840
	 */
1841
	@Get
1842
	@Path("/regmobilephone_onlyphone")
1843
	public String regMobilePhone(@JdbcConn(false) Connection con, String mobilePhone, @DefaultValue("true") boolean checkExists)
1844
			throws JfwBaseException, SQLException {
1845
		if (checkExists) {
1846
			User user = this.userDao.queryByEmailOrMobilePhone(con, mobilePhone);
1847
			if (null != user) {
1848
				return null;
1849
			}
1850
		}
1851
		StateCode<String, String> sc = new StateCode<String, String>();
1852
		final String key = JfwAppContext.cacheObjectAndGenKey(sc);
1853
		try {
1854
			Random rd = new Random();
1855
			int vi = rd.nextInt(10000);
1856
			String vc = String.format("%04d", vi);
1857
			sc.setKey(mobilePhone);
1858
			sc.setValue(vc);
1859
			this.mobilePhoneServcie.sendMessage(mobilePhone, this.regMobilePhoneContentTemplate, this.regMobilePhoneReplaceKey, vc);
1860
			long ct = System.currentTimeMillis();
1861
			long et = ct + this.timeLimitWithRegMobilePhone + 5000;
1862
			sc.setBuildTime(ct);
1863
			sc.setExpiredTime(et);
1864
			JfwAppContext.getScheduledExecutorService().schedule(new Runnable() {
1865
				@Override
1866
				public void run() {
1867
					JfwAppContext.removeCachedObject(key);
1868
				}
1869
			}, this.timeLimitWithRegMobilePhone + 10000, TimeUnit.MILLISECONDS);
1870
		} catch (Exception e) {
1871
			JfwAppContext.removeCachedObject(key);
1872
			throw new JfwBaseException(10012, "send mobile phone message to " + mobilePhone + " error", e);
1873
		}
1874
		return key;
1875
	}
1892
//	/**
1893
//	 * 发送手机验证码
1894
//	 * 
1895
//	 * @param con
1896
//	 * @param mobilePhone
1897
//	 *            验证的手机号
1898
//	 * @return
1899
//	 * @throws JfwBaseException
1900
//	 * @throws SQLException
1901
//	 */
1902
//	@Get
1903
//	@Path("/regmobilephone_onlyphone")
1904
//	public String regMobilePhone(@JdbcConn(false) Connection con, String mobilePhone, @DefaultValue("true") boolean checkExists)
1905
//			throws JfwBaseException, SQLException {
1906
//		if (checkExists) {
1907
//			User user = this.userDao.queryByEmailOrMobilePhone(con, mobilePhone);
1908
//			if (null != user) {
1909
//				return null;
1910
//			}
1911
//		}
1912
//		StateCode<String, String> sc = new StateCode<String, String>();
1913
//		final String key = JfwAppContext.cacheObjectAndGenKey(sc);
1914
//		try {
1915
//			Random rd = new Random();
1916
//			int vi = rd.nextInt(10000);
1917
//			String vc = String.format("%04d", vi);
1918
//			sc.setKey(mobilePhone);
1919
//			sc.setValue(vc);
1920
//			this.mobilePhoneServcie.sendMessage(mobilePhone, this.regMobilePhoneContentTemplate, this.regMobilePhoneReplaceKey, vc);
1921
//			long ct = System.currentTimeMillis();
1922
//			long et = ct + this.timeLimitWithRegMobilePhone + 5000;
1923
//			sc.setBuildTime(ct);
1924
//			sc.setExpiredTime(et);
1925
//			JfwAppContext.getScheduledExecutorService().schedule(new Runnable() {
1926
//				@Override
1927
//				public void run() {
1928
//					JfwAppContext.removeCachedObject(key);
1929
//				}
1930
//			}, this.timeLimitWithRegMobilePhone + 10000, TimeUnit.MILLISECONDS);
1931
//		} catch (Exception e) {
1932
//			JfwAppContext.removeCachedObject(key);
1933
//			throw new JfwBaseException(10012, "send mobile phone message to " + mobilePhone + " error", e);
1934
//		}
1935
//		return key;
1936
//	}
1876 1937
	
1877 1938
	
1878 1939
	@Get

+ 44 - 0
src/main/java/com/ekexiu/portal/util/DebugService.java

@ -0,0 +1,44 @@
1
package com.ekexiu.portal.util;
2

3
import org.jfw.apt.annotation.Autowrie;
4
import org.jfw.apt.annotation.Nullable;
5
import org.jfw.apt.web.annotation.Path;
6
import org.jfw.apt.web.annotation.operate.Get;
7
import org.jfw.apt.web.annotation.operate.Post;
8

9
import com.ekexiu.push.service.PushService;
10

11
@Path("/debug")
12
public class DebugService {
13
	@Autowrie
14
	private PushService pushService;
15
	
16
	
17
	public PushService getPushService() {
18
		return pushService;
19
	}
20

21

22
	public void setPushService(PushService pushService) {
23
		this.pushService = pushService;
24
	}
25

26

27
	@Get
28
	@Post
29
	@Path("/msg/send")
30
	public void sendMsg(String to,String cnt){
31
		WebMsgSocketServlet.sendMessage(to, cnt);
32
	}
33
	@Get
34
	@Post
35
	@Path("/push")
36
	public void send(@Nullable String alias,@Nullable String[] tag,String title,String cnt,@Nullable String json){
37
		if(alias!=null){
38
			pushService.pushWithAlias(title, cnt, json, alias);
39
		}else{
40
			pushService.pushWithTag(title, cnt, json, tag);
41
		}
42
		
43
	}
44
}

+ 26 - 33
src/main/java/com/ekexiu/portal/util/ProfessorPdfServlet.java

@ -1,32 +1,6 @@
1 1
package com.ekexiu.portal.util;
2 2

3
import java.io.IOException;
4
import java.io.OutputStream;
5
import java.net.URLEncoder;
6
import java.sql.Connection;
7
import java.sql.PreparedStatement;
8
import java.sql.ResultSet;
9
import java.sql.SQLException;
10
import java.util.Collections;
11
import java.util.Comparator;
12

13
import javax.servlet.ServletException;
14
import javax.servlet.http.HttpServlet;
15
import javax.servlet.http.HttpServletRequest;
16
import javax.servlet.http.HttpServletResponse;
17
import javax.sql.DataSource;
18

19
import org.jfw.util.context.JfwAppContext;
20
import org.jfw.util.jdbc.JdbcUtil;
21
import org.jfw.util.jdbc.PreparedStatementConfig;
22
import org.jfw.util.jdbc.ResultSetExtractor;
23

24
import com.ekexiu.portal.po.Honor;
25
import com.ekexiu.portal.po.PartTimeJob;
26
import com.ekexiu.portal.po.Ppaper;
27
import com.ekexiu.portal.po.Ppatent;
28
import com.ekexiu.portal.po.ProfessorEduBg;
29
import com.ekexiu.portal.po.Project;
3
import com.ekexiu.portal.po.*;
30 4
import com.itextpdf.io.source.ByteArrayOutputStream;
31 5
import com.itextpdf.kernel.color.Color;
32 6
import com.itextpdf.kernel.color.DeviceRgb;
@ -43,11 +17,26 @@ import com.itextpdf.kernel.pdf.PdfWriter;
43 17
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
44 18
import com.itextpdf.layout.Document;
45 19
import com.itextpdf.layout.border.SolidBorder;
46
import com.itextpdf.layout.element.Div;
47
import com.itextpdf.layout.element.List;
48
import com.itextpdf.layout.element.ListItem;
49
import com.itextpdf.layout.element.Paragraph;
50
import com.itextpdf.layout.element.Text;
20
import com.itextpdf.layout.element.*;
21
import org.jfw.util.context.JfwAppContext;
22
import org.jfw.util.jdbc.JdbcUtil;
23
import org.jfw.util.jdbc.PreparedStatementConfig;
24
import org.jfw.util.jdbc.ResultSetExtractor;
25

26
import javax.servlet.ServletException;
27
import javax.servlet.http.HttpServlet;
28
import javax.servlet.http.HttpServletRequest;
29
import javax.servlet.http.HttpServletResponse;
30
import javax.sql.DataSource;
31
import java.io.IOException;
32
import java.io.OutputStream;
33
import java.net.URLEncoder;
34
import java.sql.Connection;
35
import java.sql.PreparedStatement;
36
import java.sql.ResultSet;
37
import java.sql.SQLException;
38
import java.util.Collections;
39
import java.util.Comparator;
51 40

52 41
/**
53 42
 * Servlet implementation class ProfessorPdfServlet
@ -80,7 +69,11 @@ public class ProfessorPdfServlet extends HttpServlet {
80 69
					boolean f1 = (o1.getAuthors().indexOf(',') < 0) || o1.getAuthors().startsWith(name);
81 70
					boolean f2 = (o2.getAuthors().indexOf(',') < 0) || o2.getAuthors().startsWith(name);
82 71
					if (f1 == f2) {
83
						return -(o1.getPubDay().compareTo(o2.getPubDay()));
72
						if (o1.getPubDay() == null || o2.getPubDay() == null) {
73
							return 0;
74
						}else {
75
							return -(o1.getPubDay().compareTo(o2.getPubDay()));
76
						}
84 77
					} else {
85 78
						return f1 ? -1 : 1;
86 79
					}

+ 141 - 0
src/main/java/com/ekexiu/portal/util/WebMsgSocketServlet.java

@ -0,0 +1,141 @@
1
package com.ekexiu.portal.util;
2

3
import java.io.IOException;
4
import java.nio.ByteBuffer;
5
import java.util.Map;
6
import java.util.concurrent.ConcurrentHashMap;
7

8
import javax.websocket.OnClose;
9
import javax.websocket.OnMessage;
10
import javax.websocket.OnOpen;
11
import javax.websocket.PongMessage;
12
import javax.websocket.Session;
13
import javax.websocket.server.ServerEndpoint;
14

15
@ServerEndpoint("/websocket/msg")
16
public class WebMsgSocketServlet {
17

18
	private static final Object lock = new Object();
19

20
	private static final Map<String, Session> sessions = new ConcurrentHashMap<String, Session>();
21
	private static final String[] TYPE_LIST = new String[]{"www","app"};
22
	
23
	public static void sendMessage(String id ,String cnt){
24
		for(String type:TYPE_LIST){
25
			String key = id+"~"+type;
26
			Session session = sessions.get(key);
27
			if(session!=null && session.isOpen()){
28
				try {
29
					session.getBasicRemote().sendText(cnt);
30
				} catch (IOException e) {
31
				}
32
			}
33
			
34
		}
35
	}
36
	public static boolean invalidType(String type){
37
		for(String s:TYPE_LIST){
38
			if(s.equals(type))
39
				return false;
40
		}
41
		return true;
42
	}
43

44
	@OnMessage
45
	public void echoTextMessage(Session session, String msg, boolean last) {
46
		// try {
47
		// if (session.isOpen()) {
48
		// session.getBasicRemote().sendText(msg, last);
49
		// }
50
		// } catch (IOException e) {
51
		// try {
52
		// session.close();
53
		// } catch (IOException e1) {
54
		// // Ignore
55
		// }
56
		// }
57
	}
58

59
	@OnMessage
60
	public void echoBinaryMessage(Session session, ByteBuffer bb, boolean last) {
61
		// try {
62
		// if (session.isOpen()) {
63
		// session.getBasicRemote().sendBinary(bb, last);
64
		// }
65
		// } catch (IOException e) {
66
		// try {
67
		// session.close();
68
		// } catch (IOException e1) {
69
		// // Ignore
70
		// }
71
		// }
72
	}
73

74
	@OnMessage
75
	public void echoPongMessage(PongMessage pm) {
76
		// NO-OP
77
	}
78

79
	@OnOpen
80
	public void open(Session session) {
81
		String qs = session.getQueryString();
82
		String[] ps = qs.split("&");
83
		String id = null;
84
		String type = null;
85
		for (String p : ps) {
86
			if (p != null && p.length() > 3) {
87
				if (p.startsWith("id=")) {
88
					id = p.substring(3);
89
				} else if (p.startsWith("pm=")) {
90
					type = p.substring(3);
91
				}
92
			}
93
		}
94

95
		if (id == null || type == null || invalidType(type) ) {
96
			try {
97
				session.close();
98
			} catch (IOException e) {
99
			}
100
			return;
101
		}
102
		String sessionFlag = id + "~" + type;
103
		Session old = null;
104
		synchronized (lock) {
105
			old = sessions.get(sessionFlag);
106
			sessions.put(sessionFlag, session);
107
		}
108
		if (old != null && old.isOpen()) {
109
			try {
110
				old.close();
111
			} catch (IOException e) {
112
			}
113
		}
114
	}
115

116
	@OnClose
117
	public void close(Session session) {
118
		String qs = session.getQueryString();
119
		String[] ps = qs.split("&");
120
		String id = null;
121
		String type = null;
122
		for (String p : ps) {
123
			if (p != null && p.length() > 3) {
124
				if (p.startsWith("id=")) {
125
					id = p.substring(3);
126
				} else if (p.startsWith("pm=")) {
127
					type = p.substring(3);
128
				}
129
			}
130
		}
131

132
		if (id == null || type == null) {
133
			return;
134
		}
135
		String sessionFlag = id + "~" + type;
136
		synchronized (lock) {
137
			if (session.equals(sessions.get(sessionFlag)))
138
				sessions.remove(sessionFlag);
139
		}
140
	}
141
}

+ 18 - 8
src/main/java/com/ekexiu/push/service/PushService.java

@ -61,6 +61,7 @@ public class PushService {
61 61
	private String appKey = "48nq7d7yHu8dgbzVHuisp6";
62 62
	private String appId = "TUdvbnxu1c97r6Fb6cUy57";
63 63
	private int timeout = 0;
64
	private boolean enable = false;
64 65

65 66
	private String token = null;
66 67
	private long lastBuildTime = 0;
@ -97,6 +98,16 @@ public class PushService {
97 98
		this.timeout = timeout;
98 99
	}
99 100

101
	
102
	
103
	public boolean isEnable() {
104
		return enable;
105
	}
106

107
	public void setEnable(boolean enable) {
108
		this.enable = enable;
109
	}
110

100 111
	private String buildSign(long flag) {
101 112
		String p = this.appKey + flag + this.secret;
102 113
		MessageDigest messageDigest;
@ -126,12 +137,12 @@ public class PushService {
126 137
		throw new RuntimeException("调用用个推restApi,返回结果错误:" + obj + ":" + errMsg);
127 138
	}
128 139

129
	private void checkToken() {
130
		if (this.token == null) {
131
			log.error("token is null");
132
			throw new RuntimeException("token is null");
133
		}
134
	}
140
//	private void checkToken() {
141
//		if (this.token == null) {
142
//			log.error("token is null");
143
//			throw new RuntimeException("token is null");
144
//		}
145
//	}
135 146

136 147
	public String allocateRequesstId() {
137 148
		UUID uuid = UUID.randomUUID();
@ -139,7 +150,6 @@ public class PushService {
139 150
	}
140 151

141 152
	private void buildToken() {
142
		if(true) return;
143 153
		long time = System.currentTimeMillis();
144 154
		String sign = this.buildSign(time);
145 155
		StringBuilder sb = new StringBuilder();
@ -164,7 +174,7 @@ public class PushService {
164 174
		if ((this.token != null) && ((System.currentTimeMillis() - this.lastBuildTime) < (24 * 60 * 60 * 1000 - 5000))) {
165 175
			return;
166 176
		}
167
		this.buildToken();
177
		if(enable)	this.buildToken();
168 178
	}
169 179

170 180
	public Map<String, Object> post(String url, Map<String, String> header, byte[] data) throws IOException {

+ 30 - 0
src/main/resources/database.sql

@ -2067,6 +2067,36 @@ COMMENT ON COLUMN  DEMAND.MODIFY_TIME IS '最后修改时间,=完成时间 =
2067 2067
ALTER TABLE organization ADD COLUMN res_mgr char(1) NOT NULL DEFAULT '0';
2068 2068
COMMENT ON COLUMN organization.res_mgr IS '是否是资源管理者 0:不是  1:是';
2069 2069

2070
--- modify begin at version 2.1
2071

2072
CREATE TABLE WEB_MSG_IDX (
2073
	OWNER TEXT NOT NULL,
2074
	ACTOR TEXT NOT NULL,
2075
	LAST_TIME BIGINT NOT NULL,
2076
	NUM_OF_OWNER INTEGER NOT NULL,
2077
	NUM_OF_ACTOR INTEGER NOT NULL,
2078
	LAST_CNT TEXT NOT NULL,
2079
	SHOW_OF_OWNER CHAR(1) NOT NULL,
2080
	SHOW_OF_ACTOR CHAR(1) NOT NULL);
2081
ALTER TABLE WEB_MSG_IDX ADD PRIMARY KEY (OWNER,ACTOR);
2082
CREATE TABLE WEB_MSG_CNT (CNT TEXT NOT NULL,SEND_TIME TEXT NOT NULL,SENDER TEXT NOT NULL,RECIVER TEXT NOT NULL,READED CHAR(1) NOT NULL);
2083
ALTER TABLE WEB_MSG_CNT ADD PRIMARY KEY (SENDER,RECIVER,SEND_TIME);
2084
COMMENT ON TABLE WEB_MSG_IDX is '消息会话表';
2085
COMMENT ON COLUMN WEB_MSG_IDX.OWNER IS '会话所有人ID(两个人中ID小的为会话所有人)';
2086
COMMENT ON COLUMN WEB_MSG_IDX.ACTOR IS '会话参与人ID(两个人中ID大的为会话参与人)';
2087
COMMENT ON COLUMN WEB_MSG_IDX.LAST_TIME IS '会话最后活动时间';
2088
COMMENT ON COLUMN WEB_MSG_IDX.NUM_OF_OWNER IS '会话所有人未读消息数';
2089
COMMENT ON COLUMN WEB_MSG_IDX.NUM_OF_ACTOR IS '会话参与人未读消息数';
2090
COMMENT ON COLUMN WEB_MSG_IDX.LAST_CNT IS '会话最后内容';
2091
COMMENT ON COLUMN WEB_MSG_IDX.SHOW_OF_OWNER IS '是否存在与所有的人会话列表中';
2092
COMMENT ON COLUMN WEB_MSG_IDX.SHOW_OF_ACTOR IS '是否存在与参与的人会话列表中';
2093
COMMENT ON TABLE WEB_MSG_CNT IS '消息内容表';
2094
COMMENT ON COLUMN WEB_MSG_CNT.SENDER is '消息发送人ID';
2095
COMMENT ON COLUMN WEB_MSG_CNT.RECIVER is '消息接收人ID';
2096
COMMENT ON COLUMN WEB_MSG_CNT.CNT is '消息内容';
2097
COMMENT ON COLUMN WEB_MSG_CNT.SEND_TIME is '消息发送时间';
2098
COMMENT ON COLUMN WEB_MSG_CNT.READED is '消息是否已读';
2099

2070 2100

2071 2101

2072 2102


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

@ -79,13 +79,15 @@ com_ekexiu_portal_service_SysService.orgMailRetrievePasswordContentTemplate=<htm
79 79
com_ekexiu_portal_service_SysService.orgMailRetrievePasswordReplaceKey=stateCode
80 80
com_ekexiu_portal_service_SysService.orgMailRetrievePasswordSubject=\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\u5BC6\u7801\u91CD\u7F6E
81 81
#特邀专家发送邀请邮件
82
com_ekexiu_portal_service_SysService.inviteMailContentTempalte=<html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r\n<html lang\="en">\r\n<head>\r\n<meta name\="viewport" content\="width\=device-width, initial-scale\=1" />\r\n<meta http-equiv\="Content-Type" content\="text/html; charset\=utf-8">\r\n<title>[ \u79D1\u8896\u7F51 ]\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD</title>\r\n<style>\r\nbody {width\:100%\!important;font-family\: Microsoft Yahei, Arial, sans-serif; -webkit-text-size-adjust\:100%; -ms-text-size-adjust\:100%;margin\:0;padding\:0;font-size\:15px;color\:\#444;}\r\nspan,p,a{font-family\: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size\:15px;line-height\:24px;color\:\#444;}\r\n.bodyBlock{-webkit-font-smoothing\:antialiased;width\:100% \!important;background-color\:\#fff;background-image\:none;background-repeat\:repeat;background-position\:top left;background-attachment\:scroll;-webkit-text-size-adjust\:none;}\r\n.textIndent{text-indent\:2em;}\r\n.infoBox{text-align\:left; margin-left\:23%;}\r\n.importInfo{ font-size\:20px;color\:\#ff9900;}\r\n.importInfo *{font-size\:20px;color\:\#ff9900;text-decoration\: none;}\r\n.importInfo2{font-size\:20px;color\:\#018ed9;}\r\n.importInfo2 *{font-size\:20px;color\:\#018ed9;}\r\n.contentBody{position\:relative;background\:rgba(216, 234, 236, 0.6);width\:100%; padding\:14px 6px;margin\:40px 0 0 -6px;}\r\n.contentBody em{position\: absolute; width\: 0px;height\: 0px;bottom\: -5px;}\r\n.contentBody em.rightEm{right\: 0px;border-top\: 0px solid \#acb4b8;border-bottom\: 4px solid transparent; border-left\: 6px solid \#acb4b8;border-right\: 0px solid transparent;}\r\n.contentBody em.leftEm{left\: 0px;border-top\: 0px solid \#acb4b8;border-bottom\: 4px solid transparent;border-right\: 6px solid \#acb4b8;border-left\: 0px solid transparent;}\r\n\r\n.full_width{float\:right;position\: absolute;top\: 30%;right\: 20px;}\r\n.mainContent{padding\:10px 20px;float\:left;max-width\:480px;}\r\n.mainContent2{padding\:10px 26px;}\r\n.buttonGo{color\:\#399A9B;background-color\:\#308F9B;text-align\:center;color\:\#fff; \r\n    padding\: 6px 40px;\r\n    font-size\:15px;line-height\:24px;\r\n    text-decoration\: none;\r\n    text-transform\: uppercase;\r\n    border-radius\:4px;\r\n    -moz-border-radius\:4px;\r\n    -webkit-border-radius\:4px;\r\n    font-family\: Microsoft Yahei, Calibri, 'Segoe UI', Arial, sans-serif;}\r\n.afterEnter{margin\:10px 4px 0 4px;padding\:10px 18px;width\:42%;font-size\: 13px;float\:left;min-height\:130px;}\r\n.afterEnter h4{margin\:6px 0;}\r\n.afterEnter a{font-size\:13px; padding\:0 4px;}\r\n@media only screen and (max-width\: 600px) {\r\n\tdiv[class\='contentBody']{\r\n\t\ttext-align\:center\!important;}\r\n  \r\n\tdiv[class\='content_wrap'] {\r\n\t  width\: 94%\!important;\r\n\t}\r\n\t\r\n\tdiv[class\='full_width'] {\r\n\t  width\: 100%\!important;\r\n\t  float\:none;\r\n\t  position\:inherit;\r\n\t  right\:0;\r\n\t}\r\n\tdiv[class\='mainContent']{\r\n\t\twidth\: 90%\!important;\r\n\t\tfloat\:none;\r\n    margin\:auto;\r\n  }\r\n  div[class\='contentMain']{\r\n    width\:100%\!important;\r\n   text-align\:left\!important; \r\n  }\r\n\t\r\n\tdiv[class\='text-center'] {\r\n\t  text-align\: center;\r\n\t}\r\n\t\r\n\ta[class\='buttonGo'] {\r\n     border-radius\:2px;\r\n    -moz-border-radius\:2px;\r\n    -webkitborder-radius\:2px;\r\n\t  background-color\:\#308F9B;\r\n\t  color\:\#fff\!important;\r\n\t  padding\: 5px 0;\r\n\t  width\:100%;\r\n\t  display\:block;\r\n\t  margin\:0 auto 10px;\r\n\t}\r\n\tdiv[class\='afterEnter']{\r\n\t\tfloat\:none;\r\n\t\twidth\: 90%\!important;\r\n\t\t    min-height\: auto;\r\n\t}\r\n\tp[class\='infoBox']{\r\n\t\ttext-align\:left;\r\n\t\tmargin-left\:10%;}\r\n}\r\n</style>\r\n</head>\r\n\r\n<body class\='bodyBlock'>\r\n    <\!--Content wrapper-->\r\n    <div style\='width\:640px;margin\:auto;background\:\#F7F7F7;' class\='content_wrap'>\r\n\r\n           <\!--Logo-->\r\n          <div style\='background\:\#fff;width\:100%;' class\='text-center'>\r\n            <a href\='\#'>\r\n              <img src\='http\://www.ekexiu.com/images/logo4.png' width\='120' height\='80' alt\='logo' border\='0'  style\='margin\:20px auto' />\r\n            </a>\r\n          </div>\r\n          <\!--Content 2-->\r\n            <div class\='contentBody'>\r\n                  <\!--image-->\r\n                  <div class\='full_width'>\r\n                      <div style\='text-align\:center;padding\:10px;' class\='text-center'> \r\n                         <img src\='http\://www.ekexiu.com/images/icon_2.png' border\='0' alt\='' width\='100' height\='100' />\r\n                      </div>\r\n                  </div>\r\n                  <\!--content-->\r\n                  <div class\='mainContent'>\r\n                        <h3 class\='mainTit'>\u300C\u79D1\u8896\u7F51\u300D\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD</h3>\r\n                        <div class\='contentMain'>\r\n                          <p>\u60A8\u597D\uFF0C</p>\r\n                              <p class\='textIndent'>\u79D1\u8896\u7F51\u662F\u4E00\u4E2A\u4E3A\u79D1\u7814\u5DE5\u4F5C\u8005\u670D\u52A1\u7684\u5E73\u53F0\u3002\u6211\u4EEC\u5C06\u4E3A\u60A8\u514D\u8D39\u63D0\u4F9B\u4E00\u4E2A\u4E13\u5C5E\u4E3B\u9875\uFF0C\u60A8\u53EF\u4EE5\u5BF9\u5916\u5C55\u793A\u60A8\u7684\u79D1\u7814\u7ECF\u5386\u3001\u6210\u679C\u4EE5\u53CA\u8D44\u6E90\uFF0C\u6211\u4EEC\u7684\u5\u8BA9\u4E13\u5BB6\u7684\u79D1\u7814\u4EF7\u503C\u53D8\u73B0\u3002\u5E73\u53F0\u5C06\u9762\u5411\u5168\u56FD\u7684\u4F01\u4E1A\u4E0E\u79D1\u7814\u673A\u6784\u8FDB\u884C\u63A8\u5E7F\uFF0C\u60A8\u5C06\u5F97\u5230\u66F4\u591A\u4E0E\u4F01\u4E1A\u7684\u5408\u4F5C\u3001\u4E0E\u540C\u884C\u4EA4\u6D41\u7684\u673A\u4F1A\u3002</p>\r\n                              <p class\='textIndent'>\u901A\u8FC7\u5BF9\u60A8\u7684\u8BA4\u771F\u4E86\u89E3\uFF0C\u6211\u4EEC\u8BDA\u631A\u7684\u9080\u8BF7\u60A8\u6210\u4E3A\u9996\u6279\u79D1\u7814\u4E13\u5BB6\u7528\u6237\u3002</p>\r\n                              <div class\='textIndent'>\u6211\u4EEC\u4E3A\u60A8\u5EFA\u7ACB\u7684\u8D26\u53F7\u662F\uFF1A \r\n                                  phoneKey\r\n                                  <p class\='infoBox'><span class\='importInfo'><a href\=''>mailKey</a></span></p>\r\n\r\n                              </div>\r\n                              <p class\='textIndent'>\u60A8\u7684\u9080\u8BF7\u7801\u662F\uFF1A <span class\='importInfo importInfo2' >invitCodeKey</span></p>\r\n                        </div>\r\n                   </div> \r\n                   <div style\='clear\:both;padding\:6px 20px;'>\r\n                      <p style\=' margin\:4px 4px 20px 4px; text-align\:center; width\: 100%;'> <a href\='http\://www.ekexiu.com/login-invite-code.html' target\='_blank' class\='buttonGo' style\='text-decoration\: none;' >\u63A5\u53D7\u9080\u8BF7\u5E76\u767B\u5F55</a></p>\r\n                      <div class\='afterEnter' style\='background\: \#FFFDEB;'>\r\n                      \t\t<h4>\u5B8C\u5584\u4E13\u5C5E\u4E3B\u9875</h4>\r\n                      \t\t<span style\='font-size\:12px;color\:\#666;'>\u767B\u5F55\u540E\uFF0C\u5728\u4E2A\u4EBA\u5934\u50CF\u5904\u70B9\u51FB\u3010\u4FEE\u6539\u8D44\u6599\u3011\uFF0C\u586B\u5199\u4E2A\u4EBA\u7B80\u5386\uFF1B</span><br/>\r\n                            <span style\='font-size\:12px;color\:\#666;'>\u5728'\u6211\u7684\u5DE5\u4F5C\u53F0'\u7684\u3010\u7814\u53D1\u8D44\u6E90\u3011\u680F\u76EE\u4E2D\uFF0C\u6DFB\u52A0\u8D44\u6E90\u4FE1\u606F\u3002</span>\r\n                      </div>\r\n                      <div class\='afterEnter' style\='background\:\#FFFFFF;'>\r\n                      \t <h4>\u6CA1\u65F6\u95F4\u767B\u5F55\uFF0C\u8BF7\u5BA2\u670D\u5E2E\u5FD9</h4>\r\n                         <p style\='font-size\:12px;color\:\#666;'>\u4E0B\u8F7D <a href\='http\://www.ekexiu.com/attachment/kexiu_resume.docx'> \u79D1\u8896\u7279\u9080\u4E13\u5BB6\u7B80\u5386 </a> \u548C <a href\='http\://www.ekexiu.com/attachment/kexiu_resources.docx'> \u7814\u53D1\u8D44\u6E90\u4FE1\u606F\u8868 </a> \uFF0C\u586B\u5199\u540E\u56DE\u590D\u81F3\u672C\u90AE\u4EF6\uFF0C\u7531\u5BA2\u670D\u4E13\u5458\u5E2E\u60A8\u5F55\u5165\u4FE1\u606F\u3002</p>\r\n                      </div>\r\n                      <div style\='clear\:both;'></div>\r\n                   </div>\r\n                   <em class\='rightEm'></em>   \r\n                   <em class\='leftEm'></em>    \r\n            </div>\r\n          <\!--end Content 2-->\r\n          <div class\='contentBody' style\='margin-top\:16px;'>\r\n              <div class\='mainContent2'>\r\n                  <h3>\u767B\u5F55\u56FE\u793A</h3>\r\n                  <p style\='font-size\:13px;'>\u70B9\u51FB\u3010\u7279\u9080\u4E13\u5BB6\u767B\u5F55\u3011\u540E\uFF0C\u8F93\u5165\u60A8\u7684\u8D26\u53F7\u4E0E\u9080\u8BF7\u7801\u5373\u53EF\u767B\u5F55\u3002</p>\r\n                  <a style\='display\:block;' href\='http\://www.ekexiu.com/login-invite-code.html' target\='_blank'>\r\n                     <img src\='http\://www.ekexiu.com/images/pointImg.jpg' width\='100%'>\r\n                  </a>\r\n              </div> \r\n              <em class\='rightEm'></em>   \r\n              <em class\='leftEm'></em>\r\n          </div>\r\n\r\n          <div class\='contentBody' style\='margin-top\:16px;'>\r\n               <div class\='mainContent2' style\='text-align\:left;'>\r\n                  <h3>\u300C\u79D1\u8896\u300D\u662F\u4EC0\u4E48\uFF1F</h3>\r\n                  <p class\='textIndent'>\u300C\u79D1\u8896\u300D\u662F\u4E00\u5EA7\u5546\u4E1A\u4E0E\u79D1\u7814\u7684\u6865\u6881\uFF0C\u662F\u4E00\u4E2A\u81F4\u529B\u4E8E\u6574\u5408\u884C\u4E1A\u5185\u4F18\u79C0\u7684\u79D1\u7814\u4E13\u5BB6\u4E0E\u7814\u53D1\u8D44\u6E90\u7684\u5171\u4EAB\u7ECF\u6D4E\u5E73\u53F0\u3002\u901A\u8FC7\u63D0\u4F9B\u4E92\u8054\u7F51\u670D\u52A1\uFF0C\u5E2E\u52A9\u4F01\u4E1A\u5BFB\u627E\u653B\u514B\u7814\u53D1\u96BE\u9898\u7684\u4E13\u5BB6\uFF0C\u4F7F\u4F01\u4E1A\u62E5\u6709\u81EA\u5DF1\u7684\u4E13\u5BB6\u987E\u95EE\u3001\u79D1\u7814\u56E2\u961F\u3001\u865A\u62DF\u7814\u7A76\u9662\uFF0C\u4ECE\u800C\u63D0\u9AD8\u4F01\u4E1A\u7684\u7814\u53D1\u4E0E\u521B\u65B0\u80FD\u529B\uFF1B\u5E2E\u52A9\u4E13\u5BB6\u5B9E\u73B0\u7814\u7A76\u6210\u679C\u7684\u5E94\u7528\uFF0C\u4F7F\u79D1\u7814\u4EF7\u503C\u8F6C\u5316\u4E3A\u7ECF\u6D4E\u4EF7\u503C\uFF1B\u4F7F\u95F2\u7F6E\u7684\u7814\u53D1\u8D44\u6E90\u5F97\u5230\u5145\u5206\u5229\u7528\uFF0C\u51CF\u5C11\u8D44\u6E90\u6D6A\u8D39\uFF0C\u521B\u9020\u66F4\u591A\u4EF7\u503C\u3002</p>    \r\n                </div>\r\n                <em class\='rightEm'></em>   \r\n                <em class\='leftEm'></em>\r\n          </div>\r\n          \r\n          \r\n          <\!--Footer-->\r\n           <div style\='padding\:20px;margin\:10px 0;font-family\: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size\:12px;line-height\:17px;color\:\#555;background\:\#ECF0F5;'>\r\n              <div>&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;\r\n                <a class\='beianbox' style\='color\:\#399A9B;font-size\:12px;' 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></div>\r\n              <div>\u610F\u89C1\u5EFA\u8BAE\uFF1A<a href\='mailto\:service@ekexiu.com' style\='color\:\#399A9B;' rel\='nofollow'>service@ekexiu.com</a>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A 010-62343359\uFF089\:00-17\:00\uFF09</div>\r\n              \r\n           </div>\r\n            <\!--End Footer-->\r\n     </div>         \r\n    <\!--end Content wrapper-->\r\n     \r\n</body>\r\n</html>
82
com_ekexiu_portal_service_SysService.inviteMailContentTempalte=<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r\n<html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r\n<html lang="en">\r\n<head>\r\n<meta name="viewport" content="width=device-width, initial-scale=1" />\r\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r\n<title>[ \u79D1\u8896\u7F51 ]\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD</title>\r\n<style>\r\nbody {width:100%!important;font-family: Microsoft Yahei, Arial, sans-serif; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;margin:0;padding:0;font-size:15px;color:#444;}\r\nspan,p,a{font-family: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size:15px;line-height:24px;color:#444;}\r\n.bodyBlock{-webkit-font-smoothing:antialiased;width:100% !important;background-color:#fff;background-image:none;background-repeat:repeat;background-position:top left;background-attachment:scroll;-webkit-text-size-adjust:none;}\r\n.textIndent{text-indent:2em;}\r\n.infoBox{text-align:left; margin-left:23%;}\r\n.importInfo{ font-size:20px;color:#ff9900;}\r\n.importInfo *{font-size:20px;color:#ff9900;text-decoration: none;}\r\n.importInfo2{font-size:20px;color:#018ed9;}\r\n.importInfo2 *{font-size:20px;color:#018ed9;}\r\n.mainTit{margin-bottom: 0;}\r\n.contentBody{position:relative;background:rgba(216, 234, 236, 0.6);width:100%; padding:14px 6px;margin:40px 0 0 -6px;}\r\n.contentBody em{position: absolute; width: 0px;height: 0px;bottom: -5px;}\r\n.contentBody em.rightEm{right: 0px;border-top: 0px solid #acb4b8;border-bottom: 4px solid transparent; border-left: 6px solid #acb4b8;border-right: 0px solid transparent;}\r\n.contentBody em.leftEm{left: 0px;border-top: 0px solid #acb4b8;border-bottom: 4px solid transparent;border-right: 6px solid #acb4b8;border-left: 0px solid transparent;}\r\n\r\n.full_width{float:right;position: absolute;top: 30%;right: 20px;}\r\n.mainContent{padding:10px 20px;float:left;max-width:480px;}\r\n.mainContent2{padding:10px 26px;}\r\n.basicinfo{padding:10px 0;}\r\n.basicinfo p{margin-top:0;margin-bottom:0;font-size:14.0px;line-height:24px;color:#555555;}\r\n.basicinfo p:first-child{border-top:1.0px solid #eeeded;}\r\n.buttonGo{color:#399A9B;background-color:#308F9B;text-align:center;color:#fff; \r\n    padding: 6px 40px;\r\n    font-size:15px;line-height:24px;\r\n    text-decoration: none;\r\n    text-transform: uppercase;\r\n    border-radius:4px;\r\n    -moz-border-radius:4px;\r\n    -webkit-border-radius:4px;\r\n    font-family: Microsoft Yahei, Arial;}\r\n.afterEnter{margin:10px 4px 0 4px;padding:10px 18px;width:42%;font-size: 13px;float:left;min-height:130px;}\r\n.afterEnter h4{margin:6px 0;}\r\n.afterEnter a{font-size:13px; padding:0 4px;}\r\n.cmp_color{color: #ff9900;}\r\n@media only screen and (max-width: 600px) {\r\n	div[class="contentBody"]{\r\n		text-align:center!important;}\r\n  \r\n	div[class="content_wrap"] {\r\n	  width: 94%!important;\r\n	}\r\n	\r\n	div[class="full_width"] {\r\n	  width: 100%!important;\r\n	  float:none;\r\n	  position:inherit;\r\n	  right:0;\r\n	}\r\n	div[class="mainContent"]{\r\n		width: 90%!important;\r\n		float:none;\r\n    margin:auto;\r\n  }\r\n  div[class="contentMain"]{\r\n    width:100%!important;\r\n   text-align:left!important; \r\n  }\r\n	\r\n	div[class="text-center"] {\r\n	  text-align: center;\r\n	}\r\n	\r\n	a[class="buttonGo"] {\r\n     border-radius:2px;\r\n    -moz-border-radius:2px;\r\n    -webkitborder-radius:2px;\r\n	  background-color:#308F9B;\r\n	  color:#fff!important;\r\n	  padding: 5px 0;\r\n	  width:100%;\r\n	  display:block;\r\n	  margin:0 auto 10px;\r\n	}\r\n	div[class="afterEnter"]{\r\n		float:none;\r\n		width: 100%!important;\r\n		    min-height: auto;\r\n	}\r\n	div[class="lefe_center"]{\r\n		text-align: left;\r\n	}\r\n	p[class="infoBox"]{\r\n		text-align:left;\r\n		margin-left:10%;}\r\n}\r\n</style>\r\n</head>\r\n\r\n<body class="bodyBlock">\r\n    <!--Content wrapper-->\r\n    <div style="width:640px;margin:auto;background:#F7F7F7;" class="content_wrap">\r\n\r\n           <!--Logo-->\r\n          <div style="background:#fff;width:100%;" class="text-center">\r\n            <a href="#">\r\n              <img src="http://www.ekexiu.com/images/logo4.png" width="120" height="80" alt="logo" border="0"  style="margin:20px auto" />\r\n            </a>\r\n          </div>\r\n          <!--Content 2-->\r\n            <div class="contentBody">\r\n                  <!--image-->\r\n                  <div class="full_width">\r\n                      <div style="text-align:center;padding:10px;" class="text-center"> \r\n                         <img src="icon_2.png" border="0" alt="" width="100" height="100" />\r\n                      </div>\r\n                  </div>\r\n                  <!--content-->\r\n                  <h3 class="mainTit" style="text-align: center;">\u300C\u79D1\u8896\u7F51\u300D\u7279\u9080\u4E13\u5BB6\u9080\u8BF7\u51FD</h3>\r\n                  \r\n                  <div class="mainContent">\r\n                        <div class="contentMain">\r\n                          <p>\u5C0A\u656C\u7684 uid_Name \u8001\u5E08\uFF0C\u60A8\u597D\uFF01</p>\r\n                          	  <p class="textIndent">\u300C\u79D1\u8896\u7F51\u300D\u662F\u4E00\u4E2A\u521B\u65B0\u7684\u7814\u53D1\u8D44\u6E90\u5171\u4EAB\u53CA\u79D1\u7814\u6210\u679C\u8F6C\u5316\u5E73\u53F0\u3002</p>\r\n                              <p class="textIndent">\u6211\u4EEC\u81F4\u529B\u4E8E\u5E2E\u52A9\u4E13\u5BB6\u5BFB\u627E\u6A2A\u5411\u8BFE\u9898\uFF0C\u8BA9\u4E13\u5BB6\u7684\u77E5\u8BC6\u3001\u6280\u80FD\u3001\u7ECF\u9A8C\u3001\u6210\u679C\u548C\u8EAB\u8FB9\u7684\u4EEA\u5668\u8BBE\u5907\uFF0C\u66F4\u6709\u6548\u5730\u5E2E\u52A9\u4F01\u4E1A\u8FDB\u884C\u7814\u53D1\uFF0C\u8BA9\u4E13\u5BB6\u7684\u79D1\u7814\u4EF7\u503C\u53D8\u73B0\u3002\u5\u8BA9\u4E13\u5BB6\u7684\u79D1\u7814\u4EF7\u503C\u53D8\u73B0\u3002\u5E73\u53F0\u9762\u5411\u5168\u56FD\u7684\u4F01\u4E1A\u3001\u9AD8\u6821\u3001\u7814\u7A76\u673A\u6784\u8FDB\u884C\u63A8\u5E7F\uFF0C\u52A0\u5165\u540E\u60A8\u5C06\u5F97\u5230\u66F4\u591A\u4E0E\u4F01\u4E1A\u5408\u4F5C\u3001\u4E0E\u540C\u884C\u4EA4\u6D41\u7684\u673A\u4F1A\u3002</p>\r\n                              <p class="textIndent">\u901A\u8FC7\u5BF9\u60A8\u7684\u8BA4\u771F\u4E86\u89E3\uFF0C\u6211\u4EEC\u8BDA\u631A\u7684\u9080\u8BF7\u60A8\u6210\u4E3A\u9996\u6279\u4E13\u5BB6\u7528\u6237\u3002\u6211\u4EEC\u5DF2\u7ECF\u4E3A\u60A8\u5F00\u901A\u4E86\u4E13\u5C5E\u4E3B\u9875<a style="color: #399A9B;text-decoration:underline;cursor:pointer;" href="http://www.ekexiu.com/userInforShow.html?professorId=uid_Key">(\u70B9\u51FB\u8FD9\u91CC\u67E5\u770B)</a>\uFF0C\u60A8\u53EF\u4EE5\u5BF9\u5916\u5C55\u793A\u60A8\u7684\u79D1\u7814\u7ECF\u5386\uFF0C\u53D1\u5E03\u60A8\u7684\u79D1\u7814\u6210\u679C\u3001\u8EAB\u8FB9\u7684\u4EEA\u5668\u8BBE\u5907\u3002</p>\r\n                              <div class="textIndent">\u6211\u4EEC\u4E3A\u60A8\u5EFA\u7ACB\u7684\u8D26\u53F7\u662F\uFF1A \r\n                              	  phoneKey\r\n                                  <p class="infoBox"><span class="importInfo"><a href="">mailKey</a></span></p>\r\n                              </div>\r\n                              <p class="textIndent">\u60A8\u7684\u9080\u8BF7\u7801\u662F\uFF1A <span class="importInfo importInfo2" >invitCodeKey</span></p>\r\n                        </div>\r\n                   </div> \r\n                   <div style="clear:both;padding:6px 20px;" class="lefe_center">\r\n                      <p style=" margin:4px 4px 20px 4px; text-align:center; width: 100%;"> <a href="http://www.ekexiu.com/login-invite-code.html" target="_blank" class="buttonGo" style="text-decoration: none;" >\u63A5\u53D7\u9080\u8BF7\uFF0C\u901A\u8FC7\u9080\u8BF7\u7801\u767B\u5F55\u300C\u79D1\u8896\u7F51\u300D</a></p>\r\n                      <p style="margin-top: 40px;">\r\n	                    <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 />\r\n	                    <a class="cmp_color" href="http://www.ekexiu.com/login-invite-code.html" target="_blank">http://www.ekexiu.com/login-invite-code.html</a>\r\n	                  </p>\r\n	                   <div class="basicinfo">\r\n	                        <p>\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p>\r\n	                        <p>\u5BA2\u670D\u7535\u8BDD\uFF1A010-62343359</p>\r\n	                        <p>\u5BA2\u670D\u90AE\u7BB1\uFF1Aservice@ekexiu.com</p>\r\n	                        <p>\u5B98\u65B9\u7F51\u5740\uFF1A<a class="cmp_color" href="http://www.ekexiu.com/" target="_blank">www.ekexiu.com</a></p>\r\n	                        <p>\u5FAE\u4FE1\u516C\u4F17\u53F7\uFF1A\u79D1\u8896\u7F51\uFF08\u5FAE\u4FE1\u53F7\uFF1Aekexiu-com\uFF09</p>\r\n                        </div>\r\n                   </div>\r\n                  \r\n                   <em class="rightEm"></em>   \r\n                   <em class="leftEm"></em>    \r\n            </div>\r\n          <!--end Content 2-->\r\n        \r\n          <!--Footer-->\r\n           <div style="padding:20px;margin:10px 0;font-family: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size:12px;line-height:17px;color:#555;background:#ECF0F5;">\r\n              <div>&copy; 2016-2017 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;\r\n                <a class="beianbox" style="color:#399A9B;font-size:12px;" 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></div>\r\n           </div>\r\n            <!--End Footer-->\r\n     </div>         \r\n    <!--end Content wrapper-->\r\n     \r\n</body>\r\n</html>
83 83
com_ekexiu_portal_service_SysService.phoneContentTemplate=<p class\='infoBox'><span class\='importInfo'>mobileCode</span><span style\='margin-left\:20px;'> \u6216\u8005</span></p>
84 84
com_ekexiu_portal_service_SysService.inviteMailSubject=[ \u79D1\u8896\u7F51 ]\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD
85 85
com_ekexiu_portal_service_SysService.phoneReplaceKey=mobileCode
86 86
com_ekexiu_portal_service_SysService.inviteReplacePhone=phoneKey
87 87
com_ekexiu_portal_service_SysService.inviteReplaceEmail=mailKey
88 88
com_ekexiu_portal_service_SysService.inviteReplaceCode=invitCodeKey
89
com_ekexiu_portal_service_SysService.invitedUserId=uid_Key
90
com_ekexiu_portal_service_SysService.invitedUserName=uid_Name
89 91
#企业员工邀请邮件
90 92
com_ekexiu_portal_service_SysService.inviteStaffSubject=\u60A8\u7684\u4F01\u4E1A\u9080\u8BF7\u60A8\u52A0\u5165\u300C\u79D1\u8896\u300D
91 93
com_ekexiu_portal_service_SysService.inviteStaffMailTempalte=<html style\="height\:auto;"><head><title>\u4F01\u4E1A\u5458\u5DE5\u9080\u8BF7\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;}.spanCmp{font-size\:16px; font-weight\: bold;}.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\u7684\u4F01\u4E1A <span class\="spanCmp cmp_color">orgKey</span> \u9080\u8BF7\u60A8\u52A0\u5165\u300C\u79D1\u8896\u300D\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u63A5\u53D7\u9080\u8BF7\u3002</p><p><a class\="buttonGo" href\="http\://localhost/cmp-staffReg.html?sc\=stateCode" target\="_blank">\u63A5\u53D7\u9080\u8BF7\uFF0C\u6CE8\u518C\u300C\u79D1\u8896\u300D</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-staffReg.html?sc\=stateCode" target\="_blank">http\://localhost/cmp-staffReg.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>
@ -270,4 +272,5 @@ com_ekexiu_portal_service_GrowthRuleService.signInSixDays::int=10
270 272
com_ekexiu_portal_oauth_OAuthService.handlers-ref=oauthService_handlers
271 273
oauthService_handlers::map=java.util.HashMap
272 274
oauthService_handlers.map-key-1=weixin
273
oauthService_handlers.map-val-1-ref=com_ekexiu_portal_oauth_weixin_WeiXinHandler
275
oauthService_handlers.map-val-1-ref=com_ekexiu_portal_oauth_weixin_WeiXinHandler
276
com_ekexiu_push_service_PushService.enable::boolean=true

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

@ -79,13 +79,15 @@ com_ekexiu_portal_service_SysService.orgMailRetrievePasswordContentTemplate=<htm
79 79
com_ekexiu_portal_service_SysService.orgMailRetrievePasswordReplaceKey=stateCode
80 80
com_ekexiu_portal_service_SysService.orgMailRetrievePasswordSubject=\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\u5BC6\u7801\u91CD\u7F6E
81 81
#特邀专家发送邀请邮件
82
com_ekexiu_portal_service_SysService.inviteMailContentTempalte=<html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r\n<html lang\="en">\r\n<head>\r\n<meta name\="viewport" content\="width\=device-width, initial-scale\=1" />\r\n<meta http-equiv\="Content-Type" content\="text/html; charset\=utf-8">\r\n<title>[ \u79D1\u8896\u7F51 ]\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD</title>\r\n<style>\r\nbody {width\:100%\!important;font-family\: Microsoft Yahei, Arial, sans-serif; -webkit-text-size-adjust\:100%; -ms-text-size-adjust\:100%;margin\:0;padding\:0;font-size\:15px;color\:\#444;}\r\nspan,p,a{font-family\: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size\:15px;line-height\:24px;color\:\#444;}\r\n.bodyBlock{-webkit-font-smoothing\:antialiased;width\:100% \!important;background-color\:\#fff;background-image\:none;background-repeat\:repeat;background-position\:top left;background-attachment\:scroll;-webkit-text-size-adjust\:none;}\r\n.textIndent{text-indent\:2em;}\r\n.infoBox{text-align\:left; margin-left\:23%;}\r\n.importInfo{ font-size\:20px;color\:\#ff9900;}\r\n.importInfo *{font-size\:20px;color\:\#ff9900;text-decoration\: none;}\r\n.importInfo2{font-size\:20px;color\:\#018ed9;}\r\n.importInfo2 *{font-size\:20px;color\:\#018ed9;}\r\n.contentBody{position\:relative;background\:rgba(216, 234, 236, 0.6);width\:100%; padding\:14px 6px;margin\:40px 0 0 -6px;}\r\n.contentBody em{position\: absolute; width\: 0px;height\: 0px;bottom\: -5px;}\r\n.contentBody em.rightEm{right\: 0px;border-top\: 0px solid \#acb4b8;border-bottom\: 4px solid transparent; border-left\: 6px solid \#acb4b8;border-right\: 0px solid transparent;}\r\n.contentBody em.leftEm{left\: 0px;border-top\: 0px solid \#acb4b8;border-bottom\: 4px solid transparent;border-right\: 6px solid \#acb4b8;border-left\: 0px solid transparent;}\r\n\r\n.full_width{float\:right;position\: absolute;top\: 30%;right\: 20px;}\r\n.mainContent{padding\:10px 20px;float\:left;max-width\:480px;}\r\n.mainContent2{padding\:10px 26px;}\r\n.buttonGo{color\:\#399A9B;background-color\:\#308F9B;text-align\:center;color\:\#fff; \r\n    padding\: 6px 40px;\r\n    font-size\:15px;line-height\:24px;\r\n    text-decoration\: none;\r\n    text-transform\: uppercase;\r\n    border-radius\:4px;\r\n    -moz-border-radius\:4px;\r\n    -webkit-border-radius\:4px;\r\n    font-family\: Microsoft Yahei, Calibri, 'Segoe UI', Arial, sans-serif;}\r\n.afterEnter{margin\:10px 4px 0 4px;padding\:10px 18px;width\:42%;font-size\: 13px;float\:left;min-height\:130px;}\r\n.afterEnter h4{margin\:6px 0;}\r\n.afterEnter a{font-size\:13px; padding\:0 4px;}\r\n@media only screen and (max-width\: 600px) {\r\n\tdiv[class\='contentBody']{\r\n\t\ttext-align\:center\!important;}\r\n  \r\n\tdiv[class\='content_wrap'] {\r\n\t  width\: 94%\!important;\r\n\t}\r\n\t\r\n\tdiv[class\='full_width'] {\r\n\t  width\: 100%\!important;\r\n\t  float\:none;\r\n\t  position\:inherit;\r\n\t  right\:0;\r\n\t}\r\n\tdiv[class\='mainContent']{\r\n\t\twidth\: 90%\!important;\r\n\t\tfloat\:none;\r\n    margin\:auto;\r\n  }\r\n  div[class\='contentMain']{\r\n    width\:100%\!important;\r\n   text-align\:left\!important; \r\n  }\r\n\t\r\n\tdiv[class\='text-center'] {\r\n\t  text-align\: center;\r\n\t}\r\n\t\r\n\ta[class\='buttonGo'] {\r\n     border-radius\:2px;\r\n    -moz-border-radius\:2px;\r\n    -webkitborder-radius\:2px;\r\n\t  background-color\:\#308F9B;\r\n\t  color\:\#fff\!important;\r\n\t  padding\: 5px 0;\r\n\t  width\:100%;\r\n\t  display\:block;\r\n\t  margin\:0 auto 10px;\r\n\t}\r\n\tdiv[class\='afterEnter']{\r\n\t\tfloat\:none;\r\n\t\twidth\: 90%\!important;\r\n\t\t    min-height\: auto;\r\n\t}\r\n\tp[class\='infoBox']{\r\n\t\ttext-align\:left;\r\n\t\tmargin-left\:10%;}\r\n}\r\n</style>\r\n</head>\r\n\r\n<body class\='bodyBlock'>\r\n    <\!--Content wrapper-->\r\n    <div style\='width\:640px;margin\:auto;background\:\#F7F7F7;' class\='content_wrap'>\r\n\r\n           <\!--Logo-->\r\n          <div style\='background\:\#fff;width\:100%;' class\='text-center'>\r\n            <a href\='\#'>\r\n              <img src\='http\://www.ekexiu.com/images/logo4.png' width\='120' height\='80' alt\='logo' border\='0'  style\='margin\:20px auto' />\r\n            </a>\r\n          </div>\r\n          <\!--Content 2-->\r\n            <div class\='contentBody'>\r\n                  <\!--image-->\r\n                  <div class\='full_width'>\r\n                      <div style\='text-align\:center;padding\:10px;' class\='text-center'> \r\n                         <img src\='http\://www.ekexiu.com/images/icon_2.png' border\='0' alt\='' width\='100' height\='100' />\r\n                      </div>\r\n                  </div>\r\n                  <\!--content-->\r\n                  <div class\='mainContent'>\r\n                        <h3 class\='mainTit'>\u300C\u79D1\u8896\u7F51\u300D\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD</h3>\r\n                        <div class\='contentMain'>\r\n                          <p>\u60A8\u597D\uFF0C</p>\r\n                              <p class\='textIndent'>\u79D1\u8896\u7F51\u662F\u4E00\u4E2A\u4E3A\u79D1\u7814\u5DE5\u4F5C\u8005\u670D\u52A1\u7684\u5E73\u53F0\u3002\u6211\u4EEC\u5C06\u4E3A\u60A8\u514D\u8D39\u63D0\u4F9B\u4E00\u4E2A\u4E13\u5C5E\u4E3B\u9875\uFF0C\u60A8\u53EF\u4EE5\u5BF9\u5916\u5C55\u793A\u60A8\u7684\u79D1\u7814\u7ECF\u5386\u3001\u6210\u679C\u4EE5\u53CA\u8D44\u6E90\uFF0C\u6211\u4EEC\u7684\u5\u8BA9\u4E13\u5BB6\u7684\u79D1\u7814\u4EF7\u503C\u53D8\u73B0\u3002\u5E73\u53F0\u5C06\u9762\u5411\u5168\u56FD\u7684\u4F01\u4E1A\u4E0E\u79D1\u7814\u673A\u6784\u8FDB\u884C\u63A8\u5E7F\uFF0C\u60A8\u5C06\u5F97\u5230\u66F4\u591A\u4E0E\u4F01\u4E1A\u7684\u5408\u4F5C\u3001\u4E0E\u540C\u884C\u4EA4\u6D41\u7684\u673A\u4F1A\u3002</p>\r\n                              <p class\='textIndent'>\u901A\u8FC7\u5BF9\u60A8\u7684\u8BA4\u771F\u4E86\u89E3\uFF0C\u6211\u4EEC\u8BDA\u631A\u7684\u9080\u8BF7\u60A8\u6210\u4E3A\u9996\u6279\u79D1\u7814\u4E13\u5BB6\u7528\u6237\u3002</p>\r\n                              <div class\='textIndent'>\u6211\u4EEC\u4E3A\u60A8\u5EFA\u7ACB\u7684\u8D26\u53F7\u662F\uFF1A \r\n                                  phoneKey\r\n                                  <p class\='infoBox'><span class\='importInfo'><a href\=''>mailKey</a></span></p>\r\n\r\n                              </div>\r\n                              <p class\='textIndent'>\u60A8\u7684\u9080\u8BF7\u7801\u662F\uFF1A <span class\='importInfo importInfo2' >invitCodeKey</span></p>\r\n                        </div>\r\n                   </div> \r\n                   <div style\='clear\:both;padding\:6px 20px;'>\r\n                      <p style\=' margin\:4px 4px 20px 4px; text-align\:center; width\: 100%;'> <a href\='http\://www.ekexiu.com/login-invite-code.html' target\='_blank' class\='buttonGo' style\='text-decoration\: none;' >\u63A5\u53D7\u9080\u8BF7\u5E76\u767B\u5F55</a></p>\r\n                      <div class\='afterEnter' style\='background\: \#FFFDEB;'>\r\n                      \t\t<h4>\u5B8C\u5584\u4E13\u5C5E\u4E3B\u9875</h4>\r\n                      \t\t<span style\='font-size\:12px;color\:\#666;'>\u767B\u5F55\u540E\uFF0C\u5728\u4E2A\u4EBA\u5934\u50CF\u5904\u70B9\u51FB\u3010\u4FEE\u6539\u8D44\u6599\u3011\uFF0C\u586B\u5199\u4E2A\u4EBA\u7B80\u5386\uFF1B</span><br/>\r\n                            <span style\='font-size\:12px;color\:\#666;'>\u5728'\u6211\u7684\u5DE5\u4F5C\u53F0'\u7684\u3010\u7814\u53D1\u8D44\u6E90\u3011\u680F\u76EE\u4E2D\uFF0C\u6DFB\u52A0\u8D44\u6E90\u4FE1\u606F\u3002</span>\r\n                      </div>\r\n                      <div class\='afterEnter' style\='background\:\#FFFFFF;'>\r\n                      \t <h4>\u6CA1\u65F6\u95F4\u767B\u5F55\uFF0C\u8BF7\u5BA2\u670D\u5E2E\u5FD9</h4>\r\n                         <p style\='font-size\:12px;color\:\#666;'>\u4E0B\u8F7D <a href\='http\://www.ekexiu.com/attachment/kexiu_resume.docx'> \u79D1\u8896\u7279\u9080\u4E13\u5BB6\u7B80\u5386 </a> \u548C <a href\='http\://www.ekexiu.com/attachment/kexiu_resources.docx'> \u7814\u53D1\u8D44\u6E90\u4FE1\u606F\u8868 </a> \uFF0C\u586B\u5199\u540E\u56DE\u590D\u81F3\u672C\u90AE\u4EF6\uFF0C\u7531\u5BA2\u670D\u4E13\u5458\u5E2E\u60A8\u5F55\u5165\u4FE1\u606F\u3002</p>\r\n                      </div>\r\n                      <div style\='clear\:both;'></div>\r\n                   </div>\r\n                   <em class\='rightEm'></em>   \r\n                   <em class\='leftEm'></em>    \r\n            </div>\r\n          <\!--end Content 2-->\r\n          <div class\='contentBody' style\='margin-top\:16px;'>\r\n              <div class\='mainContent2'>\r\n                  <h3>\u767B\u5F55\u56FE\u793A</h3>\r\n                  <p style\='font-size\:13px;'>\u70B9\u51FB\u3010\u7279\u9080\u4E13\u5BB6\u767B\u5F55\u3011\u540E\uFF0C\u8F93\u5165\u60A8\u7684\u8D26\u53F7\u4E0E\u9080\u8BF7\u7801\u5373\u53EF\u767B\u5F55\u3002</p>\r\n                  <a style\='display\:block;' href\='http\://www.ekexiu.com/login-invite-code.html' target\='_blank'>\r\n                     <img src\='http\://www.ekexiu.com/images/pointImg.jpg' width\='100%'>\r\n                  </a>\r\n              </div> \r\n              <em class\='rightEm'></em>   \r\n              <em class\='leftEm'></em>\r\n          </div>\r\n\r\n          <div class\='contentBody' style\='margin-top\:16px;'>\r\n               <div class\='mainContent2' style\='text-align\:left;'>\r\n                  <h3>\u300C\u79D1\u8896\u300D\u662F\u4EC0\u4E48\uFF1F</h3>\r\n                  <p class\='textIndent'>\u300C\u79D1\u8896\u300D\u662F\u4E00\u5EA7\u5546\u4E1A\u4E0E\u79D1\u7814\u7684\u6865\u6881\uFF0C\u662F\u4E00\u4E2A\u81F4\u529B\u4E8E\u6574\u5408\u884C\u4E1A\u5185\u4F18\u79C0\u7684\u79D1\u7814\u4E13\u5BB6\u4E0E\u7814\u53D1\u8D44\u6E90\u7684\u5171\u4EAB\u7ECF\u6D4E\u5E73\u53F0\u3002\u901A\u8FC7\u63D0\u4F9B\u4E92\u8054\u7F51\u670D\u52A1\uFF0C\u5E2E\u52A9\u4F01\u4E1A\u5BFB\u627E\u653B\u514B\u7814\u53D1\u96BE\u9898\u7684\u4E13\u5BB6\uFF0C\u4F7F\u4F01\u4E1A\u62E5\u6709\u81EA\u5DF1\u7684\u4E13\u5BB6\u987E\u95EE\u3001\u79D1\u7814\u56E2\u961F\u3001\u865A\u62DF\u7814\u7A76\u9662\uFF0C\u4ECE\u800C\u63D0\u9AD8\u4F01\u4E1A\u7684\u7814\u53D1\u4E0E\u521B\u65B0\u80FD\u529B\uFF1B\u5E2E\u52A9\u4E13\u5BB6\u5B9E\u73B0\u7814\u7A76\u6210\u679C\u7684\u5E94\u7528\uFF0C\u4F7F\u79D1\u7814\u4EF7\u503C\u8F6C\u5316\u4E3A\u7ECF\u6D4E\u4EF7\u503C\uFF1B\u4F7F\u95F2\u7F6E\u7684\u7814\u53D1\u8D44\u6E90\u5F97\u5230\u5145\u5206\u5229\u7528\uFF0C\u51CF\u5C11\u8D44\u6E90\u6D6A\u8D39\uFF0C\u521B\u9020\u66F4\u591A\u4EF7\u503C\u3002</p>    \r\n                </div>\r\n                <em class\='rightEm'></em>   \r\n                <em class\='leftEm'></em>\r\n          </div>\r\n          \r\n          \r\n          <\!--Footer-->\r\n           <div style\='padding\:20px;margin\:10px 0;font-family\: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size\:12px;line-height\:17px;color\:\#555;background\:\#ECF0F5;'>\r\n              <div>&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;\r\n                <a class\='beianbox' style\='color\:\#399A9B;font-size\:12px;' 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></div>\r\n              <div>\u610F\u89C1\u5EFA\u8BAE\uFF1A<a href\='mailto\:service@ekexiu.com' style\='color\:\#399A9B;' rel\='nofollow'>service@ekexiu.com</a>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A 010-62343359\uFF089\:00-17\:00\uFF09</div>\r\n              \r\n           </div>\r\n            <\!--End Footer-->\r\n     </div>         \r\n    <\!--end Content wrapper-->\r\n     \r\n</body>\r\n</html>
82
com_ekexiu_portal_service_SysService.inviteMailContentTempalte=<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r\n<html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r\n<html lang="en">\r\n<head>\r\n<meta name="viewport" content="width=device-width, initial-scale=1" />\r\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r\n<title>[ \u79D1\u8896\u7F51 ]\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD</title>\r\n<style>\r\nbody {width:100%!important;font-family: Microsoft Yahei, Arial, sans-serif; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;margin:0;padding:0;font-size:15px;color:#444;}\r\nspan,p,a{font-family: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size:15px;line-height:24px;color:#444;}\r\n.bodyBlock{-webkit-font-smoothing:antialiased;width:100% !important;background-color:#fff;background-image:none;background-repeat:repeat;background-position:top left;background-attachment:scroll;-webkit-text-size-adjust:none;}\r\n.textIndent{text-indent:2em;}\r\n.infoBox{text-align:left; margin-left:23%;}\r\n.importInfo{ font-size:20px;color:#ff9900;}\r\n.importInfo *{font-size:20px;color:#ff9900;text-decoration: none;}\r\n.importInfo2{font-size:20px;color:#018ed9;}\r\n.importInfo2 *{font-size:20px;color:#018ed9;}\r\n.mainTit{margin-bottom: 0;}\r\n.contentBody{position:relative;background:rgba(216, 234, 236, 0.6);width:100%; padding:14px 6px;margin:40px 0 0 -6px;}\r\n.contentBody em{position: absolute; width: 0px;height: 0px;bottom: -5px;}\r\n.contentBody em.rightEm{right: 0px;border-top: 0px solid #acb4b8;border-bottom: 4px solid transparent; border-left: 6px solid #acb4b8;border-right: 0px solid transparent;}\r\n.contentBody em.leftEm{left: 0px;border-top: 0px solid #acb4b8;border-bottom: 4px solid transparent;border-right: 6px solid #acb4b8;border-left: 0px solid transparent;}\r\n\r\n.full_width{float:right;position: absolute;top: 30%;right: 20px;}\r\n.mainContent{padding:10px 20px;float:left;max-width:480px;}\r\n.mainContent2{padding:10px 26px;}\r\n.basicinfo{padding:10px 0;}\r\n.basicinfo p{margin-top:0;margin-bottom:0;font-size:14.0px;line-height:24px;color:#555555;}\r\n.basicinfo p:first-child{border-top:1.0px solid #eeeded;}\r\n.buttonGo{color:#399A9B;background-color:#308F9B;text-align:center;color:#fff; \r\n    padding: 6px 40px;\r\n    font-size:15px;line-height:24px;\r\n    text-decoration: none;\r\n    text-transform: uppercase;\r\n    border-radius:4px;\r\n    -moz-border-radius:4px;\r\n    -webkit-border-radius:4px;\r\n    font-family: Microsoft Yahei, Arial;}\r\n.afterEnter{margin:10px 4px 0 4px;padding:10px 18px;width:42%;font-size: 13px;float:left;min-height:130px;}\r\n.afterEnter h4{margin:6px 0;}\r\n.afterEnter a{font-size:13px; padding:0 4px;}\r\n.cmp_color{color: #ff9900;}\r\n@media only screen and (max-width: 600px) {\r\n	div[class="contentBody"]{\r\n		text-align:center!important;}\r\n  \r\n	div[class="content_wrap"] {\r\n	  width: 94%!important;\r\n	}\r\n	\r\n	div[class="full_width"] {\r\n	  width: 100%!important;\r\n	  float:none;\r\n	  position:inherit;\r\n	  right:0;\r\n	}\r\n	div[class="mainContent"]{\r\n		width: 90%!important;\r\n		float:none;\r\n    margin:auto;\r\n  }\r\n  div[class="contentMain"]{\r\n    width:100%!important;\r\n   text-align:left!important; \r\n  }\r\n	\r\n	div[class="text-center"] {\r\n	  text-align: center;\r\n	}\r\n	\r\n	a[class="buttonGo"] {\r\n     border-radius:2px;\r\n    -moz-border-radius:2px;\r\n    -webkitborder-radius:2px;\r\n	  background-color:#308F9B;\r\n	  color:#fff!important;\r\n	  padding: 5px 0;\r\n	  width:100%;\r\n	  display:block;\r\n	  margin:0 auto 10px;\r\n	}\r\n	div[class="afterEnter"]{\r\n		float:none;\r\n		width: 100%!important;\r\n		    min-height: auto;\r\n	}\r\n	div[class="lefe_center"]{\r\n		text-align: left;\r\n	}\r\n	p[class="infoBox"]{\r\n		text-align:left;\r\n		margin-left:10%;}\r\n}\r\n</style>\r\n</head>\r\n\r\n<body class="bodyBlock">\r\n    <!--Content wrapper-->\r\n    <div style="width:640px;margin:auto;background:#F7F7F7;" class="content_wrap">\r\n\r\n           <!--Logo-->\r\n          <div style="background:#fff;width:100%;" class="text-center">\r\n            <a href="#">\r\n              <img src="http://www.ekexiu.com/images/logo4.png" width="120" height="80" alt="logo" border="0"  style="margin:20px auto" />\r\n            </a>\r\n          </div>\r\n          <!--Content 2-->\r\n            <div class="contentBody">\r\n                  <!--image-->\r\n                  <div class="full_width">\r\n                      <div style="text-align:center;padding:10px;" class="text-center"> \r\n                         <img src="icon_2.png" border="0" alt="" width="100" height="100" />\r\n                      </div>\r\n                  </div>\r\n                  <!--content-->\r\n                  <h3 class="mainTit" style="text-align: center;">\u300C\u79D1\u8896\u7F51\u300D\u7279\u9080\u4E13\u5BB6\u9080\u8BF7\u51FD</h3>\r\n                  \r\n                  <div class="mainContent">\r\n                        <div class="contentMain">\r\n                          <p>\u5C0A\u656C\u7684 uid_Name \u8001\u5E08\uFF0C\u60A8\u597D\uFF01</p>\r\n                          	  <p class="textIndent">\u300C\u79D1\u8896\u7F51\u300D\u662F\u4E00\u4E2A\u521B\u65B0\u7684\u7814\u53D1\u8D44\u6E90\u5171\u4EAB\u53CA\u79D1\u7814\u6210\u679C\u8F6C\u5316\u5E73\u53F0\u3002</p>\r\n                              <p class="textIndent">\u6211\u4EEC\u81F4\u529B\u4E8E\u5E2E\u52A9\u4E13\u5BB6\u5BFB\u627E\u6A2A\u5411\u8BFE\u9898\uFF0C\u8BA9\u4E13\u5BB6\u7684\u77E5\u8BC6\u3001\u6280\u80FD\u3001\u7ECF\u9A8C\u3001\u6210\u679C\u548C\u8EAB\u8FB9\u7684\u4EEA\u5668\u8BBE\u5907\uFF0C\u66F4\u6709\u6548\u5730\u5E2E\u52A9\u4F01\u4E1A\u8FDB\u884C\u7814\u53D1\uFF0C\u8BA9\u4E13\u5BB6\u7684\u79D1\u7814\u4EF7\u503C\u53D8\u73B0\u3002\u5\u8BA9\u4E13\u5BB6\u7684\u79D1\u7814\u4EF7\u503C\u53D8\u73B0\u3002\u5E73\u53F0\u9762\u5411\u5168\u56FD\u7684\u4F01\u4E1A\u3001\u9AD8\u6821\u3001\u7814\u7A76\u673A\u6784\u8FDB\u884C\u63A8\u5E7F\uFF0C\u52A0\u5165\u540E\u60A8\u5C06\u5F97\u5230\u66F4\u591A\u4E0E\u4F01\u4E1A\u5408\u4F5C\u3001\u4E0E\u540C\u884C\u4EA4\u6D41\u7684\u673A\u4F1A\u3002</p>\r\n                              <p class="textIndent">\u901A\u8FC7\u5BF9\u60A8\u7684\u8BA4\u771F\u4E86\u89E3\uFF0C\u6211\u4EEC\u8BDA\u631A\u7684\u9080\u8BF7\u60A8\u6210\u4E3A\u9996\u6279\u4E13\u5BB6\u7528\u6237\u3002\u6211\u4EEC\u5DF2\u7ECF\u4E3A\u60A8\u5F00\u901A\u4E86\u4E13\u5C5E\u4E3B\u9875<a style="color: #399A9B;text-decoration:underline;cursor:pointer;" href="http://www.ekexiu.com/userInforShow.html?professorId=uid_Key">(\u70B9\u51FB\u8FD9\u91CC\u67E5\u770B)</a>\uFF0C\u60A8\u53EF\u4EE5\u5BF9\u5916\u5C55\u793A\u60A8\u7684\u79D1\u7814\u7ECF\u5386\uFF0C\u53D1\u5E03\u60A8\u7684\u79D1\u7814\u6210\u679C\u3001\u8EAB\u8FB9\u7684\u4EEA\u5668\u8BBE\u5907\u3002</p>\r\n                              <div class="textIndent">\u6211\u4EEC\u4E3A\u60A8\u5EFA\u7ACB\u7684\u8D26\u53F7\u662F\uFF1A \r\n                              	  phoneKey\r\n                                  <p class="infoBox"><span class="importInfo"><a href="">mailKey</a></span></p>\r\n                              </div>\r\n                              <p class="textIndent">\u60A8\u7684\u9080\u8BF7\u7801\u662F\uFF1A <span class="importInfo importInfo2" >invitCodeKey</span></p>\r\n                        </div>\r\n                   </div> \r\n                   <div style="clear:both;padding:6px 20px;" class="lefe_center">\r\n                      <p style=" margin:4px 4px 20px 4px; text-align:center; width: 100%;"> <a href="http://www.ekexiu.com/login-invite-code.html" target="_blank" class="buttonGo" style="text-decoration: none;" >\u63A5\u53D7\u9080\u8BF7\uFF0C\u901A\u8FC7\u9080\u8BF7\u7801\u767B\u5F55\u300C\u79D1\u8896\u7F51\u300D</a></p>\r\n                      <p style="margin-top: 40px;">\r\n	                    <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 />\r\n	                    <a class="cmp_color" href="http://www.ekexiu.com/login-invite-code.html" target="_blank">http://www.ekexiu.com/login-invite-code.html</a>\r\n	                  </p>\r\n	                   <div class="basicinfo">\r\n	                        <p>\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p>\r\n	                        <p>\u5BA2\u670D\u7535\u8BDD\uFF1A010-62343359</p>\r\n	                        <p>\u5BA2\u670D\u90AE\u7BB1\uFF1Aservice@ekexiu.com</p>\r\n	                        <p>\u5B98\u65B9\u7F51\u5740\uFF1A<a class="cmp_color" href="http://www.ekexiu.com/" target="_blank">www.ekexiu.com</a></p>\r\n	                        <p>\u5FAE\u4FE1\u516C\u4F17\u53F7\uFF1A\u79D1\u8896\u7F51\uFF08\u5FAE\u4FE1\u53F7\uFF1Aekexiu-com\uFF09</p>\r\n                        </div>\r\n                   </div>\r\n                  \r\n                   <em class="rightEm"></em>   \r\n                   <em class="leftEm"></em>    \r\n            </div>\r\n          <!--end Content 2-->\r\n        \r\n          <!--Footer-->\r\n           <div style="padding:20px;margin:10px 0;font-family: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size:12px;line-height:17px;color:#555;background:#ECF0F5;">\r\n              <div>&copy; 2016-2017 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;\r\n                <a class="beianbox" style="color:#399A9B;font-size:12px;" 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></div>\r\n           </div>\r\n            <!--End Footer-->\r\n     </div>         \r\n    <!--end Content wrapper-->\r\n     \r\n</body>\r\n</html>
83 83
com_ekexiu_portal_service_SysService.phoneContentTemplate=<p class\='infoBox'><span class\='importInfo'>mobileCode</span><span style\='margin-left\:20px;'> \u6216\u8005</span></p>
84 84
com_ekexiu_portal_service_SysService.inviteMailSubject=[ \u79D1\u8896\u7F51 ]\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD
85 85
com_ekexiu_portal_service_SysService.phoneReplaceKey=mobileCode
86 86
com_ekexiu_portal_service_SysService.inviteReplacePhone=phoneKey
87 87
com_ekexiu_portal_service_SysService.inviteReplaceEmail=mailKey
88 88
com_ekexiu_portal_service_SysService.inviteReplaceCode=invitCodeKey
89
com_ekexiu_portal_service_SysService.invitedUserId=uid_Key
90
com_ekexiu_portal_service_SysService.invitedUserName=uid_Name
89 91
#企业员工邀请邮件
90 92
com_ekexiu_portal_service_SysService.inviteStaffSubject=\u60A8\u7684\u4F01\u4E1A\u9080\u8BF7\u60A8\u52A0\u5165\u300C\u79D1\u8896\u300D
91 93
com_ekexiu_portal_service_SysService.inviteStaffMailTempalte=<html style\="height\:auto;"><head><title>\u4F01\u4E1A\u5458\u5DE5\u9080\u8BF7\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;}.spanCmp{font-size\:16px; font-weight\: bold;}.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\u7684\u4F01\u4E1A <span class\="spanCmp cmp_color">orgKey</span> \u9080\u8BF7\u60A8\u52A0\u5165\u300C\u79D1\u8896\u300D\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u63A5\u53D7\u9080\u8BF7\u3002</p><p><a class\="buttonGo" href\="http\://192.168.3.233/cmp-staffReg.html?sc\=stateCode" target\="_blank">\u63A5\u53D7\u9080\u8BF7\uFF0C\u6CE8\u518C\u300C\u79D1\u8896\u300D</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-staffReg.html?sc\=stateCode" target\="_blank">http\://192.168.3.233/cmp-staffReg.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>
@ -270,4 +272,5 @@ com_ekexiu_portal_service_GrowthRuleService.signInSixDays::int=10
270 272
com_ekexiu_portal_oauth_OAuthService.handlers-ref=oauthService_handlers
271 273
oauthService_handlers::map=java.util.HashMap
272 274
oauthService_handlers.map-key-1=weixin
273
oauthService_handlers.map-val-1-ref=com_ekexiu_portal_oauth_weixin_WeiXinHandler
275
oauthService_handlers.map-val-1-ref=com_ekexiu_portal_oauth_weixin_WeiXinHandler
276
com_ekexiu_push_service_PushService.enable::boolean=false

+ 4 - 2
src/main/resources/project.properties

@ -79,13 +79,15 @@ com_ekexiu_portal_service_SysService.orgMailRetrievePasswordContentTemplate=<htm
79 79
com_ekexiu_portal_service_SysService.orgMailRetrievePasswordReplaceKey=stateCode
80 80
com_ekexiu_portal_service_SysService.orgMailRetrievePasswordSubject=\u300C\u79D1\u8896\u300D\u4F01\u4E1A\u8D26\u6237\u5BC6\u7801\u91CD\u7F6E
81 81
#特邀专家发送邀请邮件
82
com_ekexiu_portal_service_SysService.inviteMailContentTempalte=<html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r\n<html lang\="en">\r\n<head>\r\n<meta name\="viewport" content\="width\=device-width, initial-scale\=1" />\r\n<meta http-equiv\="Content-Type" content\="text/html; charset\=utf-8">\r\n<title>[ \u79D1\u8896\u7F51 ]\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD</title>\r\n<style>\r\nbody {width\:100%\!important;font-family\: Microsoft Yahei, Arial, sans-serif; -webkit-text-size-adjust\:100%; -ms-text-size-adjust\:100%;margin\:0;padding\:0;font-size\:15px;color\:\#444;}\r\nspan,p,a{font-family\: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size\:15px;line-height\:24px;color\:\#444;}\r\n.bodyBlock{-webkit-font-smoothing\:antialiased;width\:100% \!important;background-color\:\#fff;background-image\:none;background-repeat\:repeat;background-position\:top left;background-attachment\:scroll;-webkit-text-size-adjust\:none;}\r\n.textIndent{text-indent\:2em;}\r\n.infoBox{text-align\:left; margin-left\:23%;}\r\n.importInfo{ font-size\:20px;color\:\#ff9900;}\r\n.importInfo *{font-size\:20px;color\:\#ff9900;text-decoration\: none;}\r\n.importInfo2{font-size\:20px;color\:\#018ed9;}\r\n.importInfo2 *{font-size\:20px;color\:\#018ed9;}\r\n.contentBody{position\:relative;background\:rgba(216, 234, 236, 0.6);width\:100%; padding\:14px 6px;margin\:40px 0 0 -6px;}\r\n.contentBody em{position\: absolute; width\: 0px;height\: 0px;bottom\: -5px;}\r\n.contentBody em.rightEm{right\: 0px;border-top\: 0px solid \#acb4b8;border-bottom\: 4px solid transparent; border-left\: 6px solid \#acb4b8;border-right\: 0px solid transparent;}\r\n.contentBody em.leftEm{left\: 0px;border-top\: 0px solid \#acb4b8;border-bottom\: 4px solid transparent;border-right\: 6px solid \#acb4b8;border-left\: 0px solid transparent;}\r\n\r\n.full_width{float\:right;position\: absolute;top\: 30%;right\: 20px;}\r\n.mainContent{padding\:10px 20px;float\:left;max-width\:480px;}\r\n.mainContent2{padding\:10px 26px;}\r\n.buttonGo{color\:\#399A9B;background-color\:\#308F9B;text-align\:center;color\:\#fff; \r\n    padding\: 6px 40px;\r\n    font-size\:15px;line-height\:24px;\r\n    text-decoration\: none;\r\n    text-transform\: uppercase;\r\n    border-radius\:4px;\r\n    -moz-border-radius\:4px;\r\n    -webkit-border-radius\:4px;\r\n    font-family\: Microsoft Yahei, Calibri, 'Segoe UI', Arial, sans-serif;}\r\n.afterEnter{margin\:10px 4px 0 4px;padding\:10px 18px;width\:42%;font-size\: 13px;float\:left;min-height\:130px;}\r\n.afterEnter h4{margin\:6px 0;}\r\n.afterEnter a{font-size\:13px; padding\:0 4px;}\r\n@media only screen and (max-width\: 600px) {\r\n\tdiv[class\='contentBody']{\r\n\t\ttext-align\:center\!important;}\r\n  \r\n\tdiv[class\='content_wrap'] {\r\n\t  width\: 94%\!important;\r\n\t}\r\n\t\r\n\tdiv[class\='full_width'] {\r\n\t  width\: 100%\!important;\r\n\t  float\:none;\r\n\t  position\:inherit;\r\n\t  right\:0;\r\n\t}\r\n\tdiv[class\='mainContent']{\r\n\t\twidth\: 90%\!important;\r\n\t\tfloat\:none;\r\n    margin\:auto;\r\n  }\r\n  div[class\='contentMain']{\r\n    width\:100%\!important;\r\n   text-align\:left\!important; \r\n  }\r\n\t\r\n\tdiv[class\='text-center'] {\r\n\t  text-align\: center;\r\n\t}\r\n\t\r\n\ta[class\='buttonGo'] {\r\n     border-radius\:2px;\r\n    -moz-border-radius\:2px;\r\n    -webkitborder-radius\:2px;\r\n\t  background-color\:\#308F9B;\r\n\t  color\:\#fff\!important;\r\n\t  padding\: 5px 0;\r\n\t  width\:100%;\r\n\t  display\:block;\r\n\t  margin\:0 auto 10px;\r\n\t}\r\n\tdiv[class\='afterEnter']{\r\n\t\tfloat\:none;\r\n\t\twidth\: 90%\!important;\r\n\t\t    min-height\: auto;\r\n\t}\r\n\tp[class\='infoBox']{\r\n\t\ttext-align\:left;\r\n\t\tmargin-left\:10%;}\r\n}\r\n</style>\r\n</head>\r\n\r\n<body class\='bodyBlock'>\r\n    <\!--Content wrapper-->\r\n    <div style\='width\:640px;margin\:auto;background\:\#F7F7F7;' class\='content_wrap'>\r\n\r\n           <\!--Logo-->\r\n          <div style\='background\:\#fff;width\:100%;' class\='text-center'>\r\n            <a href\='\#'>\r\n              <img src\='http\://www.ekexiu.com/images/logo4.png' width\='120' height\='80' alt\='logo' border\='0'  style\='margin\:20px auto' />\r\n            </a>\r\n          </div>\r\n          <\!--Content 2-->\r\n            <div class\='contentBody'>\r\n                  <\!--image-->\r\n                  <div class\='full_width'>\r\n                      <div style\='text-align\:center;padding\:10px;' class\='text-center'> \r\n                         <img src\='http\://www.ekexiu.com/images/icon_2.png' border\='0' alt\='' width\='100' height\='100' />\r\n                      </div>\r\n                  </div>\r\n                  <\!--content-->\r\n                  <div class\='mainContent'>\r\n                        <h3 class\='mainTit'>\u300C\u79D1\u8896\u7F51\u300D\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD</h3>\r\n                        <div class\='contentMain'>\r\n                          <p>\u60A8\u597D\uFF0C</p>\r\n                              <p class\='textIndent'>\u79D1\u8896\u7F51\u662F\u4E00\u4E2A\u4E3A\u79D1\u7814\u5DE5\u4F5C\u8005\u670D\u52A1\u7684\u5E73\u53F0\u3002\u6211\u4EEC\u5C06\u4E3A\u60A8\u514D\u8D39\u63D0\u4F9B\u4E00\u4E2A\u4E13\u5C5E\u4E3B\u9875\uFF0C\u60A8\u53EF\u4EE5\u5BF9\u5916\u5C55\u793A\u60A8\u7684\u79D1\u7814\u7ECF\u5386\u3001\u6210\u679C\u4EE5\u53CA\u8D44\u6E90\uFF0C\u6211\u4EEC\u7684\u5\u8BA9\u4E13\u5BB6\u7684\u79D1\u7814\u4EF7\u503C\u53D8\u73B0\u3002\u5E73\u53F0\u5C06\u9762\u5411\u5168\u56FD\u7684\u4F01\u4E1A\u4E0E\u79D1\u7814\u673A\u6784\u8FDB\u884C\u63A8\u5E7F\uFF0C\u60A8\u5C06\u5F97\u5230\u66F4\u591A\u4E0E\u4F01\u4E1A\u7684\u5408\u4F5C\u3001\u4E0E\u540C\u884C\u4EA4\u6D41\u7684\u673A\u4F1A\u3002</p>\r\n                              <p class\='textIndent'>\u901A\u8FC7\u5BF9\u60A8\u7684\u8BA4\u771F\u4E86\u89E3\uFF0C\u6211\u4EEC\u8BDA\u631A\u7684\u9080\u8BF7\u60A8\u6210\u4E3A\u9996\u6279\u79D1\u7814\u4E13\u5BB6\u7528\u6237\u3002</p>\r\n                              <div class\='textIndent'>\u6211\u4EEC\u4E3A\u60A8\u5EFA\u7ACB\u7684\u8D26\u53F7\u662F\uFF1A \r\n                                  phoneKey\r\n                                  <p class\='infoBox'><span class\='importInfo'><a href\=''>mailKey</a></span></p>\r\n\r\n                              </div>\r\n                              <p class\='textIndent'>\u60A8\u7684\u9080\u8BF7\u7801\u662F\uFF1A <span class\='importInfo importInfo2' >invitCodeKey</span></p>\r\n                        </div>\r\n                   </div> \r\n                   <div style\='clear\:both;padding\:6px 20px;'>\r\n                      <p style\=' margin\:4px 4px 20px 4px; text-align\:center; width\: 100%;'> <a href\='http\://www.ekexiu.com/login-invite-code.html' target\='_blank' class\='buttonGo' style\='text-decoration\: none;' >\u63A5\u53D7\u9080\u8BF7\u5E76\u767B\u5F55</a></p>\r\n                      <div class\='afterEnter' style\='background\: \#FFFDEB;'>\r\n                      \t\t<h4>\u5B8C\u5584\u4E13\u5C5E\u4E3B\u9875</h4>\r\n                      \t\t<span style\='font-size\:12px;color\:\#666;'>\u767B\u5F55\u540E\uFF0C\u5728\u4E2A\u4EBA\u5934\u50CF\u5904\u70B9\u51FB\u3010\u4FEE\u6539\u8D44\u6599\u3011\uFF0C\u586B\u5199\u4E2A\u4EBA\u7B80\u5386\uFF1B</span><br/>\r\n                            <span style\='font-size\:12px;color\:\#666;'>\u5728'\u6211\u7684\u5DE5\u4F5C\u53F0'\u7684\u3010\u7814\u53D1\u8D44\u6E90\u3011\u680F\u76EE\u4E2D\uFF0C\u6DFB\u52A0\u8D44\u6E90\u4FE1\u606F\u3002</span>\r\n                      </div>\r\n                      <div class\='afterEnter' style\='background\:\#FFFFFF;'>\r\n                      \t <h4>\u6CA1\u65F6\u95F4\u767B\u5F55\uFF0C\u8BF7\u5BA2\u670D\u5E2E\u5FD9</h4>\r\n                         <p style\='font-size\:12px;color\:\#666;'>\u4E0B\u8F7D <a href\='http\://www.ekexiu.com/attachment/kexiu_resume.docx'> \u79D1\u8896\u7279\u9080\u4E13\u5BB6\u7B80\u5386 </a> \u548C <a href\='http\://www.ekexiu.com/attachment/kexiu_resources.docx'> \u7814\u53D1\u8D44\u6E90\u4FE1\u606F\u8868 </a> \uFF0C\u586B\u5199\u540E\u56DE\u590D\u81F3\u672C\u90AE\u4EF6\uFF0C\u7531\u5BA2\u670D\u4E13\u5458\u5E2E\u60A8\u5F55\u5165\u4FE1\u606F\u3002</p>\r\n                      </div>\r\n                      <div style\='clear\:both;'></div>\r\n                   </div>\r\n                   <em class\='rightEm'></em>   \r\n                   <em class\='leftEm'></em>    \r\n            </div>\r\n          <\!--end Content 2-->\r\n          <div class\='contentBody' style\='margin-top\:16px;'>\r\n              <div class\='mainContent2'>\r\n                  <h3>\u767B\u5F55\u56FE\u793A</h3>\r\n                  <p style\='font-size\:13px;'>\u70B9\u51FB\u3010\u7279\u9080\u4E13\u5BB6\u767B\u5F55\u3011\u540E\uFF0C\u8F93\u5165\u60A8\u7684\u8D26\u53F7\u4E0E\u9080\u8BF7\u7801\u5373\u53EF\u767B\u5F55\u3002</p>\r\n                  <a style\='display\:block;' href\='http\://www.ekexiu.com/login-invite-code.html' target\='_blank'>\r\n                     <img src\='http\://www.ekexiu.com/images/pointImg.jpg' width\='100%'>\r\n                  </a>\r\n              </div> \r\n              <em class\='rightEm'></em>   \r\n              <em class\='leftEm'></em>\r\n          </div>\r\n\r\n          <div class\='contentBody' style\='margin-top\:16px;'>\r\n               <div class\='mainContent2' style\='text-align\:left;'>\r\n                  <h3>\u300C\u79D1\u8896\u300D\u662F\u4EC0\u4E48\uFF1F</h3>\r\n                  <p class\='textIndent'>\u300C\u79D1\u8896\u300D\u662F\u4E00\u5EA7\u5546\u4E1A\u4E0E\u79D1\u7814\u7684\u6865\u6881\uFF0C\u662F\u4E00\u4E2A\u81F4\u529B\u4E8E\u6574\u5408\u884C\u4E1A\u5185\u4F18\u79C0\u7684\u79D1\u7814\u4E13\u5BB6\u4E0E\u7814\u53D1\u8D44\u6E90\u7684\u5171\u4EAB\u7ECF\u6D4E\u5E73\u53F0\u3002\u901A\u8FC7\u63D0\u4F9B\u4E92\u8054\u7F51\u670D\u52A1\uFF0C\u5E2E\u52A9\u4F01\u4E1A\u5BFB\u627E\u653B\u514B\u7814\u53D1\u96BE\u9898\u7684\u4E13\u5BB6\uFF0C\u4F7F\u4F01\u4E1A\u62E5\u6709\u81EA\u5DF1\u7684\u4E13\u5BB6\u987E\u95EE\u3001\u79D1\u7814\u56E2\u961F\u3001\u865A\u62DF\u7814\u7A76\u9662\uFF0C\u4ECE\u800C\u63D0\u9AD8\u4F01\u4E1A\u7684\u7814\u53D1\u4E0E\u521B\u65B0\u80FD\u529B\uFF1B\u5E2E\u52A9\u4E13\u5BB6\u5B9E\u73B0\u7814\u7A76\u6210\u679C\u7684\u5E94\u7528\uFF0C\u4F7F\u79D1\u7814\u4EF7\u503C\u8F6C\u5316\u4E3A\u7ECF\u6D4E\u4EF7\u503C\uFF1B\u4F7F\u95F2\u7F6E\u7684\u7814\u53D1\u8D44\u6E90\u5F97\u5230\u5145\u5206\u5229\u7528\uFF0C\u51CF\u5C11\u8D44\u6E90\u6D6A\u8D39\uFF0C\u521B\u9020\u66F4\u591A\u4EF7\u503C\u3002</p>    \r\n                </div>\r\n                <em class\='rightEm'></em>   \r\n                <em class\='leftEm'></em>\r\n          </div>\r\n          \r\n          \r\n          <\!--Footer-->\r\n           <div style\='padding\:20px;margin\:10px 0;font-family\: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size\:12px;line-height\:17px;color\:\#555;background\:\#ECF0F5;'>\r\n              <div>&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;\r\n                <a class\='beianbox' style\='color\:\#399A9B;font-size\:12px;' 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></div>\r\n              <div>\u610F\u89C1\u5EFA\u8BAE\uFF1A<a href\='mailto\:service@ekexiu.com' style\='color\:\#399A9B;' rel\='nofollow'>service@ekexiu.com</a>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A 010-62343359\uFF089\:00-17\:00\uFF09</div>\r\n              \r\n           </div>\r\n            <\!--End Footer-->\r\n     </div>         \r\n    <\!--end Content wrapper-->\r\n     \r\n</body>\r\n</html>
82
com_ekexiu_portal_service_SysService.inviteMailContentTempalte=<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r\n<html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r\n<html lang="en">\r\n<head>\r\n<meta name="viewport" content="width=device-width, initial-scale=1" />\r\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r\n<title>[ \u79D1\u8896\u7F51 ]\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD</title>\r\n<style>\r\nbody {width:100%!important;font-family: Microsoft Yahei, Arial, sans-serif; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;margin:0;padding:0;font-size:15px;color:#444;}\r\nspan,p,a{font-family: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size:15px;line-height:24px;color:#444;}\r\n.bodyBlock{-webkit-font-smoothing:antialiased;width:100% !important;background-color:#fff;background-image:none;background-repeat:repeat;background-position:top left;background-attachment:scroll;-webkit-text-size-adjust:none;}\r\n.textIndent{text-indent:2em;}\r\n.infoBox{text-align:left; margin-left:23%;}\r\n.importInfo{ font-size:20px;color:#ff9900;}\r\n.importInfo *{font-size:20px;color:#ff9900;text-decoration: none;}\r\n.importInfo2{font-size:20px;color:#018ed9;}\r\n.importInfo2 *{font-size:20px;color:#018ed9;}\r\n.mainTit{margin-bottom: 0;}\r\n.contentBody{position:relative;background:rgba(216, 234, 236, 0.6);width:100%; padding:14px 6px;margin:40px 0 0 -6px;}\r\n.contentBody em{position: absolute; width: 0px;height: 0px;bottom: -5px;}\r\n.contentBody em.rightEm{right: 0px;border-top: 0px solid #acb4b8;border-bottom: 4px solid transparent; border-left: 6px solid #acb4b8;border-right: 0px solid transparent;}\r\n.contentBody em.leftEm{left: 0px;border-top: 0px solid #acb4b8;border-bottom: 4px solid transparent;border-right: 6px solid #acb4b8;border-left: 0px solid transparent;}\r\n\r\n.full_width{float:right;position: absolute;top: 30%;right: 20px;}\r\n.mainContent{padding:10px 20px;float:left;max-width:480px;}\r\n.mainContent2{padding:10px 26px;}\r\n.basicinfo{padding:10px 0;}\r\n.basicinfo p{margin-top:0;margin-bottom:0;font-size:14.0px;line-height:24px;color:#555555;}\r\n.basicinfo p:first-child{border-top:1.0px solid #eeeded;}\r\n.buttonGo{color:#399A9B;background-color:#308F9B;text-align:center;color:#fff; \r\n    padding: 6px 40px;\r\n    font-size:15px;line-height:24px;\r\n    text-decoration: none;\r\n    text-transform: uppercase;\r\n    border-radius:4px;\r\n    -moz-border-radius:4px;\r\n    -webkit-border-radius:4px;\r\n    font-family: Microsoft Yahei, Arial;}\r\n.afterEnter{margin:10px 4px 0 4px;padding:10px 18px;width:42%;font-size: 13px;float:left;min-height:130px;}\r\n.afterEnter h4{margin:6px 0;}\r\n.afterEnter a{font-size:13px; padding:0 4px;}\r\n.cmp_color{color: #ff9900;}\r\n@media only screen and (max-width: 600px) {\r\n	div[class="contentBody"]{\r\n		text-align:center!important;}\r\n  \r\n	div[class="content_wrap"] {\r\n	  width: 94%!important;\r\n	}\r\n	\r\n	div[class="full_width"] {\r\n	  width: 100%!important;\r\n	  float:none;\r\n	  position:inherit;\r\n	  right:0;\r\n	}\r\n	div[class="mainContent"]{\r\n		width: 90%!important;\r\n		float:none;\r\n    margin:auto;\r\n  }\r\n  div[class="contentMain"]{\r\n    width:100%!important;\r\n   text-align:left!important; \r\n  }\r\n	\r\n	div[class="text-center"] {\r\n	  text-align: center;\r\n	}\r\n	\r\n	a[class="buttonGo"] {\r\n     border-radius:2px;\r\n    -moz-border-radius:2px;\r\n    -webkitborder-radius:2px;\r\n	  background-color:#308F9B;\r\n	  color:#fff!important;\r\n	  padding: 5px 0;\r\n	  width:100%;\r\n	  display:block;\r\n	  margin:0 auto 10px;\r\n	}\r\n	div[class="afterEnter"]{\r\n		float:none;\r\n		width: 100%!important;\r\n		    min-height: auto;\r\n	}\r\n	div[class="lefe_center"]{\r\n		text-align: left;\r\n	}\r\n	p[class="infoBox"]{\r\n		text-align:left;\r\n		margin-left:10%;}\r\n}\r\n</style>\r\n</head>\r\n\r\n<body class="bodyBlock">\r\n    <!--Content wrapper-->\r\n    <div style="width:640px;margin:auto;background:#F7F7F7;" class="content_wrap">\r\n\r\n           <!--Logo-->\r\n          <div style="background:#fff;width:100%;" class="text-center">\r\n            <a href="#">\r\n              <img src="http://www.ekexiu.com/images/logo4.png" width="120" height="80" alt="logo" border="0"  style="margin:20px auto" />\r\n            </a>\r\n          </div>\r\n          <!--Content 2-->\r\n            <div class="contentBody">\r\n                  <!--image-->\r\n                  <div class="full_width">\r\n                      <div style="text-align:center;padding:10px;" class="text-center"> \r\n                         <img src="icon_2.png" border="0" alt="" width="100" height="100" />\r\n                      </div>\r\n                  </div>\r\n                  <!--content-->\r\n                  <h3 class="mainTit" style="text-align: center;">\u300C\u79D1\u8896\u7F51\u300D\u7279\u9080\u4E13\u5BB6\u9080\u8BF7\u51FD</h3>\r\n                  \r\n                  <div class="mainContent">\r\n                        <div class="contentMain">\r\n                          <p>\u5C0A\u656C\u7684 uid_Name \u8001\u5E08\uFF0C\u60A8\u597D\uFF01</p>\r\n                          	  <p class="textIndent">\u300C\u79D1\u8896\u7F51\u300D\u662F\u4E00\u4E2A\u521B\u65B0\u7684\u7814\u53D1\u8D44\u6E90\u5171\u4EAB\u53CA\u79D1\u7814\u6210\u679C\u8F6C\u5316\u5E73\u53F0\u3002</p>\r\n                              <p class="textIndent">\u6211\u4EEC\u81F4\u529B\u4E8E\u5E2E\u52A9\u4E13\u5BB6\u5BFB\u627E\u6A2A\u5411\u8BFE\u9898\uFF0C\u8BA9\u4E13\u5BB6\u7684\u77E5\u8BC6\u3001\u6280\u80FD\u3001\u7ECF\u9A8C\u3001\u6210\u679C\u548C\u8EAB\u8FB9\u7684\u4EEA\u5668\u8BBE\u5907\uFF0C\u66F4\u6709\u6548\u5730\u5E2E\u52A9\u4F01\u4E1A\u8FDB\u884C\u7814\u53D1\uFF0C\u8BA9\u4E13\u5BB6\u7684\u79D1\u7814\u4EF7\u503C\u53D8\u73B0\u3002\u5\u8BA9\u4E13\u5BB6\u7684\u79D1\u7814\u4EF7\u503C\u53D8\u73B0\u3002\u5E73\u53F0\u9762\u5411\u5168\u56FD\u7684\u4F01\u4E1A\u3001\u9AD8\u6821\u3001\u7814\u7A76\u673A\u6784\u8FDB\u884C\u63A8\u5E7F\uFF0C\u52A0\u5165\u540E\u60A8\u5C06\u5F97\u5230\u66F4\u591A\u4E0E\u4F01\u4E1A\u5408\u4F5C\u3001\u4E0E\u540C\u884C\u4EA4\u6D41\u7684\u673A\u4F1A\u3002</p>\r\n                              <p class="textIndent">\u901A\u8FC7\u5BF9\u60A8\u7684\u8BA4\u771F\u4E86\u89E3\uFF0C\u6211\u4EEC\u8BDA\u631A\u7684\u9080\u8BF7\u60A8\u6210\u4E3A\u9996\u6279\u4E13\u5BB6\u7528\u6237\u3002\u6211\u4EEC\u5DF2\u7ECF\u4E3A\u60A8\u5F00\u901A\u4E86\u4E13\u5C5E\u4E3B\u9875<a style="color: #399A9B;text-decoration:underline;cursor:pointer;" href="http://www.ekexiu.com/userInforShow.html?professorId=uid_Key">(\u70B9\u51FB\u8FD9\u91CC\u67E5\u770B)</a>\uFF0C\u60A8\u53EF\u4EE5\u5BF9\u5916\u5C55\u793A\u60A8\u7684\u79D1\u7814\u7ECF\u5386\uFF0C\u53D1\u5E03\u60A8\u7684\u79D1\u7814\u6210\u679C\u3001\u8EAB\u8FB9\u7684\u4EEA\u5668\u8BBE\u5907\u3002</p>\r\n                              <div class="textIndent">\u6211\u4EEC\u4E3A\u60A8\u5EFA\u7ACB\u7684\u8D26\u53F7\u662F\uFF1A \r\n                              	  phoneKey\r\n                                  <p class="infoBox"><span class="importInfo"><a href="">mailKey</a></span></p>\r\n                              </div>\r\n                              <p class="textIndent">\u60A8\u7684\u9080\u8BF7\u7801\u662F\uFF1A <span class="importInfo importInfo2" >invitCodeKey</span></p>\r\n                        </div>\r\n                   </div> \r\n                   <div style="clear:both;padding:6px 20px;" class="lefe_center">\r\n                      <p style=" margin:4px 4px 20px 4px; text-align:center; width: 100%;"> <a href="http://www.ekexiu.com/login-invite-code.html" target="_blank" class="buttonGo" style="text-decoration: none;" >\u63A5\u53D7\u9080\u8BF7\uFF0C\u901A\u8FC7\u9080\u8BF7\u7801\u767B\u5F55\u300C\u79D1\u8896\u7F51\u300D</a></p>\r\n                      <p style="margin-top: 40px;">\r\n	                    <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 />\r\n	                    <a class="cmp_color" href="http://www.ekexiu.com/login-invite-code.html" target="_blank">http://www.ekexiu.com/login-invite-code.html</a>\r\n	                  </p>\r\n	                   <div class="basicinfo">\r\n	                        <p>\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p>\r\n	                        <p>\u5BA2\u670D\u7535\u8BDD\uFF1A010-62343359</p>\r\n	                        <p>\u5BA2\u670D\u90AE\u7BB1\uFF1Aservice@ekexiu.com</p>\r\n	                        <p>\u5B98\u65B9\u7F51\u5740\uFF1A<a class="cmp_color" href="http://www.ekexiu.com/" target="_blank">www.ekexiu.com</a></p>\r\n	                        <p>\u5FAE\u4FE1\u516C\u4F17\u53F7\uFF1A\u79D1\u8896\u7F51\uFF08\u5FAE\u4FE1\u53F7\uFF1Aekexiu-com\uFF09</p>\r\n                        </div>\r\n                   </div>\r\n                  \r\n                   <em class="rightEm"></em>   \r\n                   <em class="leftEm"></em>    \r\n            </div>\r\n          <!--end Content 2-->\r\n        \r\n          <!--Footer-->\r\n           <div style="padding:20px;margin:10px 0;font-family: Microsoft Yahei,'Segoe UI', Arial, sans-serif;font-size:12px;line-height:17px;color:#555;background:#ECF0F5;">\r\n              <div>&copy; 2016-2017 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;\r\n                <a class="beianbox" style="color:#399A9B;font-size:12px;" 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></div>\r\n           </div>\r\n            <!--End Footer-->\r\n     </div>         \r\n    <!--end Content wrapper-->\r\n     \r\n</body>\r\n</html>
83 83
com_ekexiu_portal_service_SysService.phoneContentTemplate=<p class\='infoBox'><span class\='importInfo'>mobileCode</span><span style\='margin-left\:20px;'> \u6216\u8005</span></p>
84 84
com_ekexiu_portal_service_SysService.inviteMailSubject=[ \u79D1\u8896\u7F51 ]\u7279\u9080\u79D1\u7814\u4E13\u5BB6\u9080\u8BF7\u51FD
85 85
com_ekexiu_portal_service_SysService.phoneReplaceKey=mobileCode
86 86
com_ekexiu_portal_service_SysService.inviteReplacePhone=phoneKey
87 87
com_ekexiu_portal_service_SysService.inviteReplaceEmail=mailKey
88 88
com_ekexiu_portal_service_SysService.inviteReplaceCode=invitCodeKey
89
com_ekexiu_portal_service_SysService.invitedUserId=uid_Key
90
com_ekexiu_portal_service_SysService.invitedUserName=uid_Name
89 91
#企业员工邀请邮件
90 92
com_ekexiu_portal_service_SysService.inviteStaffSubject=\u60A8\u7684\u4F01\u4E1A\u9080\u8BF7\u60A8\u52A0\u5165\u300C\u79D1\u8896\u300D
91 93
com_ekexiu_portal_service_SysService.inviteStaffMailTempalte=<html style\="height\:auto;"><head><title>\u4F01\u4E1A\u5458\u5DE5\u9080\u8BF7\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;}.spanCmp{font-size\:16px; font-weight\: bold;}.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\u7684\u4F01\u4E1A <span class\="spanCmp cmp_color">orgKey</span> \u9080\u8BF7\u60A8\u52A0\u5165\u300C\u79D1\u8896\u300D\uFF0C\u60A8\u53EF\u4EE5\u70B9\u51FB\u4E0B\u65B9\u6309\u94AE\u63A5\u53D7\u9080\u8BF7\u3002</p><p><a class\="buttonGo" href\="http\://www.ekexiu.com/cmp-staffReg.html?sc\=stateCode" target\="_blank">\u63A5\u53D7\u9080\u8BF7\uFF0C\u6CE8\u518C\u300C\u79D1\u8896\u300D</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-staffReg.html?sc\=stateCode" target\="_blank">http\://www.ekexiu.com/cmp-staffReg.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>
@ -269,4 +271,4 @@ com_ekexiu_portal_oauth_OAuthService.handlers-ref=oauthService_handlers
269 271
oauthService_handlers::map=java.util.HashMap
270 272
oauthService_handlers.map-key-1=weixin
271 273
oauthService_handlers.map-val-1-ref=com_ekexiu_portal_oauth_weixin_WeiXinHandler
272
274
com_ekexiu_push_service_PushService.enable::boolean=false

+ 98 - 95
src/main/webapp/WEB-INF/web.xml

@ -1,97 +1,100 @@
1 1
<?xml version="1.0" encoding="UTF-8"?>
2
<web-app xmlnshttp://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
3
  <servlet>
4
    <servlet-name>ajax</servlet-name>
5
    <servlet-class>org.jfw.web.servlet.core.FilenameConfigServlet</servlet-class>
6
    <init-param>
7
      <param-name>prefixLen</param-name>
8
      <param-value>${ajax.prefixLen}</param-value>
9
    </init-param>
10
    <init-param>
11
      <param-name>viewType</param-name>
12
      <param-value>1</param-value>
13
    </init-param>
14
    <init-param>
15
      <param-name>configFileName</param-name>
16
      <param-value>beanConfig.properties,${main.config}</param-value>
17
    </init-param>
18
    <init-param>
19
      <param-name>afterBeanFactory</param-name>
20
      <param-value>com.ekexiu.portal.job.SchJob,com.ekexiu.portal.job.TaskJob</param-value>
21
    </init-param>
22
    <load-on-startup>1</load-on-startup>
23
  </servlet>
24
  <servlet>
25
    <servlet-name>cachedFileUploadServlet</servlet-name>
26
    <servlet-class>org.jfw.web.servlet.fileupload.cached.CachedUploadServlet</servlet-class>
27
    <load-on-startup>2</load-on-startup>
28
  </servlet>
29
  <servlet>
30
    <servlet-name>resFileUploadServlet</servlet-name>
31
    <servlet-class>org.jfw.web.servlet.fileupload.cached.CachedUploadServlet</servlet-class>
32
    <load-on-startup>3</load-on-startup>
33
  </servlet>
34
  <servlet>
35
    <servlet-name>serviceFileUploadServlet</servlet-name>
36
    <servlet-class>org.jfw.web.servlet.fileupload.cached.CachedUploadServlet</servlet-class>
37
    <load-on-startup>3</load-on-startup>
38
  </servlet>
39
  <servlet>
40
    <servlet-name>FileDownload</servlet-name>
41
    <servlet-class>com.ekexiu.portal.util.FileDownload</servlet-class>
42
    <init-param>
43
      <param-name>accessoryFolder</param-name>
44
      <param-value>${accessoryFolder}</param-value>
45
    </init-param>
46
    <load-on-startup>4</load-on-startup>
47
  </servlet>
48
  <servlet>
49
    <servlet-name>PictureVC</servlet-name>
50
    <servlet-class>com.ekexiu.portal.util.PictureVC</servlet-class>
51
    <load-on-startup>5</load-on-startup>
52
  </servlet>
53
  <servlet>
54
    <servlet-name>CheckPictureVC</servlet-name>
55
    <servlet-class>com.ekexiu.portal.util.CheckPictureVC</servlet-class>
56
    <load-on-startup>6</load-on-startup>
57
  </servlet>
58
    <servlet>
59
    <description></description>
60
    <display-name>ProfessorPdfServlet</display-name>
61
    <servlet-name>ProfessorPdfServlet</servlet-name>
62
    <servlet-class>com.ekexiu.portal.util.ProfessorPdfServlet</servlet-class>
63
    <load-on-startup>7</load-on-startup>
64
  </servlet>
65
  <servlet-mapping>
66
    <servlet-name>ajax</servlet-name>
67
    <url-pattern>/ajax/*</url-pattern>
68
  </servlet-mapping>
69
  <servlet-mapping>
70
    <servlet-name>cachedFileUploadServlet</servlet-name>
71
    <url-pattern>/ajax/cachedFileUpload</url-pattern>
72
  </servlet-mapping>
73
  <servlet-mapping>
74
    <servlet-name>resFileUploadServlet</servlet-name>
75
    <url-pattern>/ajax/resFileUpload</url-pattern>
76
  </servlet-mapping>
77
  <servlet-mapping>
78
    <servlet-name>serviceFileUploadServlet</servlet-name>
79
    <url-pattern>/ajax/serviceFileUpload</url-pattern>
80
  </servlet-mapping>
81
  <servlet-mapping>
82
    <servlet-name>FileDownload</servlet-name>
83
    <url-pattern>/ajax/FileDownload</url-pattern>
84
  </servlet-mapping>
85
  <servlet-mapping>
86
    <servlet-name>PictureVC</servlet-name>
87
    <url-pattern>/ajax/PictureVC</url-pattern>
88
  </servlet-mapping>
89
  <servlet-mapping>
90
    <servlet-name>CheckPictureVC</servlet-name>
91
    <url-pattern>/ajax/CheckPictureVC</url-pattern>
92
  </servlet-mapping>
93
  <servlet-mapping>
94
    <servlet-name>ProfessorPdfServlet</servlet-name>
95
    <url-pattern>/pdf/professor</url-pattern>
96
  </servlet-mapping>
2
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlnshttp://www.w3.org/2001/XMLSchema-instance"
3
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
4
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
5
	version="3.0" metadata-complete="true">
6
	<servlet>
7
		<servlet-name>ajax</servlet-name>
8
		<servlet-class>org.jfw.web.servlet.core.FilenameConfigServlet</servlet-class>
9
		<init-param>
10
			<param-name>prefixLen</param-name>
11
			<param-value>${ajax.prefixLen}</param-value>
12
		</init-param>
13
		<init-param>
14
			<param-name>viewType</param-name>
15
			<param-value>1</param-value>
16
		</init-param>
17
		<init-param>
18
			<param-name>configFileName</param-name>
19
			<param-value>beanConfig.properties,${main.config}</param-value>
20
		</init-param>
21
		<init-param>
22
			<param-name>afterBeanFactory</param-name>
23
			<param-value>com.ekexiu.portal.job.SchJob,com.ekexiu.portal.job.TaskJob</param-value>
24
		</init-param>
25
		<load-on-startup>1</load-on-startup>
26
	</servlet>
27
	<servlet>
28
		<servlet-name>cachedFileUploadServlet</servlet-name>
29
		<servlet-class>org.jfw.web.servlet.fileupload.cached.CachedUploadServlet</servlet-class>
30
		<load-on-startup>2</load-on-startup>
31
	</servlet>
32
	<servlet>
33
		<servlet-name>resFileUploadServlet</servlet-name>
34
		<servlet-class>org.jfw.web.servlet.fileupload.cached.CachedUploadServlet</servlet-class>
35
		<load-on-startup>3</load-on-startup>
36
	</servlet>
37
	<servlet>
38
		<servlet-name>serviceFileUploadServlet</servlet-name>
39
		<servlet-class>org.jfw.web.servlet.fileupload.cached.CachedUploadServlet</servlet-class>
40
		<load-on-startup>3</load-on-startup>
41
	</servlet>
42
	<servlet>
43
		<servlet-name>FileDownload</servlet-name>
44
		<servlet-class>com.ekexiu.portal.util.FileDownload</servlet-class>
45
		<init-param>
46
			<param-name>accessoryFolder</param-name>
47
			<param-value>${accessoryFolder}</param-value>
48
		</init-param>
49
		<load-on-startup>4</load-on-startup>
50
	</servlet>
51
	<servlet>
52
		<servlet-name>PictureVC</servlet-name>
53
		<servlet-class>com.ekexiu.portal.util.PictureVC</servlet-class>
54
		<load-on-startup>5</load-on-startup>
55
	</servlet>
56
	<servlet>
57
		<servlet-name>CheckPictureVC</servlet-name>
58
		<servlet-class>com.ekexiu.portal.util.CheckPictureVC</servlet-class>
59
		<load-on-startup>6</load-on-startup>
60
	</servlet>
61
	<servlet>
62
		<description></description>
63
		<display-name>ProfessorPdfServlet</display-name>
64
		<servlet-name>ProfessorPdfServlet</servlet-name>
65
		<servlet-class>com.ekexiu.portal.util.ProfessorPdfServlet</servlet-class>
66
		<load-on-startup>7</load-on-startup>
67
	</servlet>
68
	<servlet-mapping>
69
		<servlet-name>ajax</servlet-name>
70
		<url-pattern>/ajax/*</url-pattern>
71
	</servlet-mapping>
72
	<servlet-mapping>
73
		<servlet-name>cachedFileUploadServlet</servlet-name>
74
		<url-pattern>/ajax/cachedFileUpload</url-pattern>
75
	</servlet-mapping>
76
	<servlet-mapping>
77
		<servlet-name>resFileUploadServlet</servlet-name>
78
		<url-pattern>/ajax/resFileUpload</url-pattern>
79
	</servlet-mapping>
80
	<servlet-mapping>
81
		<servlet-name>serviceFileUploadServlet</servlet-name>
82
		<url-pattern>/ajax/serviceFileUpload</url-pattern>
83
	</servlet-mapping>
84
	<servlet-mapping>
85
		<servlet-name>FileDownload</servlet-name>
86
		<url-pattern>/ajax/FileDownload</url-pattern>
87
	</servlet-mapping>
88
	<servlet-mapping>
89
		<servlet-name>PictureVC</servlet-name>
90
		<url-pattern>/ajax/PictureVC</url-pattern>
91
	</servlet-mapping>
92
	<servlet-mapping>
93
		<servlet-name>CheckPictureVC</servlet-name>
94
		<url-pattern>/ajax/CheckPictureVC</url-pattern>
95
	</servlet-mapping>
96
	<servlet-mapping>
97
		<servlet-name>ProfessorPdfServlet</servlet-name>
98
		<url-pattern>/pdf/professor</url-pattern>
99
	</servlet-mapping>
97 100
</web-app>