jiapeng vor 6 Jahren
Ursprung
Commit
146316175b

+ 56 - 0
src/main/java/com/ekexiu/portal/article/file/ArticleFile.java

@ -0,0 +1,56 @@
1
package com.ekexiu.portal.article.file;
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({"id","seq"})
9
@Table
10
public class ArticleFile {
11
	private String id;
12
	private int seq;
13
	private String name;
14
	private String url;
15
	private long size;
16
	
17
	
18
	@Column(DE.text_de)
19
	public String getId() {
20
		return id;
21
	}
22
	public void setId(String id) {
23
		this.id = id;
24
	}
25
	@Column(DE.int_de)
26
	public int getSeq() {
27
		return seq;
28
	}
29
	public void setSeq(int seq) {
30
		this.seq = seq;
31
	}
32
	@Column(DE.text_de)
33
	public String getName() {
34
		return name;
35
	}
36
	public void setName(String name) {
37
		this.name = name;
38
	}
39
	@Column(DE.text_de)
40
	public String getUrl() {
41
		return url;
42
	}
43
	public void setUrl(String url) {
44
		this.url = url;
45
	}
46
	@Column(DE.long_de)
47
	public long getSize() {
48
		return size;
49
	}
50
	public void setSize(long size) {
51
		this.size = size;
52
	}
53
	
54
	
55
	
56
}

+ 32 - 0
src/main/java/com/ekexiu/portal/article/file/ArticleFileDao.java

@ -0,0 +1,32 @@
1
package com.ekexiu.portal.article.file;
2

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

7
import org.jfw.apt.orm.annotation.dao.Batch;
8
import org.jfw.apt.orm.annotation.dao.DAO;
9
import org.jfw.apt.orm.annotation.dao.method.From;
10
import org.jfw.apt.orm.annotation.dao.method.OrderBy;
11
import org.jfw.apt.orm.annotation.dao.method.operator.DeleteWith;
12
import org.jfw.apt.orm.annotation.dao.method.operator.Insert;
13
import org.jfw.apt.orm.annotation.dao.method.operator.SelectList;
14
import org.jfw.apt.orm.annotation.dao.method.operator.SelectOne;
15

16
@DAO
17
public interface ArticleFileDao {
18
	@Insert
19
	@Batch
20
	 int[] insert(Connection con,ArticleFile files[])throws SQLException;
21
	
22
	@OrderBy("ORDER BY SEQ ASC")
23
	@SelectList
24
	List<ArticleFile> query(Connection con,String id)throws SQLException;
25
	@SelectOne
26
	ArticleFile queryByurl(Connection con,String url)throws SQLException;
27
	
28
	
29
	@DeleteWith
30
	@From(ArticleFile.class)
31
	int delete(Connection con,String id)throws SQLException;
32
}

+ 270 - 0
src/main/java/com/ekexiu/portal/article/file/ArticleFileService.java

@ -0,0 +1,270 @@
1
package com.ekexiu.portal.article.file;
2

3
import java.io.File;
4
import java.io.FileOutputStream;
5
import java.io.InputStream;
6
import java.io.OutputStream;
7
import java.sql.Connection;
8
import java.sql.SQLException;
9
import java.util.LinkedList;
10
import java.util.List;
11
import java.util.concurrent.atomic.AtomicInteger;
12

13
import org.jfw.apt.annotation.Autowrie;
14
import org.jfw.apt.web.annotation.Path;
15
import org.jfw.apt.web.annotation.operate.Get;
16
import org.jfw.apt.web.annotation.operate.Post;
17
import org.jfw.apt.web.annotation.param.JdbcConn;
18
import org.jfw.apt.web.annotation.param.Upload;
19
import org.jfw.util.context.JfwAppContext;
20
import org.jfw.util.jdbc.JdbcUtil;
21
import org.jfw.util.web.fileupload.Item;
22
import org.jfw.util.web.fileupload.UploadItemIterator;
23

