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 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 queryHandoutNoteList(String handoutPageId,Integer type,Pager pager) { List args = new ArrayList(); 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 queryPageNoteList(String sql , List 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(); } List 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 resultLst = new ArrayList(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> queryAllHandoutNoteList(Integer type,String handoutId,Pager pager) { Map args = new HashMap(); String hql = " from SchHandoutPage where handoutId = ? and deleteFlag is false"; List pages = find(hql, CollectionUtils.newList(handoutId), SchHandoutPage.class); Map pageOrderMap = new HashMap(); List pageIds = new ArrayList(); for (SchHandoutPage schHandoutPage : pages) { pageOrderMap.put(schHandoutPage.getHandoutPageId(), schHandoutPage.getPageOrder()); pageIds.add(schHandoutPage.getHandoutPageId()); } if(pageIds.isEmpty()){ return new ArrayList>(); } //组装sql String sql = generateSql(type, args, pageIds); int allCount = findCountByComplexSql("select count(1) "+sql, args); if(allCount < 1){ return new ArrayList>(); } List 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> resultLst = new ArrayList>(lst.size()); Map map; DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.CHINA); for (Object[] obj : lst) { map = new HashMap(); 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 args,List 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 queryNoteList(String sql , List args, Pager pager){ DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.CHINA); List lst = this.findByPageSql(sql, args, pager); List resultLst = new ArrayList(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 ; } }