Bladeren bron

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

周箭河 5 jaren geleden
bovenliggende
commit
fef5bddf9a
17 gewijzigde bestanden met toevoegingen van 278 en 88 verwijderingen
  1. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java
  2. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java
  3. 107 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/musicalListDetailDto.java
  4. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ClassGroupStudentStatusEnum.java
  5. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java
  6. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  7. 10 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  8. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  10. 58 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  11. 5 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  12. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  13. 15 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml
  14. 1 1
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  15. 0 1
      mec-im/src/main/java/com/ym/service/Impl/HereWhiteServiceImpl.java
  16. 1 1
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/TsignPlugin.java
  17. 37 70
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java

@@ -33,6 +33,16 @@ public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStud
     ClassGroupStudentMapper query(@Param("classGroupId") int classGroupId, @Param("userId") Integer userId);
 
     /**
+     * @describe 获取班级上的学员
+     * @author Joburgess
+     * @date 2019/12/18
+     * @param classGroupId: 班级编号
+     * @param userId: 学员编号
+     * @return com.ym.mec.biz.dal.entity.ClassGroupStudentMapper
+     */
+    ClassGroupStudentMapper findClassGroupStudent(@Param("classGroupId") int classGroupId, @Param("userId") Integer userId);
+
+    /**
      * 根据乐团编号删除指定学生
      *
      * @param musicGroupId 乐团编号

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.musicalListDetailDto;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.common.dal.BaseDAO;
@@ -43,4 +44,11 @@ public interface StudentPaymentOrderDetailDao extends BaseDAO<Long, StudentPayme
      * @return
      */
     List<StudentPaymentOrderDetail> findUserApplyOrder(@Param("userId") Integer userId, @Param("status") DealStatusEnum status);
+
+    /**
+     * 乐器采购清单明细
+     * @param musicGroupId
+     * @return
+     */
+    List<musicalListDetailDto> getMusicalListDetail(String musicGroupId);
 }

+ 107 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/musicalListDetailDto.java

