Browse Source

Merge branch 'dev' into test

# Conflicts:
#	src/main/java/edu/nju/service/AnalyzeService.java
MengyangDuan 4 years ago
parent
commit
0c2b640f74

+ 6 - 0
pom.xml

@@ -154,6 +154,12 @@
             <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>25.0-jre</version>
+        </dependency>
+
 
 
     </dependencies>

+ 37 - 0
src/main/java/edu/nju/controller/AnalyzeController.java

@@ -8,7 +8,9 @@ import java.util.Map;
 
 import javax.servlet.http.HttpServletResponse;
 
+import edu.nju.model.AnalysePeopleVO;
 import edu.nju.model.AnalyseVO;
+import edu.nju.model.AnalyseVO2;
 import edu.nju.model.BugDataVO;
 import edu.nju.model.HistoricalDataVO;
 import edu.nju.util.BlockChainAspect;
@@ -348,6 +350,27 @@ public class AnalyzeController {
 		}
 	}
 
+	/**
+	 * todo 引进 guvva 来做缓存
+	 * @param caseId
+	 * @param taskId
+	 * @param workId
+	 * @param response
+	 */
+	@RequestMapping(value = "/analysePeople")
+	@ResponseBody
+	public void analyseTask(String caseId, String taskId, String workId , HttpServletResponse response){
+		try {
+			PrintWriter out = response.getWriter();
+			AnalysePeopleVO analyseVO=aservice.getReviewAnalysePeopleVO(caseId, taskId,workId);
+			out.print(new JSONObject(analyseVO));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
 	@RequestMapping(value = "/historicalData")
 	@ResponseBody
 	public HistoricalDataVO getHistoricalData(Long workerId,int caseTypeId){
@@ -373,4 +396,18 @@ public class AnalyzeController {
 		}
 	}
 
+	@RequestMapping(value = "/analyseExam2")
+	@ResponseBody
+	public void analyseExam2(String caseId, String taskId, HttpServletResponse response){
+		try {
+			PrintWriter out = response.getWriter();
+			AnalyseVO2 analyseVO=aservice.getReviewAnalyseVO2(caseId, taskId);
+			out.print(new JSONObject(analyseVO));
+			out.flush();
+			out.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
 }

+ 1 - 0
src/main/java/edu/nju/controller/ExtraController.java

@@ -451,6 +451,7 @@ public class ExtraController {
 		}
 	}
 
+	//
 	@RequestMapping(value = "/getTask")
 	@ResponseBody
 	public void getTask(String id, HttpServletResponse response) {

+ 45 - 1
src/main/java/edu/nju/controller/HistoryController.java

@@ -5,12 +5,15 @@ import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
 import edu.nju.entities.Bug;
 import edu.nju.entities.BugHistory;
+import edu.nju.service.ReportService;
+import edu.nju.util.TimeUtil;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +37,9 @@ public class HistoryController {
 	
 	@Autowired
 	RecommendService recservice;
+
+	@Autowired
+	ReportService reportService;
 	
 	//获取指定节点的历史信息
 	@RequestMapping(value = "/getHistory")
@@ -148,7 +154,7 @@ public class HistoryController {
 			//三级页面筛选,单个节点筛选(没有parent,也没有children)
 			for(String id : hisservice.getBugIdListByPage(case_take_id,page,start,count)) {
 				BugHistory bugHistory=hisservice.getHistory(id);
-				if(bugHistory.getChildren().size() == 0&&bugHistory.getParent().equals("null")) {all.add(id);}
+				if(bugHistory==null || bugHistory.getChildren().size() == 0&&bugHistory.getParent().equals("null")) {all.add(id);}
 			}
 			//根据三级页面筛选
 			//分页
@@ -179,6 +185,44 @@ public class HistoryController {
 		}
 	}
 
+	//获取所有单个节点的数据
+	@RequestMapping(value = "/getAll")
+	@ResponseBody
+	public void getAll(String case_take_id, String start, String count, String page, HttpSession session, HttpServletResponse response) {
+		try {
+			PrintWriter out = response.getWriter();
+			JSONObject result = new JSONObject();
+			List<String> all = hisservice.getBugIdListByPage(case_take_id,page,start,count).stream().collect(Collectors.toList());
+			//分页
+			List<String> ids = all.subList(Integer.parseInt(start), Math.min(all.size(), Integer.parseInt(start) + Integer.parseInt(count)));
+
+			List<String> invalid = hisservice.getInvalid(ids);
+			for(String id: invalid) {
+				if(ids.contains(id)) {ids.remove(id);}
+			}
+			List<List<String>> list = new ArrayList<List<String>>();
+			for(String id : ids) {
+				List<String> temp = new ArrayList<String>();
+				temp.add(id);
+				int score = aservice.getGrade(id);
+				if(score != -1) {temp.add("true");}
+				else {temp.add("false");}
+				Bug bug = reportService.findBugById(id);
+				temp.add(bug.getTitle());
+				temp.add(TimeUtil.timeStamp2Date(bug.getCreate_time_millis()));
+				list.add(temp);
+			}
+			result.put("Count", all.size());
+			result.put("TreeRoot", new JSONArray(list));
+			out.print(result);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
 	//学生获取所有单个节点的数据
 	@RequestMapping(value = "/getSingleStu")
 	@ResponseBody

+ 8 - 0
src/main/java/edu/nju/dao/BugHistoryDao.java

@@ -44,6 +44,14 @@ public class BugHistoryDao {
 		}
 		return ids;
 	}
+
+	//查找所有指定节点
+	public List<BugHistory> findBugHistoryList(List<String> lists) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").in(lists));
+		List<BugHistory> bugHistories = mongoOps.find(query,BugHistory.class);
+		return bugHistories;
+	}
 	
 	//查找所有的BugRoot
 	public List<String> findRoots() {

+ 7 - 0
src/main/java/edu/nju/dao/TestCaseDao.java

@@ -36,6 +36,13 @@ public class TestCaseDao {
 		if(list == null || list.size() == 0) { return null; }
 		else { return list; }
 	}
+
+	public List<TestCase> findByReports(List<String>report_ids) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("report_id").in(report_ids));
+		List<TestCase> list = mongoOperations.find(query, TestCase.class);
+		return list;
+	}
 	
 	public void updateTestCase(String id, String report_id, String name, String front, String behind, String description) {
 		Query query = new Query();

+ 7 - 0
src/main/java/edu/nju/dao/ThumsUpDao.java

@@ -88,4 +88,11 @@ public class ThumsUpDao {
 			mongoOperations.updateFirst(query, update, ThumsUp.class);
 		}
 	}
+
+	public List<ThumsUp> findByReports(List<String>report_ids) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("_id").in(report_ids));
+		List<ThumsUp> list = mongoOperations.find(query, ThumsUp.class);
+		return list;
+	}
 }

