wuwen преди 4 години
родител
ревизия
2d35269314
променени са 19 файла, в които са добавени 729 реда и са изтрити 18 реда
  1. 10 0
      src/main/java/com/ssj/bean/sys/imlibuser/TbClass.java
  2. 31 1
      src/main/java/com/ssj/bean/sys/imlibuser/TbClassStudentTemp.java
  3. 10 0
      src/main/java/com/ssj/bean/sys/imlibuser/TbClassTeacher.java
  4. 10 0
      src/main/java/com/ssj/bean/sys/imlibuser/TbClassTeacherTemp.java
  5. 15 0
      src/main/java/com/ssj/bean/weixin/sales/domain/LibOrderDetails.java
  6. 3 0
      src/main/java/com/ssj/dao/sys/imlibuser/dao/TbClassDao.java
  7. 3 2
      src/main/java/com/ssj/dao/sys/imlibuser/dao/TbClassQueryDao.java
  8. 32 0
      src/main/java/com/ssj/dao/sys/imlibuser/dao/TbClassStudentDao.java
  9. 7 0
      src/main/java/com/ssj/dao/sys/imlibuser/dao/TbClassTeacherDao.java
  10. 70 5
      src/main/java/com/ssj/dao/sys/imlibuser/dao/impl/TbClassQueryDaoImpl.java
  11. 59 0
      src/main/java/com/ssj/service/sys/imlibuser/service/TbClassService.java
  12. 94 0
      src/main/java/com/ssj/service/sys/imlibuser/service/TbClassStudentService.java
  13. 11 0
      src/main/java/com/ssj/service/sys/imlibuser/service/TbClassStudentTempService.java
  14. 151 0
      src/main/java/com/ssj/service/sys/imlibuser/service/impl/TbClassServiceImpl.java
  15. 160 0
      src/main/java/com/ssj/service/sys/imlibuser/service/impl/TbClassStudentServiceImpl.java
  16. 39 1
      src/main/java/com/ssj/service/weixin/sales/service/impl/LibOrderDetailsServiceImpl.java
  17. 3 1
      src/main/java/com/ssj/weixin/payment/controller/PaymentController.java
  18. 1 1
      src/main/resources/templates/weixin/vip/serviceBuyOk.html
  19. 20 7
      src/main/resources/templates/weixin/vip/serviceVipBuy.html

+ 10 - 0
src/main/java/com/ssj/bean/sys/imlibuser/TbClass.java

@@ -19,6 +19,8 @@ public class TbClass  extends BaseEntity {
     private String school;
     
     private String className;
+    
+    private String grade;
 
 	/**
 	 * 0无效 ,1有效,2 默认班级
@@ -67,6 +69,14 @@ public class TbClass  extends BaseEntity {
 		this.libId = libId;
 	}
 
+	public String getGrade() {
+		return grade;
+	}
+
+	public void setGrade(String grade) {
+		this.grade = grade;
+	}
+
 	
 
 }

+ 31 - 1
src/main/java/com/ssj/bean/sys/imlibuser/TbClassStudentTemp.java

@@ -31,10 +31,16 @@ public class TbClassStudentTemp  extends BaseEntity {
     private String studentName;
     
     private String parentName;
+
+    private String parentPhone;
     
     private String parentRole;
     
-    private String parentPhone;
+    private String viceParentName;
+
+    private String viceParentPhone;
+    
+    private String viceParentRole;
     
     private String derver;
     
@@ -205,6 +211,30 @@ public class TbClassStudentTemp  extends BaseEntity {
 		this.className = className;
 	}
 
+	public String getViceParentName() {
+		return viceParentName;
+	}
+
+	public void setViceParentName(String viceParentName) {
+		this.viceParentName = viceParentName;
+	}
+
+	public String getViceParentPhone() {
+		return viceParentPhone;
+	}
+
+	public void setViceParentPhone(String viceParentPhone) {
+		this.viceParentPhone = viceParentPhone;
+	}
+
+	public String getViceParentRole() {
+		return viceParentRole;
+	}
+
+	public void setViceParentRole(String viceParentRole) {
+		this.viceParentRole = viceParentRole;
+	}
+
 
   
 }

+ 10 - 0
src/main/java/com/ssj/bean/sys/imlibuser/TbClassTeacher.java

@@ -24,6 +24,8 @@ public class TbClassTeacher  extends BaseEntity {
 	 * 0无效 1有效
 	 */
 	private Integer status;
+	
+	private Integer type;
     
     private Date createTime;
 
@@ -67,6 +69,14 @@ public class TbClassTeacher  extends BaseEntity {
 		this.classId = classId;
 	}
 
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
 
 
 }

+ 10 - 0
src/main/java/com/ssj/bean/sys/imlibuser/TbClassTeacherTemp.java

@@ -18,6 +18,8 @@ public class TbClassTeacherTemp  extends BaseEntity {
     
     private String classId;
     
+    private String className;
+    
     private String leagueName;	
     
     private String teacherId;	
@@ -144,6 +146,14 @@ public class TbClassTeacherTemp  extends BaseEntity {
 		this.classId = classId;
 	}
 
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
 
 
 }

+ 15 - 0
src/main/java/com/ssj/bean/weixin/sales/domain/LibOrderDetails.java

