This commit is contained in:
周源 2021-07-20 15:33:39 +08:00
parent 1f86629801
commit a7295537b6
151 changed files with 846 additions and 78 deletions

View File

@ -165,6 +165,7 @@ public class ApiActivityController extends ApiBaseController {
bean.setCreatedId(getApiUserId());
bean.setCreatedType(getApiUser().getAccountType());
bean.setAttachment(attachment);
bean.setCategory(1);
boolean flag;

View File

@ -22,7 +22,6 @@ import com.ydool.boot.common.cache.DictUtils;
import com.ydool.boot.common.result.Ret;
import com.ydool.boot.common.utils.WebUtils;
import com.ydool.boot.core.validator.NumberLetter;
import com.ydool.boot.core.validator.Password;
import com.ydool.boot.modules.rddb.entity.Db;
import com.ydool.boot.modules.rddb.entity.Office;
import com.ydool.boot.modules.rddb.service.DbService;
@ -33,7 +32,6 @@ import com.ydool.boot.modules.sys.entity.UserRole;
import com.ydool.boot.modules.sys.service.RoleService;
import com.ydool.boot.modules.sys.service.UserRoleService;
import com.ydool.boot.modules.sys.service.UserService;
import io.jsonwebtoken.Claims;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@ -46,7 +44,6 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
@ -171,6 +168,7 @@ public class ApiAuthController extends ApiBaseController {
render(Ret.fail(ret.get("msg").toString()));
}
User user = userService.getOne((Wrapper) (new QueryWrapper()).eq("login_name", login));
login(user);
Kv authInfo = TokenUtil.createAuthInfo(user);
//身份 admin县级人大工作人员 street乡镇负责人 contact联络站负责人 rddb各级人大代表 voter选民用户
authInfo.set("type", user.getAccountType());

View File

@ -0,0 +1,206 @@
package com.ydool.boot.api.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ydool.boot.api.util.DateUtils;
import com.ydool.boot.api.vo.CountRankVo;
import com.ydool.boot.api.vo.ActivitySignVo;
import com.ydool.boot.common.cache.ConfigUtils;
import com.ydool.boot.common.result.Ret;
import com.ydool.boot.modules.rddb.entity.Office;
import com.ydool.boot.modules.rddb.service.OfficeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/api/statistics/contact")
@Api(value = "大屏统计-联络站", tags = "大屏统计-联络站")
@AllArgsConstructor
public class ApiStatisticsContactController extends ApiBaseController {
JdbcTemplate jdbcTemplate;
OfficeService officeService;
@ApiOperation("联络站总数量")
@GetMapping("count")
public void count() {
int count = officeService.count(new LambdaQueryWrapper<Office>().eq(Office::getDuty, "contact"));
render(Ret.ok().data(count));
}
@ApiOperation("联络站身份的人举办的活动次数")
@GetMapping("activity/count")
public void activityCount() {
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_office a right join t_activity b on a.user_id=b.created_id where a.duty='contact'", Integer.class);
render(Ret.ok().data(activityCount));
}
@ApiOperation("联络站活动举办次数排名")
@GetMapping("activity/count/rank")
public void activityCountRank() {
List<CountRankVo> list = jdbcTemplate.query("SELECT c.name,(SELECT count(a.id) FROM t_activity a LEFT JOIN t_office b ON a.created_id=b.user_id WHERE a.created_id=c.user_id) AS count FROM t_office c WHERE c.duty='contact' order by count desc limit 0,6 ", new BeanPropertyRowMapper(CountRankVo.class));
List<String> nameList = list.stream().map(CountRankVo::getName).collect(Collectors.toList());
List<String> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
render(Ret.ok().data(Dict.create().set("nameList", nameList).set("countList", countList)));
}
@ApiOperation("渠道统计")
@GetMapping("activity/channel/count")
public void activityChannelCount() {
String countStr = ConfigUtils.getStr("screen_activity_channel_rate");
String channelStr = ConfigUtils.getStr("screen_activity_channel");
if (StrUtil.isNotBlank(countStr) && StrUtil.isNotBlank(channelStr)) {
String[] countArr = countStr.split(",");
String[] channelArr = channelStr.split(",");
Dict dict = Dict.create().set("countArr", countArr).set("channelArr", channelArr);
render(Ret.ok().data(dict));
}
}
@ApiOperation("指定街道的今日实时签到记录 不传为全部")
@GetMapping("sign/record")
@ApiImplicitParam(name = "streetId", value = "街道id")
public void signRecord(String streetId) {
//活动签到
if (StrUtil.isBlank(streetId)) {
List<ActivitySignVo> list = jdbcTemplate.query("SELECT a.sign_time AS signTime,b.activity_address AS address,c.user_name AS NAME FROM t_activity_user a LEFT JOIN t_activity b ON a.activity_id=b.id LEFT JOIN t_sys_user c ON a.user_id=c.id WHERE to_days(a.sign_time)=to_days(now()) ORDER BY a.sign_time DESC LIMIT 0,3", new BeanPropertyRowMapper(ActivitySignVo.class));
render(Ret.ok().data(list));
} else {
List<ActivitySignVo> list = jdbcTemplate.query("SELECT a.sign_time AS signTime,b.activity_address AS address,c.user_name AS NAME FROM t_activity_user a LEFT JOIN t_activity b ON a.activity_id=b.id LEFT JOIN t_sys_user c ON a.user_id=c.id WHERE to_days(a.sign_time)=to_days(now()) AND c.street_id=? ORDER BY a.sign_time DESC LIMIT 0,3", new BeanPropertyRowMapper(ActivitySignVo.class), streetId);
render(Ret.ok().data(list));
}
}
@ApiOperation("指定街道的统计 不传为全部")
@GetMapping("count/detail")
@ApiImplicitParam(name = "streetId", value = "街道id")
public void countDetail(String streetId) {
if (StrUtil.isBlank(streetId)) {
//根据街道找联络站账号
List<Office> officeList = officeService.list(new LambdaQueryWrapper<Office>().eq(Office::getDuty, "contact"));
if (CollectionUtil.isNotEmpty(officeList)) {
//省级人大代表数
//-省1市2县3乡镇4
Integer provinceDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "1");
//市级人大代表数
Integer cityDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "2");
//县级人大代表数
Integer countryDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "3");
//乡镇级人大代表数
Integer townDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "4");
//受理问题数
Integer questionCount = jdbcTemplate.queryForObject("select count(id) from t_voter_suggest_db ", Integer.class);
//督事活动数
Integer superviseThingCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_supervise_thing a left join t_office b on a.created_id=b.created_id where b.duty='contact' ", Integer.class);
//联络站数量
Dict dict = Dict.create().set("contactNum", officeList.size())
.set("provinceDbCount", provinceDbCount)
.set("cityDbCount", cityDbCount)
.set("countryDbCount", countryDbCount)
.set("townDbCount", townDbCount)
.set("questionCount", questionCount)
.set("superviseThingCount", superviseThingCount);
render(Ret.ok().data(dict));
}
} else {
//根据街道找联络站账号
List<Office> officeList = officeService.list(new LambdaQueryWrapper<Office>().eq(Office::getDuty, "contact")
.eq(Office::getStreet, streetId));
if (CollectionUtil.isNotEmpty(officeList)) {
//省级人大代表数
//-省1市2县3乡镇4
Integer provinceDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? and b.street=?", Integer.class, "1", streetId);
//市级人大代表数
Integer cityDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? and b.street=?", Integer.class, "2", streetId);
//县级人大代表数
Integer countryDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? and b.street=?", Integer.class, "3", streetId);
//乡镇级人大代表数
Integer townDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? and b.street=?", Integer.class, "4", streetId);
//受理问题数
Integer questionCount = jdbcTemplate.queryForObject("select count(id) from t_voter_suggest_db where db_region=?", Integer.class, streetId);
//督事活动数
Integer superviseThingCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_supervise_thing a left join t_office b on a.created_id=b.created_id where b.duty='contact' and b.street=?", Integer.class, streetId);
//联络站数量
Dict dict = Dict.create().set("contactNum", officeList.size())
.set("provinceDbCount", provinceDbCount)
.set("cityDbCount", cityDbCount)
.set("countryDbCount", countryDbCount)
.set("townDbCount", townDbCount)
.set("questionCount", questionCount)
.set("superviseThingCount", superviseThingCount);
render(Ret.ok().data(dict));
}
}
}
@ApiOperation("活动举办次数月份统计 不传为全部")
@GetMapping("activity/count/month")
@ApiImplicitParam(name = "streetId", value = "街道id")
public void activityCountMonth(String streetId) {
List countList = new ArrayList();
//默认当前年
Date date = DateUtil.date();
String year = Convert.toStr(DateUtil.year(date));
List<String> monthList = DateUtils.getMonthList();
Iterator<String> iterator = monthList.iterator();
if (StrUtil.isBlank(streetId)) {
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_office a right join t_activity b on a.user_id=b.created_id where a.duty='contact' and DATE_FORMAT( b.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
}
} else {
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_office a right join t_activity b on a.user_id=b.created_id where a.duty='contact' and DATE_FORMAT( b.created_at, '%Y-%m' )=? and a.street=?", Integer.class, yearMonth, streetId);
countList.add(activityCount);
}
}
Dict dict = Dict.create().set("monthList", DateUtils.getMonthStrList()).set("count", countList);
render(Ret.ok().data(dict));
}
@ApiOperation("联络站月使用情况分析")
@GetMapping("activity/month/analyze")
public void activityMonthAnalyze() {
String sameRateStr = ConfigUtils.getStr("screen_activity_same_rate");
String cycleRateStr = ConfigUtils.getStr("screen_activity_cycle_rate");
if (StrUtil.isNotBlank(sameRateStr) && StrUtil.isNotBlank(cycleRateStr)) {
String[] sameRateArr = sameRateStr.split(",");
String[] cycleRateArr = cycleRateStr.split(",");
Dict dict = Dict.create().set("monthArr", DateUtils.getMonthStrList()).set("sameRateArr", sameRateArr).set("cycleRateArr", cycleRateArr);
render(Ret.ok().data(dict));
}
}
@ApiOperation("联络站活动参与人次月度统计")
@GetMapping("activity/people/month/analyze")
public void activityPeopleMonthAnalyze() {
String countStr = ConfigUtils.getStr("screen_activity_people_count");
if (StrUtil.isNotBlank(countStr)) {
String[] countArr = countStr.split(",");
Dict dict = Dict.create().set("monthArr", DateUtils.getMonthStrList()).set("countArr", countArr);
render(Ret.ok().data(dict));
}
}
}

