master
liuqingkun 3 years ago
parent 28fc0241e6
commit d0f21df318
  1. 21
      doc/api.md
  2. BIN
      doc/上传数据_模板.xls
  3. 2
      src/main/java/org/springblade/modules/business/controller/AppealRegController.java
  4. 2
      src/main/java/org/springblade/modules/business/entity/DataEntity.java
  5. 2
      src/main/java/org/springblade/modules/business/mapper/AppealRegMapper.xml
  6. 2
      src/main/java/org/springblade/modules/business/service/ILargeScreenService.java
  7. 25
      src/main/java/org/springblade/modules/business/service/impl/AppealMediationServiceImpl.java
  8. 31
      src/main/java/org/springblade/modules/business/service/impl/AppealRegServiceImpl.java
  9. 124
      src/main/java/org/springblade/modules/business/service/impl/LargeScreenServiceImpl.java
  10. 6
      src/main/java/org/springblade/modules/business/vo/AppealMediationVO.java
  11. 36
      src/main/resources/application-dev.yml
  12. 13
      src/main/resources/application-prod.yml
  13. 236
      src/main/resources/application-test.yml
  14. 124
      src/main/resources/log/logback-dev.xml
  15. 4
      src/main/resources/log/logback-prod.xml

@ -627,7 +627,7 @@
| talkingHis | String | N | 接谈记录 | | talkingHis | String | N | 接谈记录 |
| talkingAdvice | String | N | 接谈意见 | | talkingAdvice | String | N | 接谈意见 |
| disputeLevel | String | N | 事件等级 | | disputeLevel | String | N | 事件等级 |
| status | String | N | 诉求状态 | | appealStatus | String | N | 诉求状态 |
| dutyDeptIds | String | N | 负责部门ID, 以逗号分割 | | dutyDeptIds | String | N | 负责部门ID, 以逗号分割 |
| copyDeptIds | String | N | 抄送部门ID, 以逗号分割 | | copyDeptIds | String | N | 抄送部门ID, 以逗号分割 |
| feedbackDeadline | String | N | 反馈时限 | | feedbackDeadline | String | N | 反馈时限 |
@ -636,7 +636,7 @@
| visitTime | String | N | 来访时间 | | visitTime | String | N | 来访时间 |
| submitTime | String | N | 提交时间 | | submitTime | String | N | 提交时间 |
| fileList | list | N | 上传文件列表 | | fileList | list | N | 上传文件列表 |
| - url | list | N | 上传文件路径 | | - fileAddr | list | N | 上传文件路径 |
- 请求示例 - 请求示例
```json ```json
@ -702,10 +702,11 @@
"code": 200, "code": 200,
"success": true, "success": true,
"data": { "data": {
"link": "http://xxxx/file.png", "link": "http://192.168.1.106:9000/mediation-paltform/upload/20230613/e39ca485ce9726eb1e2f65b794c9aba7.png",
"domain": "http:xxx", "domain": "http://192.168.1.106:9000/mediation-paltform",
"name": "file.png", "name": "upload/20230613/e39ca485ce9726eb1e2f65b794c9aba7.png",
"originalName": "file" "originalName": "20230220174333.png",
"attachId": null
}, },
"msg": "操作成功" "msg": "操作成功"
} }
@ -752,10 +753,10 @@
"code": 200, "code": 200,
"success": true, "success": true,
"data": { "data": {
"mon": "20", "week": 7,
"quarterly": "50", "year": 7,
"year": "200", "mon": 7,
"all": "300" "day": 4
}, },
"msg": "操作成功" "msg": "操作成功"
} }

Binary file not shown.

@ -97,7 +97,7 @@ public class AppealRegController extends BladeController {
IPage<AppealListVO> vos = regService.getPage(Condition.getPage(query), appealStatus, startTime, endTime, appealType, windowId, username); IPage<AppealListVO> vos = regService.getPage(Condition.getPage(query), appealStatus, startTime, endTime, appealType, windowId, username);
vos.getRecords().forEach(vo -> { vos.getRecords().forEach(vo -> {
String cardNo = vo.getCardno(); String cardNo = vo.getCardno();
if (Func.isNotBlank(cardNo)) { if (Func.isNotBlank(cardNo) && cardNo.length() > 6) {
vo.setCardno(cardNo.substring(0, cardNo.length() - 6) + "******"); vo.setCardno(cardNo.substring(0, cardNo.length() - 6) + "******");
} }
}); });

@ -7,5 +7,5 @@ public class DataEntity {
private String name; private String name;
private Integer num; private Integer value;
} }