@@ -0,0 +1,107 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
+
+import java.math.BigDecimal;
+
+public class musicalListDetailDto {
+    private Integer userId;
+
+    private String goodsNames;
+
+    private String musicGroupName;
+
+    private String username;
+
+    private String organName;
+
+    private KitGroupPurchaseTypeEnum kitGroupPurchaseTypeEnum;
+
+    private BigDecimal musicalAmount;
+
+    private BigDecimal accessoriesAmount;
+
+    private BigDecimal courseAmount;
+
+    private BigDecimal orderAmount;
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getGoodsNames() {
+        return goodsNames;
+    }
+
+    public void setGoodsNames(String goodsNames) {
+        this.goodsNames = goodsNames;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public KitGroupPurchaseTypeEnum getKitGroupPurchaseTypeEnum() {
+        return kitGroupPurchaseTypeEnum;
+    }
+
+    public void setKitGroupPurchaseTypeEnum(KitGroupPurchaseTypeEnum kitGroupPurchaseTypeEnum) {
+        this.kitGroupPurchaseTypeEnum = kitGroupPurchaseTypeEnum;
+    }
+
+    public BigDecimal getMusicalAmount() {
+        return musicalAmount;
+    }
+
+    public void setMusicalAmount(BigDecimal musicalAmount) {
+        this.musicalAmount = musicalAmount;
+    }
+
+    public BigDecimal getAccessoriesAmount() {
+        return accessoriesAmount;
+    }
+
+    public void setAccessoriesAmount(BigDecimal accessoriesAmount) {
+        this.accessoriesAmount = accessoriesAmount;
+    }
+
+    public BigDecimal getCourseAmount() {
+        return courseAmount;
+    }
+
+    public void setCourseAmount(BigDecimal courseAmount) {
+        this.courseAmount = courseAmount;
+    }
+
+    public BigDecimal getOrderAmount() {
+        return orderAmount;
+    }
+
+    public void setOrderAmount(BigDecimal orderAmount) {
+        this.orderAmount = orderAmount;
+    }
+}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ClassGroupStudentStatusEnum.java

@@ -3,7 +3,7 @@ package com.ym.mec.biz.dal.enums;
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum ClassGroupStudentStatusEnum implements BaseEnum<String, ClassGroupStudentStatusEnum> {
-    NORMAL("NORMAL", "在读"), LEAVE("LEAVE", "请假"), QUIT("QUIT", "退班");
+    NORMAL("NORMAL", "在读"), LEAVE("LEAVE", "请假"), QUIT("QUIT", "退班"), QUIT_SCHOOL("QUIT_SCHOOL","休学");
 
     private String code;
 

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderDetailService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.musicalListDetailDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
@@ -57,4 +58,10 @@ public interface StudentPaymentOrderDetailService extends BaseService<Long, Stud
      */
     List<StudentPaymentOrderDetail>findUserApplyOrder(Integer userId,DealStatusEnum status);
 
+    /**
+     * 乐器采购清单明细
+     * @param musicGroupId
+     * @return
+     */
+    List<musicalListDetailDto> getMusicalListDetail(String musicGroupId);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -229,6 +229,16 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
 	void applyRefundForStudent(Long vipGroupId, Integer studentId, BigDecimal amount);
 
 	/**
+	 * @describe 对某个学生退学
+	 * @author Joburgess
+	 * @date 2019/12/18
+	 * @param vipGroupId: vip课编号
+	 * @param studentId: 学生编号
+	 * @return void
+	 */
+	void quitForStudent(Long vipGroupId, Integer studentId);
+
+	/**
 	 * @describe 获取指定学生的剩余课时费用
 	 * @author Joburgess
 	 * @date 2019/11/15

+ 10 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java

@@ -81,14 +81,16 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
 	public PageInfo queryDetailPage(SporadicChargeInfoQueryInfo queryInfo) {
 		PageInfo<SporadicChargeInfo> pageInfo = queryPage(queryInfo);
 		List<SporadicChargeInfo> rows = pageInfo.getRows();
-		Set<Integer> organIds = rows.stream().map(e -> e.getOrganId()).collect(Collectors.toSet());
-		Set<Integer> operatorIds = rows.stream().map(e -> e.getOperatorId()).collect(Collectors.toSet());
-        Map<Integer,String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMap(StringUtils.join(organIds,",")));
-        Map<Integer,String> OperatorNames = MapUtil.convertMybatisMap(teacherDao.queryNameByIds(StringUtils.join(operatorIds,",")));
-		rows.forEach(e->{
-			e.setOrganName(organNames.get(e.getOrganId()));
-			e.setOperatorName(OperatorNames.get(e.getOperatorId()));
-		});
+		if(rows != null && rows.size() > 0){
+			Set<Integer> organIds = rows.stream().map(e -> e.getOrganId()).collect(Collectors.toSet());
+			Set<Integer> operatorIds = rows.stream().map(e -> e.getOperatorId()).collect(Collectors.toSet());
+			Map<Integer,String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMap(StringUtils.join(organIds,",")));
+			Map<Integer,String> OperatorNames = MapUtil.convertMybatisMap(teacherDao.queryNameByIds(StringUtils.join(operatorIds,",")));
+			rows.forEach(e->{
+				e.setOrganName(organNames.get(e.getOrganId()));
+				e.setOperatorName(OperatorNames.get(e.getOperatorId()));
+			});
+		}
 		return pageInfo;
 	}
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -8,6 +8,7 @@ import java.util.Map;
 
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dto.musicalListDetailDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.service.MusicGroupService;
 import org.apache.commons.lang3.StringUtils;
@@ -158,4 +159,9 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
     public List<StudentPaymentOrderDetail> findUserApplyOrder(Integer userId, DealStatusEnum status) {
         return studentPaymentOrderDetailDao.findUserApplyOrder(userId, status);
     }
+
+    @Override
+    public List<musicalListDetailDto> getMusicalListDetail(String musicGroupId) {
+        return studentPaymentOrderDetailDao.getMusicalListDetail(musicGroupId);
+    }
 }

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

@@ -215,7 +215,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			List<StudentCourseHomework> studentCourseHomeworks = studentCourseHomeworkDao
 					.constructInitialStudentHomeworkRecordsWithPayment(teacherAttendance.getCourseScheduleId(),
 							courseHomework.getId());
-			if(!CollectionUtils.isEmpty(studentCourseHomeworks)){
+			if(CollectionUtils.isEmpty(studentCourseHomeworks)){
 				throw new BizException("此课程没有学生");
 			}
 			studentCourseHomeworkDao.batchInsertStudentCourseHomeworkRecord(studentCourseHomeworks);

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

@@ -169,8 +169,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo();
 
-        if(Objects.nonNull(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice())
-            &&Objects.nonNull(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice())){
+        if(Objects.isNull(vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice())
+            &&Objects.isNull(vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice())){
             throw new BizException("请设置教师课酬");
         }
 
@@ -1290,8 +1290,62 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
         courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(),-1);
 
-//		classGroup.setStudentNum(classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId()));
-//		classGroupDao.update(classGroup);
+		//学员退出班级群
+		ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(studentId.toString())};
+		imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, null));
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void quitForStudent(Long vipGroupId, Integer studentId) {
+		if(Objects.isNull(vipGroupId)||Objects.isNull(studentId)){
+			throw new BizException("请指定小课与学生");
+		}
+		VipGroup vipGroup=vipGroupDao.get(vipGroupId);
+		if(Objects.isNull(vipGroup)){
+			throw new BizException("指定的课程不存在");
+		}
+		if(vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL)){
+			throw new BizException("不能对已停止的课程进行此操作");
+		}
+		if(vipGroup.getStatus().equals(VipGroupStatusEnum.FINISHED)){
+			throw new BizException("此课程已结束");
+		}
+		List<StudentApplyRefunds> studentApplyRefunds = studentApplyRefundsDao.findByGroupAndUser(vipGroupId.toString(), GroupType.VIP.getCode(), studentId);
+		if(!CollectionUtils.isEmpty(studentApplyRefunds)){
+			throw new BizException("此学生存在退课申请,请到系统日志中查看");
+		}
+
+		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroupId, null);
+
+		ClassGroupStudentMapper classStudentMapperByUserIdAndClassGroupId = classGroupStudentMapperDao.query(classGroup.getId(),
+				studentId);
+
+		if(Objects.isNull(classStudentMapperByUserIdAndClassGroupId)){
+			throw new BizException("指定学生不在此课程中");
+		}
+
+		if(classStudentMapperByUserIdAndClassGroupId.getStatus().equals(ClassGroupStudentStatusEnum.QUIT)){
+			throw new BizException("当前学生已经退学");
+		}
+
+		if(classStudentMapperByUserIdAndClassGroupId.getStatus().equals(ClassGroupStudentStatusEnum.QUIT_SCHOOL)){
+			throw new BizException("当前学生已是休学状态");
+		}
+
+//		sysUserCashAccountService.updateBalance(studentId, amount);
+
+		classStudentMapperByUserIdAndClassGroupId.setStatus(ClassGroupStudentStatusEnum.QUIT_SCHOOL);
+		classGroupStudentMapperDao.update(classStudentMapperByUserIdAndClassGroupId);
+
+		courseScheduleService.batchDeleteMusicGroupCourseWithStudent(vipGroupId.toString(),studentId,GroupType.VIP);
+
+		List<Integer> studentPaymentIds = courseScheduleStudentPaymentDao.findNotStartCourseStudentPaymentIdsWithClassGroupAndStudent(classGroup.getId(), studentId);
+		if(!CollectionUtils.isEmpty(studentPaymentIds)){
+			courseScheduleStudentPaymentDao.batchDeleteWithID(studentPaymentIds);
+		}
+
+		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(),-1);
 
 		//学员退出班级群
 		ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(studentId.toString())};

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml

@@ -88,6 +88,11 @@
 		SELECT * FROM class_group_student_mapper
 		where class_group_id_ = #{classGroupId} and user_id_ = #{userId}  AND status_ != 'QUIT'
 	</select>
+
+    <select id="findClassGroupStudent" resultMap="ClassGroupStudentMapper">
+		SELECT * FROM class_group_student_mapper
+		where class_group_id_ = #{classGroupId} and user_id_ = #{userId}
+	</select>
     <select id="findStudentNumByClassGroupId" resultType="string">
         SELECT
             su.username_

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

@@ -1374,7 +1374,7 @@
             cs.schoole_id_
         FROM
             course_schedule cs
-        WHERE cs.class_date_=DATE_FORMAT(#{date},'%Y-%m-%d')
+        WHERE cs.class_date_&lt;=DATE_FORMAT(#{date},'%Y-%m-%d')
         AND cs.group_type_='MUSIC'
         AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
     </select>

+ 15 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml

@@ -112,4 +112,19 @@
         AND spo.status_=#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         AND spo.type_ = 'APPLY'
     </select>
+    <resultMap id="musicalListDetailDtoMap" type="com.ym.mec.biz.dal.dto.musicalListDetailDto">
+        <result property="username" column="username_"/>
+        <result property="userId" column="user_id_"/>
+        <result property="musicGroupName" column="muaic_group_name_"/>
+        <result property="accessoriesAmount" column="accessories_amount_"/>
+        <result property="courseAmount" column="course_amount_"/>
+        <result property="kitGroupPurchaseTypeEnum" column="kit_group_purchase_type_"/>
+        <result property="musicalAmount" column="musical_amount_"/>
+        <result property="orderAmount" column="order_amount_"/>
+        <result property="organName" column="organ_name_"/>
+        <result property="goodsNames" column="goods_names_"/>
+    </resultMap>
+    <select id="getMusicalListDetail" resultMap="musicalListDetailDtoMap">
+
+    </select>
 </mapper>

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

@@ -263,7 +263,7 @@
         GROUP BY su.id_,s.id_
     </select>
     <select id="queryNameByIds" resultType="java.util.Map" parameterType="list">
-        select id_ `key`,real_name_ `value` FROM sys_user s WHERE FIND_IN_SET(id_,#{userIds})
+        select id_ `key`,IF(real_name_ IS NUll,'',real_name_) `value` FROM sys_user s WHERE FIND_IN_SET(id_,#{userIds})
     </select>
 
     <select id="queryPhoneByIds" resultType="java.util.Map" parameterType="list">

+ 0 - 1
mec-im/src/main/java/com/ym/service/Impl/HereWhiteServiceImpl.java

@@ -2,7 +2,6 @@ package com.ym.service.Impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.ym.dao.HereWhiteDao;
-import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.pojo.HereWhite;

+ 1 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/TsignPlugin.java

@@ -58,7 +58,7 @@ public class TsignPlugin implements ESealPlugin, InitializingBean, DisposableBea
 		projectconfig.setItsmApiUrl(apisUrl);
 		Result result = ServiceClientManager.registClient(projectconfig, null, null);
 		if (result.getErrCode() != 0) {
-			throw new ThirdpartyException("e签宝客户端注册失败");
+			throw new ThirdpartyException("e签宝客户端注册失败:{}", result.getMsg());
 		}
 
 		serviceClient = ServiceClientManager.get(projectId);

+ 37 - 70
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -2,6 +2,7 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
 import com.ym.mec.biz.dal.dto.TeacherSalaryDto;
+import com.ym.mec.biz.dal.dto.musicalListDetailDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.page.CourseScheduleTeacherSalaryQueryInfo;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
@@ -16,10 +17,10 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -39,89 +40,64 @@ public class ExportController extends BaseController {
     @Autowired
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
 
-    /*@RequestMapping("order/musicalListExport")
-    public ResponseEntity<byte[]> exportExcel(String musicGroupId) {
-        // 每次只需要改这几行
+    @ApiOperation(value = "导出乐器采购清单")
+    @PostMapping("order/musicalListExport")
+    public void musicalListExport(HttpServletResponse response, String musicGroupId){
         List<Goods> musicalList = studentPaymentOrderDetailService.getMusicalList(musicGroupId);
         if(musicalList == null || musicalList.size() < 1){
             throw new BizException("数据为空");
         }
-        String fileName = "乐器采购清单";
-        String[] headers = new String[] {"乐团","分部","商品类型", "商品名称", "型号", "数量"};
-        String[] getters  = new String[] {"getMemo","getBrief","getType","getName","getSpecification","getSellCount"};
-        Workbook wb = POIUtil.createWorkBook(musicalList, getters, headers,Goods.class);
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        try {
-            wb.write(os);
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        byte[] content = os.toByteArray();
-        HttpHeaders httpHeaders = new HttpHeaders();
         try {
-            fileName = URLEncoder.encode(fileName, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[] {"乐团","分部","商品类型", "商品名称", "型号", "数量"}, new String[] {
+                    "brief","memo","type.desc","name","specification","sellCount"}, musicalList);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            workbook.write(response.getOutputStream());
+            workbook.close();
+        } catch (Exception e) {
             e.printStackTrace();
         }
-        httpHeaders.setContentDispositionFormData("attachment", fileName + ".xlsx");
-        return new ResponseEntity<>(content, httpHeaders, HttpStatus.OK);
-    }*/
+    }
 
-    @ApiOperation(value = "导出乐器采购清单")
-    @PostMapping("order/musicalListExport")
-    public void musicalListExport(HttpServletResponse response, String musicGroupId){
-        List<Goods> musicalList = studentPaymentOrderDetailService.getMusicalList(musicGroupId);
+    @ApiOperation(value = "导出学员采购清单明细")
+    @PostMapping("order/musicalListDetailExport")
+    public void musicalListDetailExport(HttpServletResponse response, String musicGroupId){
+        List<musicalListDetailDto> musicalList = studentPaymentOrderDetailService.getMusicalListDetail(musicGroupId);
         if(musicalList == null || musicalList.size() < 1){
             throw new BizException("数据为空");
         }
-        OutputStream outputStream = null;
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[] {"乐团","分部","商品类型", "商品名称", "型号", "数量"}, new String[] {
-                    "brief","memo","type.desc","name","specification","sellCount"}, musicalList);
-            response.setContentType("application/msexcel");
-            response.setHeader("Content-disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
-            outputStream = response.getOutputStream();
-            workbook.write(outputStream);
-            outputStream.flush();
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[] {"乐团","学员编号","购买商品","学员姓名", "分部", "采购方式", "乐器金额", "教辅金额", "课程金额", "订单总价"}, new String[] {
+                    "musicGroupName","userId","goodsNames","username","organName","kitGroupPurchaseTypeEnum.msg","musicalAmount","accessoriesAmount","courseAmount","orderAmount"}, musicalList);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            workbook.write(response.getOutputStream());
+            workbook.close();
         } catch (Exception e) {
             e.printStackTrace();
-        } finally {
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
         }
     }
 
     @ApiOperation(value = "乐团【报名中、缴费中】 学生详情列表导出")
     @PostMapping(value = "studentRegistration/queryStudentApplyDetailExport")