+ 40 - 0
src/main/java/edu/nju/dao/UserLabelDao.java

@@ -0,0 +1,40 @@
+package edu.nju.dao;
+
+import edu.nju.entities.ReviewItem;
+import edu.nju.entities.UserLabel;
+import org.apache.catalina.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Queue;
+
+@Repository
+public class UserLabelDao {
+
+    @Autowired
+    private MongoOperations mongoOperations;
+
+    public String saveItem(UserLabel item){
+        mongoOperations.save(item);
+        return item.getId();
+    }
+
+//    public List<ReviewItem>findItemsByJob(String job_id){
+//        Query query = new Query();
+//        query.addCriteria(Criteria.where("job_id").is(job_id));
+//        return mongoOperations.find(query, ReviewItem.class);
+//    }
+
+    public List<UserLabel> findLabelsByWorkerId(String workerId){
+        Query query = new Query();
+        query.addCriteria(Criteria.where("workerId").is(workerId));
+        List<UserLabel> labels = mongoOperations.find(query,UserLabel.class);
+        return  labels;
+    }
+
+
+}

+ 27 - 0
src/main/java/edu/nju/entities/UserLabel.java

@@ -0,0 +1,27 @@
+package edu.nju.entities;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserLabel implements java.io.Serializable{
+
+    private static final long serialVersionUID = -4445308752903947027L;
+
+    @Id
+    private String id;
+
+    private String workerId;
+
+    private String label;
+
+    private String type; // 用来表示用 标签的类型
+
+
+}

