From ae86803b172049d71026bc77fea022c00c4805de Mon Sep 17 00:00:00 2001 From: "@jyuhsin" <729757837@qq.com> Date: Fri, 7 Nov 2025 11:56:13 +0800 Subject: [PATCH] commit --- .../{DistanceUtils.java => DistanceUtil.java} | 2 +- .../FamilyActivityStatisticsServiceImpl.java | 2 +- ...llowshipActivityStatisticsServiceImpl.java | 21 ++-- .../manage/TrainsignUpMineController.java | 20 ++-- ...ainSignUpActivityStatisticsController.java | 35 +++++-- .../trainSignUp/models/TrainSignUpCourse.java | 7 +- .../TrainSignUpActivityStatisticsService.java | 2 +- ...inSignUpActivityStatisticsServiceImpl.java | 62 +++++------- .../infoManage/ClubInfoManageController.java | 9 +- .../service/impl/SysClubUserServiceImpl.java | 55 ++++++++++- ...LiteracyActivityStatisticsServiceImpl.java | 21 ++-- .../assets/platform/js/util/coordinateUtil.js | 91 +++++++++++++++++ .../resources/views/layouts/platform_h5.html | 2 + .../views/layouts/v4/baseLayout.html | 9 +- .../activity/trainSignUp/manage/customForm.js | 11 ++- .../activity/trainSignUp/statistics/info.js | 94 +++++++++++++++--- .../activity/trainSignUp/scan/index.html | 97 ++++++++----------- 17 files changed, 381 insertions(+), 159 deletions(-) rename src/main/java/com/budwk/app/base/utils/{DistanceUtils.java => DistanceUtil.java} (97%) create mode 100644 src/main/resources/static/assets/platform/js/util/coordinateUtil.js diff --git a/src/main/java/com/budwk/app/base/utils/DistanceUtils.java b/src/main/java/com/budwk/app/base/utils/DistanceUtil.java similarity index 97% rename from src/main/java/com/budwk/app/base/utils/DistanceUtils.java rename to src/main/java/com/budwk/app/base/utils/DistanceUtil.java index 7f91e054..8307740d 100644 --- a/src/main/java/com/budwk/app/base/utils/DistanceUtils.java +++ b/src/main/java/com/budwk/app/base/utils/DistanceUtil.java @@ -7,7 +7,7 @@ package com.budwk.app.base.utils; * @Version 1.0 * @Description TODO */ -public class DistanceUtils { +public class DistanceUtil { private static final double EARTH_RADIUS = 6371000; // 地球半径,单位:米 diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityStatisticsServiceImpl.java index 303883cf..33686634 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityStatisticsServiceImpl.java @@ -194,7 +194,7 @@ public class FamilyActivityStatisticsServiceImpl extends BaseServiceImpl> sortedDataMap = courseTimeMap.entrySet().stream() - .sorted(Map.Entry.comparingByKey(Comparator.reverseOrder())) + .sorted(Map.Entry.comparingByKey(Comparator.naturalOrder())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); return sortedDataMap; diff --git a/src/main/java/com/budwk/app/zhgh/activity/fellowship/service/impl/FellowshipActivityStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/fellowship/service/impl/FellowshipActivityStatisticsServiceImpl.java index c9219913..2afeb23a 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/fellowship/service/impl/FellowshipActivityStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/fellowship/service/impl/FellowshipActivityStatisticsServiceImpl.java @@ -101,14 +101,17 @@ public class FellowshipActivityStatisticsServiceImpl extends BaseServiceImpl { - o.put(m.getString("columnCode"), m.getString("columnValue")); - }); - } - }); + for (NutMap o : list) { + if(StrUtil.isBlank(o.getString("mobileColumnsValue"))) { + continue; + } + List mobileColumnsValue = Json.fromJsonAsList(NutMap.class, o.getString("mobileColumnsValue")); + if(Lang.isNotEmpty(mobileColumnsValue)) { + mobileColumnsValue.forEach(m -> { + o.put(m.getString("columnCode"), m.getString("columnValue")); + }); + } + } return list; } @@ -185,7 +188,7 @@ public class FellowshipActivityStatisticsServiceImpl extends BaseServiceImpl> sortedDataMap = courseTimeMap.entrySet().stream() - .sorted(Map.Entry.comparingByKey(Comparator.reverseOrder())) + .sorted(Map.Entry.comparingByKey(Comparator.naturalOrder())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); return sortedDataMap; diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java index fdf4d90b..e92c3a2c 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java @@ -6,9 +6,8 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.budwk.app.base.annotation.SLog; -import com.budwk.app.base.param.PageForm; import com.budwk.app.base.result.Result; -import com.budwk.app.base.utils.DistanceUtils; +import com.budwk.app.base.utils.DistanceUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpCourse; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUserCourse; @@ -27,7 +26,6 @@ import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; -import org.nutz.mvc.annotation.Param; import java.math.BigDecimal; import java.math.RoundingMode; @@ -85,13 +83,13 @@ public class TrainsignUpMineController { } TrainSignUpCourse course = dao.fetch(TrainSignUpCourse.class, courseId); - List coordinates = course.getCourseLocationCoordinates(); + List coordinates = course.getTransPosition(); int minute = course.getSignUnit() != null ? course.getSignUnit() : 0; int radius = course.getRadius() != null ? course.getRadius() : 100; boolean flag = true; // 获取现在的日期,并根据设置的数据 - List timeList = dao.query(TrainSignUpUserCourse.class, Cnd.where("courseId", "=", courseId)); + List timeList = dao.query(TrainSignUpUserCourse.class, Cnd.where("courseId", "=", courseId).and("userId", "=", SecurityUtil.getUserId())); for (TrainSignUpUserCourse userCourse : timeList) { DateTime startTime = DateUtil.offsetMinute(userCourse.getCourseStartTime(), -minute); DateTime endTime = DateUtil.offsetMinute(userCourse.getCourseEndTime(), minute); @@ -105,10 +103,9 @@ public class TrainsignUpMineController { return Result.error(99, "未到签到时间"); } - double distance = DistanceUtils.getDistance(coordinates.get(0), coordinates.get(1), lat, lng); + double distance = DistanceUtil.getDistance(coordinates.get(0), coordinates.get(1), lat, lng); if(distance > radius) { - int result = BigDecimal.valueOf(distance).setScale(0, RoundingMode.HALF_UP).intValue(); - return Result.error(99, "签到失败,您距离签到点还有%s米".formatted(result)); + return Result.error(99, "签到失败,您距离签到点还有%.1f米".formatted(distance - radius)); } dao.update(timeList); @@ -152,7 +149,7 @@ public class TrainsignUpMineController { @SLog(tag = "品牌活动-定位签到", msg = "定位签到") public Result positionSign(String courseId, String timeId, Double lat, Double lng) { TrainSignUpCourse course = dao.fetch(TrainSignUpCourse.class, courseId); - List coordinates = course.getCourseLocationCoordinates(); + List coordinates = course.getTransPosition(); int minute = course.getSignUnit() != null ? course.getSignUnit() : 0; int radius = course.getRadius() != null ? course.getRadius() : 100; @@ -164,10 +161,9 @@ public class TrainsignUpMineController { return Result.error(99, "未到签到时间"); } - double distance = DistanceUtils.getDistance(coordinates.get(0), coordinates.get(1), lat, lng); + double distance = DistanceUtil.getDistance(coordinates.get(0), coordinates.get(1), lat, lng); if(distance > radius) { - int result = BigDecimal.valueOf(distance).setScale(0, RoundingMode.HALF_UP).intValue(); - return Result.error(99, "签到失败,您距离签到点还有%s米".formatted(result)); + return Result.error(99, "签到失败,您距离签到点还有%.1f米".formatted(distance - radius)); } userCourse.setAttend(true); diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java index 96644165..2ee6a83e 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java @@ -16,10 +16,7 @@ import com.budwk.app.sys.models.Sys_file; import com.budwk.app.sys.utils.SysFileMinIoUtil; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.activity.trainSignUp.models.TrainMobileSignColumn; -import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivity; -import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpCourse; -import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpType; +import com.budwk.app.zhgh.activity.trainSignUp.models.*; import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService; import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityStatisticsService; import io.swagger.annotations.Api; @@ -143,6 +140,14 @@ public class TrainSignUpActivityStatisticsController { return Result.success(trainSignUpActivityStatisticsService.getTaleColumnInfo(courseId)); } + @At + @ApiOperation("获取时间信息") + @SaCheckPermission("trainSignUp.statistics") + public Result selectTimes(@Param("courseId") String courseId) { + List activityCourses = dao.query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", courseId).asc("courseStartTime")); + return Result.success(activityCourses); + } + /** * 培训班上课签到信息 * @@ -152,8 +157,10 @@ public class TrainSignUpActivityStatisticsController { @At @ApiOperation("获取签到信息") @SaCheckPermission("trainSignUp.statistics") - public Result getSignInfo(@Param("courseId") String courseId) { - return Result.success(trainSignUpActivityStatisticsService.getSignInfo(courseId)); + public Result getSignInfo(PageForm pageForm, + @Param("courseId") String courseId, + String timeId) { + return Result.success(trainSignUpActivityStatisticsService.getSignInfo(pageForm, courseId, timeId)); } @At @@ -165,6 +172,22 @@ public class TrainSignUpActivityStatisticsController { return Result.success(); } + @At + @ApiOperation("设置签到") + @SaCheckPermission("trainSignUp.statistics") + public Result adjustSign(@Param("id") String id) { + TrainSignUpUserCourse userCourse = dao.fetch(TrainSignUpUserCourse.class, id); + if(userCourse.isAttend()) { + userCourse.setAttend(false); + userCourse.setAttendTime(null); + } else { + userCourse.setAttend(true); + userCourse.setAttendTime(userCourse.getCourseStartTime()); + } + dao.update(userCourse); + return Result.success(); + } + @At @Ok("void") @ApiOperation("导出签到名单") diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpCourse.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpCourse.java index 0fc37274..ed6a4535 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpCourse.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpCourse.java @@ -58,7 +58,12 @@ public class TrainSignUpCourse extends BaseModel implements Serializable { @Comment("课程地点坐标") private List courseLocationCoordinates; - @Column + @Column + @ColDefine(type = ColType.MYSQL_JSON) + @Comment("转换课程地点坐标") + private List transPosition; + + @Column @ColDefine(type = ColType.VARCHAR, width = 20) @Comment("课程讲师") private String courseInstructor; diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityStatisticsService.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityStatisticsService.java index df8f5c7b..f23dde86 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityStatisticsService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityStatisticsService.java @@ -49,7 +49,7 @@ public interface TrainSignUpActivityStatisticsService extends BaseService每个培训班每节课的上课时间 v->上课记录list */ - Map> getSignInfo(String courseId); + Pagination getSignInfo(PageForm pageForm, String courseId, String timeId); /** * 报名人员list 导出 diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityStatisticsServiceImpl.java index acda8c41..3403cb3e 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityStatisticsServiceImpl.java @@ -4,12 +4,10 @@ import cn.hutool.core.util.StrUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.sys.models.Sys_user; import com.budwk.app.zhgh.activity.family.models.FamilyType; import com.budwk.app.zhgh.activity.family.models.FamilyUser; -import com.budwk.app.zhgh.activity.trainSignUp.models.TrainMobileSignColumn; -import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpCourse; -import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpType; -import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUser; +import com.budwk.app.zhgh.activity.trainSignUp.models.*; import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityStatisticsService; import lombok.extern.slf4j.Slf4j; import org.nutz.dao.Cnd; @@ -22,10 +20,7 @@ import org.nutz.json.Json; import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; -import java.util.Comparator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -103,14 +98,17 @@ public class TrainSignUpActivityStatisticsServiceImpl extends BaseServiceImpl { - o.put(m.getString("columnCode"), m.getString("columnValue")); - }); - } - }); + for (NutMap o : list) { + if(StrUtil.isBlank(o.getString("mobileColumnsValue"))) { + continue; + } + List mobileColumnsValue = Json.fromJsonAsList(NutMap.class, o.getString("mobileColumnsValue")); + if(Lang.isNotEmpty(mobileColumnsValue)) { + mobileColumnsValue.forEach(m -> { + o.put(m.getString("columnCode"), m.getString("columnValue")); + }); + } + } return list; } @@ -121,7 +119,7 @@ public class TrainSignUpActivityStatisticsServiceImpl extends BaseServiceImpl columnList = upType.getTrainMobileSignColumnList(); - List columnTableList = columnList.stream().map(o -> NutMap.NEW().setv("label", o.getColumnName()).setv("prop", o.getColumnCode())).collect(Collectors.toList()); + List columnTableList = columnList.stream().filter(o -> StrUtil.isNotBlank(o.getColumnCode())).map(o -> NutMap.NEW().setv("label", o.getColumnName()).setv("prop", o.getColumnCode())).collect(Collectors.toList()); return columnTableList; } @@ -159,9 +157,10 @@ public class TrainSignUpActivityStatisticsServiceImpl extends BaseServiceImpl> getSignInfo(String courseId) { - Sql sql = Sqls.create(""" + public Pagination getSignInfo(PageForm pageForm, String courseId, String timeId) { + Sql sql = Sqls.create(""" SELECT + tsuuc.id, tsuuc.courseStartTime, tsuuc.courseEndTime, tsuuc.isAttend, @@ -173,24 +172,15 @@ public class TrainSignUpActivityStatisticsServiceImpl extends BaseServiceImpl list = listMap(sql); - - Map> courseTimeMap = list.stream().map(v -> { - String courseTime = v.getString("courseStartTime") + " 至 " + v.getString("courseEndTime"); - v.put("courseTime", courseTime); - return v; - }).collect(Collectors.groupingBy(v -> v.getString("courseTime"))); - - // 使用Stream API进行降序排序 - Map> sortedDataMap = courseTimeMap.entrySet().stream() - .sorted(Map.Entry.comparingByKey(Comparator.reverseOrder())) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); - - return sortedDataMap; + Cnd cnd = Cnd.NEW(); + cnd.and("tsuuc.courseId", "=", courseId); + cnd.and("tsuuc.activityCourseId", "=", timeId); + cnd.desc("isAttend"); + cnd.desc("attendTime"); + sql.setCondition(cnd); + return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); } @Override diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java index 7827c714..ee68944e 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java @@ -20,6 +20,8 @@ import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.controllers.open.commons.service.CommonService; import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivity; +import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUser; +import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUserCourse; import com.budwk.app.zhgh.club.model.ClubUser; import com.budwk.app.zhgh.club.model.SysClub; import com.budwk.app.zhgh.club.param.ClubUserPageForm; @@ -28,6 +30,7 @@ import com.budwk.app.zhgh.club.service.SysClubUserService; import com.budwk.app.zhgh.club.vo.ClubCommonPageVo; import com.budwk.app.zhgh.club.vo.ClubUserImportVo; import io.swagger.annotations.ApiOperation; +import org.apache.axis.utils.IDKey; import org.apache.poi.ss.formula.functions.T; import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Chain; @@ -179,8 +182,12 @@ public class ClubInfoManageController { dao.clear(ActivityUserScope.class, Cnd.where("userId", "=", clubUser.getUserId()).and("groupId", "in", groupList)); } /* 根据品牌活动,操作user_scope表 end */ + List idList = activityList.stream().map(TrainSignUpActivity::getId).toList(); + dao.clear(TrainSignUpUser.class, Cnd.where("activityId", "in", idList).and("userId", "=", clubUser.getUserId())); + dao.clear(TrainSignUpUserCourse.class, Cnd.where("activityId", "in", idList).and("userId", "=", clubUser.getUserId())); - sysUserService.clearCache(); + + sysUserService.clearCache(); sysRoleService.clearCache(); return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubUserServiceImpl.java b/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubUserServiceImpl.java index 14e510b6..bc54c631 100644 --- a/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubUserServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubUserServiceImpl.java @@ -6,10 +6,11 @@ import com.budwk.app.base.page.Pagination; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.services.SysRoleService; +import com.budwk.app.sys.views.View_user; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.controllers.open.commons.service.CommonService; import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; -import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivity; +import com.budwk.app.zhgh.activity.trainSignUp.models.*; import com.budwk.app.zhgh.club.model.ClubUser; import com.budwk.app.zhgh.club.param.ClubUserPageForm; import com.budwk.app.zhgh.club.service.SysClubService; @@ -178,6 +179,58 @@ public class SysClubUserServiceImpl extends BaseServiceImpl implements } } dao().insert(addScopes); + + // 报名 + List signList = new ArrayList<>(); + List userCourseList = new ArrayList<>(); + + List idList = activityList.stream().map(TrainSignUpActivity::getId).toList(); + + List courses = dao().query(TrainSignUpCourse.class, Cnd.where("activityId", "in", idList)); + List activityCourses = dao().query(TrainSignUpActivityCourse.class, Cnd.where("activityId", "in", idList)); + + List userList = dao().query(View_user.class, Cnd.where("id", "in", users)); + Map userMap = userList.stream().collect(Collectors.toMap(View_user::getId, o -> o)); + + for (TrainSignUpCourse course : courses) { + for (String user : users) { + View_user u = userMap.get(user); + TrainSignUpUser signUpUser = new TrainSignUpUser(); + signUpUser.setActivityId(course.getActivityId()); + signUpUser.setCourseId(course.getId()); + signUpUser.setUserId(user); + signUpUser.setMobile(u.getMobile()); + signUpUser.setSignUpTime(new Date()); + signUpUser.setState(1); + signUpUser.setUnionId(u.getUnionId()); + signUpUser.setUnitId(u.getUnitId()); + signUpUser.setUnionName(u.getUnionName()); + signUpUser.setUnitName(u.getUnitName()); + signList.add(signUpUser); + } + } + + for (TrainSignUpActivityCourse ac : activityCourses) { + for (String user : users) { + View_user u = userMap.get(user); + TrainSignUpUserCourse aCourse = new TrainSignUpUserCourse(); + aCourse.setActivityId(ac.getActivityId()); + aCourse.setCourseId(ac.getCourseId()); + aCourse.setUserId(user); + aCourse.setCourseStartTime(ac.getCourseStartTime()); + aCourse.setCourseEndTime(ac.getCourseEndTime()); + aCourse.setAttend(false); + aCourse.setAttendTime(null); + aCourse.setActivityCourseId(ac.getId()); + userCourseList.add(aCourse); + } + } + if(Lang.isNotEmpty(signList)) { + dao().insert(signList); + } + if(Lang.isNotEmpty(userCourseList)) { + dao().insert(userCourseList); + } } } } diff --git a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java index e1d42e87..a2f0c49f 100644 --- a/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/dayofficework/literacy/service/impl/LiteracyActivityStatisticsServiceImpl.java @@ -96,14 +96,17 @@ public class LiteracyActivityStatisticsServiceImpl extends BaseServiceImpl { - o.put(m.getString("columnCode"), m.getString("columnValue")); - }); - } - }); + for (NutMap o : list) { + if(StrUtil.isBlank(o.getString("mobileColumnsValue"))) { + continue; + } + List mobileColumnsValue = Json.fromJsonAsList(NutMap.class, o.getString("mobileColumnsValue")); + if(Lang.isNotEmpty(mobileColumnsValue)) { + mobileColumnsValue.forEach(m -> { + o.put(m.getString("columnCode"), m.getString("columnValue")); + }); + } + } return list; } @@ -180,7 +183,7 @@ public class LiteracyActivityStatisticsServiceImpl extends BaseServiceImpl> sortedDataMap = courseTimeMap.entrySet().stream() - .sorted(Map.Entry.comparingByKey(Comparator.reverseOrder())) + .sorted(Map.Entry.comparingByKey(Comparator.naturalOrder())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); return sortedDataMap; diff --git a/src/main/resources/static/assets/platform/js/util/coordinateUtil.js b/src/main/resources/static/assets/platform/js/util/coordinateUtil.js new file mode 100644 index 00000000..d85fccb8 --- /dev/null +++ b/src/main/resources/static/assets/platform/js/util/coordinateUtil.js @@ -0,0 +1,91 @@ +// =============== 坐标系工具 =============== +const PI = 3.1415926535897932384626 +const a = 6378245.0 //卫星椭球坐标投影到平面地图坐标系的投影因子。 +const ee = 0.00669342162296594323 //椭球的偏心率。 +const coordinateUtil = { + // 判断是否在中国范围(仅中国加密) + outOfChina(lon, lat) { + if (lon < 72.004 || lon > 137.8347) { + return true; + } + if (lat < 0.8293 || lat > 55.8271) { + return true; + } + return false; + }, + + // 基础偏移计算 + transformLat(lng, lat) { + let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng)) + ret += ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0) / 3.0 + ret += ((20.0 * Math.sin(lat * PI) + 40.0 * Math.sin((lat / 3.0) * PI)) * 2.0) / 3.0 + ret += ((160.0 * Math.sin((lat / 12.0) * PI) + 320 * Math.sin((lat * PI) / 30.0)) * 2.0) / 3.0 + return ret + }, + + transformLng(lng, lat) { + let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng)) + ret += ((20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0) / 3.0 + ret += ((20.0 * Math.sin(lng * PI) + 40.0 * Math.sin((lng / 3.0) * PI)) * 2.0) / 3.0 + ret += ((150.0 * Math.sin((lng / 12.0) * PI) + 300.0 * Math.sin((lng / 30.0) * PI)) * 2.0) / 3.0 + return ret + }, + + // WGS-84 → GCJ-02(用于地图展示) + wgs84ToGcj02(lng, lat) { + let dlat = this.transformLat(lng - 105.0, lat - 35.0); + let dlng = this.transformLng(lng - 105.0, lat - 35.0); + let radlat = (lat / 180.0) * PI; + let magic = Math.sin(radlat); + magic = 1 - ee * magic * magic; + let sqrtmagic = Math.sqrt(magic); + dlat = + (dlat * 180.0) / + (((a * (1 - ee)) / (magic * sqrtmagic)) * PI); + dlng = + (dlng * 180.0) / ((a / sqrtmagic) * Math.cos(radlat) * PI); + let mglat = lat + dlat; + let mglng = lng + dlng; + + return [mglat, mglng]; + }, + + // GCJ-02 → WGS-84(用于存储签到点) + gcj02ToWgs84(lng, lat) { + const originalLngSign = Math.sign(lng); + const originalLatSign = Math.sign(lat); + lat = Math.abs(lat); + lng = Math.abs(lng); + let dlat = this.transformLat(lng - 105.0, lat - 35.0) + let dlng = this.transformLng(lng - 105.0, lat - 35.0) + let radlat = lat / 180.0 * PI + let magic = Math.sin(radlat) + magic = 1 - ee * magic * magic + let sqrtmagic = Math.sqrt(magic) + dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI) + dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI) + let mglat = lat + dlat + let mglng = lng + dlng + let lngs = lng * 2 - mglng + let lats = lat * 2 - mglat + let finalLng = originalLngSign * lngs; + let finalLat = originalLatSign * lats; + + return [finalLat, finalLng]; + }, + + // 计算两点间距离(米),输入 WGS-84 坐标 + getDistance(lat1, lng1, lat2, lng2) { + const R = 6371000; // 地球半径(米) + const φ1 = lat1 * Math.PI / 180; + const φ2 = lat2 * Math.PI / 180; + const Δφ = (lat2 - lat1) * Math.PI / 180; + const Δλ = (lng2 - lng1) * Math.PI / 180; + + const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) + + Math.cos(φ1) * Math.cos(φ2) * + Math.sin(Δλ / 2) * Math.sin(Δλ / 2); + const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + return R * c; + }, +}; diff --git a/src/main/resources/views/layouts/platform_h5.html b/src/main/resources/views/layouts/platform_h5.html index f0721668..eb231e7a 100644 --- a/src/main/resources/views/layouts/platform_h5.html +++ b/src/main/resources/views/layouts/platform_h5.html @@ -55,6 +55,7 @@ + @@ -375,6 +376,7 @@ Vue.prototype.$moment = moment Vue.prototype.$businessTool = businessTool Vue.prototype.$commonUtil = commonUtil + Vue.prototype.$coordinateUtil = coordinateUtil Vue.prototype.$auth = commonUtil.authService() Vue.prototype.$axios = commonUtil.axiosService() Vue.prototype.$downLoad = commonUtil.downLoadService.bind(commonUtil) diff --git a/src/main/resources/views/layouts/v4/baseLayout.html b/src/main/resources/views/layouts/v4/baseLayout.html index 5834fd4d..e2d0e857 100644 --- a/src/main/resources/views/layouts/v4/baseLayout.html +++ b/src/main/resources/views/layouts/v4/baseLayout.html @@ -11,7 +11,6 @@ - @@ -72,7 +71,7 @@ -l + l @@ -85,6 +84,7 @@ l + @@ -98,7 +98,7 @@ l src="https://webapi.amap.com/maps?v=2.0&key=b4fa2e2bc10a725ab007b98a3aa447cc&plugin=AMap.PolyEditor,AMap.Geolocation" >--> - +