@@ -147,6 +147,13 @@ public class LibOrderDetails  extends BaseEntity{
 	 */
 	private String school;
 	
+
+	/**
+	 * 班级
+	 */
+	private String className;
+	
+	
 	/**
      * 额外价格
      */
@@ -388,6 +395,14 @@ public class LibOrderDetails  extends BaseEntity{
 		this.school = school;
 	}
 	@Transient
+	public String getClassName() {
+		return className;
+	}
+	public void setClassName(String className) {
+		this.className = className;
+	}
+	
+	@Transient
 	public BigDecimal getExtraPrice() {
 		return extraPrice;
 	}

+ 3 - 0
src/main/java/com/ssj/dao/sys/imlibuser/dao/TbClassDao.java

@@ -20,6 +20,9 @@ public interface TbClassDao extends JpaRepository<TbClass, String> {
 
 	@Query(nativeQuery = true, value = " SELECT * from tb_class t where t.lib_id=?1 AND t.class_name=?2 LIMIT 1 ")
 	TbClass getTbClassByLibId(String libId,String className);
+	
+	@Query(nativeQuery = true, value = " SELECT * from tb_class t where t.lib_id=?1 AND t.grade=?2 AND t.class_name=?3 LIMIT 1 ")
+	TbClass getTbClassGradeByLibId(String libId,String grade,String className);
 
 	@Query(nativeQuery = true, value = " SELECT * from tb_class t where t.lib_id=?1 AND t.status = 2 order by create_time LIMIT 1 ")
 	TbClass getDefaultTbClassByLibId(String libId);

+ 3 - 2
src/main/java/com/ssj/dao/sys/imlibuser/dao/TbClassQueryDao.java

@@ -42,7 +42,7 @@ public interface TbClassQueryDao {
 	  * @return
 	  */
 	 Page<Map<String, Object>> findTeacherByPage(Map<String, Object> searchParam, Pageable pageable);
-	 
+	 Page<Map<String, Object>> findHeadmasterByPage(Map<String, Object> searchParam, Pageable pageable);
 	 
 	 /**
 	  * 查询老师添加失败的分页
@@ -68,6 +68,7 @@ public interface TbClassQueryDao {
 	  * @return
 	  */
 	 Page<Map<String, Object>> findClassByPage(Map<String, Object> searchParam, Pageable pageable);
-	 
 
+
+	Page<Map<String, Object>> findInvalidStudentByPage(Map<String, Object> params, Pageable initPage);
 }

+ 32 - 0
src/main/java/com/ssj/dao/sys/imlibuser/dao/TbClassStudentDao.java

@@ -48,6 +48,38 @@ public interface TbClassStudentDao extends JpaRepository<TbClassStudent, String>
 	@Query(nativeQuery = true, value = "SELECT vip_id from tb_class_student where status=1 and class_id in ?1")
 	List<String> findByClassIds(List<String> classIds);
 
+	@Query(nativeQuery = true, value = "SELECT count(1) from tb_lib_bind_audit where status=?2 and vip_id = ?1")
+	int findCountByVipIdAndStatus(String id, int i);
+	@Query(nativeQuery = true, value = "SELECT count(1) from tb_lib_vip_service where vip_id = ?1 and ((type not in ('C024','C025') and lib_id=?2) or lib_id<>?2) and stat=1 ")
+	int findServiceNotAny(String vipId,String libId);
 
+	@Modifying
+	@Query(nativeQuery = true,value = "delete  from  tb_lib_vip_service  where vip_id=?1 and lib_id=?2 and type  in ('C024','C025') ")
+	void delVipServiceData(String vipId, String libId);
+
+	@Modifying
+	@Query(nativeQuery = true,value = "delete from tb_class_student  where vip_id=?1 and lib_id=?2")
+	void delStudentData(String vipId, String libId);
+
+	@Query(nativeQuery = true, value = "select t1.class_id\n" +
+			"    from tb_class_student t1,\n" +
+			"         tb_class t2\n" +
+			"    where 1 = 1\n" +
+			"      and t1.vip_id = ?1\n" +
+			"      and t1.lib_id = ?2\n" +
+			"      and t1.status = 2\n" +
+			"      and t2.status = 1\n" +
+			"      and t1.class_id = t2.id\n" +
+			"    order by t1.create_time desc\n" +
+			"    limit 1")
+	String findRecentOwnedClassId(String vipId, String libId);
 
+	@Modifying
+	@Query(nativeQuery = true,value = "update tb_class_student\n" +
+			"set status=1\n" +
+			"where vip_id = ?1\n" +
+			"  and lib_id = ?2\n" +
+			"  and class_id = ?3\n" +
+			"  and status = 2")
+	void updateStatusByVipIdAndLibId(String vipId, String libId, String classId);
 }

+ 7 - 0
src/main/java/com/ssj/dao/sys/imlibuser/dao/TbClassTeacherDao.java

@@ -44,5 +44,12 @@ public interface TbClassTeacherDao extends JpaRepository<TbClassTeacher, String>
 	@Modifying
 	@Query(nativeQuery=true,value="delete from tb_class_teacher where lib_id=?1 and status=1 and class_id=?2 ")
 	void deleteClassTeacherByClassIdAndLibId(String libId,String classId);
+	
+	@Query(nativeQuery = true, value = " SELECT * from tb_class_teacher t where t.class_id=?1 and t.type=2 and t.status = 1  LIMIT 1")
+	TbClassTeacher getTbLibImTeacherByClassType(String classId);
+	
+	@Query(nativeQuery = true, value = " SELECT * from tb_class_teacher t where t.class_id=?1 AND t.teacher_id=?2 AND t.type=?3 and t.status = 1 order by status desc LIMIT 1 ")
+	TbClassTeacher getTbLibImTeacherByClassIdAndType(String classId,String teacherId,Integer type);
+
 
 }

