master
liuqingkun 3 years ago
parent d0f21df318
commit d460513422
  1. 3
      doc/minio-start.sh
  2. BIN
      doc/上传数据_模板.xls
  3. 9
      doc/项目搭建步骤.md
  4. 20
      src/main/java/org/springblade/common/cache/UserCache.java
  5. 3
      src/main/java/org/springblade/common/constant/BusinessConstant.java
  6. 3
      src/main/java/org/springblade/modules/business/service/impl/AppealMediationServiceImpl.java
  7. 9
      src/main/java/org/springblade/modules/business/service/impl/AppealRegServiceImpl.java
  8. 64
      src/main/java/org/springblade/modules/business/service/impl/LargeScreenServiceImpl.java
  9. 5
      src/main/java/org/springblade/modules/business/vo/AppealMediationVO.java
  10. 7
      src/main/java/org/springblade/modules/resource/endpoint/OssEndpoint.java
  11. 14
      src/main/java/org/springblade/modules/system/controller/DictCommonController.java
  12. 7
      src/main/resources/application-dev.yml
  13. 4
      src/main/resources/application.yml
  14. 4
      src/main/resources/log/logback-dev.xml

@ -0,0 +1,3 @@
#!/bin/bash
MINIO_ROOT_USER=mpminioadmin MINIO_ROOT_PASSWORD=Sj.mp_Bex4ui2 nohup minio server --console-address ":9000" --adress ":9001" /mediation-platform/minio/data > ./minio-simple-run.log 2>&1 &

Binary file not shown.

@ -5,3 +5,12 @@
## 3. 选择maven配置, 将默认的maven配置文件替换为文档中的配置文件
## 4. 底部菜单`terminal`中, 运行`mvn clean package`进行项目构建
# 服务器访问
http://tmpshop.cas-air.cn/java
http://tmpshop.cas-air.cn/minio
http://tmpshop.cas-air.cn/mpadmin
http://tmpshop.cas-air.cn/mplargescreen

@ -16,6 +16,7 @@
*/
package org.springblade.common.cache;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.SpringUtil;
@ -24,6 +25,9 @@ import org.springblade.core.tool.utils.StringUtil;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.service.IUserService;
import java.util.List;
import java.util.stream.Collectors;
import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
@ -74,4 +78,20 @@ public class UserCache {
return CacheUtil.get(USER_CACHE, USER_CACHE_ACCOUNT, tenantId + StringPool.DASH + account, () -> userService.userByAccount(tenantId, account));
}
/**
* 获取服务窗口列表
*
* @return
*/
public static List<User> getServerWindowList() {
return CacheUtil.get(USER_CACHE, "user-list", "server-windows", () -> {
String deptId = "1666621912872280065";
List<User> userList = userService.list(Wrappers.<User>lambdaQuery().eq(User::getDeptId, deptId));
userList = userList.stream().filter(
user -> !"sjdl".equals(user.getAccount())
).collect(Collectors.toList());
return userList;
});
}
}

@ -55,4 +55,7 @@ public interface BusinessConstant {
Integer APPEAL_STATUS_FINISH = 3;
Long DEFAULT_HANDLE_DEPT = 1666703544732012545l;
String DICT_KEY_STREET = "street";
String DICT_KEY_DISPUTE = "dispute_type";
}

@ -132,11 +132,11 @@ public class AppealMediationServiceImpl extends BaseServiceImpl<AppealMediationM
List<AppealVisitor> visitorList = visitorMapper.selectList(
Wrappers.<AppealVisitor>lambdaQuery().eq(AppealVisitor::getAppealRegId, appealReg.getId()));
// 4. 组织返回对象数据
vo.setAppealId(Long.valueOf(appealId));
vo.setAppealRegId(appealReg.getId());
vo.setVisitors(visitorList);
vo.setSkipGrant(appeal.getSkipGrant());
vo.setPersonNum(visitorList.size());
vo.setStreetId(appeal.getStreetId());
vo.setDisputeId(appeal.getDisputeId());
@ -148,6 +148,7 @@ public class AppealMediationServiceImpl extends BaseServiceImpl<AppealMediationM
vo.setReviewOpinion(appealReg.getReviewOpinion());
vo.setLegalPaper(appealReg.getLegalPaper());
vo.setFirstRegTime(appeal.getFirstRegTime());
vo.setRegTime(appealReg.getRegTime());
vo.setProblemDesc(appeal.getProblemDesc());
vo.setAppealStatus(appeal.getStatus());
vo.setTalkingHisList(detailList);

