jiapeng 7 years ago
parent
commit
675885cab6

+ 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));

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

@ -0,0 +1,42 @@
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
	public String getId() {
10
		return id;
11
	}
12
	public void setId(String id) {
13
		this.id = id;
14
	}
15
	public long getTime() {
16
		return time;
17
	}
18
	public void setTime(long time) {
19
		this.time = time;
20
	}
21
	public String getTimeStr() {
22
		return timeStr;
23
	}
24
	public void setTimeStr(String timeStr) {
25
		this.timeStr = timeStr;
26
	}
27
	public String getCnt() {
28
		return cnt;
29
	}
30
	public void setCnt(String cnt) {
31
		this.cnt = cnt;
32
	}
33
	public int getNum() {
34
		return num;
35
	}
36
	public void setNum(int num) {
37
		this.num = num;
38
	}
39
	
40
	
41
	
42
}

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

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

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

12
import org.jfw.apt.annotation.Autowrie;
13
import org.jfw.apt.annotation.DefaultValue;
14
import org.jfw.apt.annotation.Nullable;
15
import org.jfw.apt.web.annotation.Path;
16
import org.jfw.apt.web.annotation.operate.Get;
17
import org.jfw.apt.web.annotation.operate.Post;
18
import org.jfw.apt.web.annotation.param.JdbcConn;
19
import org.jfw.util.DateUtil;
20
import org.jfw.util.PageQueryResult;
21
import org.jfw.util.StringUtil;
22

23
@Path("/webMsg")
24
public class Service {
25

26
	public static final List<ActorItem> EMPTY_ACTORS = Collections.<ActorItem> emptyList();
27

28
	@Autowrie
29
	private WebMsgDao webMsgDao;
30

31
	public WebMsgDao getWebMsgDao() {
32
		return webMsgDao;
33
	}
34

35
	public void setWebMsgDao(WebMsgDao webMsgDao) {
36
		this.webMsgDao = webMsgDao;
37
	}
38

39
	public static ActorItem build(WebMsgIdx wmi, String owner, SimpleDateFormat sf) {
40
		ActorItem item = new ActorItem();
41
		item.setCnt(wmi.getLastCnt());
42
		String actor = wmi.getActor();
43
		if (owner.equals(actor)) {
44
			item.setId(wmi.getOwner());
45
			item.setNum(wmi.getNumOfOwner());
46
		} else {
47
			item.setId(actor);
48
			item.setNum(wmi.getNumOfActor());
49
		}
50
		item.setTime(wmi.getLastTime());
51
		item.setTimeStr(sf.format(new Date(wmi.getLastTime())));
52
		return item;
53
	}
54

55
	public static List<ActorItem> build(List<WebMsgIdx> list, String owner) {
56
		if (list == null || list.isEmpty())
57
			return EMPTY_ACTORS;
58

59
		SimpleDateFormat sf = new SimpleDateFormat(DateUtil.DATETIME_FORMAT);
60
		List<ActorItem> ret = new ArrayList<ActorItem>(list.size());
61
		for (ListIterator<WebMsgIdx> it = list.listIterator(); it.hasNext();) {
62
			ret.add(build(it.next(), owner, sf));
63
		}
64
		return ret;
65
	}
66

67
	@Get
68
	@Path("/idx")
69
	public List<ActorItem> query(@JdbcConn Connection con, String id) throws SQLException {
70
		List<WebMsgIdx> list = webMsgDao.query(con, id);
71
		return build(list, id);
72
	}
73

74
	@Get
75
	@Path("/idx/pq")
76
	public PageQueryResult<ActorItem> query(@JdbcConn Connection con, String id, @DefaultValue("1") int pageNo, @DefaultValue("10") int pageSize)
77
			throws SQLException {
78
		PageQueryResult<WebMsgIdx> wmis = this.webMsgDao.query(con, id, pageSize, pageNo);
79
		PageQueryResult<ActorItem> ret = new PageQueryResult<ActorItem>();
80
		ret.setPageNo(ret.getPageNo());
81
		ret.setPageSize(wmis.getPageSize());
82
		ret.setTotal(wmis.getTotal());
83
		ret.setData(build(wmis.getData(), id));
84
		return ret;
85
	}
86

87
	@Post
88
	@Path
89
	public void send(@JdbcConn Connection con, String sender, String reciver, String cnt) throws SQLException {
90
		boolean ownerSend = true;
91
		String owner = sender;
92
		String actor = reciver;
93
		boolean next = true;
94
		if (sender.compareTo(reciver) < 0) {
95
			ownerSend = false;
96
			owner = reciver;
97
			actor = sender;
98
		}
99
		String id = StringUtil.buildUUID();
100
		WebMsgCnt wmc = new WebMsgCnt();
101
		wmc.setId(id);
102
		wmc.setCnt(cnt);
103
		wmc.setReaded(false);
104
		wmc.setReciver(reciver);
105
		wmc.setSender(sender);
106
		WebMsgIdx wmi = null;
107

108
		while (next) {
109
			try {
110
				long time = System.currentTimeMillis();
111
				wmc.setSendTime(DateUtil.formatDateTime(time));
112
				webMsgDao.insert(con, wmc);
113
				int numOfUpdate = 0;
114
				if (ownerSend) {
115
					numOfUpdate = webMsgDao.incActorNum(con, owner, actor, cnt, time);
116
				} else {
117
					numOfUpdate = webMsgDao.incOwnerNum(con, owner, actor, cnt, time);
118
				}
119
				if (numOfUpdate == 0) {
120
					if (wmi == null) {
121
						wmi = new WebMsgIdx();
122
						wmi.setActor(actor);
123
						wmi.setLastCnt(cnt);
124
					
125
						wmi.setNumOfActor(ownerSend ? 1 : 0);
126
						wmi.setNumOfOwner(ownerSend ? 0 : 1);
127
						wmi.setOwner(owner);
128
						wmi.setShowOfActor(true);
129
						wmi.setShowOfOwner(true);
130
					}
131
					wmi.setLastTime(time);
132
					webMsgDao.insert(con,wmi);
133
				}
134
				con.commit();
135
				next=false;
136
			} catch (SQLException e) {
137
				if ("23505".equals(e.getSQLState())) {
138
					con.rollback();
139
				}
140
				throw e;
141
			}
142
		}
143
	}
144

145

146
	@Get
147
	@Path("/cnt/load")
148
	public List<WebMsgCnt> load(@JdbcConn Connection con,String sender,String reciver,@Nullable String bt,@DefaultValue("true") boolean all)throws SQLException{
149
		if(all){
150
			return webMsgDao.queryAll(con,sender, reciver, bt);
151
		}else{
152
			return webMsgDao.query(con, sender, reciver, bt);
153
		}
154
	}
155
	
156
	@Post
157
	@Path("/readed")
158
	public void readed(@JdbcConn(true) Connection con,String sender,String reciver,String time)throws SQLException{
159
		int num = webMsgDao.readed(con, sender, reciver, time);
160
		if(num>0){
161
			String owner = sender;
162
			String actor = reciver;
163
			boolean 	ownerSend = true;
164
			if(sender.compareTo(reciver)>0){
165
				owner = reciver;
166
				actor = sender;
167
				ownerSend = false;
168
			}
169
			if(ownerSend){
170
				webMsgDao.decActorNum(con, owner, actor,num);
171
			}else{
172
				webMsgDao.decOwnerNum(con, owner, actor, num);
173
			}
174
		}
175
	}
176
}

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

