commit
This commit is contained in:
@@ -1,8 +1,6 @@
|
|||||||
package com.budwk.app.sys.services.impl;
|
package com.budwk.app.sys.services.impl;
|
||||||
|
|
||||||
import cn.hutool.core.thread.ThreadUtil;
|
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.constant.RedisConstant;
|
||||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||||
import com.budwk.app.base.sms.SmsService;
|
import com.budwk.app.base.sms.SmsService;
|
||||||
@@ -102,9 +100,8 @@ public class SysMsgServiceImpl extends BaseServiceImpl<Sys_msg> implements SysMs
|
|||||||
});
|
});
|
||||||
|
|
||||||
//发送学校平台消息
|
//发送学校平台消息
|
||||||
// for (String loginName : loginNames) {
|
smsService.massSendMessage(loginNames, sysMsg.getNote());
|
||||||
// smsService.send(loginName, sysMsg.getTitle(), sysMsg.getNote());
|
|
||||||
// }
|
|
||||||
ThreadUtil.execute(() -> {
|
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());
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
package com.budwk.app.task.job;
|
package com.budwk.app.task.job;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.budwk.app.base.param.ConditionGroup;
|
import com.budwk.app.base.param.ConditionGroup;
|
||||||
import com.budwk.app.sys.enums.SysDataUpdateMode;
|
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.param.SysDataUserUpdateParam;
|
||||||
import com.budwk.app.sys.services.SysDataUserPullService;
|
import com.budwk.app.sys.services.SysDataUserPullService;
|
||||||
import com.budwk.app.sys.services.SysDataUserUpdateService;
|
import com.budwk.app.sys.services.SysDataUserUpdateService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nutz.dao.Cnd;
|
|
||||||
import org.nutz.dao.Dao;
|
import org.nutz.dao.Dao;
|
||||||
import org.nutz.ioc.loader.annotation.Inject;
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
@@ -57,6 +54,6 @@ public class SysUserAllRenewJob implements Job {
|
|||||||
param.setUpdateMode(SysDataUpdateMode.ALL.name());
|
param.setUpdateMode(SysDataUpdateMode.ALL.name());
|
||||||
param.setConditionGroup(conditionGroup);
|
param.setConditionGroup(conditionGroup);
|
||||||
|
|
||||||
// sysDataUserUpdateService.update(param);
|
sysDataUserUpdateService.update(param);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+30
@@ -10,6 +10,9 @@ import com.budwk.app.flow.entity.ProcessInstance;
|
|||||||
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||||
import com.budwk.app.sys.models.Sys_home_activity;
|
import com.budwk.app.sys.models.Sys_home_activity;
|
||||||
import com.budwk.app.sys.models.Sys_unit;
|
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.models.*;
|
||||||
import com.budwk.app.zhgh.activity.smartbenefits.service.SmartBenefitsActivityService;
|
import com.budwk.app.zhgh.activity.smartbenefits.service.SmartBenefitsActivityService;
|
||||||
import com.budwk.app.zhgh.club.model.SysClub;
|
import com.budwk.app.zhgh.club.model.SysClub;
|
||||||
@@ -50,6 +53,8 @@ public class SmartBenefitsManageController {
|
|||||||
@Inject
|
@Inject
|
||||||
private SmartBenefitsActivityService smartBenefitsActivityManageService;
|
private SmartBenefitsActivityService smartBenefitsActivityManageService;
|
||||||
@Inject
|
@Inject
|
||||||
|
private SysMsgService sysMsgService;
|
||||||
|
@Inject
|
||||||
private Dao dao;
|
private Dao dao;
|
||||||
|
|
||||||
@At("")
|
@At("")
|
||||||
@@ -235,4 +240,29 @@ public class SmartBenefitsManageController {
|
|||||||
}
|
}
|
||||||
return Result.success(result);
|
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("通知发送成功");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+30
@@ -10,8 +10,11 @@ import com.budwk.app.flow.entity.ProcessInstance;
|
|||||||
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||||
import com.budwk.app.sys.models.Sys_home_activity;
|
import com.budwk.app.sys.models.Sys_home_activity;
|
||||||
import com.budwk.app.sys.models.Sys_unit;
|
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.models.*;
|
||||||
import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService;
|
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 com.budwk.app.zhgh.club.model.SysClub;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -50,6 +53,8 @@ public class TrainSignUpManageController {
|
|||||||
@Inject
|
@Inject
|
||||||
private TrainSignUpActivityService trainSignUpActivityManageService;
|
private TrainSignUpActivityService trainSignUpActivityManageService;
|
||||||
@Inject
|
@Inject
|
||||||
|
private SysMsgService sysMsgService;
|
||||||
|
@Inject
|
||||||
private Dao dao;
|
private Dao dao;
|
||||||
|
|
||||||
@At("")
|
@At("")
|
||||||
@@ -235,4 +240,29 @@ public class TrainSignUpManageController {
|
|||||||
}
|
}
|
||||||
return Result.success(result);
|
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-menu slot="dropdown">
|
||||||
<el-dropdown-item @click.native="openActivityCode(row.id)">活动二维码</el-dropdown-item>
|
<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="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="onView(row)">查看</el-dropdown-item>
|
||||||
<el-dropdown-item @click.native="openEdit(row)">编辑</el-dropdown-item>
|
<el-dropdown-item @click.native="openEdit(row)">编辑</el-dropdown-item>
|
||||||
<el-dropdown-item @click.native="onDelete(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>
|
<el-button @click="codeDialogVisible = false" type="primary">关 闭</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</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>
|
</guava>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -154,6 +172,9 @@ layout("/layouts/platform.html"){
|
|||||||
],
|
],
|
||||||
codeDialogVisible: false,
|
codeDialogVisible: false,
|
||||||
activityUrl: '',
|
activityUrl: '',
|
||||||
|
notifyDialogVisible: false,
|
||||||
|
notifyContent: '',
|
||||||
|
notifyActivityId: '',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -182,6 +203,27 @@ layout("/layouts/platform.html"){
|
|||||||
makeCode(row) {
|
makeCode(row) {
|
||||||
this.$refs.codeRef.initData(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) {
|
async activityStatusChange(notice, val, id) {
|
||||||
const resp = await this.$axios.post(loc() + "/activityStatusChange", { notice: notice, isDisabled: val, id })
|
const resp = await this.$axios.post(loc() + "/activityStatusChange", { notice: notice, isDisabled: val, id })
|
||||||
if (resp.code === 0) {
|
if (resp.code === 0) {
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ layout("/layouts/platform.html"){
|
|||||||
<el-dropdown-menu slot="dropdown">
|
<el-dropdown-menu slot="dropdown">
|
||||||
<el-dropdown-item @click.native="openActivityCode(row.id)">活动二维码</el-dropdown-item>
|
<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="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="onView(row)">查看</el-dropdown-item>
|
||||||
<el-dropdown-item @click.native="openEdit(row)">编辑</el-dropdown-item>
|
<el-dropdown-item @click.native="openEdit(row)">编辑</el-dropdown-item>
|
||||||
<el-dropdown-item @click.native="onDelete(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>
|
<el-button @click="codeDialogVisible = false" type="primary">关 闭</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</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>
|
</guava>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -154,6 +172,9 @@ layout("/layouts/platform.html"){
|
|||||||
],
|
],
|
||||||
codeDialogVisible: false,
|
codeDialogVisible: false,
|
||||||
activityUrl: '',
|
activityUrl: '',
|
||||||
|
notifyDialogVisible: false,
|
||||||
|
notifyContent: '',
|
||||||
|
notifyActivityId: '',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -182,6 +203,27 @@ layout("/layouts/platform.html"){
|
|||||||
makeCode(row) {
|
makeCode(row) {
|
||||||
this.$refs.codeRef.initData(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) {
|
async activityStatusChange(notice, val, id) {
|
||||||
const resp = await this.$axios.post(loc() + "/activityStatusChange", { notice: notice, isDisabled: val, id })
|
const resp = await this.$axios.post(loc() + "/activityStatusChange", { notice: notice, isDisabled: val, id })
|
||||||
if (resp.code === 0) {
|
if (resp.code === 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user