Browse Source

涉访涉诉--控制层、服务层、资源层

master
buaixuexideshitongxue 1 month ago
parent
commit
02dc03a4ca
  1. 57
      src/main/java/com/biutag/supervision/controller/data/ComplaintCollectionController.java
  2. 179
      src/main/java/com/biutag/supervision/repository/complaintCollection/ComplaintCollectionResourceService.java
  3. 49
      src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionService.java
  4. 218
      src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionServiceImpl.java

57
src/main/java/com/biutag/supervision/controller/data/ComplaintCollectionController.java

@ -0,0 +1,57 @@
package com.biutag.supervision.controller.data;
import com.biutag.supervision.pojo.Result;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionAddRequest;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionDelRequest;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionPageRequest;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionUpdateRequest;
import com.biutag.supervision.pojo.vo.ComplaintCollectionPageVo;
import com.biutag.supervision.service.complaintCollection.ComplaintCollectionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName ComplaintCollectionController
* @Description 涉访涉诉控制层
* @Author shihao
* @Date 2025/12/23 17:19
*/
@Tag(name = "涉访涉诉控制层", description = "整合的涉访涉诉表")
@Slf4j
@RequestMapping("data/complaintCollection")
@RequiredArgsConstructor
@RestController
public class ComplaintCollectionController {
private final ComplaintCollectionService complaintCollectionService;
@Operation(description = "添加")
@PostMapping("/addComplaintCollection")
public Result<Boolean> addComplaintCollection(@RequestBody ComplaintCollectionAddRequest request){
return complaintCollectionService.addComplaintCollection(request);
}
@Operation(description = "删除")
@PostMapping("/delComplaintCollection")
public Result<Boolean> delComplaintCollection(@RequestBody ComplaintCollectionDelRequest request){
return complaintCollectionService.delComplaintCollection(request);
}
@Operation(description = "修改")
@PostMapping("/updateComplaintCollection")
public Result<Boolean> updateComplaintCollection(@RequestBody ComplaintCollectionUpdateRequest request){
return complaintCollectionService.updateComplaintCollection(request);
}
@Operation(description = "查询")
@PostMapping("/getComplaintCollectionPage")
public Result<ComplaintCollectionPageVo> getComplaintCollectionPage(@RequestBody ComplaintCollectionPageRequest request){
return complaintCollectionService.getComplaintCollectionPage(request);
}
}

179
src/main/java/com/biutag/supervision/repository/complaintCollection/ComplaintCollectionResourceService.java