24
@Path("/article/files")
25
public class ArticleFileService {
26
	private static final AtomicInteger FN_IDX = new AtomicInteger(1);
27
	private static final AtomicInteger CLEAN_FLAG = new AtomicInteger(0);
28

29
	private File imgPath;
30

31
	@Autowrie
32
	private ArticleFileDao articleFileDao;
33

34
	public File getImgPath() {
35
		return imgPath;
36
	}
37

38
	public void setImgPath(File imgPath) {
39
		this.imgPath = imgPath;
40
	}
41

42
	public ArticleFileDao getArticleFileDao() {
43
		return articleFileDao;
44
	}
45

46
	public void setArticleFileDao(ArticleFileDao articleFileDao) {
47
		this.articleFileDao = articleFileDao;
48
	}
49

50
	public void update(Connection con, String id, String[] files) throws SQLException {
51

52
		articleFileDao.delete(con, id);
53
		if (files != null && files.length > 0) {
54
			ArticleFile[] fs = new ArticleFile[files.length];
55
			for (int i = 0; i < files.length; ++i) {
56
				ArticleFile file = new ArticleFile();
57
				fs[i] = file;
58
				String fp = files[i];
59
				int idx = 0;
60

61
				if (fp == null) {
62
					throw new IllegalArgumentException("paser article file error: null");
63
				}
64
				idx = fp.indexOf(",");
65
				if (idx == (-1)) {
66
					throw new IllegalArgumentException("paser article file error: " + files[i]);
67
				}
68
				file.setUrl(fp.substring(0, idx));
69
				fp = fp.substring(++idx);
70
				idx = fp.indexOf(",");
71
				if (idx == (-1)) {
72
					throw new IllegalArgumentException("paser article file error: " + files[i]);
73
				}
74
				file.setSeq(Integer.parseInt(fp.substring(0, idx)));
75
				fp = fp.substring(++idx);
76
				idx = fp.indexOf(",");
77
				if (idx == (-1)) {
78
					throw new IllegalArgumentException("paser article file error: " + files[i]);
79
				}
80
				file.setSize(Long.parseLong(fp.substring(0, idx)));
81
				fp = fp.substring(++idx);
82
				file.setName(fp);
83
				file.setId(id);
84
			}
85
			articleFileDao.insert(con, fs);
86
		}
87
	}
88

89
	@Get
90
	@Path("/byArticleId")
91
	public List<ArticleFile> query(@JdbcConn Connection con, String id) throws SQLException {
92
		return articleFileDao.query(con, id);
93
	}
94

95
	private void clean(Connection con, File path, String prefix) throws SQLException {
96
		for (File file : path.listFiles()) {
97
			String url = prefix + "/" + file.getName();
98
			if (file.isFile()) {
99
				if (null == articleFileDao.queryByurl(con, url)) {
100
					file.delete();
101
				}
102
			} else {
103
				clean(con, file, url);
104
			}
105
		}
106
	}
107

108
	@Get
109
	@Path("/clean")
110
	public void clean() throws SQLException {
111
		JfwAppContext.getScheduledExecutorService().execute(new Runnable() {
112

113
			@Override
114
			public void run() {
115
				if (CLEAN_FLAG.compareAndSet(0, 1)) {
116
					Connection con = null;
117
					try {
118
						con = JfwAppContext.getDataSource().getConnection();
119
						clean(con, imgPath, "");
120
					} catch (Exception e) {
121
					} finally {
122
						if (con != null) {
123
							JdbcUtil.close(con);
124
							con = null;
125
						}
126
						CLEAN_FLAG.set(0);
127
					}
128
				}
129
			}
130
		});
131

132
	}
133

134
	@Path("/upload")
135
	@Post
136
	public List<UploadFile> upload(@Upload UploadItemIterator it) throws Exception {
137
		List<UploadFile> ret = new LinkedList<UploadFile>();
138
		try {
139
			while (it.hasNext()) {
140
				Item item = it.next();
141
				if (!item.isFormField()) {
142
					String name = normalizeFileName(item.getName());
143
					int index = name.lastIndexOf('.');
144
					String ext = index >= 0 ? name.substring(index + 1) : "";
145
					ext = ext.trim();
146
					long fileLen = 0;
147
					int len = 0;
148
					UploadFile uf = this.buildTargetFile(ext);
149
					uf.setName(name);
150
					File file = uf.getFn();
151
					ret.add(uf);
152
					byte[] buf = new byte[8092];
153
					OutputStream of = new FileOutputStream(file);
154
					try {
155
						InputStream in = item.getInputStream();
156
						try {
157
							while ((len = in.read(buf)) >= 0) {
158
								if (len > 0) {
159
									of.write(buf, 0, len);
160
									fileLen += len;
161
								}
162
							}
163
							uf.setSize(fileLen);
164
						} finally {
165
							in.close();
166
						}
167
					} finally {
168
						of.close();
169
					}
170
				}
171
			}
172
			return ret;
173
		} catch (Exception e) {
174
			this.remove(ret);
175
			throw e;
176
		} finally {
177
			if (it != null)
178
				it.clean();
179
		}
180
	}
181

182
	private void remove(List<UploadFile> list) {
183
		for (UploadFile file : list) {
184
			if (file.fn != null)
185
				file.fn.delete();
186
		}
187
	}
188

189
	private UploadFile buildTargetFile(String ext) {
190
		StringBuilder sb = new StringBuilder();
191
		sb.append(System.currentTimeMillis() / (1000 * 60 * 60 * 24));
192
		File path = new File(this.imgPath, sb.toString());
193
		if (!path.exists()) {
194
			synchronized (this) {
195
				if (!path.mkdirs())
196
					throw new RuntimeException("mkdir error[" + path + "]");
197
				FN_IDX.set(1);
198
			}
199
		}
200
		File file;
201
		do {
202
			String fn = FN_IDX.toString();
203
			if (ext.isEmpty()) {
204
				file = new File(path, fn);
205
			} else {
206
				file = new File(path, fn + "." + ext);
207
			}
208
			FN_IDX.incrementAndGet();
209
		} while (file.exists());
210
		sb.append("/").append(file.getName());
211
		UploadFile uf = new UploadFile();
212
		uf.setFn(file);
213
		uf.setUri("/" + sb.toString());
214
		return uf;
215
	}
216

217
	private String normalizeFileName(String fn) {
218
		int index = fn.indexOf('\\');
219
		if (index >= 0) {
220
			fn = fn.substring(fn.lastIndexOf('\\') + 1);
221
		}
222
		index = fn.indexOf('/');
223
		if (index >= 0) {
224
			fn = fn.substring(fn.lastIndexOf('/') + 1);
225
		}
226
		if (fn.length() == 0)
227
			throw new RuntimeException("invalid filename in Multipart/data request");
228
		return fn;
229
	}
230

231
	public static class UploadFile {
232
		private String name;
233
		private String uri;
234
		private long size;
235
		private transient File fn;
236

237
		public File getFn() {
238
			return fn;
239
		}
240

241
		public void setFn(File fn) {
242
			this.fn = fn;
243
		}
244

245
		public String getName() {
246
			return name;
247
		}
248

249
		public void setName(String name) {
250
			this.name = name;
251
		}
252

253
		public String getUri() {
254
			return uri;
255
		}
256

257
		public void setUri(String uri) {
258
			this.uri = uri;
259
		}
260

261
		public long getSize() {
262
			return size;
263
		}
264

265
		public void setSize(long size) {
266
			this.size = size;
267
		}
268
	}
269

270
}