@ -0,0 +1,73 @@
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.annotation.entry.Unique;
7
import org.jfw.apt.orm.annotation.entry.Uniques;
8
import org.jfw.apt.orm.core.enums.DE;
9

10
@Uniques(@Unique(clolumns = { "sender","reciver","sendTime" }, name = "WEB_MSG_CNT_S_R_TIME"))
11
@PrimaryKey("id")
12
@Table
13
public class WebMsgCnt {
14

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

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

@ -0,0 +1,90 @@
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.operator.Insert;
14
import org.jfw.apt.orm.annotation.dao.method.operator.PageSelect;
15
import org.jfw.apt.orm.annotation.dao.method.operator.SelectList;
16
import org.jfw.apt.orm.annotation.dao.method.operator.UpdateWith;
17
import org.jfw.apt.orm.annotation.dao.param.GroupSqlColumn;
18
import org.jfw.apt.orm.annotation.dao.param.GtEq;
19
import org.jfw.apt.orm.annotation.dao.param.LtEq;
20
import org.jfw.apt.orm.annotation.dao.param.Set;
21
import org.jfw.apt.orm.core.defaultImpl.StringHandler;
22
import org.jfw.util.PageQueryResult;
23

24
@DAO
25
public interface WebMsgDao {
26

27
	@Exclude({"showOfOwner","showOfActor"})
28
	@SelectList
29
	@OrderBy("ORDER BY LAST_TIME DESC")
30
	List<WebMsgIdx> query(Connection con, @GroupSqlColumn(handlerClass = StringHandler.class, isAnd = false, value = { "OWNER=? AND SHOW_OF_OWNER='1'",
31
			"ACTOR=? AND SHOW_OF_ACTOR='1'" },force=false) String id) throws SQLException;
32
	
33
	
34
	@Exclude({"showOfOwner","showOfActor"})
35
	@PageSelect
36
	@OrderBy("ORDER BY LAST_TIME DESC,OWNER ASC")
37
	PageQueryResult<WebMsgIdx>  query(Connection con, @GroupSqlColumn(handlerClass = StringHandler.class, isAnd = false, value = { "OWNER=? AND SHOW_OF_OWNER='1'",
38
	"ACTOR=? AND SHOW_OF_ACTOR='1'" },force=false) String id,int pageSize,int pageNo) throws SQLException;
39
	
40
	
41
	
42
	
43
	@Insert 
44
	int insert(Connection con,WebMsgCnt cnt)throws SQLException;
45
	@Insert
46
	int insert(Connection con,WebMsgIdx idx)throws SQLException;
47
	
48
	@UpdateWith
49
	@From(WebMsgIdx.class)
50
	@SetSentence("NUM_OF_ACTOR = NUM_OF_ACTOR + 1,SHOW_OF_ACTOR='1'")
51
	int incActorNum(Connection con,String owner,String actor,@Set String lastCnt,@Set long lastTime) throws SQLException;
52
	
53
	
54
	
55
	@UpdateWith
56
	@From(WebMsgIdx.class)
57
	@SetSentence("NUM_OF_OWNER = NUM_OF_OWNER + 1,SHOW_OF_OWNER='1'")
58
	int incOwnerNum(Connection con,String owner,String actor,@Set String lastCnt,@Set long lastTime) throws SQLException;
59
	
60
	
61
	
62
	
63
	@UpdateWith
64
	@From(WebMsgIdx.class)
65

66
	int decActorNum(Connection con,String owner,String actor,@Set("= NUM_OF_ACTOR - ?") int numOfActor) throws SQLException;
67
	
68
	
69
	
70
	@UpdateWith
71
	@From(WebMsgIdx.class)
72
	int decOwnerNum(Connection con,String owner,String actor,@Set("= NUM_OF_OWNER - ?") int numOfOwner) throws SQLException;
73
	
74
	
75
	@SelectList
76
	@OrderBy("ORDER BY SEND_TIME SEND_TIME ASC")
77
	List<WebMsgCnt> query(Connection con,String sender,String reciver,@Nullable @GtEq String sendTime)throws SQLException;
78
	
79
	@SelectList
80
	@OrderBy("ORDER BY SEND_TIME SEND_TIME ASC")
81
	List<WebMsgCnt> queryAll(Connection con, @GroupSqlColumn(handlerClass = StringHandler.class, value = { "SENDER=?","RECIVER=?" },isAnd=false) String actor1,@GroupSqlColumn(handlerClass = StringHandler.class, value = { "SENDER=?","RECIVER=?" },isAnd=false) String actor2,@Nullable @GtEq String sendTime)throws SQLException;
82

83
	
84
	@UpdateWith
85
	@From(WebMsgCnt.class)
86
	@SetSentence("READED='1'")
87
	int readed(Connection con,String sender,String reciver,@LtEq String sendTime)throws SQLException;
88
	
89
	
90
}

+ 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.id_32)
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.id_32)
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

