提交 2167e619 authored 作者: zhangshuang's avatar zhangshuang

Merge branch 'develop' of 192.168.1.249:LJJ/encrypted-file-system into develop

......@@ -57,6 +57,28 @@
<artifactId>efs-user</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.4.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.2.5.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.zjty</groupId>
<artifactId>efs-ftp</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
......
......@@ -12,7 +12,8 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
"com.zjty.efs.misc",
"com.zjty.efs.bus",
"com.zjty.efs.log",
"com.zjty.efs.user"
"com.zjty.efs.user",
"com.zjty.efs.ftp"
})
@EnableSwagger2
@EnableScheduling
......
......@@ -11,5 +11,6 @@ import java.util.List;
@Repository
public interface AttentionDao extends JpaRepository<Attention, Integer> {
Page<Attention> findOutByUserId(String sender, Pageable pageable);
Page<Attention> findOutByUserIdAndStatus(String sender, Pageable pageable, int status);
List<Attention> findOutByUserIdAndStatus(String userId, int status);
}
......@@ -14,6 +14,10 @@ public interface NoticeDao extends JpaRepository<Notice , Integer> {
Notice findById(int id);
Page<Notice> findOutBySenderAndType(String sender, int type, Pageable pageable);
Page<Notice> findOutByAddresseeLikeAndType(String addressee, int type, Pageable pageable);
List<Notice> findOutByStatusAndTypeAndLabel(int status, int type, int label);
Page<Notice> findOutByAddresseeLikeAndTypeAndStatus(String addressee, int type, Pageable pageable, int status);
List<Notice> findOutByTypeAndLabelNot(int type, int label);
Page<Notice> findOutByAddresseeLikeAndTypeAndStatus(String addressee, int type, int status, Pageable pageable);
Page<Notice> findOutByReceiverAndType(String addressee, int type, Pageable pageable);
Page<Notice> findOutByReceiverAndTypeAndStatus(String addressee, int type, int status, Pageable pageable);
List<Notice> findOutByReceiverAndStatus(String receiver, int status);
}
......@@ -27,16 +27,17 @@ import java.util.List;
public class AttentionController {
@Autowired
AttentionService attentionService;
@ApiOperation(value = "获取提醒列表")
@ApiOperation(value = "获取提醒列表", notes = "status为状态,全部 2,未读 0, 已读 1")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "当前登录用户", dataType = "String", paramType = "query", required = true),
@ApiImplicitParam(name = "pageNum", value = "页码", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "条数", dataType = "int", paramType = "query", required = true)
@ApiImplicitParam(name = "pageSize", value = "条数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "status", value = "状态", dataType = "int", paramType = "query", required = true)
})
@GetMapping("/getAttention")
public ResponseEntity<Paging<Attention>> getAttentionList(@RequestParam String userId, int pageNum, int pageSize){
public ResponseEntity<Paging<Attention>> getAttentionList(@RequestParam String userId, int pageNum, int pageSize, int status){
log.info("获取提醒列表:{}", userId);
return ResponseEntity.ok(attentionService.getAttentionList(userId, pageNum, pageSize));
return ResponseEntity.ok(attentionService.getAttentionList(userId, pageNum, pageSize, status));
}
@ApiOperation(value = "修改提醒为已读")
......
......@@ -25,7 +25,6 @@ public class NoticeController {
@Autowired
private NoticeService noticeService;
/**
* 新增通知
* @param notice
......@@ -55,11 +54,13 @@ public class NoticeController {
@ApiOperation(value = "查看通知接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "通知id", paramType = "query",
required = true, example = "1", dataType = "int")
required = true, example = "1", dataType = "int"),
@ApiImplicitParam(name = "userId", value = "当前用户", paramType = "query",
required = true, dataType = "String")
})
@GetMapping("/getNotice")
public ResponseEntity<Notice> getNotice(@RequestParam int id){
return ResponseEntity.ok(noticeService.getNotice(id));
public ResponseEntity<Notice> getNotice(@RequestParam int id,String userId){
return ResponseEntity.ok(noticeService.getNotice(id, userId));
}
@GetMapping("/getNoticeList")
......@@ -71,13 +72,13 @@ public class NoticeController {
@ApiImplicitParam(name = "status", value = "状态", paramType = "query", required = true, dataType = "int")})
public ResponseEntity<Paging<Notice>> getNoticeList(@RequestParam String user, int type,
int pageNum, int pageSize, int status){
log.info("获取通知列表接口:{},{}", user,type);
log.info("获取通知列表接口:{},{},{}", user,type,status);
Paging<Notice> data = new Paging<>();
if (status == 2){
//全部
data = noticeService.getReceiveList(user, type, pageNum, pageSize);
}else {
data = noticeService.getListByStatus(user, status, pageNum, pageSize);
data = noticeService.getListByStatus(user, status, pageNum, pageSize,type);
}
return ResponseEntity.ok(data);
......@@ -93,4 +94,10 @@ public class NoticeController {
return ResponseEntity.ok(noticeService.updateStatus(notices, userId));
}
@GetMapping("/unreadNum")
public ResponseEntity unreadNum(String userId){
log.info("已接收未读数量");
return ResponseEntity.ok(noticeService.unreadNum(userId));
}
}
......@@ -4,15 +4,26 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Table;
import java.lang.annotation.Documented;
/**
* 接收人信息
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Addressee {
/**
* 接收人ID
*/
private String id;
/**
* 接收人名字
*/
private String name;
/**
* 接收人单位
*/
private String unit;
}
......@@ -68,7 +68,7 @@ public class Notice {
@ApiModelProperty(value = "status", example = "0", dataType = "int" ,name = "通知状态",
notes = "未查看 0,已查看 1,已下载 2,默认 0")
@Column(name = "status")
private Integer status;
private int status;
/**
* 通知类型 接受 0,发送 1,草稿 2
......@@ -128,6 +128,13 @@ public class Notice {
@Column(name = "label")
private int label;
/**
* 发收件人姓名
*/
@ApiModelProperty(value = "receiver", example = "", dataType = "String", name = "发件人名称")
@Column(name = "receiver")
private String receiver;
}
......@@ -13,7 +13,7 @@ public interface AttentionService {
* @param pageSize  每页条数
* @return List<Paging></>
*/
Paging<Attention> getAttentionList(String userId, int pageNum, int pageSize);
Paging<Attention> getAttentionList(String userId, int pageNum, int pageSize, int status);
/**
* 添加消息提醒
......@@ -34,5 +34,5 @@ public interface AttentionService {
* @param userId 当前登录用户编号
* @return
*/
boolean getRedDot(String userId);
int getRedDot(String userId);
}
......@@ -10,24 +10,24 @@ public interface NoticeService {
/**
* 新增通知
* @param jsonObject 通知对象
* @return
* @return true/false
*/
boolean addNotice(Notice jsonObject);
/**
* 修改通知
* @param jsonObject 通知对象
* @return
* @return true/false
*/
boolean updateNotice(Notice jsonObject);
/**
* 查看通知
* @param id 通知id
*
* @return
* @param userId 当前用户
* @return 通知实体notice
*/
Notice getNotice(int id);
Notice getNotice(int id, String userId);
/**
* 获取通知列表
......@@ -51,22 +51,30 @@ public interface NoticeService {
* @param userId 当前用户
* @param status 0 未读
* @param type 0 接收通知
* @return
* @return 通知实体列表
*/
List<Notice> findBySender(String userId, int status, int type);
/**
* 保存通知
* @param notice 通知实体
*/
void saveNotice(Notice notice);
/**
* 获取已查看/未查看
* @param user 当前用户id
* @param status 通知状态
* @param pageNum
* @param pageSize
* @return
* @param pageNum 页码
* @param pageSize 页数
* @return Paging实体
*/
Paging<Notice> getListByStatus(String user, int status, int pageNum, int pageSize);
Paging<Notice> getListByStatus(String user, int status, int pageNum, int pageSize,int type);
/**
* 已接收未读数量
* @param userId 当前用户id
* @return 已接收未读数量
*/
int unreadNum(String userId);
}
......@@ -19,10 +19,16 @@ public class AttentionServiceImpl implements AttentionService {
@Autowired
AttentionDao attentionDao;
@Override
public Paging<Attention> getAttentionList(String userId, int pageNum, int pageSize) {
public Paging<Attention> getAttentionList(String userId, int pageNum, int pageSize, int staus) {
try {
Pageable pageable = PageRequest.of(pageNum - 1, pageSize, Sort.Direction.DESC,"updateTime");
Page<Attention> p = attentionDao.findOutByUserId(userId, pageable);
Page<Attention> p;
if (staus ==2 ){
p = attentionDao.findOutByUserId(userId, pageable);
}else {
p = attentionDao.findOutByUserIdAndStatus(userId, pageable, staus);
}
Paging<Attention> paging= new Paging<>();
paging.setTotal((int)p.getTotalElements());
......@@ -66,13 +72,9 @@ public class AttentionServiceImpl implements AttentionService {
}
@Override
public boolean getRedDot(String userId) {
public int getRedDot(String userId) {
List<Attention> attentions = attentionDao.findOutByUserIdAndStatus(userId, 0);
if(attentions.size() > 0){
return true;
}else {
return false;
}
return attentions.size();
}
}
......@@ -4,17 +4,17 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zjty.efs.bus.Dao.NoticeDao;
import com.zjty.efs.bus.entity.Addressee;
import com.zjty.efs.bus.entity.Attention;
import com.zjty.efs.bus.entity.Notice;
import com.zjty.efs.bus.entity.Paging;
import com.zjty.efs.bus.service.AttentionService;
import com.zjty.efs.bus.service.NoticeService;
import com.zjty.efs.log.subject.entity.EfsLog;
import com.zjty.efs.log.tool.EfsLogUtil;
import com.zjty.efs.user.subject.entity.UserDo;
import com.zjty.efs.user.subject.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.annotation.Transient;
import org.springframework.data.domain.*;
import org.springframework.stereotype.Service;
......@@ -33,6 +33,8 @@ public class NoticeServiceImpl implements NoticeService {
EfsLogUtil efsLogUtil;
@Autowired
UserService userService;
@Autowired
AttentionService attentionService;
@Override
@Transactional
......@@ -59,6 +61,7 @@ public class NoticeServiceImpl implements NoticeService {
Addressee addressee1 = new Addressee();//收件人
addressee1.setId(userDo1.getId());
addressee1.setName(userDo1.getName());
addressee1.setUnit(userDo1.getUnit());
addresseeList.add(addressee1);
......@@ -70,9 +73,13 @@ public class NoticeServiceImpl implements NoticeService {
List<Addressee> addresseeList2 = new ArrayList<>(); //接受者显示的接收列表
Notice notice1 = transform(notice); //发送通知
String dataList = "";
List<UserDo> stringList = new ArrayList<>();//收件人列表
for(String addressee:strings){
UserDo userDo1 = userService.findById(addressee); //收件人用户
stringList.add(userDo1);
Addressee addressee1 = new Addressee();
addressee1.setId(userDo1.getId());
addressee1.setName(userDo1.getName());
......@@ -83,19 +90,33 @@ public class NoticeServiceImpl implements NoticeService {
+ "]收到了来自[" + userDo.getUnit() + "][" + userDo.getDepartment() + "]的[" + userDo.getName()
+ "]关于[" + notice.getTitle() + "的通知";
dataList = dataList + "[" + userDo1.getUnit() + "][" + userDo1.getDepartment() + "]的[" + userDo1.getName()
+ "] ";
efsLogUtil.addLog(new EfsLog(null, userDo1.getId(), data2, new Date()));
}
String add2 = JSONObject.toJSONString(addresseeList2);
for (String addressee:strings){
for (UserDo add:stringList){
Notice notice2 = transform(notice); // 接收通知
notice2.setAddressee(add2);
notice2.setType(0);
notice2.setReceiver(add.getId());
noticeDao.save(notice2);
String data2 = "[" +add.getUnit() + "][" + add.getDepartment() + "]的[" + add.getName()
+ "]收到了来自[" + userDo.getUnit() + "][" + userDo.getDepartment() + "]的[" + userDo.getName()
+ "]关于[" + notice.getTitle() + "的通知";
Attention attention = new Attention();
attention.setStatus(0);
attention.setUpdateTime(new Date());
attention.setData(data2);
attention.setUserId(add.getId());
attentionService.addAttention(attention);
}
notice1.setAddressee(add2);
......@@ -103,9 +124,15 @@ public class NoticeServiceImpl implements NoticeService {
String data1 = "[" +userDo.getUnit() + "][" + userDo.getDepartment() + "]的[" + userDo.getName()
+ "]给" + dataList
+ "发送了关于[" + notice.getTitle() + "]的通知";
efsLogUtil.addLog(new EfsLog(null, userDo.getId(), data1, new Date()));
Attention attention = new Attention();
attention.setStatus(0);
attention.setNoticeId(notice1.getId());
attention.setUpdateTime(new Date());
attention.setData(data1);
attention.setUserId(userDo.getId());
attentionService.addAttention(attention);
efsLogUtil.addLog(new EfsLog(null, userDo.getId(), data1, new Date()));
}
return true;
......@@ -118,6 +145,7 @@ public class NoticeServiceImpl implements NoticeService {
private Notice transform(Notice notice){
Notice notice1 = new Notice();
notice1.setId(notice.getId());
notice1.setTitle(notice.getTitle());
notice1.setAddressee(notice.getAddressee());
notice1.setDeadline(notice.getDeadline());
......@@ -131,6 +159,7 @@ public class NoticeServiceImpl implements NoticeService {
notice1.setUnit(notice.getUnit());
notice1.setName(notice.getName());
notice1.setLabel(notice.getLabel());
return notice1;
}
......@@ -150,31 +179,16 @@ public class NoticeServiceImpl implements NoticeService {
@Override
@Transactional
public Notice getNotice(int id) {
public Notice getNotice(int id, String userId) {
try {
Notice notice = noticeDao.findById(id);
notice.setStatus(1);
noticeDao.save(notice);
String userId = "";
if (notice.getType() == 0){
//已接收
userId = notice.getAddressee();
}else {
userId = notice.getSender();
}
UserDo userDo = userService.findById(userId); // 发送人
UserDo userDo = userService.findById(userId); // 当前用户
String data = "[" +userDo.getUnit() + "][" + userDo.getDepartment() + "]的[" + userDo.getName()
+ "查看了关于[" + notice.getTitle() + "的通知";
efsLogUtil.addLog(new EfsLog(null, userDo.getId(), data, new Date()));
UserDo addressee = userService.findById(notice.getAddressee());
Addressee addressee1 = new Addressee();
addressee1.setId(addressee.getId());
addressee1.setName(addressee.getName());
String json = JSONObject.toJSONString(addressee1);
notice.setAddressee(json);
return notice;
}catch (Exception e){
e.printStackTrace();
......@@ -191,38 +205,13 @@ public class NoticeServiceImpl implements NoticeService {
if (type == 0){
//已接收
p = noticeDao.findOutByAddresseeLikeAndType("%"+user+"%", type, pageable);
// p = noticeDao.findOutByAddresseeLikeAndType("%"+user+"%", type, pageable);
p = noticeDao.findOutByReceiverAndType(user, type,pageable);
}else {
//已发送,草稿
p = noticeDao.findOutBySenderAndType(user, type, pageable);
}
// for (Notice notice:p.getContent()){
// String addresseeId = "";//收件人编号
// UserDo addressee = new UserDo();//收件人实体
// for (int i = 0; i < p.getContent().size(); i++){
// List<Addressee> addressees = new ArrayList<>();
// Notice notice = p.getContent().get(i);
// if (i == 0) {
// addresseeId = notice.getAddressee().split(",")[0];
// addressee = userService.findById(addresseeId);
// }else {
// String addresseeId1 = notice.getAddressee().split(",")[0];
// if (!addresseeId.equals(addresseeId1)){
// //如果两个收件人不一样,重新获取user
// addressee = userService.findById(addresseeId1);
// }
// }
//
// Addressee addressee1 = new Addressee();
// addressee1.setId(addressee.getId());
// addressee1.setName(addressee.getName());
// addressees.add(addressee1);
// String json = JSONObject.toJSONString(addressees);
// notice.setAddressee(json);
// }
Paging<Notice> paging = new Paging<>();
paging.setData(p.getContent());
paging.setPageSize(pageSize);
......@@ -241,16 +230,6 @@ public class NoticeServiceImpl implements NoticeService {
@Transactional
public boolean updateStatus(List<Notice> notices, String userId) {
try {
// String userId = "";
// if (notices.get(0).getType() == 0){
// String str = notices.get(0).getAddressee();
// List<Addressee> addresseeList = JSONArray.parseArray(str,Addressee.class);
// userId = addresseeList.get(0).getId();
// }else {
// String str = notices.get(0).getSender();
// Addressee addressee = JSONObject.parseObject(str,Addressee.class);
// userId = addressee.getName();
// }
UserDo userDo = userService.findById(userId); // 当前登录人
String data = "[" +userDo.getUnit() + "][" + userDo.getDepartment() + "]的[" + userDo.getName()
+ "修改";
......@@ -273,7 +252,7 @@ public class NoticeServiceImpl implements NoticeService {
@Override
public List<Notice> findBySender(String userId, int status, int type) {
try{
return noticeDao.findOutByStatusAndTypeAndLabel(status, type, 0);
return noticeDao.findOutByTypeAndLabelNot(type, 2);
}catch (Exception e){
e.printStackTrace();
return null;
......@@ -286,10 +265,11 @@ public class NoticeServiceImpl implements NoticeService {
}
@Override
public Paging<Notice> getListByStatus(String user, int status, int pageNum, int pageSize) {
public Paging<Notice> getListByStatus(String user, int status, int pageNum, int pageSize,int type) {
try{
Pageable pageable = PageRequest.of(pageNum - 1, pageSize, Sort.Direction.DESC,"updateTime");
Page<Notice> p = noticeDao.findOutByAddresseeLikeAndTypeAndStatus(user, 0, pageable, status);
Page<Notice> p = noticeDao.findOutByReceiverAndTypeAndStatus(user,type, status, pageable);
// Page<Notice> p = noticeDao.findOutByAddresseeLikeAndTypeAndStatus("%"+user+"%",type, status, pageable);
Paging<Notice> paging = new Paging<>();
paging.setData(p.getContent());
paging.setPageSize(pageSize);
......@@ -303,5 +283,11 @@ public class NoticeServiceImpl implements NoticeService {
}
@Override
public int unreadNum(String userId) {
List<Notice> noticeList = noticeDao.findOutByReceiverAndStatus(userId, 0);
return noticeList.size();
}
}
package com.zjty.efs.bus.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.zjty.efs.bus.entity.Addressee;
import com.zjty.efs.bus.entity.Attention;
import com.zjty.efs.bus.entity.Notice;
import com.zjty.efs.bus.service.AttentionService;
import com.zjty.efs.bus.service.NoticeService;
import com.zjty.efs.ftp.base.response.ServerResponse;
import com.zjty.efs.ftp.entity.DownLoadCount;
import com.zjty.efs.ftp.entity.DownLoadRequest;
import com.zjty.efs.ftp.service.DownLoadService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
......@@ -13,6 +19,7 @@ import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
......@@ -23,6 +30,8 @@ public class Job {
NoticeService noticeService;
@Autowired
AttentionService attentionService;
@Autowired
DownLoadService downLoadService;
@Scheduled(cron = "0 */1 * * * ?")
public void cronJob() {
......@@ -30,31 +39,19 @@ public class Job {
Date now = new Date();
List<Notice> noticeList = noticeService.findBySender("",0,0);
String data = "";
for(Notice notice:noticeList){
Attention attention = new Attention();
Date endTime = notice.getDeadline();
double days = (endTime.getTime()-now.getTime())/(1000*3600*24.0);
// System.out.println(days);
if (days <= 3.001 || days <= 1.001){
int d = (int)days;
data = "您收到来自[" + notice.getName() +"]的[" + notice.getTitle() + "],还有" + d +"天失效。";
attention.setData(data);
attention.setNoticeId(notice.getId());
String str = notice.getAddressee();
List<Addressee> addresseeList = JSONArray.parseArray(str,Addressee.class);
String userId = addresseeList.get(0).getId();
attention.setUserId(userId);
attention.setStatus(0);
attention.setUpdateTime(new Date());
attentionService.addAttention(attention);
notice.setLabel(1);
noticeService.saveNotice(notice);
// updateAtt(notice, days, 1);
if (days <= 3.001 && days > 2.998 && notice.getLabel() != 1){
updateAtt(notice, days, 1);
}
if(days <= 1.001 && days > 0.998 && notice.getLabel() != 2){
updateAtt(notice, days, 2);
}
}
......@@ -63,4 +60,69 @@ public class Job {
}
}
/**
* 判断是否有已读未下载的文件
* @param notice 通知
* @param days 失效天数
* @param label 修改通知label 1为提醒过一次,2为提醒过两次
*/
private void updateAtt(Notice notice, double days, int label){
// System.out.println("--------------------定时------------------");
String data = "";
Attention attention = new Attention();
data = "您收到来自["+ notice.getUnit() + "][" + notice.getName() +"]标题为[" + notice.getTitle() + "]的通知,没有查看";
if (notice.getStatus() == 1 && !"".equals(notice.getFileList())){
//通知为已读,且文件列表不为空
String file = notice.getFileList();
String[] files = file.split(",");
List<Integer> fileList = new ArrayList<>();
DownLoadRequest downLoadRequest = new DownLoadRequest();
for(int i = 0; i < files.length; i++){
String s = files[i];
fileList.add(Integer.parseInt(s));
}
downLoadRequest.setFileIds(fileList);
downLoadRequest.setUserId(notice.getReceiver());
List<DownLoadCount> downLoadCounts = downLoadService.findCount(downLoadRequest);
// System.out.println(downLoadCounts);
for(DownLoadCount downLoadCount:downLoadCounts){
if(downLoadCount.getCount() == 0){
data = "您收到来自["+ notice.getUnit() + "][" + notice.getName() +"]标题为[" + notice.getTitle() + "]的通知,有文件没有下载";
add(days, attention, data, notice, label);
}
}
}else {
add(days, attention, data, notice, label);
}
}
/**
* 新增提醒,并修改通知label
* @param days 失效天数
* @param attention 提醒实体
* @param data 提醒内容
* @param notice 通知实体
* @param label 该通知提醒过几次
*/
private void add(double days, Attention attention, String data, Notice notice, int label){
int d = (int)Math.ceil(days);
data = data + ",还有" + d + "天失效。";
attention.setData(data);
attention.setNoticeId(notice.getId());
String str = notice.getAddressee();
List<Addressee> addresseeList = JSONArray.parseArray(str,Addressee.class);
String userId = addresseeList.get(0).getId();
attention.setUserId(userId);
attention.setStatus(0);
attention.setUpdateTime(new Date());
attentionService.addAttention(attention);
notice.setLabel(label);
noticeService.saveNotice(notice);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论