+ 37 - 0
src/main/java/com/ekexiu/portal/org/OrgLinkMan.java

@ -0,0 +1,37 @@
1
package com.ekexiu.portal.org;
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({"oid","pid"})
9
@Table
10
public class OrgLinkMan {
11
	private String oid;
12
	private String pid;
13
	private int seq;
14
	@Column(DE.text_de)
15
	public String getOid() {
16
		return oid;
17
	}
18
	public void setOid(String oid) {
19
		this.oid = oid;
20
	}
21
	@Column(DE.text_de)
22
	public String getPid() {
23
		return pid;
24
	}
25
	public void setPid(String pid) {
26
		this.pid = pid;
27
	}
28
	@Column(DE.int_de)
29
	public int getSeq() {
30
		return seq;
31
	}
32
	public void setSeq(int seq) {
33
		this.seq = seq;
34
	}
35
	
36
	
37
}

+ 40 - 0
src/main/java/com/ekexiu/portal/org/OrgLinkManDao.java

@ -0,0 +1,40 @@
1
package com.ekexiu.portal.org;
2

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

7
import org.jfw.apt.orm.annotation.dao.Batch;
8
import org.jfw.apt.orm.annotation.dao.DAO;
9
import org.jfw.apt.orm.annotation.dao.method.From;
10
import org.jfw.apt.orm.annotation.dao.method.OrderBy;
11
import org.jfw.apt.orm.annotation.dao.method.operator.DeleteWith;
12
import org.jfw.apt.orm.annotation.dao.method.operator.Insert;
13
import org.jfw.apt.orm.annotation.dao.method.operator.SelectList;
14
import org.jfw.apt.orm.annotation.dao.method.operator.SelectOne;
15