@ -60,7 +60,7 @@
/* 找出每个诉求的最后一次登记记录 */ /* 找出每个诉求的最后一次登记记录 */
FROM (SELECT t.* FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY appeal_id ORDER BY create_time DESC) AS row_index FROM mp_appeal_reg reg) t WHERE t.row_index = 1) t2 FROM (SELECT t.* FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY appeal_id ORDER BY create_time DESC) AS row_index FROM mp_appeal_reg reg) t WHERE t.row_index = 1) t2
/* 找出每次登记的第一张用户 */ /* 找出每次登记的第一张用户 */
LEFT JOIN (SELECT t.* FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY cardno ORDER BY sort ASC) AS row_index FROM mp_appeal_visitor vis) t WHERE t.row_index = 1) t3 ON t2.id = t3.appeal_reg_id LEFT JOIN (SELECT t.* FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY appeal_reg_id ORDER BY sort ASC) AS row_index FROM mp_appeal_visitor vis) t WHERE t.row_index = 1) t3 ON t2.id = t3.appeal_reg_id
) b ON a.id = b.appeal_id ) b ON a.id = b.appeal_id
LEFT JOIN blade_dict_biz biz ON a.dispute_id = biz.id LEFT JOIN blade_dict_biz biz ON a.dispute_id = biz.id
WHERE a.source_type = 0 WHERE a.source_type = 0