@ -182,7 +182,6 @@ public class AppealRegServiceImpl extends BaseServiceImpl<AppealRegMapper, Appea
@Transactional(rollbackFor = Exception.class)
public void importAppeal(List<AppealExcel> excels) {
if (CollectionUtils.isNotEmpty(excels)) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
List<Appeal> appeals = new ArrayList<>();
List<AppealVisitor> visitors = new ArrayList<>();
excels.forEach(excel -> {
@ -229,9 +228,15 @@ public class AppealRegServiceImpl extends BaseServiceImpl<AppealRegMapper, Appea
// 首次登记时间
if (StringUtils.isNotBlank(excel.getFirstRegTime())) {
try {
SimpleDateFormat dateFormat;
if (excel.getFirstRegTime().contains("/"))
dateFormat = new SimpleDateFormat("yyyy/MM/dd");
else
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
appeal.setFirstRegTime(dateFormat.parse(excel.getFirstRegTime()));
} catch (ParseException e) {
log.error("时间格式转换错误, 格式应为yyyy-mm-dd");
log.error("时间格式转换错误, 格式应为yyyy-mm-dd, 当前格式为: " + excel.getFirstRegTime());
}
}

@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.cache.DictBizCache;
import org.springblade.common.cache.UserCache;
import org.springblade.common.constant.BusinessConstant;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.business.entity.Appeal;
@ -38,6 +39,7 @@ import org.springblade.modules.system.service.IDictBizService;
import org.springblade.modules.system.service.IUserService;
import org.springframework.stereotype.Service;
import javax.swing.text.html.parser.Entity;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@ -61,8 +63,6 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
private final IAppealVisitorService appealVisitorService;
private final IUserService userService;
private final IDictBizService dictService;
@Override
@ -82,19 +82,19 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
// 本年度化解数
wrapper.in(Appeal::getStatus, state);
wrapper.between(Appeal::getFinishTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime());
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime());
map.put("year", appealService.count(wrapper));
wrapper.clear();
// 本季度化解数
wrapper.in(Appeal::getStatus, state);
wrapper.between(Appeal::getFinishTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime());
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime());
map.put("quarterly", appealService.count(wrapper));
wrapper.clear();
// 本月化解数
wrapper.in(Appeal::getStatus, state);
wrapper.between(Appeal::getFinishTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime());
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime());
map.put("mon", appealService.count(wrapper));
return map;
@ -142,6 +142,11 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
wrapper.orderByDesc(Appeal::getFirstRegTime);
List<Appeal> appeals = appealService.list(wrapper);
// 过滤掉无街道和处理部门的, 防止异常
appeals = appeals.stream().filter(
appeal -> Func.isNotEmpty(appeal.getStreetId()) && Func.isNotEmpty(appeal.getHandleDept())
).collect(Collectors.toList());
// 获取前50条
List<Appeal> appealList = appeals.stream().limit(50).collect(Collectors.toList());
@ -206,13 +211,19 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
map.put(name, collect.get(name).size());
}
int otherDisputeNum = 0;
// 先将map中纠纷类型包含其他的统计出数量
for (Map.Entry<String, Integer> e : map.entrySet()) {
if (e.getKey().contains("其他"))
otherDisputeNum += e.getValue();
}
// 根据数量排序
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
list.sort((o1, o2) -> o2.getValue() - o1.getValue());
List result = new ArrayList();
Map<String, Object> hashMap = new HashMap<>();
DecimalFormat df = new DecimalFormat("#0.0");
Map<String, Object> hashMap;
if (list.size() <= 5) {
// 如果类型小于5,正常计算
@ -224,23 +235,34 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
}
} else {
// 如果类型大于5,前五正常计算,其余全部按照其他纠纷计算
for (int i = 0; i < 5; i++) {
Map.Entry<String, Integer> entry = list.get(i);
int idx = 0;
int subNum = 0;
while (subNum < 4) {
Map.Entry<String, Integer> entry = list.get(idx);
if (entry.getKey().contains("其他")) {
idx++;
continue;
}
hashMap = new HashMap<>();
hashMap.put("name", entry.getKey());
hashMap.put("value", entry.getValue());
result.add(hashMap);
idx++;
subNum++;
}
int size = 0;
for (int i = 5; i < list.size(); i++) {
Map.Entry<String, Integer> entry = list.get(i);
for (; idx < list.size(); idx++) {
Map.Entry<String, Integer> entry = list.get(idx);
size += entry.getValue();
}
hashMap = new HashMap<>();
hashMap.put("name", "其他纠纷");
hashMap.put("value", size);
hashMap.put("value", size + otherDisputeNum);
result.add(hashMap);
}
@ -261,6 +283,8 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime());
}
List<Appeal> appeals = appealService.list(wrapper);
// 过滤掉无街道的, 防止异常
appeals = appeals.stream().filter(appeal -> Func.isNotEmpty(appeal.getStreetId())).collect(Collectors.toList());
appeals.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue()));
// 根据街道分组
@ -296,6 +320,8 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime());
}
List<Appeal> appeals = appealService.list(wrapper);
// 过滤掉无街道的, 防止异常
appeals = appeals.stream().filter(appeal -> Func.isNotEmpty(appeal.getStreetId())).collect(Collectors.toList());
appeals.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue()));
// 根据街道分组
@ -325,6 +351,8 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime());
}
List<Appeal> appeals = appealService.list(wrapper);
// 过滤掉无街道的, 防止异常
appeals = appeals.stream().filter(appeal -> Func.isNotEmpty(appeal.getStreetId())).collect(Collectors.toList());
appeals.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue()));
// 根据街道分组
@ -380,15 +408,8 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
appeal -> Func.isNotEmpty(appeal.getStreetId()) && Func.isNotEmpty(appeal.getHandleDept())
).collect(Collectors.toList());
// 给街道和用户赋值
// appeals.forEach(appeal -> {
// appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue());
// appeal.setName(userService.getById(appeal.getHandleDept()).getName());
// });
// 获取所有街道
String code = "street";
List<DictBiz> dataList = dictService.getList(code);
List<DictBiz> dataList = dictService.getList(BusinessConstant.DICT_KEY_STREET);
// 根据街道分组
Map<Long, List<Appeal>> street = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreetId));
@ -407,8 +428,7 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
map.put("street", streeList);
// 获取所有部门
String deptId = "1666621912872280065";
List<User> userList = userService.list(Wrappers.<User>lambdaQuery().eq(User::getDeptId, deptId));
List<User> userList = UserCache.getServerWindowList();
// 根据部门分组
Map<Long, List<Appeal>> town = appeals.stream().collect(Collectors.groupingBy(Appeal::getHandleDept));