View File

@ -0,0 +1,146 @@
package com.ydool.boot.api.controller;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ydool.boot.api.util.DateUtils;
import com.ydool.boot.api.vo.CountRankVo;
import com.ydool.boot.api.vo.DbVo;
import com.ydool.boot.common.cache.DictUtils;
import com.ydool.boot.common.result.Ret;
import com.ydool.boot.modules.rddb.entity.Db;
import com.ydool.boot.modules.rddb.entity.Perform;
import com.ydool.boot.modules.rddb.entity.SuperviseThing;
import com.ydool.boot.modules.rddb.service.DbService;
import com.ydool.boot.modules.rddb.service.PerformService;
import com.ydool.boot.modules.rddb.service.SuperviseThingService;
import com.ydool.boot.modules.rddb.vo.DbVO;
import com.ydool.boot.modules.rddb.wrapper.DbWrapper;
import com.ydool.boot.modules.sys.entity.User;
import com.ydool.boot.modules.sys.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/api/statistics/db")
@Api(value = "大屏统计-代表", tags = "大屏统计-代表")
@AllArgsConstructor
public class ApiStatisticsDbController extends ApiBaseController {
JdbcTemplate jdbcTemplate;
DbService dbService;
SuperviseThingService superviseThingService;
UserService userService;
PerformService performService;
@ApiOperation("人大代表数量统计")
@GetMapping("count")
public void count() {
int provinceDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "1"));
int cityDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "2"));
int countryDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "3"));
int townDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "4"));
Dict dict = Dict.create().set("provinceDbCount", provinceDbCount).set("cityDbCount", cityDbCount).set("countryDbCount", countryDbCount).set("townDbCount", townDbCount);
render(Ret.ok().data(dict));
}
@ApiOperation("代表履职活动排行")
@GetMapping("perform/count")
public void performCount() {
List<CountRankVo> list = jdbcTemplate.query("SELECT c.name,(SELECT count(a.id) FROM t_perform a LEFT JOIN t_db b ON a.created_id=b.user_id WHERE a.created_id=c.user_id) AS count FROM t_db c order by count desc limit 0,10 ", new BeanPropertyRowMapper(CountRankVo.class));
List<String> nameList = list.stream().map(CountRankVo::getName).collect(Collectors.toList());
List<String> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
render(Ret.ok().data(Dict.create().set("nameList", nameList).set("countList", countList)));
}
@ApiOperation("代表履职活动情况分析")
@GetMapping("perform/analyze")
public void performAnalyze() {
List countList = new ArrayList();
//默认当前年
Date date = DateUtil.date();
String year = Convert.toStr(DateUtil.year(date));
List<String> monthList = DateUtils.getMonthList();
Iterator<String> iterator = monthList.iterator();
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_perform b , t_db a where a.user_id=b.created_id and DATE_FORMAT( b.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
}
render(Ret.ok().data(Dict.create().set("countList", countList).set("monthList", DateUtils.getMonthStrList())));
}
@ApiOperation("代表督事阶段占比")
@GetMapping("supervise_thing/status_count")
public void SuperviseThingStatusCount() {
int allCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>());
int yiCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>().eq(SuperviseThing::getStatus, SuperviseThing.STATUS_YI));
int duCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>().eq(SuperviseThing::getStatus, SuperviseThing.STATUS_DU));
int pingCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>().eq(SuperviseThing::getStatus, SuperviseThing.STATUS_PING));
// 督事一创建就进入了议状态所以永远都是0
Double wenPercent = 0D;
Double yiPercent = allCount == 0 ? 0 : Convert.toDouble(yiCount) / Convert.toDouble(allCount) * 100;
Double duPercent = allCount == 0 ? 0 : Convert.toDouble(duCount) / Convert.toDouble(allCount) * 100;
Double pingPercent = allCount == 0 ? 0 : Convert.toDouble(pingCount) / Convert.toDouble(allCount) * 100;
DecimalFormat df = new DecimalFormat("0.00");
Dict dict = Dict.create().set("wenPercent", wenPercent)
.set("yiPercent", df.format(yiPercent))
.set("duPercent", df.format(duPercent))
.set("pingPercent", df.format(pingPercent));
render(Ret.ok().data(dict));
}
@ApiOperation("代表督事区域分布")
@GetMapping("supervise_thing/region/count")
public void SuperviseThingRegionCount() {
List<CountRankVo> list = jdbcTemplate.query("select b.name,count(a.id)as count from t_supervise_thing a left join t_sys_street b on a.street=b.id GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class));
List<String> nameList = list.stream().map(CountRankVo::getName).collect(Collectors.toList());
List<String> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
render(Ret.ok().data(Dict.create().set("nameList", nameList).set("countList", countList)));
}
@ApiOperation("代表列表")
@GetMapping("list")
public void list() {
List<DbVo> list = jdbcTemplate.query("SELECT a.*,(" +
"SELECT count(b.id) FROM t_perform b WHERE b.created_id=a.user_id) AS performCount,(" +
"SELECT count(c.id) FROM t_voter_suggest_db c WHERE c.db=a.id) AS voterSuggestCount FROM t_db a WHERE a.show_screen=1", new BeanPropertyRowMapper(DbVo.class));
list.forEach(item -> {
item.setSex(DictUtils.getDictLabel("sys_user_sex", item.getSex()));
item.setDbIdentity(DictUtils.getDictLabel("sys_db_identity", item.getDbIdentity()));
User user = userService.getById(item.getUserId());
if (user != null && StrUtil.isNotBlank(user.getAvatar()))
item.setAvatar("https://rd.ydool.org" + user.getAvatar());
});
render(Ret.ok().data(list));
}
@ApiOperation("代表详情")
@GetMapping("detail")
@ApiImplicitParam(name = "id", value = "代表id")
public void detail(String id) {
Db db = dbService.getById(id);
DbVO dbVO = DbWrapper.build().entityVO(db);
//履职记录
List<Perform> list = performService.list(new LambdaQueryWrapper<Perform>().eq(Perform::getCreatedId, db.getUserId()));
render(Ret.ok().data(Dict.create().set("performList", list).set("db", dbVO)));
}
}

