diff --git a/ruoyi-common/ruoyi-common-orm/pom.xml b/ruoyi-common/ruoyi-common-orm/pom.xml
index dc8c4f7..2804b0a 100644
--- a/ruoyi-common/ruoyi-common-orm/pom.xml
+++ b/ruoyi-common/ruoyi-common-orm/pom.xml
@@ -21,6 +21,11 @@
ruoyi-common-core
+
+ com.ruoyi
+ ruoyi-common-excel
+
+
com.ruoyi
ruoyi-common-security
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfProductController.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfProductController.java
index 1917de3..b3c1ceb 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfProductController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfProductController.java
@@ -1,11 +1,14 @@
package com.ruoyi.mf.controller;
+import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.excel.core.ExcelResult;
import com.ruoyi.common.core.core.domain.R;
import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log;
@@ -14,15 +17,18 @@ import com.ruoyi.common.web.annotation.RepeatSubmit;
import com.ruoyi.common.web.core.BaseController;
import jakarta.annotation.Resource;
import com.ruoyi.mf.domain.vo.MfProductVo;
+import com.ruoyi.mf.domain.vo.MfProductImportVo;
import com.ruoyi.mf.domain.bo.MfProductBo;
+import com.ruoyi.mf.listener.MfProductImportListener;
import com.ruoyi.mf.service.IMfProductService;
+import org.springframework.web.multipart.MultipartFile;
/**
* 产品树Controller
*
* @author 数据小王子
- * 2024-01-06
+ * 2024-04-12
*/
@Validated
@RequiredArgsConstructor
@@ -56,6 +62,26 @@ public class MfProductController extends BaseController
ExcelUtil.exportExcel(list, "产品树", MfProductVo.class, response);
}
+ /**
+ * 导入数据
+ *
+ * @param file 导入文件
+ * @param updateSupport 是否更新已存在数据
+ */
+ @Log(title = "产品树", businessType = BusinessType.IMPORT)
+ @SaCheckPermission("mf:product:import")
+ @PostMapping("/importData")
+ public R importData(MultipartFile file, boolean updateSupport) throws Exception {
+ ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), MfProductImportVo.class, new MfProductImportListener(updateSupport));
+ return R.ok(result.getAnalysis());
+ }
+
+ @SaCheckPermission("mf:product:import")
+ @PostMapping("/importTemplate")
+ public void importTemplate(HttpServletResponse response) {
+ ExcelUtil.exportExcel(new ArrayList<>(), "产品树", MfProductImportVo.class, response);
+ }
+
/**
* 获取产品树详细信息
*/
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfStudentController.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfStudentController.java
index 41a196e..102bb75 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfStudentController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/controller/MfStudentController.java
@@ -1,11 +1,14 @@
package com.ruoyi.mf.controller;
+import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.excel.core.ExcelResult;
import com.ruoyi.common.core.core.domain.R;
import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.log.annotation.Log;
@@ -14,8 +17,11 @@ import com.ruoyi.common.web.annotation.RepeatSubmit;
import com.ruoyi.common.web.core.BaseController;
import jakarta.annotation.Resource;
import com.ruoyi.mf.domain.vo.MfStudentVo;
+import com.ruoyi.mf.domain.vo.MfStudentImportVo;
import com.ruoyi.mf.domain.bo.MfStudentBo;
+import com.ruoyi.mf.listener.MfStudentImportListener;
import com.ruoyi.mf.service.IMfStudentService;
+import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.orm.core.page.TableDataInfo;
@@ -23,7 +29,7 @@ import com.ruoyi.common.orm.core.page.TableDataInfo;
* 学生信息表Controller
*
* @author 数据小王子
- * 2024-01-05
+ * 2024-04-12
*/
@Validated
@RequiredArgsConstructor
@@ -56,6 +62,26 @@ public class MfStudentController extends BaseController
ExcelUtil.exportExcel(list, "学生信息表", MfStudentVo.class, response);
}
+ /**
+ * 导入数据
+ *
+ * @param file 导入文件
+ * @param updateSupport 是否更新已存在数据
+ */
+ @Log(title = "学生信息表", businessType = BusinessType.IMPORT)
+ @SaCheckPermission("mf:student:import")
+ @PostMapping("/importData")
+ public R importData(MultipartFile file, boolean updateSupport) throws Exception {
+ ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), MfStudentImportVo.class, new MfStudentImportListener(updateSupport));
+ return R.ok(result.getAnalysis());
+ }
+
+ @SaCheckPermission("mf:student:import")
+ @PostMapping("/importTemplate")
+ public void importTemplate(HttpServletResponse response) {
+ ExcelUtil.exportExcel(new ArrayList<>(), "学生信息表", MfStudentImportVo.class, response);
+ }
+
/**
* 获取学生信息表详细信息
*/
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfProduct.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfProduct.java
index efab9ca..b2852a0 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfProduct.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfProduct.java
@@ -1,6 +1,5 @@
package com.ruoyi.mf.domain;
-
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
@@ -13,7 +12,7 @@ import com.ruoyi.common.orm.core.domain.TreeEntity;
* 产品树对象 mf_product
*
* @author 数据小王子
- * 2024-01-06
+ * 2024-04-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
@@ -23,7 +22,7 @@ public class MfProduct extends TreeEntity
@Serial
private static final long serialVersionUID = 1L;
- /** 产品id */
+ /** 产品编号 */
@Id
private Long productId;
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfStudent.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfStudent.java
index f9b00be..67bcbe5 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfStudent.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/MfStudent.java
@@ -2,7 +2,6 @@ package com.ruoyi.mf.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
-
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
@@ -15,7 +14,7 @@ import com.ruoyi.common.orm.core.domain.BaseEntity;
* 学生信息表对象 mf_student
*
* @author 数据小王子
- * 2024-01-06
+ * 2024-04-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfProductBo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfProductBo.java
index 91a213b..ef9cf78 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfProductBo.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfProductBo.java
@@ -11,7 +11,7 @@ import com.ruoyi.common.orm.core.domain.TreeEntity;
* 产品树业务对象 mf_product
*
* @author 数据小王子
- * @date 2024-01-06
+ * @date 2024-04-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
@@ -20,7 +20,7 @@ public class MfProductBo extends TreeEntity
{
/**
- * 产品id
+ * 产品编号
*/
private Long productId;
@@ -36,4 +36,5 @@ public class MfProductBo extends TreeEntity
@NotBlank(message = "产品状态(0正常 1停用)不能为空")
private String status;
+
}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfStudentBo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfStudentBo.java
index 9f301c4..0575866 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfStudentBo.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/bo/MfStudentBo.java
@@ -13,7 +13,7 @@ import com.ruoyi.common.orm.core.domain.BaseEntity;
* 学生信息表业务对象 mf_student
*
* @author 数据小王子
- * @date 2024-01-05
+ * @date 2024-04-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
@@ -63,4 +63,5 @@ public class MfStudentBo extends BaseEntity
@JsonFormat(pattern = "yyyy-MM-dd")
private Date studentBirthday;
+
}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductImportVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductImportVo.java
new file mode 100644
index 0000000..45181f5
--- /dev/null
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductImportVo.java
@@ -0,0 +1,52 @@
+package com.ruoyi.mf.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.excel.annotation.ExcelDictFormat;
+import com.ruoyi.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 产品树导入视图对象 mf_product
+ *
+ * @author 数据小王子
+ * @date 2024-04-12
+ */
+
+@Data
+@NoArgsConstructor
+public class MfProductImportVo implements Serializable
+{
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /** 产品编号 */
+ @ExcelProperty(value = "产品编号")
+ private Long productId;
+
+ /** 上级编号 */
+ @ExcelProperty(value = "上级编号")
+ private Long parentId;
+
+ /** 产品名称 */
+ @ExcelProperty(value = "产品名称")
+ private String productName;
+
+ /** 显示顺序 */
+ @ExcelProperty(value = "显示顺序")
+ private Integer orderNum;
+
+ /** 产品状态(0正常 1停用) */
+ @ExcelProperty(value = "产品状态", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "sys_student_status")
+ private String status;
+
+ /** 逻辑删除标志(0代表存在 1代表删除) */
+ @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+ private Integer delFlag;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductVo.java
index 69bee13..7f3406e 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductVo.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfProductVo.java
@@ -17,7 +17,7 @@ import com.ruoyi.common.orm.core.domain.TreeEntity;
* 产品树视图对象 mf_product
*
* @author 数据小王子
- * @date 2024-01-06
+ * @date 2024-04-12
*/
@Data
@ExcelIgnoreUnannotated
@@ -29,8 +29,8 @@ public class MfProductVo extends TreeEntity implements Serializable
@Serial
private static final long serialVersionUID = 1L;
- /** 产品id */
- @ExcelProperty(value = "产品id")
+ /** 产品编号 */
+ @ExcelProperty(value = "产品编号")
private Long productId;
/** 产品名称 */
@@ -46,4 +46,6 @@ public class MfProductVo extends TreeEntity implements Serializable
@ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
private Integer delFlag;
+
+
}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentImportVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentImportVo.java
new file mode 100644
index 0000000..d6e23e5
--- /dev/null
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentImportVo.java
@@ -0,0 +1,61 @@
+package com.ruoyi.mf.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.excel.annotation.ExcelDictFormat;
+import com.ruoyi.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 学生信息表导入视图对象 mf_student
+ *
+ * @author 数据小王子
+ * @date 2024-04-12
+ */
+
+@Data
+@NoArgsConstructor
+public class MfStudentImportVo implements Serializable
+{
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+
+ /** 学生名称 */
+ @ExcelProperty(value = "学生名称")
+ private String studentName;
+
+ /** 年龄 */
+ @ExcelProperty(value = "年龄")
+ private Integer studentAge;
+
+ /** 爱好(0代码 1音乐 2电影) */
+ @ExcelProperty(value = "爱好", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "sys_student_hobby")
+ private String studentHobby;
+
+ /** 性别(1男 2女 3未知) */
+ @ExcelProperty(value = "性别", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "sys_user_gender")
+ private String studentGender;
+
+ /** 状态(0正常 1停用) */
+ @ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "sys_student_status")
+ private String studentStatus;
+
+ /** 生日 */
+ @ExcelProperty(value = "生日")
+ private Date studentBirthday;
+
+ /** 逻辑删除标志(0代表存在 1代表删除) */
+ @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+ private Integer delFlag;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentVo.java
index ad62a47..bcb3852 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentVo.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/domain/vo/MfStudentVo.java
@@ -19,7 +19,7 @@ import com.ruoyi.common.orm.core.domain.BaseEntity;
* 学生信息表视图对象 mf_student
*
* @author 数据小王子
- * @date 2024-01-05
+ * @date 2024-04-12
*/
@Data
@ExcelIgnoreUnannotated
@@ -66,4 +66,6 @@ public class MfStudentVo extends BaseEntity implements Serializable
@ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
private Integer delFlag;
+
+
}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/listener/MfProductImportListener.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/listener/MfProductImportListener.java
new file mode 100644
index 0000000..6c311b1
--- /dev/null
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/listener/MfProductImportListener.java
@@ -0,0 +1,118 @@
+package com.ruoyi.mf.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.SpringUtils;
+import com.ruoyi.common.core.utils.ValidatorUtils;
+import com.ruoyi.common.excel.core.ExcelListener;
+import com.ruoyi.common.excel.core.ExcelResult;
+import com.ruoyi.mf.domain.bo.MfProductBo;
+import com.ruoyi.mf.domain.vo.*;
+import com.ruoyi.mf.service.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 产品树自定义导入
+ *
+ * @author 数据小王子
+ */
+@Slf4j
+public class MfProductImportListener extends AnalysisEventListener implements ExcelListener {
+ private final IMfProductService mfProductService;
+
+ private final Boolean isUpdateSupport;
+ private int successNum = 0;
+ private int failureNum = 0;
+ private final StringBuilder successMsg = new StringBuilder();
+ private final StringBuilder failureMsg = new StringBuilder();
+
+ public MfProductImportListener(Boolean isUpdateSupport) {
+ this.mfProductService = SpringUtils.getBean(IMfProductService.class);
+ this.isUpdateSupport = isUpdateSupport;
+ }
+
+ @Override
+ public void invoke(MfProductImportVo mfProductVo, AnalysisContext context) {
+ try {
+
+ MfProductBo mfProductBo = BeanUtil.toBean(mfProductVo, MfProductBo.class);
+
+ //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+ MfProductVo mfProductVo1 = null;
+
+ mfProductVo1 = mfProductService.selectById(mfProductVo.getProductId());
+ if (ObjectUtil.isNull(mfProductVo1)) {
+ //不存在就新增
+ mfProductBo.setVersion(0);
+ ValidatorUtils.validate(mfProductBo);
+ boolean inserted = mfProductService.insertWithPk(mfProductBo);//树表需要前台传来主键值
+
+ if (inserted) {
+ successNum++;
+ successMsg.append("
").append(successNum).append("、产品树 记录导入成功");
+ return;
+ } else {
+ failureNum++;
+ failureMsg.append("
").append(failureNum).append("、产品树 记录导入失败");
+ return;
+ }
+ } else if (isUpdateSupport) {
+ //存在就更新
+ mfProductBo.setProductId(mfProductVo1.getProductId());//主键
+ mfProductBo.setVersion(mfProductVo1.getVersion());
+ boolean updated = mfProductService.update(mfProductBo);
+ if (updated) {
+ successNum++;
+ successMsg.append("
").append(successNum).append("、产品树 记录更新成功");
+ return;
+ } else {
+ failureNum++;
+ failureMsg.append("
").append(failureNum).append("、产品树 记录更新失败");
+ return;
+ }
+ }
+ } catch (Exception e) {
+ failureNum++;
+ String msg = "
" + failureNum + "、产品树 记录导入失败:";
+ failureMsg.append(msg).append(e.getMessage());
+ log.error(msg, e);
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext context) {
+
+ }
+
+ @Override
+ public ExcelResult getExcelResult() {
+ return new ExcelResult<>() {
+
+ @Override
+ public String getAnalysis() {
+ if (failureNum > 0) {
+ failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+ throw new ServiceException(failureMsg.toString());
+ } else {
+ successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+ }
+ return successMsg.toString();
+ }
+
+ @Override
+ public List getList() {
+ return null;
+ }
+
+ @Override
+ public List getErrorList() {
+ return null;
+ }
+ };
+ }
+}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/listener/MfStudentImportListener.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/listener/MfStudentImportListener.java
new file mode 100644
index 0000000..f0939f6
--- /dev/null
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/listener/MfStudentImportListener.java
@@ -0,0 +1,118 @@
+package com.ruoyi.mf.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.SpringUtils;
+import com.ruoyi.common.core.utils.ValidatorUtils;
+import com.ruoyi.common.excel.core.ExcelListener;
+import com.ruoyi.common.excel.core.ExcelResult;
+import com.ruoyi.mf.domain.bo.MfStudentBo;
+import com.ruoyi.mf.domain.vo.*;
+import com.ruoyi.mf.service.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 学生信息表自定义导入
+ *
+ * @author 数据小王子
+ */
+@Slf4j
+public class MfStudentImportListener extends AnalysisEventListener implements ExcelListener {
+ private final IMfStudentService mfStudentService;
+
+ private final Boolean isUpdateSupport;
+ private int successNum = 0;
+ private int failureNum = 0;
+ private final StringBuilder successMsg = new StringBuilder();
+ private final StringBuilder failureMsg = new StringBuilder();
+
+ public MfStudentImportListener(Boolean isUpdateSupport) {
+ this.mfStudentService = SpringUtils.getBean(IMfStudentService.class);
+ this.isUpdateSupport = isUpdateSupport;
+ }
+
+ @Override
+ public void invoke(MfStudentImportVo mfStudentVo, AnalysisContext context) {
+ try {
+
+ MfStudentBo mfStudentBo = BeanUtil.toBean(mfStudentVo, MfStudentBo.class);
+
+ //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+ MfStudentVo mfStudentVo1 = null;
+
+ //mfStudentVo1 = mfStudentService.selectBySomefield(mfStudentVo.getSomefield());
+ if (ObjectUtil.isNull(mfStudentVo1)) {
+ //不存在就新增
+ mfStudentBo.setVersion(0);
+ ValidatorUtils.validate(mfStudentBo);
+ boolean inserted = mfStudentService.insert(mfStudentBo);
+
+ if (inserted) {
+ successNum++;
+ successMsg.append("
").append(successNum).append("、学生信息表 记录导入成功");
+ return;
+ } else {
+ failureNum++;
+ failureMsg.append("
").append(failureNum).append("、学生信息表 记录导入失败");
+ return;
+ }
+ } else if (isUpdateSupport) {
+ //存在就更新
+ mfStudentBo.setStudentId(mfStudentVo1.getStudentId());//主键
+ mfStudentBo.setVersion(mfStudentVo1.getVersion());
+ boolean updated = mfStudentService.update(mfStudentBo);
+ if (updated) {
+ successNum++;
+ successMsg.append("
").append(successNum).append("、学生信息表 记录更新成功");
+ return;
+ } else {
+ failureNum++;
+ failureMsg.append("
").append(failureNum).append("、学生信息表 记录更新失败");
+ return;
+ }
+ }
+ } catch (Exception e) {
+ failureNum++;
+ String msg = "
" + failureNum + "、学生信息表 记录导入失败:";
+ failureMsg.append(msg).append(e.getMessage());
+ log.error(msg, e);
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext context) {
+
+ }
+
+ @Override
+ public ExcelResult getExcelResult() {
+ return new ExcelResult<>() {
+
+ @Override
+ public String getAnalysis() {
+ if (failureNum > 0) {
+ failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+ throw new ServiceException(failureMsg.toString());
+ } else {
+ successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+ }
+ return successMsg.toString();
+ }
+
+ @Override
+ public List getList() {
+ return null;
+ }
+
+ @Override
+ public List getErrorList() {
+ return null;
+ }
+ };
+ }
+}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfProductMapper.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfProductMapper.java
index 35daf30..c1fc464 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfProductMapper.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfProductMapper.java
@@ -8,7 +8,7 @@ import com.ruoyi.mf.domain.MfProduct;
* 产品树Mapper接口
*
* @author 数据小王子
- * 2024-01-06
+ * 2024-04-12
*/
@Mapper
public interface MfProductMapper extends BaseMapper
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfStudentMapper.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfStudentMapper.java
index ce71065..a974013 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfStudentMapper.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/mapper/MfStudentMapper.java
@@ -8,7 +8,7 @@ import com.ruoyi.mf.domain.MfStudent;
* 学生信息表Mapper接口
*
* @author 数据小王子
- * 2023-11-22
+ * 2024-04-12
*/
@Mapper
public interface MfStudentMapper extends BaseMapper
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfProductService.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfProductService.java
index 93a69bb..9dd866b 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfProductService.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfProductService.java
@@ -10,7 +10,7 @@ import com.ruoyi.common.orm.core.service.IBaseService;
* 产品树Service接口
*
* @author 数据小王子
- * 2024-01-06
+ * 2024-04-12
*/
public interface IMfProductService extends IBaseService
{
@@ -39,6 +39,14 @@ public interface IMfProductService extends IBaseService
*/
boolean insert(MfProductBo mfProductBo);
+ /**
+ * 新增产品树,前台提供主键值,一般用于导入的场合
+ *
+ * @param mfProductBo 产品树Bo
+ * @return 结果:true 操作成功,false 操作失败
+ */
+ boolean insertWithPk(MfProductBo mfProductBo);
+
/**
* 修改产品树
*
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfStudentService.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfStudentService.java
index 0ee1c9b..4552c59 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfStudentService.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/IMfStudentService.java
@@ -11,7 +11,7 @@ import com.ruoyi.common.orm.core.page.TableDataInfo;
* 学生信息表Service接口
*
* @author 数据小王子
- * 2024-01-05
+ * 2024-04-12
*/
public interface IMfStudentService extends IBaseService
{
@@ -47,6 +47,14 @@ public interface IMfStudentService extends IBaseService
*/
boolean insert(MfStudentBo mfStudentBo);
+ /**
+ * 新增学生信息表,前台提供主键值,一般用于导入的场合
+ *
+ * @param mfStudentBo 学生信息表Bo
+ * @return 结果:true 操作成功,false 操作失败
+ */
+ boolean insertWithPk(MfStudentBo mfStudentBo);
+
/**
* 修改学生信息表
*
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfProductServiceImpl.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfProductServiceImpl.java
index 3e9dd91..34e1498 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfProductServiceImpl.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfProductServiceImpl.java
@@ -2,10 +2,18 @@ package com.ruoyi.mf.service.impl;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import cn.hutool.core.util.ObjectUtil;
+import com.mybatisflex.core.paginate.Page;
+import com.mybatisflex.core.query.QueryMethods;
import com.mybatisflex.core.query.QueryWrapper;
+import com.mybatisflex.core.update.UpdateChain;
import com.ruoyi.common.core.utils.MapstructUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.orm.core.page.PageQuery;
+import com.ruoyi.common.orm.core.page.TableDataInfo;
import com.ruoyi.common.orm.core.service.impl.BaseServiceImpl;
+import com.ruoyi.common.core.utils.DateUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -20,7 +28,7 @@ import static com.ruoyi.mf.domain.table.MfProductTableDef.MF_PRODUCT;
* 产品树Service业务层处理
*
* @author 数据小王子
- * 2024-01-06
+ * 2024-04-12
*/
@Service
public class MfProductServiceImpl extends BaseServiceImpl implements IMfProductService
@@ -80,9 +88,49 @@ public class MfProductServiceImpl extends BaseServiceImpl 0;//前台传来主键值
+ }
+
/**
* 修改产品树
*
@@ -94,12 +142,46 @@ public class MfProductServiceImpl extends BaseServiceImpl children = this.listAs(queryWrapper, MfProductVo.class);
+
+ for (MfProductVo child : children) {
+ child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
+
+ UpdateChain.of(MfProduct.class)
+ .set(MfProduct::getAncestors, child.getAncestors())
+ .where(MfProduct::getProductId).eq(child.getProductId())
+ .update();
+ }
+ }
+
/**
* 批量删除产品树
*
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfStudentServiceImpl.java b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfStudentServiceImpl.java
index b881f55..58d2a86 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfStudentServiceImpl.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/com/ruoyi/mf/service/impl/MfStudentServiceImpl.java
@@ -2,13 +2,18 @@ package com.ruoyi.mf.service.impl;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import cn.hutool.core.util.ObjectUtil;
import com.mybatisflex.core.paginate.Page;
+import com.mybatisflex.core.query.QueryMethods;
import com.mybatisflex.core.query.QueryWrapper;
+import com.mybatisflex.core.update.UpdateChain;
import com.ruoyi.common.core.utils.MapstructUtils;
+import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.orm.core.page.PageQuery;
import com.ruoyi.common.orm.core.page.TableDataInfo;
import com.ruoyi.common.orm.core.service.impl.BaseServiceImpl;
+import com.ruoyi.common.core.utils.DateUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -23,7 +28,7 @@ import static com.ruoyi.mf.domain.table.MfStudentTableDef.MF_STUDENT;
* 学生信息表Service业务层处理
*
* @author 数据小王子
- * 2024-01-05
+ * 2024-04-12
*/
@Service
public class MfStudentServiceImpl extends BaseServiceImpl implements IMfStudentService
@@ -95,9 +100,25 @@ public class MfStudentServiceImpl extends BaseServiceImpl 0;//前台传来主键值
+ }
+
/**
* 修改学生信息表
*
@@ -115,6 +136,7 @@ public class MfStudentServiceImpl extends BaseServiceImpl