@ -42,7 +42,7 @@ public interface ILargeScreenService {
Map<String, List<Object>> getAppealByMon(); Map<String, List<Object>> getAppealByMon();
Map<String, Object> getAppealTypePercent(); List<Map<String, Object>> getAppealTypePercent();
Map<String, Object> getAppealSubmitCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException; Map<String, Object> getAppealSubmitCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException;

@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springblade.common.constant.BusinessConstant; import org.springblade.common.constant.BusinessConstant;
import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.Func;
import org.springblade.modules.business.entity.*; import org.springblade.modules.business.entity.*;
import org.springblade.modules.business.mapper.AppealMediationMapper; import org.springblade.modules.business.mapper.AppealMediationMapper;
@ -73,8 +74,9 @@ public class AppealMediationServiceImpl extends BaseServiceImpl<AppealMediationM
appeal.setSourceType(BusinessConstant.SOURCE_TYPE_SYSTEM); appeal.setSourceType(BusinessConstant.SOURCE_TYPE_SYSTEM);
// 更新诉求和诉求登记的信息 // 更新诉求和诉求登记的信息
appeal.setSkipGrant(appeal.getSkipGrant() == -1 ? BusinessConstant.CODE_FALSE : appeal.getSkipGrant()); appeal.setSkipGrant((Func.isEmpty(appeal.getSkipGrant()) || appeal.getSkipGrant() == -1) ? BusinessConstant.CODE_FALSE : appeal.getSkipGrant());
appeal.setDisputeLevel(appeal.getDisputeLevel() == -1 ? BusinessConstant.DISPUTE_LEVEL_ZERO : appeal.getDisputeLevel()); appeal.setDisputeLevel((Func.isEmpty(appeal.getDisputeLevel()) || appeal.getDisputeLevel() == -1) ? BusinessConstant.DISPUTE_LEVEL_ZERO : appeal.getDisputeLevel());
appeal.setStatus(entity.getAppealStatus());
appealService.updateById(appeal); appealService.updateById(appeal);
reg.setId(entity.getAppealRegId()); reg.setId(entity.getAppealRegId());
appealRegService.updateById(reg); appealRegService.updateById(reg);
@ -82,17 +84,20 @@ public class AppealMediationServiceImpl extends BaseServiceImpl<AppealMediationM
List<AppealMediationDetailListVO> talkingHisList = entity.getTalkingHisList(); List<AppealMediationDetailListVO> talkingHisList = entity.getTalkingHisList();
if (Func.isEmpty(talkingHisList)) if (Func.isEmpty(talkingHisList))
return false; return false;
mediation.setTalkingTime(talkingHisList.get(0).getTalkingTime()); mediation.setTalkingTime(talkingHisList.get(talkingHisList.size() - 1).getTalkingTime());
mediation.setTalkingHis(talkingHisList.get(0).getTalkingHis()); mediation.setTalkingHis(talkingHisList.get(talkingHisList.size() - 1).getTalkingHis());
mediation.setSubmitTime(Func.isEmpty(mediation.getSubmitTime()) ? DateUtil.now() : mediation.getSubmitTime());
save(mediation); save(mediation);
List<AppealMediationFile> fileList = entity.getFileList(); List<AppealMediationFile> fileList = entity.getFileList();
if (Func.isNotEmpty(fileList)) {
fileList.forEach(file -> { fileList.forEach(file -> {
file.setAppealId(mediation.getAppealId()); file.setAppealId(mediation.getAppealId());
file.setAppealId(mediation.getAppealRegId()); file.setAppealRegId(mediation.getAppealRegId());
file.setMediationId(mediation.getId()); file.setMediationId(mediation.getId());
}); });
fileService.saveBatch(fileList); fileService.saveBatch(fileList);
}
return true; return true;
} }
@ -130,7 +135,9 @@ public class AppealMediationServiceImpl extends BaseServiceImpl<AppealMediationM
// 4. 组织返回对象数据 // 4. 组织返回对象数据
vo.setAppealId(Long.valueOf(appealId)); vo.setAppealId(Long.valueOf(appealId));
vo.setAppealRegId(appealReg.getId());
vo.setVisitors(visitorList); vo.setVisitors(visitorList);
vo.setPersonNum(visitorList.size());
vo.setStreetId(appeal.getStreetId()); vo.setStreetId(appeal.getStreetId());
vo.setDisputeId(appeal.getDisputeId()); vo.setDisputeId(appeal.getDisputeId());
vo.setDisputeName(appeal.getDisputeName()); vo.setDisputeName(appeal.getDisputeName());
@ -142,16 +149,16 @@ public class AppealMediationServiceImpl extends BaseServiceImpl<AppealMediationM
vo.setLegalPaper(appealReg.getLegalPaper()); vo.setLegalPaper(appealReg.getLegalPaper());
vo.setFirstRegTime(appeal.getFirstRegTime()); vo.setFirstRegTime(appeal.getFirstRegTime());
vo.setProblemDesc(appeal.getProblemDesc()); vo.setProblemDesc(appeal.getProblemDesc());
vo.setAppealStatus(appeal.getStatus());
vo.setTalkingHisList(detailList); vo.setTalkingHisList(detailList);
if (Func.isNotEmpty(mediation)) { if (Func.isNotEmpty(mediation)) {
List<AppealMediationFile> fileList = fileService.list( List<AppealMediationFile> fileList = fileService.list(
Wrappers.<AppealMediationFile>lambdaQuery().eq(AppealMediationFile::getMediationId, mediation.getId())); Wrappers.<AppealMediationFile>lambdaQuery().eq(AppealMediationFile::getMediationId, mediation.getId()));
vo.setAttitude(mediation.getAttitude()); vo.setAttitude(mediation.getAttitude());
vo.setTalkingAdvice(mediation.getAttitude()); vo.setTalkingAdvice(mediation.getTalkingAdvice());
vo.setDutyDeptIds(mediation.getAttitude()); vo.setDutyDeptIds(mediation.getDutyDeptIds());
vo.setCopyDeptIds(mediation.getAttitude()); vo.setCopyDeptIds(mediation.getCopyDeptIds());
vo.setDisputeLevel(appeal.getDisputeLevel()); vo.setDisputeLevel(appeal.getDisputeLevel());
vo.setFeedbackDeadline(mediation.getFeedbackDeadline()); vo.setFeedbackDeadline(mediation.getFeedbackDeadline());
vo.setFinishDeadline(mediation.getFinishDeadline()); vo.setFinishDeadline(mediation.getFinishDeadline());

@ -30,6 +30,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.modules.business.entity.Appeal; import org.springblade.modules.business.entity.Appeal;
import org.springblade.modules.business.entity.AppealReg; import org.springblade.modules.business.entity.AppealReg;
import org.springblade.modules.business.entity.AppealVisitor; import org.springblade.modules.business.entity.AppealVisitor;
@ -132,8 +133,10 @@ public class AppealRegServiceImpl extends BaseServiceImpl<AppealRegMapper, Appea
// 1. 先保存appeal, 固定数据来源为系统 // 1. 先保存appeal, 固定数据来源为系统
appeal.setSourceType(BusinessConstant.SOURCE_TYPE_SYSTEM); appeal.setSourceType(BusinessConstant.SOURCE_TYPE_SYSTEM);
int nums = 0; boolean nums = false;
appeal.setFirstRegTime(DateUtil.now()); IAppealService appealService = SpringUtil.getBean(IAppealService.class);
appeal.setStatus(BusinessConstant.APPEAL_STATUS_WAITING);
if (Func.isEmpty(appeal.getId())) { if (Func.isEmpty(appeal.getId())) {
ServerWindowsDispute swDispute = swDisputeService.getOne(Wrappers.<ServerWindowsDispute>lambdaQuery().eq(ServerWindowsDispute::getDisputeId, appeal.getDisputeId())); ServerWindowsDispute swDispute = swDisputeService.getOne(Wrappers.<ServerWindowsDispute>lambdaQuery().eq(ServerWindowsDispute::getDisputeId, appeal.getDisputeId()));
if (Func.isNotEmpty(swDispute)) { if (Func.isNotEmpty(swDispute)) {
@ -142,12 +145,12 @@ public class AppealRegServiceImpl extends BaseServiceImpl<AppealRegMapper, Appea
appeal.setHandleDept(BusinessConstant.DEFAULT_HANDLE_DEPT); appeal.setHandleDept(BusinessConstant.DEFAULT_HANDLE_DEPT);
} }
appeal.setSkipGrant(BusinessConstant.CODE_FALSE); appeal.setSkipGrant(BusinessConstant.CODE_FALSE);
appeal.setStatus(BusinessConstant.APPEAL_STATUS_WAITING); appeal.setFirstRegTime(DateUtil.now());
nums = appealMapper.insert(appeal); nums = appealService.save(appeal);
} else { } else {
nums = appealMapper.updateById(appeal); nums = appealService.updateById(appeal);
} }
if (nums <= 0) { if (!nums) {
return false; return false;
} }
@ -213,13 +216,13 @@ public class AppealRegServiceImpl extends BaseServiceImpl<AppealRegMapper, Appea
// 纠纷等级(事件等级), 0:简单, 1:一般, 2:重大, 3:疑难 // 纠纷等级(事件等级), 0:简单, 1:一般, 2:重大, 3:疑难
if (StringUtils.isNotBlank(excel.getDisputeLevel())) { if (StringUtils.isNotBlank(excel.getDisputeLevel())) {
if ("简单".equals(excel.getDisputeLevel())) { if ("简单".equals(excel.getDisputeLevel())) {
appeal.setDisputeLevel(0); appeal.setDisputeLevel(BusinessConstant.DISPUTE_LEVEL_ZERO);
} else if ("一般".equals(excel.getDisputeLevel())) { } else if ("一般".equals(excel.getDisputeLevel())) {
appeal.setDisputeLevel(1); appeal.setDisputeLevel(BusinessConstant.DISPUTE_LEVEL_ONE);
} else if ("重大".equals(excel.getDisputeLevel())) { } else if ("重大".equals(excel.getDisputeLevel())) {
appeal.setDisputeLevel(2); appeal.setDisputeLevel(BusinessConstant.DISPUTE_LEVEL_TWO);
} else if ("疑难".equals(excel.getDisputeLevel())) { } else if ("疑难".equals(excel.getDisputeLevel())) {
appeal.setDisputeLevel(3); appeal.setDisputeLevel(BusinessConstant.DISPUTE_LEVEL_THREE);
} }
} }
@ -228,18 +231,18 @@ public class AppealRegServiceImpl extends BaseServiceImpl<AppealRegMapper, Appea
try { try {
appeal.setFirstRegTime(dateFormat.parse(excel.getFirstRegTime())); appeal.setFirstRegTime(dateFormat.parse(excel.getFirstRegTime()));
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); log.error("时间格式转换错误, 格式应为yyyy-mm-dd");
} }
} }
// 诉求状态(办理状态) // 诉求状态(办理状态)
if (StringUtils.isNotBlank(excel.getStatus())) { if (StringUtils.isNotBlank(excel.getStatus())) {
if ("正在处理".equals(excel.getStatus())) { if ("正在处理".equals(excel.getStatus())) {
appeal.setStatus(1); appeal.setStatus(BusinessConstant.APPEAL_STATUS_HANDING);
} else if ("达成协议".equals(excel.getStatus())) { } else if ("达成协议".equals(excel.getStatus())) {
appeal.setStatus(2); appeal.setStatus(BusinessConstant.APPEAL_STATUS_AGREEMENT);
} else if ("调解成功".equals(excel.getStatus()) || "完成归档".equals(excel.getStatus())) { } else if ("调解成功".equals(excel.getStatus()) || "完成归档".equals(excel.getStatus())) {
appeal.setStatus(3); appeal.setStatus(BusinessConstant.APPEAL_STATUS_FINISH);
} }
} }

