From 19205ea510d5a37ccfe5e5699dba298ce26a119b Mon Sep 17 00:00:00 2001 From: fengyarnom Date: Mon, 9 Jun 2025 14:39:41 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Revert=20"feat=EF=BC=9A=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit a007b35d18f039f02506788fa2eed5738b1f0383. --- .../com/imdroid/secapi/dto/TrafficRecord.java | 19 --- .../beidou/controller/SimCardController.java | 117 +----------------- .../templates/page/sim_traffic_records.html | 8 -- 3 files changed, 1 insertion(+), 143 deletions(-) diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecord.java b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecord.java index 49f748d4..5d023db0 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecord.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecord.java @@ -1,7 +1,5 @@ package com.imdroid.secapi.dto; -import com.alibaba.excel.annotation.ExcelIgnore; -import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -15,30 +13,13 @@ import java.util.Date; public class TrafficRecord { @TableId(type = IdType.AUTO) - @ExcelIgnore private Integer id; - @ExcelProperty("ICCID") private String iccid; - @ExcelProperty("记录时间") private Date recordtime; - @ExcelProperty("剩余流量(MB)") private Integer remaining; // 剩余流量(MB×1000) - - @ExcelProperty("已用流量(MB)") private Integer used; // 已用流量(MB×1000) - - @ExcelProperty("总流量(MB)") private Integer total; // 总流量(MB×1000) - - // Excel 导出用,不是数据库的字段!!! - @TableField(exist = false) - @ExcelProperty("设备号") - private String deviceid; - - @TableField(exist = false) - @ExcelProperty("SIM卡号") - private String msisdn; } \ No newline at end of file diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/SimCardController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/SimCardController.java index 0a093ae5..e09e45da 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/SimCardController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/SimCardController.java @@ -2,10 +2,8 @@ package com.imdroid.beidou.controller; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.imdroid.beidou.service.CommonExcelService; import com.imdroid.secapi.dto.*; import org.apache.http.HttpEntity; import org.apache.http.util.EntityUtils; @@ -22,14 +20,12 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.security.MessageDigest; import java.util.*; @Controller -public class SimCardController extends BasicController implements CommonExcelService { +public class SimCardController extends BasicController { @Value("${sim.url}") private String BASE_URL; @Value("${sim.username}") @@ -359,93 +355,6 @@ public class SimCardController extends BasicController implements CommonExcelSer } } - @RequestMapping("/sim/traffic-records/export") - @ResponseBody - public void exportTrafficRecords(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws Exception { - QueryWrapper queryWrapper = new QueryWrapper<>(); - - String searchType = request.getParameter("searchType"); - String searchContent = request.getParameter("searchContent"); - String startTime = request.getParameter("startTime"); - String endTime = request.getParameter("endTime"); - - if (!StringUtils.isEmpty(searchContent)) { - switch(searchType) { - case "deviceId": - GnssDevice device = gnssDeviceMapper.queryByDeviceId(searchContent.trim()); - if (device != null && device.getIccid() != null && !device.getIccid().trim().isEmpty()) { - queryWrapper.eq("iccid", device.getIccid()); - } else { - queryWrapper.eq("iccid", ""); - } - break; - case "iccid": - queryWrapper.like("iccid", searchContent.trim()); - break; - case "simNumber": - TrafficCard cardByMsisdn = trafficCardMapper.selectOne( - new QueryWrapper().like("msisdn", searchContent.trim()) - ); - if (cardByMsisdn != null) { - queryWrapper.eq("iccid", cardByMsisdn.getIccid()); - } else { - queryWrapper.eq("iccid", ""); - } - break; - } - } - - if (!StringUtils.isEmpty(startTime)) { - queryWrapper.ge("recordtime", startTime); - } - if (!StringUtils.isEmpty(endTime)) { - queryWrapper.le("recordtime", endTime); - } - - queryWrapper.orderByDesc("recordtime"); - - List records = trafficRecordMapper.selectList(queryWrapper); - - // 填充导出所需的额外字段 - for (TrafficRecord record : records) { - GnssDevice device = gnssDeviceMapper.selectOne( - new QueryWrapper().eq("iccid", record.getIccid()) - ); - if (device != null) { - record.setDeviceid(device.getDeviceid()); - } else { - record.setDeviceid("无绑定设备"); - } - - TrafficCard trafficCard = trafficCardMapper.findByIccid(record.getIccid()); - if (trafficCard != null) { - record.setMsisdn(trafficCard.getMsisdn()); - } else { - record.setMsisdn("-"); - } - - // 转换流量单位为MB (除以1000) - if (record.getRemaining() != null) { - record.setRemaining(record.getRemaining() / 1000); - } - if (record.getUsed() != null) { - record.setUsed(record.getUsed() / 1000); - } - if (record.getTotal() != null) { - record.setTotal(record.getTotal() / 1000); - } - } - - response.setContentType("application/vnd.ms-excel"); - response.setCharacterEncoding("utf-8"); - String filename = System.currentTimeMillis() + "_流量使用记录.xlsx"; - response.setHeader("Content-disposition", "attachment;filename=" + filename); - - com.alibaba.excel.EasyExcel.write(response.getOutputStream(), TrafficRecord.class) - .sheet("流量使用记录") - .doWrite(records); - } - @RequestMapping("/sim/device-mapping") @ResponseBody public JSONObject getDeviceMapping(HttpSession session, @@ -545,30 +454,6 @@ public class SimCardController extends BasicController implements CommonExcelSer } } - @Override - public Class getEntityClass() { - return TrafficRecord.class; - } - - @Override - public BaseMapper getMapper() { - return trafficRecordMapper; - } - - @Override - public String getOrderByColumn() { - return "recordtime"; - } - - @Override - public String getOrder() { - return "desc"; - } - - @Override - public String tenantIdField() { - return null; // TrafficRecord表没有租户字段 - } } diff --git a/sec-beidou/src/main/resources/templates/page/sim_traffic_records.html b/sec-beidou/src/main/resources/templates/page/sim_traffic_records.html index 8ea8286c..25d2d386 100644 --- a/sec-beidou/src/main/resources/templates/page/sim_traffic_records.html +++ b/sec-beidou/src/main/resources/templates/page/sim_traffic_records.html @@ -48,7 +48,6 @@
-
@@ -158,13 +157,6 @@ }); return false; }); - - form.on('submit(exportSubmit)', function (data) { - var result = $('#searchForm').serialize(); - var u = "/sim/traffic-records/export?" + result; - window.open(u, "_blank"); - return false; - }); }); From 199dc8c092b5b89fd72f5a5ecaa95ac5cf2182ea Mon Sep 17 00:00:00 2001 From: fengyarnom Date: Wed, 11 Jun 2025 11:38:16 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9ESIM=E5=8D=A1?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beidou/controller/SimCardController.java | 456 ++++++++++++++++++ .../templates/page/sim_device_mapping.html | 15 + .../resources/templates/page/sim_status.html | 67 ++- .../templates/page/sim_traffic_query.html | 25 + .../templates/page/sim_traffic_records.html | 21 + 5 files changed, 583 insertions(+), 1 deletion(-) diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/SimCardController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/SimCardController.java index e09e45da..995b3538 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/SimCardController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/SimCardController.java @@ -1,5 +1,6 @@ package com.imdroid.beidou.controller; +import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -21,8 +22,10 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpServletResponse; import java.security.MessageDigest; import java.util.*; +import java.net.URLEncoder; @Controller public class SimCardController extends BasicController { @@ -454,6 +457,459 @@ public class SimCardController extends BasicController { } } + @RequestMapping("/sim/export") + @ResponseBody + public void exportSimList(HttpServletResponse response, String searchType, String searchContent, Integer status, Boolean exportAll, Integer pageSize) { + try { + System.out.println("开始导出SIM卡数据, 参数: searchType=" + searchType + ", searchContent=" + searchContent + + ", status=" + status + ", exportAll=" + exportAll + ", pageSize=" + pageSize); + + QueryWrapper deviceQueryWrapper = new QueryWrapper<>(); + + if (!StringUtils.isEmpty(searchContent)) { + switch(searchType) { + case "deviceId": + deviceQueryWrapper.like("deviceid", searchContent.trim()); + break; + case "iccid": + deviceQueryWrapper.like("iccid", searchContent.trim()); + break; + case "simNumber": + // 通过SIM号查找对应的ICCID,然后查询设备 + TrafficCard cardByMsisdn = trafficCardMapper.selectOne( + new QueryWrapper().like("msisdn", searchContent.trim()) + ); + if (cardByMsisdn != null) { + deviceQueryWrapper.eq("iccid", cardByMsisdn.getIccid()); + } else { + deviceQueryWrapper.eq("iccid", ""); + } + break; + } + } + + deviceQueryWrapper.isNotNull("iccid"); + deviceQueryWrapper.ne("iccid", ""); + + if (status != null) { + List cardsWithStatus = trafficCardMapper.selectList( + new QueryWrapper().eq("status", status) + ); + if (!cardsWithStatus.isEmpty()) { + List iccids = new ArrayList<>(); + for (TrafficCard card : cardsWithStatus) { + iccids.add(card.getIccid()); + } + deviceQueryWrapper.in("iccid", iccids); + } else { + deviceQueryWrapper.eq("iccid", "不存在的ICCID"); + } + } + + deviceQueryWrapper.orderByDesc("deviceid"); + + List devices; + if (Boolean.TRUE.equals(exportAll)) { + devices = gnssDeviceMapper.selectList(deviceQueryWrapper); + } else { + int limit = pageSize != null && pageSize > 0 ? pageSize : 20; // 默认20条,与前端表格默认一致 + Page pageable = new Page<>(1, limit); + IPage devicePage = gnssDeviceMapper.selectPage(pageable, deviceQueryWrapper); + devices = devicePage.getRecords(); + } + + if (devices.isEmpty()) { + devices = new ArrayList<>(); + GnssDevice emptyDevice = new GnssDevice(); + emptyDevice.setDeviceid("无数据"); + emptyDevice.setIccid(""); + devices.add(emptyDevice); + } + + List> exportList = new ArrayList<>(); + List headList = Arrays.asList("设备号", "ICCID", "SIM卡号", "状态", + "剩余流量(MB)", "总流量(MB)", "已用流量(MB)", "更新时间"); + + for (GnssDevice device : devices) { + List rowData = new ArrayList<>(); + rowData.add(device.getDeviceid()); + rowData.add(device.getIccid()); + + TrafficCard trafficCard = null; + if (device.getIccid() != null && !device.getIccid().trim().isEmpty()) { + trafficCard = trafficCardMapper.findByIccid(device.getIccid()); + } + + if (trafficCard != null) { + rowData.add(trafficCard.getMsisdn()); // SIM卡号 + + String statusStr; + switch(trafficCard.getStatus()) { + case 1: statusStr = "待激活"; break; + case 2: statusStr = "已激活"; break; + case 3: statusStr = "停机"; break; + case 4: statusStr = "注销"; break; + case 5: statusStr = "库存"; break; + case 6: statusStr = "可测试"; break; + case 7: statusStr = "失效"; break; + default: statusStr = "未知"; + } + rowData.add(statusStr); + // 单位转换:从KB到MB + rowData.add(trafficCard.getRemaining() != null ? + String.format("%.2f", trafficCard.getRemaining() / 1000.0) : "0"); // 剩余流量 + rowData.add(trafficCard.getTotal() != null ? + String.format("%.2f", trafficCard.getTotal() / 1000.0) : "0"); // 总流量 + rowData.add(trafficCard.getUsed() != null ? + String.format("%.2f", trafficCard.getUsed() / 1000.0) : "0"); // 已用流量 + rowData.add(trafficCard.getUpdatetime()); // 更新时间 + } else { + rowData.add("-"); // SIM卡号 + rowData.add("未知"); // 状态 + rowData.add("0"); // 剩余流量 + rowData.add("0"); // 总流量 + rowData.add("0"); // 已用流量 + rowData.add(""); // 更新时间 + } + + exportList.add(rowData); + } + + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("SIM卡信息", "UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); + + EasyExcel.write(response.getOutputStream()) + .head(createExcelHead(headList)) + .sheet("SIM卡信息") + .doWrite(exportList); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private List> createExcelHead(List headList) { + List> result = new ArrayList<>(); + for (String head : headList) { + List column = new ArrayList<>(); + column.add(head); + result.add(column); + } + return result; + } + + @RequestMapping("/sim/traffic-records/export") + @ResponseBody + public void exportTrafficRecords(HttpServletResponse response, String searchType, String searchContent, String startTime, String endTime) { + try { + System.out.println("开始导出SIM卡流量记录, 参数: searchType=" + searchType + ", searchContent=" + searchContent + + ", startTime=" + startTime + ", endTime=" + endTime); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + + if (!StringUtils.isEmpty(searchContent)) { + switch(searchType) { + case "deviceId": + GnssDevice device = gnssDeviceMapper.queryByDeviceId(searchContent.trim()); + if (device != null && device.getIccid() != null && !device.getIccid().trim().isEmpty()) { + queryWrapper.eq("iccid", device.getIccid()); + } else { + queryWrapper.eq("iccid", ""); + } + break; + case "iccid": + queryWrapper.like("iccid", searchContent.trim()); + break; + case "simNumber": + TrafficCard cardByMsisdn = trafficCardMapper.selectOne( + new QueryWrapper().like("msisdn", searchContent.trim()) + ); + if (cardByMsisdn != null) { + queryWrapper.eq("iccid", cardByMsisdn.getIccid()); + } else { + queryWrapper.eq("iccid", ""); + } + break; + } + } + + if (!StringUtils.isEmpty(startTime)) { + queryWrapper.ge("recordtime", startTime); + } + if (!StringUtils.isEmpty(endTime)) { + queryWrapper.le("recordtime", endTime); + } + + queryWrapper.orderByDesc("recordtime"); + + List records = trafficRecordMapper.selectList(queryWrapper); + + System.out.println("查询到流量记录数量: " + records.size()); + if (records.isEmpty()) { + records = new ArrayList<>(); + TrafficRecord emptyRecord = new TrafficRecord(); + emptyRecord.setIccid("无数据"); + records.add(emptyRecord); + } + + List> exportList = new ArrayList<>(); + List headList = Arrays.asList("设备号", "ICCID", "SIM卡号", "记录时间", + "剩余流量(MB)", "总流量(MB)", "已用流量(MB)"); + + for (TrafficRecord record : records) { + List rowData = new ArrayList<>(); + + GnssDevice device = gnssDeviceMapper.selectOne( + new QueryWrapper().eq("iccid", record.getIccid()) + ); + rowData.add(device != null ? device.getDeviceid() : "无绑定设备"); // 设备号 + rowData.add(record.getIccid()); // ICCID + + TrafficCard trafficCard = trafficCardMapper.findByIccid(record.getIccid()); + rowData.add(trafficCard != null ? trafficCard.getMsisdn() : "-"); // SIM卡号 + + rowData.add(record.getRecordtime()); // 记录时间 + + rowData.add(record.getRemaining() != null ? + String.format("%.2f", record.getRemaining() / 1000.0) : "0"); // 剩余流量 + rowData.add(record.getTotal() != null ? + String.format("%.2f", record.getTotal() / 1000.0) : "0"); // 总流量 + rowData.add(record.getUsed() != null ? + String.format("%.2f", record.getUsed() / 1000.0) : "0"); // 已用流量 + + exportList.add(rowData); + } + + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("SIM卡流量记录", "UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); + + EasyExcel.write(response.getOutputStream()) + .head(createExcelHead(headList)) + .sheet("SIM卡流量记录") + .doWrite(exportList); + + System.out.println("导出完成,流量记录数: " + exportList.size()); + + } catch (Exception e) { + e.printStackTrace(); + System.err.println("导出流量记录失败: " + e.getMessage()); + } + } + + @RequestMapping("/sim/device-mapping/export") + @ResponseBody + public void exportDeviceMapping(HttpServletResponse response, String searchType, String searchContent) { + try { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + if (!StringUtils.isEmpty(searchContent)) { + switch(searchType) { + case "deviceId": + queryWrapper.like("deviceid", searchContent.trim()); + break; + case "iccid": + queryWrapper.like("iccid", searchContent.trim()); + break; + case "simNumber": + TrafficCard cardByMsisdn = trafficCardMapper.selectOne( + new QueryWrapper().like("msisdn", searchContent.trim()) + ); + if (cardByMsisdn != null) { + queryWrapper.eq("iccid", cardByMsisdn.getIccid()); + } else { + queryWrapper.eq("iccid", ""); + } + break; + } + } + + queryWrapper.orderByDesc("starttime"); + + List mappings = trafficDeviceMappingMapper.selectList(queryWrapper); + + if (mappings.isEmpty()) { + mappings = new ArrayList<>(); + TrafficDeviceMapping emptyMapping = new TrafficDeviceMapping(); + emptyMapping.setDeviceid("无数据"); + emptyMapping.setIccid("无数据"); + mappings.add(emptyMapping); + } + + List> exportList = new ArrayList<>(); + List headList = Arrays.asList("设备号", "ICCID", "SIM卡号", "开始时间", "结束时间", "是否激活"); + + for (TrafficDeviceMapping mapping : mappings) { + List rowData = new ArrayList<>(); + + rowData.add(mapping.getDeviceid()); // 设备号 + rowData.add(mapping.getIccid()); // ICCID + + TrafficCard trafficCard = trafficCardMapper.findByIccid(mapping.getIccid()); + rowData.add(trafficCard != null ? trafficCard.getMsisdn() : "-"); // SIM卡号 + + rowData.add(mapping.getStarttime()); // 开始时间 + rowData.add(mapping.getEndtime()); // 结束时间 + rowData.add(mapping.getEndtime() == null ? "是" : "否"); // 是否激活 + + exportList.add(rowData); + } + + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("设备SIM卡映射记录", "UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); + + EasyExcel.write(response.getOutputStream()) + .head(createExcelHead(headList)) + .sheet("设备SIM卡映射记录") + .doWrite(exportList); + + } catch (Exception e) { + e.printStackTrace(); + System.err.println("导出设备映射记录失败: " + e.getMessage()); + } + } + + @RequestMapping("/sim/query/export") + @ResponseBody + public void exportSimDetail(HttpServletResponse response, String type, String content) { + try { + JSONObject apiResult = proxySimQuery(type, content); + + if (apiResult.getInteger("Status") != 1 || apiResult.getJSONObject("Data") == null) { + response.setContentType("text/html;charset=utf-8"); + response.getWriter().write("查询失败: " + apiResult.getString("Message")); + return; + } + + JSONObject cardData = apiResult.getJSONObject("Data"); + List> exportList = new ArrayList<>(); + + List basicInfo = new ArrayList<>(); + basicInfo.add("基本信息"); + basicInfo.add(""); + exportList.add(basicInfo); + + addExportRow(exportList, "运营商", getOperatorText(cardData.getInteger("operatortype"))); + addExportRow(exportList, "ICCID", cardData.getString("iccid")); + addExportRow(exportList, "SIM卡号", cardData.getString("msisdn")); + addExportRow(exportList, "IMSI", cardData.getString("imsi")); + + addExportRow(exportList, "套餐信息", ""); + addExportRow(exportList, "套餐ID", cardData.getString("packageid")); + addExportRow(exportList, "套餐名称", cardData.getString("packagename")); + + addExportRow(exportList, "时间信息", ""); + addExportRow(exportList, "激活时间", cardData.getString("activetime")); + addExportRow(exportList, "开始时间", cardData.getString("starttime")); + addExportRow(exportList, "结束时间", cardData.getString("stoptime")); + addExportRow(exportList, "沉默期结束", cardData.getString("silentdate")); + + addExportRow(exportList, "状态", getStatusText(cardData.getInteger("status"))); + + // APN信息 + if (cardData.getJSONObject("apn") != null) { + JSONObject apn = cardData.getJSONObject("apn"); + addExportRow(exportList, "APN信息", ""); + addExportRow(exportList, "APN ID", apn.getString("apnid")); + addExportRow(exportList, "状态", apn.getString("status").equals("01") ? "在线" : "离线"); + addExportRow(exportList, "IP", apn.getString("ip")); + addExportRow(exportList, "网络", getNetworkText(apn.getString("rat"))); + addExportRow(exportList, "设备状态", apn.getString("onoffstatus").equals("1") ? "开机" : "关机"); + } + + // GPRS流量 + if (cardData.getJSONObject("gprs") != null) { + JSONObject gprs = cardData.getJSONObject("gprs"); + addExportRow(exportList, "GPRS流量", ""); + addExportRow(exportList, "总流量(MB)", formatDouble(parseDouble(gprs.getString("total")))); + addExportRow(exportList, "已用流量(MB)", formatDouble(parseDouble(gprs.getString("used")))); + addExportRow(exportList, "剩余流量(MB)", formatDouble(parseDouble(gprs.getString("left")))); + } + + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("SIM卡详情-" + content, "UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); + + List> head = new ArrayList<>(); + List keyHead = new ArrayList<>(); + keyHead.add("属性"); + head.add(keyHead); + + List valueHead = new ArrayList<>(); + valueHead.add("值"); + head.add(valueHead); + + EasyExcel.write(response.getOutputStream()) + .head(head) + .sheet("SIM卡详情") + .doWrite(exportList); + + } catch (Exception e) { + e.printStackTrace(); + System.err.println("导出SIM卡详情失败: " + e.getMessage()); + } + } + + private void addExportRow(List> exportList, String key, String value) { + List row = new ArrayList<>(); + row.add(key); + row.add(value != null ? value : ""); + exportList.add(row); + } + + private String getOperatorText(Integer type) { + if (type == null) return "未知运营商"; + switch(type) { + case 1: return "中国移动"; + case 2: return "中国联通"; + case 3: return "中国电信"; + default: return "未知运营商"; + } + } + + private String getStatusText(Integer status) { + if (status == null) return "未知状态"; + switch(status) { + case 1: return "待激活"; + case 2: return "已激活"; + case 3: return "停机"; + case 4: return "注销"; + case 5: return "库存"; + case 6: return "可测试"; + case 7: return "失效"; + default: return "未知状态"; + } + } + + private String getNetworkText(String rat) { + if (rat == null) return "未知网络"; + switch(rat) { + case "1": return "3G"; + case "2": return "2G"; + case "6": return "4G"; + case "8": return "NB"; + default: return "未知网络"; + } + } + + private double parseDouble(String value) { + try { + return value != null ? Double.parseDouble(value) : 0.0; + } catch (Exception e) { + return 0.0; + } + } + + private String formatDouble(double value) { + return String.format("%.2f", value); + } + } diff --git a/sec-beidou/src/main/resources/templates/page/sim_device_mapping.html b/sec-beidou/src/main/resources/templates/page/sim_device_mapping.html index bdaae8a8..bd0908c1 100644 --- a/sec-beidou/src/main/resources/templates/page/sim_device_mapping.html +++ b/sec-beidou/src/main/resources/templates/page/sim_device_mapping.html @@ -37,6 +37,7 @@
+
@@ -158,6 +159,20 @@ }); return false; }); + + form.on('submit(data-export-btn)', function (data) { + var searchData = data.field; + var url = '/sim/device-mapping/export?'; + if (searchData.searchType) { + url += 'searchType=' + searchData.searchType; + } + if (searchData.searchContent) { + url += '&searchContent=' + encodeURIComponent(searchData.searchContent); + } + + window.location.href = url; + return false; + }); }); diff --git a/sec-beidou/src/main/resources/templates/page/sim_status.html b/sec-beidou/src/main/resources/templates/page/sim_status.html index d186eb16..d68c180f 100644 --- a/sec-beidou/src/main/resources/templates/page/sim_status.html +++ b/sec-beidou/src/main/resources/templates/page/sim_status.html @@ -15,7 +15,7 @@
搜索信息
-
+
@@ -52,6 +52,7 @@
+
@@ -265,6 +266,70 @@ }); return false; }); + + form.on('submit(data-export-btn)', function (data) { + layer.open({ + type: 1, + title: '导出选项', + shadeClose: true, + content: ` +
+
+
+ +
+ + +
+
+
+
+ + +
+
+
+
+ `, + success: function(layero, index) { + form.render('radio', 'exportForm'); + + // 监听导出确认 + form.on('submit(confirmExport)', function(formData) { + var searchData = data.field; + var url = '/sim/export?'; + if (searchData.searchType) { + url += 'searchType=' + searchData.searchType; + } + if (searchData.searchContent) { + url += '&searchContent=' + encodeURIComponent(searchData.searchContent); + } + if (searchData.status) { + url += '&status=' + searchData.status; + } + + // 获取当前表格的页大小(limit) + var currentLimit = layui.table.cache.simTable ? layui.table.cache.simTable.limit : 20; + + // 添加导出范围参数 + var exportAll = formData.field.exportRange === 'all'; + url += '&exportAll=' + exportAll; + + // 如果导出当前页,则传递页大小 + if (!exportAll) { + url += '&pageSize=' + currentLimit; + } + + window.location.href = url; + layer.close(index); + return false; + }); + } + }); + + return false; + }); + //监听Tab切换,重新resize图表,否则显示不出来 element.on('tab(data-tab)', function(data){ if(data.index === 1 && flowChart) { diff --git a/sec-beidou/src/main/resources/templates/page/sim_traffic_query.html b/sec-beidou/src/main/resources/templates/page/sim_traffic_query.html index 1d96e4f0..35db6268 100644 --- a/sec-beidou/src/main/resources/templates/page/sim_traffic_query.html +++ b/sec-beidou/src/main/resources/templates/page/sim_traffic_query.html @@ -35,6 +35,7 @@
+
@@ -63,6 +64,30 @@ searchSIM(); return false; }); + + form.on('submit(data-export-btn)', function (data) { + const searchInput = document.getElementById('searchInput'); + const searchContent = searchInput.value.trim(); + const searchType = document.querySelector('select[name="searchType"]').value; + + if (!searchContent) { + layer.msg('请输入搜索内容'); + return false; + } + + if (searchType === 'iccid' && !/^\d{19,20}$/.test(searchContent)) { + layer.msg('ICCID必须是19-20位数字'); + return false; + } + + if (searchType === 'simNumber' && !/^\d{11,13}$/.test(searchContent)) { + layer.msg('SIM卡号必须是11-13位数字'); + return false; + } + + window.location.href = `/sim/query/export?type=${searchType}&content=${encodeURIComponent(searchContent)}`; + return false; + }); }); function searchSIM() { diff --git a/sec-beidou/src/main/resources/templates/page/sim_traffic_records.html b/sec-beidou/src/main/resources/templates/page/sim_traffic_records.html index 25d2d386..6b3c1365 100644 --- a/sec-beidou/src/main/resources/templates/page/sim_traffic_records.html +++ b/sec-beidou/src/main/resources/templates/page/sim_traffic_records.html @@ -48,6 +48,7 @@
+
@@ -157,6 +158,26 @@ }); return false; }); + + form.on('submit(data-export-btn)', function (data) { + var searchData = data.field; + var url = '/sim/traffic-records/export?'; + if (searchData.searchType) { + url += 'searchType=' + searchData.searchType; + } + if (searchData.searchContent) { + url += '&searchContent=' + encodeURIComponent(searchData.searchContent); + } + if (searchData.startTime) { + url += '&startTime=' + encodeURIComponent(searchData.startTime); + } + if (searchData.endTime) { + url += '&endTime=' + encodeURIComponent(searchData.endTime); + } + + window.location.href = url; + return false; + }); });