16
@DAO
17
public interface OrgLinkManDao {
18

19
	@Insert
20
	@Batch
21
	int[] insert(Connection con,OrgLinkMan[] man)throws SQLException;
22
	
23
	
24
	@DeleteWith
25
	@From(OrgLinkMan.class)
26
	int deleteByOid(Connection con,String oid)throws SQLException;
27
	
28
	@DeleteWith
29
	@From(OrgLinkMan.class)
30
	int deleteByPid(Connection con,String pid)throws SQLException;
31
	
32
	
33
	@SelectOne
34
	OrgLinkMan queryByPid(Connection con,String pid)throws SQLException;
35
	
36
	@SelectList
37
	@OrderBy("ORDER BY SEQ ASC")
38
	List<OrgLinkMan> queryByOid(Connection con,String oid)throws SQLException;
39
	
40
}

+ 65 - 0
src/main/java/com/ekexiu/portal/org/OrgLinkManService.java

@ -0,0 +1,65 @@
1
package com.ekexiu.portal.org;
2

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

7
import org.jfw.apt.annotation.Autowrie;
8
import org.jfw.apt.annotation.Nullable;
9
import org.jfw.apt.web.annotation.Path;
10
import org.jfw.apt.web.annotation.operate.Get;
11
import org.jfw.apt.web.annotation.operate.Post;
12
import org.jfw.apt.web.annotation.param.JdbcConn;
13

