package com.java110.fee.api.z2; import com.alibaba.fastjson.JSONObject; import com.java110.dto.importData.MailCallRecord; 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; /** * 邮寄信电联记录信息接口 * 适配 mail_call_record 表 * @author dev * @date 2025-12-24 */ @RestController @RequestMapping(value = "/mailCallRecord") public class MailCallRecordApi { @Autowired protected SqlSessionTemplate sqlSessionTemplate; /** * 保存单条邮寄信电联记录信息 * * @param reqJson 请求参数 * @return 响应结果 * @serviceCode /mailCallRecord/saveMailCallRecord * @path /app/mailCallRecord/saveMailCallRecord */ @RequestMapping(value = "/saveMailCallRecord", method = RequestMethod.POST) public ResponseEntity saveMailCallRecord(@RequestBody JSONObject reqJson) { // 核心参数校验 Assert.hasKeyAndValue(reqJson, "mailId", "请求报文中未包含邮寄信编号mailId"); Assert.hasKeyAndValue(reqJson, "callDate", "请求报文中未包含电联日期callDate"); Assert.hasKeyAndValue(reqJson, "callContact", "请求报文中未包含被电联联系人callContact"); // 转换为实体类 MailCallRecord record = BeanConvertUtil.covertBean(reqJson, MailCallRecord.class); // 调用Mapper保存方法 int insert = sqlSessionTemplate.insert("mailCallRecordServiceDaoImpl.saveMailCallRecord", 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 请求参数(包含mailCallRecordList数组) * @return 响应结果 * @serviceCode /mailCallRecord/batchSaveMailCallRecord * @path /app/mailCallRecord/batchSaveMailCallRecord */ @RequestMapping(value = "/batchSaveMailCallRecord", method = RequestMethod.POST) public ResponseEntity batchSaveMailCallRecord(@RequestBody JSONObject reqJson) { Assert.hasKeyAndValue(reqJson, "mailCallRecordList", "请求报文中未包含批量数据列表mailCallRecordList"); // 转换批量数据 List recordList = BeanConvertUtil.covertBeanList( reqJson.getJSONArray("mailCallRecordList"), MailCallRecord.class); Map param = new HashMap<>(); param.put("mailCallRecordList", recordList); // 批量插入 int insert = sqlSessionTemplate.insert("mailCallRecordServiceDaoImpl.batchSaveMailCallRecord", 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 /mailCallRecord/updateMailCallRecord * @path /app/mailCallRecord/updateMailCallRecord */ @RequestMapping(value = "/updateMailCallRecord", method = RequestMethod.POST) public ResponseEntity updateMailCallRecord(@RequestBody JSONObject reqJson) { // 主键校验(id 或 mailId 二选一) boolean hasId = reqJson.containsKey("id") && reqJson.getString("id") != null && !reqJson.getString("id").isEmpty(); boolean hasMailId = reqJson.containsKey("mailId") && !reqJson.getString("mailId").isEmpty(); Assert.isTrue(hasId || hasMailId, "请求报文中需包含主键ID,或包含邮寄信编号mailId"); // 转换为实体类 MailCallRecord record = BeanConvertUtil.covertBean(reqJson, MailCallRecord.class); // 调用Mapper修改方法 int update = sqlSessionTemplate.update("mailCallRecordServiceDaoImpl.updateMailCallRecord", 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 /mailCallRecord/deleteMailCallRecord * @path /app/mailCallRecord/deleteMailCallRecord */ @RequestMapping(value = "/deleteMailCallRecord", method = RequestMethod.POST) public ResponseEntity deleteMailCallRecord(@RequestBody JSONObject reqJson) { // 必要参数校验(至少包含一个筛选条件) boolean hasFilter = reqJson.containsKey("id") && reqJson.getString("id") != null && !reqJson.getString("id").isEmpty() || reqJson.containsKey("mailId") && !reqJson.getString("mailId").isEmpty() || reqJson.containsKey("callResult") && !reqJson.getString("callResult").isEmpty(); Assert.isTrue(hasFilter, "请求报文中需包含id/mailId/callResult至少一个筛选条件"); // 转换为实体类 MailCallRecord record = BeanConvertUtil.covertBean(reqJson, MailCallRecord.class); // 调用Mapper删除方法 int delete = sqlSessionTemplate.delete("mailCallRecordServiceDaoImpl.deleteMailCallRecord", 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 mailId 邮寄信编号(可选) * @param callDate 电联日期(可选) * @param callResult 电联结果(可选) * @param callContact 被电联联系人(可选) * @param caller 电联执行人员(可选) * @param startCreateTime 创建时间开始范围(可选) * @param endCreateTime 创建时间结束范围(可选) * @param startUpdateTime 更新时间开始范围(可选) * @param endUpdateTime 更新时间结束范围(可选) * @return 响应结果 * @serviceCode /mailCallRecord/getMailCallRecord * @path /app/mailCallRecord/getMailCallRecord */ @RequestMapping(value = "/getMailCallRecord", method = RequestMethod.GET) public ResponseEntity getMailCallRecord( @RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "row", defaultValue = "10") int row, @RequestParam(value = "id", required = false) String id, @RequestParam(value = "mailId", required = false) String mailId, @RequestParam(value = "callDate", required = false) String callDate, @RequestParam(value = "callResult", required = false) String callResult, @RequestParam(value = "callContact", required = false) String callContact, @RequestParam(value = "caller", required = false) String caller, @RequestParam(value = "startCreateTime", required = false) String startCreateTime, @RequestParam(value = "endCreateTime", required = false) String endCreateTime, @RequestParam(value = "startUpdateTime", required = false) String startUpdateTime, @RequestParam(value = "endUpdateTime", required = false) String endUpdateTime) { // 封装查询参数 Map param = new HashMap<>(); param.put("page", (page - 1) * row); // 转换为MySQL分页偏移量 param.put("row", row); param.put("id", id); param.put("mailId", mailId); param.put("callDate", callDate); param.put("callResult", callResult); param.put("callContact", callContact); param.put("caller", caller); param.put("startCreateTime", startCreateTime); param.put("endCreateTime", endCreateTime); param.put("startUpdateTime", startUpdateTime); param.put("endUpdateTime", endUpdateTime); // 查询列表数据 List> list = sqlSessionTemplate.selectList( "mailCallRecordServiceDaoImpl.getMailCallRecord", param); // 查询总数 Map countMap = sqlSessionTemplate.selectOne( "mailCallRecordServiceDaoImpl.queryMailCallRecordCount", 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, MailCallRecord.class)); return ResponseEntity.ok(resJson.toJSONString()); } /** * 查询邮寄信电联记录统计信息 * * @param mailId 邮寄信编号(可选) * @param callResult 电联结果(可选) * @param startCreateTime 创建时间开始范围(可选) * @param endCreateTime 创建时间结束范围(可选) * @return 响应结果 * @serviceCode /mailCallRecord/queryMailCallRecordStatistics * @path /app/mailCallRecord/queryMailCallRecordStatistics */ @RequestMapping(value = "/queryMailCallRecordStatistics", method = RequestMethod.GET) public ResponseEntity queryMailCallRecordStatistics( @RequestParam(value = "mailId", required = false) String mailId, @RequestParam(value = "callResult", required = false) String callResult, @RequestParam(value = "startCreateTime", required = false) String startCreateTime, @RequestParam(value = "endCreateTime", required = false) String endCreateTime) { // 封装查询参数 Map param = new HashMap<>(); param.put("mailId", mailId); param.put("callResult", callResult); param.put("startCreateTime", startCreateTime); param.put("endCreateTime", endCreateTime); // 统计查询 Map statistics = sqlSessionTemplate.selectOne( "mailCallRecordServiceDaoImpl.queryMailCallRecordStatistics", param); JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "统计邮寄信电联记录信息成功"); resJson.put("data", statistics); return ResponseEntity.ok(resJson.toJSONString()); } /** * 按年月分组统计邮寄信电联记录数量 * * @param mailId 邮寄信编号(可选) * @param callResult 电联结果(可选) * @param startCreateTime 创建时间开始范围(可选) * @param endCreateTime 创建时间结束范围(可选) * @return 响应结果 * @serviceCode /mailCallRecord/queryMailCallRecordByMonth * @path /app/mailCallRecord/queryMailCallRecordByMonth */ @RequestMapping(value = "/queryMailCallRecordByMonth", method = RequestMethod.GET) public ResponseEntity queryMailCallRecordByMonth( @RequestParam(value = "mailId", required = false) String mailId, @RequestParam(value = "callResult", required = false) String callResult, @RequestParam(value = "startCreateTime", required = false) String startCreateTime, @RequestParam(value = "endCreateTime", required = false) String endCreateTime) { // 封装查询参数 Map param = new HashMap<>(); param.put("mailId", mailId); param.put("callResult", callResult); param.put("startCreateTime", startCreateTime); param.put("endCreateTime", endCreateTime); // 按年月统计查询 List> resultList = sqlSessionTemplate.selectList( "mailCallRecordServiceDaoImpl.queryMailCallRecordByMonth", param); JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "按年月分组统计邮寄信电联记录数量成功"); resJson.put("data", resultList); return ResponseEntity.ok(resJson.toJSONString()); } /** * 根据mail_id查询最新的邮寄信电联记录信息 * * @param mailId 邮寄信编号(必选) * @return 响应结果 * @serviceCode /mailCallRecord/getLatestMailCallRecordByMailId * @path /app/mailCallRecord/getLatestMailCallRecordByMailId */ @RequestMapping(value = "/getLatestMailCallRecordByMailId", method = RequestMethod.GET) public ResponseEntity getLatestMailCallRecordByMailId( @RequestParam(value = "mailId") String mailId) { // 参数校验 Assert.hasLength(mailId, "邮寄信编号mailId不能为空"); // 封装查询参数 Map param = new HashMap<>(); param.put("mailId", mailId); // 查询最新记录 Map recordMap = sqlSessionTemplate.selectOne( "mailCallRecordServiceDaoImpl.getLatestMailCallRecordByMailId", param); MailCallRecord record = null; if (recordMap != null) { record = BeanConvertUtil.covertBean(recordMap, MailCallRecord.class); } JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "查询最新邮寄信电联记录信息成功"); resJson.put("data", record); return ResponseEntity.ok(resJson.toJSONString()); } }