+ 70 - 5
src/main/java/com/ssj/dao/sys/imlibuser/dao/impl/TbClassQueryDaoImpl.java

@@ -25,10 +25,14 @@ public class TbClassQueryDaoImpl implements TbClassQueryDao {
 		List<Object> queryParams = new ArrayList<Object>();
 		selSql.append(" SELECT t.*    ");
 		selSql.append(" ,( SELECT COUNT(DISTINCT(v.id)) from tb_lib_vip v  where v.stat=1 AND v.lib_id=t.id  ) as student_num     ");
-		selSql.append(" ,( SELECT COUNT(DISTINCT(a.user_id)) from tb_lib_manager a  where a.state=1  AND a.type in (2,10,15) AND a.lib_id=t.id  ) as teacher_num    ");
+		selSql.append(" ,( select COUNT(DISTINCT(t12.vip_id)) from tb_lib_vip_service t12  where t12.lib_id=t.id and t12.type in('C024','C025') and t12.species='S003' and t12.stat=2 ) as invalid_student_num     ");
+		selSql.append(" ,( SELECT COUNT(a.teacher_id) from tb_class_teacher a  where a.status=1 and a.type=1 AND a.lib_id=t.id ) as teacher_num    ");
+		selSql.append(" ,( SELECT COUNT(DISTINCT(a.user_id)) from tb_lib_manager a  where a.state=1  AND a.type in (4) AND a.lib_id=t.id  ) as principal_num    ");
+		selSql.append(" ,( SELECT COUNT(DISTINCT(a.user_id)) from tb_lib_manager a  where a.state=1  AND a.type in (19) AND a.lib_id=t.id  ) as leader_num    ");
+		selSql.append(" ,( SELECT COUNT(a.teacher_id) from tb_class_teacher a  where a.status=1 and a.type=2 AND a.lib_id=t.id  ) as headmaster_num    ");
 		selSql.append(" ,IFNULL(( SELECT SUM(m.port_num) from fx_merchant m WHERE m.lib_id=t.id GROUP BY m.lib_id),0) as port_num ");
 		selSql.append(" from tb_lib_join t    ");
-		selSql.append(" where t.type=1    ");
+		selSql.append(" where 1=1    ");
 		if(!"".equals(searchParam.get("leagueNname"))){
 	          selSql.append(" AND t.league_name like CONCAT('%',?,'%') ");
 	          queryParams.add(searchParam.get("leagueNname"));
@@ -108,8 +112,21 @@ public class TbClassQueryDaoImpl implements TbClassQueryDao {
 		StringBuffer selSql = new StringBuffer();
 		List<Object> queryParams = new ArrayList<Object>();
 		selSql.append("  SELECT * from tb_lib_manager t  ");
-		selSql.append("  where t.state=1  AND t.type in (2,10,15) AND t.lib_id=?    ");
+		selSql.append("  where t.state=1 AND t.lib_id=?    ");
 		queryParams.add(searchParam.get("libId"));
+		
+		if("1".equals(searchParam.get("type"))){
+			  selSql.append(" AND t.type in (4)   ");
+	    }else 
+		if("2".equals(searchParam.get("type"))){
+			  selSql.append(" AND t.type in (19)   ");
+	    }else
+		if("3".equals(searchParam.get("type"))){
+			  selSql.append(" AND t.type in (4,19,2,10,15)   ");
+	    }else
+		if("4".equals(searchParam.get("type"))){
+			  selSql.append(" AND t.type in (2,10,15) ");
+	    }
 		if(!"".equals(searchParam.get("name"))){
 			  selSql.append(" AND t.name LIKE  CONCAT('%',?,'%')   ");
 	          queryParams.add(searchParam.get("name"));
@@ -117,7 +134,29 @@ public class TbClassQueryDaoImpl implements TbClassQueryDao {
 		selSql.append(" GROUP BY t.user_id ORDER BY t.create_time DESC  ");
 		return dao.findPage(selSql.toString(),queryParams.toArray(), pageable);
 	}
-
+	
+	
+	
+	@Override
+	public Page<Map<String, Object>> findHeadmasterByPage(Map<String, Object> searchParam, Pageable pageable) {
+		StringBuffer selSql = new StringBuffer();
+		List<Object> queryParams = new ArrayList<Object>();
+		selSql.append("  SELECT u.*,c.grade,c.class_name,c.id as cid from tb_class_teacher t LEFT JOIN tb_user u ON t.teacher_id=u.id LEFT JOIN tb_class c ON t.class_id=c.id   ");
+		selSql.append("  where t.status=1 AND t.lib_id=?  ");
+		queryParams.add(searchParam.get("libId"));
+		if(!"".equals(searchParam.get("type"))){
+			selSql.append(" AND t.type=? ");
+	        queryParams.add(searchParam.get("type"));
+		}
+		if(!"".equals(searchParam.get("name"))){
+			 selSql.append(" AND u.user_name LIKE  CONCAT('%',?,'%')   ");
+	         queryParams.add(searchParam.get("name"));
+	    }
+		selSql.append(" ORDER BY t.create_time DESC  ");
+		return dao.findPage(selSql.toString(),queryParams.toArray(), pageable);
+	}
+	
+	
 	@Override
 	public Page<Map<String, Object>> findTeacherErrorByPage(Map<String, Object> searchParam, Pageable pageable) {
 		StringBuffer selSql = new StringBuffer();
@@ -168,7 +207,33 @@ public class TbClassQueryDaoImpl implements TbClassQueryDao {
 		return dao.findPage(selSql.toString(),queryParams.toArray(), pageable);
 	}
 
-
+	@Override
+	public Page<Map<String, Object>> findInvalidStudentByPage(Map<String, Object> params, Pageable initPage) {
+		StringBuffer selSql = new StringBuffer();
+		List<Object> queryParams = new ArrayList<Object>();
+		selSql.append("select t2.parent_role,t2.parent_name,t.class_name ,t.id class_id, t2.id,t2.child_name ,t2.img_url ,t2.grade,t2.sex,t2.school,IF(t3.mobile is null,t2.phone,t3.mobile) phone\n");
+		selSql.append(" from tb_lib_vip t2 \n");
+		selSql.append(" left join (select tc.class_name,tc.id,tcs.vip_id\n");
+		selSql.append(" from tb_class_student tcs,tb_class tc\n");
+		selSql.append(" where tcs.status in (1,2)\n");
+		selSql.append(" and tcs.lib_id=?\n");
+		selSql.append(" and tc.status=1\n");
+		selSql.append(" and tcs.class_id=tc.id\n");
+		selSql.append(" ) t on t2.id=t.vip_id\n");
+		selSql.append(" left join tb_user t3 on t2.user_id=t3.id\n");
+		selSql.append(" left join (select lib_id, vip_id, min(stat) stat from tb_lib_vip_service where lib_id=? and type in('C024','C025') and stat=2 and species='S003' group by lib_id,vip_id) t4\n");
+		selSql.append(" on t2.id = t4.vip_id\n");
+		selSql.append(" where 1=1\n");
+		selSql.append(" and t4.lib_id=?\n");
+		queryParams.add(params.get("libId"));
+		queryParams.add(params.get("libId"));
+		queryParams.add(params.get("libId"));
+		if(!"".equals(params.get("name"))){
+			selSql.append(" AND t2.child_name LIKE  CONCAT('%',?,'%')   ");
+			queryParams.add(params.get("name"));
+		}
+		return dao.findPage(selSql.toString(),queryParams.toArray(), initPage);
+	}
 
 
 }

+ 59 - 0
src/main/java/com/ssj/service/sys/imlibuser/service/TbClassService.java

@@ -0,0 +1,59 @@
+package com.ssj.service.sys.imlibuser.service;
+
+import com.ssj.bean.sys.imlibuser.TbClass;
+import com.ssj.framework.core.common.service.BaseService;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+import java.util.Map;
+
+public interface TbClassService extends BaseService<TbClass, String> {
+	
+	 TbClass getTbClassByLibId(String libId,String className);
+	 TbClass getTbClassGradeByLibId(String libId,String grade,String className);
+	 
+	 Page<Map<String, Object>> findClassByPage(Map<String, Object> searchParam, Pageable pageable);
+
+	/**
+	 * 查询默认班级, 如果不存在,则新建
+	 * @param libId
+	 * @return
+	 */
+	TbClass getDefaultTbClassByLibId(String libId);
+
+	List<TbClass> getTbClassListByLibId(String libId);
+
+	List<TbClass> getTbClassSchoolNameByLibId(String libId);
+
+	List<TbClass> getTbClassListByClassName(String libId,String className);
+	
+	/*
+	 *创建默认班级时候, 同步学生数据
+	 */
+	void syncTbClassServiceByStudent(String libId,TbClass tbClass);
+	
+	/*
+	 * 创建默认班级时候,同步老师数据
+	 */
+	void syncTbClassServiceByTeacher(String libId,TbClass tbClass);
+
+	/**
+	 * 查找馆里默认班级
+	 * @param libId
+	 * @return
+	 */
+	TbClass findDefaultClass(String libId);
+
+	/**
+	 * 更新班级
+	 */
+	void updateByClassIdAndClassName(String classId,String className);
+
+
+	/**
+	 * 查询班级列表
+	 */
+
+	 
+}

+ 94 - 0
src/main/java/com/ssj/service/sys/imlibuser/service/TbClassStudentService.java

@@ -0,0 +1,94 @@
+package com.ssj.service.sys.imlibuser.service;
+
+import com.ssj.bean.common.framework.core.domain.Response;
+import com.ssj.bean.sys.imlibuser.TbClassStudent;
+import com.ssj.bean.weixin.libmy.domain.TbLibJoin;
+import com.ssj.framework.core.common.service.BaseService;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+import java.util.Map;
+
+public interface TbClassStudentService extends BaseService<TbClassStudent, String> {
+	
+	
+	 Page<Map<String, Object>> findLibImByPage(Map<String, Object> searchParam, Pageable pageable);
+	
+	 /**
+	  * 查询学生的分页
+	  * @param searchParam
+	  * @param pageable
+	  * @return
+	  */
+	 Page<Map<String, Object>> findStudentByPage(Map<String, Object> searchParam, Pageable pageable);
+	 
+	 
+	 TbClassStudent getTbClassTeacherByVipId(String classId,String vipId);	 
+	 
+	 //解绑
+	 void untyingTbClassTeacherByVipId(String vipId);	
+	 
+	 public TbLibJoin getTbLibJoinByLeagueName(String leagueName);
+
+	List<TbClassStudent> findByVipId(String vipId);
+
+	int  getTbClassStudentByClassId(String classId,String libId);
+
+    void updateTbClassTeacherByClassIdAndVipIdsAndLibId(String classId,List<String>vipIds,String libId);
+
+	/**
+	 * 找到某校区的小孩
+	 * @param libId
+	 * @param vipId
+	 * @return
+	 */
+	TbClassStudent findByLibIdAndVipId(String libId, String vipId);
+
+	/**
+	 * 查询学生与馆机构内班级的关联记录
+	 * @param vipId 学生id
+	 * @param status 状态
+	 * @return 绑定记录列表
+	 */
+	List<TbClassStudent> findByVipIdAndStatus(String vipId, int status);
+
+	/**
+	 * 删除班级里的学生
+	 */
+	void deleteByLibIdAndClassId(String libId,String classId);
+
+	/**
+	 * 将管里该学生设置为无效
+	 */
+	void updateByVipIdAndLibId(String vipId,String libId);
+
+	/**
+	 * 更换某个学生的班级
+	 */
+	void updateTbClassStudentByClassIdAndVipIdAndLibId(String classId,String vipId,String libId);
+
+
+	/**
+	 * 查询学生的班级
+	 */
+	TbClassStudent findByVipIdAndLibId(String vipId,String libId);
+
+	/**
+	 * 查询失效的学生
+	 * @param params
+	 * @param initPage
+	 * @return
+	 */
+    Page<Map<String, Object>> findInvalidStudentByPage(Map<String, Object> params, Pageable initPage);
+
+	/**
+	 * 删除学生
+	 * @param libId
+	 * @param vipId
+	 * @return
+	 */
+	Response delStudent(String libId, String vipId);
+
+
+}

+ 11 - 0
src/main/java/com/ssj/service/sys/imlibuser/service/TbClassStudentTempService.java

@@ -0,0 +1,11 @@
+package com.ssj.service.sys.imlibuser.service;
+
+import com.ssj.bean.sys.imlibuser.TbClassStudentTemp;
+import com.ssj.framework.core.common.service.BaseService;
+
+public interface TbClassStudentTempService extends BaseService<TbClassStudentTemp, String> {
+	
+	
+	 
+	
+}

+ 151 - 0
src/main/java/com/ssj/service/sys/imlibuser/service/impl/TbClassServiceImpl.java

@@ -0,0 +1,151 @@
+package com.ssj.service.sys.imlibuser.service.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ssj.bean.sys.imlibuser.TbClass;
+import com.ssj.bean.sys.imlibuser.TbClassStudent;
+import com.ssj.bean.sys.imlibuser.TbClassTeacher;
+import com.ssj.bean.weixin.libmy.domain.LibVip;
+import com.ssj.bean.weixin.libmy.domain.TbLibManager;
+import com.ssj.dao.sys.imlibuser.dao.TbClassDao;
+import com.ssj.dao.sys.imlibuser.dao.TbClassQueryDao;
+import com.ssj.framework.core.common.service.BaseServiceImpl;
+import com.ssj.framework.core.util.Constant;
+import com.ssj.service.sys.imlibuser.service.TbClassService;
+import com.ssj.service.sys.imlibuser.service.TbClassStudentService;
+import com.ssj.service.weixin.library.service.IBookManagerService;
+import com.ssj.service.weixin.library.service.ILibVipService;
+
+@Service
+@Transactional
+public class TbClassServiceImpl extends BaseServiceImpl<TbClass, String> implements TbClassService {
+
+	@Autowired
+	private TbClassDao dao;
+	
+	@Autowired
+	private TbClassQueryDao libImQueryDao;
+	
+	@Autowired
+	private ILibVipService libVipService;
+	
+	@Autowired
+	private IBookManagerService managerService;
+	
+	@Autowired
+	private TbClassStudentService tbClassStudentService;
+	
+	
+	@Override
+	public PagingAndSortingRepository<TbClass, String> getDao() {
+		return dao;
+	}
+
+
+	@Override
+	public TbClass getTbClassByLibId(String libId, String className) {
+		return dao.getTbClassByLibId(libId, className);
+	}
+	
+	@Override
+	public TbClass getTbClassGradeByLibId(String libId,String grade,String className){
+		return dao.getTbClassGradeByLibId(libId, grade,className);
+	}
+
+	@Override
+	public Page<Map<String, Object>> findClassByPage(Map<String, Object> searchParam, Pageable pageable) {
+		return libImQueryDao.findClassByPage(searchParam, pageable);
+	}
+
+	@Override
+	public TbClass getDefaultTbClassByLibId(String libId) {
+		TbClass tbClass = dao.getDefaultTbClassByLibId(libId);
+		if(tbClass==null) {
+			tbClass=new TbClass();
+			tbClass.setLibId(libId);
+			tbClass.setClassName("一班");
+			tbClass.setCreateTime(new Date());
+			tbClass.setStatus(2);
+			tbClass=this.save(tbClass);
+			
+			//同步旧数据
+			this.syncTbClassServiceByStudent(libId, tbClass);
+			this.syncTbClassServiceByTeacher(libId, tbClass);
+		}
+		return tbClass;
+	}
+
+	@Override
+	public List<TbClass> getTbClassListByLibId(String libId){
+		return dao.findTbClassListByLibId(libId);
+	}
+
+	@Override
+	public List<TbClass> getTbClassSchoolNameByLibId(String libId){
+		return dao.findTbClassSchoolNameByLibId(libId);
+	}
+
+	@Override
+	public List<TbClass> getTbClassListByClassName(String libId,String className){
+		return dao.findTbClassByLibIdAndClassName(libId,className);
+	}
+
+
+	@Override
+	public void syncTbClassServiceByStudent(String libId, TbClass tbClass) {
+		List<TbClassStudent> tbClassStudents=new ArrayList<TbClassStudent>();
+		TbClassStudent tbClassStudent=null;
+		List<LibVip> libVips=libVipService.findByLibId(libId);
+		if(libVips!=null) {
+			for (LibVip libVip : libVips) {
+				tbClassStudent=new TbClassStudent();
+				tbClassStudent.setClassId(tbClass.getId());
+				tbClassStudent.setCreateTime(new Date());
+				tbClassStudent.setLibId(libId);
+				tbClassStudent.setStatus(1);
+				tbClassStudent.setVipId(libVip.getId());
+				tbClassStudents.add(tbClassStudent);
+			}
+			tbClassStudentService.save(tbClassStudents);
+		}
+	}
+
+
+	@Override
+	public void syncTbClassServiceByTeacher(String libId, TbClass tbClass) {
+		List<TbClassTeacher> tbClassTeachers=new ArrayList<TbClassTeacher>();
+		TbClassTeacher tbClassTeacher=null;
+		List<TbLibManager> tbLibManagers=managerService.findTbLibManagerByLibId(libId,  Constant.ORG_TEACHER_TYPE,1);
+		if(tbLibManagers!=null) {
+			for (TbLibManager tbLibManager : tbLibManagers) {
+				tbClassTeacher=new TbClassTeacher();
+				tbClassTeacher.setClassId(tbClass.getId());
+				tbClassTeacher.setCreateTime(new Date());
+				tbClassTeacher.setLibId(libId);
+				tbClassTeacher.setStatus(1);
+				tbClassTeacher.setTeacherId(tbLibManager.getUserId());
+				tbClassTeachers.add(tbClassTeacher);
+			}
+		}
+	}
+
+	@Override
+	public TbClass findDefaultClass(String libId) {
+		return dao.findTopByLibIdAndStatus(libId, 2);
+	}
+
+	@Override
+	public void updateByClassIdAndClassName(String classId,String className){
+		  dao.updateByClassIdAndClassName(classId,className);
+	}
+}

+ 160 - 0
src/main/java/com/ssj/service/sys/imlibuser/service/impl/TbClassStudentServiceImpl.java

@@ -0,0 +1,160 @@
+package com.ssj.service.sys.imlibuser.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ssj.bean.common.framework.core.domain.Response;
+import com.ssj.bean.sys.imlibuser.TbClassStudent;
+import com.ssj.bean.weixin.libmy.domain.LibVip;
+import com.ssj.bean.weixin.libmy.domain.TbLibJoin;
+import com.ssj.dao.sys.imlibuser.dao.TbClassQueryDao;
+import com.ssj.dao.sys.imlibuser.dao.TbClassStudentDao;
+import com.ssj.framework.core.common.service.BaseServiceImpl;
+import com.ssj.service.sys.imlibuser.service.TbClassStudentService;
+import com.ssj.service.weixin.library.service.ILibVipService;
+import com.ssj.service.weixin.user.service.UserService;
+
+@Service
+@Transactional
+public class TbClassStudentServiceImpl extends BaseServiceImpl<TbClassStudent, String> implements TbClassStudentService {
+
+	@Autowired
+	private TbClassStudentDao dao;
+	
+	@Autowired
+	private TbClassQueryDao queryDao;
+
+	@Autowired
+	private ILibVipService vipService;
+
+	@Autowired
+	private UserService userService;
+
+	@Override
+	public PagingAndSortingRepository<TbClassStudent, String> getDao() {
+		return dao;
+	}
+
+	
+	@Override
+	public Page<Map<String, Object>> findLibImByPage(
+			Map<String, Object> searchParam, Pageable pageable) {
+		return queryDao.findLibImByPage(searchParam, pageable);
+	}
+
+	@Override
+	public Page<Map<String, Object>> findStudentByPage(
+			Map<String, Object> searchParam, Pageable pageable) {
+		return queryDao.findStudentByPage(searchParam, pageable);
+	}
+
+
+	@Override
+	public TbClassStudent getTbClassTeacherByVipId(String classId, String vipId) {
+		return dao.getTbClassTeacherByVipId(classId, vipId);
+	}
+
+
+	@Override
+	public void untyingTbClassTeacherByVipId(String vipId) {
+		LibVip libVip=vipService.getById(vipId);
+		if(libVip!=null && StringUtils.isNotEmpty(libVip.getDerver())){
+			
+		}
+	}
+
+
+	@Override
+	public TbLibJoin getTbLibJoinByLeagueName(String leagueName) {
+		return queryDao.getTbLibJoinByLeagueName(leagueName);
+	}
+
+	@Override
+	public List<TbClassStudent> findByVipId(String vipId) {
+		return dao.findByVipId(vipId);
+	}
+
+	@Override
+	public int getTbClassStudentByClassId(String calssId,String libId) {
+		return dao.getTbClassStudentByClassId(calssId, libId);
+	}
+
+	@Override
+	public void updateTbClassTeacherByClassIdAndVipIdsAndLibId(String classId,List<String>vipIds,String libId){
+		dao.updateTbClassStudentByVipIdsAndClassIdAndlibId(classId,vipIds,libId);
+	}
+
+	@Override
+	public TbClassStudent findByLibIdAndVipId(String libId, String vipId) {
+		return dao.findTopByLibIdAndVipIdAndStatus(libId, vipId, 1);
+	}
+
+	@Override
+	public List<TbClassStudent> findByVipIdAndStatus(String vipId, int status) {
+		return dao.findByVipIdAndStatus(vipId, status);
+	}
+
+	@Override
+	public void deleteByLibIdAndClassId(String libId, String classId) {
+		 dao.deleteByLibIdAndClassId(libId, classId);
+	}
+
+
+	@Override
+	public void updateByVipIdAndLibId(String vipId, String libId) {
+		dao.updateByVipIdAndLibId(vipId, libId);
+	}
+
+	@Override
+	public  void updateTbClassStudentByClassIdAndVipIdAndLibId(String classId,String vipId,String libId){
+		dao.updateTbClassStudentByVipIdAndClassIdAndLibId(classId,vipId,libId);
+	}
+
+	@Override
+	public TbClassStudent findByVipIdAndLibId(String vipId,String libId){
+	 return 	dao.findByVipIdAndLibId(vipId,libId);
+	}
+
+	@Override
+	public Page<Map<String, Object>> findInvalidStudentByPage(Map<String, Object> params, Pageable initPage) {
+		return queryDao.findInvalidStudentByPage(params,initPage);
+	}
+
+	@Override
+	public Response delStudent(String libId, String vipId) {
+		//先检查数据是否可以删除
+		LibVip vip = vipService.getById(vipId);
+		Response response = new Response();
+//		check(vip,response);
+//		if(!response.getMeta().isSuccess()){
+//			return  response;
+//		}
+		//查询vipId 是否有S003,'C024','C025'外的服务
+        int count = dao.findServiceNotAny(vipId,libId);
+		if(count==0){
+			//删除user表数据
+			if(StringUtils.isNotBlank(vip.getChildUserId())){
+				userService.delete(vip.getChildUserId());
+			}
+			//删除vip表数据 ?
+			vipService.delete(vipId);
+		}
+		//删除service表数据S003,'C024','C025'
+		dao.delVipServiceData(vipId,libId);
+		//删除student表数据
+		dao.delStudentData(vipId,libId);
+		return response.success();
+	}
+
+
+
+
+}

+ 39 - 1
src/main/java/com/ssj/service/weixin/sales/service/impl/LibOrderDetailsServiceImpl.java

@@ -27,6 +27,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.alibaba.fastjson.JSON;
 import com.ssj.bean.sys.codeexchange.CodeExchange;
+import com.ssj.bean.sys.imlibuser.TbClass;
+import com.ssj.bean.sys.imlibuser.TbClassStudent;
 import com.ssj.bean.weixin.card.domain.LibCardDetail;
 import com.ssj.bean.weixin.libmy.domain.LibVip;
 import com.ssj.bean.weixin.libmy.domain.TbLibJoin;
@@ -49,6 +51,8 @@ import com.ssj.framework.core.util.SystemResourceLocator;
 import com.ssj.framework.idworker.IdWorker;
 import com.ssj.framework.weixin.util.DateUtil;
 import com.ssj.service.sys.codeexchange.CodeExchangeService;
+import com.ssj.service.sys.imlibuser.service.TbClassService;
+import com.ssj.service.sys.imlibuser.service.TbClassStudentService;
 import com.ssj.service.weixin.card.service.ILibCardService;
 import com.ssj.service.weixin.library.service.IBookManagerService;
 import com.ssj.service.weixin.library.service.ILibJoinService;
@@ -114,6 +118,10 @@ public class LibOrderDetailsServiceImpl extends BaseServiceImpl<LibOrderDetails,
 	private IBookManagerService  managerService;
 	@Autowired
 	private CodeExchangeService codeExchangeService;
+	@Autowired
+	private TbClassService tbClassService;
+	@Autowired
+	private TbClassStudentService tbClassStudentService;
 	
 	@Override
 	public PagingAndSortingRepository<LibOrderDetails, String> getDao() {
@@ -1488,7 +1496,12 @@ public class LibOrderDetailsServiceImpl extends BaseServiceImpl<LibOrderDetails,
 		
 		Integer number = libOrderDetails.getNumber();
 		
-		LibVip libVip=vipService.findByUserIdAndChildName(libOrderDetails.getUserId(), libOrderDetails.getChildName());
+		LibVip libVip=null;
+		List<LibVip> libVips=vipService.findByUserIdAndChildNames(libOrderDetails.getUserId(), libOrderDetails.getChildName());
+		if (libVips!=null && libVips.size()>=1) {
+			libVip=libVips.get(0);
+		}
+		
 		if(libVip==null) {
 			User studentUser=new User();
 			studentUser.setId(IdWorker.generateId());
@@ -1535,6 +1548,31 @@ public class LibOrderDetailsServiceImpl extends BaseServiceImpl<LibOrderDetails,
 			}
 			this.save(libOrderDetails);
 			
+			
+			//没有班级信息的,不关联班级信息
+			if(StringUtils.isNotEmpty(libOrderDetails.getClassName())) {
+				TbClass tbClass=tbClassService.getTbClassGradeByLibId(libOrderDetails.getLibId(),libOrderDetails.getGrade(), libOrderDetails.getClassName());
+				if(tbClass==null) {
+					tbClass=new TbClass();
+					tbClass.setLibId(libOrderDetails.getLibId());
+					tbClass.setClassName(libOrderDetails.getClassName());
+					tbClass.setGrade(libOrderDetails.getGrade());
+					tbClass.setCreateTime(new Date());
+					tbClass.setStatus(1);
+					tbClass=tbClassService.save(tbClass);
+				}
+				TbClassStudent tbClassStudent=tbClassStudentService.getTbClassTeacherByVipId(tbClass.getId(), libVip.getId());
+				if(tbClassStudent==null) {
+					tbClassStudent=new TbClassStudent();
+					tbClassStudent.setLibId(libJoin.getId());	
+					tbClassStudent.setClassId(tbClass.getId());
+					tbClassStudent.setVipId(libVip.getId());
+					tbClassStudent.setStatus(1);
+					tbClassStudent.setCreateTime(new Date());
+					tbClassStudentService.save(tbClassStudent);
+				}
+			}
+			
 			//给学生增加一个默认的永久校区批改服务
 			libVipServiceService.insertLibServiceByType(libVip.getId(), libJoin.getId(), libOrderDetails.getEndTime(), libJoin.getSignType());
             

+ 3 - 1
src/main/java/com/ssj/weixin/payment/controller/PaymentController.java

@@ -1150,11 +1150,13 @@ public class PaymentController extends BaseController {
 		User user=UserUtil.getUser(request);
 		TbLibJoin tbLibJoin=joinService.getById(libId);
 		
+		
 		model.addAttribute("grade", sortService.getParamValByCode("grade"));//年级
+		model.addAttribute("area", cnAreaService.findByTypeList("4"));//学校
+		
 		model.addAttribute("libId", libId);
 		model.addAttribute("user", user);
 		model.addAttribute("tbLibJoin", tbLibJoin);
-		
 		model.addAttribute("specieList", specieList);
 
 		return "weixin/vip/serviceVipBuy";

+ 1 - 1
src/main/resources/templates/weixin/vip/serviceBuyOk.html

@@ -36,7 +36,7 @@
 				<div class="panel panelshodow">
 					<div class="txt" >
 						<p >
-							<img  src="https://www.sharingschool.com/img/hover-icon%20(4).ba432094.png">
+							<img src="https://www.sharingschool.com/img/hover-icon%20(3).50fe7d8f.png">
 						</p>
 						下载后直接用填写的手机号即可登录
 					</div>

+ 20 - 7
src/main/resources/templates/weixin/vip/serviceVipBuy.html

@@ -46,18 +46,26 @@
 						</div>
 					</div>
 				</div>
+				
+				<div class="lineform" >
+					<div class="dc_flex">
+						<div class="type">所读班级</div>
+						<div class="dc_hd"><input type="tel" name="className" id="className"  placeholder="所读班级"/></div>
+					</div>
+				</div>
+				
 				<div class="lineform">
 					<div class="dc_flex">
 						<div class="type">家长姓名</div>
 						<div class="dc_hd"><input type="text" name="parentName" id="parentName" placeholder="请输入家长姓名"/></div>
 					</div>
 				</div>
-<!-- 				<div class="lineform"> -->
-<!-- 					<div class="dc_flex"> -->
-<!-- 						<div class="type">手机号码</div> -->
-<!-- 						<div class="dc_hd"><input type="tel" name="phone" id="phone" placeholder="请输入家长手机号码"/></div> -->
-<!-- 					</div> -->
-<!-- 				</div> -->
+				<div class="lineform" style="display: none">
+					<div class="dc_flex">
+						<div class="type">手机号码</div>
+						<div class="dc_hd"><input type="tel" name="phone" id="phone" th:value="${user.mobile}" placeholder="请输入家长手机号码"/></div>
+					</div>
+				</div>
 				<div class="lineform">
 					<div class="dc_flex">
 						<div class="type">家长角色</div>
@@ -78,9 +86,14 @@
 				<div class="lineform">
 					<div class="dc_flex">
 						<div class="type">所读学校</div>
-						<div class="dc_hd"><input class="wsinput" type="text" placeholder="请输入所读学校" id="school" name="school" value=""/></div>
+						<div class="dc_hd" >
+							<select name="school" id="school" style="height: 40px;    width: 192px;">
+								<option th:value="${list.name}" th:each="list:${area}" th:text="${list.name}"></option>
+							</select>
+						</div>
 					</div>
 				</div>
+				
 			</div>
 			
 			<div class="panel">