14
@Path("/org/linkman")
15
public class OrgLinkManService {
16

17
	@Autowrie
18
	private OrgLinkManDao orgLinkManDao;
19

20
	public OrgLinkManDao getOrgLinkManDao() {
21
		return orgLinkManDao;
22
	}
23

24
	public void setOrgLinkManDao(OrgLinkManDao orgLinkManDao) {
25
		this.orgLinkManDao = orgLinkManDao;
26
	}
27

28
	@Post
29
	@Path("/delete")
30
	public int delete(@JdbcConn Connection con, @Nullable String oid, @Nullable String pid) throws SQLException {
31
		if (oid != null) {
32
			return this.orgLinkManDao.deleteByOid(con, oid);
33
		} else if (pid != null) {
34
			return this.orgLinkManDao.deleteByPid(con, pid);
35
		}
36
		return 0;
37
	}
38

39
	@Post
40
	@Path("/save")
41
	public void save(@JdbcConn(true) Connection con, String oid, String[] pid) throws SQLException {
42
		this.orgLinkManDao.deleteByOid(con, oid);
43
		OrgLinkMan[] men = new OrgLinkMan[pid.length];
44
		for (int i = 0; i < pid.length; ++i) {
45
			OrgLinkMan man = new OrgLinkMan();
46
			if (pid[i] == null)
47
				throw new IllegalArgumentException("invalid parameter pid[" + i + "] is null");
48
			int idx = pid[i].charAt(',');
49
			if(idx<=0) 	throw new IllegalArgumentException("invalid parameter pid[" + i + "]  ="+pid[i]);
50
			
51
			man.setOid(oid);
52
			man.setSeq(Integer.parseInt(pid[i].substring(0,idx)));
53
			man.setPid(pid[i].substring(++idx));
54
			men[i]=man;
55
		}
56
		this.orgLinkManDao.insert(con, men);
57
	}
58
	
59
	@Get
60
	@Path("/queryAll")
61
	public List<OrgLinkMan> query(@JdbcConn Connection con,String oid)throws SQLException{
62
		return orgLinkManDao.queryByOid(con, oid);
63
	}
64

65
}

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

@ -279,6 +279,7 @@ oauthService_handlers.map-val-2-ref=com_ekexiu_portal_oauth_BaseOAuthHandler
279 279
com_ekexiu_portal_question_Service.imgPath::java.io.File=/kexiu/webdata1/data/question
280 280
com_ekexiu_portal_ware_WareService.imgPath::java.io.File=/kexiu/webdata1/data/ware
281 281
com_ekexiu_portal_platform_PlatformService.imgPath::java.io.File=/kexiu/webdata1/data/platform
282
com_ekexiu_portal_article_file_ArticleFileService.imgPath::java.io.File=/kexiu/webdata1/data/article/file
282 283
com_ekexiu_portal_platform_PlatformService.urlWithRestPasswordWithEmail=MAIL_REST_URL
283 284
com_ekexiu_portal_platform_PlatformService.stateCodeWithRestPasswordWithEmail=MAIL_REST_SC
284 285
com_ekexiu_portal_platform_PlatformService.templateWithRestPasswordWithEmail=<html style\="height\:auto;"><head><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font\: 14px/1.666 Tahoma, Arial;border\: 0;margin\: 0;padding\: 0;color\: \#000000;scrollbar-base-color\: \#dddddd;scrollbar-3dlight-color\: \#ffffff;scrollbar-highlight-color\: \#dddddd;scrollbar-shadow-color\: \#ffffff;scrollbar-darkshadow-color\: \#ffffff;scrollbar-track-color\: \#ffffff;scrollbar-arrow-color\: \#999999;}        div,form,input,textarea,span,img,iframe {margin\: 0;padding\: 0;border\: 0;outline\: 0;}input {cursor\: pointer;}blockquote { margin-left\: 30px;margin-right\: 0; padding\: 0; border\: 0;}blockquote blockquote { margin-left\: 0px;}pre { white-space\: pre-wrap;white-space\: -moz-pre-wrap;white-space\: -pre-wrap;white-space\: -o-pre-wrap;}@media only screen and (max-width\: 600px) {\tdiv[class\="img-responsive"]{\t\ttext-align\:center\!important;}}</style></head><body style\="height\:auto;padding\:0;margin\:0;border\:0;overflow\:hidden;background\:\#d9dfe2;"><div class\="img-responsive" style\="margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;"><img src\="http\://www.ekexiu.com/images/logo4.png"></div><div style\="width\:100.0%;"><div class\="wrapper" style\="width\: auto; margin\: auto; background\: rgb(255, 255, 255);" _ow\="600px"><div style\="margin\:auto"><div class\="row" style\="text-align\:left;"></div><div class\="row"><div style\="position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;"><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u597D\uFF01</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u6B63\u5728\u901A\u8FC7\u90AE\u7BB1\u9A8C\u8BC1\u91CD\u7F6E\u5BC6\u7801\uFF0C\u8BF7\u8BBF\u95EE\u4E0B\u9762\u7684\u7F51\u5740\u5B8C\u6210\u91CD\u7F6E\u5BC6\u7801\u3002</p><p><a style\="color\:\#ff9900" href\="MAIL_REST_URL\=MAIL_REST_SC" target\="_blank">MAIL_REST_URL\=MAIL_REST_SC</a></p><p style\="margin-top\:30.0px;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;border-top\:1.0px solid \#eeeded;padding-top\:15.0px;">\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u7535\u8BDD\: 010-62343359</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u90AE\u7BB1\: service@ekexiu.com</p><p style\="margin-top\:0;margin-bottom\:30.0px;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u5B98\u7F51\: <a style\="color\:\#ff9900" href\="http\://www.ekexiu.com/" target\="_blank">www.ekexiu.com</a></p></div></div></div><\!--footer\u5E95\u90E8--><div style\="background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;"><p style\="padding-bottom\:0;margin-bottom\:0;">&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"><span class\="beian-icon"></span> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p><p style\="padding-top\:0;margin-top\:0;">\u610F\u89C1\u5EFA\u8BAE\uFF1A<strong><a style\="color\:\#399A9B;" rel\="nofollow" href\="mailto\:service@ekexiu.com">service@ekexiu.com</a></strong>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A  010-62343359\uFF089\:00-17\:00\uFF09 </p></div><\!--footer\u5E95\u90E8--></div></div></body></html>

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