@ -19,9 +19,12 @@ package org.springblade.modules.business.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springblade.common.cache.DictBizCache; import org.springblade.common.cache.DictBizCache;
import org.springblade.common.constant.BusinessConstant;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.business.entity.Appeal; import org.springblade.modules.business.entity.Appeal;
import org.springblade.modules.business.entity.AppealVisitor; import org.springblade.modules.business.entity.AppealVisitor;
import org.springblade.modules.business.entity.DataEntity; import org.springblade.modules.business.entity.DataEntity;
@ -29,6 +32,9 @@ import org.springblade.modules.business.service.IAppealService;
import org.springblade.modules.business.service.IAppealVisitorService; import org.springblade.modules.business.service.IAppealVisitorService;
import org.springblade.modules.business.service.ILargeScreenService; import org.springblade.modules.business.service.ILargeScreenService;
import org.springblade.modules.business.utils.LocalDateTimeUtils; import org.springblade.modules.business.utils.LocalDateTimeUtils;
import org.springblade.modules.system.entity.DictBiz;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.service.IDictBizService;
import org.springblade.modules.system.service.IUserService; import org.springblade.modules.system.service.IUserService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -57,6 +63,7 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
private final IUserService userService; private final IUserService userService;
private final IDictBizService dictService;
@Override @Override
public Map<String, Object> getMediateFinish() { public Map<String, Object> getMediateFinish() {
@ -98,23 +105,25 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>();
// 总化解数
map.put("all", appealService.count(wrapper));
wrapper.clear();
// 本年度化解数 // 本年度化解数
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime()); wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime());
map.put("year", appealService.count(wrapper)); map.put("year", appealService.count(wrapper));
wrapper.clear(); wrapper.clear();
// 本季度化解数 // 本月度化解数
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.quarterStartTime(), LocalDateTimeUtils.quarterEndTime());
map.put("quarterly", appealService.count(wrapper));
wrapper.clear();
// 本月化解数
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime()); wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.monthStartTime(), LocalDateTimeUtils.monthEndTime());
map.put("mon", appealService.count(wrapper)); map.put("mon", appealService.count(wrapper));
wrapper.clear();
// 本周度化解数
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.weekStartTime(), LocalDateTimeUtils.weekEndTime());
map.put("week", appealService.count(wrapper));
wrapper.clear();
// 本日化解数
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.todayStartTime(), LocalDateTimeUtils.todayEndTime());
map.put("day", appealService.count(wrapper));
wrapper.clear();
return map; return map;
} }
@ -127,8 +136,6 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
state.add(1); state.add(1);
LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>();
// 只查这几个字段值
// wrapper.select(Appeal::getId, Appeal::getDisputeName, Appeal::getFirstRegTime, Appeal::getStatus, Appeal::getStreetId);
// 待处理、正在处理 // 待处理、正在处理
wrapper.in(Appeal::getStatus, state); wrapper.in(Appeal::getStatus, state);
// 根据登记时间倒序 // 根据登记时间倒序
@ -139,7 +146,11 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
List<Appeal> appealList = appeals.stream().limit(50).collect(Collectors.toList()); List<Appeal> appealList = appeals.stream().limit(50).collect(Collectors.toList());
// 所属街道赋字典值 // 所属街道赋字典值
appealList.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue())); appealList.forEach(appeal -> {
appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue());
String disputeName = Func.isEmpty(appeal.getDisputeName()) ? DictBizCache.getById(appeal.getDisputeId()).getDictValue() : appeal.getDisputeName();
appeal.setDisputeName(disputeName);
});
return appealList; return appealList;
} }
@ -177,9 +188,13 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
} }
@Override @Override
public Map<String, Object> getAppealTypePercent() { public List<Map<String, Object>> getAppealTypePercent() {
// 先查所有 // 先查所有
List<Appeal> appeals = appealService.list(); List<Appeal> appeals = appealService.list();
appeals.forEach(appeal -> {
String disputeName = Func.isEmpty(appeal.getDisputeName()) ? DictBizCache.getById(appeal.getDisputeId()).getDictValue() : appeal.getDisputeName();
appeal.setDisputeName(disputeName);
});
// 根据纠纷类型分组 // 根据纠纷类型分组
Map<String, List<Appeal>> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getDisputeName)); Map<String, List<Appeal>> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getDisputeName));
@ -195,30 +210,41 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet()); List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
list.sort((o1, o2) -> o2.getValue() - o1.getValue()); list.sort((o1, o2) -> o2.getValue() - o1.getValue());
List result = new ArrayList();
Map<String, Object> hashMap = new HashMap<>(); Map<String, Object> hashMap = new HashMap<>();
DecimalFormat df = new DecimalFormat("#0.0"); DecimalFormat df = new DecimalFormat("#0.0");
// 如果类型小于5,正常计算
if (list.size() <= 5) { if (list.size() <= 5) {
// 如果类型小于5,正常计算
for (Map.Entry<String, Integer> entry : list) { for (Map.Entry<String, Integer> entry : list) {
hashMap.put(entry.getKey(), df.format((double) entry.getValue() / (double) appeals.size() * 100) + "%"); hashMap = new HashMap<>();
} hashMap.put("name", entry.getKey());
hashMap.put("value", entry.getValue());
result.add(hashMap);
} }
} else {
// 如果类型大于5,前五正常计算,其余全部按照其他纠纷计算 // 如果类型大于5,前五正常计算,其余全部按照其他纠纷计算
else {
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
Map.Entry<String, Integer> entry = list.get(i); Map.Entry<String, Integer> entry = list.get(i);
hashMap.put(entry.getKey(), df.format((double) entry.getValue() / (double) appeals.size() * 100) + "%"); hashMap = new HashMap<>();
hashMap.put("name", entry.getKey());
hashMap.put("value", entry.getValue());
result.add(hashMap);
} }
int size = 0; int size = 0;
for (int i = 5; i < list.size(); i++) { for (int i = 5; i < list.size(); i++) {
Map.Entry<String, Integer> entry = list.get(i); Map.Entry<String, Integer> entry = list.get(i);
size += entry.getValue(); size += entry.getValue();
} }
hashMap.put("其他纠纷", df.format((double) size / (double) appeals.size() * 100) + "%");
hashMap = new HashMap<>();
hashMap.put("name", "其他纠纷");
hashMap.put("value", size);
result.add(hashMap);
} }
return hashMap; return result;
} }
@Override @Override
@ -342,48 +368,62 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
public Map<String, List<DataEntity>> getAppealHot() { public Map<String, List<DataEntity>> getAppealHot() {
Map<String, List<DataEntity>> map = new HashMap(); Map<String, List<DataEntity>> map = new HashMap();
// 化解成功状态数组 // 化解成功状态数组
List<Integer> state = new ArrayList<>(); List<Integer> state = Arrays.asList(BusinessConstant.APPEAL_STATUS_AGREEMENT, BusinessConstant.APPEAL_STATUS_FINISH);
state.add(2);
state.add(3);
// 获取所有化解成功的诉求记录
LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>();
wrapper.in(Appeal::getStatus, state); wrapper.in(Appeal::getStatus, state);
List<Appeal> appeals = appealService.list(wrapper); List<Appeal> appeals = appealService.list(wrapper);
appeals.forEach(appeal -> {
appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue());
appeal.setName(userService.getById(appeal.getHandleDept()).getName());
});
// 过滤掉无街道和处理部门的, 防止异常
appeals = appeals.stream().filter(
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);
// 根据街道分组 // 根据街道分组
Map<String, List<Appeal>> street = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreet)); Map<Long, List<Appeal>> street = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreetId));
Set<String> names = street.keySet();
// 封装到数据对象 // 封装到数据对象
List<DataEntity> strees = new ArrayList<>(); List<DataEntity> strees = new ArrayList<>();
for (String name : names) { dataList.forEach(dictBiz -> {
Long dictBizId = dictBiz.getId();
DataEntity entity = new DataEntity(); DataEntity entity = new DataEntity();
entity.setName(name); entity.setName(dictBiz.getDictValue());
entity.setNum(street.get(name).size()); entity.setValue(street.containsKey(dictBizId) ? street.get(dictBizId).size() : 0);
strees.add(entity); strees.add(entity);
} });
// 倒序 // 倒序
List<DataEntity> streeList = strees.stream().sorted(Comparator.comparing(DataEntity::getNum).reversed()).collect(Collectors.toList()); List<DataEntity> streeList = strees.stream().sorted(Comparator.comparing(DataEntity::getValue).reversed()).collect(Collectors.toList());
map.put("street", streeList); map.put("street", streeList);
// 获取所有部门
String deptId = "1666621912872280065";
List<User> userList = userService.list(Wrappers.<User>lambdaQuery().eq(User::getDeptId, deptId));
// 根据部门分组 // 根据部门分组
Map<String, List<Appeal>> town = appeals.stream().collect(Collectors.groupingBy(Appeal::getName)); Map<Long, List<Appeal>> town = appeals.stream().collect(Collectors.groupingBy(Appeal::getHandleDept));
Set<String> depts = town.keySet();
// 封装到数据对象 // 封装到数据对象
List<DataEntity> towns = new ArrayList<>(); List<DataEntity> towns = new ArrayList<>();
for (String name : depts) { userList.forEach(user -> {
Long id = user.getId();
DataEntity entity = new DataEntity(); DataEntity entity = new DataEntity();
entity.setName(name); entity.setName(user.getName());
entity.setNum(town.get(name).size()); entity.setValue(town.containsKey(id) ? town.get(id).size() : 0);
towns.add(entity); towns.add(entity);
} });
// 倒序 // 倒序
List<DataEntity> townList = towns.stream().sorted(Comparator.comparing(DataEntity::getNum).reversed()).collect(Collectors.toList()); List<DataEntity> townList = towns.stream().sorted(Comparator.comparing(DataEntity::getValue).reversed()).collect(Collectors.toList());
map.put("town", townList); map.put("town", townList);
return map; return map;

