diff --git a/src/main/java/com/zmzm/finance/common/controller/StatisticsController.java b/src/main/java/com/zmzm/finance/common/controller/StatisticsController.java index e82047e..404bdda 100644 --- a/src/main/java/com/zmzm/finance/common/controller/StatisticsController.java +++ b/src/main/java/com/zmzm/finance/common/controller/StatisticsController.java @@ -6,7 +6,6 @@ import com.zmzm.finance.common.service.*; import com.zmzm.finance.util.R; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateUtils; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; @@ -75,6 +74,24 @@ public class StatisticsController { .groupBy("type")); return R.ok().putData("paymentSummary",paymentSummary).putData("physicalAndTraining",physicalAndTraining); } + //汇总明细导出 + @RequestMapping("/statisticsInfoExport") + public R statisticsInfoExport(HttpServletResponse response,@RequestBody Map params) throws ParseException { + String fileName = params.get("year")+""+params.get("month")+"汇总明细"; + XSSFWorkbook wb = new XSSFWorkbook(); + Sheet sheet1 = wb.createSheet("天医币"); + exportCommon(sheet1 ,ordersService.coinInfoExportList(params)); + Sheet sheet2 = wb.createSheet("VIP"); + exportCommon(sheet2 ,ordersService.vipInfoExportList(params)); + Sheet sheet3 = wb.createSheet("课程"); + exportCommon(sheet3 ,ordersService.courseInfoExportList(params)); + Sheet sheet4 = wb.createSheet("实物"); + exportCommon(sheet4 ,ordersService.physicalInfoExportList(params)); + Sheet sheet5 = wb.createSheet("培训班"); + exportCommon(sheet5 ,ordersService.trainingClassInfoExportList(params)); + exportTem(response,wb,fileName+".xlsx"); + return R.ok(); + } //天医币统计 @RequestMapping("/pointStatistics") @@ -126,196 +143,45 @@ public class StatisticsController { //天医币明细导出 @RequestMapping("/pointInfoExport") public R pointInfoExport(HttpServletResponse response,@RequestBody Map params){ - List> coinInfoList = ordersService.listMaps(new MPJLambdaWrapper() - .leftJoin(PaymentToOrder.class,PaymentToOrder::getOrderId,Orders::getId) - .leftJoin(Payment.class,Payment::getId,PaymentToOrder::getPaymentId) - .eq(Orders::getUseFlag,1).and(t->t.eq(Orders::getType,0).or().eq(Orders::getPayType,1)) - .apply("DATE_FORMAT(t.order_time, '%Y-%m') = '"+params.get("year")+"-"+params.get("month")+"'") - .select("DATE_FORMAT(t.order_time, '%Y-%m-%d %H:%i:%s') orderTime,if(t.source=0,'一路健康',if(t.source=1,'吴门医述','管理员')) source," + - "if(t.type=0,'充值',IF(t.type=1,'vip',IF(t.type=2,'课程',IF(t.type=3,'实物','培训班')))) type," + - "IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行')) payType,t.tel,t.order_sn,t.fee,t.point") - .orderByAsc(Orders::getOrderTime)); String fileName = params.get("year")+""+params.get("month")+"天医币明细"; XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(fileName); - Row titleRow = sheet.createRow(0); - titleRow.createCell(0).setCellValue("时间"); - titleRow.createCell(1).setCellValue("来源"); - titleRow.createCell(2).setCellValue("支付方式"); - titleRow.createCell(3).setCellValue("类型"); - titleRow.createCell(4).setCellValue("电话"); - titleRow.createCell(5).setCellValue("订单号"); - titleRow.createCell(6).setCellValue("金额"); - titleRow.createCell(7).setCellValue("天医币"); - int cell = 1; - for (Map map : coinInfoList) { - Row row = sheet.createRow(cell); - row.createCell(0).setCellValue(map.get("orderTime").toString()); - row.createCell(1).setCellValue(map.get("source").toString()); - row.createCell(2).setCellValue(map.get("payType").toString()); - row.createCell(3).setCellValue(map.get("type").toString()); - row.createCell(4).setCellValue(map.get("tel").toString()); - row.createCell(5).setCellValue(map.get("order_sn").toString()); - row.createCell(6).setCellValue(map.get("fee").toString()); - row.createCell(7).setCellValue(map.get("point").toString()); - //序号自增 - cell++; - } + exportCommon(sheet ,ordersService.coinInfoExportList(params)); exportTem(response,wb,fileName+".xlsx"); return R.ok(); } + public void exportCommon(Sheet sheet ,List> list) { + if (list.size()>0){ + Row titleRow = sheet.createRow(0); + Map title = new TreeMap<>(list.get(0)); + int i=0; + for (Map.Entry m:title.entrySet()){ + titleRow.createCell(i).setCellValue(m.getKey().toString().substring(2)); + i++; + } + int cell = 1; + for (Map map : list) { + map = new TreeMap<>(map); + Row row = sheet.createRow(cell); + int q=0; + for (Map.Entry m:map.entrySet()){ + row.createCell(q).setCellValue(m.getValue().toString()); + q++; + } + //序号自增 + cell++; + } + } + } + //vip明细导出 @RequestMapping("/vipInfoExport") public R vipInfoExport(HttpServletResponse response, @RequestBody Map params) throws ParseException { - String date = params.get("year")+"-"+params.get("month"); - List> vipOrders = ordersService.listMaps(new MPJLambdaWrapper() - .leftJoin(PaymentToOrder.class,PaymentToOrder::getOrderId,Orders::getId) - .leftJoin(Payment.class,Payment::getId,PaymentToOrder::getPaymentId) - .disableSubLogicDel() - .eq(Orders::getUseFlag,1).eq(Orders::getType,1) - .select("DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') orderTime,if(source=0,'一路健康',if(source=1,'吴门医述','管理员')) source,order_old_id orderOldId," + - "IF(t.pay_type=1,'天医币',IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行'))) type,tel,order_sn,t.fee realMoney") - .orderByAsc(Orders::getOrderTime)); - //吴门医述订单 - List wumenOrderIds = vipOrders.stream().filter(o -> o.get("source").equals("吴门医述")) - .map(map->map.get("orderOldId").toString()).collect(Collectors.toList()); - List> buyOrders = buyOrderService.listMaps(new MPJLambdaWrapper() - .leftJoin(UserVipLog.class,UserVipLog::getOrderSn,BuyOrder::getOrderSn) - .leftJoin(UserVip.class,UserVip::getId,UserVipLog::getUserVipId) - .disableSubLogicDel() - .in(BuyOrder::getOrderId,wumenOrderIds) - .select("t.order_id oid,if(t2.type=4,'中医学vip',if(t2.type=5,'针灸学vip',if(t2.type=6,'肿瘤学vip',if(t2.type=7,'国学vip',if(t2.type=8,'心理学vip',if(t2.type=9,'中西汇通vip','其他')))))) vipType," + - "t1.price fee,DATE_FORMAT(t1.start_time, '%Y-%m-%d') startTime,DATE_FORMAT(t1.end_time, '%Y-%m-%d') endTime")); - Map buyOrdersMap = new HashMap<>(); - for (Map m : buyOrders) { - List> l = new ArrayList<>(); - if(buyOrdersMap.get(m.get("oid").toString())!=null){ - l = (List>) buyOrdersMap.get(m.get("oid").toString()); - } - l.add(m); - buyOrdersMap.put(m.get("oid").toString(),l); - } - YearMonth yearMonth = YearMonth.parse(date); - SimpleDateFormat sdfday = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdfmonth = new SimpleDateFormat("yyyy-MM"); - String day = date+"-"+yearMonth.lengthOfMonth(); - String month = date; - List> result = new ArrayList<>(); - for(Map vipOrder:vipOrders){ - if (vipOrder.get("source").equals("吴门医述")){ - List> l = (List>) buyOrdersMap.get(vipOrder.get("orderOldId")); - for (Map m : l) { - Map res = new HashMap<>(); - if (m.get("fee")!=null){ - res.put("fee",m.get("fee")); - res.put("startTime",m.get("startTime")); - res.put("endTime",m.get("endTime")); - }else { - res.put("fee",vipOrder.get("realMoney")); - res.put("startTime",vipOrder.get("orderTime")); - res.put("endTime",vipOrder.get("orderTime")); - } - res.put("vipType",m.get("vipType")); - res.putAll(vipOrder); - result.add(res); - } - }else { - FinanceOrder financeOrder = financeOrderService.getById(vipOrder.get("orderOldId").toString()); - vipOrder.put("fee",financeOrder.getRealMoney()); - vipOrder.put("startTime",sdfday.format(financeOrder.getStartTime())); - vipOrder.put("endTime",sdfday.format(financeOrder.getEndTime())); - vipOrder.put("vipType",financeOrder.getProductName()); - result.add(vipOrder); - } - } - for (Map map:result){ - map.put("now",BigDecimal.ZERO); - map.put("already",BigDecimal.ZERO); - map.put("notyet",BigDecimal.ZERO); - BigDecimal fee = (BigDecimal) map.get("fee"); - String startTime = (String) map.get("startTime"); - String endTime = (String) map.get("endTime"); - if (startTime.equals(endTime)){ - if (map.get("orderTime").toString().contains(month)){ - map.put("now",fee); - } else if (sdfmonth.parse(startTime).getTime()sdfmonth.parse(endTime).getTime()){ - map.put("already",fee); - //未开始摊销 - }else if (sdfday.parse(day).getTime()0){ - map.put("already",dayAmount.multiply(new BigDecimal(alreadyDays))); - }else { - alreadyDays = 0; - } - //当前月天数 - int nowDays = Integer.parseInt(day.substring(8, 10)); - BigDecimal now = BigDecimal.ZERO; - //如果开始时间是当前月,月天数-开始日=当月摊销天数 - if (startTime.contains(month)){ - nowDays = Integer.parseInt(day.substring(8, 10))-Integer.parseInt(startTime.substring(8, 10))+1; - now = dayAmount.multiply(new BigDecimal(nowDays)); - } else if (endTime.contains(month)) { - now = fee.subtract(dayAmount.multiply(new BigDecimal(alreadyDays))); - }else { - now = dayAmount.multiply(new BigDecimal(nowDays)); - } - map.put("now",now); - //剩余未摊销 - map.put("notyet",fee.subtract(now).subtract(dayAmount.multiply(new BigDecimal(alreadyDays)))); - } - } String fileName = params.get("year")+""+params.get("month")+"vip明细"; XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(fileName); - Row titleRow = sheet.createRow(0); - titleRow.createCell(0).setCellValue("时间"); - titleRow.createCell(1).setCellValue("来源"); - titleRow.createCell(2).setCellValue("类型"); - titleRow.createCell(3).setCellValue("电话"); - titleRow.createCell(4).setCellValue("订单号"); - titleRow.createCell(5).setCellValue("缴费金额"); - titleRow.createCell(6).setCellValue("金额"); - titleRow.createCell(7).setCellValue("VIP类型"); - titleRow.createCell(8).setCellValue("开始时间"); - titleRow.createCell(9).setCellValue("结束时间"); - titleRow.createCell(10).setCellValue("已摊销"); - titleRow.createCell(11).setCellValue("当前摊销"); - titleRow.createCell(12).setCellValue("剩余摊销"); - int cell = 1; - for (Map map : result) { - Row row = sheet.createRow(cell); - row.createCell(0).setCellValue(map.get("orderTime").toString()); - row.createCell(1).setCellValue(map.get("source").toString()); - row.createCell(2).setCellValue(map.get("type").toString()); - row.createCell(3).setCellValue(map.get("tel").toString()); - row.createCell(4).setCellValue(map.get("order_sn").toString()); - row.createCell(5).setCellValue(map.get("realMoney").toString()); - row.createCell(6).setCellValue(map.get("fee").toString()); - row.createCell(7).setCellValue(map.get("vipType").toString()); - row.createCell(8).setCellValue(map.get("startTime").toString()); - row.createCell(9).setCellValue(map.get("endTime").toString()); - row.createCell(10).setCellValue(map.get("already").toString()); - row.createCell(11).setCellValue(map.get("now").toString()); - row.createCell(12).setCellValue(map.get("notyet").toString()); - //序号自增 - cell++; - } + exportCommon(sheet ,ordersService.vipInfoExportList(params)); exportTem(response,wb,fileName+".xlsx"); return R.ok(); } @@ -441,217 +307,10 @@ public class StatisticsController { //课程明细导出 @RequestMapping("/courseInfoExport") public R courseInfoExport(HttpServletResponse response,@RequestBody Map params) throws ParseException { - String date = params.get("year")+"-"+params.get("month"); - //所有课程订单 - List> courseOrders = ordersService.listMaps(new MPJLambdaWrapper() - .leftJoin(PaymentToOrder.class,PaymentToOrder::getOrderId,Orders::getId) - .leftJoin(Payment.class,Payment::getId,PaymentToOrder::getPaymentId) - .disableSubLogicDel() - .eq(Orders::getUseFlag,1).eq(Orders::getType,2) - .select("DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') orderTime,if(source=0,'一路健康',if(source=1,'吴门医述','管理员')) source,order_old_id orderOldId," + - "IF(t.pay_type=1,'天医币',IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行'))) type,tel,order_sn,t.fee realMoney") - .orderByAsc(Orders::getOrderTime)); - //一路健康订单课程 - List taihuOrderIds = courseOrders.stream().filter(o -> o.get("source").equals("一路健康")) - .map(map->map.get("orderOldId").toString()).collect(Collectors.toList()); - Map> taihuClassMap = customerApplyCurriculumService.listMaps(new MPJLambdaWrapper() - .in("t.oid", taihuOrderIds) - .apply("t.valid=1 and t.status = '50'") - .select("t.oid,if(t.point>0,t.point,t.money) fee,curriculumID")) - .stream().collect(Collectors.toMap(m -> m.get("oid").toString(), m -> m)); - //订单开课记录 - Map> ctc = customerTaihuClassService.listMaps(new MPJLambdaWrapper() - .like(TCustomerTaihuClass::getDescription,"KC20") - .in(TCustomerTaihuClass::getStatus,10) - .gt(TCustomerTaihuClass::getStudydays,0) - .select("SUBSTRING(description, LOCATE('KC', description), 16) description,oid,DATE_FORMAT(startDate, '%Y-%m-%d') startDate,studyDays")) - .stream().collect(Collectors.toMap(m -> m.get("description").toString()+"-"+m.get("oid").toString(), m -> m)); - //吴门医述订单课程 - List wumenOrderIds = courseOrders.stream().filter(o -> o.get("source").equals("吴门医述")) - .map(map->map.get("orderOldId").toString()).collect(Collectors.toList()); - List> buyOrdersList = buyOrderService.listMaps(new MPJLambdaWrapper() - .leftJoin("user_course_buy_log t1 on (t1.order_sn = t.order_sn )") - .leftJoin("user_course_buy t2 on t2.id = t1.user_course_buy_id") - .in("t.order_id",wumenOrderIds) - .gt(BuyOrder::getRealMoney,0) - .select("t.order_id oid,t1.id ucblid,if(t1.fee is null,t.real_money,t1.fee) fee,t1.days,t1.begin_day," + - "DATE_FORMAT(t2.start_time, '%Y-%m-%d %H:%i:%s') startTime,t.order_sn")); - Map buyOrdersMap = new HashMap<>(); - for (Map m : buyOrdersList) { - List> l = new ArrayList<>(); - if(buyOrdersMap.get(m.get("oid").toString())!=null){ - l = (List>) buyOrdersMap.get(m.get("oid").toString()); - } - l.add(m); - buyOrdersMap.put(m.get("oid").toString(),l); - } - YearMonth yearMonth = YearMonth.parse(date); - SimpleDateFormat sdfday = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdfmonth = new SimpleDateFormat("yyyy-MM"); - String day = date+"-"+yearMonth.lengthOfMonth(); - String month = date; - List> result = new ArrayList<>(); - for(Map courseOrder:courseOrders){ - String orderTime = courseOrder.get("orderTime").toString().substring(0,10); - if (courseOrder.get("source").equals("一路健康")){ - Map res = new HashMap<>(); - Map taihuClass = taihuClassMap.get(courseOrder.get("orderOldId").toString()); - Map tc = ctc.entrySet().stream().filter(e -> e.getKey() - .contains(taihuClass.get("curriculumID").toString())).map(Map.Entry::getValue).findFirst().orElse(null); - res.put("fee",courseOrder.get("realMoney")); - if (tc != null&&tc.get("startDate")!=null) { - res.put("startTime",tc.get("startDate")); - res.put("endTime",sdfday.format(DateUtils.addDays(sdfday.parse(tc.get("startDate").toString()), (Integer) tc.get("studyDays")))); - }else { - res.put("startTime",orderTime); - res.put("endTime",orderTime); - } - res.putAll(courseOrder); - result.add(res); - }else if(courseOrder.get("source").equals("吴门医述")){ - List> l = (List>) buyOrdersMap.get(courseOrder.get("orderOldId")); - if (l!=null){ - for (int i=0;i res = new HashMap<>(); - Map m = l.get(i); - if (m.get("ucblid")!=null){ - if (new BigDecimal(m.get("fee").toString()).compareTo(BigDecimal.ZERO)>0){ - res.put("fee",m.get("fee")); - }else { - BigDecimal one = new BigDecimal(courseOrder.get("realMoney").toString()).divide(new BigDecimal(l.size()),2,BigDecimal.ROUND_HALF_UP); - if (i==l.size()-1){ - res.put("fee",new BigDecimal(courseOrder.get("realMoney").toString()).subtract(one.multiply(new BigDecimal(l.size()-1)))); - }else { - res.put("fee",one); - } - } - if (m.get("startTime")==null){ - res.put("startTime",null); - res.put("endTime",null); - }else { - if (Integer.parseInt(m.get("begin_day").toString())==0){ - res.put("startTime",m.get("startTime").toString()); - res.put("endTime",sdfday.format(DateUtils.addDays(sdfday.parse(m.get("startTime").toString()), - Integer.parseInt(m.get("days").toString())-1))); - }else { - res.put("startTime",sdfday.format(DateUtils.addDays(sdfday.parse(m.get("startTime").toString()), - Integer.parseInt(m.get("days").toString())))); - res.put("endTime",sdfday.format(DateUtils.addDays(sdfday.parse(res.get("startTime").toString()), - Integer.parseInt(m.get("days").toString())-1))); - } - } - }else { - res.put("fee",courseOrder.get("realMoney")); - res.put("startTime",orderTime); - res.put("endTime",orderTime); - } - res.putAll(courseOrder); - result.add(res); - } - }else { - Map res = new HashMap<>(); - res.put("fee",courseOrder.get("realMoney")); - res.put("startTime",orderTime); - res.put("endTime",orderTime); - res.putAll(courseOrder); - result.add(res); - } - }else { - FinanceOrder financeOrder = financeOrderService.getById(courseOrder.get("orderOldId").toString()); - courseOrder.put("fee",financeOrder.getRealMoney()); - courseOrder.put("startTime",sdfday.format(financeOrder.getStartTime())); - courseOrder.put("endTime",sdfday.format(financeOrder.getEndTime())); - result.add(courseOrder); - } - } - for (Map map:result) { - map.put("now", BigDecimal.ZERO); - map.put("already", BigDecimal.ZERO); - map.put("notyet", BigDecimal.ZERO); - BigDecimal fee = (BigDecimal) map.get("fee"); - String startTime = (String) map.get("startTime"); - String endTime = (String) map.get("endTime"); - if (startTime==null){ - if (sdfmonth.parse(map.get("orderTime").toString()).getTime()<=sdfmonth.parse(month).getTime()){ - map.put("notyet",fee); - } - }else if (startTime.equals(endTime)){ - if (startTime.contains(month)){ - map.put("now",fee); - } else if (sdfmonth.parse(startTime).getTime()sdfmonth.parse(endTime).getTime()){ - map.put("already",fee); - //未开始摊销 - }else if (sdfday.parse(day).getTime()0){ - map.put("already",dayAmount.multiply(new BigDecimal(alreadyDays))); - }else { - alreadyDays = 0; - } - //当前月天数 - int nowDays = Integer.parseInt(day.substring(8, 10)); - BigDecimal now = BigDecimal.ZERO; - //如果开始时间是当前月,月天数-开始日=当月摊销天数 - if (startTime.contains(month)){ - nowDays = Integer.parseInt(day.substring(8, 10))-Integer.parseInt(startTime.substring(8, 10))+1; - now = dayAmount.multiply(new BigDecimal(nowDays)); - } else if (endTime.contains(month)) { - now = fee.subtract(dayAmount.multiply(new BigDecimal(alreadyDays))); - }else { - now = dayAmount.multiply(new BigDecimal(nowDays)); - } - map.put("now",now); - //剩余未摊销 - map.put("notyet",fee.subtract(now).subtract(dayAmount.multiply(new BigDecimal(alreadyDays)))); - } - } String fileName = params.get("year")+""+params.get("month")+"课程明细"; XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(fileName); - Row titleRow = sheet.createRow(0); - titleRow.createCell(0).setCellValue("时间"); - titleRow.createCell(1).setCellValue("来源"); - titleRow.createCell(2).setCellValue("类型"); - titleRow.createCell(3).setCellValue("电话"); - titleRow.createCell(4).setCellValue("订单号"); - titleRow.createCell(5).setCellValue("缴费金额"); - titleRow.createCell(6).setCellValue("金额"); - titleRow.createCell(7).setCellValue("开始时间"); - titleRow.createCell(8).setCellValue("结束时间"); - titleRow.createCell(9).setCellValue("已摊销"); - titleRow.createCell(10).setCellValue("当前摊销"); - titleRow.createCell(11).setCellValue("剩余摊销"); - int cell = 1; - for (Map map : result) { - Row row = sheet.createRow(cell); - row.createCell(0).setCellValue(map.get("orderTime").toString()); - row.createCell(1).setCellValue(map.get("source").toString()); - row.createCell(2).setCellValue(map.get("type").toString()); - row.createCell(3).setCellValue(map.get("tel").toString()); - row.createCell(4).setCellValue(map.get("order_sn").toString()); - row.createCell(5).setCellValue(map.get("realMoney").toString()); - row.createCell(6).setCellValue(map.get("fee").toString()); - row.createCell(7).setCellValue(map.get("startTime")==null?"":map.get("startTime").toString()); - row.createCell(8).setCellValue(map.get("endTime")==null?"":map.get("endTime").toString()); - row.createCell(9).setCellValue(map.get("already").toString()); - row.createCell(10).setCellValue(map.get("now").toString()); - row.createCell(11).setCellValue(map.get("notyet").toString()); - //序号自增 - cell++; - } + exportCommon(sheet ,ordersService.courseInfoExportList(params)); exportTem(response,wb,fileName+".xlsx"); return R.ok(); } @@ -815,7 +474,7 @@ public class StatisticsController { //总天数 int totalDays = Math.toIntExact((sdfday.parse(endTime).getTime() - sdfday.parse(startTime).getTime()) / 1000 / 60 / 60 / 24)+1; //日摊销 - BigDecimal dayAmount = fee.divide(new BigDecimal(totalDays),2, BigDecimal.ROUND_HALF_UP); + BigDecimal dayAmount = fee.divide(new BigDecimal(totalDays),3, BigDecimal.ROUND_HALF_UP); //已摊销天数 int alreadyDays = Math.toIntExact((sdfmonth.parse(month).getTime() - sdfday.parse(startTime).getTime()) / 1000 / 60 / 60 / 24); if (alreadyDays>0){ @@ -827,7 +486,9 @@ public class StatisticsController { int nowDays = Integer.parseInt(day.substring(8, 10)); BigDecimal now = BigDecimal.ZERO; //如果开始时间是当前月,月天数-开始日=当月摊销天数 - if (startTime.contains(month)){ + if (startTime.contains(month)&&endTime.contains(month)){ + now = fee; + } else if (startTime.contains(month)){ nowDays = Integer.parseInt(day.substring(8, 10))-Integer.parseInt(startTime.substring(8, 10))+1; now = dayAmount.multiply(new BigDecimal(nowDays)); } else if (endTime.contains(month)) { @@ -859,39 +520,13 @@ public class StatisticsController { //实物明细导出 @RequestMapping("/physicalInfoExport") public R physicalInfoExport(HttpServletResponse response,@RequestBody Map params){ - List> coinInfoList = ordersService.listMaps(new MPJLambdaWrapper() - .leftJoin(PaymentToOrder.class,PaymentToOrder::getOrderId,Orders::getId) - .leftJoin(Payment.class,Payment::getId,PaymentToOrder::getPaymentId) - .disableSubLogicDel() - .eq(Orders::getUseFlag,1).eq(Orders::getType,3) - .apply("DATE_FORMAT(t.order_time, '%Y-%m') = '"+params.get("year")+"-"+params.get("month")+"'") - .select("DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') orderTime,if(source=0,'一路健康',if(source=1,'吴门医述','管理员')) source," + - "IF(t.pay_type=1,'天医币',IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行'))) type,tel,order_sn,t.fee") - .orderByAsc(Orders::getOrderTime)); + List> physicalInfoList = ordersService.physicalInfoExportList(params); String fileName = params.get("year")+""+params.get("month")+"实物明细"; XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(fileName); - Row titleRow = sheet.createRow(0); - titleRow.createCell(0).setCellValue("时间"); - titleRow.createCell(1).setCellValue("来源"); - titleRow.createCell(2).setCellValue("类型"); - titleRow.createCell(3).setCellValue("电话"); - titleRow.createCell(4).setCellValue("订单号"); - titleRow.createCell(5).setCellValue("金额"); - int cell = 1; - for (Map map : coinInfoList) { - Row row = sheet.createRow(cell); - row.createCell(0).setCellValue(map.get("orderTime").toString()); - row.createCell(1).setCellValue(map.get("source").toString()); - row.createCell(2).setCellValue(map.get("type").toString()); - row.createCell(3).setCellValue(map.get("tel").toString()); - row.createCell(4).setCellValue(map.get("order_sn").toString()); - row.createCell(5).setCellValue(map.get("fee").toString()); - //序号自增 - cell++; - } + exportCommon(sheet,physicalInfoList); exportTem(response,wb,fileName+".xlsx"); - return R.ok().put("infoList",coinInfoList); + return R.ok().put("infoList",physicalInfoList); } //培训班 @@ -910,39 +545,13 @@ public class StatisticsController { //培训班明细导出 @RequestMapping("/trainingClassInfoExport") public R trainingClassInfoExport(HttpServletResponse response,@RequestBody Map params){ - List> coinInfoList = ordersService.listMaps(new MPJLambdaWrapper() - .leftJoin(PaymentToOrder.class,PaymentToOrder::getOrderId,Orders::getId) - .leftJoin(Payment.class,Payment::getId,PaymentToOrder::getPaymentId) - .disableSubLogicDel() - .eq(Orders::getUseFlag,1).eq(Orders::getType,4) - .apply("DATE_FORMAT(t.order_time, '%Y-%m') = '"+params.get("year")+"-"+params.get("month")+"'") - .select("DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') orderTime,if(source=0,'一路健康',if(source=1,'吴门医述','管理员')) source," + - "IF(t.pay_type=1,'天医币',IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行'))) type,tel,order_sn,t.fee") - .orderByAsc(Orders::getOrderTime)); + List> trainingClassInfoList = ordersService.trainingClassInfoExportList(params); String fileName = params.get("year")+""+params.get("month")+"培训班明细"; XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet(fileName); - Row titleRow = sheet.createRow(0); - titleRow.createCell(0).setCellValue("时间"); - titleRow.createCell(1).setCellValue("来源"); - titleRow.createCell(2).setCellValue("支付类型"); - titleRow.createCell(3).setCellValue("电话"); - titleRow.createCell(4).setCellValue("订单号"); - titleRow.createCell(5).setCellValue("金额"); - int cell = 1; - for (Map map : coinInfoList) { - Row row = sheet.createRow(cell); - row.createCell(0).setCellValue(map.get("orderTime").toString()); - row.createCell(1).setCellValue(map.get("source").toString()); - row.createCell(2).setCellValue(map.get("type").toString()); - row.createCell(3).setCellValue(map.get("tel").toString()); - row.createCell(4).setCellValue(map.get("order_sn").toString()); - row.createCell(5).setCellValue(map.get("fee").toString()); - //序号自增 - cell++; - } + exportCommon(sheet,trainingClassInfoList); exportTem(response,wb,fileName+".xlsx"); - return R.ok().put("infoList",coinInfoList); + return R.ok().put("infoList",trainingClassInfoList); } public void exportTem(HttpServletResponse response, XSSFWorkbook wb, String fileName){ diff --git a/src/main/java/com/zmzm/finance/common/service/IOrdersService.java b/src/main/java/com/zmzm/finance/common/service/IOrdersService.java index fe839c5..efb8f24 100644 --- a/src/main/java/com/zmzm/finance/common/service/IOrdersService.java +++ b/src/main/java/com/zmzm/finance/common/service/IOrdersService.java @@ -3,6 +3,10 @@ package com.zmzm.finance.common.service; import com.zmzm.finance.common.entity.Orders; import com.baomidou.mybatisplus.extension.service.IService; +import java.text.ParseException; +import java.util.List; +import java.util.Map; + /** *

