diff --git a/doc/minio-start.sh b/doc/minio-start.sh new file mode 100644 index 0000000..2ecc55e --- /dev/null +++ b/doc/minio-start.sh @@ -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 & diff --git a/doc/上传数据_模板.xls b/doc/上传数据_模板.xls index 3531fa3..304a5d2 100644 Binary files a/doc/上传数据_模板.xls and b/doc/上传数据_模板.xls differ diff --git a/doc/项目搭建步骤 b/doc/项目搭建步骤.md similarity index 61% rename from doc/项目搭建步骤 rename to doc/项目搭建步骤.md index dfbc2e3..8b0ec53 100644 --- a/doc/项目搭建步骤 +++ b/doc/项目搭建步骤.md @@ -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 + + diff --git a/src/main/java/org/springblade/common/cache/UserCache.java b/src/main/java/org/springblade/common/cache/UserCache.java index 2ec4cd7..9049064 100644 --- a/src/main/java/org/springblade/common/cache/UserCache.java +++ b/src/main/java/org/springblade/common/cache/UserCache.java @@ -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 getServerWindowList() { + return CacheUtil.get(USER_CACHE, "user-list", "server-windows", () -> { + String deptId = "1666621912872280065"; + List userList = userService.list(Wrappers.lambdaQuery().eq(User::getDeptId, deptId)); + userList = userList.stream().filter( + user -> !"sjdl".equals(user.getAccount()) + ).collect(Collectors.toList()); + + return userList; + }); + } } diff --git a/src/main/java/org/springblade/common/constant/BusinessConstant.java b/src/main/java/org/springblade/common/constant/BusinessConstant.java index 5c4b1c6..6d5123a 100644 --- a/src/main/java/org/springblade/common/constant/BusinessConstant.java +++ b/src/main/java/org/springblade/common/constant/BusinessConstant.java @@ -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"; } diff --git a/src/main/java/org/springblade/modules/business/service/impl/AppealMediationServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/AppealMediationServiceImpl.java index 560c8f6..7ee4d17 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/AppealMediationServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/AppealMediationServiceImpl.java @@ -132,11 +132,11 @@ public class AppealMediationServiceImpl extends BaseServiceImpl visitorList = visitorMapper.selectList( Wrappers.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 excels) { if (CollectionUtils.isNotEmpty(excels)) { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); List appeals = new ArrayList<>(); List visitors = new ArrayList<>(); excels.forEach(excel -> { @@ -229,9 +228,15 @@ public class AppealRegServiceImpl extends BaseServiceImpl appeals = appealService.list(wrapper); + // 过滤掉无街道和处理部门的, 防止异常 + appeals = appeals.stream().filter( + appeal -> Func.isNotEmpty(appeal.getStreetId()) && Func.isNotEmpty(appeal.getHandleDept()) + ).collect(Collectors.toList()); + // 获取前50条 List 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 e : map.entrySet()) { + if (e.getKey().contains("其他")) + otherDisputeNum += e.getValue(); + } + // 根据数量排序 List> list = new ArrayList<>(map.entrySet()); list.sort((o1, o2) -> o2.getValue() - o1.getValue()); List result = new ArrayList(); - Map hashMap = new HashMap<>(); - DecimalFormat df = new DecimalFormat("#0.0"); + Map 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 entry = list.get(i); + int idx = 0; + + int subNum = 0; + while (subNum < 4) { + Map.Entry 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 entry = list.get(i); + for (; idx < list.size(); idx++) { + Map.Entry 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 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 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 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 dataList = dictService.getList(code); + List dataList = dictService.getList(BusinessConstant.DICT_KEY_STREET); // 根据街道分组 Map> 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 userList = userService.list(Wrappers.lambdaQuery().eq(User::getDeptId, deptId)); + List userList = UserCache.getServerWindowList(); // 根据部门分组 Map> town = appeals.stream().collect(Collectors.groupingBy(Appeal::getHandleDept)); diff --git a/src/main/java/org/springblade/modules/business/vo/AppealMediationVO.java b/src/main/java/org/springblade/modules/business/vo/AppealMediationVO.java index 425aac1..4e0735e 100644 --- a/src/main/java/org/springblade/modules/business/vo/AppealMediationVO.java +++ b/src/main/java/org/springblade/modules/business/vo/AppealMediationVO.java @@ -103,6 +103,11 @@ public class AppealMediationVO implements Serializable { */ private Date firstRegTime; + /** + * 登记时间(来访时间) + */ + private Date regTime; + /** * 是否越级上报, 0:否, 1:是 */ diff --git a/src/main/java/org/springblade/modules/resource/endpoint/OssEndpoint.java b/src/main/java/org/springblade/modules/resource/endpoint/OssEndpoint.java index f1b57b4..fd864c8 100644 --- a/src/main/java/org/springblade/modules/resource/endpoint/OssEndpoint.java +++ b/src/main/java/org/springblade/modules/resource/endpoint/OssEndpoint.java @@ -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 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); } diff --git a/src/main/java/org/springblade/modules/system/controller/DictCommonController.java b/src/main/java/org/springblade/modules/system/controller/DictCommonController.java index 0802e62..1baf681 100644 --- a/src/main/java/org/springblade/modules/system/controller/DictCommonController.java +++ b/src/main/java/org/springblade/modules/system/controller/DictCommonController.java @@ -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> getServerWindowList() { - String deptId = "1666621912872280065"; - List userList = userService.list(Wrappers.lambdaQuery().eq(User::getDeptId, deptId)); - + List userList = UserCache.getServerWindowList(); List 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> getDisputeList() { - String code = "dispute_type"; - List dataList = dictService.getListThirdLevel(code); + List 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> getStreetList() { - String code = "street"; - List dataList = dictService.getList(code); + List dataList = dictService.getList(BusinessConstant.DICT_KEY_STREET); return R.data(BeanUtil.copy(dataList, DictSimpleVO.class)); } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index c88f8f4..de1fcce 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -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 # diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 3271973..c04202d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -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 diff --git a/src/main/resources/log/logback-dev.xml b/src/main/resources/log/logback-dev.xml index 792e330..a3683ff 100644 --- a/src/main/resources/log/logback-dev.xml +++ b/src/main/resources/log/logback-dev.xml @@ -25,7 +25,7 @@ - target/log/info-%d{yyyy-MM-dd}.log + log/info-%d{yyyy-MM-dd}.log %n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n @@ -42,7 +42,7 @@ - target/log/error-%d{yyyy-MM-dd}.log + log/error-%d{yyyy-MM-dd}.log %n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger{50}] %n%-5level: %msg%n