@ -279,6 +279,7 @@ oauthService_handlers.map-val-2-ref=com_ekexiu_portal_oauth_BaseOAuthHandler
279 279
com_ekexiu_portal_question_Service.imgPath::java.io.File=/kexiu/webdata/data/question
280 280
com_ekexiu_portal_ware_WareService.imgPath::java.io.File=/kexiu/webdata/data/ware
281 281
com_ekexiu_portal_platform_PlatformService.imgPath::java.io.File=/kexiu/webdata/data/platform
282
com_ekexiu_portal_article_file_ArticleFileService.imgPath::java.io.File=/kexiu/webdata/data/article/file
282 283
com_ekexiu_portal_platform_PlatformService.urlWithRestPasswordWithEmail=MAIL_REST_URL
283 284
com_ekexiu_portal_platform_PlatformService.stateCodeWithRestPasswordWithEmail=MAIL_REST_SC
284 285
com_ekexiu_portal_platform_PlatformService.templateWithRestPasswordWithEmail=<html style\="height\:auto;"><head><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font\: 14px/1.666 Tahoma, Arial;border\: 0;margin\: 0;padding\: 0;color\: \#000000;scrollbar-base-color\: \#dddddd;scrollbar-3dlight-color\: \#ffffff;scrollbar-highlight-color\: \#dddddd;scrollbar-shadow-color\: \#ffffff;scrollbar-darkshadow-color\: \#ffffff;scrollbar-track-color\: \#ffffff;scrollbar-arrow-color\: \#999999;}        div,form,input,textarea,span,img,iframe {margin\: 0;padding\: 0;border\: 0;outline\: 0;}input {cursor\: pointer;}blockquote { margin-left\: 30px;margin-right\: 0; padding\: 0; border\: 0;}blockquote blockquote { margin-left\: 0px;}pre { white-space\: pre-wrap;white-space\: -moz-pre-wrap;white-space\: -pre-wrap;white-space\: -o-pre-wrap;}@media only screen and (max-width\: 600px) {\tdiv[class\="img-responsive"]{\t\ttext-align\:center\!important;}}</style></head><body style\="height\:auto;padding\:0;margin\:0;border\:0;overflow\:hidden;background\:\#d9dfe2;"><div class\="img-responsive" style\="margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;"><img src\="http\://www.ekexiu.com/images/logo4.png"></div><div style\="width\:100.0%;"><div class\="wrapper" style\="width\: auto; margin\: auto; background\: rgb(255, 255, 255);" _ow\="600px"><div style\="margin\:auto"><div class\="row" style\="text-align\:left;"></div><div class\="row"><div style\="position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;"><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u597D\uFF01</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u6B63\u5728\u901A\u8FC7\u90AE\u7BB1\u9A8C\u8BC1\u91CD\u7F6E\u5BC6\u7801\uFF0C\u8BF7\u8BBF\u95EE\u4E0B\u9762\u7684\u7F51\u5740\u5B8C\u6210\u91CD\u7F6E\u5BC6\u7801\u3002</p><p><a style\="color\:\#ff9900" href\="MAIL_REST_URL\=MAIL_REST_SC" target\="_blank">MAIL_REST_URL\=MAIL_REST_SC</a></p><p style\="margin-top\:30.0px;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;border-top\:1.0px solid \#eeeded;padding-top\:15.0px;">\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u7535\u8BDD\: 010-62343359</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u90AE\u7BB1\: service@ekexiu.com</p><p style\="margin-top\:0;margin-bottom\:30.0px;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u5B98\u7F51\: <a style\="color\:\#ff9900" href\="http\://www.ekexiu.com/" target\="_blank">www.ekexiu.com</a></p></div></div></div><\!--footer\u5E95\u90E8--><div style\="background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;"><p style\="padding-bottom\:0;margin-bottom\:0;">&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"><span class\="beian-icon"></span> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p><p style\="padding-top\:0;margin-top\:0;">\u610F\u89C1\u5EFA\u8BAE\uFF1A<strong><a style\="color\:\#399A9B;" rel\="nofollow" href\="mailto\:service@ekexiu.com">service@ekexiu.com</a></strong>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A  010-62343359\uFF089\:00-17\:00\uFF09 </p></div><\!--footer\u5E95\u90E8--></div></div></body></html>

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