@ -0,0 +1,179 @@
package com.biutag.supervision.repository.complaintCollection;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.biutag.supervision.common.UserContextHolder;
import com.biutag.supervision.mapper.ComplaintCollectionMapper;
import com.biutag.supervision.pojo.entity.ComplaintCollection;
import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionExistParam;
import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionQueryParam;
import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionUpdateParam;
import com.biutag.supervision.repository.base.BaseDAO;
import jakarta.annotation.Resource;
import jakarta.validation.ValidationException;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
/**
* @ClassName ComplaintCollectionResourceService
* @Description 设访涉诉表资源层
* @Author shihao
* @Date 2025/12/23 16:55
*/
@Service
public class ComplaintCollectionResourceService extends BaseDAO {
@Resource
private ComplaintCollectionMapper complaintCollectionMapper;
public List<ComplaintCollection> query(ComplaintCollectionQueryParam param) {
LambdaQueryWrapper<ComplaintCollection> queryWrapper = new LambdaQueryWrapper<>();
setBatchQuery(param.getId(), param.getIds(), queryWrapper, ComplaintCollection::getId);
setBatchQuery(param.getOriginId(), param.getOriginIds(), queryWrapper, ComplaintCollection::getOriginId);
queryWrapper.eq(StrUtil.isNotBlank(param.getSourceTable()), ComplaintCollection::getSourceTable, param.getSourceTable());
queryWrapper.eq(StrUtil.isNotBlank(param.getResponderName()), ComplaintCollection::getResponderName, param.getResponderName());
if (queryWrapper.getExpression() == null || queryWrapper.getExpression().getSqlSegment().isEmpty()) {
return Collections.emptyList();
}
return complaintCollectionMapper.selectList(queryWrapper);
}
public IPage<ComplaintCollection> pageQuery(ComplaintCollectionQueryParam param) {
// 构建分页对象
Page<ComplaintCollection> page = new Page<>(param.getCurrent(), param.getSize());
LambdaQueryWrapper<ComplaintCollection> qw = new LambdaQueryWrapper<>();
setBatchQuery(param.getSourceTable(), param.getSourceTables(), qw, ComplaintCollection::getSourceTable);
setBatchLikeQuery(param.getOriginId(), param.getOriginIds(), qw, ComplaintCollection::getOriginId);
if (CollectionUtil.size(param.getDiscoveryTimeList()) == 2
&& param.getDiscoveryTimeList().get(0) != null
&& param.getDiscoveryTimeList().get(1) != null) {
qw.between(ComplaintCollection::getDiscoveryTime, param.getDiscoveryTimeList().get(0), param.getDiscoveryTimeList().get(1));
}
// 来件人信息
if (StrUtil.isNotBlank(param.getPersonInfo())) {
String kw = param.getPersonInfo();
qw.and(w -> w.like(ComplaintCollection::getResponderName, kw).or().like(ComplaintCollection::getResponderPhone, kw).or().like(ComplaintCollection::getResponderIdCode, kw));
}
qw.eq(StrUtil.isNotBlank(param.getSecondDepartId()), ComplaintCollection::getSecondDepartId, param.getSecondDepartId());
qw.eq(StrUtil.isNotBlank(param.getHandleMethod()), ComplaintCollection::getHandleMethod, param.getHandleMethod());
qw.eq(StrUtil.isNotBlank(param.getThingDesc()), ComplaintCollection::getThingDesc, param.getThingDesc());
qw.eq(StrUtil.isNotBlank(param.getRepeatt()), ComplaintCollection::getRepeatt, param.getRepeatt());
qw.eq(StrUtil.isNotBlank(param.getLeadApproval()), ComplaintCollection::getLeadApproval, param.getLeadApproval());
// 来件内容
// 标签(表里如果是逗号字符串 tag="URGENT,NORMAL")
// 语义:命中任意一个标签即可(OR)
if (CollectionUtil.isNotEmpty(param.getTags())) {
qw.and(w -> {
boolean first = true;
for (String t : param.getTags()) {
if (StrUtil.isBlank(t)) continue;
if (first) {
w.apply("FIND_IN_SET({0}, tag)", t);
first = false;
} else {
w.or().apply("FIND_IN_SET({0}, tag)", t);
}
}
});
}
// 排序
qw.orderByDesc(ComplaintCollection::getDiscoveryTime).orderByDesc(ComplaintCollection::getId);
return complaintCollectionMapper.selectPage(page, qw);
}
public List<ComplaintCollection> pageList(ComplaintCollectionQueryParam param) {
return pageQuery(param).getRecords();
}
public Boolean createComplaintCollection(List<ComplaintCollection> complaintCollectionList) {
innerBatchInsert(complaintCollectionMapper, complaintCollectionList, "添加失败!");
return Boolean.TRUE;
}
public boolean deleteById(String id) {
if (StrUtil.isBlank(id)) {
throw new ValidationException("id不能为空");
}
return complaintCollectionMapper.deleteById(id) > 0;
}
/**
* 更新非空字段 **包括空字符串**
*
* @param param
* @return
*/
public boolean updateSelectiveById(ComplaintCollectionUpdateParam param) {
// 防御
String id = param.getId();
if (StrUtil.isBlank(id)) {
throw new RuntimeException("更新id不能为空");
}
LambdaUpdateWrapper<ComplaintCollection> uw = new LambdaUpdateWrapper<>();
uw.eq(ComplaintCollection::getId, id);
uw.set(StrUtil.isNotBlank(param.getResponderIdCode()), ComplaintCollection::getResponderIdCode, param.getResponderIdCode());
if (param.getTag() != null) {
uw.set(ComplaintCollection::getTag, param.getTag());
}
if (param.getInvolveProblem() != null) {
uw.set(ComplaintCollection::getInvolveProblem, param.getInvolveProblem());
}
if (param.getRepeatt() != null) {
uw.set(ComplaintCollection::getRepeatt, param.getRepeatt());
}
if (param.getLeadApproval() != null) {
uw.set(ComplaintCollection::getLeadApproval, param.getLeadApproval());
}
if (param.getHandleMethod() != null) {
uw.set(ComplaintCollection::getHandleMethod, param.getHandleMethod());
}
if (param.getSecondDepartId() != null) {
uw.set(ComplaintCollection::getSecondDepartId, param.getSecondDepartId());
}
if (param.getSecondDepartName() != null) {
uw.set(ComplaintCollection::getSecondDepartName, param.getSecondDepartName());
}
if (param.getResponderName() != null) {
uw.set(ComplaintCollection::getResponderName, param.getResponderName());
}
if (param.getResponderPhone() != null) {
uw.set(ComplaintCollection::getResponderPhone, param.getResponderPhone());
}
if (param.getThingDesc() != null) {
uw.set(ComplaintCollection::getThingDesc, param.getThingDesc());
}
// 3) 非 String 字段:!= null 才更新
if (param.getDiscoveryTime() != null) {
uw.set(ComplaintCollection::getDiscoveryTime, param.getDiscoveryTime());
}
uw.set(ComplaintCollection::getUpdateBy, UserContextHolder.getCurrentUser().getUserName());
uw.set(ComplaintCollection::getUpdateTime, LocalDateTime.now());
return complaintCollectionMapper.update(null, uw) > 0;
}
public boolean exists(ComplaintCollectionExistParam param) {
if (param == null) return false;
LambdaQueryWrapper<ComplaintCollection> qw = new LambdaQueryWrapper<>();
qw.eq(StrUtil.isNotBlank(param.getId()), ComplaintCollection::getId, param.getId());
qw.eq(StrUtil.isNotBlank(param.getSourceTable()), ComplaintCollection::getSourceTable, param.getSourceTable());
qw.eq(StrUtil.isNotBlank(param.getOriginId()), ComplaintCollection::getOriginId, param.getOriginId());
if (qw.getExpression() == null || qw.getExpression().getSqlSegment().isEmpty()) {
throw new ValidationException("exists 条件不能为空");
}
return complaintCollectionMapper.exists(qw);
}
}

