diff --git a/src/main/java/com/whdc/controller/ShAddressBookController.java b/src/main/java/com/whdc/controller/ShAddressBookController.java index 2ec47aa..303278b 100644 --- a/src/main/java/com/whdc/controller/ShAddressBookController.java +++ b/src/main/java/com/whdc/controller/ShAddressBookController.java @@ -7,6 +7,7 @@ import com.whdc.model.dto.ShAddressBookDto; import com.whdc.model.entity.ShAddressBook; import com.whdc.model.group.Update; import com.whdc.model.vo.AdcdTree; +import com.whdc.model.vo.ShAddressBookVo; import com.whdc.service.ShAddressBookService; import com.whdc.utils.ExcelCommon; import com.whdc.utils.ResultJson; @@ -24,6 +25,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.Pattern; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -303,4 +305,22 @@ public class ShAddressBookController { } -} \ No newline at end of file + + @ApiOperation(value = "抽查责任人批量匹配") + @PostMapping("/importBatchMatch") + public ResultJson importBatchMatch(MultipartFile file) { + List shAddressBooks = ExcelCommon.importExcel(file, 0, 1, ShAddressBookVo.class); + if (CollectionUtils.isEmpty(shAddressBooks)) { + throw new MyException("文件解析数据为空"); + } + Map map = service.importBatchMatch(shAddressBooks); + return ResultJson.ok(map); + } + + @ApiOperation(value = "下载批量匹配模板") + @GetMapping("/downloadMatchTemplate") + public void downloadMatchTemplate(HttpServletResponse response) { + ExcelCommon.exportExcel(Lists.newArrayList(), null, "责任人", ShAddressBookVo.class, "责任人批量匹配模板.xlsx", response); + } + +} diff --git a/src/main/java/com/whdc/controller/ShCallsController.java b/src/main/java/com/whdc/controller/ShCallsController.java index f5383f2..a29d5ac 100644 --- a/src/main/java/com/whdc/controller/ShCallsController.java +++ b/src/main/java/com/whdc/controller/ShCallsController.java @@ -211,5 +211,13 @@ public class ShCallsController { response); } - -} \ No newline at end of file + @ApiOperation(value = "日志日期统计") + @PostMapping("/logDateStatistics") + public ResultJson> logDateStatistics(@RequestBody @Validated ShCallsDto dto) { + if (StringUtils.isBlank(dto.getStiStartTime()) || StringUtils.isBlank(dto.getStiEndTime())) { + throw new MyException("开始时间和结束时间参数必填!"); + } + Map retMap = service.logDateStatistics(dto); + return ResultJson.ok(retMap); + } +} diff --git a/src/main/java/com/whdc/model/dto/ShCallsDto.java b/src/main/java/com/whdc/model/dto/ShCallsDto.java index 807d95f..ed83d4b 100644 --- a/src/main/java/com/whdc/model/dto/ShCallsDto.java +++ b/src/main/java/com/whdc/model/dto/ShCallsDto.java @@ -35,4 +35,10 @@ public class ShCallsDto extends ShAddressBookDto { @Schema(description="山洪通讯录编号") private Integer shAbId; + + @Schema(description="统计抽查开始日期") + private String stiStartTime; + + @Schema(description="统计抽查结束日期") + private String stiEndTime; } diff --git a/src/main/java/com/whdc/model/vo/ShAddressBookVo.java b/src/main/java/com/whdc/model/vo/ShAddressBookVo.java new file mode 100644 index 0000000..3d6c90e --- /dev/null +++ b/src/main/java/com/whdc/model/vo/ShAddressBookVo.java @@ -0,0 +1,46 @@ +package com.whdc.model.vo; + + +import cn.afterturn.easypoi.excel.annotation.Excel; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +/** + * 描述: 山洪责任人通讯录Vo + */ +@Schema(description = "山洪责任人通讯录") +@Data +public class ShAddressBookVo implements Serializable { + + /** + * 县 + */ + @Schema(description = "县") + @Excel(name = "县", width = 20, orderNum = "1") + private String county; + + /** + * 乡 + */ + @Schema(description = "乡") + @Excel(name = "乡", width = 20, orderNum = "2") + private String area; + + /** + * 村 + */ + @Schema(description = "行政村") + @Excel(name = "行政村", width = 20, orderNum = "3") + private String village; + + /** + * 责任人类型 县级,乡级,村级, 县干部,乡干部 + */ + @Schema(description = "责任人类型2 县级,乡级,村级, 县干部,乡干部") + @Excel(name = "责任人类型", width = 20, orderNum = "4") + private String type2; + + +} diff --git a/src/main/java/com/whdc/service/ShAddressBookService.java b/src/main/java/com/whdc/service/ShAddressBookService.java index a6a1a54..4a0907c 100644 --- a/src/main/java/com/whdc/service/ShAddressBookService.java +++ b/src/main/java/com/whdc/service/ShAddressBookService.java @@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.whdc.model.dto.ShAddressBookDto; import com.whdc.model.entity.ShAddressBook; import com.whdc.model.vo.AdcdTree; +import com.whdc.model.vo.ShAddressBookVo; import java.util.List; +import java.util.Map; /** * 描述: 山洪责任人通讯录 @@ -21,6 +23,15 @@ public interface ShAddressBookService extends IService void updateAll(String type1, List appends); List tree(); + + /** + * @param shAddressBooks + * @description: 文件导入批量匹配 + * @return: java.util.Map + * @auther: cxw + * @date: 2025-07-14, 周一, 13:11:33 + */ + Map importBatchMatch(List shAddressBooks); } diff --git a/src/main/java/com/whdc/service/ShCallsService.java b/src/main/java/com/whdc/service/ShCallsService.java index 89badb8..dc615de 100644 --- a/src/main/java/com/whdc/service/ShCallsService.java +++ b/src/main/java/com/whdc/service/ShCallsService.java @@ -9,6 +9,7 @@ import com.whdc.model.entity.ShCalls; import com.whdc.model.vo.ShCallsVo; import java.util.List; +import java.util.Map; /** * 描述: 抽查日志 @@ -23,6 +24,8 @@ public interface ShCallsService extends IService List list(ShCallsDto dto); List listVo(ShCallsDto dto); + + Map logDateStatistics(ShCallsDto dto); } diff --git a/src/main/java/com/whdc/service/impl/ShAddressBookServiceImpl.java b/src/main/java/com/whdc/service/impl/ShAddressBookServiceImpl.java index ad0ecd1..8cbc8d6 100644 --- a/src/main/java/com/whdc/service/impl/ShAddressBookServiceImpl.java +++ b/src/main/java/com/whdc/service/impl/ShAddressBookServiceImpl.java @@ -1,12 +1,15 @@ package com.whdc.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Maps; import com.whdc.exception.MyException; import com.whdc.mapper.ShAddressBookMapper; import com.whdc.model.dto.ShAddressBookDto; import com.whdc.model.entity.ShAddressBook; import com.whdc.model.vo.AdcdTree; +import com.whdc.model.vo.ShAddressBookVo; import com.whdc.service.ShAddressBookService; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.compress.utils.Lists; @@ -322,4 +325,56 @@ public class ShAddressBookServiceImpl extends ServiceImpl importBatchMatch(List shAddressBooksMatch) { + Map map = Maps.newHashMap(); + map.put("ppAllCount", shAddressBooksMatch.size());// 总数 + map.put("ppOneList", new ArrayList<>());// 精确匹配 + map.put("ppManyRownum", "");// 匹配到多条 + map.put("ppZeroRownum", "");// 未匹配到 + // 根据区划和责任人类型匹配,返回匹配成功数据和未匹配的信息 + List shAddressBooksAll = baseMapper.selectList(new QueryWrapper().eq("DEL", REC)); + // 责任人类型分组 + Map> zrrMaps = shAddressBooksAll.stream().collect(Collectors.groupingBy(ShAddressBook::getType2)); + for (int i = 0; i < shAddressBooksMatch.size(); i++) { + ShAddressBookVo vo = shAddressBooksMatch.get(i); + String county = vo.getCounty(); // 县 + String area = vo.getArea(); // 乡 + String village = vo.getVillage(); // 村 + String type2 = vo.getType2(); // 责任人类型 + if (StringUtils.isNotBlank(type2) && zrrMaps.containsKey(type2)) { + List typeBooks = zrrMaps.get(type2); + List ppResult = typeBooks.stream() + .filter(o -> Objects.equals(county, o.getCounty()) + && Objects.equals(area, o.getArea()) + && Objects.equals(village, o.getVillage()) + && Objects.equals(type2, o.getType2())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(ppResult)) { + if (ppResult.size() == 1) { + // 匹配单条(正确匹配) + List ppOneList = (List) map.get("ppOneList"); + ppOneList.add(ppResult.get(0)); + map.put("ppOneList", ppOneList); + } else { + // 匹配多条 + map.put("ppManyRownum", map.get("ppManyRownum").toString() + (i + 2) + "、"); + } + } else { + // 未匹配 + map.put("ppZeroRownum", map.get("ppZeroRownum").toString() + (i + 2) + "、"); + } + } else { + // 未匹配 + map.put("ppZeroRownum", map.get("ppZeroRownum").toString() + (i + 2) + "、"); + } + } + if(map.get("ppZeroRownum").toString().length()> 0 && map.get("ppZeroRownum").toString().endsWith("、")){ + map.put("ppZeroRownum", map.get("ppZeroRownum").toString().substring(0, map.get("ppZeroRownum").toString().length() - 1)); + } + if(map.get("ppManyRownum").toString().length()> 0 && map.get("ppManyRownum").toString().endsWith("、")){ + map.put("ppManyRownum", map.get("ppManyRownum").toString().substring(0, map.get("ppManyRownum").toString().length() - 1)); + } + return map; + } } diff --git a/src/main/java/com/whdc/service/impl/ShCallsServiceImpl.java b/src/main/java/com/whdc/service/impl/ShCallsServiceImpl.java index bfc62c0..d3d6008 100644 --- a/src/main/java/com/whdc/service/impl/ShCallsServiceImpl.java +++ b/src/main/java/com/whdc/service/impl/ShCallsServiceImpl.java @@ -1,5 +1,6 @@ package com.whdc.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.whdc.mapper.ShCallsMapper; @@ -8,9 +9,15 @@ import com.whdc.model.entity.ShAddressBook; import com.whdc.model.entity.ShCalls; import com.whdc.model.vo.ShCallsVo; import com.whdc.service.ShCallsService; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import static com.whdc.model.MyConstant.REDIS_KEY; @@ -24,6 +31,7 @@ import static com.whdc.model.MyConstant.REDIS_KEY; public class ShCallsServiceImpl extends ServiceImpl implements ShCallsService { private static final String THIS_REDIS_KEY = REDIS_KEY + ShCalls.thisTableName + ":"; + private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); @Override public IPage page(ShCallsDto dto) { @@ -39,4 +47,20 @@ public class ShCallsServiceImpl extends ServiceImpl impl public List listVo(ShCallsDto dto) { return this.getBaseMapper().listVo(dto); } + + @Override + public Map logDateStatistics(ShCallsDto dto) { + Map retMap = new HashMap<>(); + List shCalls = baseMapper.selectList(new QueryWrapper() + .ge(StringUtils.isNotBlank(dto.getStiStartTime()), "CALL_TIME", dto.getStiStartTime().length() < 11 ? dto.getStiStartTime() + "00:00:00" : dto.getStiStartTime()) + .le(StringUtils.isNotBlank(dto.getStiEndTime()), "CALL_TIME", dto.getStiEndTime().length() < 11 ? dto.getStiEndTime() + "23:59:59" : dto.getStiEndTime()).orderByAsc("CALL_TIME")); + if (CollectionUtils.isNotEmpty(shCalls)) { + retMap = shCalls.stream() + .collect(Collectors.groupingBy( + r -> sdf.format(r.getCallTime()), + Collectors.counting() + )); + } + return retMap; + } } diff --git a/src/main/resources/mapper/ShAddressBookMapper.xml b/src/main/resources/mapper/ShAddressBookMapper.xml index 53108a1..8d2283a 100644 --- a/src/main/resources/mapper/ShAddressBookMapper.xml +++ b/src/main/resources/mapper/ShAddressBookMapper.xml @@ -58,9 +58,9 @@ T."TYPE1" , T."TYPE2" ) T1 - LEFT JOIN "FXKH_TXL"."SH_ADDRESS_BOOK" T ON T.ID = T1.ID + LEFT JOIN "FXKH_TXL"."SH_ADDRESS_BOOK" T ON T.ID = T1.ID AND DEL = 1 WHERE - DEL = 1 + 1 = 1 AND T.TYPE1 = #{dto.type1}