package com.java110.fee.api.z2; import com.alibaba.fastjson.JSONObject; import com.java110.dto.importData.HouseMailRecord; import com.java110.utils.util.Assert; import com.java110.utils.util.BeanConvertUtil; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 房屋邮寄记录信息接口 * 适配 house_mail_record 表 * @author dev * @date 2025-12-24 */ @RestController @RequestMapping(value = "/houseMailRecord") public class HouseMailRecordApi { @Autowired protected SqlSessionTemplate sqlSessionTemplate; /** * 保存单条房屋邮寄记录信息 * * @param reqJson 请求参数 * @return 响应结果 * @serviceCode /houseMailRecord/saveHouseMailRecordInfo * @path /app/houseMailRecord/saveHouseMailRecordInfo */ @RequestMapping(value = "/saveHouseMailRecord", method = RequestMethod.POST) public ResponseEntity saveHouseMailRecordInfo(@RequestBody JSONObject reqJson) { // 核心参数校验 Assert.hasKeyAndValue(reqJson, "ownerId", "请求报文中未包含业主编号ownerId"); Assert.hasKeyAndValue(reqJson, "houseId", "请求报文中未包含房屋编号houseId"); Assert.hasKeyAndValue(reqJson, "sendDate", "请求报文中未包含寄出日期sendDate"); // 转换为实体类 HouseMailRecord record = BeanConvertUtil.covertBean(reqJson, HouseMailRecord.class); // 调用Mapper保存方法 int insert = sqlSessionTemplate.insert("houseMailRecordServiceDaoImpl.saveHouseMailRecordInfo", BeanConvertUtil.beanCovertMap(record)); // 构造响应结果 JSONObject resJson = new JSONObject(); if (insert > 0) { resJson.put("code", "0000"); resJson.put("msg", "保存房屋邮寄记录信息成功"); } else { resJson.put("code", "0001"); resJson.put("msg", "保存房屋邮寄记录信息失败"); } resJson.put("count", insert); return ResponseEntity.ok(resJson.toJSONString()); } /** * 批量保存房屋邮寄记录信息 * * @param reqJson 请求参数(包含houseMailRecordList数组) * @return 响应结果 * @serviceCode /houseMailRecord/saveHouseMailRecords * @path /app/houseMailRecord/saveHouseMailRecords */ @RequestMapping(value = "/saveHouseMailRecords", method = RequestMethod.POST) public ResponseEntity saveHouseMailRecords(@RequestBody JSONObject reqJson) { Assert.hasKeyAndValue(reqJson, "houseMailRecordList", "请求报文中未包含批量数据列表houseMailRecordList"); // 转换批量数据 List recordList = BeanConvertUtil.covertBeanList( reqJson.getJSONArray("houseMailRecordList"), HouseMailRecord.class); Map param = new HashMap<>(); param.put("houseMailRecordPos", recordList); // 批量插入 int insert = sqlSessionTemplate.insert("houseMailRecordServiceDaoImpl.saveHouseMailRecords", param); JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "批量保存房屋邮寄记录信息成功"); resJson.put("count", insert); return ResponseEntity.ok(resJson.toJSONString()); } /** * 修改房屋邮寄记录信息 * * @param reqJson 请求参数 * @return 响应结果 * @serviceCode /houseMailRecord/updateHouseMailRecordInfo * @path /app/houseMailRecord/updateHouseMailRecordInfo */ @RequestMapping(value = "/updateHouseMailRecordInfo", method = RequestMethod.POST) public ResponseEntity updateHouseMailRecordInfo(@RequestBody JSONObject reqJson) { // 主键校验(id 或 ownerId+houseId 二选一) boolean hasId = reqJson.containsKey("id") && reqJson.getString("id") != null && !reqJson.getString("id").isEmpty(); boolean hasOwnerAndHouseId = reqJson.containsKey("ownerId") && !reqJson.getString("ownerId").isEmpty() && reqJson.containsKey("houseId") && !reqJson.getString("houseId").isEmpty(); Assert.isTrue(hasId || hasOwnerAndHouseId, "请求报文中需包含主键ID,或同时包含业主编号和房屋编号"); // 转换为实体类 HouseMailRecord record = BeanConvertUtil.covertBean(reqJson, HouseMailRecord.class); // 调用Mapper修改方法 int update = sqlSessionTemplate.update("houseMailRecordServiceDaoImpl.updateHouseMailRecordInfo", BeanConvertUtil.beanCovertMap(record)); JSONObject resJson = new JSONObject(); if (update > 0) { resJson.put("code", "0000"); resJson.put("msg", "修改房屋邮寄记录信息成功"); } else { resJson.put("code", "0001"); resJson.put("msg", "修改房屋邮寄记录信息失败,未找到对应记录"); } resJson.put("count", update); return ResponseEntity.ok(resJson.toJSONString()); } /** * 删除房屋邮寄记录信息 * * @param reqJson 请求参数 * @return 响应结果 * @serviceCode /houseMailRecord/deleteHouseMailRecordInfo * @path /app/houseMailRecord/deleteHouseMailRecordInfo */ @RequestMapping(value = "/deleteHouseMailRecordInfo", method = RequestMethod.POST) public ResponseEntity deleteHouseMailRecordInfo(@RequestBody JSONObject reqJson) { // 必要参数校验(至少包含一个筛选条件) boolean hasFilter = reqJson.containsKey("id") && reqJson.getString("id") != null && !reqJson.getString("id").isEmpty() || reqJson.containsKey("ownerId") && !reqJson.getString("ownerId").isEmpty() || reqJson.containsKey("houseId") && !reqJson.getString("houseId").isEmpty(); Assert.isTrue(hasFilter, "请求报文中需包含id/ownerId/houseId至少一个筛选条件"); // 转换为实体类 HouseMailRecord record = BeanConvertUtil.covertBean(reqJson, HouseMailRecord.class); // 调用Mapper删除方法 int delete = sqlSessionTemplate.delete("houseMailRecordServiceDaoImpl.deleteHouseMailRecordInfo", BeanConvertUtil.beanCovertMap(record)); JSONObject resJson = new JSONObject(); if (delete > 0) { resJson.put("code", "0000"); resJson.put("msg", "删除房屋邮寄记录信息成功"); } else { resJson.put("code", "0001"); resJson.put("msg", "删除房屋邮寄记录信息失败,未找到对应记录"); } resJson.put("count", delete); return ResponseEntity.ok(resJson.toJSONString()); } /** * 分页查询房屋邮寄记录信息列表 * * @param page 页码(默认1) * @param row 每页条数(默认10) * @param id 主键ID(可选) * @param ownerId 业主编号(可选) * @param houseId 房屋编号(可选) * @param sendDate 寄出日期(可选) * @param mailNo 邮寄单号(可选) * @param mailResult 邮寄结果(可选) * @param startSendDate 寄出日期开始范围(可选) * @param endSendDate 寄出日期结束范围(可选) * @return 响应结果 * @serviceCode /houseMailRecord/queryHouseMailRecordInfo * @path /app/houseMailRecord/queryHouseMailRecordInfo */ @RequestMapping(value = "/queryHouseMailRecordInfo", method = RequestMethod.GET) public ResponseEntity queryHouseMailRecordInfo( @RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "row", defaultValue = "10") int row, @RequestParam(value = "id", required = false) String id, @RequestParam(value = "ownerId", required = false) String ownerId, @RequestParam(value = "houseId", required = false) String houseId, @RequestParam(value = "sendDate", required = false) String sendDate, @RequestParam(value = "mailNo", required = false) String mailNo, @RequestParam(value = "mailResult", required = false) String mailResult, @RequestParam(value = "startSendDate", required = false) String startSendDate, @RequestParam(value = "endSendDate", required = false) String endSendDate) { // 封装查询参数 Map param = new HashMap<>(); param.put("page", (page - 1) * row); // 转换为MySQL分页偏移量 param.put("row", row); param.put("id", id); param.put("ownerId", ownerId); param.put("houseId", houseId); param.put("sendDate", sendDate); param.put("mailNo", mailNo); param.put("mailResult", mailResult); param.put("startSendDate", startSendDate); param.put("endSendDate", endSendDate); // 查询列表数据 List> list = sqlSessionTemplate.selectList( "houseMailRecordServiceDaoImpl.getHouseMailRecordInfo", param); // 查询总数 Map countMap = sqlSessionTemplate.selectOne( "houseMailRecordServiceDaoImpl.queryHouseMailRecordsCount", param); int total = countMap != null ? Integer.parseInt(countMap.get("count").toString()) : 0; // 构造分页响应 JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "查询房屋邮寄记录信息成功"); resJson.put("page", page); resJson.put("row", row); resJson.put("total", total); resJson.put("data", BeanConvertUtil.covertBeanList(list, HouseMailRecord.class)); return ResponseEntity.ok(resJson.toJSONString()); } /** * 查询房屋邮寄记录统计信息 * * @param ownerId 业主编号(可选) * @param houseId 房屋编号(可选) * @param startSendDate 寄出日期开始范围(可选) * @param endSendDate 寄出日期结束范围(可选) * @return 响应结果 * @serviceCode /houseMailRecord/queryHouseMailRecordStatistics * @path /app/houseMailRecord/queryHouseMailRecordStatistics */ @RequestMapping(value = "/queryHouseMailRecordStatistics", method = RequestMethod.GET) public ResponseEntity queryHouseMailRecordStatistics( @RequestParam(value = "ownerId", required = false) String ownerId, @RequestParam(value = "houseId", required = false) String houseId, @RequestParam(value = "startSendDate", required = false) String startSendDate, @RequestParam(value = "endSendDate", required = false) String endSendDate) { // 封装查询参数 Map param = new HashMap<>(); param.put("ownerId", ownerId); param.put("houseId", houseId); param.put("startSendDate", startSendDate); param.put("endSendDate", endSendDate); // 统计查询 Map statistics = sqlSessionTemplate.selectOne( "houseMailRecordServiceDaoImpl.queryHouseMailRecordStatistics", param); JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "统计房屋邮寄记录信息成功"); resJson.put("data", statistics); return ResponseEntity.ok(resJson.toJSONString()); } /** * 按邮寄结果分组统计房屋邮寄记录 * * @param ownerId 业主编号(可选) * @param houseId 房屋编号(可选) * @param startSendDate 寄出日期开始范围(可选) * @param endSendDate 寄出日期结束范围(可选) * @return 响应结果 * @serviceCode /houseMailRecord/queryHouseMailRecordByMailResult * @path /app/houseMailRecord/queryHouseMailRecordByMailResult */ @RequestMapping(value = "/queryHouseMailRecordByMailResult", method = RequestMethod.GET) public ResponseEntity queryHouseMailRecordByMailResult( @RequestParam(value = "ownerId", required = false) String ownerId, @RequestParam(value = "houseId", required = false) String houseId, @RequestParam(value = "startSendDate", required = false) String startSendDate, @RequestParam(value = "endSendDate", required = false) String endSendDate) { // 封装查询参数 Map param = new HashMap<>(); param.put("ownerId", ownerId); param.put("houseId", houseId); param.put("startSendDate", startSendDate); param.put("endSendDate", endSendDate); // 分组统计查询 List> resultList = sqlSessionTemplate.selectList( "houseMailRecordServiceDaoImpl.queryHouseMailRecordByMailResult", param); JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "按邮寄结果分组统计房屋邮寄记录成功"); resJson.put("data", resultList); return ResponseEntity.ok(resJson.toJSONString()); } /** * 按年月维度统计邮寄费用 * * @param startSendDate 寄出日期开始范围(可选) * @param endSendDate 寄出日期结束范围(可选) * @return 响应结果 * @serviceCode /houseMailRecord/queryHouseMailRecordByMonth * @path /app/houseMailRecord/queryHouseMailRecordByMonth */ @RequestMapping(value = "/queryHouseMailRecordByMonth", method = RequestMethod.GET) public ResponseEntity queryHouseMailRecordByMonth( @RequestParam(value = "startSendDate", required = false) String startSendDate, @RequestParam(value = "endSendDate", required = false) String endSendDate) { // 封装查询参数 Map param = new HashMap<>(); param.put("startSendDate", startSendDate); param.put("endSendDate", endSendDate); // 按年月统计查询 List> resultList = sqlSessionTemplate.selectList( "houseMailRecordServiceDaoImpl.queryHouseMailRecordByMonth", param); JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "按年月维度统计邮寄费用成功"); resJson.put("data", resultList); return ResponseEntity.ok(resJson.toJSONString()); } /** * 查询未完成邮寄的记录(待寄出/结果为空) * * @param page 页码(默认1) * @param row 每页条数(默认10) * @param ownerId 业主编号(可选) * @param houseId 房屋编号(可选) * @param startSendDate 寄出日期开始范围(可选) * @param endSendDate 寄出日期结束范围(可选) * @return 响应结果 * @serviceCode /houseMailRecord/queryUnfinishedMailRecords * @path /app/houseMailRecord/queryUnfinishedMailRecords */ @RequestMapping(value = "/queryUnfinishedMailRecords", method = RequestMethod.GET) public ResponseEntity queryUnfinishedMailRecords( @RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "row", defaultValue = "10") int row, @RequestParam(value = "ownerId", required = false) String ownerId, @RequestParam(value = "houseId", required = false) String houseId, @RequestParam(value = "startSendDate", required = false) String startSendDate, @RequestParam(value = "endSendDate", required = false) String endSendDate) { // 封装查询参数 Map param = new HashMap<>(); param.put("page", (page - 1) * row); param.put("row", row); param.put("ownerId", ownerId); param.put("houseId", houseId); param.put("startSendDate", startSendDate); param.put("endSendDate", endSendDate); // 查询未完成记录 List> list = sqlSessionTemplate.selectList( "houseMailRecordServiceDaoImpl.queryUnfinishedMailRecords", param); JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "查询未完成邮寄记录成功"); resJson.put("page", page); resJson.put("row", row); resJson.put("total", list.size()); // 如需精准总数可新增count方法,此处简化 resJson.put("data", list); return ResponseEntity.ok(resJson.toJSONString()); } }