提交 8b1efe10 authored 作者: zjm's avatar zjm

添加了人员管理需要的service

上级 d9a4c59b
流水线 #128 已取消 于阶段
......@@ -8,7 +8,7 @@ import java.util.List;
@Repository
public interface ScoreCoefficientRepository extends MongoRepository<ScoreCoefficient, String> {
List<ScoreCoefficient> findByWordId(String workId);
ScoreCoefficient findByWordId(String workId);
List<ScoreCoefficient> findAllByGroupLeaderScore2IsNullOrDirectorScore2IsNull();
......
......@@ -32,4 +32,19 @@ public interface WorkRepository extends MongoRepository<Work, String> {
List<Work> findByAuditTimeBefore(Date auditTime);
/**
* 根据人员id以及时间范围查询开始时间在范围里的任务
* @param id 人员id
* @param sTime 开始时间
* @param eTime 结束时间
* @return 集合
*/
List<Work> findAllByExecutorAndStateTimeBetween(String id,Date sTime,Date eTime);
/**
* 根据人员id以及的任务
* @param id 人员id
* @return 集合
*/
List<Work> findAllByExecutor(String id);
}
......@@ -60,14 +60,9 @@ public class ScoreCoefficientServiceImpl implements ScoreCoefficientService {
@Override
public ScoreCoefficient findById(String id) {
List<ScoreCoefficient> scoreCoefficients= scoreCoefficientRepository.findByWordId(id);
if (scoreCoefficients.size()==0){
String msg = "[job] 没有考评信息";
log.error(msg);
throw new BadRequestException(msg);
}else {
return scoreCoefficients.get(0);
}
return scoreCoefficientRepository.findByWordId(id);
}
......
......@@ -25,12 +25,17 @@ public interface InternalService {
/**
* 根据时间区间查找人员任务信息
* @param userId
* @param startTime
* @param endTime
* @return
* @param userId 人员id
* @param startTime 开始时间
* @param endTime 结束时间
* @return 人员的任务信息
*/
UserWorkData personnelWorkMsg(String userId,Date startTime,Date endTime);
/**
* 查找人员id任务信息
* @param userId 人员id
* @return 人员的任务信息
*/
UserWorkData personnelWorkMsgAll(String userId);
}
package com.zjty.tynotes.job.status.service.impl;
import com.zjty.tynotes.job.basic.entity.database.ScoreCoefficient;
import com.zjty.tynotes.job.basic.entity.database.Work;
import com.zjty.tynotes.job.basic.repository.ScoreCoefficientRepository;
import com.zjty.tynotes.job.basic.repository.WorkRepository;
import com.zjty.tynotes.job.common.Constants;
import com.zjty.tynotes.job.common.constant.WorkStatus;
import com.zjty.tynotes.job.common.exception.WorkAttribution;
......@@ -11,6 +15,7 @@ import com.zjty.tynotes.job.status.service.InternalService;
import com.zjty.tynotes.pas.service.IUserService;
import com.zjty.tynotes.search.subject.service.EsUtil;
import com.zjty.tynotes.sms.service.MessageTemplateService;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
......@@ -26,6 +31,11 @@ public class InternalServiceImpl implements InternalService {
@Autowired
IUserService iUserService;
@ApiModelProperty
WorkRepository workRepository;
@Autowired
ScoreCoefficientRepository scoreCoefficientRepository;
@Override
public List<Personnel> personnels(List<String> list) {
List<Personnel> personnels=new ArrayList<>();
......@@ -67,11 +77,53 @@ public class InternalServiceImpl implements InternalService {
@Override
public UserWorkData personnelWorkMsg(String userId, Date startTime, Date endTime) {
return null;
UserWorkData userWorkData=new UserWorkData();
int countOngoing=0;
int countFinished=0;
Double countScore=0d;
List<Work> works= workRepository.findAllByExecutorAndStateTimeBetween(userId,startTime,endTime);
for (Work work:works){
if (work.getStatus().equals(WorkStatus.ONGOING)){
countOngoing++;
}
if (work.getStatus().equals(WorkStatus.FINISHED)){
countFinished++;
ScoreCoefficient scoreCoefficient= scoreCoefficientRepository.findByWordId(work.getId());
countScore=countScore+scoreCoefficient.getEndWorkLoad();
}
}
userWorkData.setAverageScore(countScore/countFinished);
userWorkData.setCompletedNum(countOngoing);
userWorkData.setUnCompletedNum(countOngoing);
userWorkData.setUserId(userId);
return userWorkData;
}
@Override
public UserWorkData personnelWorkMsgAll(String userId) {
return null;
UserWorkData userWorkData=new UserWorkData();
int countOngoing=0;
int countFinished=0;
Double countScore=0d;
List<Work> works= workRepository.findAllByExecutor(userId);
for (Work work:works){
if (work.getStatus().equals(WorkStatus.ONGOING)){
countOngoing++;
}
if (work.getStatus().equals(WorkStatus.FINISHED)){
countFinished++;
ScoreCoefficient scoreCoefficient= scoreCoefficientRepository.findByWordId(work.getId());
countScore=countScore+scoreCoefficient.getEndWorkLoad();
}
}
userWorkData.setAverageScore(countScore/countFinished);
userWorkData.setCompletedNum(countOngoing);
userWorkData.setUnCompletedNum(countOngoing);
userWorkData.setUserId(userId);
return userWorkData;
}
}
......@@ -23,6 +23,7 @@ import java.util.List;
@Service
public class RepairServiceImpl implements RepairService {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
......@@ -37,6 +38,7 @@ public class RepairServiceImpl implements RepairService {
@Autowired
ScoreCoefficientService scoreCoefficientService;
@Autowired
IUserService iUserService;
@Override
......
......@@ -81,6 +81,8 @@ public class TestServiceImpl implements TestService {
if (releaseName.equals(executorName)&&releaseName.equals(auditName)){
personalWork.setExecutorEqualRelease(1);
personalWork.setIsNotCommission(1);
flagZ=false;
flagS=false;
}
personalWork.setWorkAttribution(WorkAttribution1.ME_RELEASE_WORK);
personalWork.setReadState(0);
......@@ -96,21 +98,17 @@ public class TestServiceImpl implements TestService {
personalWork.setExecutorEqualRelease(1);
personalWork.setIsNotCommission(0);
flagS=false;
}else {
personalWork.setExecutorEqualRelease(0);
personalWork.setIsNotCommission(0);
}
if (releaseName.equals(executorName)){
personalWork.setExecutorEqualRelease(1);
personalWork.setIsNotCommission(1);
flagZ=false;
}else {
personalWork.setExecutorEqualRelease(1);
personalWork.setIsNotCommission(0);
}
if (releaseName.equals(executorName)&&releaseName.equals(auditName)){
personalWork.setExecutorEqualRelease(1);
personalWork.setIsNotCommission(1);
flagS=false;
flagZ=false;
}
personalWork.setWorkAttribution(WorkAttribution1.ME_RESOLVE_WORK);
personalWork.setReadState(0);
......@@ -165,24 +163,13 @@ public class TestServiceImpl implements TestService {
log.info("{}这里发送{}", work.getAudit(), JacksonUtil.toJSon(statisticalRoleCount(list)));
}
if (!work.getAudit().equals(work.getExecutor()) && !work.getAudit().equals(work.getPublisher())){
personalWork.setWorkAttribution(WorkAttribution1.ME_RELATED_WORK);
personalWork.setReadState(1);
personalWork.setIsNotCommission(0);
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + work.getAudit(), personalWork);
asynchronousAddEs(Constants.REDIS_EVENT + work.getAudit(), personalWork);
List<Object> list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + work.getAudit(), 0, -1);
assert list != null;
pushData(work.getAudit(), JacksonUtil.toJSon(statisticalRoleCount(list)));
subWork(list, work, work.getAudit());
log.info("{}这里发送{}", work.getAudit(), JacksonUtil.toJSon(statisticalRoleCount(list)));
}
majordomos.addAll(generalManagers);
majordomos.addAll(assistantManagers);
majordomos.remove(work.getExecutor());
majordomos.remove(work.getPublisher());
majordomos.remove(work.getAudit());
for (String id : majordomos) {
personalWork.setWorkAttribution(WorkAttribution1.ME_RELATED_WORK);
personalWork.setReadState(1);
......@@ -358,18 +345,7 @@ public class TestServiceImpl implements TestService {
log.info("{}这里发送{}", work.getAudit(), JacksonUtil.toJSon(statisticalRoleCount(list)));
}
if (!work.getAudit().equals(work.getExecutor()) && !work.getAudit().equals(work.getPublisher()) ){
personalWork.setWorkAttribution(WorkAttribution1.ME_RELATED_WORK);
personalWork.setReadState(1);
personalWork.setIsNotCommission(0);
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + work.getAudit(), personalWork);
asynchronousAddEs(Constants.REDIS_EVENT + work.getAudit(), personalWork);
List<Object> list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + work.getAudit(), 0, -1);
assert list != null;
pushData(work.getAudit(), JacksonUtil.toJSon(statisticalRoleCount(list)));
subWork(list, work, work.getAudit());
log.info("{}这里发送{}", work.getAudit(), JacksonUtil.toJSon(statisticalRoleCount(list)));
}
majordomos.addAll(generalManagers);
majordomos.addAll(assistantManagers);
majordomos.remove(work.getExecutor());
......@@ -754,23 +730,23 @@ public class TestServiceImpl implements TestService {
@Override
public void appraisal(String executorId, String latestNews, Work work,int count){
List<String> uIds=new ArrayList<>();
List<String> strings=new ArrayList<>();
strings.add(work.getAudit());
strings.add(work.getExecutor());
List<Object> list =new ArrayList<>();
List<String> sumIds=new ArrayList<>();
sumIds.add(work.getAudit());
sumIds.add(work.getExecutor());
List<String> majordomos = work.getMajordomos();
List<String> generalManagers = work.getGeneralManagers();
List<String> assistantManagers = work.getAssistantManagers();
List<String> sumIds=new ArrayList<>();
sumIds.addAll(strings);
sumIds.addAll(majordomos);
sumIds.addAll(generalManagers);
sumIds.addAll(assistantManagers);
Long time=new Date().getTime();
HashSet set = new HashSet(sumIds);
sumIds.clear();
sumIds.addAll(set);
switch (count){
case 1:
List<Object> list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + work.getExecutor(), 0, -1);
list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + work.getExecutor(), 0, -1);
for (Object object : list) {
RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
if (redisPersonalWork.getWorkId().equals(work.getId())) {
......@@ -785,28 +761,42 @@ public class TestServiceImpl implements TestService {
}
pushData(work.getExecutor(), JacksonUtil.toJSon(statisticalRoleCount(list)));
majordomos.addAll(new ArrayList<>(Collections.singleton(work.getAudit())));
if (majordomos.size()!=0) {
for (String uId:sumIds) {
list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + uId, 0, -1);
list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + work.getAudit(), 0, -1);
for (Object object : list) {
RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
if (redisPersonalWork.getWorkId().equals(work.getId())) {
redisTemplate.opsForList().remove(Constants.REDIS_EVENT + uId, 1, redisPersonalWork);
redisTemplate.opsForList().remove(Constants.REDIS_EVENT + work.getAudit(), 1, redisPersonalWork);
redisPersonalWork.setReadState(1);
redisPersonalWork.setIsNotCommission(1);
redisPersonalWork.setTime(time);
redisPersonalWork.setLatestNews(latestNews);
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + uId, redisPersonalWork);
asynchronousAddEs(Constants.REDIS_EVENT + uId, redisPersonalWork);
}
}
pushData(uId,JacksonUtil.toJSon(statisticalRoleCount(list)));
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + work.getAudit(), redisPersonalWork);
asynchronousAddEs(Constants.REDIS_EVENT + work.getAudit(), redisPersonalWork);
}
}
pushData(work.getAudit(), JacksonUtil.toJSon(statisticalRoleCount(list)));
// if (majordomos.size()!=0) {
// for (String uId:sumIds) {
// list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + uId, 0, -1);
// for (Object object : list) {
// RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
// if (redisPersonalWork.getWorkId().equals(work.getId())) {
// redisTemplate.opsForList().remove(Constants.REDIS_EVENT + uId, 1, redisPersonalWork);
// redisPersonalWork.setReadState(1);
// redisPersonalWork.setIsNotCommission(1);
// redisPersonalWork.setTime(time);
// redisPersonalWork.setLatestNews(latestNews);
// redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + uId, redisPersonalWork);
// asynchronousAddEs(Constants.REDIS_EVENT + uId, redisPersonalWork);
// }
// }
// pushData(uId,JacksonUtil.toJSon(statisticalRoleCount(list)));
// }
// }
sumIds.remove(work.getExecutor());
sumIds.removeAll(majordomos);
sumIds.remove(work.getAudit());
if (sumIds.size()!=0) {
for (String uId:sumIds) {
list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + uId, 0, -1);
......@@ -843,43 +833,48 @@ public class TestServiceImpl implements TestService {
pushData(work.getAudit(), JacksonUtil.toJSon(statisticalRoleCount(list)));
if (majordomos.size()!=0) {
for (String uId:sumIds) {
for (String uId:majordomos) {
list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + uId, 0, -1);
for (Object object : list) {
RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
if (redisPersonalWork.getWorkId().equals(work.getId())) {
redisTemplate.opsForList().remove(Constants.REDIS_EVENT + uId, 1, redisPersonalWork);
if (uId.equals(work.getAudit())){
redisPersonalWork.setReadState(0);
}else {
redisPersonalWork.setReadState(1);
}
redisPersonalWork.setIsNotCommission(1);
redisPersonalWork.setTime(time);
redisPersonalWork.setLatestNews(latestNews);
}
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + uId, redisPersonalWork);
asynchronousAddEs(Constants.REDIS_EVENT + uId, redisPersonalWork);
}
pushData(uId,JacksonUtil.toJSon(statisticalRoleCount(list)));
}
}
ScoreCoefficient scoreCoefficient= scoreCoefficientRepository.findById(work.getId()).get();
if (scoreCoefficient.getDirectorScore2()!=null && scoreCoefficient.getGroupLeaderScore2()!=null){
for (String id:assistantManagers){
list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + id, 0, -1);
assert list != null;
for (Object object : list) {
RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
if (redisPersonalWork.getWorkId().equals(work.getId())) {
redisTemplate.opsForList().remove(Constants.REDIS_EVENT + id, 1, redisPersonalWork);
redisPersonalWork.setReadState(1);
redisPersonalWork.setTime(time);
redisPersonalWork.setIsNotCommission(1);
redisPersonalWork.setLatestNews(latestNews);
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + id, redisPersonalWork);
asynchronousAddEs(Constants.REDIS_EVENT + id, redisPersonalWork);
}
}
pushData(id, JacksonUtil.toJSon(statisticalRoleCount(list)));
pushData(uId,JacksonUtil.toJSon(statisticalRoleCount(list)));
}
}
// ScoreCoefficient scoreCoefficient= scoreCoefficientRepository.findById(work.getId()).get();
// if (scoreCoefficient.getDirectorScore2()!=null && scoreCoefficient.getGroupLeaderScore2()!=null){
// for (String id:assistantManagers){
// list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + id, 0, -1);
// assert list != null;
// for (Object object : list) {
// RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
// if (redisPersonalWork.getWorkId().equals(work.getId())) {
// redisTemplate.opsForList().remove(Constants.REDIS_EVENT + id, 1, redisPersonalWork);
// redisPersonalWork.setReadState(1);
// redisPersonalWork.setTime(time);
// redisPersonalWork.setIsNotCommission(1);
// redisPersonalWork.setLatestNews(latestNews);
// redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + id, redisPersonalWork);
// asynchronousAddEs(Constants.REDIS_EVENT + id, redisPersonalWork);
// }
// }
// pushData(id, JacksonUtil.toJSon(statisticalRoleCount(list)));
// }
//
// }
sumIds.remove(work.getAudit());
sumIds.removeAll(majordomos);
......@@ -903,20 +898,20 @@ public class TestServiceImpl implements TestService {
}
break;
case 3:
list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + work.getAudit(), 0, -1);
assert list != null;
for (Object object : list) {
RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
if (redisPersonalWork.getWorkId().equals(work.getId())) {
redisTemplate.opsForList().remove(Constants.REDIS_EVENT + work.getAudit(), 1, redisPersonalWork);
redisPersonalWork.setReadState(1);
redisPersonalWork.setTime(time);
redisPersonalWork.setLatestNews(latestNews);
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + work.getAudit(), redisPersonalWork);
asynchronousAddEs(Constants.REDIS_EVENT + work.getAudit(), redisPersonalWork);
}
}
pushData(work.getAudit(), JacksonUtil.toJSon(statisticalRoleCount(list)));
// list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + work.getAudit(), 0, -1);
// assert list != null;
// for (Object object : list) {
// RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
// if (redisPersonalWork.getWorkId().equals(work.getId())) {
// redisTemplate.opsForList().remove(Constants.REDIS_EVENT + work.getAudit(), 1, redisPersonalWork);
// redisPersonalWork.setReadState(1);
// redisPersonalWork.setTime(time);
// redisPersonalWork.setLatestNews(latestNews);
// redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + work.getAudit(), redisPersonalWork);
// asynchronousAddEs(Constants.REDIS_EVENT + work.getAudit(), redisPersonalWork);
// }
// }
// pushData(work.getAudit(), JacksonUtil.toJSon(statisticalRoleCount(list)));
if (majordomos.size()!=0) {
for (String uId:majordomos) {
......@@ -926,27 +921,24 @@ public class TestServiceImpl implements TestService {
RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
if (redisPersonalWork.getWorkId().equals(work.getId())) {
redisTemplate.opsForList().remove(Constants.REDIS_EVENT + uId, 1, redisPersonalWork);
if (uId.equals(executorId)){
if (uId.equals(executorId)) {
redisPersonalWork.setReadState(0);
}else {
} else {
redisPersonalWork.setReadState(1);
}
redisPersonalWork.setIsNotCommission(0);
redisPersonalWork.setTime(time);
redisPersonalWork.setLatestNews(latestNews);
}
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + uId, redisPersonalWork);
asynchronousAddEs(Constants.REDIS_EVENT + uId, redisPersonalWork);
}
}
pushData(uId,JacksonUtil.toJSon(statisticalRoleCount(list)));
}
}
scoreCoefficient= scoreCoefficientRepository.findById(work.getId()).get();
if (scoreCoefficient.getDirectorScore2()!=null && scoreCoefficient.getGroupLeaderScore2()!=null){
for (String id:assistantManagers){
if (assistantManagers.size()!=0) {
for (String id : assistantManagers) {
list = redisTemplate.opsForList().range(Constants.REDIS_EVENT + id, 0, -1);
assert list != null;
for (Object object : list) {
......@@ -965,8 +957,6 @@ public class TestServiceImpl implements TestService {
}
}
sumIds.remove(work.getAudit());
sumIds.removeAll(assistantManagers);
sumIds.removeAll(majordomos);
if (sumIds.size()!=0) {
......@@ -996,19 +986,19 @@ public class TestServiceImpl implements TestService {
RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
if (redisPersonalWork.getWorkId().equals(work.getId())) {
redisTemplate.opsForList().remove(Constants.REDIS_EVENT + uId, 1, redisPersonalWork);
if (uId.equals(executorId)){
if (uId.equals(executorId)) {
redisPersonalWork.setReadState(0);
}else {
} else {
redisPersonalWork.setReadState(1);
}
redisPersonalWork.setIsNotCommission(0);
redisPersonalWork.setTime(time);
redisPersonalWork.setLatestNews(latestNews);
}
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + uId, redisPersonalWork);
asynchronousAddEs(Constants.REDIS_EVENT + uId, redisPersonalWork);
}
}
pushData(uId,JacksonUtil.toJSon(statisticalRoleCount(list)));
}
}
......@@ -1024,10 +1014,10 @@ public class TestServiceImpl implements TestService {
redisPersonalWork.setIsNotCommission(1);
redisPersonalWork.setTime(time);
redisPersonalWork.setLatestNews(latestNews);
}
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + uId, redisPersonalWork);
asynchronousAddEs(Constants.REDIS_EVENT + uId, redisPersonalWork);
}
}
pushData(uId,JacksonUtil.toJSon(statisticalRoleCount(list)));
}
}
......@@ -1064,19 +1054,18 @@ public class TestServiceImpl implements TestService {
RedisPersonalWork redisPersonalWork = (RedisPersonalWork) object;
if (redisPersonalWork.getWorkId().equals(work.getId())) {
redisTemplate.opsForList().remove(Constants.REDIS_EVENT + uId, 1, redisPersonalWork);
if (uId.equals(executorId)){
if (uId.equals(executorId)) {
redisPersonalWork.setReadState(0);
}else {
} else {
redisPersonalWork.setReadState(1);
}
redisPersonalWork.setIsNotCommission(0);
redisPersonalWork.setTime(time);
redisPersonalWork.setLatestNews(latestNews);
}
redisTemplate.opsForList().leftPush(Constants.REDIS_EVENT + uId, redisPersonalWork);
asynchronousAddEs(Constants.REDIS_EVENT + uId, redisPersonalWork);
}
}
pushData(uId,JacksonUtil.toJSon(statisticalRoleCount(list)));
}
}
......
......@@ -81,7 +81,7 @@ public class Task {
sc->{
Work work=workService.findById(sc.getWordId());
if (sc.getTime().getTime()< finalTime1){
String score3= String.valueOf(Integer.valueOf(sc.getDirectorScore2())+Integer.valueOf(sc.getGroupLeaderScore2()));
String score3= String.valueOf((Integer.valueOf(sc.getDirectorScore2())+Integer.valueOf(sc.getGroupLeaderScore2()))/2);
sc.setViceScore3(score3);
sc.setTime(new Date());
businessTreeManagement.saveAction(work.getAssistantManagers().get(0),sc.getWordId(),Action.APPRAISAL_WORD,new Date(),"副总经理评价");
......
......@@ -2,7 +2,7 @@ spring.application.name=workbook
## https端口号.
server.port=8289
## 证书的路径.
# 证书的路径.
server.ssl.key-store=classpath:2586377_workbook.zjtys.com.cn.pfx
# 证书密码,请修改为您自己证书的密码.
server.ssl.key-store-password=bMEPW9BG
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论