package com.farriver.bwf.service.system; import com.alibaba.fastjson2.JSON; import com.farriver.bwf.common.model.ApiData; import com.farriver.bwf.common.model.ApiPageData; import com.farriver.bwf.common.options.ActionType; import com.farriver.bwf.common.options.MapDataType; import com.farriver.bwf.common.statics.LangConstants; import com.farriver.bwf.common.utilities.DateTimeUtils; import com.farriver.bwf.data.master.mapper.SystemAuditTrailMapper; import com.farriver.bwf.data.master.model.SystemAuditTrail; import com.farriver.bwf.data.master.model.SystemAuditTrailExample; import com.farriver.bwf.data.transferobject.queryobject.system.SystemAuditTrailQueryObject; import com.farriver.bwf.data.transferobject.viewmodel.system.SystemAuditTrailViewModel; import com.farriver.bwf.service.ServiceBase; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.apache.poi.hpsf.DocumentSummaryInformation; import org.apache.poi.hpsf.SummaryInformation; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import java.io.ByteArrayOutputStream; import java.util.*; @Service public class SystemAuditTrailService extends ServiceBase { private static final Logger logger = LoggerFactory.getLogger(SystemAuditTrailService.class); private String message; @Resource SystemAuditTrailMapper systemAuditTrailMapper; public Map GetList(SystemAuditTrailQueryObject queryObject) { if (queryObject == null) ApiPageData.error(LangConstants.MSG_ERROR_PARAMETERS); SystemAuditTrailExample example = new SystemAuditTrailExample(); SystemAuditTrailExample.Criteria criteria = example.createCriteria(); //查询条件 if (queryObject.getFilter() != null && !queryObject.getFilter().isEmpty()) { criteria.andModuleLike("%" + queryObject.getFilter() + "%"); SystemAuditTrailExample.Criteria criteria2 = example.createCriteria(); criteria2.andMessageLike("%" + queryObject.getFilter() + "%"); example.or(criteria2); } else { if (queryObject.getId() != null && !queryObject.getId().isEmpty()) { criteria.andIdEqualTo(queryObject.getId()); } if (queryObject.getMessage() != null && !queryObject.getMessage().isEmpty()) { criteria.andMessageLike("%" + queryObject.getMessage() + "%"); } if (queryObject.getActionby() != null && !queryObject.getActionby().isEmpty()) { criteria.andActionbyLike("%" + queryObject.getActionby() + "%"); } if (queryObject.getActiontype() != null && !queryObject.getActiontype().isEmpty()) { criteria.andActiontypeLike("%" + queryObject.getActiontype() + "%"); } if (queryObject.getActionip() != null && !queryObject.getActionip().isEmpty()) { criteria.andActionipLike("%" + queryObject.getActionip() + "%"); } if (queryObject.getModule() != null && !queryObject.getModule().isEmpty()) { criteria.andModuleLike("%" + queryObject.getModule() + "%"); } if (queryObject.getStartDateTime() != null && queryObject.getEndDateTime() != null) { criteria.andActiontimeBetween(queryObject.getStartDateTime(), queryObject.getEndDateTime()); } } //查询总数 long total = systemAuditTrailMapper.countByExample(example); //分页 int pageIndex = queryObject.getPageIndex(); int pageSize = queryObject.getPageSize(); if (pageIndex > 0 && pageSize > 0) { example.setRows(pageSize); example.setOffset((pageIndex - 1) * pageSize); } example.setOrderByClause("actiontime desc"); List list = systemAuditTrailMapper.selectByExample(example); Map map = new HashMap<>(); map.put(MapDataType.DATA_LIST, list); map.put(MapDataType.TOTAL_COUNT, total); map.put(MapDataType.PAGE_INDEX, pageIndex); map.put(MapDataType.PAGE_SIZE, pageSize); return map; } public SystemAuditTrail GetDetail(SystemAuditTrailQueryObject queryObject) { Map map = GetList(queryObject); Object object = map.get(MapDataType.DATA_LIST); if (object != null) { List list = (List) object; if (list != null && list.size() == 1) return list.get(0); } return null; } public ApiData Create(SystemAuditTrailViewModel model) { SystemAuditTrail entity = Check(ActionType.CREATE, model); if (entity != null) { return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, systemAuditTrailMapper.insertSelective(entity)); } else { return ApiData.error(message); } } public ApiData Update(SystemAuditTrailViewModel model) { SystemAuditTrail entity = Check(ActionType.UPDATE, model); if (entity != null) { return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, systemAuditTrailMapper.updateByPrimaryKeySelective(entity)); } else { return ApiData.error(message); } } public ApiData Delete(String id) { return ApiData.ok("", systemAuditTrailMapper.deleteByPrimaryKey(id)); } public ApiData BatchDelete(SystemAuditTrailQueryObject queryObject) { Map map = GetList(queryObject); Object object = map.get(MapDataType.DATA_LIST); int count = 0; if (object != null) { List list = (List) object; if (list != null && list.size() > 0) { List ids = list.stream().map(SystemAuditTrail::getId).toList(); SystemAuditTrailExample example = new SystemAuditTrailExample(); SystemAuditTrailExample.Criteria criteria = example.createCriteria(); criteria.andIdIn(ids); count += systemAuditTrailMapper.deleteByExample(example); } } return ApiData.ok("", count); } public SystemAuditTrailViewModel GetViewDetail(SystemAuditTrailQueryObject queryObject) { SystemAuditTrail entity = GetDetail(queryObject); if (entity == null) { return null; } return BuildViewModel(entity); } public ApiPageData GetViewPageList(SystemAuditTrailQueryObject queryObject) { Map map = GetList(queryObject); List list = (List) map.get(MapDataType.DATA_LIST); List viewModels = new ArrayList<>(); for (SystemAuditTrail entity : list) { SystemAuditTrailViewModel viewModel = BuildViewModel(entity); viewModels.add(viewModel); } ApiPageData bean = ApiPageData.build(); bean.setData(viewModels); bean.setTotal((Long) map.get(MapDataType.TOTAL_COUNT)); return bean; } public ResponseEntity ExportData(SystemAuditTrailQueryObject queryObject) { Map map = GetList(queryObject); List list = (List) map.get(MapDataType.DATA_LIST); //1. 创建一个 Excel 文档 HSSFWorkbook workbook = new HSSFWorkbook(); // 2. 创建文档摘要 workbook.createInformationProperties(); // 3. 获取并配置文档信息 DocumentSummaryInformation docInfo = workbook.getDocumentSummaryInformation(); //文档类别 docInfo.setCategory(""); //文档管理员 docInfo.setManager(""); //设置公司信息 docInfo.setCompany(""); // 4. 获取文档摘要信息 SummaryInformation summInfo = workbook.getSummaryInformation(); //文档标题 summInfo.setTitle(""); //文档作者 summInfo.setAuthor(""); // 文档备注 summInfo.setComments(""); //5. 创建样式 HSSFSheet sheet = workbook.createSheet("Sheet1"); //设置列的宽度 HSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy")); cellStyle.setAlignment(HorizontalAlignment.LEFT); cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); sheet.setColumnWidth(0, 20 * 256); sheet.setDefaultColumnStyle(0, cellStyle); sheet.setColumnWidth(1, 16 * 256); sheet.setDefaultColumnStyle(1, cellStyle); sheet.setColumnWidth(2, 16 * 256); sheet.setDefaultColumnStyle(2, cellStyle); sheet.setColumnWidth(3, 16 * 256); sheet.setDefaultColumnStyle(3, cellStyle); sheet.setColumnWidth(4, 16 * 256); sheet.setDefaultColumnStyle(4, cellStyle); sheet.setColumnWidth(5, 32 * 256); sheet.setDefaultColumnStyle(5, cellStyle); sheet.setColumnWidth(6, 100 * 256); sheet.setColumnWidth(7, 100 * 256); HSSFCellStyle textCellStyle = workbook.createCellStyle(); textCellStyle.setAlignment(HorizontalAlignment.LEFT); textCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); textCellStyle.setWrapText(true); sheet.setDefaultColumnStyle(6, textCellStyle); sheet.setDefaultColumnStyle(7, textCellStyle); //6. 创建标题行 //创建标题行的样式 HSSFCellStyle headerStyle = workbook.createCellStyle(); headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setAlignment(HorizontalAlignment.LEFT); headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); headerStyle.setBorderTop(BorderStyle.THIN); headerStyle.setBorderBottom(BorderStyle.THIN); headerStyle.setBorderLeft(BorderStyle.THIN); Short headRowheight = 500; HSSFRow r0 = sheet.createRow(0); r0.setHeight(headRowheight); HSSFCell c0 = r0.createCell(0); c0.setCellValue("操作时间"); c0.setCellStyle(headerStyle); HSSFCell c1 = r0.createCell(1); c1.setCellStyle(headerStyle); c1.setCellValue("系统模块"); HSSFCell c2 = r0.createCell(2); c2.setCellStyle(headerStyle); c2.setCellValue("操作类型"); HSSFCell c3 = r0.createCell(3); c3.setCellStyle(headerStyle); c3.setCellValue("操作人"); HSSFCell c4 = r0.createCell(4); c4.setCellStyle(headerStyle); c4.setCellValue("登录IP"); HSSFCell c5 = r0.createCell(5); c5.setCellStyle(headerStyle); c5.setCellValue("操作信息"); HSSFCell c6 = r0.createCell(6); c6.setCellStyle(headerStyle); c6.setCellValue("修改前数据"); HSSFCell c7 = r0.createCell(7); c7.setCellStyle(headerStyle); c7.setCellValue("修改后数据"); for (int i = 0; i < list.size(); i++) { SystemAuditTrail entity = list.get(i); HSSFRow row = sheet.createRow(i + 1); row.createCell(0).setCellValue(DateTimeUtils.dateToString(entity.getActiontime(), "yyyy/MM/dd HH:mm:ss")); row.createCell(1).setCellValue(entity.getModule()); row.createCell(2).setCellValue(entity.getActiontype()); row.createCell(3).setCellValue(entity.getActionby()); row.createCell(4).setCellValue(entity.getActionip()); row.createCell(5).setCellValue(entity.getMessage()); row.createCell(6).setCellValue(entity.getBeforetarget()); row.createCell(7).setCellValue(entity.getAftertarget()); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); HttpHeaders headers = new HttpHeaders(); try { headers.setContentDispositionFormData("attachment", new String((UUID.randomUUID().toString() + ".xls").getBytes("UTF-8"), "ISO-8859-1")); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); workbook.write(baos); } catch (Exception e) { logger.error(e.getMessage(), e); } return new ResponseEntity(baos.toByteArray(), headers, HttpStatus.CREATED); } private SystemAuditTrailViewModel monitorModel; public SystemAuditTrailViewModel getMonitorModel() { return monitorModel; } public void setMonitorModel(SystemAuditTrailViewModel monitorModel) { this.monitorModel = monitorModel; } public void BeginMonitor(String message, String module, ActionType actionType, Object orgianl) { RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); if (requestAttributes == null) return; HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); var user = GetSessionAccount(); this.monitorModel = new SystemAuditTrailViewModel(); if (user != null) this.monitorModel.setActionby(String.format("%s(%s)", user.getName(), user.getCode())); this.monitorModel.setMessage(message); this.monitorModel.setModule(module); this.monitorModel.setActionip(request.getRemoteAddr()); this.monitorModel.setActiontime(new Date()); this.monitorModel.setActiontype(actionType.toString()); if (orgianl != null) this.monitorModel.setBeforetarget(JSON.toJSONString(orgianl)); } public void EndMonitor(Object latest) { if (latest != null && this.monitorModel.getActiontype().equals(ActionType.UPDATE.toString())) this.monitorModel.setAftertarget(JSON.toJSONString(latest)); Create(this.monitorModel); this.monitorModel = null; } //private methods private static SystemAuditTrailViewModel BuildViewModel(SystemAuditTrail entity) { if (entity == null) return null; SystemAuditTrailViewModel model = new SystemAuditTrailViewModel(); model.setId(entity.getId()); model.setMessage(entity.getMessage()); model.setActionby(entity.getActionby()); model.setActiontype(entity.getActiontype()); model.setActionip(entity.getActionip()); model.setActiontime(entity.getActiontime()); model.setModule(entity.getModule()); model.setBeforetarget(entity.getBeforetarget()); model.setAftertarget(entity.getAftertarget()); model.setIsdeleted(entity.getIsdeleted()); model.setRemark(entity.getRemark()); model.setCreatetime(entity.getCreatetime()); model.setUpdatetime(entity.getUpdatetime()); return model; } public SystemAuditTrail Check(ActionType actionType, SystemAuditTrailViewModel model) { message = ""; if (model == null) { message = LangConstants.MSG_ERROR_PARAMETERS; return null; } SystemAuditTrail entity = null; if (ActionType.CREATE == actionType) { entity = new SystemAuditTrail(); entity.setId(UUID.randomUUID().toString()); entity.setActiontime(new Date()); entity.setCreatetime(new Date()); entity.setIsdeleted(false); } else { SystemAuditTrailQueryObject queryObject = new SystemAuditTrailQueryObject(); queryObject.setId(model.getId()); entity = GetDetail(queryObject); entity.setUpdatetime(new Date()); } entity.setMessage(model.getMessage()); entity.setActionby(model.getActionby()); entity.setActiontype(model.getActiontype()); entity.setActionip(model.getActionip()); entity.setModule(model.getModule()); entity.setRemark(model.getRemark()); entity.setBeforetarget(model.getBeforetarget()); entity.setAftertarget(model.getAftertarget()); return entity; } }