From ef9b9bc03d455cabe5e4b18ebafc1f8889ec19d5 Mon Sep 17 00:00:00 2001 From: "@jyuhsin" <729757837@qq.com> Date: Thu, 30 Oct 2025 17:38:59 +0800 Subject: [PATCH] commit --- .../budwk/app/base/utils/DistanceUtils.java | 41 +++++ .../ActivityBasicScopeController.java | 1 + .../ActivityBasicUnitController.java | 2 +- .../manage/TrainSignUpManageController.java | 38 +++++ .../manage/TrainsignUpMineController.java | 59 +++++-- ...ainSignUpActivityStatisticsController.java | 26 ++- .../models/TrainSignUpActivity.java | 10 ++ .../trainSignUp/models/TrainSignUpCourse.java | 10 ++ .../infoManage/ClubInfoManageController.java | 29 +++- .../interceptor/ClubUserJoinInterceptor.java | 9 + .../zhgh/club/service/SysClubUserService.java | 2 + .../impl/SysClubInfoManageServiceImpl.java | 26 +-- .../service/impl/SysClubUserServiceImpl.java | 38 +++++ .../budwk/app/zhgh/map/TMapController.java | 52 ++++++ .../components/plugins/mapContainer/TMap.vue | 155 ++++++++++++++++++ .../components/plugins/sysScanCode/index.vue | 4 +- .../resources/views/layouts/platform_h5.html | 1 + .../views/layouts/v4/baseLayout.html | 31 +--- .../views/platform/sys/data/user/pull.html | 7 +- .../resources/views/platform/sys/login.html | 2 +- .../zhgh/activity/family/apply/courseList.js | 4 +- .../activity/trainSignUp/apply/courseList.js | 4 +- .../activity/trainSignUp/manage/basicForm.js | 28 +++- .../activity/trainSignUp/manage/customForm.js | 35 +++- .../activity/trainSignUp/manage/makeQrcode.js | 4 +- .../trainSignUp/statistics/index.html | 8 +- .../trainSignUp/userAdjust/index.html | 8 +- .../trainSignUp/userManage/index.html | 18 +- .../register/apply/clubRegisterManager.js | 3 +- .../zhgh/club/register/apply/index.html | 12 +- .../literacy/apply/courseList.js | 4 +- .../zhghh5/activity/family/list/index.html | 2 +- .../activity/trainSignUp/common/times.js | 133 ++++++++++++++- .../activity/trainSignUp/list/index.html | 2 +- .../dayofficework/literacy/list/index.html | 2 +- 35 files changed, 707 insertions(+), 103 deletions(-) create mode 100644 src/main/java/com/budwk/app/base/utils/DistanceUtils.java create mode 100644 src/main/java/com/budwk/app/zhgh/map/TMapController.java create mode 100644 src/main/resources/static/components/plugins/mapContainer/TMap.vue diff --git a/src/main/java/com/budwk/app/base/utils/DistanceUtils.java b/src/main/java/com/budwk/app/base/utils/DistanceUtils.java new file mode 100644 index 00000000..7f91e054 --- /dev/null +++ b/src/main/java/com/budwk/app/base/utils/DistanceUtils.java @@ -0,0 +1,41 @@ +package com.budwk.app.base.utils; + +/** + * @ClassName DistanceUtils + * @Author JyuHsin + * @Date 2025/10/30 16:22 + * @Version 1.0 + * @Description TODO + */ +public class DistanceUtils { + + private static final double EARTH_RADIUS = 6371000; // 地球半径,单位:米 + + /** + * 计算两个经纬度之间的距离(单位:米) + * @param lat1 纬度1(单位:度) + * @param lng1 经度1(单位:度) + * @param lat2 纬度2(单位:度) + * @param lng2 经度2(单位:度) + * @return 距离(米) + */ + public static double getDistance(double lat1, double lng1, double lat2, double lng2) { + // 将角度转为弧度 + double lat1Rad = Math.toRadians(lat1); + double lng1Rad = Math.toRadians(lng1); + double lat2Rad = Math.toRadians(lat2); + double lng2Rad = Math.toRadians(lng2); + + // 纬度和经度的差值(弧度) + double deltaLat = lat2Rad - lat1Rad; + double deltaLng = lng2Rad - lng1Rad; + + // Haversine 公式 + double a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) + + Math.cos(lat1Rad) * Math.cos(lat2Rad) + * Math.sin(deltaLng / 2) * Math.sin(deltaLng / 2); + double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + + return EARTH_RADIUS * c; // 返回米 + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java index 0c83832a..60f6f92f 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicScopeController.java @@ -139,6 +139,7 @@ public class ActivityBasicScopeController { FROM `vw_user` u LEFT JOIN sys_user_role sur ON sur.userid = u.id + LEFT JOIN club_user clubuser ON clubuser.userid=u.id $condition """); Cnd cnd = getCnd(activityUserScopePageParam); diff --git a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicUnitController.java b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicUnitController.java index 33183a32..21760eb4 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicUnitController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/basic/controller/ActivityBasicUnitController.java @@ -86,7 +86,7 @@ public class ActivityBasicUnitController { for (int i = 0; i < list.size(); i++) { nodeList.add(new TreeNode<>(list.get(i).getId(), list.get(i).getParentId(), list.get(i).getName(), i)); } - List> treeList = TreeUtil.build(nodeList, "1"); + List> treeList = TreeUtil.build(nodeList, "0000"); return Result.success(treeList); } diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpManageController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpManageController.java index ebd5209a..acccf91e 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpManageController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpManageController.java @@ -6,9 +6,13 @@ import cn.hutool.core.util.StrUtil; 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.flow.entity.ProcessInstance; +import com.budwk.app.flow.enums.ProcessInstanceStateEnum; import com.budwk.app.sys.models.Sys_home_activity; +import com.budwk.app.sys.models.Sys_union; import com.budwk.app.zhgh.activity.trainSignUp.models.*; import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService; +import com.budwk.app.zhgh.club.model.SysClub; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -197,4 +201,38 @@ public class TrainSignUpManageController { List query = dao.query(TrainSignUpActivity.class, Cnd.NEW().desc("activityStartTime")); return Result.success().addData(query); } + + @At + @Ok("json:full") + @ApiOperation("查询分工会和协会") + @SaCheckPermission("trainSignUp.manage") + public Result selectUnionAndClub() { + List result = new ArrayList<>(); + List unionList = dao.query(Sys_union.class, Cnd.NEW().asc(Sys_union::getUnionCode)); + for (Sys_union union : unionList) { + NutMap map = new NutMap(); + map.put("id", union.getId()); + map.put("name", union.getName()); + map.put("type", "union"); + result.add(map); + } + List clubList = dao.query(SysClub.class, Cnd.NEW().asc(SysClub::getClubCode)); + + List instanceList = dao.query( + ProcessInstance.class, + Cnd.where(ProcessInstance::getBusinessNo, "in", clubList.stream().map(SysClub::getId).toList()) + .and(ProcessInstance::getState, "=", ProcessInstanceStateEnum.FINISHED.getCode()) + ); + List passList = instanceList.stream().map(ProcessInstance::getBusinessNo).toList(); + List passClubList = clubList.stream().filter(o -> passList.contains(o.getId())).toList(); + + for (SysClub sysClub : passClubList) { + NutMap map = new NutMap(); + map.put("id", sysClub.getId()); + map.put("name", sysClub.getClubName()); + map.put("type", "club"); + result.add(map); + } + return Result.success(result); + } } 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 ac4031ae..817fe419 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 @@ -2,12 +2,15 @@ package com.budwk.app.zhgh.activity.trainSignUp.controller.manage; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; +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.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpCourse; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUserCourse; import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService; import io.swagger.annotations.Api; @@ -26,6 +29,8 @@ 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; import java.util.Date; import java.util.List; @@ -73,22 +78,25 @@ public class TrainsignUpMineController { return Result.error(99, "未查询到您的报名记录"); } - // 获取现在的日期,并往后推1个小时 - String oneHourLater = DateUtil.offsetHour(new Date(), 1).toString("yyyy-MM-dd HH:mm:ss"); - TrainSignUpUserCourse userCourse = dao.fetch( - TrainSignUpUserCourse.class, - Cnd.where("courseId", "=", courseId) - .and("userId", "=", SecurityUtil.getUserId()) - .and("courseStartTime", "<=", oneHourLater) - .and("courseEndTime", ">=", oneHourLater) - ); - if (userCourse == null) { + TrainSignUpCourse course = dao.fetch(TrainSignUpCourse.class, courseId); + int minute = course.getSignUnit() != null ? course.getSignUnit() : 0; + + boolean flag = true; + // 获取现在的日期,并根据设置的数据 + List timeList = dao.query(TrainSignUpUserCourse.class, Cnd.where("courseId", "=", courseId)); + for (TrainSignUpUserCourse userCourse : timeList) { + DateTime startTime = DateUtil.offsetMinute(userCourse.getCourseStartTime(), -minute); + DateTime endTime = DateUtil.offsetMinute(userCourse.getCourseEndTime(), minute); + if(DateUtil.isIn(DateUtil.date(), startTime, endTime)) { + userCourse.setAttend(true); + userCourse.setAttendTime(DateUtil.date()); + flag = false; + } + } + if(flag) { return Result.error(99, "未到签到时间"); } - - userCourse.setAttend(true); - userCourse.setAttendTime(DateUtil.date()); - dao.update(userCourse); + dao.update(timeList); return Result.success(); } @@ -122,6 +130,29 @@ public class TrainsignUpMineController { return Result.success(); } + @At + @ApiOperation("定位签到") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"trainSignUp.mine", "h5.trainSignUp.mine"}, mode = SaMode.OR) + @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(); + double distance = DistanceUtils.getDistance(coordinates.get(0), coordinates.get(1), lat, lng); + + int radius = course.getRadius() != null ? course.getRadius() : 100; + if(distance > radius) { + int result = BigDecimal.valueOf(distance).setScale(0, RoundingMode.HALF_UP).intValue(); + return Result.error(99, "签到失败,您距离签到点还有%s米".formatted(result)); + } + + TrainSignUpUserCourse userCourse = dao.fetch(TrainSignUpUserCourse.class, timeId); + userCourse.setAttend(true); + userCourse.setAttendTime(DateUtil.date()); + dao.update(userCourse); + return Result.success(); + } + @At @ApiOperation("分活动查询") @SaCheckPermission(value = {"trainSignUp.mine", "h5.trainSignUp.mine"}, mode = SaMode.OR) 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 7363ee5b..96644165 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 @@ -7,12 +7,15 @@ import cn.afterturn.easypoi.excel.export.ExcelExportService; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; +import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.CommonDownloadUtil; 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; @@ -96,7 +99,28 @@ public class TrainSignUpActivityStatisticsController { @SaCheckPermission("trainSignUp.statistics") public Result activityList(@Param(value = "year") Integer year) { List list = dao.query(TrainSignUpActivity.class, Cnd.NEW().andEX("year", "=", year).desc("activityStartTime")); - return Result.success(list); + if(!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_CHAIRMAN.name())) { + // 获取当前登录用户的工会 + String unionId = SecurityUtil.getUnionId(); + // 获取当前登录用户的协会 + List clubIds = SecurityUtil.getClubIds(); + + List result = new ArrayList<>(); + for (TrainSignUpActivity activity : list) { + if(AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { + if(activity.getHostUnits().contains(unionId) || activity.getHelpUnits().contains(unionId)) { + result.add(activity); + } + } + if(AuthUtil.hasRoleOr(RoleConstant.CLUB_PRESIDENT.name(), RoleConstant.CLUB_OPERATOR.name())) { + if(clubIds.stream().anyMatch(activity.getHostUnits()::contains) || clubIds.stream().anyMatch(activity.getHelpUnits()::contains)) { + result.add(activity); + } + } + } + return Result.success(result); + } + return Result.success(list); } /** diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java index 536c1d49..2e7809c5 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/models/TrainSignUpActivity.java @@ -114,6 +114,16 @@ public class TrainSignUpActivity extends BaseModel implements Serializable, SysH @ColDefine(type = ColType.VARCHAR, width = 20) private String trainType; + @Column + @Comment("主办单位") + @ColDefine(type = ColType.MYSQL_JSON) + private List hostUnits; + + @Column + @Comment("协办单位") + @ColDefine(type = ColType.MYSQL_JSON) + private List helpUnits; + @Override public Sys_home_activity covertToSysHomeActivity() { Sys_home_activity sysHomeActivity = new Sys_home_activity(); 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 45d43584..0fc37274 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 @@ -114,6 +114,16 @@ public class TrainSignUpCourse extends BaseModel implements Serializable { @Comment("签到方式 1.扫描二维码签到 2.被扫 3.gps签到") private Integer signType; + @Column + @ColDefine(type = ColType.INT) + @Comment("签到时间误差") + private Integer signUnit; + + @Column + @ColDefine(type = ColType.INT) + @Comment("签到半径") + private Integer radius; + @Column @ColDefine(type = ColType.BOOLEAN) @Comment("移动端是否签收礼品") 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 edebb085..7827c714 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 @@ -18,10 +18,13 @@ import com.budwk.app.sys.services.SysUserService; import com.budwk.app.sys.views.View_user; 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.club.model.ClubUser; import com.budwk.app.zhgh.club.model.SysClub; import com.budwk.app.zhgh.club.param.ClubUserPageForm; import com.budwk.app.zhgh.club.service.SysClubInfoManageService; +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; @@ -67,6 +70,8 @@ public class ClubInfoManageController { private SysRoleService sysRoleService; @Inject private SysUserService sysUserService; + @Inject + private SysClubUserService clubUserService; @At("") @Ok("beetl:/platform/zhgh/club/infoManage/manage/index.html") @@ -159,6 +164,22 @@ public class ClubInfoManageController { .and("clubId", "=", clubUser.getClubId())); } } + + /* 根据品牌活动,操作user_scope表 start */ + List list = dao.query(TrainSignUpActivity.class, Cnd.NEW()); + List activityList = new ArrayList<>(); + for (TrainSignUpActivity activity : list) { + boolean host = Lang.isNotEmpty(activity.getHostUnits()) && activity.getHostUnits().contains(clubUser.getClubId()); + if(host) { + activityList.add(activity); + } + } + if(Lang.isNotEmpty(activityList)) { + List groupList = activityList.stream().map(TrainSignUpActivity::getActivityGroupId).distinct().toList(); + dao.clear(ActivityUserScope.class, Cnd.where("userId", "=", clubUser.getUserId()).and("groupId", "in", groupList)); + } + /* 根据品牌活动,操作user_scope表 end */ + sysUserService.clearCache(); sysRoleService.clearCache(); return Result.success(); @@ -282,7 +303,9 @@ public class ClubInfoManageController { } dao.insertOrUpdate(clubUser); } - return Result.success(); + + clubUserService.clubUser2Scope(clubId, Arrays.asList(users)); + return Result.success(); } @At @@ -353,6 +376,10 @@ public class ClubInfoManageController { }); dao.insert(sysUserRoleList); + if(Lang.isNotEmpty(clubUserList)) { + clubUserService.clubUser2Scope(businessId, clubUserList.stream().map(ClubUser::getUserId).toList()); + } + //如果有错误数据就返回给前端 if (Lang.isNotEmpty(errorInfos)) { NutMap nutMap = NutMap.NEW(); diff --git a/src/main/java/com/budwk/app/zhgh/club/interceptor/ClubUserJoinInterceptor.java b/src/main/java/com/budwk/app/zhgh/club/interceptor/ClubUserJoinInterceptor.java index 419db81d..20fca989 100644 --- a/src/main/java/com/budwk/app/zhgh/club/interceptor/ClubUserJoinInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/club/interceptor/ClubUserJoinInterceptor.java @@ -7,9 +7,14 @@ import com.budwk.app.flow.engine.core.Execution; import com.budwk.app.flow.engine.core.ServiceContext; import com.budwk.app.zhgh.club.model.ClubUser; import com.budwk.app.zhgh.club.model.ClubUserApply; +import com.budwk.app.zhgh.club.service.SysClubUserService; +import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Dao; +import org.nutz.ioc.aop.Aop; import org.nutz.json.Json; +import java.util.List; + /** * @ClassName ClubUserJoinInterceptor * @Author JyuHsin @@ -20,14 +25,18 @@ import org.nutz.json.Json; public class ClubUserJoinInterceptor implements FlowInterceptor { @Override + @Aop(TransAop.READ_COMMITTED) public void intercept(Execution execution) { String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); ClubUserApply clubUserApply = Json.fromJson(ClubUserApply.class, formDataStr); Dao dao = ServiceContext.find(Dao.class); + SysClubUserService userService = ServiceContext.find(SysClubUserService.class); ClubUser clubUser = BeanUtil.copyProperties(clubUserApply, ClubUser.class); dao.insert(clubUser); + + userService.clubUser2Scope(clubUser.getClubId(), List.of(clubUser.getUserId())); } } diff --git a/src/main/java/com/budwk/app/zhgh/club/service/SysClubUserService.java b/src/main/java/com/budwk/app/zhgh/club/service/SysClubUserService.java index e448276b..00b57ca3 100644 --- a/src/main/java/com/budwk/app/zhgh/club/service/SysClubUserService.java +++ b/src/main/java/com/budwk/app/zhgh/club/service/SysClubUserService.java @@ -22,4 +22,6 @@ public interface SysClubUserService extends BaseService { Pagination pageDataByApplyJoinClubAudit(@Valid ClubUserPageForm pageForm); String getClubLeader(@Valid String clubId); + + void clubUser2Scope(String clubId, List users); } diff --git a/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubInfoManageServiceImpl.java b/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubInfoManageServiceImpl.java index 46b834ef..b1003d50 100644 --- a/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubInfoManageServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubInfoManageServiceImpl.java @@ -129,16 +129,7 @@ public class SysClubInfoManageServiceImpl extends BaseServiceImpl implements .filter(Objects::nonNull) .collect(Collectors.joining(",")); } + + @Override + public void clubUser2Scope(String clubId, List users) { + // 添加协会成员,需要增加到品牌活动的组别去,wcnm + List list = dao().query(TrainSignUpActivity.class, Cnd.NEW()); + List activityList = new ArrayList<>(); + for (TrainSignUpActivity activity : list) { + boolean host = Lang.isNotEmpty(activity.getHostUnits()) && activity.getHostUnits().contains(clubId); + if(host) { + activityList.add(activity); + } + } + if(Lang.isNotEmpty(activityList)) { + // 查询所有的组别 + List groupAllList = dao().query(ActivityUserScope.class, Cnd.NEW().groupBy("groupId")); + Map groupMap = groupAllList.stream().collect(Collectors.toMap(ActivityUserScope::getGroupId, ActivityUserScope::getGroupName)); + + List groupList = activityList.stream().map(TrainSignUpActivity::getActivityGroupId).distinct().toList(); + List addScopes = new ArrayList<>(); + for (Integer groupId : groupList) { + for (String user : users) { + int count = dao().count(ActivityUserScope.class, Cnd.where(ActivityUserScope::getGroupId, "=", groupId).and(ActivityUserScope::getUserId, "=", user)); + if(count > 0) { + continue; + } + ActivityUserScope scope = new ActivityUserScope(); + scope.setGroupId(groupId); + scope.setGroupName(groupMap.get(groupId)); + scope.setUserId(user); + addScopes.add(scope); + } + } + dao().insert(addScopes); + } + } } diff --git a/src/main/java/com/budwk/app/zhgh/map/TMapController.java b/src/main/java/com/budwk/app/zhgh/map/TMapController.java new file mode 100644 index 00000000..9b897354 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/map/TMapController.java @@ -0,0 +1,52 @@ +package com.budwk.app.zhgh.map; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.sys.models.Sys_config; +import com.budwk.app.sys.services.SysConfigService; +import com.budwk.app.zhgh.club.param.ClubUserPageForm; +import com.budwk.app.zhgh.club.vo.ClubCommonPageVo; +import io.swagger.annotations.ApiOperation; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import javax.validation.Valid; + +/** + * @ClassName TMapController + * @Author JyuHsin + * @Date 2025/10/30 11:22 + * @Version 1.0 + * @Description TODO + */ +@IocBean +@Ok("json") +@At("/platform/TMap") +public class TMapController { + + private static String KEY = "MLLBZ-GQECI-ASXG7-5GNOZ-XW2OF-H5BVH"; + @Inject + private SysConfigService configService; + + @At + @SaCheckLogin + @ApiOperation("关键词输入提示") + public Result suggestion(String keyword) { + if(StrUtil.isBlank(keyword)) { + return Result.error("关键词不能为空"); + } + Sys_config city = configService.getValueByKey("CityName"); + String cityName = city != null ? city.getConfigValue() : ""; + String url = "https://apis.map.qq.com/ws/place/v1/suggestion?key=%s&keyword=%s®ion=%s" + .formatted(KEY, keyword, cityName); + String response = HttpUtil.get(url); + return Result.success(JSONUtil.parse(response)); + } +} diff --git a/src/main/resources/static/components/plugins/mapContainer/TMap.vue b/src/main/resources/static/components/plugins/mapContainer/TMap.vue new file mode 100644 index 00000000..9476b454 --- /dev/null +++ b/src/main/resources/static/components/plugins/mapContainer/TMap.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/src/main/resources/static/components/plugins/sysScanCode/index.vue b/src/main/resources/static/components/plugins/sysScanCode/index.vue index 954dabef..f17c283c 100644 --- a/src/main/resources/static/components/plugins/sysScanCode/index.vue +++ b/src/main/resources/static/components/plugins/sysScanCode/index.vue @@ -63,7 +63,7 @@ module.exports = { } }) .catch((err) => { - console.log(err) + this.$toast('未获取到摄像头信息') }) }, start() { @@ -88,7 +88,7 @@ module.exports = { }); }, closeScan() { - this.html5QrCode.stop() + this.html5QrCode?.stop() .then((ignore) => { console.log("QR Code scanning stopped."); }) diff --git a/src/main/resources/views/layouts/platform_h5.html b/src/main/resources/views/layouts/platform_h5.html index 425a5b6f..f0721668 100644 --- a/src/main/resources/views/layouts/platform_h5.html +++ b/src/main/resources/views/layouts/platform_h5.html @@ -80,6 +80,7 @@ src="https://webapi.amap.com/maps?v=2.0&key=57f0d098ba1b881ecc436c4cfd23bbbf&plugin=AMap.PolyEditor,AMap.Geolocation" > + + - + @@ -92,28 +92,13 @@ l - - // 冻结 Object.prototype(如果可能) - try { - Object.freeze(Object.prototype); - } catch (e) { - // 忽略错误(某些环境可能不允许) - } - })(); - - + diff --git a/src/main/resources/views/platform/zhgh/activity/family/apply/courseList.js b/src/main/resources/views/platform/zhgh/activity/family/apply/courseList.js index fe2ea79d..52bc5a37 100644 --- a/src/main/resources/views/platform/zhgh/activity/family/apply/courseList.js +++ b/src/main/resources/views/platform/zhgh/activity/family/apply/courseList.js @@ -31,11 +31,11 @@ const courseList = { {{ item }} diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js index dc5d8693..50da49d5 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js @@ -31,11 +31,11 @@ const courseList = { {{ item }} diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/basicForm.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/basicForm.js index 85e90918..8c74f8cd 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/basicForm.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/basicForm.js @@ -102,6 +102,22 @@ const basicForm = { + + + + + + + + + + + + + + + + @@ -318,7 +334,9 @@ const basicForm = { }, restrictLimit: 1, limitNum: 1, - typeLimits: [] + typeLimits: [], + hostUnits: [], + helpUnits: [], }, historicalActList: [], trainTypeList: [], @@ -331,6 +349,7 @@ const basicForm = { }, campusList: [], courseTypeList: [], + undertakeOptions: [], } }, components: { @@ -537,6 +556,8 @@ const basicForm = { } cloneData.typeLimits = JSON.stringify(this.formData.typeLimits) cloneData.courseList = JSON.stringify(cloneData.courseList) + cloneData.hostUnits = JSON.stringify(cloneData.hostUnits) + cloneData.helpUnits = JSON.stringify(cloneData.helpUnits) const confirm = await this.$confirm("您确定要" + type + "吗?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", @@ -570,8 +591,13 @@ const basicForm = { this.activityGroupList = await this.getActivityGroup() this.historicalActList = await this.getHistoricalActList() this.courseTypeList = await this.getAllType() + await this.selectUnionAndClub() await this.init(row) }, + async selectUnionAndClub() { + const resp = await this.$axios.post("/platform/trainSignUp/manage/selectUnionAndClub") + this.undertakeOptions = resp.data + }, }, watch: { 'formData.restrictLimit'(val) { diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/customForm.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/customForm.js index d7dc37c5..9b9026a6 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/customForm.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/customForm.js @@ -75,11 +75,32 @@ const customForm = { + + + 签到时间误差 + + + + + + + + + + + 签到半径 + + + + + + + + 地点坐标 @@ -157,7 +178,9 @@ const customForm = { - + 确 定 @@ -181,7 +204,7 @@ const customForm = { }, components: { "union-form": unionForm, - "map-container": httpVueLoader("/components/plugins/mapContainer/MapContainer.vue?v=1.0.1") + "map-container": httpVueLoader("/components/plugins/mapContainer/TMap.vue?v=1.0.6") }, methods: { openMap(index) { diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/makeQrcode.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/makeQrcode.js index c4f147e0..7617e44a 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/makeQrcode.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/manage/makeQrcode.js @@ -66,14 +66,14 @@ const makeQrcode = { this.courseDialog = true }, makeCourseCode(row) { - const url = '/platform/trainSignUp/mine/drivingScan' + const url = '${AppDomain!}/platform/trainSignUp/mine/drivingScan' const data = url + '?courseId=' + row.id console.log(data) const content = jrQrcode.getQrBase64(data) let image = new Image() image.src = content let viewer = new Viewer(image, { - zIndex: 99999999, + zIndex: 999999, }) viewer.show() }, diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/index.html index 6c5061aa..15324e5f 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/index.html +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/index.html @@ -115,9 +115,11 @@ layout("/layouts/platform.html"){ } }, activityChange(val) { - const activity = this.activityList.find((o) => o.id === val) - const type = this.dict.type.TRAIN_SIGNUP_TYPE.find(o => o.code === activity.trainType) - this.trainType = type?.name || "培训班" + this.$nextTick(() => { + const activity = this.activityList.find((o) => o.id === val) + const type = this.dict.type.TRAIN_SIGNUP_TYPE?.find(o => o.code === activity.trainType) + this.trainType = type?.name || "培训班" + }) }, exportSignUser() { this.$downLoad(loc() + "/exportSignUser", { activityId: this.pageForm.activityId }) diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/index.html index 86af8258..45682a42 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/index.html +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/index.html @@ -105,9 +105,11 @@ layout("/layouts/platform.html"){ }, methods: { activityChange(val) { - const activity = this.activityList.find((o) => o.id === val) - const type = this.dict.type.TRAIN_SIGNUP_TYPE.find(o => o.code === activity.trainType) - this.trainType = type?.name || "培训班" + this.$nextTick(() => { + const activity = this.activityList.find((o) => o.id === val) + const type = this.dict.type.TRAIN_SIGNUP_TYPE?.find(o => o.code === activity.trainType) + this.trainType = type?.name || "培训班" + }) }, async yearChange() { this.pageForm.activityId = null diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/userManage/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userManage/index.html index 89137e4d..2d28edca 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/userManage/index.html +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userManage/index.html @@ -108,8 +108,8 @@ layout("/layouts/platform.html"){ { label: "姓名", prop: "username" }, { label: "工号", prop: "loginname" }, { label: "联系方式", prop: "mobile" }, - { label: "单位", prop: "unitname", sortable: true }, - { label: "分工会", prop: "unionname", sortable: true }, + { label: "单位", prop: "unitName", sortable: true }, + { label: "分工会", prop: "unionName", sortable: true }, { label: "课程", prop: "courseNames", sortable: true }, { label: "缺席次数", prop: "absentCount" }, { label: "是否黑名单", prop: "isDisabled", sortable: true } @@ -192,12 +192,14 @@ layout("/layouts/platform.html"){ this.$downLoad(url, param) }, async activityChange(val) { - const activity = this.activityList.find((o) => o.id === val) - const type = this.dict.type.TRAIN_SIGNUP_TYPE.find(o => o.code === activity.trainType) - this.trainType = type?.name || "培训班" - const resp = await this.$axios.post(loc() + "/getCourseByActivityId", { activityId: val }) - this.courseList = resp.data - this.pageForm.courseId = "" + this.$nextTick(async () => { + const activity = this.activityList.find((o) => o.id === val) + const type = this.dict.type.TRAIN_SIGNUP_TYPE?.find(o => o.code === activity.trainType) + this.trainType = type?.name || "培训班" + const resp = await this.$axios.post(loc() + "/getCourseByActivityId", { activityId: val }) + this.courseList = resp.data + this.pageForm.courseId = "" + }) }, async handleUser(userId) { const resp = await $.post(loc() + "/doHandleUser", { userId }) diff --git a/src/main/resources/views/platform/zhgh/club/register/apply/clubRegisterManager.js b/src/main/resources/views/platform/zhgh/club/register/apply/clubRegisterManager.js index 36824020..80ab0500 100644 --- a/src/main/resources/views/platform/zhgh/club/register/apply/clubRegisterManager.js +++ b/src/main/resources/views/platform/zhgh/club/register/apply/clubRegisterManager.js @@ -57,8 +57,7 @@ const CLUB_MANAGER_TEMPLATE = { 增加