diff --git a/nursing-unit-admin/nu-admin-api/nu-admin-local-api/pom.xml b/nursing-unit-admin/nu-admin-api/nu-admin-local-api/pom.xml
index 59cf75e..a6cb3eb 100644
--- a/nursing-unit-admin/nu-admin-api/nu-admin-local-api/pom.xml
+++ b/nursing-unit-admin/nu-admin-api/nu-admin-local-api/pom.xml
@@ -9,5 +9,11 @@
4.0.0
nu-admin-local-api
+
+
+ com.nursingunit.boot
+ nursing-unit-common
+
+
diff --git a/nursing-unit-admin/nu-admin-api/nu-admin-local-api/src/main/java/com/nu/modules/mediamanage/IMediaManageApi.java b/nursing-unit-admin/nu-admin-api/nu-admin-local-api/src/main/java/com/nu/modules/mediamanage/IMediaManageApi.java
new file mode 100644
index 0000000..4c28e6a
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-api/nu-admin-local-api/src/main/java/com/nu/modules/mediamanage/IMediaManageApi.java
@@ -0,0 +1,20 @@
+package com.nu.modules.mediamanage;
+
+import cn.hutool.json.JSONObject;
+import com.nu.dto.MediaManageMQDto;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IMediaManageApi {
+
+ /**
+ * 根据ids查询数据
+ *
+ * @param ids
+ * @return
+ */
+ List queryByIds(List ids);
+
+ void saveOrUpdate(MediaManageMQDto m, boolean isSave);
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/controller/MediaAsyncErrorLogController.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/controller/MediaAsyncErrorLogController.java
new file mode 100644
index 0000000..3e7e56e
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/controller/MediaAsyncErrorLogController.java
@@ -0,0 +1,180 @@
+package com.nu.modules.mediaasyncerrorlog.controller;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import com.nu.modules.mediaasyncerrorlog.entity.MediaAsyncErrorLog;
+import com.nu.modules.mediaasyncerrorlog.service.IMediaAsyncErrorLogService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+ /**
+ * @Description: 资源同步错误日志
+ * @Author: jeecg-boot
+ * @Date: 2025-05-22
+ * @Version: V1.0
+ */
+@Api(tags="资源同步错误日志")
+@RestController
+@RequestMapping("/mediaasyncerrorlog/mediaAsyncErrorLog")
+@Slf4j
+public class MediaAsyncErrorLogController extends JeecgController {
+ @Autowired
+ private IMediaAsyncErrorLogService mediaAsyncErrorLogService;
+
+ /**
+ * 分页列表查询
+ *
+ * @param mediaAsyncErrorLog
+ * @param pageNo
+ * @param pageSize
+ * @param req
+ * @return
+ */
+ //@AutoLog(value = "资源同步错误日志-分页列表查询")
+ @ApiOperation(value="资源同步错误日志-分页列表查询", notes="资源同步错误日志-分页列表查询")
+ @GetMapping(value = "/list")
+ public Result> queryPageList(MediaAsyncErrorLog mediaAsyncErrorLog,
+ @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+ @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+ HttpServletRequest req) {
+ QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(mediaAsyncErrorLog, req.getParameterMap());
+ Page page = new Page(pageNo, pageSize);
+ IPage pageList = mediaAsyncErrorLogService.page(page, queryWrapper);
+ return Result.OK(pageList);
+ }
+
+ /**
+ * 添加
+ *
+ * @param mediaAsyncErrorLog
+ * @return
+ */
+ @AutoLog(value = "资源同步错误日志-添加")
+ @ApiOperation(value="资源同步错误日志-添加", notes="资源同步错误日志-添加")
+ @RequiresPermissions("mediaasyncerrorlog:nu_media_async_error_log:add")
+ @PostMapping(value = "/add")
+ public Result add(@RequestBody MediaAsyncErrorLog mediaAsyncErrorLog) {
+ mediaAsyncErrorLogService.save(mediaAsyncErrorLog);
+ return Result.OK("添加成功!");
+ }
+
+ /**
+ * 编辑
+ *
+ * @param mediaAsyncErrorLog
+ * @return
+ */
+ @AutoLog(value = "资源同步错误日志-编辑")
+ @ApiOperation(value="资源同步错误日志-编辑", notes="资源同步错误日志-编辑")
+ @RequiresPermissions("mediaasyncerrorlog:nu_media_async_error_log:edit")
+ @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+ public Result edit(@RequestBody MediaAsyncErrorLog mediaAsyncErrorLog) {
+ mediaAsyncErrorLogService.updateById(mediaAsyncErrorLog);
+ return Result.OK("编辑成功!");
+ }
+
+ /**
+ * 通过id删除
+ *
+ * @param id
+ * @return
+ */
+ @AutoLog(value = "资源同步错误日志-通过id删除")
+ @ApiOperation(value="资源同步错误日志-通过id删除", notes="资源同步错误日志-通过id删除")
+ @RequiresPermissions("mediaasyncerrorlog:nu_media_async_error_log:delete")
+ @DeleteMapping(value = "/delete")
+ public Result delete(@RequestParam(name="id",required=true) String id) {
+ mediaAsyncErrorLogService.removeById(id);
+ return Result.OK("删除成功!");
+ }
+
+ /**
+ * 批量删除
+ *
+ * @param ids
+ * @return
+ */
+ @AutoLog(value = "资源同步错误日志-批量删除")
+ @ApiOperation(value="资源同步错误日志-批量删除", notes="资源同步错误日志-批量删除")
+ @RequiresPermissions("mediaasyncerrorlog:nu_media_async_error_log:deleteBatch")
+ @DeleteMapping(value = "/deleteBatch")
+ public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+ this.mediaAsyncErrorLogService.removeByIds(Arrays.asList(ids.split(",")));
+ return Result.OK("批量删除成功!");
+ }
+
+ /**
+ * 通过id查询
+ *
+ * @param id
+ * @return
+ */
+ //@AutoLog(value = "资源同步错误日志-通过id查询")
+ @ApiOperation(value="资源同步错误日志-通过id查询", notes="资源同步错误日志-通过id查询")
+ @GetMapping(value = "/queryById")
+ public Result queryById(@RequestParam(name="id",required=true) String id) {
+ MediaAsyncErrorLog mediaAsyncErrorLog = mediaAsyncErrorLogService.getById(id);
+ if(mediaAsyncErrorLog==null) {
+ return Result.error("未找到对应数据");
+ }
+ return Result.OK(mediaAsyncErrorLog);
+ }
+
+ /**
+ * 导出excel
+ *
+ * @param request
+ * @param mediaAsyncErrorLog
+ */
+ @RequiresPermissions("mediaasyncerrorlog:nu_media_async_error_log:exportXls")
+ @RequestMapping(value = "/exportXls")
+ public ModelAndView exportXls(HttpServletRequest request, MediaAsyncErrorLog mediaAsyncErrorLog) {
+ return super.exportXls(request, mediaAsyncErrorLog, MediaAsyncErrorLog.class, "资源同步错误日志");
+ }
+
+ /**
+ * 通过excel导入数据
+ *
+ * @param request
+ * @param response
+ * @return
+ */
+ @RequiresPermissions("mediaasyncerrorlog:nu_media_async_error_log:importExcel")
+ @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+ public Result> importExcel(HttpServletRequest request, HttpServletResponse response) {
+ return super.importExcel(request, response, MediaAsyncErrorLog.class);
+ }
+
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/entity/MediaAsyncErrorLog.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/entity/MediaAsyncErrorLog.java
new file mode 100644
index 0000000..a72d4a4
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/entity/MediaAsyncErrorLog.java
@@ -0,0 +1,53 @@
+package com.nu.modules.mediaasyncerrorlog.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 资源同步错误日志
+ * @Author: jeecg-boot
+ * @Date: 2025-05-22
+ * @Version: V1.0
+ */
+@Data
+@TableName("nu_media_async_error_log")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="nu_media_async_error_log对象", description="资源同步错误日志")
+public class MediaAsyncErrorLog implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**id*/
+ @TableId(type = IdType.ASSIGN_ID)
+ @ApiModelProperty(value = "id")
+ private java.lang.String id;
+ /**nu_media_manage.id*/
+ @Excel(name = "nu_media_manage.id", width = 15)
+ @ApiModelProperty(value = "nu_media_manage.id")
+ private java.lang.String mediaid;
+ /**找到id就是对应的nu_media_manage.id*/
+ @ApiModelProperty(value = "找到id就是对应的nu_media_manage.id")
+ private java.lang.String msg;
+ /**createTime*/
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "createTime")
+ private java.util.Date createTime;
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/mapper/MediaAsyncErrorLogMapper.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/mapper/MediaAsyncErrorLogMapper.java
new file mode 100644
index 0000000..59adb99
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/mapper/MediaAsyncErrorLogMapper.java
@@ -0,0 +1,17 @@
+package com.nu.modules.mediaasyncerrorlog.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import com.nu.modules.mediaasyncerrorlog.entity.MediaAsyncErrorLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 资源同步错误日志
+ * @Author: jeecg-boot
+ * @Date: 2025-05-22
+ * @Version: V1.0
+ */
+public interface MediaAsyncErrorLogMapper extends BaseMapper {
+
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/mapper/xml/MediaAsyncErrorLogMapper.xml b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/mapper/xml/MediaAsyncErrorLogMapper.xml
new file mode 100644
index 0000000..2474486
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/mapper/xml/MediaAsyncErrorLogMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/mapper/xml/NuMediaAsyncErrorLogMapper.xml b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/mapper/xml/NuMediaAsyncErrorLogMapper.xml
new file mode 100644
index 0000000..679261b
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/mapper/xml/NuMediaAsyncErrorLogMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/service/IMediaAsyncErrorLogService.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/service/IMediaAsyncErrorLogService.java
new file mode 100644
index 0000000..b633cfa
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/service/IMediaAsyncErrorLogService.java
@@ -0,0 +1,14 @@
+package com.nu.modules.mediaasyncerrorlog.service;
+
+import com.nu.modules.mediaasyncerrorlog.entity.MediaAsyncErrorLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 资源同步错误日志
+ * @Author: jeecg-boot
+ * @Date: 2025-05-22
+ * @Version: V1.0
+ */
+public interface IMediaAsyncErrorLogService extends IService {
+
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/service/impl/MediaAsyncErrorLogServiceImpl.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/service/impl/MediaAsyncErrorLogServiceImpl.java
new file mode 100644
index 0000000..4521ce8
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediaasyncerrorlog/service/impl/MediaAsyncErrorLogServiceImpl.java
@@ -0,0 +1,19 @@
+package com.nu.modules.mediaasyncerrorlog.service.impl;
+
+import com.nu.modules.mediaasyncerrorlog.entity.MediaAsyncErrorLog;
+import com.nu.modules.mediaasyncerrorlog.mapper.MediaAsyncErrorLogMapper;
+import com.nu.modules.mediaasyncerrorlog.service.IMediaAsyncErrorLogService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 资源同步错误日志
+ * @Author: jeecg-boot
+ * @Date: 2025-05-22
+ * @Version: V1.0
+ */
+@Service
+public class MediaAsyncErrorLogServiceImpl extends ServiceImpl implements IMediaAsyncErrorLogService {
+
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/controller/MediaManageController.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/controller/MediaManageController.java
new file mode 100644
index 0000000..6310ae6
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/controller/MediaManageController.java
@@ -0,0 +1,180 @@
+package com.nu.modules.mediamanage.controller;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import com.nu.modules.mediamanage.entity.MediaManage;
+import com.nu.modules.mediamanage.service.IMediaManageService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+ /**
+ * @Description: 媒体资源管理
+ * @Author: jeecg-boot
+ * @Date: 2025-05-15
+ * @Version: V1.0
+ */
+@Api(tags="媒体资源管理")
+@RestController
+@RequestMapping("/mediamanage/mediaManage")
+@Slf4j
+public class MediaManageController extends JeecgController {
+ @Autowired
+ private IMediaManageService mediaManageService;
+
+ /**
+ * 分页列表查询
+ *
+ * @param mediaManage
+ * @param pageNo
+ * @param pageSize
+ * @param req
+ * @return
+ */
+ //@AutoLog(value = "媒体资源管理-分页列表查询")
+ @ApiOperation(value="媒体资源管理-分页列表查询", notes="媒体资源管理-分页列表查询")
+ @GetMapping(value = "/list")
+ public Result> queryPageList(MediaManage mediaManage,
+ @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+ @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+ HttpServletRequest req) {
+ QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(mediaManage, req.getParameterMap());
+ Page page = new Page(pageNo, pageSize);
+ IPage pageList = mediaManageService.page(page, queryWrapper);
+ return Result.OK(pageList);
+ }
+
+ /**
+ * 添加
+ *
+ * @param mediaManage
+ * @return
+ */
+ @AutoLog(value = "媒体资源管理-添加")
+ @ApiOperation(value="媒体资源管理-添加", notes="媒体资源管理-添加")
+ @RequiresPermissions("mediamanage:nu_media_manage:add")
+ @PostMapping(value = "/add")
+ public Result add(@RequestBody MediaManage mediaManage) {
+ mediaManageService.save(mediaManage);
+ return Result.OK("添加成功!");
+ }
+
+ /**
+ * 编辑
+ *
+ * @param mediaManage
+ * @return
+ */
+ @AutoLog(value = "媒体资源管理-编辑")
+ @ApiOperation(value="媒体资源管理-编辑", notes="媒体资源管理-编辑")
+ @RequiresPermissions("mediamanage:nu_media_manage:edit")
+ @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+ public Result edit(@RequestBody MediaManage mediaManage) {
+ mediaManageService.updateById(mediaManage);
+ return Result.OK("编辑成功!");
+ }
+
+ /**
+ * 通过id删除
+ *
+ * @param id
+ * @return
+ */
+ @AutoLog(value = "媒体资源管理-通过id删除")
+ @ApiOperation(value="媒体资源管理-通过id删除", notes="媒体资源管理-通过id删除")
+ @RequiresPermissions("mediamanage:nu_media_manage:delete")
+ @DeleteMapping(value = "/delete")
+ public Result delete(@RequestParam(name="id",required=true) String id) {
+ mediaManageService.removeById(id);
+ return Result.OK("删除成功!");
+ }
+
+ /**
+ * 批量删除
+ *
+ * @param ids
+ * @return
+ */
+ @AutoLog(value = "媒体资源管理-批量删除")
+ @ApiOperation(value="媒体资源管理-批量删除", notes="媒体资源管理-批量删除")
+ @RequiresPermissions("mediamanage:nu_media_manage:deleteBatch")
+ @DeleteMapping(value = "/deleteBatch")
+ public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+ this.mediaManageService.removeByIds(Arrays.asList(ids.split(",")));
+ return Result.OK("批量删除成功!");
+ }
+
+ /**
+ * 通过id查询
+ *
+ * @param id
+ * @return
+ */
+ //@AutoLog(value = "媒体资源管理-通过id查询")
+ @ApiOperation(value="媒体资源管理-通过id查询", notes="媒体资源管理-通过id查询")
+ @GetMapping(value = "/queryById")
+ public Result queryById(@RequestParam(name="id",required=true) String id) {
+ MediaManage mediaManage = mediaManageService.getById(id);
+ if(mediaManage==null) {
+ return Result.error("未找到对应数据");
+ }
+ return Result.OK(mediaManage);
+ }
+
+ /**
+ * 导出excel
+ *
+ * @param request
+ * @param mediaManage
+ */
+ @RequiresPermissions("mediamanage:nu_media_manage:exportXls")
+ @RequestMapping(value = "/exportXls")
+ public ModelAndView exportXls(HttpServletRequest request, MediaManage mediaManage) {
+ return super.exportXls(request, mediaManage, MediaManage.class, "媒体资源管理");
+ }
+
+ /**
+ * 通过excel导入数据
+ *
+ * @param request
+ * @param response
+ * @return
+ */
+ @RequiresPermissions("mediamanage:nu_media_manage:importExcel")
+ @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+ public Result> importExcel(HttpServletRequest request, HttpServletResponse response) {
+ return super.importExcel(request, response, MediaManage.class);
+ }
+
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/entity/MediaManage.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/entity/MediaManage.java
new file mode 100644
index 0000000..70508b1
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/entity/MediaManage.java
@@ -0,0 +1,126 @@
+package com.nu.modules.mediamanage.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 媒体资源管理
+ * @Author: jeecg-boot
+ * @Date: 2025-05-15
+ * @Version: V1.0
+ */
+@Data
+@TableName("nu_media_manage")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false, onlyExplicitlyIncluded = true)
+@ApiModel(value = "nu_media_manage对象", description = "媒体资源管理")
+public class MediaManage implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ @ApiModelProperty(value = "id")
+ @EqualsAndHashCode.Include//参与对象对比
+ private java.lang.String id;
+ /**
+ * 名称
+ */
+ @Excel(name = "名称", width = 15)
+ @ApiModelProperty(value = "名称")
+ @EqualsAndHashCode.Include
+ private java.lang.String name;
+ /**
+ * 备注
+ */
+ @Excel(name = "备注", width = 15)
+ @ApiModelProperty(value = "备注")
+ @EqualsAndHashCode.Include
+ private java.lang.String descr;
+ /**
+ * 文件类型
+ */
+ @Excel(name = "文件类型", width = 15)
+ @ApiModelProperty(value = "文件类型")
+ @Dict(dicCode = "file_type")
+ @EqualsAndHashCode.Include
+ private java.lang.String fileType;
+ /**
+ * 系统功能
+ */
+ @Excel(name = "系统功能", width = 15)
+ @ApiModelProperty(value = "系统功能")
+ @Dict(dicCode = "sys_function")
+ @EqualsAndHashCode.Include
+ private java.lang.String sysFunc;
+ /**
+ * 文件路径
+ */
+ @Excel(name = "文件路径", width = 15)
+ @ApiModelProperty(value = "文件路径")
+ @EqualsAndHashCode.Include
+ private java.lang.String filePath;
+ /**
+ * 是否网络资源
+ */
+ @Excel(name = "是否网络资源", width = 15)
+ @ApiModelProperty(value = "是否网络资源")
+ @Dict(dicCode = "iz_net_url")
+ @EqualsAndHashCode.Include
+ private java.lang.String izNetUrl;
+ /**
+ * 是否删除
+ */
+ @Excel(name = "是否删除", width = 15)
+ @ApiModelProperty(value = "是否删除")
+ @TableLogic
+ @EqualsAndHashCode.Include
+ private java.lang.String delFlag;
+ /**
+ * 创建人
+ */
+ @ApiModelProperty(value = "创建人")
+ @EqualsAndHashCode.Include
+ private java.lang.String createBy;
+ /**
+ * 创建日期
+ */
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "创建日期")
+ @EqualsAndHashCode.Include
+ private java.util.Date createTime;
+ /**
+ * 更新人
+ */
+ @ApiModelProperty(value = "更新人")
+ @EqualsAndHashCode.Include
+ private java.lang.String updateBy;
+ /**
+ * 更新日期
+ */
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "更新日期")
+ @EqualsAndHashCode.Include
+ private java.util.Date updateTime;
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/mapper/MediaManageMapper.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/mapper/MediaManageMapper.java
new file mode 100644
index 0000000..f5902c4
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/mapper/MediaManageMapper.java
@@ -0,0 +1,17 @@
+package com.nu.modules.mediamanage.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import com.nu.modules.mediamanage.entity.MediaManage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 媒体资源管理
+ * @Author: jeecg-boot
+ * @Date: 2025-05-15
+ * @Version: V1.0
+ */
+public interface MediaManageMapper extends BaseMapper {
+
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/mapper/xml/MediaManageMapper.xml b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/mapper/xml/MediaManageMapper.xml
new file mode 100644
index 0000000..da570a5
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/mapper/xml/MediaManageMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/service/IMediaManageService.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/service/IMediaManageService.java
new file mode 100644
index 0000000..b6d5351
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/service/IMediaManageService.java
@@ -0,0 +1,14 @@
+package com.nu.modules.mediamanage.service;
+
+import com.nu.modules.mediamanage.entity.MediaManage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 媒体资源管理
+ * @Author: jeecg-boot
+ * @Date: 2025-05-15
+ * @Version: V1.0
+ */
+public interface IMediaManageService extends IService {
+
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/service/impl/MediaManageServiceImpl.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/service/impl/MediaManageServiceImpl.java
new file mode 100644
index 0000000..ea5b503
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/mediamanage/service/impl/MediaManageServiceImpl.java
@@ -0,0 +1,70 @@
+package com.nu.modules.mediamanage.service.impl;
+
+import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.nu.dto.MediaManageMQDto;
+import com.nu.modules.mediamanage.IMediaManageApi;
+import com.nu.modules.mediamanage.entity.MediaManage;
+import com.nu.modules.mediamanage.mapper.MediaManageMapper;
+import com.nu.modules.mediamanage.service.IMediaManageService;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 媒体资源管理
+ * @Author: jeecg-boot
+ * @Date: 2025-05-15
+ * @Version: V1.0
+ */
+@Service
+public class MediaManageServiceImpl extends ServiceImpl implements IMediaManageService, IMediaManageApi {
+ @Autowired
+ private ISysBaseAPI sysBaseAPI;
+
+ @Override
+ public List queryByIds(List ids) {
+ QueryWrapper qw = new QueryWrapper<>();
+ qw.in("id", ids);
+ List mediaManages = baseMapper.selectList(qw);
+
+ List result = new ArrayList<>();
+ for (MediaManage media : mediaManages) {
+ JSONObject json = new JSONObject();
+ json.put("id", media.getId());
+ json.put("name", media.getName());
+ json.put("descr", media.getDescr());
+ json.put("sysFunc", media.getSysFunc());
+ json.put("fileType", media.getFileType());
+ json.put("filePath", media.getFilePath());
+ json.put("izNetUrl", media.getIzNetUrl());
+ json.put("delFlag", media.getDelFlag());
+ json.put("createBy", media.getCreateBy());
+ json.put("createTime", media.getCreateTime());
+ json.put("updateBy", media.getUpdateBy());
+ json.put("updateTime", media.getUpdateTime());
+ result.add(json);
+ }
+
+ return result;
+ }
+
+ @Override
+ public void saveOrUpdate(MediaManageMQDto m, boolean isSave) {
+ MediaManage mediaManage = new MediaManage();
+ BeanUtils.copyProperties(m, mediaManage);
+
+ if (isSave) {
+ baseMapper.insert(mediaManage);
+ } else {
+ baseMapper.updateById(mediaManage);
+ }
+ }
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/mediamanage/exceptionhandler/MediaManageMQExceptionHandler.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/mediamanage/exceptionhandler/MediaManageMQExceptionHandler.java
new file mode 100644
index 0000000..f528246
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/mediamanage/exceptionhandler/MediaManageMQExceptionHandler.java
@@ -0,0 +1,28 @@
+package com.nu.mq.mediamanage.exceptionhandler;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.AmqpRejectAndDontRequeueException;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.listener.api.RabbitListenerErrorHandler;
+import org.springframework.amqp.rabbit.support.ListenerExecutionFailedException;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component("mediaManageMQErrorHandler")
+public class MediaManageMQExceptionHandler implements RabbitListenerErrorHandler {
+
+ @Override
+ public Object handleError(Message message, org.springframework.messaging.Message> message1, ListenerExecutionFailedException e) {
+ log.error("MQ消息处理失败 | 消息体: {} | 异常原因: {}", new String(message.getBody()), e.getCause().getMessage());
+
+ // 根据异常类型选择处理策略
+// if (isRetryable(e)) {
+// // 可重试异常:抛出异常触发重试
+// throw e;
+// } else {
+ // 不可恢复异常:拒绝消息且不重新入队
+ throw new AmqpRejectAndDontRequeueException("消息处理失败且禁止重试", e);
+// }
+ }
+
+}
diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/mediamanage/listener/MediaManageMQListener.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/mediamanage/listener/MediaManageMQListener.java
new file mode 100644
index 0000000..1627f38
--- /dev/null
+++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/mq/mediamanage/listener/MediaManageMQListener.java
@@ -0,0 +1,184 @@
+package com.nu.mq.mediamanage.listener;
+
+import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Maps;
+import com.nu.dto.MediaManageMQDto;
+import com.nu.dto.StatusMQDto;
+import com.nu.modules.async.entity.AsyncMain;
+import com.nu.modules.async.service.IAsyncMainService;
+import com.nu.modules.mediaasyncerrorlog.entity.MediaAsyncErrorLog;
+import com.nu.modules.mediaasyncerrorlog.service.IMediaAsyncErrorLogService;
+import com.nu.modules.mediamanage.IMediaManageApi;
+import com.nu.modules.mediamanage.entity.MediaManage;
+import com.nu.modules.sysconfig.entity.SysConfig;
+import com.nu.modules.sysconfig.service.ISysConfigService;
+import com.nu.utils.FileDownloader;
+import com.nu.utils.SafetyUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.compress.utils.Lists;
+import org.springframework.amqp.core.ExchangeTypes;
+import org.springframework.amqp.rabbit.annotation.Exchange;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.QueueBinding;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component
+public class MediaManageMQListener {
+
+ @Value("${jeecg.path.upload}")
+ private String upLoadPath;
+ @Value("${jeecg.path.directivepath}")
+ private String directiveUpLoadPath;
+
+ @Autowired
+ private IMediaManageApi mediaManageApi;
+ @Autowired
+ private ISysConfigService sysConfigService;
+ @Autowired
+ private IMediaAsyncErrorLogService mediaAsyncErrorLogService;
+
+ @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "mediamanage.async", durable = "true"), exchange = @Exchange(name = "hldy.mediamanage", type = ExchangeTypes.DIRECT), key = "mediamanage.async"), errorHandler = "mediaManageMQErrorHandler")
+ public void handleMessage(List