View File

@ -0,0 +1,148 @@
package com.ydool.boot.api.controller;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ydool.boot.api.util.DateUtils;
import com.ydool.boot.api.vo.CountRankVo;
import com.ydool.boot.common.result.Ret;
import com.ydool.boot.modules.rddb.entity.Notice;
import com.ydool.boot.modules.rddb.entity.Report;
import com.ydool.boot.modules.rddb.service.*;
import com.ydool.boot.modules.rddb.wrapper.NoticeWrapper;
import com.ydool.boot.modules.sys.entity.Config;
import com.ydool.boot.modules.sys.service.ConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@RestController
@RequestMapping("/api/statistics/office")
@Api(value = "大屏统计-人大办公", tags = "大屏统计-人大办公")
@AllArgsConstructor
public class ApiStatisticsOfficeController extends ApiBaseController {
JdbcTemplate jdbcTemplate;
DataBankService dataBankService;
ReadFileService readFileService;
AuditService auditService;
ReportService reportService;
NoticeService noticeService;
ConfigService configService;
ConferenceService conferenceService;
@ApiOperation("基础情况")
@GetMapping("count")
public void count() {
DecimalFormat df = new DecimalFormat("0.00");
//文件发放
int dataBankCount = dataBankService.count();
//文件阅览
int readFileCount = readFileService.count();
//文件办理
int auditCount = auditService.count();
//报送
int reportCount = reportService.count();
//录用
int passCount = reportService.count(new LambdaQueryWrapper<Report>().eq(Report::getHireStatus, 1));
//录用率
Double passPercent = reportCount == 0 ? 0 : Convert.toDouble(passCount) / Convert.toDouble(reportCount) * 100;
Dict dict = Dict.create()
.set("dataBankCount", dataBankCount)
.set("readFileCount", readFileCount)
.set("auditCount", auditCount)
.set("reportCount", reportCount)
.set("passCount", passCount)
.set("passPercent", df.format(passPercent));
render(Ret.ok().data(dict));
}
@ApiOperation("乡镇信息报道录用分析")
@GetMapping("analyze")
public void analyze() {
List<CountRankVo> list = jdbcTemplate.query("select b.name,count(a.id)as count from t_report a left join t_sys_street b on a.street=b.id GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class));
render(Ret.ok().data(list));
}
@ApiOperation("区县信息报导录用排行")
@GetMapping("rank")
public void rank() {
Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getParamKey, "screen_office_country_rank"));
if (config != null) {
String countryStr = config.getParamValue();
String countStr = config.getRemarks();
if (StrUtil.isNotBlank(countryStr) && StrUtil.isNotBlank(countStr)) {
String[] countryArr = countryStr.split(",");
String[] countArr = countStr.split(",");
Dict dict = Dict.create().set("countryArr", countryArr).set("countArr", countArr);
render(Ret.ok().data(dict));
}
}
}
@ApiOperation("人大会议月度召开情况统计")
@GetMapping("conference/analyze")
public void conferenceAnalyze() {
List countList = new ArrayList();
//默认当前年
Date date = DateUtil.date();
String year = Convert.toStr(DateUtil.year(date));
List<String> monthList = DateUtils.getMonthList();
Iterator<String> iterator = monthList.iterator();
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
}
render(Ret.ok().data(Dict.create().set("monthList", DateUtils.getMonthStrList()).set("countList", countList)));
}
@ApiOperation("当月人大会议类型情况占比")
@GetMapping("conference/category/count")
public void conferenceCategoryCount() {
//默认当前年
Date date = DateUtil.date();
String year = Convert.toStr(DateUtil.year(date));
String month = Convert.toStr(DateUtil.month(date));
String yearMonth = year + "-" + month;
DecimalFormat df = new DecimalFormat("0.00");
//总数
Integer allCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
//主任会议数 常委会议数 其他会议数
//1主任 2常委 3其他
int zrCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=1", Integer.class, yearMonth);
int cwCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=2", Integer.class, yearMonth);
int otherCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=3", Integer.class, yearMonth);
Double zrPercent = allCount == 0 ? 0 : Convert.toDouble(zrCount) / Convert.toDouble(allCount) * 100;
Double cwPercent = allCount == 0 ? 0 : Convert.toDouble(cwCount) / Convert.toDouble(allCount) * 100;
Double otherPercent = allCount == 0 ? 0 : Convert.toDouble(otherCount) / Convert.toDouble(allCount) * 100;
Dict dist = Dict.create().set("zrPercent", df.format(zrPercent)).set("cwPercent", df.format(cwPercent)).set("otherPercent", df.format(otherPercent));
render(Ret.ok().data(dist));
}
@ApiOperation("人大大事记")
@GetMapping("notice")
public void notice() {
IPage<Notice> paged = noticeService.page(new Page<>(getPageNum(), getPageSize()),
new QueryWrapper<Notice>().orderByDesc("created_at"));
render(Ret.ok().paged(NoticeWrapper.build().pageVO(paged)));
}
}

