This commit is contained in:
2026-04-27 15:18:11 +08:00
parent 38d0eb691c
commit 91af382d2a
6 changed files with 148 additions and 10 deletions
@@ -1,8 +1,6 @@
package com.budwk.app.sys.services.impl;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HtmlUtil;
import com.budwk.app.base.constant.RedisConstant;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.sms.SmsService;
@@ -102,11 +100,10 @@ public class SysMsgServiceImpl extends BaseServiceImpl<Sys_msg> implements SysMs
});
//发送学校平台消息
// for (String loginName : loginNames) {
// smsService.send(loginName, sysMsg.getTitle(), sysMsg.getNote());
// }
smsService.massSendMessage(loginNames, sysMsg.getNote());
ThreadUtil.execute(() -> {
//smsService.massSend(loginNames, sysMsg.getTitle(), HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(sysMsg.getNote(),"")), sysMsg.getUrl());
// smsService.massSend(loginNames, sysMsg.getTitle(), HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(sysMsg.getNote(),"")), sysMsg.getUrl());
});
return sysMsg;
@@ -1,15 +1,12 @@
package com.budwk.app.task.job;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.param.ConditionGroup;
import com.budwk.app.sys.enums.SysDataUpdateMode;
import com.budwk.app.sys.models.Sys_user_source;
import com.budwk.app.sys.param.SysDataUserUpdateParam;
import com.budwk.app.sys.services.SysDataUserPullService;
import com.budwk.app.sys.services.SysDataUserUpdateService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -57,6 +54,6 @@ public class SysUserAllRenewJob implements Job {
param.setUpdateMode(SysDataUpdateMode.ALL.name());
param.setConditionGroup(conditionGroup);
// sysDataUserUpdateService.update(param);
sysDataUserUpdateService.update(param);
}
}
@@ -10,6 +10,9 @@ 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_unit;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.services.SysMsgService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.smartbenefits.models.*;
import com.budwk.app.zhgh.activity.smartbenefits.service.SmartBenefitsActivityService;
import com.budwk.app.zhgh.club.model.SysClub;
@@ -50,6 +53,8 @@ public class SmartBenefitsManageController {
@Inject
private SmartBenefitsActivityService smartBenefitsActivityManageService;
@Inject
private SysMsgService sysMsgService;
@Inject
private Dao dao;
@At("")
@@ -235,4 +240,29 @@ public class SmartBenefitsManageController {
}
return Result.success(result);
}
@At
@Ok("json:full")
@ApiOperation("通知报名人员")
@SaCheckPermission("smartbenefits.manage")
public Result sendNotify(@Param("activityId") String activityId, @Param("content") String content) {
if (StrUtil.isBlank(activityId) || StrUtil.isBlank(content)) {
return Result.error("参数不完整");
}
// 查询该活动下所有报名人员(state=1为正常报名)
List<SmartBenefitsUser> userList = dao.query(SmartBenefitsUser.class, Cnd.where("activityId", "=", activityId).and("state", "=", 1));
if (userList.isEmpty()) {
return Result.error("该活动暂无报名人员");
}
// 获取所有报名人员的userId
List<String> userIds = userList.stream().map(SmartBenefitsUser::getUserId).distinct().toList();
// 查询用户信息获取loginname
List<Sys_user> sysUsers = dao.query(Sys_user.class, Cnd.where("id", "in", userIds));
List<String> loginNames = sysUsers.stream().map(Sys_user::getLoginname).filter(StrUtil::isNotBlank).toList();
if (loginNames.isEmpty()) {
return Result.error("未找到有效的报名人员");
}
sysMsgService.sendMsg(loginNames, "智享惠生活活动通知", content, SecurityUtil.getUserId());
return Result.success("通知发送成功");
}
}
@@ -10,8 +10,11 @@ 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_unit;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.trainSignUp.models.*;
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.services.SysMsgService;
import com.budwk.app.zhgh.club.model.SysClub;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -50,6 +53,8 @@ public class TrainSignUpManageController {
@Inject
private TrainSignUpActivityService trainSignUpActivityManageService;
@Inject
private SysMsgService sysMsgService;
@Inject
private Dao dao;
@At("")
@@ -235,4 +240,29 @@ public class TrainSignUpManageController {
}
return Result.success(result);
}
@At
@Ok("json:full")
@ApiOperation("通知报名人员")
@SaCheckPermission("trainSignUp.manage")
public Result sendNotify(@Param("activityId") String activityId, @Param("content") String content) {
if (StrUtil.isBlank(activityId) || StrUtil.isBlank(content)) {
return Result.error("参数不完整");
}
// 查询该活动下所有报名人员(state=1为正常报名)
List<TrainSignUpUser> userList = dao.query(TrainSignUpUser.class, Cnd.where("activityId", "=", activityId).and("state", "=", 1));
if (userList.isEmpty()) {
return Result.error("该活动暂无报名人员");
}
// 获取所有报名人员的userId
List<String> userIds = userList.stream().map(TrainSignUpUser::getUserId).distinct().toList();
// 查询用户信息获取loginname
List<Sys_user> sysUsers = dao.query(Sys_user.class, Cnd.where("id", "in", userIds));
List<String> loginNames = sysUsers.stream().map(Sys_user::getLoginname).filter(StrUtil::isNotBlank).toList();
if (loginNames.isEmpty()) {
return Result.error("未找到有效的报名人员");
}
sysMsgService.sendMsg(loginNames, "香樟工会讲堂活动通知", content, SecurityUtil.getUserId());
return Result.success("通知发送成功");
}
}
@@ -90,6 +90,7 @@ layout("/layouts/platform.html"){
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="openActivityCode(row.id)">活动二维码</el-dropdown-item>
<el-dropdown-item @click.native="makeCode(row)">签到二维码</el-dropdown-item>
<el-dropdown-item @click.native="openNotifyDialog(row)">通知报名人员</el-dropdown-item>
<el-dropdown-item @click.native="onView(row)">查看</el-dropdown-item>
<el-dropdown-item @click.native="openEdit(row)">编辑</el-dropdown-item>
<el-dropdown-item @click.native="onDelete(row)">删除</el-dropdown-item>
@@ -123,6 +124,23 @@ layout("/layouts/platform.html"){
<el-button @click="codeDialogVisible = false" type="primary">关 闭</el-button>
</span>
</el-dialog>
<el-dialog
title="通知报名人员"
:visible.sync="notifyDialogVisible"
:close-on-click-modal="false"
width="50%">
<el-input
type="textarea"
:rows="6"
placeholder="请输入通知内容"
v-model="notifyContent">
</el-input>
<span slot="footer" class="dialog-footer">
<el-button @click="notifyDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="sendNotify">发 送</el-button>
</span>
</el-dialog>
</guava>
</div>
@@ -154,6 +172,9 @@ layout("/layouts/platform.html"){
],
codeDialogVisible: false,
activityUrl: '',
notifyDialogVisible: false,
notifyContent: '',
notifyActivityId: '',
}
},
methods: {
@@ -182,6 +203,27 @@ layout("/layouts/platform.html"){
makeCode(row) {
this.$refs.codeRef.initData(row)
},
openNotifyDialog(row) {
this.notifyActivityId = row.id
this.notifyContent = ''
this.notifyDialogVisible = true
},
async sendNotify() {
if (!this.notifyContent.trim()) {
this.$message.warning('请输入通知内容')
return
}
const resp = await this.$axios.post(loc() + "/sendNotify", {
activityId: this.notifyActivityId,
content: this.notifyContent
})
if (resp.code === 0) {
this.$message.success(resp.msg)
this.notifyDialogVisible = false
} else {
this.$message.warning(resp.msg)
}
},
async activityStatusChange(notice, val, id) {
const resp = await this.$axios.post(loc() + "/activityStatusChange", { notice: notice, isDisabled: val, id })
if (resp.code === 0) {
@@ -90,6 +90,7 @@ layout("/layouts/platform.html"){
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="openActivityCode(row.id)">活动二维码</el-dropdown-item>
<el-dropdown-item @click.native="makeCode(row)">签到二维码</el-dropdown-item>
<el-dropdown-item @click.native="openNotifyDialog(row)">通知报名人员</el-dropdown-item>
<el-dropdown-item @click.native="onView(row)">查看</el-dropdown-item>
<el-dropdown-item @click.native="openEdit(row)">编辑</el-dropdown-item>
<el-dropdown-item @click.native="onDelete(row)">删除</el-dropdown-item>
@@ -123,6 +124,23 @@ layout("/layouts/platform.html"){
<el-button @click="codeDialogVisible = false" type="primary">关 闭</el-button>
</span>
</el-dialog>
<el-dialog
title="通知报名人员"
:visible.sync="notifyDialogVisible"
:close-on-click-modal="false"
width="50%">
<el-input
type="textarea"
:rows="6"
placeholder="请输入通知内容"
v-model="notifyContent">
</el-input>
<span slot="footer" class="dialog-footer">
<el-button @click="notifyDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="sendNotify">发 送</el-button>
</span>
</el-dialog>
</guava>
</div>
@@ -154,6 +172,9 @@ layout("/layouts/platform.html"){
],
codeDialogVisible: false,
activityUrl: '',
notifyDialogVisible: false,
notifyContent: '',
notifyActivityId: '',
}
},
methods: {
@@ -182,6 +203,27 @@ layout("/layouts/platform.html"){
makeCode(row) {
this.$refs.codeRef.initData(row)
},
openNotifyDialog(row) {
this.notifyActivityId = row.id
this.notifyContent = ''
this.notifyDialogVisible = true
},
async sendNotify() {
if (!this.notifyContent.trim()) {
this.$message.warning('请输入通知内容')
return
}
const resp = await this.$axios.post(loc() + "/sendNotify", {
activityId: this.notifyActivityId,
content: this.notifyContent
})
if (resp.code === 0) {
this.$message.success(resp.msg)
this.notifyDialogVisible = false
} else {
this.$message.warning(resp.msg)
}
},
async activityStatusChange(notice, val, id) {
const resp = await this.$axios.post(loc() + "/activityStatusChange", { notice: notice, isDisabled: val, id })
if (resp.code === 0) {