@ -103,6 +103,11 @@ public class AppealMediationVO implements Serializable {
*/
private Date firstRegTime;
/**
* 登记时间(来访时间)
*/
private Date regTime;
/**
* 是否越级上报, 0:, 1:
*/

@ -19,6 +19,7 @@ package org.springblade.modules.resource.endpoint;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.apache.commons.lang.StringUtils;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.oss.model.OssFile;
@ -145,6 +146,12 @@ public class OssEndpoint {
@SneakyThrows
@PostMapping("/put-file")
public R<BladeFile> putFile(@RequestParam MultipartFile file) {
// 由于部署到服务器会被上传可执行文件, 故此处添加图片格式限制 png, jpeg, jpg
String suffix = StringUtils.substringAfterLast(file.getOriginalFilename(), ".");
if (!"png".equalsIgnoreCase(suffix) && !"jpeg".equalsIgnoreCase(suffix) && !"jpg".equalsIgnoreCase(suffix)) {
return R.fail("上传失败, 文件格式错误!");
}
BladeFile bladeFile = ossBuilder.template().putFile(file.getOriginalFilename(), file.getInputStream());
return R.data(bladeFile);
}

@ -21,6 +21,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.*;
import lombok.AllArgsConstructor;
import org.springblade.common.cache.UserCache;
import org.springblade.common.constant.BusinessConstant;
import org.springblade.common.constant.CommonConstant;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.cache.utils.CacheUtil;
@ -62,8 +64,6 @@ import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
@Api(value = "公共业务字典", tags = "公共业务字典")
public class DictCommonController extends BladeController {
private final IUserService userService;
private final IDictBizService dictService;
/**
@ -73,9 +73,7 @@ public class DictCommonController extends BladeController {
@ApiOperationSupport(order = 1)
@ApiOperation(value = "获取窗口列表", notes = "获取窗口列表")
public R<List<ServerWindowVO>> getServerWindowList() {
String deptId = "1666621912872280065";
List<User> userList = userService.list(Wrappers.<User>lambdaQuery().eq(User::getDeptId, deptId));
List<User> userList = UserCache.getServerWindowList();
List<ServerWindowVO> dataList = new ArrayList<>();
userList.forEach(user -> {
dataList.add(BeanUtil.copy(user, ServerWindowVO.class));
@ -90,8 +88,7 @@ public class DictCommonController extends BladeController {
@ApiOperationSupport(order = 2)
@ApiOperation(value = "获取所有诉求类型列表", notes = "获取所有诉求类型列表")
public R<List<DictSimpleVO>> getDisputeList() {
String code = "dispute_type";
List<DictBiz> dataList = dictService.getListThirdLevel(code);
List<DictBiz> dataList = dictService.getListThirdLevel(BusinessConstant.DICT_KEY_DISPUTE);
return R.data(BeanUtil.copy(dataList, DictSimpleVO.class));
}
@ -102,8 +99,7 @@ public class DictCommonController extends BladeController {
@ApiOperationSupport(order = 3)
@ApiOperation(value = "获取街道列表列表", notes = "获取街道列表列表")
public R<List<DictSimpleVO>> getStreetList() {
String code = "street";
List<DictBiz> dataList = dictService.getList(code);
List<DictBiz> dataList = dictService.getList(BusinessConstant.DICT_KEY_STREET);
return R.data(BeanUtil.copy(dataList, DictSimpleVO.class));
}
}

@ -1,4 +1,4 @@
##数据源配置 - dev
#数据源配置 - dev
spring:
redis:
##redis 单机环境配置
@ -13,11 +13,6 @@ spring:
username: root
password: 123456
#第三方登陆
social:
enabled: true
domain: http://127.0.0.1:1888
#server:
# port: 10000
#

@ -186,8 +186,8 @@ blade:
#接口放行
skip-url:
- /blade-test/**
- /blade-business/**
- /blade-system/dict/common/**
- /blade-business/report/**
- /blade-system/dict/common/getStreetList
#授权认证配置
auth:
- method: ALL

@ -25,7 +25,7 @@
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>target/log/info-%d{yyyy-MM-dd}.log</FileNamePattern>
<FileNamePattern>log/info-%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>
@ -42,7 +42,7 @@
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>target/log/error-%d{yyyy-MM-dd}.log</FileNamePattern>
<FileNamePattern>log/error-%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n</pattern>

Loading…
Cancel
Save