+ 28 - 0
src/main/java/edu/nju/model/AnalysePeopleVO.java

@@ -0,0 +1,28 @@
+package edu.nju.model;
+
+import edu.nju.entities.Bug;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class AnalysePeopleVO {
+    String taskName;
+    String name;
+    String school;
+    String photoUrl;
+    String province;
+    String city;
+    long registerTime;
+    long crowdTime;
+    List<Bug> bugList ; //= extraService.getBugList(report_id, case_take_id);
+    long firstActivate ;
+    long lastActivate ;
+    List<String> labels ; // 用户标签
+}

+ 155 - 0
src/main/java/edu/nju/model/AnalyseVO2.java

@@ -0,0 +1,155 @@
+package edu.nju.model;
+
+import org.json.JSONArray;
+
+import java.util.List;
+import java.util.Map;
+
+public class AnalyseVO2 {
+
+    private int likeNum;
+
+    private int dislikeNum;
+
+    private int forkNum;
+
+    private int reportNum;
+
+    private int testcaseNum;
+
+    private int bugNum;
+
+    private long startTime;
+
+    private long endTime;
+
+    private int workerNum;
+
+    private String taskName;
+
+    private JSONArray workerDistribute;
+
+    private List<WorkerVO> workerRank;
+
+    private Map<Integer,Integer> gradeDistrubute;
+
+    public AnalyseVO2(int likeNum, int dislikeNum, int forkNum, int reportNum, int testcaseNum, int bugNum, long startTime, long endTime, int workerNum, String taskName, JSONArray workerDistribute, List<WorkerVO> workerRank, Map<Integer, Integer> gradeDistrubute) {
+        this.likeNum = likeNum;
+        this.dislikeNum = dislikeNum;
+        this.forkNum = forkNum;
+        this.reportNum = reportNum;
+        this.testcaseNum = testcaseNum;
+        this.bugNum = bugNum;
+        this.startTime = startTime;
+        this.endTime = endTime;
+        this.workerNum = workerNum;
+        this.taskName = taskName;
+        this.workerDistribute = workerDistribute;
+        this.workerRank = workerRank;
+        this.gradeDistrubute = gradeDistrubute;
+    }
+
+    public int getLikeNum() {
+        return likeNum;
+    }
+
+    public void setLikeNum(int likeNum) {
+        this.likeNum = likeNum;
+    }
+
+    public int getDislikeNum() {
+        return dislikeNum;
+    }
+
+    public void setDislikeNum(int dislikeNum) {
+        this.dislikeNum = dislikeNum;
+    }
+
+    public int getForkNum() {
+        return forkNum;
+    }
+
+    public void setForkNum(int forkNum) {
+        this.forkNum = forkNum;
+    }
+
+    public int getReportNum() {
+        return reportNum;
+    }
+
+    public void setReportNum(int reportNum) {
+        this.reportNum = reportNum;
+    }
+
+    public int getTestcaseNum() {
+        return testcaseNum;
+    }
+
+    public void setTestcaseNum(int testcaseNum) {
+        this.testcaseNum = testcaseNum;
+    }
+
+    public int getBugNum() {
+        return bugNum;
+    }
+
+    public void setBugNum(int bugNum) {
+        this.bugNum = bugNum;
+    }
+
+    public long getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(long startTime) {
+        this.startTime = startTime;
+    }
+
+    public long getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(long endTime) {
+        this.endTime = endTime;
+    }
+
+    public int getWorkerNum() {
+        return workerNum;
+    }
+
+    public void setWorkerNum(int workerNum) {
+        this.workerNum = workerNum;
+    }
+
+    public String getTaskName() {
+        return taskName;
+    }
+
+    public void setTaskName(String taskName) {
+        this.taskName = taskName;
+    }
+
+    public JSONArray getWorkerDistribute() {
+        return workerDistribute;
+    }
+
+    public void setWorkerDistribute(JSONArray workerDistribute) {
+        this.workerDistribute = workerDistribute;
+    }
+
+    public List<WorkerVO> getWorkerRank() {
+        return workerRank;
+    }
+
+    public void setWorkerRank(List<WorkerVO> workerRank) {
+        this.workerRank = workerRank;
+    }
+
+    public Map<Integer, Integer> getGradeDistrubute() {
+        return gradeDistrubute;
+    }
+
+    public void setGradeDistrubute(Map<Integer, Integer> gradeDistrubute) {
+        this.gradeDistrubute = gradeDistrubute;
+    }
+}