+    @PreAuthorize("@pcs.hasPermissions('studentRegistration/queryStudentApplyDetailExport')")
     public void queryStudentApplyDetailExport(StudentRegistrationQueryInfo queryInfo, HttpServletResponse response) {
         List<StudentApplyDetailDto> studentApplyDetail = studentRegistrationService.queryStudentDetailPage(queryInfo).getRows();
         if(studentApplyDetail == null || studentApplyDetail.size() < 1){
             throw new BizException("数据为空");
         }
-        OutputStream outputStream = null;
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[] { "学生姓名","家长姓名", "年级", "班级", "性别", "服从调剂","报名专业", "实际专业","联系电话", "学员缴费状态", "乐器购买方式"}, new String[] {
-                    "studentName","parentsName", "currentGrade", "currentClass", "gender", "isAllowAdjust.msg", "subjectName", "actualSubjectName", "parentsPhone","paymentStatus","kitGroupPurchaseTypeEnum.msg"}, studentApplyDetail);
-            response.setContentType("application/vnd.ms-excel");
-            response.setHeader("Content-disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
-            outputStream = response.getOutputStream();
-            workbook.write(outputStream);
-            outputStream.flush();
+                    "studentName","parentsName", "currentGrade", "currentClass", "gender.description", "isAllowAdjust.msg", "subjectName", "actualSubjectName", "parentsPhone","paymentStatus.desc","kitGroupPurchaseTypeEnum.msg"}, studentApplyDetail);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            workbook.write(response.getOutputStream());
+            workbook.close();
         } catch (Exception e) {
             e.printStackTrace();
-        } finally {
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
         }
     }
 
@@ -129,25 +105,16 @@ public class ExportController extends BaseController {
     @RequestMapping("courseScheduleTeacherSalary/export")
     public void export(CourseScheduleTeacherSalaryQueryInfo queryInfo, HttpServletResponse response) {
         List<TeacherSalaryDto> teacherSalaries = courseScheduleTeacherSalaryService.querySalaries(queryInfo).getRows();
-        OutputStream ouputStream = null;
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[] { "用户编号","用户名", "手机号", "课程类型", "实际薪水", "补助", "结算时间", "教师角色"}, new String[] {
                     "userId","username", "phone", "type.msg", "name", "actualSalary", "subsidy", "settlementTime", "teacherRole.msg"}, teacherSalaries);
-            response.setContentType("application/vnd.ms-excel");
-            response.setHeader("Content-disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
-            ouputStream = response.getOutputStream();
-            workbook.write(ouputStream);
-            ouputStream.flush();
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            workbook.write(response.getOutputStream());
+            workbook.close();
         } catch (Exception e) {
             e.printStackTrace();
-        } finally {
-            if (ouputStream != null) {
-                try {
-                    ouputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
         }
     }