|
@@ -47,6 +47,9 @@ import java.util.concurrent.Executors;
|
|
|
import java.util.function.BiFunction;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
+
|
|
|
+import static com.ym.mec.biz.dal.enums.OrderTypeEnum.OUTORDER;
|
|
|
|
|
|
@Service
|
|
|
public class ExportServiceImpl implements ExportService {
|
|
@@ -170,6 +173,8 @@ public class ExportServiceImpl implements ExportService {
|
|
|
@Autowired
|
|
|
private SysUserCashAccountLogService sysUserCashAccountLogService;
|
|
|
@Autowired
|
|
|
+ private StudentStatisticsService studentStatisticsService;
|
|
|
+ @Autowired
|
|
|
private SysTenantConfigService sysTenantConfigService;
|
|
|
|
|
|
@Value("${spring.profiles.active:dev}")
|
|
@@ -337,6 +342,7 @@ public class ExportServiceImpl implements ExportService {
|
|
|
exportManageFuncMap.put(ExportEnum.ROUTE_ORDER_LIST2, (info,headColumns) -> routeOrderList(info,headColumns));
|
|
|
exportManageFuncMap.put(ExportEnum.ORDER_LIST1, (info,headColumns) -> orderList(info,headColumns));
|
|
|
exportManageFuncMap.put(ExportEnum.ORDER_LIST2, (info,headColumns) -> orderList(info,headColumns));
|
|
|
+ exportManageFuncMap.put(ExportEnum.ORDER_LIST_SUM, (info,headColumns) -> orderListSum(info,headColumns));
|
|
|
exportManageFuncMap.put(ExportEnum.STUDENT_VIP_PRACTICE, (info,headColumns) -> exportStudentVipPractice(info,headColumns));
|
|
|
exportManageFuncMap.put(ExportEnum.STUDENT_VIP_COURSE_INFO, (info,headColumns) -> exportStudentVipCourseInfo(info,headColumns));
|
|
|
exportManageFuncMap.put(ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO, (info,headColumns) -> exportStudentMusicTheoryCourseInfo(info,headColumns));
|
|
@@ -1531,39 +1537,37 @@ public class ExportServiceImpl implements ExportService {
|
|
|
return succeed;
|
|
|
}
|
|
|
|
|
|
- //终课表列表导出
|
|
|
+ //订单列表导出
|
|
|
@Override
|
|
|
- public HttpResponseResult superFindCourseSchedules(Map<String, Object> info){
|
|
|
- EndCourseScheduleQueryInfo queryInfo = JSONObject.parseObject(JSONObject.toJSONString(info),EndCourseScheduleQueryInfo.class);
|
|
|
+ public HttpResponseResult orderListSum(Map<String, Object> info,List<String> headColumns){
|
|
|
+ StudentPaymentOrderQueryInfo queryInfo = JSONObject.parseObject(JSONObject.toJSONString(info),StudentPaymentOrderQueryInfo.class);
|
|
|
SysUser sysUser = sysUserFeignService.queryUserInfo();
|
|
|
- if (sysUser == null) {
|
|
|
- throw new BizException("用户信息获取失败");
|
|
|
+ if(sysUser == null || sysUser.getId() == null){
|
|
|
+ return BaseController.failed(HttpStatus.FORBIDDEN, "请登录");
|
|
|
}
|
|
|
- queryInfo.setOrganIdList(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganIdList(),sysUser.getIsSuperAdmin()));
|
|
|
- Map<String, Object> params = new HashMap<>();
|
|
|
- MapUtil.populateMap(params, queryInfo);
|
|
|
- Integer tenantId = TenantContextHolder.getTenantId();
|
|
|
- if(Objects.equals("COURSE_TIME_ERROR",queryInfo.getSearchType())){
|
|
|
- String courseStartTimeError = sysTenantConfigService.getTenantConfigValue(SysConfigService.COURSE_START_TIME_ERROR, tenantId);
|
|
|
- String courseEndTimeError = sysTenantConfigService.getTenantConfigValue(SysConfigService.COURSE_END_TIME_ERROR, tenantId);
|
|
|
- if(StringUtils.isEmpty(courseStartTimeError) || StringUtils.isEmpty(courseEndTimeError)){
|
|
|
- return BaseController.failed("没有可导出的数据");
|
|
|
+ queryInfo.setOrganId(organizationService.getEmployeeOrgan(sysUser.getId(),queryInfo.getOrganId(),sysUser.getIsSuperAdmin()));
|
|
|
+ if (StringUtils.isNotBlank(queryInfo.getSearch())) {
|
|
|
+ List<BasicUserDto> users = studentPaymentOrderDao.getUsers(queryInfo.getSearch());
|
|
|
+ List<Integer> userIds = users.stream().map(BasicUserDto::getUserId).collect(Collectors.toList());
|
|
|
+ if (userIds.size() <= 0) {
|
|
|
+ userIds.add(0);
|
|
|
}
|
|
|
- params.put("courseStartTimeError",courseStartTimeError);
|
|
|
- params.put("courseEndTimeError",courseEndTimeError);
|
|
|
+ queryInfo.setUserIds(userIds);
|
|
|
}
|
|
|
- int count = scheduleService.endCountCourseSchedules(params);
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ MapUtil.populateMap(params, queryInfo);
|
|
|
+ int count = studentPaymentOrderDao.queryCount(params);
|
|
|
if (count <= 0) {
|
|
|
return BaseController.failed("没有可导出的数据");
|
|
|
}
|
|
|
if (count > 50000) {
|
|
|
return BaseController.failed("数据集太大,不能导出.最大数据集不能超过50000");
|
|
|
}
|
|
|
- ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.COURSE_SCHEDULE,sysUser.getId());
|
|
|
+ ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.ORDER_LIST_SUM,sysUser.getId());
|
|
|
ExecutorService executor = Executors.newCachedThreadPool();
|
|
|
CompletableFuture.runAsync(()->{
|
|
|
try {
|
|
|
- this.superFindCourseSchedules(queryInfo, managerDownload);
|
|
|
+ this.orderListSum(params, managerDownload, headColumns);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
@@ -1601,7 +1605,7 @@ public class ExportServiceImpl implements ExportService {
|
|
|
long i = 1;
|
|
|
Map<Integer, String> cooperationOrganMap = new HashMap<>();
|
|
|
List<Integer> cooperationOrganIds = studentPaymentOrderExportDtos.stream()
|
|
|
- .filter(e -> OrderTypeEnum.OUTORDER.equals(e.getType()))
|
|
|
+ .filter(e -> OUTORDER.equals(e.getType()))
|
|
|
.filter(e -> e.getMusicGroupId() != null)
|
|
|
.map(e -> Integer.valueOf(e.getMusicGroupId()))
|
|
|
.distinct()
|
|
@@ -1627,6 +1631,8 @@ public class ExportServiceImpl implements ExportService {
|
|
|
List<Integer> studentIds = studentPaymentOrderExportDtos.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
|
|
|
//获取学员第一个课程组编号
|
|
|
Map<Integer, String> userFirstVipMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.findUserFirstVipMap("VIP",studentIds));
|
|
|
+ //获取学员第一个网管课课程组编号
|
|
|
+ Map<Integer, String> userFirstPracticeMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.findUserFirstVipMap("PRACTICE",studentIds));
|
|
|
//获取学员最近加入的一个乐团编号
|
|
|
Map<Integer, String> userLastMusicIdMap = MapUtil.convertMybatisMap(studentRegistrationDao.getLastMusicGroupId(studentIds));
|
|
|
Map<Integer, String> userLastMusicNameMap = MapUtil.convertMybatisMap(studentRegistrationDao.getLastMusicGroupName(studentIds));
|
|
@@ -1635,6 +1641,26 @@ public class ExportServiceImpl implements ExportService {
|
|
|
if(musicGroupIds != null && musicGroupIds.size() > 0){
|
|
|
musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
|
|
|
}
|
|
|
+ //获取外部订单的商品销售金额
|
|
|
+ List<Long> outOrderList = studentPaymentOrderExportDtos.stream().filter(e -> e.getType() == OUTORDER).map(e -> e.getId()).collect(Collectors.toList());
|
|
|
+ Map<Long,BigDecimal> outOrderAmountMap = new HashMap<>();
|
|
|
+ if(org.apache.commons.collections.CollectionUtils.isNotEmpty(outOrderList)){
|
|
|
+ outOrderAmountMap = MapUtil.convertIntegerMap(sellOrderDao.sumOutOrderAmount(outOrderList));
|
|
|
+ }
|
|
|
+ List<Long> otherOrderIds = studentPaymentOrderExportDtos.stream().filter(e -> e.getGroupType() != GroupType.GOODS_SELL
|
|
|
+ && e.getGroupType() != GroupType.REPLACEMENT
|
|
|
+ && e.getGroupType() != GroupType.PRACTICE
|
|
|
+ && e.getGroupType() != GroupType.SPORADIC
|
|
|
+ && e.getGroupType() != GroupType.MEMBER
|
|
|
+ && e.getGroupType() != GroupType.ACTIVITY
|
|
|
+ && e.getGroupType() != GroupType.VIP).map(e -> e.getId()).collect(Collectors.toList());
|
|
|
+ Map<Long, List<StudentPaymentOrderExportDto>> feeByTypeMap = new HashMap<>();
|
|
|
+ Map<Long, BigDecimal> childRepairMap = new HashMap<>();
|
|
|
+ if(!CollectionUtils.isEmpty(otherOrderIds)){
|
|
|
+ List<StudentPaymentOrderExportDto> feeByType = sellOrderDao.queryFeeByType(otherOrderIds);
|
|
|
+ feeByTypeMap = feeByType.stream().collect(Collectors.groupingBy(StudentPaymentOrderExportDto::getId));
|
|
|
+ childRepairMap = MapUtil.convertIntegerMap(sellOrderDao.queryChildRepair(otherOrderIds));
|
|
|
+ }
|
|
|
|
|
|
for (StudentPaymentOrderExportDto row : studentPaymentOrderExportDtos) {
|
|
|
if (row.getActualAmount() == null) {
|
|
@@ -1737,6 +1763,13 @@ public class ExportServiceImpl implements ExportService {
|
|
|
}
|
|
|
row.setDegreeFee(degreeFee);
|
|
|
break;
|
|
|
+ case PRACTICE:
|
|
|
+ BigDecimal practiceCourseFee = BigDecimal.ZERO;
|
|
|
+ if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ practiceCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
|
|
|
+ }
|
|
|
+ row.setPracticeCourseFee(practiceCourseFee);
|
|
|
+ break;
|
|
|
case VIP:
|
|
|
BigDecimal vipCourseFee = BigDecimal.ZERO;
|
|
|
if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
@@ -1847,6 +1880,13 @@ public class ExportServiceImpl implements ExportService {
|
|
|
row.setSubjectName(practiceGroup.getSubjectName());
|
|
|
row.setEduTeacher(practiceGroup.getEduTeacherName());
|
|
|
}
|
|
|
+ if(row.getTypeDesc() == null){
|
|
|
+ if(Objects.equals(userFirstPracticeMap.get(row.getUserId()),row.getMusicGroupId())){
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_PRACTICE);
|
|
|
+ }else {
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RENEW_PRACTICE);
|
|
|
+ }
|
|
|
+ }
|
|
|
} else if (row.getGroupType().equals(GroupType.REPLACEMENT)) {
|
|
|
row.setMusicalFee(row.getActualAmount());
|
|
|
ReplacementInstrumentActivityStatDto info = replacementInstrumentActivityDao.getInfo(Integer.parseInt(row.getMusicGroupId()));
|
|
@@ -1859,28 +1899,92 @@ public class ExportServiceImpl implements ExportService {
|
|
|
row.setEduTeacher(cooperationOrganEduTeacher.getLinkman());
|
|
|
}
|
|
|
}
|
|
|
+ } else if (row.getGroupType().equals(GroupType.GOODS_SELL)) {
|
|
|
+ row.setRetailGoodsFee(row.getActualAmount());
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RETAIL_GOODS);
|
|
|
} else {
|
|
|
- StudentPaymentOrderExportDto feeByType = sellOrderDao.getFeeByType(row.getId());
|
|
|
- BigDecimal childRepairFee = sellOrderDao.getChildRepair(row.getId());
|
|
|
- row.setMusicalFee(feeByType.getMusicalFee());
|
|
|
- row.setTeachingFee(feeByType.getTeachingFee().subtract(childRepairFee));
|
|
|
- row.setMaintenanceProductFee(feeByType.getRepairFee().add(childRepairFee));
|
|
|
- row.setOtherFee(feeByType.getOtherFee());
|
|
|
- if (row.getGroupType().equals(GroupType.MUSIC)) {
|
|
|
- StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
|
|
|
- if (studentRegistration != null) {
|
|
|
- row.setSubjectName(studentRegistration.getSubjectName());
|
|
|
- row.setSchoolName(studentRegistration.getSchoolName());
|
|
|
- row.setCooperationOrganName(studentRegistration.getRemark());
|
|
|
- row.setEduTeacher(studentRegistration.getName());
|
|
|
+ List<StudentPaymentOrderExportDto> exportDtoList = feeByTypeMap.get(row.getId());
|
|
|
+ if(!CollectionUtils.isEmpty(exportDtoList)){
|
|
|
+ StudentPaymentOrderExportDto feeByType = exportDtoList.get(0);
|
|
|
+ BigDecimal childRepairFee = childRepairMap.get(row.getId()) == null?BigDecimal.ZERO:childRepairMap.get(row.getId());
|
|
|
+// StudentPaymentOrderExportDto feeByType = sellOrderDao.getFeeByType(row.getId());
|
|
|
+// BigDecimal childRepairFee = sellOrderDao.getChildRepair(row.getId());
|
|
|
+ row.setMusicalFee(feeByType.getMusicalFee());
|
|
|
+ row.setTeachingFee(feeByType.getTeachingFee().subtract(childRepairFee));
|
|
|
+ row.setMaintenanceProductFee(feeByType.getRepairFee().add(childRepairFee));
|
|
|
+ row.setOtherFee(feeByType.getOtherFee());
|
|
|
+ if (row.getGroupType().equals(GroupType.MUSIC)) {
|
|
|
+ if(row.getType() != OrderTypeEnum.APPLY && row.getType() != OrderTypeEnum.ADD_STUDENT){
|
|
|
+ //判断之前是否有付费订单,如果没有,那么是乐团转化
|
|
|
+ int orderNum = studentPaymentOrderDao.getStudentMusicOrderNum(row.getMusicGroupId(),row.getUserId(),row.getId());
|
|
|
+ if(orderNum == 0){
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.MUSIC_CONVERT);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
|
|
|
+ if (studentRegistration != null) {
|
|
|
+ row.setSubjectName(studentRegistration.getSubjectName());
|
|
|
+ row.setSchoolName(studentRegistration.getSchoolName());
|
|
|
+ row.setCooperationOrganName(studentRegistration.getRemark());
|
|
|
+ row.setEduTeacher(studentRegistration.getName());
|
|
|
+ }
|
|
|
+ row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).
|
|
|
+ subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).
|
|
|
+ subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()).
|
|
|
+ subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()));
|
|
|
+ } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
|
|
|
+ row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
|
|
|
+ }else if (row.getGroupType() == GroupType.OUTORDER) {
|
|
|
+ //销售收入
|
|
|
+ BigDecimal add = feeByType.getMusicalFee().add(row.getTeachingFee()).add(row.getMaintenanceProductFee()).add(feeByType.getOtherFee());
|
|
|
+ //服务收入
|
|
|
+ BigDecimal subtract = feeByType.getActualAmount().subtract(add);
|
|
|
+ //如果是淘器微信那么就是零售
|
|
|
+ if(Objects.equals("淘器微信",row.getMerNos()) && add.compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ //如果有服务收入那么是课程学校采买
|
|
|
+ row.setMusicalFee(BigDecimal.ZERO);
|
|
|
+ row.setTeachingFee(BigDecimal.ZERO);
|
|
|
+ row.setMaintenanceProductFee(BigDecimal.ZERO);
|
|
|
+ row.setOtherFee(subtract);
|
|
|
+ row.setRetailGoodsFee(add);
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RETAIL_GOODS);
|
|
|
+ }else {
|
|
|
+ //拆分导入订单
|
|
|
+ if(row.getType() == OrderTypeEnum.OUTORDER || row.getType() == OrderTypeEnum.SCHOOL){
|
|
|
+ if(row.getType() == OrderTypeEnum.SCHOOL){
|
|
|
+ row.setMusicalFee(BigDecimal.ZERO);
|
|
|
+ row.setTeachingFee(BigDecimal.ZERO);
|
|
|
+ row.setMaintenanceProductFee(BigDecimal.ZERO);
|
|
|
+ row.setOtherFee(BigDecimal.ZERO);
|
|
|
+ row.setLargeMusicalFee(add);
|
|
|
+ }
|
|
|
+ //如果有服务收入那么是课程学校采买
|
|
|
+ if(subtract.compareTo(BigDecimal.ZERO) == 0){
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.LARGE_MUSICAL);
|
|
|
+ }else {
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.COURSE_SCHOOL_BUY);
|
|
|
+ }
|
|
|
+ row.setCourseSchoolBuyAmount(subtract);
|
|
|
+ }else if(row.getType() == OrderTypeEnum.OTHER){
|
|
|
+ row.setOtherFee(row.getOtherFee().add(subtract));
|
|
|
+ }else {
|
|
|
+ row.setMusicalFee(BigDecimal.ZERO);
|
|
|
+ row.setTeachingFee(BigDecimal.ZERO);
|
|
|
+ row.setMaintenanceProductFee(BigDecimal.ZERO);
|
|
|
+ row.setOtherFee(BigDecimal.ZERO);
|
|
|
+ row.setRetailGoodsFee(add);
|
|
|
+ row.setMusicGroupCourseFee(subtract);
|
|
|
+ //如果有服务收入那么是课程学校采买
|
|
|
+ if(subtract.compareTo(BigDecimal.ZERO) == 0){
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RETAIL_GOODS);
|
|
|
+ }else {
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.COURSE_STUDENT_BUY);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ row.setTransferFee(BigDecimal.ZERO);
|
|
|
+ row.setPlatformFee(BigDecimal.ZERO);
|
|
|
}
|
|
|
- row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()));
|
|
|
- } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
|
|
|
- row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
|
|
|
- } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
|
|
|
- row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()));
|
|
|
- row.setTransferFee(BigDecimal.ZERO);
|
|
|
- row.setPlatformFee(BigDecimal.ZERO);
|
|
|
}
|
|
|
}
|
|
|
//如果合作单位不存在取学员的第一个乐团的合作单位,乐团主管
|
|
@@ -1891,7 +1995,7 @@ public class ExportServiceImpl implements ExportService {
|
|
|
row.setEduTeacher(cooperationOrgan.getLinkman() != null ? cooperationOrgan.getLinkman() : row.getEduTeacher());
|
|
|
}
|
|
|
}
|
|
|
- if (row.getType().equals(OrderTypeEnum.OUTORDER) && row.getMusicGroupId() != null) {
|
|
|
+ if (row.getType().equals(OUTORDER) && row.getMusicGroupId() != null) {
|
|
|
if (cooperationOrganMap.containsKey(Integer.valueOf(row.getMusicGroupId()))) {
|
|
|
row.setCooperationOrganName(cooperationOrganMap.get(Integer.valueOf(row.getMusicGroupId())));
|
|
|
CooperationOrgan cooperationOrganEduTeacher = musicGroupDao.findCooperationOrganEduTeacher(Integer.valueOf(row.getMusicGroupId()));
|
|
@@ -1928,30 +2032,6 @@ public class ExportServiceImpl implements ExportService {
|
|
|
Map<String, String> headMap = getExportMap(new ExportDto(ExportEnum.ORDER_LIST1, headColumns));
|
|
|
String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
|
|
|
String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
|
|
|
- /*if(isPlatformUser){
|
|
|
- String[] header = {"序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额",
|
|
|
- "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费",
|
|
|
- "账户充值", "其它", "汇付手续费","平台手续费", "到账时间",
|
|
|
- "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"};
|
|
|
-
|
|
|
- String[] body = {"id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "couponRemitFee",
|
|
|
- "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee",
|
|
|
- "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId",
|
|
|
- "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"};
|
|
|
- workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
|
|
|
- }else{
|
|
|
- String[] header = {"序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额",
|
|
|
- "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "乐保费用", "团练宝", "押金", "乐器", "教辅费用", "上门费",
|
|
|
- "账户充值", "其它","平台手续费", "到账时间",
|
|
|
- "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"};
|
|
|
-
|
|
|
- String[] body = {"id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "couponRemitFee",
|
|
|
- "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee",
|
|
|
- "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId",
|
|
|
- "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"};
|
|
|
- workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
|
|
|
- }*/
|
|
|
-
|
|
|
workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
|
|
|
workbook.write(fileOutputStream);
|
|
|
fileOutputStream.getFD().sync();
|
|
@@ -1977,12 +2057,304 @@ public class ExportServiceImpl implements ExportService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public void orderListSum(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException {
|
|
|
+ List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentOrderService.ExportQueryPage(params);
|
|
|
+ //获取机构费率
|
|
|
+ Integer tenantId = (Integer) params.get("tenantId");
|
|
|
+ TenantConfig tenantConfig = tenantConfigService.queryByTenantId(tenantId);
|
|
|
+ List<Long> otherOrderIds = studentPaymentOrderExportDtos.stream().filter(e -> e.getGroupType() != GroupType.GOODS_SELL
|
|
|
+ && e.getGroupType() != GroupType.REPLACEMENT
|
|
|
+ && e.getGroupType() != GroupType.PRACTICE
|
|
|
+ && e.getGroupType() != GroupType.SPORADIC
|
|
|
+ && e.getGroupType() != GroupType.MEMBER
|
|
|
+ && e.getGroupType() != GroupType.ACTIVITY
|
|
|
+ && e.getGroupType() != GroupType.VIP).map(e -> e.getId()).collect(Collectors.toList());
|
|
|
+ Map<Long, List<StudentPaymentOrderExportDto>> feeByTypeMap = new HashMap<>();
|
|
|
+ Map<Long, BigDecimal> childRepairMap = new HashMap<>();
|
|
|
+ if(!CollectionUtils.isEmpty(otherOrderIds)){
|
|
|
+ List<StudentPaymentOrderExportDto> feeByType = sellOrderDao.queryFeeByType(otherOrderIds);
|
|
|
+ feeByTypeMap = feeByType.stream().collect(Collectors.groupingBy(StudentPaymentOrderExportDto::getId));
|
|
|
+ childRepairMap = MapUtil.convertIntegerMap(sellOrderDao.queryChildRepair(otherOrderIds));
|
|
|
+ }
|
|
|
+ for (StudentPaymentOrderExportDto row : studentPaymentOrderExportDtos) {
|
|
|
+ if (row.getActualAmount() == null) {
|
|
|
+ row.setActualAmount(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ if (row.getBalancePaymentAmount() == null) {
|
|
|
+ row.setBalancePaymentAmount(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ BigDecimal transferFee = BigDecimal.ZERO;
|
|
|
+ if (row.getPaymentChannel() != null && row.getPaymentChannel().equals("ADAPAY")) {
|
|
|
+ transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ row.setTransferFee(transferFee);
|
|
|
+ row.setPlatformFee(row.getActualAmount().multiply(tenantConfig.getChargeRate()).divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ if (row.getOrderDetailList() != null) {
|
|
|
+ for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
|
|
|
+ switch (orderDetail.getType()) {
|
|
|
+ case COURSE:
|
|
|
+ case CLASSROOM:
|
|
|
+ case SINGLE:
|
|
|
+ case MIX:
|
|
|
+ case COMPREHENSIVE:
|
|
|
+ case ENLIGHTENMENT:
|
|
|
+ case TRAINING_SINGLE:
|
|
|
+ case TRAINING_MIX:
|
|
|
+ case MUSIC_NETWORK:
|
|
|
+ case HIGH:
|
|
|
+ case HIGH_ONLINE:
|
|
|
+ case HIGH_ONLINE_COURSE:
|
|
|
+ row.setMusicGroupCourseFee(row.getMusicGroupCourseFee().add(orderDetail.getPrice()));
|
|
|
+ break;
|
|
|
+ case MUSICAL:
|
|
|
+ if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
|
|
|
+ BigDecimal leaseFee = BigDecimal.ZERO;
|
|
|
+ if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ leaseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
|
|
|
+ }
|
|
|
+ row.setLeaseFee(leaseFee);
|
|
|
+ } else {
|
|
|
+ row.setMusicalFee(orderDetail.getPrice());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case ACCESSORIES:
|
|
|
+ case TEACHING:
|
|
|
+ row.setTeachingFee(row.getTeachingFee().add(orderDetail.getPrice()));
|
|
|
+ break;
|
|
|
+ case OTHER:
|
|
|
+ row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice()));
|
|
|
+ break;
|
|
|
+ case MAINTENANCE:
|
|
|
+ BigDecimal repairFee = BigDecimal.ZERO;
|
|
|
+ if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ repairFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
|
|
|
+ }
|
|
|
+ row.setMaintenanceFee(repairFee);
|
|
|
+ break;
|
|
|
+ case CLOUD_TEACHER:
|
|
|
+ case CLOUD_TEACHER_PLUS:
|
|
|
+ BigDecimal cloudTeacherFee = BigDecimal.ZERO;
|
|
|
+ if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ cloudTeacherFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
|
|
|
+ }
|
|
|
+ row.setCloudTeacherFee(cloudTeacherFee);
|
|
|
+ break;
|
|
|
+ case DEGREE_REGISTRATION:
|
|
|
+ BigDecimal degreeFee = BigDecimal.ZERO;
|
|
|
+ if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ degreeFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
|
|
|
+ }
|
|
|
+ row.setDegreeFee(degreeFee);
|
|
|
+ break;
|
|
|
+ case PRACTICE:
|
|
|
+ BigDecimal practiceCourseFee = BigDecimal.ZERO;
|
|
|
+ if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ practiceCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
|
|
|
+ }
|
|
|
+ row.setPracticeCourseFee(practiceCourseFee);
|
|
|
+ break;
|
|
|
+ case VIP:
|
|
|
+ BigDecimal vipCourseFee = BigDecimal.ZERO;
|
|
|
+ if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ vipCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
|
|
|
+ }
|
|
|
+ row.setVipCourseFee(vipCourseFee);
|
|
|
+ break;
|
|
|
+ case THEORY_COURSE:
|
|
|
+ BigDecimal theoryCourseFee = BigDecimal.ZERO;
|
|
|
+ if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ theoryCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
|
|
|
+ }
|
|
|
+ row.setTheoryCourseFee(theoryCourseFee);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //专业
|
|
|
+ if (row.getGroupType().equals(GroupType.VIP)) {
|
|
|
+ row.setVipCourseFee(row.getActualAmount());
|
|
|
+ }else if(row.getGroupType() == GroupType.ACTIVITY){
|
|
|
+ row.setVipCourseFee(row.getActualAmount());
|
|
|
+ }else if(row.getGroupType() == GroupType.MEMBER){
|
|
|
+ row.setCloudTeacherFee(row.getActualAmount());
|
|
|
+ } else if (row.getGroupType().equals(GroupType.SPORADIC)) {
|
|
|
+ //考级报名
|
|
|
+ if (row.getType().equals(OrderTypeEnum.DEGREE_REGISTRATION)) {
|
|
|
+ String[] feeTypes = row.getMemo().split(";");
|
|
|
+ List<String> feeTypeList = Arrays.asList(feeTypes);
|
|
|
+ for (String feeTypeStr : feeTypeList) {
|
|
|
+ int index = feeTypeStr.lastIndexOf(":");
|
|
|
+ if (index < 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ BigDecimal typeFee = new BigDecimal(feeTypeStr.substring(index + 1));
|
|
|
+ if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ typeFee = typeFee.multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
|
|
|
+ }
|
|
|
+ if (feeTypeStr.contains("VIP")) {
|
|
|
+ row.setVipCourseFee(typeFee);
|
|
|
+ } else if (feeTypeStr.contains("网管课")) {
|
|
|
+ row.setPracticeCourseFee(typeFee);
|
|
|
+ } else if (feeTypeStr.contains("乐理课")) {
|
|
|
+ row.setTheoryCourseFee(typeFee);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ row.setDegreeFee(row.getActualAmount().subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()).subtract(row.getTheoryCourseFee()));
|
|
|
+ } else {
|
|
|
+ if (row.getChargeType() != null && SporadicChargeTypeEnum.LEVEL.getCode().equals(row.getChargeType())) {
|
|
|
+ row.setDegreeFee(row.getActualAmount());
|
|
|
+ } else if (row.getChargeType() != null && SporadicChargeTypeEnum.PRACTICE_GROUP_BUY.getCode().equals(row.getChargeType())) {
|
|
|
+ row.setPracticeCourseFee(row.getActualAmount());
|
|
|
+ } else if (row.getChargeType() != null && SporadicChargeTypeEnum.MUSIC_UPKEEP.getCode().equals(row.getChargeType())) {
|
|
|
+ row.setMaintenanceFee(row.getActualAmount());
|
|
|
+ } else if (row.getChargeType() != null && SporadicChargeTypeEnum.VISITING_FEE.getCode().equals(row.getChargeType())) {
|
|
|
+ row.setVisitFee(row.getActualAmount());
|
|
|
+ } else if (row.getChargeType() != null && (SporadicChargeTypeEnum.RECHARGE.getCode().equals(row.getChargeType()) ||
|
|
|
+ SporadicChargeTypeEnum.HIGH_ONLINE_ACTIVITY.getCode().equals(row.getChargeType()))) {
|
|
|
+ row.setRechargeFee(row.getActualAmount());
|
|
|
+ } else if (row.getChargeType() != null && SporadicChargeTypeEnum.CLOUD_TEACHER_BUY.getCode().equals(row.getChargeType())) {
|
|
|
+ row.setCloudTeacherFee(row.getActualAmount());
|
|
|
+ } else {
|
|
|
+ row.setOtherFee(row.getActualAmount());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (row.getGroupType().equals(GroupType.PRACTICE)) {
|
|
|
+ row.setPracticeCourseFee(row.getActualAmount());
|
|
|
+ } else if (row.getGroupType().equals(GroupType.REPLACEMENT)) {
|
|
|
+ row.setMusicalFee(row.getActualAmount());
|
|
|
+ } else if (row.getGroupType().equals(GroupType.GOODS_SELL)) {
|
|
|
+ row.setRetailGoodsFee(row.getActualAmount());
|
|
|
+ } else {
|
|
|
+ List<StudentPaymentOrderExportDto> exportDtoList = feeByTypeMap.get(row.getId());
|
|
|
+ if(!CollectionUtils.isEmpty(exportDtoList)){
|
|
|
+ StudentPaymentOrderExportDto feeByType = exportDtoList.get(0);
|
|
|
+ BigDecimal childRepairFee = childRepairMap.get(row.getId()) == null?BigDecimal.ZERO:childRepairMap.get(row.getId());
|
|
|
+ row.setMusicalFee(feeByType.getMusicalFee());
|
|
|
+ row.setTeachingFee(feeByType.getTeachingFee().subtract(childRepairFee));
|
|
|
+ row.setMaintenanceProductFee(feeByType.getRepairFee().add(childRepairFee));
|
|
|
+ row.setOtherFee(feeByType.getOtherFee());
|
|
|
+ if (row.getGroupType().equals(GroupType.MUSIC)) {
|
|
|
+ row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).
|
|
|
+ subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).
|
|
|
+ subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()).
|
|
|
+ subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()));
|
|
|
+ } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
|
|
|
+ row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
|
|
|
+ }else if (row.getGroupType() == GroupType.OUTORDER) {
|
|
|
+ //销售收入
|
|
|
+ BigDecimal add = feeByType.getMusicalFee().add(row.getTeachingFee()).add(row.getMaintenanceProductFee()).add(feeByType.getOtherFee());
|
|
|
+ //服务收入
|
|
|
+ BigDecimal subtract = feeByType.getActualAmount().subtract(add);
|
|
|
+ //如果是淘器微信那么就是零售
|
|
|
+ if(Objects.equals("淘器微信",row.getMerNos()) && add.compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ //如果有服务收入那么是课程学校采买
|
|
|
+ row.setMusicalFee(BigDecimal.ZERO);
|
|
|
+ row.setTeachingFee(BigDecimal.ZERO);
|
|
|
+ row.setMaintenanceProductFee(BigDecimal.ZERO);
|
|
|
+ row.setOtherFee(subtract);
|
|
|
+ row.setRetailGoodsFee(add);
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RETAIL_GOODS);
|
|
|
+ }else {
|
|
|
+ //拆分导入订单
|
|
|
+ if (row.getType() == OrderTypeEnum.OUTORDER || row.getType() == OrderTypeEnum.SCHOOL) {
|
|
|
+ if (row.getType() == OrderTypeEnum.SCHOOL) {
|
|
|
+ row.setMusicalFee(BigDecimal.ZERO);
|
|
|
+ row.setTeachingFee(BigDecimal.ZERO);
|
|
|
+ row.setMaintenanceProductFee(BigDecimal.ZERO);
|
|
|
+ row.setOtherFee(BigDecimal.ZERO);
|
|
|
+ row.setLargeMusicalFee(add);
|
|
|
+ }
|
|
|
+ row.setCourseSchoolBuyAmount(subtract);
|
|
|
+ } else if (row.getType() == OrderTypeEnum.OTHER) {
|
|
|
+ row.setOtherFee(row.getOtherFee().add(subtract));
|
|
|
+ } else {
|
|
|
+ row.setMusicalFee(BigDecimal.ZERO);
|
|
|
+ row.setTeachingFee(BigDecimal.ZERO);
|
|
|
+ row.setMaintenanceProductFee(BigDecimal.ZERO);
|
|
|
+ row.setOtherFee(BigDecimal.ZERO);
|
|
|
+ row.setRetailGoodsFee(add);
|
|
|
+ row.setMusicGroupCourseFee(subtract);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ row.setRepairFee(row.getRepairFee().add(row.getMaintenanceProductFee()));
|
|
|
+ row.setOrderAmount(row.getExpectAmount().add(row.getCouponRemitFee()));
|
|
|
+ }
|
|
|
+ List<StudentPaymentOrderExportDto> exportDtoList = new ArrayList<>();
|
|
|
+ Map<Integer, List<StudentPaymentOrderExportDto>> collect = studentPaymentOrderExportDtos.stream().collect(Collectors.groupingBy(StudentPaymentOrderExportDto::getOrganId));
|
|
|
+ for (Integer organId : collect.keySet()) {
|
|
|
+ StudentPaymentOrderExportDto exportDto = new StudentPaymentOrderExportDto();
|
|
|
+ List<StudentPaymentOrderExportDto> orderExportDtos = collect.get(organId);
|
|
|
+ exportDto.setOrganName(orderExportDtos.stream().map(e->e.getOrganName()).findAny().get());
|
|
|
+ exportDto.setOrderAmount(orderExportDtos.stream().map(e -> e.getOrderAmount()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setExpectAmount(orderExportDtos.stream().map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setActualAmount(orderExportDtos.stream().map(e -> e.getActualAmount()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setBalancePaymentAmount(orderExportDtos.stream().map(e -> e.getBalancePaymentAmount()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setCouponRemitFee(orderExportDtos.stream().map(e -> e.getCouponRemitFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setMusicGroupCourseFee(orderExportDtos.stream().map(e -> e.getMusicGroupCourseFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setCourseSchoolBuyAmount(orderExportDtos.stream().map(e -> e.getCourseSchoolBuyAmount()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setVipCourseFee(orderExportDtos.stream().map(e -> e.getVipCourseFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setPracticeCourseFee(orderExportDtos.stream().map(e -> e.getPracticeCourseFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setTheoryCourseFee(orderExportDtos.stream().map(e -> e.getTheoryCourseFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setDegreeFee(orderExportDtos.stream().map(e -> e.getDegreeFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setRepairFee(orderExportDtos.stream().map(e -> e.getRepairFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setMaintenanceFee(orderExportDtos.stream().map(e -> e.getMaintenanceFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setCloudTeacherFee(orderExportDtos.stream().map(e -> e.getCloudTeacherFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setLeaseFee(orderExportDtos.stream().map(e -> e.getLeaseFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setMusicalFee(orderExportDtos.stream().map(e -> e.getMusicalFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setTeachingFee(orderExportDtos.stream().map(e -> e.getTeachingFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setVisitFee(orderExportDtos.stream().map(e -> e.getVisitFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setRechargeFee(orderExportDtos.stream().map(e -> e.getRechargeFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setRetailGoodsFee(orderExportDtos.stream().map(e -> e.getRetailGoodsFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setLargeMusicalFee(orderExportDtos.stream().map(e -> e.getLargeMusicalFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDto.setOtherFee(orderExportDtos.stream().map(e -> e.getOtherFee()).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ exportDtoList.add(exportDto);
|
|
|
+ }
|
|
|
+
|
|
|
+ String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
|
|
|
+ File file = new File(basePath + "/" + managerDownload.getName());
|
|
|
+ FileOutputStream fileOutputStream = new FileOutputStream(file);
|
|
|
+
|
|
|
+ HSSFWorkbook workbook = null;
|
|
|
+ try {
|
|
|
+ Map<String, String> headMap = getExportMap(new ExportDto(ExportEnum.ORDER_LIST_SUM, headColumns));
|
|
|
+ String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
|
|
|
+ String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
|
|
|
+ workbook = POIUtil.exportExcel(header, body, exportDtoList);
|
|
|
+ workbook.write(fileOutputStream);
|
|
|
+ fileOutputStream.getFD().sync();
|
|
|
+ fileOutputStream.close();
|
|
|
+
|
|
|
+ String folder = "download/" + UploadUtil.getFileFloder();
|
|
|
+ String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
|
|
|
+ //把记录插入下载表
|
|
|
+ managerDownload.setFileUrl(url);
|
|
|
+ managerDownload.setStatus(1);
|
|
|
+ managerDownloadDao.update(managerDownload);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ fileOutputStream.close();
|
|
|
+ workbook.close();
|
|
|
+ file.delete();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns) throws FileNotFoundException {
|
|
|
List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
|
|
|
|
|
|
Map<Integer, String> cooperationOrganMap = new HashMap<>();
|
|
|
List<Integer> cooperationOrganIds = studentPaymentOrderExportDtos.stream()
|
|
|
- .filter(e -> OrderTypeEnum.OUTORDER.equals(e.getType()))
|
|
|
+ .filter(e -> OUTORDER.equals(e.getType()))
|
|
|
.filter(e -> e.getMusicGroupId() != null)
|
|
|
.map(e -> Integer.valueOf(e.getMusicGroupId()))
|
|
|
.distinct()
|
|
@@ -2303,7 +2675,7 @@ public class ExportServiceImpl implements ExportService {
|
|
|
row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()));
|
|
|
} else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
|
|
|
row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
|
|
|
- } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
|
|
|
+ } else if (row.getType().equals(OUTORDER)) {
|
|
|
row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getRepairFee()).subtract(feeByType.getOtherFee()));
|
|
|
row.setTransferFee(BigDecimal.ZERO);
|
|
|
row.setPlatformFee(BigDecimal.ZERO);
|
|
@@ -2317,7 +2689,7 @@ public class ExportServiceImpl implements ExportService {
|
|
|
row.setEduTeacher(cooperationOrgan.getLinkman() != null ? cooperationOrgan.getLinkman() : row.getEduTeacher());
|
|
|
}
|
|
|
}
|
|
|
- if (row.getType().equals(OrderTypeEnum.OUTORDER) && row.getMusicGroupId() != null) {
|
|
|
+ if (row.getType().equals(OUTORDER) && row.getMusicGroupId() != null) {
|
|
|
if (cooperationOrganMap.containsKey(Integer.valueOf(row.getMusicGroupId()))) {
|
|
|
row.setCooperationOrganName(cooperationOrganMap.get(Integer.valueOf(row.getMusicGroupId())));
|
|
|
CooperationOrgan cooperationOrganEduTeacher = musicGroupDao.findCooperationOrganEduTeacher(Integer.valueOf(row.getMusicGroupId()));
|
|
@@ -2439,7 +2811,7 @@ public class ExportServiceImpl implements ExportService {
|
|
|
musicGroupCourseFee = order.getRouteAmount().subtract(musicalFee).subtract(teachingFee).subtract(maintenanceFee).subtract(maintenanceProductFee).subtract(otherFee).subtract(leaseFee).subtract(cloudTeacherFee);
|
|
|
} else if (order.getType().equals(OrderTypeEnum.REPAIR)) {
|
|
|
repairFee = order.getRouteAmount().subtract(musicalFee).subtract(teachingFee).subtract(otherFee);
|
|
|
- } else if (order.getType().equals(OrderTypeEnum.OUTORDER)) {
|
|
|
+ } else if (order.getType().equals(OUTORDER)) {
|
|
|
musicGroupCourseFee = order.getRouteAmount().subtract(musicalFee).subtract(teachingFee).subtract(maintenanceProductFee).subtract(otherFee);
|
|
|
}
|
|
|
}
|
|
@@ -2744,4 +3116,47 @@ public class ExportServiceImpl implements ExportService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void exportStudentSmallClassStatisticsSum(StudentStatisticsQueryInfo queryInfo, ManagerDownload managerDownload) throws FileNotFoundException {
|
|
|
+ List<StudentStatisticsDto> rows = studentStatisticsService.queryStatisticsPage(queryInfo).getRows();
|
|
|
+ String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
|
|
|
+ File file = new File(basePath + "/" + managerDownload.getName());
|
|
|
+ FileOutputStream fileOutputStream = new FileOutputStream(file);
|
|
|
+ OutputStream ouputStream = null;
|
|
|
+ try {
|
|
|
+ HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学生姓名", "学员编号","联系电话", "声部", "学校", "年级", "学员状态", "未排课时", "总课时", "已完成课时",
|
|
|
+ "剩余课时","预收金额","第一次课时间","最近上课时间","指导老师编号","指导老师","乐团主管编号","乐团主管","声部课老师编号","声部课老师","近30天课耗","回访次数",
|
|
|
+ "回访状态","原因","回访日期"},
|
|
|
+ new String[]{"studentBasicInfo.organName", "studentBasicInfo.userName", "studentBasicInfo.userId",
|
|
|
+ "studentBasicInfo.phone","studentBasicInfo.subjectName", "studentBasicInfo.cooperationOrganName", "studentBasicInfo.grade",
|
|
|
+ "studentBasicInfo.studentStatus",
|
|
|
+ "noScheduleNum","totalCourseNum", "overCourseNum", "subCourseNum","preCourseFee","firstCourseTime","lastCourseTime","teacherId","teacherName","musicDirectorId","musicDirectorName",
|
|
|
+ "studentBasicInfo.subjectTeacherId","studentBasicInfo.subjectTeacherName","latelyCourseConsumer","visitNum",
|
|
|
+ "lastVisitStatus == null?'':lastVisitStatus == 'LOST' ? '流失':lastVisitStatus == 'THINKING' ? '考虑中':" +
|
|
|
+ "lastVisitStatus == 'PENDING_PAYMENT' ? '确认缴费待缴费':lastVisitStatus == 'PAUSE' ? '暂停':lastVisitStatus == 'OTHER' ? '其他':''"
|
|
|
+ ,"visitReason","lastVisitTime"}, rows);
|
|
|
+
|
|
|
+ workbook.write(fileOutputStream);
|
|
|
+ fileOutputStream.getFD().sync();
|
|
|
+ fileOutputStream.close();
|
|
|
+
|
|
|
+ String folder = "download/" + UploadUtil.getFileFloder();
|
|
|
+ String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
|
|
|
+ //把记录插入下载表
|
|
|
+ managerDownload.setFileUrl(url);
|
|
|
+ managerDownload.setStatus(1);
|
|
|
+ managerDownloadDao.update(managerDownload);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ if (ouputStream != null) {
|
|
|
+ try {
|
|
|
+ ouputStream.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|