* 订单表,从我们各个系统读取的数据 服务类 @@ -17,4 +21,14 @@ public interface IOrdersService extends IService { void updatePoint(Integer ordersId); + List> coinInfoExportList(Map params); + + List> vipInfoExportList(Map params) throws ParseException; + + List> courseInfoExportList(Map params) throws ParseException; + + List> physicalInfoExportList(Map params); + + List> trainingClassInfoExportList(Map params); + } diff --git a/src/main/java/com/zmzm/finance/common/service/impl/OrdersServiceImpl.java b/src/main/java/com/zmzm/finance/common/service/impl/OrdersServiceImpl.java index 20f88ad..fecf25f 100644 --- a/src/main/java/com/zmzm/finance/common/service/impl/OrdersServiceImpl.java +++ b/src/main/java/com/zmzm/finance/common/service/impl/OrdersServiceImpl.java @@ -2,19 +2,23 @@ package com.zmzm.finance.common.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.zmzm.finance.common.dao.BuyOrderMapper; -import com.zmzm.finance.common.dao.TCustomerApplyBuyMapper; -import com.zmzm.finance.common.dao.UserMapper; +import com.zmzm.finance.common.dao.*; import com.zmzm.finance.common.entity.*; -import com.zmzm.finance.common.dao.OrdersMapper; import com.zmzm.finance.common.service.IOrdersService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang.time.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.YearMonth; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** *