View File

@ -0,0 +1,139 @@
package com.ydool.boot.api.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ydool.boot.api.util.DateUtils;
import com.ydool.boot.api.vo.CountRankVo;
import com.ydool.boot.common.cache.ConfigUtils;
import com.ydool.boot.common.result.Ret;
import com.ydool.boot.modules.rddb.entity.VoterSuggestDb;
import com.ydool.boot.modules.rddb.service.VoterSuggestDbService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/api/statistics/voter")
@Api(value = "大屏统计-民情", tags = "大屏统计-民情")
@AllArgsConstructor
public class ApiStatisticsVoterController extends ApiBaseController {
JdbcTemplate jdbcTemplate;
VoterSuggestDbService voterSuggestDbService;
@ApiOperation("民情统计")
@GetMapping("count")
public void count() {
DecimalFormat df = new DecimalFormat("0.00");
//总量
int allCount = voterSuggestDbService.count();
//受理总量
int okCount = voterSuggestDbService.count(new LambdaQueryWrapper<VoterSuggestDb>().eq(VoterSuggestDb::getStatus, 1));
//受理率
Double percent = allCount == 0 ? 0 : Convert.toDouble(okCount) / Convert.toDouble(allCount) * 100;
String averageTime = ConfigUtils.getStr("screen_vote_average_time");
String ontimeRate = ConfigUtils.getStr("screen_vote_ontime_rate");
String satisfactionRate = ConfigUtils.getStr("screen_vote_satisfaction_rate");
Dict dict = Dict.create().set("allCount", allCount)
.set("okCount", okCount)
.set("percent", df.format(percent))
.set("averageTime", averageTime)
.set("ontimeRate", ontimeRate)
.set("satisfactionRate", satisfactionRate);
render(Ret.ok().data(dict));
}
@ApiOperation("区域民情分析")
@GetMapping("analyze")
public void analyze() {
DecimalFormat df = new DecimalFormat("0.00");
List<CountRankVo> list = jdbcTemplate.query("select b.name,count(a.id)as count from t_voter_suggest_db a left join t_sys_street b on a.db_region=b.id GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class));
List<String> nameList = list.stream().map(CountRankVo::getName).collect(Collectors.toList());
List<String> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
List<String> percentList = new ArrayList<>();
String max = CollectionUtil.max(countList);
if (StrUtil.isNotBlank(max)) {
Integer maxCount = Convert.toInt(max);
Iterator<String> iterator = countList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
Double percent = maxCount == 0 ? 0 : Convert.toDouble(item) / Convert.toDouble(maxCount) * 100;
percentList.add(df.format(percent));
}
render(Ret.ok().data(Dict.create().set("nameList", nameList).set("countList", countList).set("percentList", percentList)));
}
}
@ApiOperation("民情月度受理统计")
@GetMapping("month/count")
public void monthCount() {
List countList = new ArrayList();
//默认当前年
Date date = DateUtil.date();
String year = Convert.toStr(DateUtil.year(date));
List<String> monthList = DateUtils.getMonthList();
Iterator<String> iterator = monthList.iterator();
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_voter_suggest_db b , t_db a where a.id=b.db and DATE_FORMAT( b.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
}
render(Ret.ok().data(Dict.create().set("monthList", DateUtils.getMonthStrList()).set("countList", countList)));
}
@ApiOperation("民情分类情况")
@GetMapping("people_condition/category")
public void peopleConditionCategory() {
String categoryStr = ConfigUtils.getStr("screen_vote_category");
String countStr = ConfigUtils.getStr("screen_vote_category_condition");
if (StrUtil.isNotBlank(categoryStr) && StrUtil.isNotBlank(countStr)) {
String[] categoryArr = categoryStr.split(",");
String[] countArr = countStr.split(",");
Dict dict = Dict.create().set("categoryArr", categoryArr).set("countArr", countArr);
render(Ret.ok().data(dict));
}
}
@ApiOperation("民情反映热点关键词云")
@GetMapping("people_condition/hot_key")
public void peopleConditionHotKey() {
String keyStr = ConfigUtils.getStr("screen_vote_hot_key");
if (StrUtil.isNotBlank(keyStr)) {
String[] keyArr = keyStr.split(",");
Dict dict = Dict.create().set("keyArr", keyArr);
render(Ret.ok().data(dict));
}
}
@ApiOperation("民情处理情况分析")
@GetMapping("people_condition/analyze")
public void peopleConditionAnalyze() {
String countStr = ConfigUtils.getStr("screen_vote_handle_analyze");
if (StrUtil.isNotBlank(countStr)) {
String[] countArr = countStr.split(",");
Dict dict = Dict.create().set("countArr", countArr);
render(Ret.ok().data(dict));
}
}
}

View File

@ -1,8 +1,5 @@
package com.ydool.boot.api.filter;
import cn.hutool.core.util.StrUtil;
import com.ydool.boot.common.result.Ret;
import com.ydool.boot.core.exception.ResultException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
@ -35,9 +32,9 @@ public class ReferInterceptor implements HandlerInterceptor {
String requestRefer = request.getHeader("Referer");
System.out.println("------------------------------>refer" + requestRefer);
if (requestRefer == null || (StrUtil.isNotBlank(refer) && !requestRefer.contains(refer))) {
throw new ResultException(Ret.fail("非法访问!"));
}
// if (requestRefer == null || (StrUtil.isNotBlank(refer) && !requestRefer.contains(refer))) {
// throw new ResultException(Ret.fail("非法访问!"));
// }
return true;
}

View File

