cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
@@ -1109,10 +1109,11 @@ if (ToolUtil.isNotEmpty(data)) { String stime = data.split(" - ")[0] + " 00:00:00"; String etime = data.split(" - ")[1] + " 23:59:59"; vipPaymentLambdaQueryWrapper.between(VipPayment::getInsertTime, stime, etime); vipPaymentLambdaQueryWrapper.between(VipPayment::getPayTime, stime, etime); } vipPaymentLambdaQueryWrapper.in(VipPayment::getAppUserId, ids); vipPaymentLambdaQueryWrapper.eq(VipPayment::getPayStatus, 2); vipPaymentLambdaQueryWrapper.eq(VipPayment::getState, 1); List<VipPayment> list = vipPaymentService.list(vipPaymentLambdaQueryWrapper); double sum = list.stream().mapToDouble(VipPayment::getAmount).sum(); @@ -1122,10 +1123,11 @@ if (ToolUtil.isNotEmpty(data)) { String stime = data.split(" - ")[0] + " 00:00:00"; String etime = data.split(" - ")[1] + " 23:59:59"; rechargeRecordsLambdaQueryWrapper.between(RechargeRecords::getInsertTime, stime, etime); rechargeRecordsLambdaQueryWrapper.between(RechargeRecords::getPayTime, stime, etime); } rechargeRecordsLambdaQueryWrapper.in(RechargeRecords::getAppUserId, ids); rechargeRecordsLambdaQueryWrapper.eq(RechargeRecords::getPayStatus, 2); rechargeRecordsLambdaQueryWrapper.eq(RechargeRecords::getState, 1); List<RechargeRecords> list1 = rechargeRecordsService.list(rechargeRecordsLambdaQueryWrapper); double sum1 = list1.stream().map(RechargeRecords::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add).doubleValue(); cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
@@ -31,6 +31,7 @@ import javax.annotation.Resource; import javax.xml.crypto.Data; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; @@ -2174,13 +2175,16 @@ public HashMap<String, Object> queryFee(@RequestBody QueryDataFee queryDataFee) { HashMap<String, Object> map = new HashMap<>(); String data = queryDataFee.getData(); List<Integer> ids = queryDataFee.getIds(); List<Integer> ids = queryDataFee.getIds() == null ? new ArrayList<>() : new ArrayList<>(queryDataFee.getIds()); if (ids.size() == 0) { ids.add(-1); } else { } List<PointsMerchandise> list1 = pmdsService.list(new LambdaQueryWrapper<PointsMerchandise>().eq(PointsMerchandise::getRedemptionMethod, 3)); // 只查询门票商品(type=3),并按购买记录关联的商品 ID 统计。 // 旧逻辑会对每一笔订单遍历全部门票商品,导致日/月/季/年卡被重复累加。 List<PointsMerchandise> tickets = pmdsService.list(new LambdaQueryWrapper<PointsMerchandise>() .eq(PointsMerchandise::getRedemptionMethod, 3) .eq(PointsMerchandise::getType, 3)); LambdaQueryWrapper<UserPointsMerchandise> vipPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (ToolUtil.isNotEmpty(data)) { String stime = data.split(" - ")[0] + " 00:00:00"; @@ -2188,48 +2192,46 @@ vipPaymentLambdaQueryWrapper.between(UserPointsMerchandise::getInsertTime, stime, etime); } vipPaymentLambdaQueryWrapper.in(UserPointsMerchandise::getUserId, ids); List<Integer> collect = list1.stream().map(PointsMerchandise::getId).collect(Collectors.toList()); List<Integer> collect = tickets.stream().map(PointsMerchandise::getId).collect(Collectors.toList()); if (collect.size() == 0) { collect.add(-1); } vipPaymentLambdaQueryWrapper.in(UserPointsMerchandise::getPointsMerchandiseId, collect); vipPaymentLambdaQueryWrapper.eq(UserPointsMerchandise::getPayStatus, 2); ArrayList<Integer> objects = new ArrayList<>(); vipPaymentLambdaQueryWrapper.and(wrapper -> wrapper.isNull(UserPointsMerchandise::getState) .or().eq(UserPointsMerchandise::getState, 1)); List<UserPointsMerchandise> list = upmseService.list(vipPaymentLambdaQueryWrapper); double a = 0; double d = 0; double m = 0; double j = 0; double y = 0; Map<Integer, PointsMerchandise> ticketMap = tickets.stream() .collect(Collectors.toMap(PointsMerchandise::getId, ticket -> ticket, (first, ignored) -> first)); BigDecimal all = BigDecimal.ZERO; BigDecimal day = BigDecimal.ZERO; BigDecimal month = BigDecimal.ZERO; BigDecimal quarter = BigDecimal.ZERO; BigDecimal year = BigDecimal.ZERO; for (UserPointsMerchandise userPointsMerchandise : list) { for (PointsMerchandise pointsMerchandise : list1) { if (pointsMerchandise.getId() == userPointsMerchandise.getPointsMerchandiseId()) { a += pointsMerchandise.getCash().doubleValue(); } if (pointsMerchandise.getType() == 3) { if (pointsMerchandise.getCardType() == 1) { d += pointsMerchandise.getCash().doubleValue(); } if (pointsMerchandise.getCardType() == 2) { m += pointsMerchandise.getCash().doubleValue(); } if (pointsMerchandise.getCardType() == 3) { j += pointsMerchandise.getCash().doubleValue(); } if (pointsMerchandise.getCardType() == 4) { y += pointsMerchandise.getCash().doubleValue(); } } PointsMerchandise ticket = ticketMap.get(userPointsMerchandise.getPointsMerchandiseId()); if (ticket == null || userPointsMerchandise.getCash() == null) { continue; } BigDecimal paidCash = userPointsMerchandise.getCash(); all = all.add(paidCash); if (Integer.valueOf(1).equals(ticket.getCardType())) { day = day.add(paidCash); } else if (Integer.valueOf(2).equals(ticket.getCardType())) { month = month.add(paidCash); } else if (Integer.valueOf(3).equals(ticket.getCardType())) { quarter = quarter.add(paidCash); } else if (Integer.valueOf(4).equals(ticket.getCardType())) { year = year.add(paidCash); } } map.put("all", a); map.put("day", d); map.put("month", m); map.put("quarter", j); map.put("year", y); map.put("all", all); map.put("day", day); map.put("month", month); map.put("quarter", quarter); map.put("year", year); return map; cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
@@ -1012,10 +1012,11 @@ if (ToolUtil.isNotEmpty(data)) { String stime = data.split(" - ")[0] + " 00:00:00"; String etime = data.split(" - ")[1] + " 23:59:59"; vipPaymentLambdaQueryWrapper.between(PaymentCompetition::getInsertTime, stime, etime); vipPaymentLambdaQueryWrapper.between(PaymentCompetition::getPayTime, stime, etime); } vipPaymentLambdaQueryWrapper.in(PaymentCompetition::getCompetitionId, ids); vipPaymentLambdaQueryWrapper.eq(PaymentCompetition::getPayStatus, 2); vipPaymentLambdaQueryWrapper.eq(PaymentCompetition::getState, 1); ArrayList<Integer> objects = new ArrayList<>(); objects.add(1); objects.add(2); cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java
@@ -618,10 +618,13 @@ if (ToolUtil.isNotEmpty(data)) { String stime = data.split(" - ")[0] + " 00:00:00"; String etime = data.split(" - ")[1] + " 23:59:59"; // 课程订单没有单独 payTime 字段;已支付订单以创建时间作为支付入账时间。 wrapper.between(CoursePackageOrder::getInsertTime, stime, etime); } wrapper.in(CoursePackageOrder::getCoursePackageId, ids); wrapper.eq(CoursePackageOrder::getPayStatus, 2); wrapper.eq(CoursePackageOrder::getState, 1); wrapper.eq(CoursePackageOrder::getStatus, 1); ArrayList<Integer> objects = new ArrayList<>(); objects.add(1); objects.add(2); cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -491,11 +491,23 @@ } } TAppUser appUser = appUserClient.queryAppUser1(re.getAppUserId()); String[] split = re.getStudentIds().split(","); Student student = studentClient.queryStudentById(Integer.valueOf(split[0])); re.setPayStudent(student.getName()); re.setPayUser(appUser.getName()); re.setPhone(appUser.getPhone()); // 统计接口只关心订单金额;历史订单可能没有关联学员或用户,不能因此整批查询失败。 re.setPayStudent("无"); if (re.getStudentIds() != null && !re.getStudentIds().trim().isEmpty()) { try { String[] split = re.getStudentIds().split(","); Student student = studentClient.queryStudentById(Integer.valueOf(split[0])); if (student != null && student.getName() != null) { re.setPayStudent(student.getName()); } } catch (NumberFormatException ignored) { // 历史脏数据按“无学员”返回,避免影响其他有效订单。 } } if (appUser != null) { re.setPayUser(appUser.getName()); re.setPhone(appUser.getPhone()); } } return res; } cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/GameDataQuery.java
@@ -6,4 +6,6 @@ public class GameDataQuery { Integer objectId; Integer storeId; String startTime; String endTime; } cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java
@@ -202,8 +202,18 @@ */ @RequestMapping("/platform") public String index(Model model) { Object o = type1(null); model.addAttribute("data",o); // type1 保留课程/门票/订场扇形图所需的图表明细;金额卡片再以营收接口覆盖, // 避免图表数据丢失,也避免收入类型与净收入的统计口径不一致。 Map<String, Object> typeData = (Map<String, Object>) type1(null); Map<String, Object> incomeData = (Map<String, Object>) getIncomeData(null, null, null); Map<Integer, BigDecimal> incomeTypeNet = (Map<Integer, BigDecimal>) incomeData.get("incomeTypeNet"); typeData.put("fee1", incomeTypeNet.getOrDefault(1, BigDecimal.ZERO)); typeData.put("fee2", incomeTypeNet.getOrDefault(2, BigDecimal.ZERO)); typeData.put("fee3", incomeTypeNet.getOrDefault(3, BigDecimal.ZERO)); typeData.put("fee4", incomeTypeNet.getOrDefault(4, BigDecimal.ZERO)); typeData.put("fee5", incomeTypeNet.getOrDefault(5, BigDecimal.ZERO)); typeData.put("fee7", incomeTypeNet.getOrDefault(6, BigDecimal.ZERO)); model.addAttribute("data", typeData); // 教学统计 HashMap<String, Object> map = appUserClient.queryUserAge(); model.addAttribute("stuData",map); @@ -216,19 +226,34 @@ */ @RequestMapping(value = "/getIncomeData") @ResponseBody public Object getIncomeData(Integer operatorId,Integer storeId) { // operatorId = resolveOperatorId(operatorId); // storeId = resolveStoreId(operatorId); public Object getIncomeData(Integer operatorId,Integer storeId, String time) { Integer roleType = UserExt.getUser().getObjectType(); Integer objectId = UserExt.getUser().getObjectId(); List<Integer> cityManagerId= new ArrayList<>(); if(objectId>0){ operatorId=objectId; if(storeId==null){ cityManagerId= storeService.list(new QueryWrapper<TStore>().eq("cityManagerId", objectId).ne("state", 3)).stream().map(TStore::getId).collect(Collectors.toList()); }else { cityManagerId.add(storeId); } // 同一接口由平台、运营商、门店三个统计页面复用: // 平台角色不应因自身 objectId 被错误收窄为某个运营商;运营商和门店只能查看各自范围。 if (Integer.valueOf(3).equals(roleType)) { operatorId = null; storeId = objectId; } else if (Integer.valueOf(2).equals(roleType)) { operatorId = objectId; storeId = resolveStoreId(storeId); } // 参数代表当前统计目标,而非当前登录人的角色;平台账号查看运营商/门店页时, // 会员、充值也必须跟随被查看的运营商/门店归属。 Integer statisticsScopeType = Integer.valueOf(3).equals(roleType) || storeId != null ? 3 : (Integer.valueOf(2).equals(roleType) || operatorId != null ? 2 : 1); Integer statisticsScopeObjectId = statisticsScopeType == 3 ? storeId : (statisticsScopeType == 2 ? operatorId : null); List<Integer> cityManagerId= new ArrayList<>(); if (Integer.valueOf(2).equals(statisticsScopeType) && statisticsScopeObjectId != null) { cityManagerId = storeService.list(new QueryWrapper<TStore>() .eq("cityManagerId", statisticsScopeObjectId).ne("state", 3)) .stream().map(TStore::getId).collect(Collectors.toList()); } else if (Integer.valueOf(3).equals(statisticsScopeType) && statisticsScopeObjectId != null) { cityManagerId.add(statisticsScopeObjectId); } // 报名课程查询query RegisterOrderQuery query = new RegisterOrderQuery(); @@ -268,14 +293,20 @@ siteBookingQuery.setStoreIds(list); competitionQuery.setStoreId(storeId); } Integer roleType = UserExt.getUser().getObjectType(); rechargeRecordsQuery.setInsertType(roleType); query.setInsertType(roleType); competitionQuery.setInsertType(roleType); incomeQuery.setInsertType(roleType); rechargeRecordsQuery.setObjectId(UserExt.getUser().getObjectId()); // 会员、充值按当前统计目标的用户创建来源归属。平台全量统计仅按 insertType=1, // 不能叠加当前平台账号的 addUserId 条件。 rechargeRecordsQuery.setInsertType(statisticsScopeType); query.setInsertType(statisticsScopeType); competitionQuery.setInsertType(statisticsScopeType); incomeQuery.setInsertType(statisticsScopeType); rechargeRecordsQuery.setTime(time); query.setRegisterTime(time); competitionQuery.setTime(time); incomeQuery.setTime(time); siteBookingQuery.setTime(time); if (!Integer.valueOf(1).equals(statisticsScopeType)) { rechargeRecordsQuery.setObjectId(statisticsScopeObjectId); } List<IncomeVO> incomeVOS = new ArrayList<>(); Set<Long> usedCouponIds = new HashSet<>(); // 会员支付记录 @@ -283,16 +314,19 @@ for (VipPayment vipPayment : vipPayments) { if (vipPayment.getPayStatus() == 3 && vipPayment.getAmount() != null) { IncomeVO payment = new IncomeVO(); payment.setIncomeType(1); payment.setInsertTime(vipPayment.getPayTime() == null ? vipPayment.getInsertTime() : vipPayment.getPayTime()); payment.setAmount(BigDecimal.valueOf(vipPayment.getAmount())); incomeVOS.add(payment); IncomeVO refund = new IncomeVO(); refund.setIncomeType(1); refund.setInsertTime(vipPayment.getRefundTime() == null ? vipPayment.getInsertTime() : vipPayment.getRefundTime()); refund.setRefundAmount(BigDecimal.valueOf(vipPayment.getAmount())); incomeVOS.add(refund); continue; } IncomeVO temp = new IncomeVO(); temp.setIncomeType(1); if (vipPayment.getState()!=3){ temp.setInsertTime(vipPayment.getPayTime()); incomeVOS.add(temp); @@ -305,6 +339,7 @@ List<RechargeRecordsVO> rechargeRecordsVOS = financeClient.rechargeList(rechargeRecordsQuery); for (RechargeRecordsVO rechargeRecordsVO : rechargeRecordsVOS) { IncomeVO temp = new IncomeVO(); temp.setIncomeType(2); temp.setInsertTime(rechargeRecordsVO.getPayTime()); if (rechargeRecordsVO.getAmount() != null) { temp.setAmount(rechargeRecordsVO.getAmount()); @@ -320,6 +355,7 @@ continue; } IncomeVO temp = new IncomeVO(); temp.setIncomeType(3); temp.setInsertTime(registerOrderVO.getInsertTime()); if (registerOrderVO.getMoney() != null) { temp.setAmount(registerOrderVO.getMoney()); @@ -347,11 +383,13 @@ } if (competition.getPayStatus() == 3 && competition.getAmount() != null) { IncomeVO payment = new IncomeVO(); payment.setIncomeType(4); payment.setInsertTime(competition.getPayTime() == null ? competition.getInsertTime() : competition.getPayTime()); payment.setAmount(BigDecimal.valueOf(competition.getAmount())); incomeVOS.add(payment); IncomeVO refund = new IncomeVO(); refund.setIncomeType(4); refund.setInsertTime(competition.getRefundTime() == null ? competition.getInsertTime() : competition.getRefundTime()); refund.setRefundAmount(BigDecimal.valueOf(competition.getAmount())); @@ -362,6 +400,7 @@ continue; } IncomeVO temp = new IncomeVO(); temp.setIncomeType(4); temp.setInsertTime(competition.getPayTime()); if (competition.getAmount() != null) { temp.setAmount(new BigDecimal(competition.getAmount().toString())); @@ -375,14 +414,17 @@ List<SiteBooking> siteBookings = siteClient.listAll(siteBookingQuery); for (SiteBooking siteBooking : siteBookings) { IncomeVO temp = new IncomeVO(); temp.setIncomeType(5); if (siteBooking.getStatus() == 5) { if (siteBooking.getPayMoney() != null) { IncomeVO payment = new IncomeVO(); payment.setIncomeType(5); payment.setInsertTime(siteBooking.getPayTime() == null ? siteBooking.getInsertTime() : siteBooking.getPayTime()); payment.setAmount(BigDecimal.valueOf(siteBooking.getPayMoney())); incomeVOS.add(payment); IncomeVO refund = new IncomeVO(); refund.setIncomeType(5); refund.setInsertTime(siteBooking.getCancelTime() == null ? siteBooking.getInsertTime() : siteBooking.getCancelTime()); refund.setRefundAmount(BigDecimal.valueOf(siteBooking.getPayMoney())); @@ -421,6 +463,7 @@ List<PointMerchandiseIncomeVo> amount = pointMercharsClient.getAmount(cityManagerId); for (PointMerchandiseIncomeVo pointMerchandiseIncomeVo : amount) { IncomeVO temp = new IncomeVO(); temp.setIncomeType(6); if (pointMerchandiseIncomeVo==null) continue; temp.setInsertTime(pointMerchandiseIncomeVo.getInsertTime()); if (pointMerchandiseIncomeVo.getCash()!=null){ @@ -434,6 +477,7 @@ List<TGameRecord> data = ballClient.getData(gameDataQuery); for (TGameRecord datum : data) { IncomeVO temp = new IncomeVO(); temp.setIncomeType(5); temp.setAmount(datum.getMoney()); temp.setInsertTime(datum.getTime()); incomeVOS.add(temp); @@ -445,6 +489,7 @@ List<TGameRecord> data = ballClient.getData(gameDataQuery); for (TGameRecord datum : data) { IncomeVO temp = new IncomeVO(); temp.setIncomeType(5); temp.setAmount(datum.getMoney()); temp.setInsertTime(datum.getTime()); incomeVOS.add(temp); @@ -456,13 +501,40 @@ List<TGameRecord> data = ballClient.getData(gameDataQuery); for (TGameRecord datum : data) { IncomeVO temp = new IncomeVO(); temp.setIncomeType(5); temp.setAmount(datum.getMoney()); temp.setInsertTime(datum.getTime()); incomeVOS.add(temp); } } Map<String, Object> monthlyData = buildIncomeStatistics(incomeVOS); // 部分跨服务查询不支持日期参数,统一在收入明细层按支付/退款时间过滤, // 确保总营收、净收入和收入类型统计使用完全相同的数据集。 List<IncomeVO> statisticsIncomeVOS = filterIncomeRecordsByTime(incomeVOS, time); Map<String, Object> monthlyData = buildIncomeStatistics(statisticsIncomeVOS); monthlyData.put("incomeTypeNet", buildIncomeTypeNet(statisticsIncomeVOS, null)); // 门票饼图需要日/月/季/年卡拆分;此前该数据只在 type1 内部返回, // 现随统一营收接口返回,供平台页直接使用。 monthlyData.put("ticketIncome", getTicketIncome(time, operatorId, storeId)); return monthlyData; } private Map<String, Object> getTicketIncome(String time, Integer operatorId, Integer storeId) { List<Integer> userIds; if (storeId != null) { userIds = appUserClient.getUserStore(storeId); } else if (operatorId != null) { userIds = appUserClient.getUserYYs(operatorId); } else { List<Integer> platformUserIds = sysUserService.list(new LambdaQueryWrapper<User>() .eq(User::getObjectType, 1)) .stream().map(User::getId).collect(Collectors.toList()); userIds = appUserClient.getUserPt(platformUserIds); } if (userIds == null) { userIds = new ArrayList<>(); } // 活动服务对空集合会补充 -1,传入可变副本以兼容该历史实现。 return pointMercharsClient.queryFee(new QueryDataFee(time, new ArrayList<>(userIds))); } /** 惠民卡采用支付、退款两条事实流水,赠送卡不计营收。 */ @@ -481,6 +553,7 @@ continue; } IncomeVO payment = new IncomeVO(); payment.setIncomeType(6); payment.setInsertTime(record.getPaymentTime()); payment.setAmount(record.getSalesMoney()); incomeRecords.add(payment); @@ -488,6 +561,7 @@ || Integer.valueOf(2).equals(record.getRefundStatus()) || Integer.valueOf(3).equals(record.getRefundStatus())) { IncomeVO refund = new IncomeVO(); refund.setIncomeType(6); refund.setInsertTime(record.getRefundTime() == null ? record.getPaymentTime() : record.getRefundTime()); refund.setRefundAmount(record.getSalesMoney()); incomeRecords.add(refund); @@ -506,9 +580,63 @@ continue; } IncomeVO payment = new IncomeVO(); payment.setIncomeType(6); payment.setInsertTime(record.getPaymentTime()); payment.setAmount(BigDecimal.valueOf(record.getCash())); incomeRecords.add(payment); } } /** * 收入类型统计与净收入共用同一份收入明细。 * 类型 1-5 对应会员、充值、课程、赛事、订场;6 为商品及其他平台收入。 */ private Map<Integer, BigDecimal> buildIncomeTypeNet(List<IncomeVO> incomeRecords, String time) { Map<Integer, BigDecimal> result = new HashMap<>(); for (int type = 1; type <= 6; type++) { result.put(type, BigDecimal.ZERO); } Date startTime = null; Date endTime = null; if (ToolUtil.isNotEmpty(time)) { try { startTime = DateUtil.parse(time.split(" - ")[0] + " 00:00:00"); endTime = DateUtil.parse(time.split(" - ")[1] + " 23:59:59"); } catch (Exception ignored) { // 页面日期格式异常时与原接口一致,不额外按日期过滤。 } } for (IncomeVO record : incomeRecords) { if (record.getIncomeType() == null || record.getInsertTime() == null) { continue; } if (startTime != null && (record.getInsertTime().before(startTime) || record.getInsertTime().after(endTime))) { continue; } BigDecimal netAmount = getZeroIfNull(record.getAmount()) .subtract(getZeroIfNull(record.getRefundAmount())); result.put(record.getIncomeType(), result.getOrDefault(record.getIncomeType(), BigDecimal.ZERO) .add(netAmount)); } return result; } private List<IncomeVO> filterIncomeRecordsByTime(List<IncomeVO> incomeRecords, String time) { if (ToolUtil.isEmpty(time)) { return incomeRecords; } try { Date startTime = DateUtil.parse(time.split(" - ")[0] + " 00:00:00"); Date endTime = DateUtil.parse(time.split(" - ")[1] + " 23:59:59"); return incomeRecords.stream() .filter(record -> record.getInsertTime() != null && !record.getInsertTime().before(startTime) && !record.getInsertTime().after(endTime)) .collect(Collectors.toList()); } catch (Exception ignored) { // 兼容旧页面的日期格式:解析失败时保留原有全量统计行为。 return incomeRecords; } } @@ -1515,6 +1643,17 @@ map.put("quarterone",quarter); map.put("yearone",year); // 数值卡片复用营收数据的同一批收入明细和退款口径。图表数据仍沿用原查询, // 但收入类型净额之和始终与“营收数据-净收入”一致。 Map<String, Object> incomeData = (Map<String, Object>) getIncomeData(null, null, time); Map<Integer, BigDecimal> incomeTypeNet = (Map<Integer, BigDecimal>) incomeData.get("incomeTypeNet"); map.put("fee1", incomeTypeNet.getOrDefault(1, BigDecimal.ZERO)); map.put("fee2", incomeTypeNet.getOrDefault(2, BigDecimal.ZERO)); map.put("fee3", incomeTypeNet.getOrDefault(3, BigDecimal.ZERO)); map.put("fee4", incomeTypeNet.getOrDefault(4, BigDecimal.ZERO)); map.put("fee5", incomeTypeNet.getOrDefault(5, BigDecimal.ZERO)); map.put("fee7", incomeTypeNet.getOrDefault(6, BigDecimal.ZERO)); return map; } @@ -1558,6 +1697,11 @@ List<Integer> ids = list.stream().map(User::getId).collect(Collectors.toList()); List<Integer> userIds = appUserClient.getUserPt(ids); QueryDataFee queryDataFee = new QueryDataFee(time, userIds); // 课程和赛事接口的 ids 参数表示门店 ID;不能把平台用户 ID 传入。 List<Integer> platformStoreIds = storeService.list(new LambdaQueryWrapper<TStore>() .eq(TStore::getState, 1)) .stream().map(TStore::getId).collect(Collectors.toList()); QueryDataFee storeFeeQuery = new QueryDataFee(time, platformStoreIds); // 会员费 HashMap<String, Object> map1 = appUserClient.queryFee(queryDataFee); Object fee1 = map1.get("fee1"); @@ -1566,41 +1710,36 @@ Object fee2 = map1.get("fee2"); map.put("fee2",fee2); // 课程收入 HashMap<String, Object> map3 = courseClient.queryFee(queryDataFee); HashMap<String, Object> map3 = courseClient.queryFee(storeFeeQuery); map.put("fee3",map3.get("fee")); Object data = map3.get("data"); map.put("courseData",data); // 赛事收入 Double aDouble1 = competitionClient.queryFee(queryDataFee); Double aDouble1 = competitionClient.queryFee(storeFeeQuery); map.put("fee4",aDouble1); // 订场 if(ids.size()==0){ ids.add(-1); } LambdaQueryWrapper<SiteBooking> vipPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>(); if(ToolUtil.isNotEmpty(time)){ String stime = time.split(" - ")[0]+" 00:00:00"; String etime = time.split(" - ")[1]+" 23:59:59"; vipPaymentLambdaQueryWrapper.between(SiteBooking::getInsertTime,stime,etime); vipPaymentLambdaQueryWrapper.between(SiteBooking::getPayTime,stime,etime); } if(userIds.size()==0){ userIds.add(-1); } vipPaymentLambdaQueryWrapper.eq(SiteBooking::getState, 1); vipPaymentLambdaQueryWrapper.ne(SiteBooking::getStatus,0); vipPaymentLambdaQueryWrapper.ne(SiteBooking::getStatus,5); ArrayList<Integer> objects = new ArrayList<>(); objects.add(1); objects.add(2); vipPaymentLambdaQueryWrapper.in(SiteBooking::getPayType,objects); List<SiteBooking> list1 = siteBookingService.list(new QueryWrapper<SiteBooking>() .ne("status",0) .ne("status",5) .ne("payType",3) .ne("payType",4)); List<SiteBooking> list1 = siteBookingService.list(vipPaymentLambdaQueryWrapper); double sum = list1.stream().mapToDouble(SiteBooking::getPayMoney).sum(); // 智慧球场查询query GameDataQuery gameDataQuery = new GameDataQuery(); gameDataQuery.setObjectId(0); if (ToolUtil.isNotEmpty(time)) { gameDataQuery.setStartTime(time.split(" - ")[0] + " 00:00:00"); gameDataQuery.setEndTime(time.split(" - ")[1] + " 23:59:59"); } // 平台智慧球场 List<TGameRecord> data1 = ballClient.getData(gameDataQuery); double sum1 = data1.stream() cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html
@@ -140,10 +140,12 @@ </br> </br> <span>会员费收入:<label id="fee1">0.0</label></span> <span>玩湃币充值收入:<label id="fee2">0.0</label></span> <span>课程收入:<label id="fee3">0.0</label></span> <span>活动/赛事收入:<label id="fee4">0.0</label></span> <span>订场收入:<label id="fee5">0.0</label></span> <span>门票收入:<label id="fee7">0.0</label></span> <span>商品/其他收入:<label id="fee7">0.0</label></span> </br> </br> </br> @@ -384,6 +386,13 @@ netIncomeAmount.innerText = resp.netIncomeAmount || 0; couponDeductionAmount.innerText = resp.couponDeductionAmount || 0; refundAmount.innerText = resp.refundAmount || 0; var incomeTypeNet = resp.incomeTypeNet || {}; $("#fee1").text(incomeTypeNet[1] || 0); $("#fee2").text(incomeTypeNet[2] || 0); $("#fee3").text(incomeTypeNet[3] || 0); $("#fee4").text(incomeTypeNet[4] || 0); $("#fee5").text(incomeTypeNet[5] || 0); $("#fee7").text(incomeTypeNet[6] || 0); t3.innerText = "月度营收:"+list[2]+" "; t4.innerText = "周度营收:"+list[3]+" "; t5.innerText = "日度营收:"+list[4]+" "; @@ -466,6 +475,7 @@ }); ajax.set("type",1); ajax.set("operatorId",id); ajax.set("time",beginTime); ajax.start(); // 营收 var income = echarts.init(document.getElementById('income')); @@ -879,10 +889,6 @@ } var ajax = new $ax(Feng.ctxPath + "/data/selectYys", function (data) { $("#fee3").text(data.fee3) $("#fee4").text(data.fee4) $("#fee5").text(data.fee5) $("#fee7").text(data.fee7) $("#day").val(data.dayone) $("#month").val(data.monthone) $("#quarter").val(data.quarterone) cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html
@@ -188,9 +188,9 @@ <span>会员费收入:<label id="fee1">${data.fee1}</label></span> <span>玩湃币充值收入:<label id="fee2">${data.fee2}</label></span> <span>课程收入:<label id="fee3">${data.fee3}</label></span> <span>活动/赛事收入:<label id="fee4">${data.fee4}</label></span> <span>赛事收入:<label id="fee4">${data.fee4}</label></span> <span>订场收入:<label id="fee5">${data.fee5}</label></span> <span>商品收入:<label id="fee7">${data.fee7}</label></span> <span>商品/其他收入:<label id="fee7">${data.fee7}</label></span> </br> </br> </br> @@ -357,11 +357,23 @@ }); function search1() { var time = $("#beginTime").val(); var ajax9 = new $ax(Feng.ctxPath + "/data/type1", function(data){ // 营收卡片与收入类型卡片使用同一接口、同一时间范围,避免筛选后口径不一致。 var incomeAjax = new $ax(Feng.ctxPath + "/data/getIncomeData", function(resp){ $("#totalIncome").text(resp.incomeStatistics.totalIncomeAmount || 0); $("#netIncomeAmount").text(resp.incomeStatistics.netIncomeAmount || 0); $("#couponDeductionAmount").text(resp.incomeStatistics.couponDeductionAmount || 0); $("#refundAmount").text(resp.incomeStatistics.refundAmount || 0); var incomeTypeNet = resp.incomeTypeNet || {}; $("#fee1").text(incomeTypeNet[1] || 0); $("#fee2").text(incomeTypeNet[2] || 0); $("#fee3").text(incomeTypeNet[3] || 0); $("#fee4").text(incomeTypeNet[4] || 0); $("#fee5").text(incomeTypeNet[5] || 0); $("#fee7").text(incomeTypeNet[6] || 0); renderTicketIncomeChart(resp.ticketIncome || {}); }); ajax9.set("time",time); ajax9.start(); incomeAjax.set("time", time); incomeAjax.start(); } var ans = []; var weekX = ["1周","2周","3周","4周"]; @@ -369,6 +381,24 @@ var yearX = []; var timeX = []; var dataX = []; function renderTicketIncomeChart(ticketIncome) { var chartDom = document.getElementById('cookieTicket'); var myChart = echarts.getInstanceByDom(chartDom) || echarts.init(chartDom); myChart.setOption({ title: {text: '门票收入', left: 'center'}, tooltip: {trigger: 'item'}, series: [{ name: '门票收入', type: 'pie', radius: '50%', data: [ {value: ticketIncome.day || 0, name: '日卡'}, {value: ticketIncome.month || 0, name: '月卡'}, {value: ticketIncome.quarter || 0, name: '季卡'}, {value: ticketIncome.year || 0, name: '年卡'} ] }] }, true); } // 创建一个日期对象 var currentDate = new Date(); // 获取当前日期的号数 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html
@@ -130,10 +130,12 @@ <div class="col-sm-10" style="width: 1500px" > </br> </br> <span>会员费收入:<label id="fee1">0.0</label></span> <span>玩湃币充值收入:<label id="fee2">0.0</label></span> <span>课程收入:<label id="fee3">0.0</label></span> <span>活动/赛事收入:<label id="fee4">0.0</label></span> <span>订场收入:<label id="fee5">0.0</label></span> <span>商品收入:<label id="fee7">0.0</label></span> <span>商品/其他收入:<label id="fee7">0.0</label></span> </br> </br> </br> @@ -337,6 +339,13 @@ $("#netIncomeAmount").text(resp.incomeStatistics.netIncomeAmount || 0); $("#couponDeductionAmount").text(resp.incomeStatistics.couponDeductionAmount || 0); $("#refundAmount").text(resp.incomeStatistics.refundAmount || 0); var incomeTypeNet = resp.incomeTypeNet || {}; $("#fee1").text(incomeTypeNet[1] || 0); $("#fee2").text(incomeTypeNet[2] || 0); $("#fee3").text(incomeTypeNet[3] || 0); $("#fee4").text(incomeTypeNet[4] || 0); $("#fee5").text(incomeTypeNet[5] || 0); $("#fee7").text(incomeTypeNet[6] || 0); renderIncomeStatisticsList("yearIncomeStatistics", "历年营收明细", resp.yearLabels, resp.yearIncomeStatistics); renderIncomeStatisticsList("monthIncomeStatistics", "本年各月营收明细", resp.monthLabels, resp.monthIncomeStatistics); renderIncomeStatisticsList("weekIncomeStatistics", "近四周营收明细", resp.weekLabels, resp.weekIncomeStatistics); @@ -348,6 +357,7 @@ }); ajax.set("type", 1); ajax.set("storeId", $("#objectType").val() == 3 ? $("#objectId").val() : $("#cCode").val()); ajax.set("time", $("#beginTime").val()); ajax.start(); } @@ -364,10 +374,6 @@ } var ajax = new $ax(Feng.ctxPath + "/data/selectStore", function (data) { $("#fee3").text(data.fee3) $("#fee4").text(data.fee4) $("#fee5").text(data.fee5) $("#fee7").text(data.fee7) $("#day").val(data.dayone) $("#month").val(data.monthone) $("#quarter").val(data.quarterone) cloud-server-other/src/main/java/com/dsh/other/controller/BallController.java
@@ -55,6 +55,9 @@ QueryWrapper<TGameRecord> wrapper = new QueryWrapper<TGameRecord>().eq("status", 1) .ne("payType", 3) .ne("payType", 4); if (query.getStartTime() != null && query.getEndTime() != null) { wrapper.between("time", query.getStartTime(), query.getEndTime()); } wrapper.in("gameId", gameIds); List<TGameRecord> list = gameRecordService.list(wrapper); return list; @@ -68,6 +71,9 @@ QueryWrapper<TGameRecord> wrapper = new QueryWrapper<TGameRecord>() .eq("status", 1) .in("payType", 1, 2); if (query.getStartTime() != null && query.getEndTime() != null) { wrapper.between("time", query.getStartTime(), query.getEndTime()); } wrapper.in("gameId", gameIds); List<TGameRecord> list = gameRecordService.list(wrapper); return list; cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/GameDataQuery.java
@@ -6,4 +6,6 @@ public class GameDataQuery { Integer objectId; Integer storeId; String startTime; String endTime; }