@ -63,6 +63,11 @@ public class AppealMediationVO implements Serializable {
*/ */
private String disputeName; private String disputeName;
/**
* 诉求状态
*/
private Integer appealStatus;
/** /**
* 何单位处理过-单位id * 何单位处理过-单位id
*/ */
@ -150,6 +155,7 @@ public class AppealMediationVO implements Serializable {
*/ */
private String remark; private String remark;
/** /**
* 提交时间 * 提交时间
*/ */

@ -1,4 +1,4 @@
#数据源配置 ##数据源配置 - dev
spring: spring:
redis: redis:
##redis 单机环境配置 ##redis 单机环境配置
@ -7,10 +7,6 @@ spring:
password: password:
database: 0 database: 0
ssl: false ssl: false
##redis 集群环境配置
#cluster:
# nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
# commandTimeout: 5000
datasource: datasource:
# MySql # MySql
url: jdbc:mysql://localhost:3306/mediation_platform?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true url: jdbc:mysql://localhost:3306/mediation_platform?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
@ -22,17 +18,19 @@ social:
enabled: true enabled: true
domain: http://127.0.0.1:1888 domain: http://127.0.0.1:1888
#blade配置 #server:
blade: # port: 10000
#分布式锁配置 #
lock: ##数据源配置
##是否启用分布式锁 #spring:
enabled: false # redis:
##redis服务地址 # ##redis 单机环境配置
address: redis://127.0.0.1:6379 # host: 223.80.105.200
#本地文件上传 # port: 41307
file: # password: asdf.1234
remote-mode: true # database: 0
upload-domain: http://localhost:8999 # ssl: false
remote-path: /usr/share/nginx/html # datasource:
# url: jdbc:mysql://223.80.105.200:41306/mediation_platform?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
# username: root
# password: asdf.1234

@ -1,12 +1,15 @@
server:
port: 10000
#数据源配置 #数据源配置
spring: spring:
redis: redis:
##redis 单机环境配置 ##redis 单机环境配置
##将docker脚本部署的redis服务映射为宿主机ip ##将docker脚本部署的redis服务映射为宿主机ip
##生产环境推荐使用阿里云高可用redis服务并设置密码 ##生产环境推荐使用阿里云高可用redis服务并设置密码
host: 127.0.0.1 host: 223.80.105.200
port: 6379 port: 41307
password: password: asdf.1234
database: 0 database: 0
ssl: false ssl: false
##redis 集群环境配置 ##redis 集群环境配置
@ -14,9 +17,9 @@ spring:
# nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003 # nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
# commandTimeout: 5000 # commandTimeout: 5000
datasource: datasource:
url: jdbc:mysql://localhost:3306/bladex_boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true url: jdbc:mysql://223.80.105.200:41306/mediation_platform?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
username: root username: root
password: root password: asdf.1234
#第三方登陆 #第三方登陆
social: social:

@ -1,40 +1,226 @@
#数据源配置 #服务器配置
server:
port: 10000
undertow:
threads:
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
io: 16
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
worker: 400
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
buffer-size: 1024
# 是否分配的直接内存
direct-buffers: true
spring: spring:
redis: redis:
##redis 单机环境配置 ##redis 单机环境配置
##将docker脚本部署的redis服务映射为宿主机ip ##将docker脚本部署的redis服务映射为宿主机ip
##生产环境推荐使用阿里云高可用redis服务并设置密码 ##生产环境推荐使用阿里云高可用redis服务并设置密码
host: 127.0.0.1 host: 223.80.105.200
port: 6379 port: 41307
password: password: asdf.1234
database: 0 database: 0
ssl: false ssl: false
##redis 集群环境配置
#cluster:
# nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
# commandTimeout: 5000
datasource: datasource:
url: jdbc:mysql://localhost:3306/bladex_boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://223.80.105.200:41306/mediation_platform?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
username: root username: root
password: root password: asdf.1234
druid:
# MySql、PostgreSQL、SqlServer、DaMeng校验
validation-query: select 1
# Oracle、YashanDB校验
#oracle: true
#validation-query: select 1 from dual
validation-query-timeout: 2000
initial-size: 5
max-active: 20
min-idle: 5
max-wait: 60000
test-on-borrow: false
test-on-return: false
test-while-idle: true
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
stat-view-servlet:
enabled: true
login-username: blade
login-password: 1qaz@WSX
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: '*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*'
session-stat-enable: true
session-stat-max-count: 10
#第三方登陆 # mybatis
social: mybatis-plus:
mapper-locations: classpath:org/springblade/**/mapper/*Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: org.springblade.**.entity
#typeEnumsPackage: org.springblade.dashboard.entity.enums
global-config:
# 关闭MP3.0自带的banner
banner: false
db-config:
#主键类型 0:"数据库ID自增", 1:"不操作", 2:"用户输入ID",3:"数字型snowflake", 4:"全局唯一ID UUID", 5:"字符串型snowflake";
id-type: assign_id
#字段策略
insert-strategy: not_null
update-strategy: not_null
where-strategy: not_null
#驼峰下划线转换
table-underline: true
# 逻辑删除配置
# 逻辑删除全局值(1表示已删除,这也是Mybatis Plus的默认配置)
logic-delete-value: 1
# 逻辑未删除全局值(0表示未删除,这也是Mybatis Plus的默认配置)
logic-not-delete-value: 0
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
jdbc-type-for-null: 'null'
#knife4j配置
knife4j:
#启用
enable: true
#基础认证
basic:
enable: false
username: blade
password: blade
#增强配置
setting:
enableSwaggerModels: true
enableDocumentManage: true
enableHost: false
enableHostText: http://localhost
enableRequestCache: true
enableFilterMultipartApis: false
enableFilterMultipartApiMethodType: POST
language: zh_cn
enableFooter: false
enableFooterCustom: true
footerCustomContent: Copyright © 2023 BladeX All Rights Reserved
#报表配置
report:
enabled: false
database:
provider:
prefix: blade-
#oss默认配置
oss:
enabled: true enabled: true
domain: http://127.0.0.1:1888 name: qiniu
tenant-mode: true
endpoint: http://prt1thnw3.bkt.clouddn.com
access-key: N_Loh1ngBqcJovwiAJqR91Ifj2vgOWHOf8AwBA_h
secret-key: AuzuA1KHAbkIndCU0dB3Zfii2O3crHNODDmpxHRS
bucket-name: bladex
#blade配置 #blade配置
blade: blade:
#分布式锁配置 #token配置
lock: token:
##是否启用分布式锁 #是否有状态
state: false
#是否单用户登录
single: false
#单用户登录范围
single-level: all
#token签名
#使用 @org.springblade.test.SignKeyGenerator 获取
sign-key: vaD8YIYMYcoCQi63y8X0szEGsKy8Gstj
#redis序列化方式
redis:
# serializer-type: protostuff
serializer-type: json
#接口配置
api:
#报文加密配置
crypto:
#启用报文加密配置
enabled: false enabled: false
##将docker脚本部署的redis服务映射为宿主机ip #使用AesUtil.genAesKey()生成
##生产环境推荐使用阿里云高可用redis服务并设置密码 aes-key: O2BEeIv399qHQNhD6aGW8R8DEj4bqHXm
address: redis://127.0.0.1:6379 #使用DesUtil.genDesKey()生成
password: 123456 des-key: jMVCBsFGDQr1USHo
#本地文件上传 #jackson配置
file: jackson:
remote-mode: true #null自动转空值
upload-domain: http://localhost:8999 null-to-empty: true
remote-path: /usr/share/nginx/html #大数字自动转字符串
big-num-to-string: true
#支持text文本请求,与报文加密同时开启
support-text-plain: false
#日志配置
log:
request:
#开启控制台请求日志
enabled: true
#控制台请求日志忽略
skip-url:
- /blade-desk/notice/list
- /blade-chat/weixin/**
#开启错误日志入库
error-log: true
#xss配置
xss:
enabled: true
skip-url:
- /blade-chat/weixin
- /blade-desk/notice/submit
#安全框架配置
secure:
#接口放行
skip-url:
- /blade-test/**
- /blade-business/**
- /blade-system/dict/common/**
#授权认证配置
auth:
- method: POST
pattern: /blade-desk/dashboard/upload
expression: "hasTimeAuth(9, 17)"
- method: POST
pattern: /blade-desk/dashboard/submit
expression: "hasAnyRole('administrator', 'admin', 'user')"
#动态签名认证配置
sign:
- method: ALL
pattern: /blade-desk/dashboard/sign
crypto: "sha1"
#多终端认证配置
client:
- client-id: sword
path-patterns:
- /blade-sword/**
- client-id: saber
path-patterns:
- /blade-saber/**
#多租户配置
tenant:
#多租户增强
enhance: true
#多租户授权保护
license: false
#动态数据源功能
dynamic-datasource: false
#动态数据源全局扫描
dynamic-global: false
#多租户字段名
column: tenant_id
#排除多租户逻辑
exclude-tables:
- blade_user
#第三方登陆
social:
enabled: false
domain: http://127.0.0.1:1888

@ -21,10 +21,44 @@
</encoder> </encoder>
</appender> </appender>
<!-- 生成日志文件 -->
<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>
</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>
</encoder>
<!-- 打印日志级别 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 生成日志文件 -->
<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>
</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>
</encoder>
<!-- 打印日志级别 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'> <if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
<then> <then>
<!-- 推送日志至elk --> <!-- 推送日志至elk -->
<appender name="STDOUT_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <appender name="INFO_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${DESTINATION}</destination> <destination>${DESTINATION}</destination>
<!-- 日志输出编码 --> <!-- 日志输出编码 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
@ -53,6 +87,50 @@
<stackTrace/> <stackTrace/>
</providers> </providers>
</encoder> </encoder>
<!-- 打印日志级别 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 推送日志至elk -->
<appender name="ERROR_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${DESTINATION}</destination>
<!-- 日志输出编码 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"traceId": "%X{traceId}",
"requestId": "%X{requestId}",
"accountId": "%X{accountId}",
"tenantId": "%X{tenantId}",
"logLevel": "%level",
"serviceName": "${springAppName:-SpringApp}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"line":"%L",
"message": "%message"
}
</pattern>
</pattern>
<mdc/>
<stackTrace/>
</providers>
</encoder>
<!-- 打印日志级别 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender> </appender>
</then> </then>
</if> </if>
@ -60,54 +138,14 @@
<!-- 日志输出级别 --> <!-- 日志输出级别 -->
<root level="INFO"> <root level="INFO">
<appender-ref ref="STDOUT"/> <appender-ref ref="STDOUT"/>
<appender-ref ref="${STDOUT_APPENDER}"/> <appender-ref ref="${INFO_APPENDER}"/>
<appender-ref ref="${ERROR_APPENDER}"/>
</root> </root>
<logger name="net.sf.ehcache" level="INFO"/> <logger name="net.sf.ehcache" level="INFO"/>
<logger name="druid.sql" level="INFO"/> <logger name="druid.sql" level="INFO"/>
<!-- MyBatis log configure -->
<logger name="com.apache.ibatis" level="INFO"/>
<logger name="org.mybatis.spring" level="INFO"/>
<logger name="java.sql.Connection" level="INFO"/>
<logger name="java.sql.Statement" level="INFO"/>
<logger name="java.sql.PreparedStatement" level="INFO"/>
<!-- 减少部分debug日志 -->
<logger name="druid.sql" level="INFO"/>
<logger name="org.apache.shiro" level="INFO"/>
<logger name="org.mybatis.spring" level="INFO"/>
<logger name="org.springframework" level="INFO"/>
<logger name="org.springframework.context" level="WARN"/>
<logger name="org.springframework.beans" level="WARN"/>
<logger name="com.baomidou.mybatisplus" level="INFO"/>
<logger name="org.apache.ibatis.io" level="INFO"/>
<logger name="org.apache.velocity" level="INFO"/>
<logger name="org.eclipse.jetty" level="INFO"/>
<logger name="io.undertow" level="INFO"/>
<logger name="org.xnio.nio" level="INFO"/>
<logger name="org.thymeleaf" level="INFO"/>
<logger name="springfox.documentation" level="INFO"/>
<logger name="org.hibernate.validator" level="INFO"/>
<logger name="com.netflix.loadbalancer" level="INFO"/>
<logger name="com.netflix.hystrix" level="INFO"/>
<logger name="com.netflix.zuul" level="INFO"/>
<logger name="de.codecentric" level="INFO"/>
<!-- cache INFO -->
<logger name="net.sf.ehcache" level="INFO"/>
<logger name="org.springframework.cache" level="INFO"/>
<!-- cloud -->
<logger name="org.apache.http" level="INFO"/>
<logger name="com.netflix.discovery" level="INFO"/>
<logger name="com.netflix.eureka" level="INFO"/>
<!-- 业务日志 -->
<Logger name="org.springblade" level="INFO"/>
<Logger name="org.springblade.core.tenant" level="INFO"/>
<Logger name="org.springblade.core.version" level="INFO"/>
<!-- 减少nacos日志 --> <!-- 减少nacos日志 -->
<logger name="com.alibaba.nacos" level="ERROR"/> <logger name="com.alibaba.nacos" level="ERROR"/>
</configuration> </configuration>

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

Loading…
Cancel
Save