@@ -30,9 +34,13 @@ public class OrdersServiceImpl extends ServiceImpl impleme @Autowired private BuyOrderMapper buyOrderMapper; @Autowired - private TCustomerApplyBuyMapper customerApplyBuyMapper; - @Autowired private UserMapper userMapper; + @Autowired + private FinanceOrderMapper financeOrderMapper; + @Autowired + private TCustomerApplyCurriculumMapper customerApplyCurriculumMapper; + @Autowired + private TCustomerTaihuClassMapper customerTaihuClassMapper; @Override public void importWumenOrder() { @@ -119,4 +127,383 @@ public class OrdersServiceImpl extends ServiceImpl impleme } } + @Override + public List> coinInfoExportList(Map params) { + List> coinInfoList = this.baseMapper.selectMaps(new MPJLambdaWrapper() + .disableSubLogicDel() + .leftJoin(PaymentToOrder.class,PaymentToOrder::getOrderId,Orders::getId) + .leftJoin(Payment.class,Payment::getId,PaymentToOrder::getPaymentId) + .eq(Orders::getUseFlag,1).and(t->t.eq(Orders::getType,0).or().eq(Orders::getPayType,1)) + .apply("DATE_FORMAT(t.order_time, '%Y-%m') = '"+params.get("year")+"-"+params.get("month")+"'") + .select("DATE_FORMAT(t.order_time, '%Y-%m-%d %H:%i:%s') 01时间,if(t.source=0,'一路健康',if(t.source=1,'吴门医述','管理员')) 02来源," + + "IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行')) 03支付方式,t.tel 04电话,t.order_sn 05订单号," + + "if(t.type=0,'充值',IF(t.type=1,'vip',IF(t.type=2,'课程',IF(t.type=3,'实物','培训班')))) 06类型, +t.fee 07金额,t.point 08充值天医币") + .orderByAsc(Orders::getOrderTime)); + return coinInfoList; + } + + @Override + public List> vipInfoExportList(Map params) throws ParseException { + String date = params.get("year")+"-"+params.get("month"); + List> vipOrders = this.baseMapper.selectMaps(new MPJLambdaWrapper() + .leftJoin(PaymentToOrder.class,PaymentToOrder::getOrderId,Orders::getId) + .leftJoin(Payment.class,Payment::getId,PaymentToOrder::getPaymentId) + .disableSubLogicDel() + .eq(Orders::getUseFlag,1).eq(Orders::getType,1) + .select("DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') orderTime,if(source=0,'一路健康',if(source=1,'吴门医述','管理员')) source,order_old_id orderOldId," + + "IF(t.pay_type=1,'天医币',IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行'))) type,tel,order_sn,t.fee realMoney") + .orderByAsc(Orders::getOrderTime)); + //吴门医述订单 + List wumenOrderIds = vipOrders.stream().filter(o -> o.get("source").equals("吴门医述")) + .map(map->map.get("orderOldId").toString()).collect(Collectors.toList()); + List> buyOrders = buyOrderMapper.selectMaps(new MPJLambdaWrapper() + .leftJoin(UserVipLog.class,UserVipLog::getOrderSn,BuyOrder::getOrderSn) + .leftJoin(UserVip.class,UserVip::getId,UserVipLog::getUserVipId) + .disableSubLogicDel() + .in(BuyOrder::getOrderId,wumenOrderIds) + .select("t.order_id oid,if(t2.type=4,'中医学vip',if(t2.type=5,'针灸学vip',if(t2.type=6,'肿瘤学vip',if(t2.type=7,'国学vip',if(t2.type=8,'心理学vip',if(t2.type=9,'中西汇通vip','其他')))))) vipType," + + "t1.price fee,DATE_FORMAT(t1.start_time, '%Y-%m-%d') startTime,DATE_FORMAT(t1.end_time, '%Y-%m-%d') endTime")); + Map buyOrdersMap = new HashMap<>(); + for (Map m : buyOrders) { + List> l = new ArrayList<>(); + if(buyOrdersMap.get(m.get("oid").toString())!=null){ + l = (List>) buyOrdersMap.get(m.get("oid").toString()); + } + l.add(m); + buyOrdersMap.put(m.get("oid").toString(),l); + } + YearMonth yearMonth = YearMonth.parse(date); + SimpleDateFormat sdfday = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdfmonth = new SimpleDateFormat("yyyy-MM"); + String day = date+"-"+yearMonth.lengthOfMonth(); + String month = date; + List> result = new ArrayList<>(); + for(Map vipOrder:vipOrders){ + if (vipOrder.get("source").equals("吴门医述")){ + List> l = (List>) buyOrdersMap.get(vipOrder.get("orderOldId")); + for (Map m : l) { + Map res = new HashMap<>(); + if (m.get("fee")!=null){ + res.put("fee",m.get("fee")); + res.put("startTime",m.get("startTime")); + res.put("endTime",m.get("endTime")); + }else { + res.put("fee",vipOrder.get("realMoney")); + res.put("startTime",vipOrder.get("orderTime")); + res.put("endTime",vipOrder.get("orderTime")); + } + res.put("vipType",m.get("vipType")); + res.putAll(vipOrder); + result.add(res); + } + }else { + FinanceOrder financeOrder = financeOrderMapper.selectById(vipOrder.get("orderOldId").toString()); + vipOrder.put("fee",financeOrder.getRealMoney()); + vipOrder.put("startTime",sdfday.format(financeOrder.getStartTime())); + vipOrder.put("endTime",sdfday.format(financeOrder.getEndTime())); + vipOrder.put("vipType",financeOrder.getProductName()); + result.add(vipOrder); + } + } + for (Map map:result){ + map.put("now",BigDecimal.ZERO); + map.put("already",BigDecimal.ZERO); + map.put("notyet",BigDecimal.ZERO); + BigDecimal fee = (BigDecimal) map.get("fee"); + String startTime = (String) map.get("startTime"); + String endTime = (String) map.get("endTime"); + if (startTime.equals(endTime)){ + if (map.get("orderTime").toString().contains(month)){ + map.put("now",fee); + } else if (sdfmonth.parse(startTime).getTime()sdfmonth.parse(endTime).getTime()){ + map.put("already",fee); + //未开始摊销 + }else if (sdfday.parse(day).getTime()0){ + map.put("already",dayAmount.multiply(new BigDecimal(alreadyDays))); + }else { + alreadyDays = 0; + } + //当前月天数 + int nowDays = Integer.parseInt(day.substring(8, 10)); + BigDecimal now = BigDecimal.ZERO; + //如果开始时间是当前月,月天数-开始日=当月摊销天数 + if (startTime.contains(month)){ + nowDays = Integer.parseInt(day.substring(8, 10))-Integer.parseInt(startTime.substring(8, 10))+1; + now = dayAmount.multiply(new BigDecimal(nowDays)); + } else if (endTime.contains(month)) { + now = fee.subtract(dayAmount.multiply(new BigDecimal(alreadyDays))); + }else { + now = dayAmount.multiply(new BigDecimal(nowDays)); + } + map.put("now",now); + //剩余未摊销 + map.put("notyet",fee.subtract(now).subtract(dayAmount.multiply(new BigDecimal(alreadyDays)))); + } + } + List> exportList = new ArrayList<>(); + for (Map map:result){ + Map m = new HashMap<>(); + m.put("01时间",map.get("orderTime")); + m.put("02来源",map.get("source")); + m.put("03类型",map.get("type")); + m.put("04电话",map.get("tel")); + m.put("05订单编号",map.get("order_sn")); + m.put("06订单金额",map.get("realMoney")); + m.put("07金额",map.get("fee")); + m.put("08VIP类型",map.get("vipType")); + m.put("09开始时间",map.get("startTime")); + m.put("10结束时间",map.get("endTime")); + m.put("11已摊销",map.get("already")); + m.put("12当前摊销",map.get("now")); + m.put("13剩余摊销",map.get("notyet")); + exportList.add(m); + } + return exportList; + } + + @Override + public List> courseInfoExportList(Map params) throws ParseException { + String date = params.get("year")+"-"+params.get("month"); + //所有课程订单 + List> courseOrders = this.baseMapper.selectMaps(new MPJLambdaWrapper() + .leftJoin(PaymentToOrder.class,PaymentToOrder::getOrderId,Orders::getId) + .leftJoin(Payment.class,Payment::getId,PaymentToOrder::getPaymentId) + .disableSubLogicDel() + .eq(Orders::getUseFlag,1).eq(Orders::getType,2) + .select("DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') orderTime,if(source=0,'一路健康',if(source=1,'吴门医述','管理员')) source,order_old_id orderOldId," + + "IF(t.pay_type=1,'天医币',IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行'))) type,tel,order_sn,t.fee realMoney") + .orderByAsc(Orders::getOrderTime)); + //一路健康订单课程 + List taihuOrderIds = courseOrders.stream().filter(o -> o.get("source").equals("一路健康")) + .map(map->map.get("orderOldId").toString()).collect(Collectors.toList()); + Map> taihuClassMap = customerApplyCurriculumMapper.selectMaps(new MPJLambdaWrapper() + .in("t.oid", taihuOrderIds) + .apply("t.valid=1 and t.status = '50'") + .select("t.oid,if(t.point>0,t.point,t.money) fee,curriculumID")) + .stream().collect(Collectors.toMap(m -> m.get("oid").toString(), m -> m)); + //订单开课记录 + Map> ctc = customerTaihuClassMapper.selectMaps(new MPJLambdaWrapper() + .like(TCustomerTaihuClass::getDescription,"KC20") + .in(TCustomerTaihuClass::getStatus,10) + .gt(TCustomerTaihuClass::getStudydays,0) + .select("SUBSTRING(description, LOCATE('KC', description), 16) description,oid,DATE_FORMAT(startDate, '%Y-%m-%d') startDate,studyDays")) + .stream().collect(Collectors.toMap(m -> m.get("description").toString()+"-"+m.get("oid").toString(), m -> m)); + //吴门医述订单课程 + List wumenOrderIds = courseOrders.stream().filter(o -> o.get("source").equals("吴门医述")) + .map(map->map.get("orderOldId").toString()).collect(Collectors.toList()); + List> buyOrdersList = buyOrderMapper.selectMaps(new MPJLambdaWrapper() + .leftJoin("user_course_buy_log t1 on (t1.order_sn = t.order_sn )") + .leftJoin("user_course_buy t2 on t2.id = t1.user_course_buy_id") + .in("t.order_id",wumenOrderIds) + .gt(BuyOrder::getRealMoney,0) + .select("t.order_id oid,t1.id ucblid,if(t1.fee is null,t.real_money,t1.fee) fee,t1.days,t1.begin_day," + + "DATE_FORMAT(t2.start_time, '%Y-%m-%d %H:%i:%s') startTime,t.order_sn")); + Map buyOrdersMap = new HashMap<>(); + for (Map m : buyOrdersList) { + List> l = new ArrayList<>(); + if(buyOrdersMap.get(m.get("oid").toString())!=null){ + l = (List>) buyOrdersMap.get(m.get("oid").toString()); + } + l.add(m); + buyOrdersMap.put(m.get("oid").toString(),l); + } + YearMonth yearMonth = YearMonth.parse(date); + SimpleDateFormat sdfday = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdfmonth = new SimpleDateFormat("yyyy-MM"); + String day = date+"-"+yearMonth.lengthOfMonth(); + String month = date; + List> result = new ArrayList<>(); + for(Map courseOrder:courseOrders){ + String orderTime = courseOrder.get("orderTime").toString().substring(0,10); + if (courseOrder.get("source").equals("一路健康")){ + Map res = new HashMap<>(); + Map taihuClass = taihuClassMap.get(courseOrder.get("orderOldId").toString()); + Map tc = ctc.entrySet().stream().filter(e -> e.getKey() + .contains(taihuClass.get("curriculumID").toString())).map(Map.Entry::getValue).findFirst().orElse(null); + res.put("fee",courseOrder.get("realMoney")); + if (tc != null&&tc.get("startDate")!=null) { + res.put("startTime",tc.get("startDate")); + res.put("endTime",sdfday.format(DateUtils.addDays(sdfday.parse(tc.get("startDate").toString()), (Integer) tc.get("studyDays")))); + }else { + res.put("startTime",orderTime); + res.put("endTime",orderTime); + } + res.putAll(courseOrder); + result.add(res); + }else if(courseOrder.get("source").equals("吴门医述")){ + List> l = (List>) buyOrdersMap.get(courseOrder.get("orderOldId")); + if (l!=null){ + for (int i=0;i res = new HashMap<>(); + Map m = l.get(i); + if (m.get("ucblid")!=null){ + if (new BigDecimal(m.get("fee").toString()).compareTo(BigDecimal.ZERO)>0){ + res.put("fee",m.get("fee")); + }else { + BigDecimal one = new BigDecimal(courseOrder.get("realMoney").toString()).divide(new BigDecimal(l.size()),2,BigDecimal.ROUND_HALF_UP); + if (i==l.size()-1){ + res.put("fee",new BigDecimal(courseOrder.get("realMoney").toString()).subtract(one.multiply(new BigDecimal(l.size()-1)))); + }else { + res.put("fee",one); + } + } + if (m.get("startTime")==null){ + res.put("startTime",null); + res.put("endTime",null); + }else { + if (Integer.parseInt(m.get("begin_day").toString())==0){ + res.put("startTime",m.get("startTime").toString()); + res.put("endTime",sdfday.format(DateUtils.addDays(sdfday.parse(m.get("startTime").toString()), + Integer.parseInt(m.get("days").toString())-1))); + }else { + res.put("startTime",sdfday.format(DateUtils.addDays(sdfday.parse(m.get("startTime").toString()), + Integer.parseInt(m.get("days").toString())))); + res.put("endTime",sdfday.format(DateUtils.addDays(sdfday.parse(res.get("startTime").toString()), + Integer.parseInt(m.get("days").toString())-1))); + } + } + }else { + res.put("fee",courseOrder.get("realMoney")); + res.put("startTime",orderTime); + res.put("endTime",orderTime); + } + res.putAll(courseOrder); + result.add(res); + } + }else { + Map res = new HashMap<>(); + res.put("fee",courseOrder.get("realMoney")); + res.put("startTime",orderTime); + res.put("endTime",orderTime); + res.putAll(courseOrder); + result.add(res); + } + }else { + FinanceOrder financeOrder = financeOrderMapper.selectById(courseOrder.get("orderOldId").toString()); + courseOrder.put("fee",financeOrder.getRealMoney()); + courseOrder.put("startTime",sdfday.format(financeOrder.getStartTime())); + courseOrder.put("endTime",sdfday.format(financeOrder.getEndTime())); + result.add(courseOrder); + } + } + for (Map map:result) { + map.put("now", BigDecimal.ZERO); + map.put("already", BigDecimal.ZERO); + map.put("notyet", BigDecimal.ZERO); + BigDecimal fee = (BigDecimal) map.get("fee"); + String startTime = (String) map.get("startTime"); + String endTime = (String) map.get("endTime"); + if (startTime==null){ + if (sdfmonth.parse(map.get("orderTime").toString()).getTime()<=sdfmonth.parse(month).getTime()){ + map.put("notyet",fee); + } + }else if (startTime.equals(endTime)){ + if (startTime.contains(month)){ + map.put("now",fee); + } else if (sdfmonth.parse(startTime).getTime()sdfmonth.parse(endTime).getTime()){ + map.put("already",fee); + //未开始摊销 + }else if (sdfday.parse(day).getTime()0){ + map.put("already",dayAmount.multiply(new BigDecimal(alreadyDays))); + }else { + alreadyDays = 0; + } + //当前月天数 + int nowDays = Integer.parseInt(day.substring(8, 10)); + BigDecimal now = BigDecimal.ZERO; + //如果开始时间是当前月,月天数-开始日=当月摊销天数 + if (startTime.contains(month)&&endTime.contains(month)){ + now = fee; + } else if (startTime.contains(month)){ + nowDays = Integer.parseInt(day.substring(8, 10))-Integer.parseInt(startTime.substring(8, 10))+1; + now = dayAmount.multiply(new BigDecimal(nowDays)); + } else if (endTime.contains(month)) { + now = fee.subtract(dayAmount.multiply(new BigDecimal(alreadyDays))); + }else { + now = dayAmount.multiply(new BigDecimal(nowDays)); + } + map.put("now",now); + //剩余未摊销 + map.put("notyet",fee.subtract(now).subtract(dayAmount.multiply(new BigDecimal(alreadyDays)))); + } + } + List> exportList = new ArrayList<>(); + for (Map map:result){ + Map m = new HashMap<>(); + m.put("01时间",map.get("orderTime")); + m.put("02来源",map.get("source")); + m.put("03类型",map.get("type")); + m.put("04电话",map.get("tel")); + m.put("05订单编号",map.get("order_sn")); + m.put("06订单金额",map.get("realMoney")); + m.put("07金额",map.get("fee")); + m.put("09开始时间",map.get("startTime")==null?"":map.get("startTime").toString()); + m.put("10结束时间",map.get("endTime")==null?"":map.get("endTime").toString()); + m.put("11已摊销",map.get("already")); + m.put("12当前摊销",map.get("now")); + m.put("13剩余摊销",map.get("notyet")); + exportList.add(m); + } + return exportList; + } + + @Override + public List> physicalInfoExportList(Map params) { + List> physicalInfoList = this.baseMapper.selectMaps(new MPJLambdaWrapper() + .leftJoin(PaymentToOrder.class,PaymentToOrder::getOrderId,Orders::getId) + .leftJoin(Payment.class,Payment::getId,PaymentToOrder::getPaymentId) + .disableSubLogicDel() + .eq(Orders::getUseFlag,1).eq(Orders::getType,3) + .apply("DATE_FORMAT(t.order_time, '%Y-%m') = '"+params.get("year")+"-"+params.get("month")+"'") + .select("DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') 01时间,if(source=0,'一路健康',if(source=1,'吴门医述','管理员')) 02来源," + + "IF(t.pay_type=1,'天医币',IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行'))) 03类型,tel 04电话,order_sn 05订单号,t.fee 06金额") + .orderByAsc(Orders::getOrderTime)); + return physicalInfoList; + } + + @Override + public List> trainingClassInfoExportList(Map params) { + List> trainingClassInfoList = this.baseMapper.selectMaps(new MPJLambdaWrapper() + .leftJoin(PaymentToOrder.class,PaymentToOrder::getOrderId,Orders::getId) + .leftJoin(Payment.class,Payment::getId,PaymentToOrder::getPaymentId) + .disableSubLogicDel() + .eq(Orders::getUseFlag,1).eq(Orders::getType,4) + .apply("DATE_FORMAT(t.order_time, '%Y-%m') = '"+params.get("year")+"-"+params.get("month")+"'") + .select("DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') 01时间,if(source=0,'一路健康',if(source=1,'吴门医述','管理员')) 02来源," + + "IF(t.pay_type=1,'天医币',IF(t2.type=0,'微信',IF(t2.type=1,'支付宝','银行'))) 03支付类型,tel 04电话,order_sn 05订单号,t.fee 06金额") + .orderByAsc(Orders::getOrderTime)); + return trainingClassInfoList; + } + }