+ 211 - 0
src/main/java/edu/nju/service/AnalyzeService.java

@@ -2,7 +2,10 @@ package edu.nju.service;
 
 import java.nio.charset.StandardCharsets;
 import java.util.*;
+import java.util.stream.Collectors;
 
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
 import edu.nju.dao.*;
 import edu.nju.entities.*;
 import edu.nju.model.*;
@@ -61,9 +64,22 @@ public class AnalyzeService {
 	@Autowired
 	TestCaseDao testCaseDao;
 
+
 	@Value("${mainsite.url}")
 	String mainSiteUrl;
 
+	@Autowired
+	ThumsUpDao thumsUpDao;
+
+	@Autowired
+	BugHistoryDao bugHistoryDao;
+
+	@Autowired
+	UserLabelDao userLabelDao;
+
+	@Autowired
+	ExtraService extraService;
+
 
 	Logger logger= LoggerFactory.getLogger(RecommendService.class);
 	
@@ -545,6 +561,53 @@ public class AnalyzeService {
 		return true;
 	}
 
+	public AnalysePeopleVO getReviewAnalysePeopleVO(String caseId,String taskId,String workerId) {
+		Task task=taskDao.findById(taskId);
+		AnalysePeopleVO res = new AnalysePeopleVO();
+		if(task!=null)res.setTaskName(task.getName());
+		String caseTakeId = caseId+"-"+taskId;
+		// 部分数据从主战接口中取得
+		String result = HTTP.sendGet("http://114.55.91.83:8191/api/user/" + workerId, "");
+		if (result != null && !result.equals("")) {
+			JSONObject json = new JSONObject(result);
+			if (json.has("name") && !json.isNull("name")) {
+				res.setName(json.getString("name"));
+			}
+			if (json.has("school") && !json.isNull("school")) {
+				res.setSchool( json.getString("school"));
+			}
+			if (json.has("province") && !json.isNull("province")) {
+				res.setProvince(json.getString("province"));
+			}
+			if (json.has("city") && !json.isNull("city")) {
+				res.setCity(json.getString("city"));
+			}
+			if (json.has("createTime") && !json.isNull("createTime")) {
+				res.setRegisterTime(json.getLong("createTime"));
+			}
+			if (json.has("photoUrl") && !json.isNull("photoUrl")) {
+				res.setPhotoUrl(json.getString("photoUrl"));
+			}
+		}
+		//用户lebels
+		res.setLabels(getUserLabels(workerId));
+		Report userReport = extraService.findByWorker(caseTakeId,workerId);
+		List<Bug> bugList = extraService.getBugList(userReport.getId(),caseTakeId);
+		long firstActivate  = Long.MAX_VALUE ;
+		long lastActivate  = 0 ;
+		long cur ;
+		for(Bug bug : bugList){
+			cur = Long.parseLong(bug.getCreate_time_millis());
+			if(firstActivate>cur)firstActivate = cur;
+			if(lastActivate<cur)lastActivate=cur;
+		}
+		if(firstActivate == Long.MAX_VALUE)firstActivate = 0 ;
+		res.setFirstActivate(firstActivate);
+		res.setLastActivate(lastActivate);
+		res.setBugList(bugList);
+		return res;
+	}
+
 	public AnalyseVO getReviewAnalyseVO(String caseId, String taskId){
 		Task task=taskDao.findById(taskId);
 		long startTime=0;
@@ -684,5 +747,153 @@ public class AnalyzeService {
 		return historicalDataVO;
 	}
 
+	/**
+	 * 根据用户信息获取用户的labels
+	 * @param wordkId
+	 * @return
+	 */
+	private List<String> getUserLabels(String wordkId){
+		List<UserLabel> labels = userLabelDao.findLabelsByWorkerId(wordkId);
+		return labels.stream().map(UserLabel::getLabel).collect(Collectors.toList());
+	}
+
+
+	public AnalyseVO2 getReviewAnalyseVO2(String caseId, String taskId){
+
+//		Cache<String,String> cache = CacheBuilder.newBuilder().build();
+//		cache.put("word","Hello Guava Cache");
+//		System.out.println(cache.getIfPresent("word"));
+
+
+		Task task=taskDao.findById(taskId);
+		long startTime=0;
+		long endTime=0;
+		String taskName="";
+		double writeMins=0.0;
+		if(task!=null) {
+			startTime = task.getStart_time();
+			endTime = task.getEnd_time();
+			taskName = task.getName();
+			writeMins = task.getTotal_mins();
+		}
+		String caseTakeId=caseId+"-"+taskId;
+		List<Bug>bugs=bdao.findByCaseid(caseTakeId);
+		int bugNum=bugs.size();
+		List<Report>reports=reportDao.findByCaseTakeId(caseTakeId);
+		List<String>reportIds=new ArrayList<>();
+		int reportNum=reports.size();
+		int testCaseNum=0;
+
+		Map<String,String>reportWorkerMap=new HashMap<>();
+		for(Report report:reports){
+			reportIds.add(report.getId());
+			reportWorkerMap.put(report.getId(),report.getWorker_id());
+		}
+		List<TestCase>testCases=testCaseDao.findByReports(reportIds);
+		testCaseNum+=testCases.size();
+		List<ThumsUp>thumsUps=thumsUpDao.findByReports(reportIds);
+		int likeNum=0;
+		int dislikeNum=0;
+		for(ThumsUp thumsUp:thumsUps){
+			if(thumsUp.getThums()!=null){
+				likeNum+=thumsUp.getThums().size();
+			}
+			if(thumsUp.getDiss()!=null){
+				dislikeNum+=thumsUp.getDiss().size();
+			}
+		}
+
+		Map<String,Integer>workerDistribution=new HashMap<>();
+		List<String>bugIds=new ArrayList<>();
+		for(Bug bug:bugs){
+			bugIds.add(bug.getId());
+			String reportId=bug.getReport_id();
+			if(reportId!=null) {
+				String workerId=reportWorkerMap.get(reportId);
+				if (workerId!=null) {
+					int grade=0;
+					if (workerDistribution.containsKey(workerId)) {
+						workerDistribution.replace(workerId, workerDistribution.get(workerId) + grade);
+					} else {
+						workerDistribution.put(workerId, grade);
+					}
+				}
+			}
+		}
+
+		Map<Integer,Integer>gradeDistribution=new HashMap<>();
+		List<BugScore>bugScores=bsdao.findByIds(bugIds);
+		for(BugScore bugScore:bugScores){
+			int grade = bugScore.getGrade();
+			if (gradeDistribution.containsKey(grade)) {
+				gradeDistribution.replace(grade, gradeDistribution.get(grade) + 1);
+			} else {
+				gradeDistribution.put(grade, 1);
+			}
+		}
+
+		int forkNum=0;
+		List<BugHistory>bugHistories=bugHistoryDao.findBugHistoryList(bugIds);
+		for(BugHistory bugHistory:bugHistories){
+			if(bugHistory.getChildren()!=null&&bugHistory.getChildren().size()!=0){
+				forkNum+=1;
+			}
+		}
+		//分数排序
+		List<Map.Entry<String, Integer>> list = new ArrayList<>(workerDistribution.entrySet());
+		Collections.sort(list, new Comparator<Map.Entry<String, Integer>>()
+		{
+			@Override
+			public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)
+			{
+				return o2.getValue().compareTo(o1.getValue());
+
+			}
+		});
+		List<WorkerVO>workerRank=new ArrayList<>();
+		Map<String,Integer>provinceDistribute=new HashMap<>();
+		for(int i=0;i<list.size();i++) {
+			String workerId = list.get(i).getKey();
+			int grade=list.get(i).getValue();
+			String result = HTTP.sendGet("http://114.55.91.83:8191/api/user/" + workerId, "");
+			String name = "";
+			String school = "";
+			String province="";
+			if (result != null && !result.equals("")) {
+				JSONObject json = new JSONObject(result);
+				if (json.has("name") && !json.isNull("name")) {
+					name = json.getString("name");
+				}
+				if (json.has("school") && !json.isNull("school")) {
+					school = json.getString("school");
+				}
+				if (json.has("province") && !json.isNull("province")) {
+					province = json.getString("province");
+					if(province.endsWith("省")||province.endsWith("市")){
+						province=province.substring(0,province.length()-1);
+					}
+					if (provinceDistribute.containsKey(province)) {
+						provinceDistribute.replace(province, provinceDistribute.get(province) + 1);
+					} else {
+						provinceDistribute.put(province, 1);
+					}
+				}
+			}
+			WorkerVO workerVO=new WorkerVO(workerId,name,school,grade);
+			workerRank.add(workerVO);
+		}
+		JSONArray workerDistribute=new JSONArray();
+		for(Map.Entry<String, Integer> entry : provinceDistribute.entrySet()){
+			String mapKey = entry.getKey();
+			int mapValue = entry.getValue();
+			JSONObject jsonObject=new JSONObject();
+			jsonObject.put("name",mapKey);
+			jsonObject.put("value",mapValue);
+			workerDistribute.put(jsonObject);
+		}
+		AnalyseVO2 analyseVO=new AnalyseVO2(likeNum,dislikeNum,forkNum,reportNum,testCaseNum,bugNum,startTime,endTime,reportNum,taskName,workerDistribute,workerRank,gradeDistribution);
+		return analyseVO;
+	}
+
 
 }

