民意直通车

This commit is contained in:
=
2026-03-09 16:15:18 +08:00
parent 084281d670
commit cf8db3fa16
7 changed files with 2555 additions and 0 deletions
@@ -0,0 +1,112 @@
package io.v.nutz.zhgh.mobile.suggestionBox.controller;
import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.page.Pagination;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.BaseService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.mobile.suggestionBox.models.SuggestionBox;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
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 org.nutz.mvc.annotation.Param;
import java.time.LocalDateTime;
import java.util.Map;
@IocBean
@At("/platform/suggestionBox/admin")
@Ok("json:full")
public class SuggestionBoxAdminController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
@At("/h5")
@Ok("beetl:/mobile/suggestionBox/admin.html")
public void h5() {
}
/**
* 分页数据
*
* @param pageForm 分页
* @param status 状态 是否回复
* @param timeRange 时间范围 今日 本周 本月
* @return
*/
@At("/pageData")
public Result pageData(PageForm pageForm, Integer status, String timeRange, String keyword) {
Sql sql = Sqls.create("select * from suggestion_box $condition");
Cnd cnd = Cnd.NEW();
cnd.andEX("isReply", "=", status);
if (StrUtil.isNotBlank(timeRange)) {
switch (timeRange) {
case "today":
cnd.and(new Static("DATE(submitTime) = CURDATE()"));
break;
case "week":
cnd.and(new Static("WEEKOFYEAR(submitTime) = WEEKOFYEAR(CURDATE())"));
break;
case "month":
cnd.and(new Static("MONTH(submitTime) = MONTH(CURDATE())"));
break;
default:
break;
}
}
if (StrUtil.isNotBlank(keyword)) {
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("submitterName", keyword);
seg.orLike("content", keyword);
seg.orLike("title", keyword);
cnd.and(seg);
}
cnd.desc("submitTime");
sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
/**
* 统计
*/
@At("/getStats")
public Result stats() {
// 查询总意见数
int total = dao.count(SuggestionBox.class);
// 待回复数
int pending = dao.count(SuggestionBox.class, Cnd.where("isReply", "=", 0));
// 已回复数
int replied = dao.count(SuggestionBox.class, Cnd.where("isReply", "=", 1));
// 今日新增
int today = dao.count(SuggestionBox.class, Cnd.NEW().and(new Static("DATE(submitTime) = CURDATE()")));
return Result.success(Map.of("total", total, "pending", pending, "replied", replied, "today", today));
}
/**
* 答复
*/
@At
public Result reply(@Param("reply") SuggestionBox suggestionBox) {
suggestionBox.setIsReply(true);
suggestionBox.setReplyTime(LocalDateTime.now());
suggestionBox.setReplyUserId(ShiroUtil.getUserId());
suggestionBox.setReplyUserName((String) ShiroUtil.getPrincipalProperty("username"));
dao.update(suggestionBox,"isReply|replyContent|replyTime|replyUserId|replyUserName");
return Result.success();
}
}
@@ -0,0 +1,76 @@
package io.v.nutz.zhgh.mobile.suggestionBox.controller;
import cn.wizzer.framework.base.Result;
import io.v.nutz.base.page.Pagination;
import io.v.nutz.base.query.PageForm;
import io.v.nutz.base.service.BaseService;
import io.v.nutz.web.commons.utils.ShiroUtil;
import io.v.nutz.zhgh.mobile.suggestionBox.models.SuggestionBox;
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.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.time.LocalDateTime;
@IocBean
@At("/platform/suggestionBox")
@Ok("json:full")
public class SuggestionBoxController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
@At("/h5")
@Ok("beetl:/mobile/suggestionBox/index.html")
public void h5Index() {
}
@At("/h5/write")
@Ok("beetl:/mobile/suggestionBox/write.html")
public void h5Write() {
}
@At("/h5/mine")
@Ok("beetl:/mobile/suggestionBox/mine.html")
public void h5Mine() {
}
@At
public Result submit(@Param("suggestion") SuggestionBox suggestionBox) {
suggestionBox.setSubmitTime(LocalDateTime.now());
dao.insert(suggestionBox);
return Result.success();
}
@At
public Result delete(@Param("id") String id) {
dao.delete(SuggestionBox.class, id);
return Result.success();
}
/**
* 我的意见列表
*/
@At
public Result pageData(PageForm pageForm) {
Sql sql = Sqls.create("select * from suggestion_box $condition");
Cnd cnd = Cnd.NEW();
cnd.and("submitterId","=", ShiroUtil.getUserId());
cnd.desc("submitTime");
sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
}
@@ -0,0 +1,116 @@
package io.v.nutz.zhgh.mobile.suggestionBox.models;
import cn.wizzer.framework.base.model.BaseModel;
import io.v.nutz.sys.models.Sys_file;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.time.LocalDateTime;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Table("suggestion_box")
@Comment("意见箱")
@Data
public class SuggestionBox extends BaseModel {
@Name
@Comment("ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
@PrevInsert(uu32 = true)
private String id;
@Column
@Comment("提交人ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String submitterId;
@Column
@Comment("提交人姓名")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String submitterName;
@Column
@Comment("提交人工号")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String submitterLoginName;
@Column
@Comment("提交人单位ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String submitterUnitId;
@Column
@Comment("提交人单位名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String submitterUnitName;
@Column
@Comment("提交人分工会ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String submitterUnionId;
@Column
@Comment("提交人分工会名称")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String submitterUnionName;
@Column
@Comment("提交时间")
@ColDefine(type = ColType.DATETIME)
private LocalDateTime submitTime;
@Column
@Comment("意见名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String title;
@Column
@Comment("意见内容")
@ColDefine(type = ColType.TEXT)
private String content;
@Column
@Comment("附件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<Sys_file> attachments;
@Column
@Comment("联系方式")
@ColDefine(type = ColType.VARCHAR, width = 100)
private String concat;
@Column
@Comment("回复状态")
@ColDefine(type = ColType.BOOLEAN)
@Default("0")
private Boolean isReply;
@Column
@Comment("回复内容")
@ColDefine(type = ColType.TEXT)
private String replyContent;
@Column
@Comment("回复时间")
@ColDefine(type = ColType.DATETIME)
private LocalDateTime replyTime;
@Column
@Comment("回复人ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String replyUserId;
@Column
@Comment("回复人姓名")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String replyUserName;
@Column
@Comment("回复附件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<Sys_file> replyAttachments;
}