Kaynağa Gözat

Merge branch 'master' of http://git.dayaedu.com/yonge/mec into zouxuan

zouxuan 5 yıl önce
ebeveyn
işleme
fafc1fbf2e
17 değiştirilmiş dosya ile 112 ekleme ve 24 silme
  1. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  2. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/Student4operating.java
  3. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  4. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentOperatingQueryInfo.java
  5. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  6. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  7. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  8. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OnlineMusicGroupServiceImpl.java
  10. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  11. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  12. 10 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultMusicGroupSalaryServiceImpl.java
  13. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  14. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  15. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  16. 33 2
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  17. 7 2
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -95,4 +95,16 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
                                            @Param("serviceTag") Integer serviceTag,
                                            @Param("operatingTag") Integer operatingTag);
 
+    /**
+     * @describe 更新指定学员的服务指标
+     * @author Joburgess
+     * @date 2020.05.28
+     * @param studentId: 学生编号
+     * @param serviceTag: 服务指标
+     * @return int
+     */
+    int updateStudentServiceTag(@Param("studentId") Integer studentId,
+                                           @Param("studentIds") List<Integer> studentIds,
+                                           @Param("serviceTag") Integer serviceTag);
+
 }

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/Student4operating.java

@@ -14,11 +14,13 @@ public class Student4operating {
     private Integer vipTimes;
     private Integer freePracticeTimes;
     private Integer buyPracticeTimes;
+    private Integer musicNetWorkTimes;
 
     private String operatingTagStr;
     private String vipTimesStr;
     private String freePracticeTimesStr;
     private String buyPracticeTimesStr;
+    private String musicNetWorkTimesStr;
     private Integer studentNum;
 
     public String getOrganName() {
@@ -145,4 +147,20 @@ public class Student4operating {
 	public void setStudentNum(Integer studentNum) {
 		this.studentNum = studentNum;
 	}
+
+    public Integer getMusicNetWorkTimes() {
+        return musicNetWorkTimes;
+    }
+
+    public void setMusicNetWorkTimes(Integer musicNetWorkTimes) {
+        this.musicNetWorkTimes = musicNetWorkTimes;
+    }
+
+    public String getMusicNetWorkTimesStr() {
+        return musicNetWorkTimesStr;
+    }
+
+    public void setMusicNetWorkTimesStr(String musicNetWorkTimesStr) {
+        this.musicNetWorkTimesStr = musicNetWorkTimesStr;
+    }
 }

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -56,7 +56,7 @@ public class StudentManageListDto {
 
     private Integer organId;
 
-    private YesOrNoEnum serviceTag;
+    private Integer serviceTag;
 
     private YesOrNoEnum operatingTag;
 
@@ -74,11 +74,11 @@ public class StudentManageListDto {
     
     private Integer teacherId;
 
-    public YesOrNoEnum getServiceTag() {
+    public Integer getServiceTag() {
         return serviceTag;
     }
 
-    public void setServiceTag(YesOrNoEnum serviceTag) {
+    public void setServiceTag(Integer serviceTag) {
         this.serviceTag = serviceTag;
     }
 

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentOperatingQueryInfo.java

@@ -27,6 +27,9 @@ public class StudentOperatingQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "是否有收费网管课")
     private Integer HasBuyPractice;
 
+    @ApiModelProperty(value = "是否有乐团网管课")
+    private Integer hasMusicNetWork;
+
     public String getOrganId() {
         return organId;
     }
@@ -74,4 +77,12 @@ public class StudentOperatingQueryInfo extends QueryInfo {
     public void setHasBuyPractice(Integer hasBuyPractice) {
         HasBuyPractice = hasBuyPractice;
     }
+
+    public Integer getHasMusicNetWork() {
+        return hasMusicNetWork;
+    }
+
+    public void setHasMusicNetWork(Integer hasMusicNetWork) {
+        this.hasMusicNetWork = hasMusicNetWork;
+    }
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -2097,7 +2097,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         if (!CollectionUtils.isEmpty(studentList)) {
             List<Integer> studentIds = studentList.stream().map(StudentRegistration::getUserId).collect(Collectors.toList());
-            studentDao.updateStudentServiceOrOperatingTag(null, studentIds, YesOrNoEnum.YES.getCode(), null);
+            studentDao.updateStudentServiceTag(null, studentIds, YesOrNoEnum.YES.getCode());
         }
 
         return classGroup;

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -299,7 +299,7 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
             courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
 
             List<Integer> studentIds = userIdStrSet.stream().map(e -> Integer.parseInt(e)).collect(Collectors.toList());
-            studentDao.updateStudentServiceOrOperatingTag(null,studentIds, YesOrNoEnum.YES.getCode(),null);
+            studentDao.updateStudentServiceTag(null,studentIds, YesOrNoEnum.YES.getCode());
         }
 
         //乐团在合奏班

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java

@@ -605,7 +605,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             e.printStackTrace();
         }
 
-        studentDao.updateStudentServiceOrOperatingTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+        studentDao.updateStudentServiceTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         imGroupMemberList.add(new ImGroupMember(practiceGroup.getUserId().toString()));
@@ -1145,7 +1145,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             e.printStackTrace();
         }
 
-        studentDao.updateStudentServiceOrOperatingTag(practiceGroupBuyParams.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+        studentDao.updateStudentServiceTag(practiceGroupBuyParams.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         if(Objects.nonNull(practiceGroupBuyParams.getEducationalTeacherId())){

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -1045,8 +1045,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("三方乐团,不推送报名信息");
         }
         List<HighClassGroupDto> highClassGroup = classGroupDao.findHighClassGroup(musicGroupId, classGroupIds);
+
         if(classGroupIds != null && !classGroupIds.isEmpty()){
-            highClassGroup =  highClassGroup.stream().filter(e->e.getTotalClassTimes().equals(0)).collect(Collectors.toList());
+            List<Integer> classGroupSet = highClassGroup.stream().map(HighClassGroupDto::getId).collect(Collectors.toList());
+            Map<Integer, Long> totalNumMap = MapUtil.convertIntegerMap(courseScheduleDao.countTotalNumByClassGroupId(classGroupSet, null));
+            highClassGroup.removeIf(next -> totalNumMap.get(next.getId()) != null && totalNumMap.get(next.getId()) > 0);
         }
         Set<ClassGroupTypeEnum> classGroupTypeSet = highClassGroup.stream().map(HighClassGroupDto::getType).collect(Collectors.toSet());
         String HighClassGroupSubjectIds = highClassGroup.stream().filter(e -> e.getType().equals(ClassGroupTypeEnum.HIGH)).map(HighClassGroupDto::getSubjectIdList).collect(Collectors.joining(","));

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OnlineMusicGroupServiceImpl.java

@@ -282,7 +282,7 @@ public class OnlineMusicGroupServiceImpl implements OnlineMusicGroupService {
             e.printStackTrace();
         }
 
-        studentDao.updateStudentServiceOrOperatingTag(onlineMusicGroupCourseInfo.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+        studentDao.updateStudentServiceTag(onlineMusicGroupCourseInfo.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         if(Objects.nonNull(musicGroup.getEducationalTeacherId())){

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -2114,7 +2114,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             }
         }
 
-        studentDao.updateStudentServiceOrOperatingTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+        studentDao.updateStudentServiceTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         if(Objects.nonNull(practiceGroup.getEducationalTeacherId())){
@@ -3285,7 +3285,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             e.printStackTrace();
         }
 
-        studentDao.updateStudentServiceOrOperatingTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+        studentDao.updateStudentServiceTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         if(Objects.nonNull(practiceGroup.getEducationalTeacherId())){

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -422,10 +422,10 @@ public class StudentManageServiceImpl implements StudentManageService {
         Student student = new Student(userId, studentRegistrationDao.getSubjectIds(userId));
         student.setOperatingTag(sysUser.getOperatingTag());
     	student.setOperatingTempTag(0);
-        student.setServiceTag(sysUser.getServiceTag());
+        student.setServiceTag(sysUser.getServiceTag()==0?2:1);
         student.setTeacherId(sysUser.getTeacherId());
         studentService.upSet(student);
-        if(new Integer(0).equals(student.getServiceTag())){
+        if(new Integer(2).equals(student.getServiceTag())){
             studentExtracurricularExercisesSituationDao.deleteByStudent(sysUser.getId());
         }
         return userId;

+ 10 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultMusicGroupSalaryServiceImpl.java

@@ -30,6 +30,7 @@ import com.ym.mec.biz.dal.enums.TeachTypeEnum;
 import com.ym.mec.biz.service.TeacherDefaultMusicGroupSalaryService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.date.DateUtil;
 
@@ -123,7 +124,7 @@ public class TeacherDefaultMusicGroupSalaryServiceImpl extends BaseServiceImpl<L
 								BigDecimal duration = new BigDecimal(DateUtil.minutesBetween(ts.getCourseSchedule().getStartClassTime(), ts.getCourseSchedule()
 										.getEndClassTime()));
 								int mins = 0;
-								if(tdms.getCourseScheduleType() == CourseScheduleType.HIGH_ONLINE) {
+								if(tdms.getCourseScheduleType() == CourseScheduleType.HIGH_ONLINE || tdms.getCourseScheduleType() == CourseScheduleType.MUSIC_NETWORK) {
 									if (!classGroupStudentNumMap.containsKey(ts.getClassGroupId())) {
 										// 查询 班级人数
 										String[] strs = classGroupStudentMapperDao.findStudentNumByClassGroupId(ts.getClassGroupId());
@@ -132,7 +133,14 @@ public class TeacherDefaultMusicGroupSalaryServiceImpl extends BaseServiceImpl<L
 									String salaryRuleJson = tdms.getSalaryRuleJson();
 									if (StringUtils.isNotBlank(salaryRuleJson)) {
 										JSONObject obj = JSON.parseObject(salaryRuleJson);
-										ts.setExpectSalary(new BigDecimal(obj.getDouble(classGroupStudentNumMap.get(ts.getClassGroupId()) + "")));
+										if(obj == null){
+											throw new BizException("课酬设置不完整");
+										}
+										Integer studentNum = classGroupStudentNumMap.get(ts.getClassGroupId());
+										if(studentNum == null || studentNum == 0){
+											studentNum = 1;
+										}
+										ts.setExpectSalary(new BigDecimal(obj.getDouble(studentNum + "")));
 										list.add(ts);
 									}
 									

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1140,7 +1140,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				e.printStackTrace();
 			}
 			imGroupMemberList.add(new ImGroupMember(classGroupStudent.getUserId().toString()));
-			studentDao.updateStudentServiceOrOperatingTag(classGroupStudent.getUserId(), null, YesOrNoEnum.YES.getCode(),null);
+			studentDao.updateStudentServiceTag(classGroupStudent.getUserId(), null, YesOrNoEnum.YES.getCode());
 		}
 
 		try {
@@ -2711,7 +2711,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(),null);
 
-		studentDao.updateStudentServiceOrOperatingTag(null, studentIds, YesOrNoEnum.YES.getCode(),null);
+		studentDao.updateStudentServiceTag(null, studentIds, YesOrNoEnum.YES.getCode());
 
 		try {
 			ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -214,7 +214,7 @@
 			FROM
 				student_extracurricular_exercises_situation_ sees
 				LEFT JOIN sys_user stu ON stu.id_=sees.student_id_
-		LEFT JOIN teacher t ON t.id_=sees.teacher_id_
+				LEFT JOIN teacher t ON t.id_=sees.teacher_id_
 				LEFT JOIN sys_user tea ON tea.id_=sees.teacher_id_
 				LEFT JOIN organization o ON stu.organ_id_=o.id_
 			WHERE

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -115,7 +115,7 @@
         SELECT su.id_ user_id_,su.username_,su.gender_,su.phone_ parents_phone_,su.real_name_,
         su.birthdate_,su.nation_,su.organ_id_,
         CASE WHEN su.password_ IS NULL THEN 0 ELSE 1 END isActive_,
-        st.service_tag_,st.operating_tag_,tu.real_name_ teacher_name_,st.teacher_id_
+        IF(st.service_tag_=2,0,st.service_tag_) service_tag_,st.operating_tag_,tu.real_name_ teacher_name_,st.teacher_id_
         FROM sys_user su
         LEFT JOIN student st ON st.user_id_ = su.id_
         left join sys_user tu on tu.id_ = st.teacher_id_
@@ -746,7 +746,7 @@
         <result property="organId" column="organ_id_"/>
         <result property="subjectName" column="music_group_subject_"/>
         <result property="courseBalance" column="course_balance_"/>
-        <result property="serviceTag" column="service_tag_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="serviceTag" column="service_tag_" />
         <result property="operatingTag" column="operating_tag_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="teacherName" column="teacher_name_"/>
         <result property="teacherId" column="teacher_id_"/>

+ 33 - 2
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -190,6 +190,27 @@
         </if>
     </update>
 
+    <update id="updateStudentServiceTag">
+        UPDATE student
+        <set>
+            <if test="serviceTag != null">
+                service_tag_ = #{serviceTag},
+            </if>
+            update_time_ = NOW()
+        </set>
+        WHERE
+            service_tag_=0
+        <if test="studentId!=null">
+            AND user_id_ = #{studentId}
+        </if>
+        <if test="studentIds!=null and studentIds.size()>0">
+            AND user_id_ IN
+            <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+                #{studentId}
+            </foreach>
+        </if>
+    </update>
+
     <resultMap id="student4operating" type="com.ym.mec.biz.dal.dto.Student4operating">
         <result column="organ_name_" property="organName"/>
         <result column="organ_id_" property="organId"/>
@@ -201,6 +222,7 @@
         <result column="vip_times_" property="vipTimes"/>
         <result column="free_practice_times_" property="freePracticeTimes"/>
         <result column="buy_practice_times_" property="buyPracticeTimes"/>
+        <result column="music_netWork_times_" property="musicNetWorkTimes"/>
         <result column="student_num_" property="studentNum"/>
     </resultMap>
 
@@ -214,6 +236,7 @@
         s.operating_tag_,
         a.vip_times_,
         a.buy_practice_times_,
+        a.music_netWork_times_,
         p.free_practice_times_
         FROM student s
         LEFT JOIN sys_user su ON s.user_id_ = su.id_
@@ -222,7 +245,8 @@
         LEFT JOIN (
         SELECT cssp.user_id_,
         SUM(case when (cs.group_type_ = 'VIP' AND cs.teach_mode_='ONLINE') then 1 ELSE 0 END) vip_times_,
-        SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_
+        SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_,
+        SUM(case when (cs.type_='MUSIC_NETWORK' OR cs.type_='HIGH_ONLINE') then 1 ELSE 0 END) music_netWork_times_
         FROM course_schedule_student_payment cssp
         LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
         LEFT JOIN practice_group pg ON pg.`id_` = cs.`music_group_id_` AND cs.`group_type_` = 'PRACTICE'
@@ -247,7 +271,8 @@
         LEFT JOIN (
         SELECT cssp.user_id_,
         SUM(case when (cs.group_type_ = 'VIP' AND cs.teach_mode_='ONLINE') then 1 ELSE 0 END) vip_times_,
-        SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_
+        SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_,
+        SUM(case when (cs.type_='MUSIC_NETWORK' OR cs.type_='HIGH_ONLINE') then 1 ELSE 0 END) music_netWork_times_
         FROM course_schedule_student_payment cssp
         LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
         LEFT JOIN practice_group pg ON pg.`id_` = cs.`music_group_id_` AND cs.`group_type_` = 'PRACTICE'
@@ -297,6 +322,12 @@
             <if test='hasBuyPractice != null and hasBuyPractice=="0"'>
                 AND (a.buy_practice_times_ =0 OR a.buy_practice_times_ IS NULL)
             </if>
+            <if test='hasMusicNetWork != null and hasMusicNetWork=="1"'>
+                AND a.music_netWork_times_ >=1
+            </if>
+            <if test='hasMusicNetWork != null and hasMusicNetWork=="0"'>
+                AND (a.music_netWork_times_ =0 OR a.music_netWork_times_ IS NULL)
+            </if>
         </where>
     </sql>
 

+ 7 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -1410,6 +1410,11 @@ public class ExportController extends BaseController {
             }else {
                 row.setVipTimesStr("否");
             }
+            if(row.getMusicNetWorkTimes() != null && row.getMusicNetWorkTimes() >0){
+                row.setMusicNetWorkTimesStr("是");
+            }else {
+                row.setMusicNetWorkTimesStr("否");
+            }
             if(row.getFreePracticeTimes() != null && row.getFreePracticeTimes() >0){
                 row.setFreePracticeTimesStr("是");
             }else {
@@ -1425,8 +1430,8 @@ public class ExportController extends BaseController {
         try {
 
             HSSFWorkbook workbook = POIUtil.exportExcel(
-                    new String[]{"分部", "学生", "学生编号", "指导老师","指导老师id", "参与运营指标", "有线上VIP课", "参与免费网管课", "有付费网管课"},
-                    new String[]{"organName", "studentName", "studentId", "teacherName","teacherId", "operatingTagStr", "vipTimesStr", "freePracticeTimesStr", "buyPracticeTimesStr"}, rows);
+                    new String[]{"分部", "学生", "学生编号", "指导老师","指导老师id", "参与运营指标", "有线上VIP课", "参与免费网管课", "有付费网管课","有乐团网管课"},
+                    new String[]{"organName", "studentName", "studentId", "teacherName","teacherId", "operatingTagStr", "vipTimesStr", "freePracticeTimesStr", "buyPracticeTimesStr","musicNetWorkTimes"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             ouputStream = response.getOutputStream();