public class StdCourseServiceImpl implements IStdCourseService {
@Setter
@Getter
private ICourseDao coursedao;
@Setter
@Getter
private IStdCourseDao stdCourseDao;
private int mStdId;
//leaf 0 是根 1是叶子
private boolean[] aryNodeStatus = new boolean[100];
private List<CourseIsBuy> ListBuyTree = new ArrayList<CourseIsBuy>();
public void CreateCourseBuyRec(Course cs, boolean isBuy, boolean isRoot) {
CourseIsBuy ss = new CourseIsBuy();
ss.setCs(cs);
ss.setIsBuyed(isBuy);
ss.setIsRootCourse(isRoot);
ListBuyTree.add(ss);
}
public List<CourseIsBuy> findTreeForBuy(int stdId) {
mStdId = stdId;
ListBuyTree.clear();
List<Course> list = (List<Course>) stdCourseDao.findStdCourseByPid(0);
if(list==null)
return ListBuyTree;
for (Course course : list) {
//不是叶子
//0是叶子 1非叶子
if (course.getLeaf() != "0") {
boolean bIsBuy = stdCourseDao.findStdCourseByScId(stdId,
course.getCid());
CreateCourseBuyRec(course, bIsBuy, bIsBuy);
aryNodeStatus[0] = true;
this.treeBuy(course.getCid(), 0, aryNodeStatus, bIsBuy);
} else {
boolean bIsBuy = stdCourseDao.findStdCourseByScId(stdId,
course.getCid());
CreateCourseBuyRec(course, bIsBuy, false);
}
}
return ListBuyTree;
}
/**
* function :找到整个树并找到已购的课程
*
* @param:
*/
private void treeBuy(Integer cid, Integer level, boolean[] aryIsLastNode,
boolean isBuyFlag) {
int index = 0;
List<Course> list = (List<Course>) stdCourseDao.findStdCourseByPid(cid);
if (list==null) return;
for (Course course : list) {
String symbol = "";
String symbolf = "";
index++;
// 先画上级节点延续下来的"|"+空格,空格具体数目由层数决定
for (int lev = 0; lev < level; lev++) {
if (aryIsLastNode[lev] == false)
symbolf += "│";
else
symbolf += " ";
}
// 是否为最后一个节点
if (index == list.size()) {
symbol = "└";
} else {
symbol = "├";
}
String cname = symbolf + symbol + course.getCname();
course.setCname(cname);
boolean bIsBuy = false;
if (course.getLeaf() == "0") {
// 判断一下他的上级是否已经是被购买了
if (!isBuyFlag) {
bIsBuy = stdCourseDao.findStdCourseByScId(mStdId,
course.getCid());
CreateCourseBuyRec(course, bIsBuy, bIsBuy);
isBuyFlag = bIsBuy;
} else {
CreateCourseBuyRec(course, true, false);
}
} else {
// 判断一下他的上级是否已经是被购买了
if (!isBuyFlag) {
bIsBuy = stdCourseDao.findStdCourseByScId(mStdId,
course.getCid());
CreateCourseBuyRec(course, bIsBuy, bIsBuy);
isBuyFlag = bIsBuy;
} else {
CreateCourseBuyRec(course, true, false);
}
course.setLevel(level + 1);
if (index == list.size()) {
aryIsLastNode[level] = true;
} else {
aryIsLastNode[level] = false;
}
treeBuy(course.getCid(), course.getLevel(), aryIsLastNode,
isBuyFlag);
}
}
}
}
package com.qieast.platform.admincp.service.impl;
import java.util.ArrayList;
import java.util.List;
import com.qieast.platform.admincp.dao.ICourseDao;
import com.qieast.platform.admincp.service.ICourseService;
import com.qieast.platform.model.Course;
public class CourseServiceImpl implements ICourseService {
private ICourseDao coursedao;
private int cid;
private int parentid;
public ICourseDao getCoursedao() {
return coursedao;
}
public void setCoursedao(ICourseDao coursedao) {
this.coursedao = coursedao;
}
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public int getParentid() {
return parentid;
}
public void setParentid(int parentid) {
this.parentid = parentid;
}
@Override
public void addCourse(Course course) {
coursedao.addCourse(course);
}
@Override
public List<Course> findAllCourse() {
List<Course> list = coursedao.findAllCourse();
return list;
}
@Override
public Course findCourseById(Integer cid) {
Course course = coursedao.findCourseById(cid);
return course;
}
@Override
public void updateCourse(Course course) {
coursedao.updateCourse(course);
}
@Override
public Course findCourseBycid(Integer cid) {
Course course = coursedao.findCourseBycid(cid);
return course;
}
// "└" "├ "│" "+"
private List<Course> l = new ArrayList<Course>();
private boolean[] aryNodeStatus = new boolean[100];
private void tree(Integer cid, Integer level, boolean[] aryIsLastNode) {
int index = 0;
List<Course> list = (List<Course>) coursedao.findCourseBypid(cid);
if (list==null) return;
for (Course t : list) {
String symbol = "";
String symbolf = " ";
index++;
// 先画上级节点延续下来的"|"+空格,空格具体数目由层数决定
for (int lev = 0; lev < level; lev++) {
if (aryIsLastNode[lev] == false)
symbolf += "│";
else
symbolf += " ";
}
// 是否为最后一个节点
if (index == list.size()) {
symbol = "└";
} else {
symbol = "├";
}
String cname = symbolf + symbol + t.getCname();
t.setCname(cname);
// if(t.getLeaf() == 0)
if (t.getLeaf() == "0") {
l.add(t);
// t.setLeveler(level + 1);
// tree(t.getId(),
// t.getLeveler(),index==list.size()?true:false);
} else {
l.add(t);
t.setLevel(level + 1);
if (index == list.size()) {
aryIsLastNode[level] = true;
} else {
aryIsLastNode[level] = false;
}
tree(t.getCid(), t.getLevel(), aryIsLastNode);
}
}
}
public List<Course> showTree() {
l.clear();
List<Course> list = (List<Course>) coursedao.findCourseBypid(0);
if(list==null)
return list;
for (Course t : list) {
if (t.getLeaf() != "0") { //if(t.getLeaf()!="0")
l.add(t);
aryNodeStatus[0] = true;
this.tree(t.getCid(), 0, aryNodeStatus);
} else {
l.add(t);
}
}
return l;
}
@Override
public List<Course> findCourseBypid(Integer parentid) {
List<Course> list = coursedao.findCourseBypid(parentid);
return list;
}
@Override
public boolean offLine(List<Course> list) {
for (Course c : list) {
c.setOnlinestate("0");
coursedao.updateOnline(c);
}
return false;
}
@Override
public void deleteMany(List<Course> list) {
for (Course c : list) {
coursedao.deleteCourse(c);
}
}
@Override
public void onLine(List<Course> list) {
for (Course c : list) {
c.setOnlinestate("1");
coursedao.updateOnline(c);
}
}
@Override
public void updateOnline(Course course) {
coursedao.updateCourse(course);
}
@Override
public void addSubCourse(Course course){
coursedao.addCourse(course);
}
}