package com.qxueyou.scc.school.service.impl;
|
|
import java.text.DateFormat;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Locale;
|
import java.util.Map;
|
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
import org.springframework.stereotype.Service;
|
|
import com.qxueyou.scc.base.model.Pager;
|
import com.qxueyou.scc.base.model.Result;
|
import com.qxueyou.scc.base.service.impl.CommonAppService;
|
import com.qxueyou.scc.base.util.ClientUtils;
|
import com.qxueyou.scc.base.util.CollectionUtils;
|
import com.qxueyou.scc.base.util.TraceUtils;
|
import com.qxueyou.scc.school.model.SchHandoutPage;
|
import com.qxueyou.scc.school.model.SchNote;
|
import com.qxueyou.scc.school.model.viewvo.SchNoteViewVO;
|
import com.qxueyou.scc.school.service.INoteService;
|
|
/**
|
* 笔记服务
|
* @author ody.yuan
|
*
|
*/
|
@Service
|
public class NoteService extends CommonAppService implements INoteService {
|
|
private final Logger log = LogManager.getLogger(NoteService.class);
|
|
/**
|
* 添加笔记
|
* @param note
|
* @return
|
*/
|
public Result insertOrUpdateNote(SchNote note) {
|
|
if(StringUtils.isNotBlank(note.getNoteId())){
|
SchNote note0 = read(SchNote.class, note.getNoteId());
|
TraceUtils.setUpdateTrace(note0);
|
note0.setContent(note.getContent());
|
note0.setNoteObjectId(note.getNoteObjectId());
|
note0.setShareFlag(note.getShareFlag());
|
if(note.getShareFlag()){
|
note0.setShareScope(SchNote.NOTE_SCOPE_CLASS);
|
}else{
|
note0.setShareScope(0);
|
}
|
save(note0);
|
}else{
|
TraceUtils.setCreateTrace(note);
|
note.setNoteTime(new Date(System.currentTimeMillis()));
|
note.setUserId(ClientUtils.getUserId());
|
note.setNoteObjectType(SchNote.NOTE_OBJECT_TYPE_HANDOUT_PAGE);
|
if(note.getShareFlag()){
|
note.setShareScope(SchNote.NOTE_SCOPE_CLASS);
|
}else{
|
note.setShareScope(0);
|
}
|
this.save(note);
|
}
|
|
return new Result(true);
|
}
|
|
/**
|
* 删除某页讲一下的一条或 多条 笔记
|
* @param noteIds
|
* @return
|
*/
|
public Result deleteNotes(String noteIds) {
|
|
if(StringUtils.isBlank(noteIds)){
|
return new Result(false,"参数不正确:noteIds为空");
|
}
|
|
Result result = bulkUpdateInLoop("update SchNote set deleteFlag = true where noteId = ?",noteIds.split(","));
|
|
return result;
|
}
|
|
/**
|
* 删除某页讲义下的所有笔记
|
* @param handoutPageId 讲义pageID
|
* @param strObjectType 笔记对象类型
|
* @return
|
*/
|
public Result deleteAllNotes(String handoutPageId,int iObjectType) {
|
|
if(StringUtils.isBlank(handoutPageId)){
|
return new Result(false,"参数不正确:handoutPageId为空");
|
}
|
|
Result result = bulkUpdateInLoop("update SchNote set deleteFlag = true where " +
|
" noteObjectType = " + iObjectType + " and noteObjectId = ?",new String[]{handoutPageId});
|
|
return result;
|
}
|
|
/**
|
* 笔记列表
|
* @param handoutPageId 讲义pageID
|
* @return
|
*/
|
public List<SchNoteViewVO> queryNoteList(String handoutPageId,Pager pager) {
|
|
String sql = "select n.note_id,n.content,n.share_flag ,n.share_scope,n.note_time,n.note_object_id, " +
|
" n.user_id,u.name as user_name ,u.IMG_PATH as user_img " +
|
" from sch_note n ,sch_handout_page p,user u " +
|
" where n.note_object_id = p.HANDOUT_PAGE_ID " +
|
" and u.USER_ID = n.user_id " +
|
" and n.delete_flag is false and p.delete_flag is FALSE and u.DELETE_FLAG is FALSE " +
|
" and ( n.share_flag is true or n.user_id = ? ) " +
|
" and n.note_object_id = ? " +
|
" order by note_time desc " ;
|
|
return this.queryNoteList(sql, CollectionUtils.newList(ClientUtils.getUserId() , handoutPageId), pager);
|
}
|
|
/**
|
* 讲义笔记列表
|
* @param handoutPageId
|
* @param type (我的讲义笔记:0,同学笔记 :1,全部笔记:2)
|
* @return
|
*/
|
public List<SchNoteViewVO> queryHandoutNoteList(String handoutPageId,Integer type,Pager pager) {
|
List<Object> args = new ArrayList<Object>();
|
String sql = " from sch_note n ,sch_handout_page p,user u " +
|
" where n.note_object_id = p.HANDOUT_PAGE_ID " +
|
" and u.USER_ID = n.user_id " +
|
" and n.delete_flag is false and p.delete_flag is FALSE and u.DELETE_FLAG is FALSE ";
|
if(0==type){
|
sql = sql.concat(" and n.user_id = ? ");
|
args.add(ClientUtils.getUserId());
|
}
|
if(1==type){
|
sql = sql.concat(" and n.share_flag is true and n.user_id !=?");
|
args.add(ClientUtils.getUserId());
|
}
|
sql = sql.concat(" and n.note_object_id = ? order by note_time desc ");
|
args.add(handoutPageId);
|
|
return this.queryPageNoteList(sql, args, pager);
|
}
|
|
/**
|
* 查询笔记列表
|
* @param sql
|
* @param args
|
* @return
|
*/
|
@SuppressWarnings("unchecked")
|
private List<SchNoteViewVO> queryPageNoteList(String sql , List<Object> args, Pager pager){
|
|
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.CHINA);
|
|
int allCount = this.findCountBySql(sql, args);
|
|
if(allCount < 1){
|
return new ArrayList<SchNoteViewVO>();
|
}
|
|
List<Object[]> lst = this.findByPageSql("select n.note_id,n.content,n.share_flag ,n.share_scope,n.note_time,n.note_object_id, " +
|
" n.user_id,u.name as user_name ,u.IMG_PATH as user_img " +sql, args, pager);
|
List<SchNoteViewVO> resultLst = new ArrayList<SchNoteViewVO>(lst.size());
|
SchNoteViewVO vo ;
|
|
for (Object[] obj : lst) {
|
vo = new SchNoteViewVO();
|
|
vo.setAllCount(allCount);
|
vo.setNoteId(String.valueOf(obj[0]));
|
vo.setContent(String.valueOf(obj[1]));
|
vo.setShareFlag(Boolean.parseBoolean(String.valueOf(obj[2])));
|
vo.setShareScope(null != obj[3] ? Integer.parseInt(String.valueOf(obj[3])) : 0);
|
|
try {
|
vo.setNoteTime(null != obj[4] ? format.parse(String.valueOf(obj[4])) : null);
|
} catch (ParseException e) {
|
log.error("获取笔记列表转换日期报错" , e);
|
}
|
vo.setNoteObjectId(String.valueOf(obj[5]));
|
vo.setUserId(String.valueOf(obj[6]));
|
vo.setUserName(String.valueOf(obj[7]));
|
vo.setUserImg(String.valueOf(obj[8]));
|
|
resultLst.add(vo);
|
}
|
|
return resultLst ;
|
}
|
|
/**
|
* 单个讲义全部笔记列表
|
* @param type (我的讲义笔记:0,同学笔记 :1,全部笔记:2)
|
* @return
|
*/
|
public List<Map<String,Object>> queryAllHandoutNoteList(Integer type,String handoutId,Pager pager) {
|
|
Map<String,Object> args = new HashMap<String, Object>();
|
|
String hql = " from SchHandoutPage where handoutId = ? and deleteFlag is false";
|
List<SchHandoutPage> pages = find(hql, CollectionUtils.newList(handoutId), SchHandoutPage.class);
|
Map<String,Integer> pageOrderMap = new HashMap<String,Integer>();
|
List<String> pageIds = new ArrayList<String>();
|
for (SchHandoutPage schHandoutPage : pages) {
|
pageOrderMap.put(schHandoutPage.getHandoutPageId(), schHandoutPage.getPageOrder());
|
pageIds.add(schHandoutPage.getHandoutPageId());
|
}
|
|
if(pageIds.isEmpty()){
|
return new ArrayList<Map<String,Object>>();
|
}
|
|
//组装sql
|
String sql = generateSql(type, args, pageIds);
|
|
int allCount = findCountByComplexSql("select count(1) "+sql, args);
|
|
if(allCount < 1){
|
return new ArrayList<Map<String,Object>>();
|
}
|
List<Object[]> lst = findByComplexSql("select n.note_id,n.content,n.share_flag ,n.share_scope,n.note_time,n.note_object_id, " +
|
" n.user_id,u.name as user_name ,u.IMG_PATH as user_img " + sql, pager, args,Object[].class);
|
|
List<Map<String,Object>> resultLst = new ArrayList<Map<String,Object>>(lst.size());
|
Map<String,Object> map;
|
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.CHINA);
|
for (Object[] obj : lst) {
|
map = new HashMap<String, Object>();
|
map.put("allCount", allCount);
|
map.put("noteId", String.valueOf(obj[0]));
|
map.put("content", String.valueOf(obj[1]));
|
map.put("shareFlag", Boolean.parseBoolean(String.valueOf(obj[2])));
|
map.put("shareScope", null != obj[3] ? Integer.parseInt(String.valueOf(obj[3])) : 0);
|
try {
|
map.put("noteTime", null != obj[4] ? format.parse(String.valueOf(obj[4])) : null);
|
|
} catch (ParseException e) {
|
log.error("获取笔记列表转换日期报错" , e);
|
}
|
map.put("noteObjectId", String.valueOf(obj[5]));
|
map.put("userId", String.valueOf(obj[6]));
|
map.put("userName", String.valueOf(obj[7]));
|
map.put("userImg", String.valueOf(obj[8]));
|
map.put("pageOrder", pageOrderMap.get(String.valueOf(obj[5])));
|
resultLst.add(map);
|
}
|
|
|
return resultLst;
|
}
|
|
/**
|
* 组装sql
|
* @param type
|
* @param args
|
* @param pageIds
|
* @return
|
*/
|
private String generateSql(Integer type,Map<String,Object> args,List<String> pageIds){
|
|
String sql = " from sch_note n ,sch_handout_page p,user u " +
|
" where n.note_object_id = p.HANDOUT_PAGE_ID " +
|
" and u.USER_ID = n.user_id " +
|
" and n.delete_flag is false and p.delete_flag is FALSE and u.DELETE_FLAG is FALSE ";
|
if(0==type){
|
sql = sql.concat(" and n.user_id = :userId ");
|
args.put("userId", ClientUtils.getUserId());
|
}else if(1==type){
|
sql = sql.concat(" and n.share_flag is true ");
|
}
|
sql = sql.concat(" and n.note_object_id in (:handoutPageIds) order by p.page_order asc,n.note_time desc ");
|
args.put("handoutPageIds", pageIds.toArray());
|
return sql;
|
}
|
|
/**
|
* 查询笔记列表
|
* @param sql
|
* @param args
|
* @return
|
*/
|
@SuppressWarnings("unchecked")
|
private List<SchNoteViewVO> queryNoteList(String sql , List<Object> args, Pager pager){
|
|
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.CHINA);
|
List<Object[]> lst = this.findByPageSql(sql, args, pager);
|
List<SchNoteViewVO> resultLst = new ArrayList<SchNoteViewVO>(lst.size());
|
SchNoteViewVO vo ;
|
|
for (Object[] obj : lst) {
|
vo = new SchNoteViewVO();
|
|
vo.setNoteId(String.valueOf(obj[0]));
|
vo.setContent(String.valueOf(obj[1]));
|
vo.setShareFlag(Boolean.parseBoolean(String.valueOf(obj[2])));
|
vo.setShareScope(null != obj[3] ? Integer.parseInt(String.valueOf(obj[3])) : 0);
|
|
try {
|
vo.setNoteTime(null != obj[4] ? format.parse(String.valueOf(obj[4])) : null);
|
} catch (ParseException e) {
|
log.error("获取笔记列表转换日期报错" , e);
|
}
|
vo.setNoteObjectId(String.valueOf(obj[5]));
|
vo.setUserId(String.valueOf(obj[6]));
|
vo.setUserName(String.valueOf(obj[7]));
|
vo.setUserImg(String.valueOf(obj[8]));
|
|
resultLst.add(vo);
|
}
|
|
return resultLst ;
|
}
|
|
}
|