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/java/com/dsh/guns/modular/system/controller/code/TShopController.java
@@ -335,6 +335,7 @@ model.addAttribute("time",byId.getStartTime()+" - "+byId.getEndTime()); User byId1 = userMapper.selectById(byId.getStoreStaffId()); model.addAttribute("city",byId1); model.addAttribute("managerName", byId1 == null ? "" : byId1.getName()); model.addAttribute("type",1); // 如果当前登陆人是运营商 if (UserExt.getUser().getObjectType()==2){ @@ -416,6 +417,7 @@ model.addAttribute("time",byId.getStartTime()+" - "+byId.getEndTime()); User byId1 = userMapper.selectById(byId.getStoreStaffId()); model.addAttribute("city",byId1); model.addAttribute("managerName", byId1 == null ? "" : byId1.getName()); model.addAttribute("type",0); return PREFIX + "TShop_edit.html"; @@ -508,8 +510,15 @@ @RequestMapping(value = "/add") @ResponseBody public Object list(TStore tStore,String time,String ids,Integer type,Integer yyId,String lat,String lon,String pCode1,String cCode1) { public Object list(TStore tStore, String time, String ids, Integer type, Integer yyId, String lat, String lon, String pCode1, String cCode1, String userName) { try { if (ToolUtil.isEmpty(userName) || ToolUtil.isEmpty(tStore.getPhone())) { return ERROR; } if (!userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getAccount, tStore.getPhone())).isEmpty()) { return "5001"; } if(yyId==null || type==1){ yyId=0; } @@ -602,6 +611,9 @@ String space_id = data.getString("space_id"); Integer integer = Integer.valueOf(space_id); tStore.setId(integer); User storeManager = createStoreManager(userName, tStore.getPhone(), tStore.getId()); userMapper.insert(storeManager); tStore.setStoreStaffId(storeManager.getId()); storeService.save(tStore); ArrayList<StoreConfig> storeConfigs = new ArrayList<>(); for (int i = 1; i < 9; i++) { @@ -639,9 +651,21 @@ @RequestMapping(value = "/update") @ResponseBody public Object update(TStore tStore,String time,String ids,Integer type,Integer yyId,String lat,String lon,String pCode1,String cCode1) { public Object update(TStore tStore, String time, String ids, Integer type, Integer yyId, String lat, String lon, String pCode1, String cCode1, String userName) { try { TStore byIdc = storeService.getById(tStore.getId()); if (ToolUtil.isEmpty(userName) || ToolUtil.isEmpty(tStore.getPhone())) { return ERROR; } LambdaQueryWrapper<User> managerAccountQuery = new LambdaQueryWrapper<User>() .eq(User::getAccount, tStore.getPhone()); if (byIdc.getStoreStaffId() != null) { managerAccountQuery.ne(User::getId, byIdc.getStoreStaffId()); } if (!userMapper.selectList(managerAccountQuery).isEmpty()) { return "5001"; } if(yyId==null){ yyId=0; @@ -704,6 +728,17 @@ if (UserExt.getUser().getObjectType()==2){ tStore.setOperatorId(null); } User storeManager = byIdc.getStoreStaffId() == null ? null : userMapper.selectById(byIdc.getStoreStaffId()); if (storeManager == null) { storeManager = createStoreManager(userName, tStore.getPhone(), tStore.getId()); userMapper.insert(storeManager); tStore.setStoreStaffId(storeManager.getId()); } else { storeManager.setName(userName); storeManager.setPhone(tStore.getPhone()); storeManager.setAccount(tStore.getPhone()); userMapper.updateById(storeManager); } storeService.updateById(tStore); return new SuccessTip<>(); @@ -712,6 +747,20 @@ return ERROR; } } private User createStoreManager(String name, String phone, Integer storeId) { User user = new User(); user.setName(name); user.setPhone(phone); user.setAccount(phone); user.setPassword(SecureUtil.md5("a123456")); user.setRoleid("3"); user.setObjectType(3); user.setObjectId(storeId); user.setStatus(1); user.setCreatetime(new Date()); return user; } @RequestMapping(value = "/onChange") @ResponseBody public Object onChange(Integer oneId) { cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java
@@ -60,6 +60,8 @@ import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @Controller @@ -1680,33 +1682,52 @@ // times格式示例: 2025-10-14 19:00-19:30;2025-10-14 19:30-20:00;2025-10-14 20:00-20:30;2025-10-14 20:30-21:00 // targetAudience字段会由Spring MVC自动绑定(1=订场,2=散客) String times = siteBooking.getTimes(); if (ToolUtil.isEmpty(times)) { return ResultUtil.error("请选择预约时间段"); } String[] dates = times.split(";"); if (dates.length == 0) { return ResultUtil.error("请选择预约时间段"); } SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); format.setLenient(false); try { // 提取最早的开始时间 Pattern timeSlotPattern = Pattern.compile("^(\\d{4}-\\d{2}-\\d{2})\\s+(\\d{2}:\\d{2})-(\\d{2}:\\d{2})$"); // dates[0] 格式: 2025-10-14 19:00-19:30 String start = dates[0]; String startDateStr = start.substring(0, start.lastIndexOf("-")); Date startDate = format.parse(startDateStr); // 提取最晚的结束时间 Matcher startMatcher = timeSlotPattern.matcher(dates[0].trim()); // dates[dates.length - 1] 格式: 2025-10-14 20:30-21:00 String end = dates[dates.length - 1]; String[] str = end.split(" "); String endDateStr = str[0] + " " + str[1].substring(str[1].indexOf("-") + 1); Date endDate = format.parse(endDateStr); Matcher endMatcher = timeSlotPattern.matcher(dates[dates.length - 1].trim()); if (!startMatcher.matches() || !endMatcher.matches()) { return ResultUtil.error("预约时间段格式错误,请重新选择"); } Date startDate = format.parse(startMatcher.group(1) + " " + startMatcher.group(2)); Date endDate = format.parse(endMatcher.group(1) + " " + endMatcher.group(3)); if (!endDate.after(startDate)) { return ResultUtil.error("预约结束时间必须晚于开始时间"); } siteBooking.setStartTime(startDate); siteBooking.setEndTime(endDate); } catch (Exception e) { e.printStackTrace(); return ResultUtil.error("预约时间段格式错误,请重新选择"); } siteBooking.setPayType(2); //存多少钱 String money = siteBooking.getMoney(); if (ToolUtil.isEmpty(money)) { return ResultUtil.error("请输入预约金额"); } String[] moneys = money.split(","); siteBooking.setPayMoney(Double.valueOf(moneys[0])); if (moneys.length == 0 || ToolUtil.isEmpty(moneys[0])) { return ResultUtil.error("预约金额格式错误"); } try { siteBooking.setPayMoney(Double.valueOf(moneys[0])); } catch (NumberFormatException e) { return ResultUtil.error("预约金额格式错误"); } siteBooking.setMoney(money); // 查询当前预约人是否是会员 String phone = siteBooking.getPhone(); cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java
@@ -3,7 +3,6 @@ import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.mapper.UserMapper; @@ -411,7 +410,6 @@ this.userService.save(objectUser); if (!assignedStores.isEmpty()) { replaceStoreRelations(objectUser.getId(), assignedStores); syncStoreManagers(objectUser, Collections.<Integer>emptyList(), assignedStores); } return SUCCESS_TIP; } @@ -451,7 +449,6 @@ if (user.getAvatar()!=null && (!user.getAvatar().equals(""))) oldUser.setAvatar(user.getAvatar()); if (user.getStoreIds() != null) { List<Integer> previousStoreIds = userMapper.getStoreIdsByUserId(oldUser.getId()); List<TStore> assignedStores = validateStores(user.getStoreIds()); if (assignedStores == null) return ResultUtil.error("所选门店不存在、已停用或不在当前账号管理范围内"); replaceStoreRelations(oldUser.getId(), assignedStores); @@ -463,16 +460,8 @@ // 清除旧字段关联,避免已移除的首个门店仍被当作该员工所属门店。 oldUser.setObjectId(null); } syncStoreManagers(oldUser, previousStoreIds, assignedStores); } this.userService.updateById(oldUser); // 门店表仅保存店长 ID 和联系电话;店长名称由 storeStaffId 关联 sys_user.name 展示。 // 员工资料修改但门店未修改时,也要将其手机号同步给当前负责的门店。 if (user.getStoreIds() == null) { storeService.update(new LambdaUpdateWrapper<TStore>() .eq(TStore::getStoreStaffId, oldUser.getId()) .set(TStore::getPhone, oldUser.getPhone())); } return SUCCESS_TIP; } @@ -511,32 +500,6 @@ userMapper.deleteStoreRelations(userId); for (TStore store : stores) { userMapper.insertStoreRelation(IdWorker.getId(), userId, store.getId()); } } /** * 同步员工与门店的负责人信息。门店移除时,只清理仍由该员工负责的门店, * 防止并发或后续操作已为门店设置新店长时被错误覆盖。 */ private void syncStoreManagers(User user, List<Integer> previousStoreIds, List<TStore> assignedStores) { Set<Integer> assignedStoreIds = assignedStores.stream() .map(TStore::getId) .collect(Collectors.toSet()); for (Integer previousStoreId : previousStoreIds) { if (!assignedStoreIds.contains(previousStoreId)) { storeService.update(new LambdaUpdateWrapper<TStore>() .eq(TStore::getId, previousStoreId) .eq(TStore::getStoreStaffId, user.getId()) .set(TStore::getStoreStaffId, null) .set(TStore::getPhone, null)); } } for (TStore store : assignedStores) { store.setStoreStaffId(user.getId()); store.setPhone(user.getPhone()); storeService.updateById(store); } } cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStoreListVo.java
@@ -42,6 +42,14 @@ private String userName; private String userPhone; /** * 兼容历史门店:历史数据可能只在店长账号中保存手机号。 * 列表对外的 phone 统一返回可用的店长手机号。 */ public String getPhone() { return (phone == null || phone.trim().isEmpty()) ? userPhone : phone; } private String account; private Integer type; 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-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html
@@ -108,7 +108,8 @@ </div> </div> <#input id="name" name="*门店名称" placeholder= "请输入门店名称" type="text"/> <#input id="phone" name="*联系电话" placeholder= "请输入联系电话" type="text"/> <#input id="phone" name="*店长手机号" placeholder= "请输入店长手机号" type="text"/> <#input id="userName" name="*店长姓名" placeholder="请输入店长姓名" type="text"/> <div class="form-group"> <label class="col-sm-3 control-label">*门店地址:</label> <div class="col-sm-9"> cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
@@ -87,7 +87,8 @@ </div> </div> <#input id="name" name="门店名称" type="text" value="${item.name}"/> <#input id="phone" name="联系电话" type="text" value="${item.phone}"/> <#input id="phone" name="店长手机号" type="text" value="${item.phone}"/> <#input id="userName" name="店长姓名" type="text" value="${managerName}"/> <div hidden id="longitude" value="${item.lon}"></div> <div hidden id="latitude" value="${item.lat}"></div> <div class="form-group"> cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js
@@ -226,6 +226,7 @@ let name = $("#name").val() let phone = $("#phone").val() let userName = $("#userName").val() var elementById = document.getElementById("radio1"); if (elementById != null){ if (elementById.checked) { @@ -262,7 +263,11 @@ return ; } if(phone==''){ Feng.info("联系电话不能为空") Feng.info("店长手机号不能为空") return; } if(userName==''){ Feng.info("请输入店长姓名") return; } @@ -306,15 +311,20 @@ } //提交信息 var ajax = new $ax(Feng.ctxPath + "/tShop/add", function(data){ Feng.success("添加成功!"); window.parent.TCompetition.table.refresh(); TCarInfoDlg.close(); if(data === "5001"){ Feng.error("该店长手机号已经存在!"); } else { Feng.success("添加成功!"); window.parent.TCompetition.table.refresh(); TCarInfoDlg.close(); } }); ajax.set(this.tCarInfoData); ajax.set("provinceCode",pCode); ajax.set("cityCode",cCode); ajax.set("name",name); ajax.set("phone",phone); ajax.set("userName",userName); ajax.set("cityManagerId",null); ajax.set("address",address); ajax.set("time",time); @@ -465,6 +475,7 @@ let name = $("#name").val() let phone = $("#phone").val() let userName = $("#userName").val() if(pCode=='' && $("#role").val()=="1" && OBJradio==2){ Feng.info("请选择省") @@ -493,7 +504,11 @@ } if(phone==''){ Feng.info("联系电话不能为空") Feng.info("店长手机号不能为空") return; } if(userName==''){ Feng.info("请输入店长姓名") return; } @@ -538,7 +553,9 @@ //提交信息 var ajax = new $ax(Feng.ctxPath + "/tShop/update", function(data){ if(data.code == 200){ if(data === "5001"){ Feng.error("该店长手机号已经存在!"); } else if(data.code == 200){ if(language==1){ Feng.success("修改成功!"); }else if(language==2){ @@ -559,6 +576,7 @@ ajax.set("cityCode",cCode); ajax.set("name",name); ajax.set("phone",phone); ajax.set("userName",userName); ajax.set("cityManagerId",account); ajax.set("address",address); ajax.set("time",time); 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; }