@ -1,5 +1,6 @@
package com.ydool.boot.api.util;
import cn.hutool.core.convert.Convert;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.lang.management.ManagementFactory;
@ -9,8 +10,10 @@ import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* 时间工具类
@ -228,5 +231,30 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
return Date.from(end.atZone(ZoneId.systemDefault()).toInstant());
}
public static List<String> getMonthList() {
Calendar cal = Calendar.getInstance();
int month = cal.get(Calendar.MONTH) + 1;
List<String> monthList = new ArrayList<>();
for (int i = 1; i <= month; i++) {
if (i < 10) {
monthList.add("0" + i);
} else {
monthList.add(Convert.toStr(i));
}
}
return monthList;
}
public static List<String> getMonthStrList() {
Calendar cal = Calendar.getInstance();
int month = cal.get(Calendar.MONTH) + 1;
List<String> monthList = new ArrayList<>();
for (int i = 1; i <= month; i++) {
monthList.add(Convert.toStr(i)+"");
}
return monthList;
}
}

View File

@ -0,0 +1,21 @@
package com.ydool.boot.api.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ActivitySignVo {
//用户名
String name;
//签到时间
@DateTimeFormat(pattern = "HH:mm")
@JsonFormat(pattern = "HH:mm")
Date signTime;
//签到地址
String address;
}

View File

@ -0,0 +1,10 @@
package com.ydool.boot.api.vo;
import lombok.Data;
@Data
public class CountRankVo {
//联络站的名字举办的次数
String name;
String count;
}

View File

@ -0,0 +1,27 @@
package com.ydool.boot.api.vo;
import lombok.Data;
@Data
public class DbVo {
//userId
private String userId;
//代表id
private String id;
//头像
private String avatar;
//姓名
private String name;
//性别
private String sex;
//籍贯
private String nativePlace;
//级别
private String dbIdentity;
//履职次数
private String performCount;
//选民意见办理次数
private String voterSuggestCount;
}

View File

@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ydool.boot.core.entity.BaseEntity;
import com.ydool.boot.core.validator.Chinese;
import com.ydool.boot.core.validator.Number;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
@ -111,6 +110,9 @@ public class Db extends BaseEntity {
@ApiModelProperty(value = "排序")
private Integer sortNo;
@ApiModelProperty(value = "是否显示到大屏")
private Integer showScreen;
@TableField(exist = false)
private String phoneNumber;

View File

@ -116,6 +116,7 @@ public class DbService extends BaseService<DbMapper, Db> {
db.setUserId(user.getId());
db.setCreatedId(SecureUtils.getUserId());
db.setShowScreen(0);
} else {
//更新
String userId = db.getUserId();

View File

@ -84,7 +84,7 @@ public class OfficeService extends BaseService<OfficeMapper, Office> {
}
} else {
//不是同一种身份,说明是一个user账号下的两个角色
//user仅作编辑,在备注中写入其角色代码
//user仅作编辑
repeatFlag = true;
}
}

View File

