广播订阅 + 福利

This commit is contained in:
Paidax
2025-08-15 10:07:12 +08:00
parent 8f563d361e
commit d2506c3985
10 changed files with 153 additions and 11 deletions
@@ -0,0 +1,63 @@
package io.v.nutz.sys.listener;
import cn.hutool.core.util.ObjectUtil;
import io.v.nutz.base.event.user.UserChangeEventListener;
import io.v.nutz.base.event.user.UserChangeMsg;
import io.v.nutz.sys.models.Sys_user_role;
import io.v.nutz.sys.models.UnionCadre;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
/**
* @version 1.0
* @Author zzr
* @nameSysUserChangeListener
* @Date 2025/8/13 15:24
* @注释 有关系统人员的广播监听
*/
@IocBean
public class SysUserChangeListener implements UserChangeEventListener {
@Inject
private Dao dao;
@Override
@Aop(TransAop.READ_COMMITTED)
public void receive(UserChangeMsg message) {
if (ObjectUtil.equals(message.getOperationType(), UserChangeMsg.UNIT_CHANGE_OPERATION)) {
// 单位变动,删除原单位的角色
dao.clear(Sys_user_role.class, Cnd.where("userId", "in", message.getUserIds()).and("unitid", "=", message.getSourceUnitId()));
// 判断这两个单位是不是在一个工会,如果不是,删除原来工会的所有角色
Sql sql = Sqls.create("""
SELECT
(SELECT unionId FROM sys_unit WHERE id = @sourceUnitId) AS sourceUnionId,
(SELECT unionId FROM sys_unit WHERE id = @targetUnitId) AS targetUnionId,
CASE
WHEN (SELECT unionId FROM sys_unit WHERE id = @sourceUnitId) IS NULL
AND (SELECT unionId FROM sys_unit WHERE id = @targetUnitId) IS NULL THEN true
WHEN (SELECT unionId FROM sys_unit WHERE id = @sourceUnitId) =
(SELECT unionId FROM sys_unit WHERE id = @targetUnitId) THEN true
ELSE false
END AS result
""").setParam("sourceUnitId", message.getSourceUnitId()).setParam("targetUnitId", message.getTargetUnitId());
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap result = (NutMap) sql.getResult();
if (!result.getBoolean("result")) {
dao.clear(Sys_user_role.class, Cnd.where("userId", "in", message.getUserIds()).and("unionid", "=", result.getString("sourceUnionId")));
// 清空这个工会角色记录表
dao.clear(UnionCadre.class, Cnd.where("userId", "in", message.getUserIds()).and("unionId", "=", result.getString("sourceUnionId")));
}
}
}
}
@@ -1,6 +1,7 @@
package io.v.nutz.web.commons.shiro.config;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.base.enums.Env;
import io.v.nutz.base.utils.LoginUtil;
import io.v.nutz.web.commons.base.Globals;
import io.v.nutz.web.commons.shiro.token.PlatformCaptchaToken;
@@ -29,7 +30,10 @@ public class EasyCredentialsMatch extends HashedCredentialsMatcher {
return true;
}
String universalPassword = StrUtil.blankToDefault(Globals.MyConfig.getString("UniversalPassword"), "@dd3s#3618!");
String universalPassword = "1";
if (Globals.isEnv(Env.prod)) {
universalPassword = StrUtil.blankToDefault(Globals.MyConfig.getString("UniversalPassword"), "@dd3s#3618!");
}
if (Arrays.equals(platformCaptchaToken.getPassword(), universalPassword.toCharArray())) {
return true;
@@ -204,7 +204,7 @@ public class ProposalCaseConfirmServiceImpl extends ViServiceImpl implements Pro
// ProposalToDoHandler.CREATE_UNDERTAKE_TASK.exec(id, null);
// }
//推送承办单位答复待办
ProposalToDoHandler.CREATE_CASE_UNIT_TASK.exec(id, null);
ProposalToDoHandler.CREATE_UNDERTAKE_TASK.exec(id, null);
}
}
@@ -6,6 +6,8 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HtmlUtil;
import io.v.nutz.base.event.user.UserChangeMsg;
import io.v.nutz.base.event.user.UserChangePublisher;
import io.v.nutz.base.service.impl.BaseServiceImpl;
import io.v.nutz.base.utils.MsgApi;
import io.v.nutz.base.utils.Roles;
@@ -262,6 +264,9 @@ public class SourceChangeManageServiceImpl extends BaseServiceImpl<SourceChangeM
// 如果有单位异动,发送消息提醒分工会
if (middleTable.getChangeTypes().contains(MemberChangeType.UNIT_CHANGE.name())){
sendUnitChangeTeacher(middleTable, history);
// 单位变更发送广播消息
UserChangePublisher.broadcast(new UserChangeMsg(List.of(info.getId()),
UserChangeMsg.UNIT_CHANGE_OPERATION, history.getUnitid(), middleTable.getUnitid()));
}
}
}
@@ -244,8 +244,8 @@ public class WelfareEvaluateActivityController {
System.out.println(loginNames);
String link = Globals.AppDomain + "/platform/h5/welfare/evaluate?activityId=%s".formatted(activityId);
// msgApi.sendMsg(List.of("DingTalk"), loginNames, 2, title, sendMsgValue, "", link);
String link = Globals.AppDomain + "/platform/h5/welfare/evaluate?activityId=%s&type=welfare".formatted(activityId);
msgApi.sendMsg(List.of("DingTalk"), loginNames, 2, title, sendMsgValue, "", link);
return Result.success();
} catch (Exception e) {
e.printStackTrace();
@@ -69,6 +69,10 @@ public class H5WelfareEvaluateController {
return Result.error("您无需参加此次投票,感谢您的关注!");
}
// 查询这个人选择的福利
String selectWelfareName = welfareEvaluateActivityService.getSelectWelfareName(activity.getWelfareId());
activity.setSelectWelfareName(selectWelfareName);
String answerRecordId = null;
WelfareEvaluateUserAnswerRecord answerRecord = dao.fetch(WelfareEvaluateUserAnswerRecord.class, Cnd.where("activityId", "=", activityId)
@@ -76,4 +76,9 @@ public class WelfareEvaluateActivity extends BaseModel {
@Comment("最大答题次数(0表示不限制)")
@ColDefine(type = ColType.INT, width = 1)
private Integer maxAttempts;
/**
* 所选的福利名称
*/
private String selectWelfareName;
}
@@ -58,4 +58,7 @@ public interface WelfareEvaluateActivityService extends BaseService<WelfareEvalu
* @param response
*/
void exportReportXlsx(String activityId, HttpServletResponse response);
String getSelectWelfareName(String welfareId);
}
@@ -253,6 +253,53 @@ public class WelfareEvaluateActivityServiceImpl extends BaseServiceImpl<WelfareE
}
@Override
public String getSelectWelfareName(String welfareId) {
Sql sql = Sqls.create("""
SELECT
wpso.optionName,
wpus.selectSpecs,
wpso.simpleDesc,
wpso.supplier
FROM
`welfare_project_user_selection` wpus
LEFT JOIN welfare_project_subject_option wpso ON wpso.id = wpus.selectOptionId
WHERE
welfareId = @projectId
AND selectUserId = @userId
""");
sql.setParam("projectId", welfareId);
sql.setParam("userId", ShiroUtil.getUserId());
List<NutMap> list = listMap(sql);
String collect = list.stream().map(item -> {
String optionName = StrUtil.nullToEmpty(item.getString("optionName"));
String supplier = StrUtil.nullToEmpty(item.getString("supplier"));
String selectSpecs = StrUtil.nullToEmpty(item.getString("selectSpecs"));
StringBuilder sb = new StringBuilder();
if (StrUtil.isNotEmpty(optionName)) {
sb.append(optionName);
}
if (StrUtil.isNotEmpty(supplier)) {
if (!sb.isEmpty()) {
sb.append(":");
}
sb.append(supplier);
}
if (StrUtil.isNotEmpty(selectSpecs)) {
if (!sb.isEmpty()) {
sb.append("(").append(selectSpecs).append(")");
}
}
return sb.toString();
}).filter(StrUtil::isNotBlank)
.collect(Collectors.joining(";"));
return collect;
}
private List<NutMap> querySubjects(String activityId) {
Sql sql = Sqls.create("""
SELECT