+ 4 - 0
src/main/java/edu/nju/service/ReportService.java

@@ -265,6 +265,10 @@ public class ReportService {
 		}
 		return map_sort(map);
 	}
+
+	public Bug findBugById(String budId){
+		return bdao.findByid(budId);
+	}
 	
 	private JSONObject rank_sort(Map<String, Integer> result) {
 		JSONObject json = new JSONObject(true);

+ 12 - 0
src/main/java/edu/nju/util/TimeUtil.java

@@ -5,6 +5,10 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 
 public class TimeUtil {
+
+    private static final String format  = "MM-dd HH:mm:ss";
+    private static final SimpleDateFormat sdf = new SimpleDateFormat(format);
+
     public static Date StringToDate(String datetime){
         SimpleDateFormat sdFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Date date = new Date();
@@ -16,4 +20,12 @@ public class TimeUtil {
         }
         return date;
     }
+
+    public static String timeStamp2Date(String seconds) {
+        if (seconds == null || seconds.isEmpty() || seconds.equals("null")) {
+            return "";
+        }
+        return sdf.format(new Date(Long.valueOf(seconds)));
+    }
+
 }

+ 2 - 2
src/main/resources/bootstrap.yml

@@ -1,5 +1,5 @@
-#spring.profiles.active: dev
-spring.profiles.active: test
+spring.profiles.active: dev
+#spring.profiles.active: test
 #spring.profiles.active: prod
 
 spring:

+ 4 - 4
src/main/resources/logback.xml

@@ -4,8 +4,8 @@
 
     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>/back_end/logs/crowdsource-backend.log.%d{yyyy-MM-dd}.log</fileNamePattern>
-<!--            <fileNamePattern>./logs/crowdsource-backend.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
+            <!--<fileNamePattern>/back_end/logs/crowdsource-backend.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
+            <fileNamePattern>./logs/crowdsource-backend.log.%d{yyyy-MM-dd}.log</fileNamePattern>
             <maxHistory>30</maxHistory>
         </rollingPolicy>
         <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
@@ -19,8 +19,8 @@
 
     <appender name="recommendAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <fileNamePattern>/back_end/logs/recommend.log.%d{yyyy-MM-dd}.log</fileNamePattern>
-<!--            <fileNamePattern>./logs/recommend.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
+            <!--<fileNamePattern>/back_end/logs/recommend.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
+            <fileNamePattern>./logs/recommend.log.%d{yyyy-MM-dd}.log</fileNamePattern>
         </rollingPolicy>
         <encoder>
             <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>