@ -80,7 +80,7 @@ public class DbController extends BaseAdminController {
@PostMapping("/list")
@ResponseBody
public void list(DbVO dbVO) {
QueryWrapper<Db> qw = getQueryWrapper(dbVO.getName(), dbVO.getPhone(), dbVO.getSex());
QueryWrapper<Db> qw = getQueryWrapper(dbVO.getName(), dbVO.getPhone(), dbVO.getSex(),dbVO.getShowScreen());
IPage<Db> paged = dbService.page(new Page<>(getPageNum(), getPageSize()), qw);
renderJson(Ret.ok().paged(DbWrapper.build().pageVO(paged)));
}
@ -165,7 +165,7 @@ public class DbController extends BaseAdminController {
@PostMapping("/export")
@ResponseBody
public void export(DbVO dbVO, String[] ids) {
QueryWrapper qw = getQueryWrapper(dbVO.getName(), dbVO.getPhone(), dbVO.getSex());
QueryWrapper qw = getQueryWrapper(dbVO.getName(), dbVO.getPhone(), dbVO.getSex(),dbVO.getShowScreen());
if (ArrayUtil.isNotEmpty(ids)) {
qw.in("id", Arrays.asList(ids));
}
@ -195,11 +195,12 @@ public class DbController extends BaseAdminController {
render(Ret.ok().data(officeList));
}
private QueryWrapper<Db> getQueryWrapper(String name, String phone, String sex) {
private QueryWrapper<Db> getQueryWrapper(String name, String phone, String sex,Integer showScreen) {
QueryWrapper<Db> qw = new QueryWrapper<>();
Condition.appendIfNotEmpty(name, "name#like", qw);
Condition.appendIfNotEmpty(phone, "phone#like", qw);
Condition.appendIfNotEmpty(sex, "sex", qw);
Condition.appendIfNotEmpty(showScreen, "show_screen", qw);
qw.orderByDesc("sort_no");
return qw;
}
@ -217,4 +218,26 @@ public class DbController extends BaseAdminController {
render(Ret.ok().msg("保存排序成功"));
}
@PostMapping("/show")
public void show(String id) {
Db db = dbService.getById(id);
if(db!=null){
db.setShowScreen(1);
dbService.updateById(db);
render(Ret.ok());
}
render(Ret.fail("未找到该记录"));
}
@PostMapping("/hide")
public void hide(String id) {
Db db = dbService.getById(id);
if(db!=null){
db.setShowScreen(0);
dbService.updateById(db);
render(Ret.ok());
}
render(Ret.fail("未找到该记录"));
}
}

View File

@ -47,6 +47,7 @@ public class ReportController extends BaseAdminController {
public void list(Report report) {
QueryWrapper<Report> wrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(report.getTitle())) wrapper.like("title", report.getTitle());
if (report.getHireStatus()!=null) wrapper.like("hire_status", report.getHireStatus());
wrapper.orderByDesc("created_at");
Page page = reportService.page(new Page(getPageNum(), getPageSize()), wrapper);
render(Ret.ok().paged(ReportWrapper.build().pageVO(page)));
@ -69,9 +70,8 @@ public class ReportController extends BaseAdminController {
@PostMapping("save")
public void save(@Validated ReportVo report) {
if(StrUtil.isBlank(report.getId())) {
report.setHireStatus(0);
report.setScore(0);
report.setCreatedId(getLoginUser().getId());
report.setStreetStr(getLoginUser().getStreetId());
}
boolean flag = reportService.saveOrUpdate(report);
render(flag ? Ret.ok() : Ret.fail("操作失败"));

View File

@ -1 +1 @@
*{box-sizing:border-box}body{background-color:#f8f8f8}body,button,input,select,textarea{font-family:PingFang SC,PingFang SC-Bold!important}img{max-width:100%}table{width:100%!important}#app{height:100%;display:flex;flex-direction:column}.van-tabs__line{background-color:#d03a29}.van-pagination{min-height:1.06667rem}.van-search{min-height:1.44rem}.van-tabs--line .van-tabs__wrap{min-height:1.17333rem}.navVar-box[data-v-fe379062]{min-height:1.22667rem}.navVar-box .van-nav-bar[data-v-fe379062]{background-color:#d03a29}.navVar-box .van-nav-bar[data-v-fe379062] .van-icon,.navVar-box .van-nav-bar[data-v-fe379062] .van-nav-bar__left,.navVar-box .van-nav-bar[data-v-fe379062] .van-nav-bar__right,.navVar-box .van-nav-bar[data-v-fe379062] .van-nav-bar__title{font-size:.42667rem;color:#fff}.navVar-box .van-nav-bar[data-v-fe379062] .van-nav-bar__title{font-weight:700}.navVar-box .van-nav-bar[data-v-fe379062] .van-nav-bar__right .right{display:flex;align-items:center}.tabbar[data-v-6e6a4500]{min-height:1.33333rem}blockquote,body,button,dd,dl,dt,fieldset,h1,h2,h3,h4,h5,h6,hr,input,lengend,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0}body,button,input,select,textarea{font:.32rem/1 Tahoma,Helvetica,Arial,"\5b8b\4f53",sans-serif}h1{font-size:.48rem}h2{font-size:.42667rem}h3{font-size:.37333rem}h4,h5,h6{font-size:100%}address,cite,dfn,em,var{font-style:normal}code,kbd,pre,samp,tt{font-family:Courier New,Courier,monospace}small{font-size:.32rem}ol,ul{list-style:none}a{text-decoration:none}a:hover{text-decoration:underline}abbr[title],acronym[title]{border-bottom:.02667rem dotted;cursor:help}q:after,q:before{content:""}legend{color:#000}fieldset,img{border:none}button,input,select,textarea{font-size:100%}table{border-collapse:collapse;border-spacing:0}hr{border:none;height:.02667rem}body,html{height:100%}
*{box-sizing:border-box}body{background-color:#f8f8f8}body,button,input,select,textarea{font-family:PingFang SC,PingFang SC-Bold!important}img{max-width:100%}table{width:100%!important}#app{height:100%;display:flex;flex-direction:column}.van-tabs__line{background-color:#d03a29}.van-pagination{min-height:1.06667rem}.van-search{min-height:1.44rem}.van-tabs--line .van-tabs__wrap{min-height:1.17333rem}.navVar-box[data-v-fe379062]{min-height:1.22667rem}.navVar-box .van-nav-bar[data-v-fe379062]{background-color:#d03a29}.navVar-box .van-nav-bar[data-v-fe379062] .van-icon,.navVar-box .van-nav-bar[data-v-fe379062] .van-nav-bar__left,.navVar-box .van-nav-bar[data-v-fe379062] .van-nav-bar__right,.navVar-box .van-nav-bar[data-v-fe379062] .van-nav-bar__title{font-size:.42667rem;color:#fff}.navVar-box .van-nav-bar[data-v-fe379062] .van-nav-bar__title{font-weight:700}.navVar-box .van-nav-bar[data-v-fe379062] .van-nav-bar__right .right{display:flex;align-items:center}.tabbar[data-v-6e6a4500]{min-height:1.33333rem}blockquote,body,button,dd,dl,dt,fieldset,h1,h2,h3,h4,h5,h6,hr,input,lengend,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0}body,button,input,select,textarea{font:.32rem/1 Tahoma,Helvetica,Arial,"\5b8b\4f53",sans-serif}h1{font-size:.48rem}h2{font-size:.42667rem}h3{font-size:.37333rem}h4,h5,h6{font-size:100%}address,cite,dfn,em,var{font-style:normal}code,kbd,pre,samp,tt{font-family:Courier New,Courier,monospace}small{font-size:.32rem}ol,ul{list-style:none}a{text-decoration:none}a:hover{text-decoration:underline}abbr[title],acronym[title]{border-bottom:.02667rem dotted;cursor:help}q:after,q:before{content:""}legend{color:#000}fieldset,img{border:none}button,input,select,textarea{font-size:100%}table{border-collapse:collapse;border-spacing:0}hr{border:none;height:.02667rem}body,html{height:100%}.w-100{width:100%}.h-100{height:100%}.text-overflow{white-space:nowrap}.more-overflow,.text-overflow{overflow:hidden;text-overflow:ellipsis}.more-overflow{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}

View File

@ -0,0 +1 @@
.item[data-v-e14902a8]{box-sizing:border-box;padding:.42667rem .32rem;background:#fff;margin-bottom:.32rem}.uploadContent[data-v-e14902a8]{font-size:.37333rem;font-weight:700;margin-bottom:.32rem}.messageBox[data-v-e14902a8]{padding:0!important}[data-v-e14902a8] .messageBox .van-cell__value{background-color:#f8f8f8;padding:.32rem}.uplooadImg[data-v-e14902a8]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.32rem;font-size:.37333rem;font-weight:700}.enclosureArr[data-v-e14902a8]{display:flex;flex-wrap:wrap}.enclosureArr .single[data-v-e14902a8]{position:relative;width:2.13333rem;height:2.13333rem;margin-right:.21333rem}.redDel[data-v-e14902a8]{position:absolute;top:0;right:0}.btn[data-v-e14902a8]{position:fixed;bottom:0;width:100%;margin-bottom:0!important}

View File

@ -0,0 +1 @@
.addUpload[data-v-64bcc01a]{position:fixed;bottom:1.6rem;right:.13333rem;width:1.6rem;height:1.6rem}.single[data-v-64bcc01a]{box-sizing:border-box;padding:.42667rem .32rem;background:#fff;margin-bottom:.32rem}.single[data-v-64bcc01a]:last-of-type{margin-bottom:0}.imgBox[data-v-64bcc01a]{width:.66667rem;height:.66667rem;flex-shrink:0;margin-left:.53333rem}.commonClass[data-v-64bcc01a]{font-size:.32rem;font-weight:400;color:#999;padding-bottom:.16rem}.enclosureBox[data-v-64bcc01a]{padding:.42667rem;background:#f8f8f8;border-radius:.10667rem;margin:.32rem 0}.singleEnclosure[data-v-64bcc01a]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.21333rem}.enclosureBox .enclosureTitle[data-v-64bcc01a]{font-size:.4rem;font-weight:600;color:#333;flex:1}.single h5[data-v-64bcc01a]{font-size:.42667rem;letter-spacing:.02667rem;color:#333;margin-bottom:.32rem}.msgContent[data-v-64bcc01a]{font-size:.32rem;font-weight:400;color:#999;letter-spacing:.02667rem;line-height:.42667rem}

View File

@ -0,0 +1 @@
.header[data-v-138c6814]{background-color:#fff;padding:.42667rem;margin-bottom:.32rem}.header .title[data-v-138c6814]{font-size:.48rem;color:#333;line-height:.66667rem;font-weight:700}.header .date[data-v-138c6814]{font-size:.32rem;color:#999;line-height:.45333rem;margin-top:.21333rem}.header .content[data-v-138c6814]{margin-top:.26667rem;font-size:.32rem;color:#333;line-height:.64rem;overflow:auto}.time[data-v-138c6814]{padding:.42667rem;background-color:#fff;margin-bottom:.26667rem}.time .item[data-v-138c6814]{font-size:.37333rem;color:#333;line-height:.53333rem;font-weight:700}.time .item[data-v-138c6814]:not(:last-child){margin-bottom:.32rem}.time .item .van-icon[data-v-138c6814]{vertical-align:middle;margin-right:.21333rem;color:#d03a29}.address[data-v-138c6814]{padding:.42667rem;background-color:#fff;margin-bottom:.32rem;display:flex;align-items:center;font-size:.37333rem;color:#333;line-height:.53333rem;font-weight:700}.address .text[data-v-138c6814]{flex:1;margin:0 .21333rem;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.files[data-v-138c6814]{margin-top:.26667rem;background-color:#fff;padding:.42667rem}.files .title[data-v-138c6814]{font-size:.32rem;color:#999;margin-bottom:.32rem}.files .title .van-icon[data-v-138c6814]{vertical-align:middle;margin-right:.21333rem;color:#999}.files .van-collapse[data-v-138c6814] .van-collapse-item__content{padding:0}.files[data-v-138c6814] .van-uploader__wrapper--disabled{opacity:1}.file[data-v-138c6814]{position:relative;padding:.32rem .42667rem;display:flex;align-items:center;background-color:#f8f8f8;margin-bottom:.32rem}.file .icon[data-v-138c6814]{width:1.49333rem;margin-left:.32rem}.file .left[data-v-138c6814]{flex:1}.file .name[data-v-138c6814]{font-size:.42667rem;color:#333;line-height:.58667rem;font-weight:700;margin-bottom:.10667rem;word-break:break-all}.file .size[data-v-138c6814]{font-size:.32rem;color:#333;line-height:.45333rem}.van-button[data-v-138c6814]{margin:.42667rem auto;border:.02667rem solid #d03a29;border-radius:.53333rem;color:#d03a29;width:8.50667rem;height:1.06667rem;font-size:.37333rem;font-weight:700}.van-button.van-button--primary[data-v-138c6814]{background-color:#d03a29;color:#fff}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.header[data-v-6ca2d963]{background-color:#fff;padding:.42667rem;margin-bottom:.32rem}.header .title[data-v-6ca2d963]{font-size:.48rem;color:#333;line-height:.66667rem;font-weight:700}.header .date[data-v-6ca2d963]{font-size:.32rem;color:#999;line-height:.45333rem;margin-top:.21333rem}.header .content[data-v-6ca2d963]{margin-top:.26667rem;font-size:.32rem;color:#333;line-height:.64rem;overflow:auto}.time[data-v-6ca2d963]{padding:.42667rem;background-color:#fff;margin-bottom:.26667rem}.time .item[data-v-6ca2d963]{font-size:.37333rem;color:#333;line-height:.53333rem;font-weight:700}.time .item[data-v-6ca2d963]:not(:last-child){margin-bottom:.32rem}.time .item .van-icon[data-v-6ca2d963]{vertical-align:middle;margin-right:.21333rem;color:#d03a29}.address[data-v-6ca2d963]{padding:.42667rem;background-color:#fff;margin-bottom:.32rem;display:flex;align-items:center;font-size:.37333rem;color:#333;line-height:.53333rem;font-weight:700}.address .text[data-v-6ca2d963]{flex:1;margin:0 .21333rem;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.files[data-v-6ca2d963]{margin-top:.26667rem;background-color:#fff;padding:.42667rem}.files .title[data-v-6ca2d963]{font-size:.32rem;color:#999;margin-bottom:.32rem}.files .title .van-icon[data-v-6ca2d963]{vertical-align:middle;margin-right:.21333rem;color:#999}.files .van-collapse[data-v-6ca2d963] .van-collapse-item__content{padding:0}.files[data-v-6ca2d963] .van-uploader__wrapper--disabled{opacity:1}.file[data-v-6ca2d963]{position:relative;padding:.32rem .42667rem;display:flex;align-items:center;background-color:#f8f8f8;margin-bottom:.32rem}.file .icon[data-v-6ca2d963]{width:1.49333rem;margin-left:.32rem}.file .left[data-v-6ca2d963]{flex:1}.file .name[data-v-6ca2d963]{font-size:.42667rem;color:#333;line-height:.58667rem;font-weight:700;margin-bottom:.10667rem;word-break:break-all}.file .size[data-v-6ca2d963]{font-size:.32rem;color:#333;line-height:.45333rem}.van-button[data-v-6ca2d963]{margin:.42667rem auto;border:.02667rem solid #d03a29;border-radius:.53333rem;color:#d03a29;width:8.50667rem;height:1.06667rem;font-size:.37333rem;font-weight:700}.van-button.van-button--primary[data-v-6ca2d963]{background-color:#d03a29;color:#fff}

View File

@ -0,0 +1 @@
.commonEle[data-v-4d7979ce]{padding:.42667rem .32rem;background:#fff;margin-bottom:.32rem}.top h5[data-v-4d7979ce]{font-size:.42667rem;letter-spacing:.02667rem;color:#333;margin-bottom:.32rem}.top p[data-v-4d7979ce]{font-size:.32rem;color:#333;line-height:.48rem;font-weight:400}.item[data-v-4d7979ce]{padding-left:.53333rem;font-size:.32rem;color:#999;margin-bottom:.10667rem}.date[data-v-4d7979ce]{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAC2UlEQVRIS61Wz0tUURT+vvcETYQMWrQIyr0tAv+AIFvXIkhRaQKbM6NmSkFCRUpBbkLFH/PuIGg00ixaFLQJXfgHuAhq56YgyIWQgUw6zHsnrr1X4zijT+it3n333vOd851zvvOIQ575+flzpVKpg2S7qraSPGOPq+oGyc+qulJXV5fv7e39WssMq21Yw77vj6vqdZJ1ZWd2wveG6Juqlki+cV13pBrQAQBjzE1VnSHZBGALQM73/Xe7u7trw8PDdo2JiYnm+vr6Ntd1rwLoBtCsqtskB0TkZbnT+wA8z7tLcjI8MANgTEQ27Xp2drbJdd3LGxsbH0ZHR6NIYIw5DeAJgIGQvqFUKjUVgfwFsJ4DWLQhA7iVSqVy5Z5ks9mnqvoIwH0ReVFJred5NpKFkNJEFMkeQCaTOU/yk6VFVXsqjdsznufZywkAoyIyVi13FoTkK0uXql5Ip9Nf9gCMMa8BdACYEZE7NS4fCRDamg7pyotIJ0Pv10luFwqFliiRVSiIC2Bzsq6qTcVisYXGmIcAngGYFJHhWvUch6LorjFmLwpVHbEAywDafd+/0tfXt/I/AObm5tpd111W1ff0PO+77dBCoXCqFj1xkxw5Z/uksbHxx17HG2MUwI6InDhMNiKKVHWV5GqNs5siMhsm+xeAhtgAxpgJAEOHOWH3SqXSxf7+/o/GmD8AcSmy1eY4zj1bHVVANm0VktxKJpNTlRTFSvJRnpfvVyb5Acnxo8r0OAD7yjRuo8UFCMXvX6PFlYpjAERSkRORngNiR7I7mUwuxTVYobhdqpo7IHahoiYcx1mwcu04TuK4INlstisIgkUr10EQdKbT6by1G3vg1Ioo9sCJDGQymQTJ6fKRqapvSa6JyM8wZydVtY3ktfKRqaq3I88je1WHfthUz48x9PNBEDy2A6Yy0qoAZdHYSXeD5CUArQDOhnvfANjfltVisbg0ODho11Wf3y3rwDI1XzfhAAAAAElFTkSuQmCC) no-repeat;background-size:.32rem;background-position:0}.dateContent[data-v-4d7979ce]{font-size:.37333rem;font-weight:700;margin-bottom:.32rem;padding-left:.53333rem;line-height:.53333rem}.town[data-v-4d7979ce]{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAC7klEQVRIS7WVP2gUURDGv9m9hBBSWAheYWEgYgRBBQMKCooKERKwMJUBGy/v3W2CphAUUpwoKFjEcNnbt7kUFrGKoKCgoEJAQSEBFQQVAwZszs5CDkl2MzLHrpxyfzYYX7f75s1v5nsz8wgtVqlU2haG4SiA0wB2iDkRLTPzI9u2pzOZzLdmLqjZpu/755h5moi66tkx8w/LsvTIyMjdRn4aAmZmZs4y81x0cI6Zp7TWS/JtjDlARBcADEcZDTeC1AW4rpu2bfuzRM7MF7XWU/UiNMZcIKLbkkkYhjsdxyn/bVcXYIy5RkQTorPWerCZjMaYh0Q0ACCvlLqaCOD7/gsAh5l5SGt9rwXgDBHNM/OC1vpYUsAXqZjV1dXdY2NjH5sBCoVCb3t7+wcAK0qp7qSARQAHmPmU1vpJiwz6iegxgCWlVF9SwCSAiwBmlVKZFqVcAnAewG2l1HgigOd5e4joTWTcr7V+3qCKjgOoZsjM+7PZ7PtEADHyff8GgMsAfgKYCILAdxznh+y5rtuVSqUUgOsAOgDcVEpdqRdEq04uAJAxIUtA8YX3Ro7l/7RSamzDnWyM2RvdwzARpRqMioCI7sg40Vq/S5TB5OTkls7OzlvRxVXPMLNou0RE1U5l5rRUGRHtqXE6W6lULo2Pj3+vBf0hUbFY3GVZ1hMikqkpkpj19fWpbDa7Ui86z/N2WJYlM0lHki2HYTiQy+U+xfa/AZHzBSKS6N4GQTDkOM5ysxKN91zX7UmlUvMA9jFzOQzDI/HZKiCfz3ek0+lFSZmIFtbW1gbjikkCiCurra3tITMfFUnL5XJfPp//WQXUlOTHIAj6Nuq8JhMpX+mfnnj4ke/7WwF8FQ3DMDyZy+WeJY26nl2xWDxh2/ZTAN8rlUq3AKRhDDO/1lof+hfn8VljzCsiOiiXL4D78t4yc1ZrbTYD4HneqGVZ0qQPBCDybA+CYL/jOG83AxA9qYvMvCIA3gynDUdF/Hr9J8jLX/iKSZDcqyEKAAAAAElFTkSuQmCC) no-repeat;background-size:.32rem;background-position:0}.towncontent[data-v-4d7979ce]{font-size:.37333rem;font-weight:700;padding-left:.53333rem;line-height:.53333rem}.uploadTime[data-v-4d7979ce]{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADIElEQVRIS5VWMWjVUBQ9N4kfhw4OFX7BoYOgIt0qKHawqGDRQVFQB0Gw8N7nQ1V0UFD8YAcFRS2myYuKg4JCCxYcFBwUVBDqoNhBsOKiJBShHUqxmObK/SQSY/ubZgy559x73znnhbCCx3XdNtu2RxzHGezv739bppTKfCTfNBoNp6OjYwTAfgCTYRhuajQa8XL1pQgEvFqtPiKiQ8wcEVGvUupzBh4EwWYA7XEcz05NTX3MEy9LkAcHMANgWwZujNkL4CaA9RmZNADggtb6nrxrSVDofJaI+pRSb6TQ9/2TRCTg8kwCeA9gHYCe9N0VpdT5JQnKgjPzuSiKrmdrcV23x3GcJ7IyItqxKMEKwE9prW8VD9rzvCOWZT0CMLYogTHmDoB+Zi6u5TARPRZAZl4UPFNctVqdJqJf/xH4vn+DiE4VwYMgOJgkyWMiclqBZ9MYY6aZue0fgpLg57TWVwVoeHh4Q6VSaS+azvf9biIaZ+aJvwQ5cDHPUa31qIDkOxdJKqVOZ+CWZb0C0AagV2stKkLq9hdEtFXk2iTwff8EEd1l5hWBE1EVwJs4jvvq9fqsgDuO8yyV6uTc3NwWcl236jjONwCrmfmY1vphmc5bgefdTsaYSxI1Iiml1IF0op0AnsuB5tcyNDS0rlKpjBfB8zlVjBIhGAfQzcx9Wuvnnud1EtEnIpLd/t15OulLABvza1kup4RgGsAaAGuVUj+NMWcAXMtPlAdn5ncLCwu7ZeeLGHJLPgSbWeT7/m9ZRRiGq8TuQRBcZuYLAJpZUuj8cxzHvfV6PWrl9ryzZYIvkoZJknTVarUJz/P2WZb1FMAvZhap9hBRJ4AVg2cT3Cei48w8qLW+mCrIY2ad6+RDKsXSnWe15HneDsuy5PBm5ufnuwYGBr6nhumxbXs7gK9RFI1lablUTi11szWNZowRc+yRNSRJsqtWq/0oFqQ7v5NO+08Itro2M4J2AK9TCc4w820Ao7ZtR0mSiFx3ATgrZ1UMwdJ3sjFGSB6kkyxVN8nMklPN3Cnz/BfXqYoOp3nSmTpzQiYKw/BemT+JPPEfYaYm1e6LufYAAAAASUVORK5CYII=) no-repeat;background-size:.32rem;background-position:0}.enclosureBox[data-v-4d7979ce]{padding:.42667rem;background:#f8f8f8;border-radius:.10667rem;margin:.32rem 0}.singleEnclosure[data-v-4d7979ce]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.21333rem}.enclosureBox .enclosureTitle[data-v-4d7979ce]{font-size:.4rem;font-weight:600;color:#333;flex:1}.imgBox[data-v-4d7979ce]{width:.66667rem;height:.66667rem;flex-shrink:0;margin-left:.53333rem}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More