49
src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionService.java

@ -0,0 +1,49 @@
package com.biutag.supervision.service.complaintCollection;
import com.biutag.supervision.pojo.Result;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionAddRequest;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionDelRequest;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionPageRequest;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionUpdateRequest;
import com.biutag.supervision.pojo.vo.ComplaintCollectionPageVo;
/**
* @ClassName ComplaintCollectionService
* @Description 涉访涉诉服务层
* @Author shihao
* @Date 2025/12/23 17:24
*/
public interface ComplaintCollectionService {
/**
* 涉访涉诉分页
*
* @param request
* @return
*/
Result<ComplaintCollectionPageVo> getComplaintCollectionPage(ComplaintCollectionPageRequest request);
/**
* 涉访涉诉添加
*
* @param request
* @return
*/
Result<Boolean> addComplaintCollection(ComplaintCollectionAddRequest request);
/**
* 涉访涉诉删除
*
* @param request
* @return
*/
Result<Boolean> delComplaintCollection(ComplaintCollectionDelRequest request);
/**
* 修改
* @param request
* @return
*/
Result<Boolean> updateComplaintCollection(ComplaintCollectionUpdateRequest request);
}

218
src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionServiceImpl.java

@ -0,0 +1,218 @@
package com.biutag.supervision.service.complaintCollection;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.biutag.supervision.common.UserContextHolder;
import com.biutag.supervision.pojo.Result;
import com.biutag.supervision.pojo.dto.complaintCollection.ComplaintCollectionPageDTO;
import com.biutag.supervision.pojo.entity.ComplaintCollection;
import com.biutag.supervision.pojo.entity.SupDictData;
import com.biutag.supervision.pojo.enums.supDict.SupDictEnum;
import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionExistParam;
import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionQueryParam;
import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionUpdateParam;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionAddRequest;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionDelRequest;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionPageRequest;
import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionUpdateRequest;
import com.biutag.supervision.pojo.transfer.ComplaintCollectionTransfer;
import com.biutag.supervision.pojo.vo.ComplaintCollectionPageVo;
import com.biutag.supervision.repository.complaintCollection.ComplaintCollectionResourceService;
import com.biutag.supervision.service.SupDictDataService;
import com.biutag.supervision.util.CodeTranslateUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* @ClassName ComplaintCollectionServiceImpl
* @Description 涉访涉诉服务层
* @Author shihao
* @Date 2025/12/23 17:24
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ComplaintCollectionServiceImpl implements ComplaintCollectionService {
private final ComplaintCollectionResourceService complaintCollectionResourceService;
private final SupDictDataService supDictDataService;
@Override
public Result<Boolean> addComplaintCollection(ComplaintCollectionAddRequest request) {
ComplaintCollectionExistParam existParam = new ComplaintCollectionExistParam();
existParam.setOriginId(request.getOriginId());
existParam.setSourceTable(request.getSourceTable());
boolean exists = complaintCollectionResourceService.exists(existParam);
if (exists) {
throw new IllegalStateException("存在相同编号+来源");
}
ComplaintCollection complaintCollection = ComplaintCollectionTransfer.INSTANCE.addRequestToEntity(request);
Boolean res = complaintCollectionResourceService.createComplaintCollection(Arrays.asList(complaintCollection));
return Result.success(res);
}
@Override
public Result<Boolean> delComplaintCollection(ComplaintCollectionDelRequest request) {
// ComplaintCollectionQueryParam param = new ComplaintCollectionQueryParam();
// param.setId(request.getId());
// List<ComplaintCollection> query = complaintCollectionResourceService.query(param);
// 对query做业务校验
boolean deleted = complaintCollectionResourceService.deleteById(request.getId());
if (!deleted) {
throw new RuntimeException("未找到可删除信息");
}
return Result.success(true);
}
@Override
public Result<Boolean> updateComplaintCollection(ComplaintCollectionUpdateRequest request) {
ComplaintCollectionExistParam existParam = new ComplaintCollectionExistParam();
existParam.setId(request.getId());
boolean exists = complaintCollectionResourceService.exists(existParam);
if (!exists){
throw new NoSuchElementException("未找到可修改信息");
}
ComplaintCollectionUpdateParam updateParam= ComplaintCollectionTransfer.INSTANCE.updateRequestToParam(request);
// 处理 involve_problem + tag
String involveProblem = CodeTranslateUtil.joinDistinct(request.getInvolveProblemIdList());
if (StrUtil.isNotBlank(involveProblem)){
updateParam.setInvolveProblem(involveProblem);
}
String tag = CodeTranslateUtil.joinDistinct(request.getTags());
if (StrUtil.isNotBlank(tag)){
updateParam.setTag(tag);
}
// 4) 必填:id + 更新信息
updateParam.setId(request.getId());
updateParam.setUpdateTime(LocalDateTime.now());
updateParam.setUpdateBy(UserContextHolder.getCurrentUser().getUserName());
// 5) 更新(只更新非空字段)
boolean ok = complaintCollectionResourceService.updateSelectiveById(updateParam);
if (!ok) {
throw new RuntimeException("修改失败");
}
return Result.success(true);
}
@Override
public Result<ComplaintCollectionPageVo> getComplaintCollectionPage(ComplaintCollectionPageRequest request) {
ComplaintCollectionQueryParam param = ComplaintCollectionTransfer.INSTANCE.pageRequestToPageParam(request);
IPage<ComplaintCollection> page = complaintCollectionResourceService.pageQuery(param);
List<ComplaintCollection> records = page.getRecords();
List<ComplaintCollectionPageDTO> complaintCollectionPageDTOS = ComplaintCollectionTransfer.INSTANCE.entityToPageDTOList(records);
// 涉嫌问题拼接
if (CollectionUtil.isNotEmpty(complaintCollectionPageDTOS)) {
Map<String, String> dictLabelMap = buildDictLabelMap(SupDictEnum.SUSPECT_PROBLEM.getCode());
complaintCollectionPageDTOS.forEach(one->{
one.setInvolveProblemStr(CodeTranslateUtil.translateCodesToLabels(one.getInvolveProblem(), dictLabelMap));
});
}
ComplaintCollectionPageVo complaintCollectionPageVo = new ComplaintCollectionPageVo();
complaintCollectionPageVo.setPages(page.getPages());
complaintCollectionPageVo.setTotal(page.getTotal());
complaintCollectionPageVo.setCurrent(page.getCurrent());
complaintCollectionPageVo.setSize(page.getSize());
complaintCollectionPageVo.setComplaintCollectionPageDTOS(complaintCollectionPageDTOS);
return Result.success(complaintCollectionPageVo);
}
private Map<String, String> buildDictLabelMap(String dictType) {
List<SupDictData> list = supDictDataService.listByDictType(dictType);
return list.stream()
.filter(d -> StrUtil.isNotBlank(d.getDictValue()))
.collect(Collectors.toMap(
SupDictData::getDictValue,
d -> StrUtil.blankToDefault(d.getDictLabel(), ""),
(a, b) -> a
));
}
private List<ComplaintCollection> mockComplaintCollectionPageVoList() {
List<ComplaintCollection> list = new ArrayList<>();
// ====== 第一条 ======
ComplaintCollection vo1 = new ComplaintCollection();
vo1.setOriginId("XF20251223001");
vo1.setSourceTable("petition");
vo1.setDiscoveryTime(LocalDateTime.now().minusDays(2));
vo1.setHappenTime(LocalDateTime.now().minusDays(3));
vo1.setResponderName("张三");
vo1.setResponderPhone("13800001111");
vo1.setBusinessTypeName("信访投诉");
vo1.setInvolveProblem("执法不规范");
vo1.setThingDesc("群众反映执法过程中存在态度粗暴问题。");
vo1.setProblemSources("群众来访");
vo1.setProblemSourcesCode("XF01");
vo1.setSecondDepartId("DEP001");
vo1.setSecondDepartName("治安管理支队");
vo1.setThirdDepartId("DEP00101");
vo1.setThirdDepartName("一大队");
vo1.setDistributionState("已下发");
vo1.setIsReal(1);
vo1.setCreateTime(LocalDateTime.now().minusDays(2));
vo1.setCompletedTime(LocalDateTime.now().minusDays(1));
list.add(vo1);
// ====== 第二条 ======
ComplaintCollection vo2 = new ComplaintCollection();
vo2.setSourceTable("AJ20251223002");
vo2.setDiscoveryTime(LocalDateTime.now().minusDays(5));
vo2.setHappenTime(LocalDateTime.now().minusDays(6));
vo2.setResponderName("李四");
vo2.setResponderPhone("13900002222");
vo2.setBusinessTypeName("案件核查");
vo2.setInvolveProblem("执法程序问题");
vo2.setThingDesc("反映案件办理过程中存在程序瑕疵。");
vo2.setProblemSources("举报线索");
vo2.setProblemSourcesCode("AJ02");
vo2.setSecondDepartId("DEP002");
vo2.setSecondDepartName("刑侦支队");
vo2.setThirdDepartId("DEP00202");
vo2.setThirdDepartName("二大队");
vo2.setDistributionState("办理中");
vo2.setIsReal(2);
vo2.setCreateTime(LocalDateTime.now().minusDays(5));
vo2.setCompletedTime(null);
list.add(vo2);
// ====== 第三条 ======
ComplaintCollection vo3 = new ComplaintCollection();
vo3.setOriginId("MB20251223003");
vo3.setDiscoveryTime(LocalDateTime.now().minusDays(1));
vo3.setHappenTime(null);
vo3.setResponderName("王五");
vo3.setResponderPhone("13700003333");
vo3.setBusinessTypeName("局长信箱");
vo3.setInvolveProblem("服务态度问题");
vo3.setThingDesc("反映窗口服务人员态度冷漠。");
vo3.setProblemSources("局长信箱");
vo3.setProblemSourcesCode("MB01");
vo3.setSecondDepartId("DEP003");
vo3.setSecondDepartName("政务服务中心");
vo3.setThirdDepartId(null);
vo3.setThirdDepartName(null);
vo3.setDistributionState("待处理");
vo3.setIsReal(null);
vo3.setCreateTime(LocalDateTime.now().minusDays(1));
vo3.setCompletedTime(null);
list.add(vo3);
return list;
}
}
Loading…
Cancel
Save