@ -283,6 +283,7 @@ oauthService_handlers.map-val-2-ref=com_ekexiu_portal_oauth_BaseOAuthHandler
283 283
com_ekexiu_portal_question_Service.imgPath::java.io.File=/kexiu/webdata/data/question
284 284
com_ekexiu_portal_ware_WareService.imgPath::java.io.File=/kexiu/webdata/data/ware
285 285
com_ekexiu_portal_platform_PlatformService.imgPath::java.io.File=/kexiu/webdata/data/platform
286
com_ekexiu_portal_article_file_ArticleFileService.imgPath::java.io.File=/kexiu/webdata/data/article/file
286 287
com_ekexiu_portal_platform_PlatformService.urlWithRestPasswordWithEmail=MAIL_REST_URL
287 288
com_ekexiu_portal_platform_PlatformService.stateCodeWithRestPasswordWithEmail=MAIL_REST_SC
288 289
com_ekexiu_portal_platform_PlatformService.templateWithRestPasswordWithEmail=<html style\="height\:auto;"><head><meta name\="viewport" content\="width\=device-width, initial-scale\=1" /><meta http-equiv\="Content-Type" content\="text/html;charset\=UTF-8"><style type\="text/css">html,body {font\: 14px/1.666 Tahoma, Arial;border\: 0;margin\: 0;padding\: 0;color\: \#000000;scrollbar-base-color\: \#dddddd;scrollbar-3dlight-color\: \#ffffff;scrollbar-highlight-color\: \#dddddd;scrollbar-shadow-color\: \#ffffff;scrollbar-darkshadow-color\: \#ffffff;scrollbar-track-color\: \#ffffff;scrollbar-arrow-color\: \#999999;}        div,form,input,textarea,span,img,iframe {margin\: 0;padding\: 0;border\: 0;outline\: 0;}input {cursor\: pointer;}blockquote { margin-left\: 30px;margin-right\: 0; padding\: 0; border\: 0;}blockquote blockquote { margin-left\: 0px;}pre { white-space\: pre-wrap;white-space\: -moz-pre-wrap;white-space\: -pre-wrap;white-space\: -o-pre-wrap;}@media only screen and (max-width\: 600px) {\tdiv[class\="img-responsive"]{\t\ttext-align\:center\!important;}}</style></head><body style\="height\:auto;padding\:0;margin\:0;border\:0;overflow\:hidden;background\:\#d9dfe2;"><div class\="img-responsive" style\="margin-top\:40px;padding\:20px;background\:\#ECF0F5;width\:100%;"><img src\="http\://www.ekexiu.com/images/logo4.png"></div><div style\="width\:100.0%;"><div class\="wrapper" style\="width\: auto; margin\: auto; background\: rgb(255, 255, 255);" _ow\="600px"><div style\="margin\:auto"><div class\="row" style\="text-align\:left;"></div><div class\="row"><div style\="position\:relative;padding\:15.0px 50.0px 10.0px 50.0px;"><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u5C0A\u656C\u7684\u7528\u6237\uFF1A</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u597D\uFF01</p><p class\="start" style\="color\:\#555555;font-size\:14.0px;line-height\:24.0px;padding-top\:10.0px;text-justify\:inter-ideograph;text-align\:justify;">\u60A8\u6B63\u5728\u901A\u8FC7\u90AE\u7BB1\u9A8C\u8BC1\u91CD\u7F6E\u5BC6\u7801\uFF0C\u8BF7\u8BBF\u95EE\u4E0B\u9762\u7684\u7F51\u5740\u5B8C\u6210\u91CD\u7F6E\u5BC6\u7801\u3002</p><p><a style\="color\:\#ff9900" href\="MAIL_REST_URL\=MAIL_REST_SC" target\="_blank">MAIL_REST_URL\=MAIL_REST_SC</a></p><p style\="margin-top\:30.0px;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;border-top\:1.0px solid \#eeeded;padding-top\:15.0px;">\u7CFB\u7EDF\u53D1\u4FE1\uFF0C\u8BF7\u52FF\u56DE\u590D</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u7535\u8BDD\: 010-62343359</p><p style\="margin-top\:0;margin-bottom\:0;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u90AE\u7BB1\: service@ekexiu.com</p><p style\="margin-top\:0;margin-bottom\:30.0px;font-size\:14.0px;line-height\:24.0px;color\:\#555555;">\u5B98\u7F51\: <a style\="color\:\#ff9900" href\="http\://www.ekexiu.com/" target\="_blank">www.ekexiu.com</a></p></div></div></div><\!--footer\u5E95\u90E8--><div style\="background\:\#ECF0F5;width\:100.0%;color\:\#999999;padding\:10px 20px;font-size\:12.0px;"><p style\="padding-bottom\:0;margin-bottom\:0;">&copy; 2016 \u5317\u4EAC\u79D1\u8896\u79D1\u6280\u6709\u9650\u516C\u53F8 &nbsp; | &nbsp; \u4EACICP\u590716042588\u53F7-1 &nbsp; | &nbsp;<a class\="beianbox" style\="color\:\#399A9B;" target\="_black" rel\="nofollow" href\="http\://www.beian.gov.cn/portal/registerSystemInfo?recordcode\=11010802022306"><span class\="beian-icon"></span> \u4EAC\u516C\u7F51\u5B89\u590711010802022306\u53F7</a></p><p style\="padding-top\:0;margin-top\:0;">\u610F\u89C1\u5EFA\u8BAE\uFF1A<strong><a style\="color\:\#399A9B;" rel\="nofollow" href\="mailto\:service@ekexiu.com">service@ekexiu.com</a></strong>&nbsp;&nbsp;&nbsp; \u5BA2\u670D\u7535\u8BDD\uFF1A  010-62343359\uFF089\:00-17\:00\uFF09 </p></div><\!--footer\u5E95\u90E8--></div></div></body></html>