+ 35 - 0
src/main/java/com/ekexiu/portal/service/SysService.java

@ -789,6 +789,41 @@ public class SysService {
789 789
		user2.setEmail(user.getEmail());
790 790
		return user2;
791 791
	}
792
	
793
	@Get
794
	@Path("/baseUserInfo")
795
	public User queryBaseUser(@JdbcConn Connection con,String id) throws SQLException{
796
		User user = this.userDao.query(con, id);
797
		if(user!=null){
798
			user.setInviteCode(null);
799
			user.setInviterId(null);
800
			String mp = user.getMobilePhone();
801
			if(mp!=null && mp.length()>4){
802
				user.setMobilePhone(mp.substring(mp.length()-4));
803
			}
804
			String em = user.getEmail();
805
			if(em!=null){
806
				int idx = em.indexOf('@');
807
				if(idx>0){
808
					StringBuilder sb = new StringBuilder();
809
					sb.append(em);
810
					if(idx==1){
811
						sb.setCharAt(0, '*');
812
					}else{
813
						int b =Math.max(1, idx-4);
814
						for(;b<idx;++b){
815
							sb.setCharAt(b, '*');
816
						}
817
					}
818
					user.setEmail(sb.toString());
819
				}
820
			}
821
			user.setPasswd(null);
822
			user.setSendMailStatus(null);
823
			user.setUserType(null);
824
		}
825
		return user;
826
	}
792 827
793 828
	/**
794 829
	 * 手机验证注册

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

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

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

7
@Path("/debug")
8
public class DebugService {
9
	@Get
10
	@Post
11
	@Path("/msg/send")
12
	public void sendMsg(String to,String cnt){
13
		WebMsgSocketServlet.sendMessage(to, cnt);
14
	}
15
}

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

@ -0,0 +1,140 @@
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
	
24
	public static void sendMessage(String id ,String cnt){
25
		
26
		for(String type:TYPE_LIST){
27
			String key = id+"~"+type;
28
			Session session = sessions.get(key);
29
			if(session!=null && session.isOpen()){
30
				try {
31
					System.out.println("SEND:"+key+"           "+cnt);
32
					session.getBasicRemote().sendText(cnt);
33
				} catch (IOException e) {
34
				}
35
			}
36
			
37
		}
38
	}
39

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

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

70
	@OnMessage
71
	public void echoPongMessage(PongMessage pm) {
72
		// NO-OP
73
	}
74

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

92
		if (id == null || type == null) {
93
			try {
94
				session.close();
95
			} catch (IOException e) {
96
			}
97
			return;
98
		}
99
		String sessionFlag = id + "~" + type;
100

101
		Session old = null;
102
		synchronized (lock) {
103
			old = sessions.get(sessionFlag);
104
			sessions.put(sessionFlag, session);
105
		}
106
		if (old != null && old.isOpen()) {
107
			try {
108
				old.close();
109
			} catch (IOException e) {
110
			}
111
		}
112
	}
113

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

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

+ 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>