From 59e827830f2866a82cf1714fe2941cb0bd380c0a Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 17 Sep 2025 18:33:28 +0800
Subject: [PATCH] 1
---
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceFeatureDto.java | 23 +++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java | 272 ++++++++++++++++++++++++++++++++++++++
ruoyi-admin/src/main/java/com/ruoyi/im/util/ConverterUtil.java | 1
ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java | 2
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java | 63 +++++++++
5 files changed, 359 insertions(+), 2 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/im/util/ConverterUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/im/util/ConverterUtil.java
index b540fca..22f2d5f 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/im/util/ConverterUtil.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/im/util/ConverterUtil.java
@@ -5,7 +5,6 @@
import java.util.List;
/**
- * @program: dabaogp
* @description:
* @create: 2024-08-19 18:29
**/
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java
new file mode 100644
index 0000000..dc8f09d
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/product/InsuranceProductController.java
@@ -0,0 +1,272 @@
+package com.ruoyi.web.controller.product;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.im.util.ConverterUtil;
+import com.ruoyi.system.domain.GroupWelcomeConfig;
+import com.ruoyi.system.domain.InsuranceFeature;
+import com.ruoyi.system.domain.InsuranceProduct;
+import com.ruoyi.system.domain.IpBlacklist;
+import com.ruoyi.system.domain.dto.InsuranceProductUpdateDTO;
+import com.ruoyi.system.service.InsuranceFeatureService;
+import com.ruoyi.system.service.InsuranceProductService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.ruoyi.common.utils.PageUtils.startPage;
+
+/**
+ * @program: ruoyiim
+ * @description:保险产品
+ * @create: 2025-09-17 17:17
+ **/
+@RestController
+@RequestMapping("/product")
+public class InsuranceProductController extends BaseController {
+
+ @Autowired
+ InsuranceProductService insuranceProductService;
+
+ @Autowired
+ InsuranceFeatureService insuranceFeatureService;
+
+ /**
+ * 修改产品信息(包含产品特色)
+ */
+ @PostMapping("/update")
+ @Transactional(rollbackFor = Exception.class)
+ public AjaxResult update(@Valid @RequestBody InsuranceProductUpdateDTO dto) {
+ // 1. 查询产品是否存在
+ InsuranceProduct insuranceProduct = insuranceProductService.getById(dto.getId());
+ if (insuranceProduct == null) {
+ return AjaxResult.error("产品不存在");
+ }
+
+ // 2. 更新产品基本信息
+ insuranceProduct.setProductName(dto.getProductName());
+ insuranceProduct.setProductCode(dto.getProductCode());
+ insuranceProduct.setDescription(dto.getDescription());
+ insuranceProduct.setCoverageAmount(dto.getCoverageAmount());
+ insuranceProduct.setPremium(dto.getPremium());
+ insuranceProduct.setTerm(dto.getTerm());
+
+ // 处理枚举状态
+ if (dto.getStatus() != null) {
+ try {
+ InsuranceProduct.ProductStatus status =
+ InsuranceProduct.ProductStatus.valueOf(dto.getStatus().toUpperCase());
+ insuranceProduct.setStatus(status);
+ } catch (IllegalArgumentException e) {
+ return AjaxResult.error("产品状态参数错误");
+ }
+ }
+
+ insuranceProduct.setHospitalNumber(dto.getHospitalNumber());
+ insuranceProduct.setGuaranteeExplanation(dto.getGuaranteeExplanation());
+ insuranceProduct.setInsureAge(dto.getInsureAge());
+ insuranceProduct.setObligationDisclose(dto.getObligationDisclose());
+ insuranceProduct.setProductFeature(dto.getProductFeature());
+ insuranceProduct.setLiabilityExemption(dto.getLiabilityExemption());
+ insuranceProduct.setImg1(dto.getImg1());
+ insuranceProduct.setImg2(dto.getImg2());
+
+ // 3. 更新产品信息
+ boolean productSuccess = insuranceProductService.updateById(insuranceProduct);
+
+ if (!productSuccess) {
+ return AjaxResult.error("产品信息更新失败");
+ }
+
+ // 4. 处理产品特色
+ if (dto.getFeatureDtoList() != null && !dto.getFeatureDtoList().isEmpty()) {
+ try {
+ // 先删除该产品原有的所有特色
+ deleteByProductId(insuranceProduct.getId());
+
+ // 转换DTO为实体并设置产品ID
+ List<InsuranceFeature> features = dto.getFeatureDtoList().stream()
+ .map(f -> {
+ InsuranceFeature insuranceFeature = new InsuranceFeature();
+ insuranceFeature.setProductId(insuranceProduct.getId());
+ insuranceFeature.setTitle(f.getTitle());
+ insuranceFeature.setDetail(f.getDetail());
+ insuranceFeature.setCreatedAt(LocalDateTime.now());
+ insuranceFeature.setUpdatedAt(LocalDateTime.now());
+ return insuranceFeature;
+ })
+ .collect(Collectors.toList());
+
+ // 批量保存新的产品特色
+ boolean featureSuccess = insuranceFeatureService.saveBatch(features);
+
+ if (!featureSuccess) {
+ throw new RuntimeException("产品特色保存失败");
+ }
+ } catch (Exception e) {
+ // 事务会回滚
+ return AjaxResult.error("产品特色处理失败: " + e.getMessage());
+ }
+ } else {
+ // 如果传入的特色列表为空,则删除所有特色
+ deleteByProductId(insuranceProduct.getId());
+ }
+
+ return AjaxResult.success("保存成功!");
+ }
+
+ public void deleteByProductId(Integer productId) {
+ LambdaQueryWrapper<InsuranceFeature> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(InsuranceFeature::getProductId, productId);
+ insuranceFeatureService.remove(wrapper);
+ }
+
+ /**
+ * 查询产品信息
+ */
+ @GetMapping("/get")
+ public AjaxResult get(@RequestParam(value = "id") Integer id) {
+ InsuranceProduct insuranceProduct = insuranceProductService.getById(id);
+ return AjaxResult.success(insuranceProduct);
+ }
+
+ /**
+ * 产品信息列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(InsuranceProductUpdateDTO dto) {
+ startPage();
+
+ LambdaQueryWrapper<InsuranceProduct> wrapper = new LambdaQueryWrapper<>();
+
+ // 产品名称模糊查询
+ if (StringUtils.isNotBlank(dto.getProductName())) {
+ wrapper.like(InsuranceProduct::getProductName, dto.getProductName());
+ }
+
+ // 产品代码模糊查询
+ if (StringUtils.isNotBlank(dto.getProductCode())) {
+ wrapper.like(InsuranceProduct::getProductCode, dto.getProductCode());
+ }
+
+ // 产品状态精确查询
+ if (dto.getStatus() != null) {
+ wrapper.eq(InsuranceProduct::getStatus, dto.getStatus());
+ }
+
+ // 按创建时间倒序排列
+ wrapper.orderByDesc(InsuranceProduct::getCreatedAt);
+
+ List<InsuranceProduct> list = insuranceProductService.list(wrapper);
+ return getDataTable(list);
+ }
+
+ /**
+ * 新增产品(包含产品特色)
+ */
+ @PostMapping("/create")
+ @Transactional(rollbackFor = Exception.class)
+ public AjaxResult create(@Valid @RequestBody InsuranceProductUpdateDTO dto) {
+ // 1. 检查产品代码是否已存在
+ long count = insuranceProductService.count(new LambdaQueryWrapper<InsuranceProduct>().eq(InsuranceProduct::getProductCode, dto.getProductCode()));
+ if (count > 0) {
+ return AjaxResult.error("产品代码已存在");
+ }
+
+ // 2. 创建产品基本信息
+ InsuranceProduct product = new InsuranceProduct();
+ product.setProductName(dto.getProductName());
+ product.setProductCode(dto.getProductCode());
+ product.setDescription(dto.getDescription());
+ product.setCoverageAmount(dto.getCoverageAmount());
+ product.setPremium(dto.getPremium());
+ product.setTerm(dto.getTerm());
+
+ // 处理状态
+ if (dto.getStatus() != null) {
+ try {
+ InsuranceProduct.ProductStatus status =
+ InsuranceProduct.ProductStatus.valueOf(dto.getStatus().toUpperCase());
+ product.setStatus(status);
+ } catch (IllegalArgumentException e) {
+ return AjaxResult.error("产品状态参数错误");
+ }
+ } else {
+ product.setStatus(InsuranceProduct.ProductStatus.INACTIVE); // 默认下架
+ }
+
+ product.setHospitalNumber(dto.getHospitalNumber());
+ product.setGuaranteeExplanation(dto.getGuaranteeExplanation());
+ product.setInsureAge(dto.getInsureAge());
+ product.setObligationDisclose(dto.getObligationDisclose());
+ product.setProductFeature(dto.getProductFeature());
+ product.setLiabilityExemption(dto.getLiabilityExemption());
+ product.setImg1(dto.getImg1());
+ product.setImg2(dto.getImg2());
+
+ // 设置创建时间和更新时间
+ product.setCreatedAt(LocalDateTime.now());
+ product.setUpdatedAt(LocalDateTime.now());
+
+ // 3. 保存产品信息
+ boolean productSuccess = insuranceProductService.save(product);
+
+ if (!productSuccess) {
+ return AjaxResult.error("产品创建失败");
+ }
+
+ // 4. 处理产品特色
+ if (dto.getFeatureDtoList() != null && !dto.getFeatureDtoList().isEmpty()) {
+ try {
+ // 转换DTO为实体并设置产品ID
+ List<InsuranceFeature> features = dto.getFeatureDtoList().stream()
+ .map(f -> {
+ InsuranceFeature insuranceFeature = new InsuranceFeature();
+ insuranceFeature.setProductId(product.getId());
+ insuranceFeature.setTitle(f.getTitle());
+ insuranceFeature.setDetail(f.getDetail());
+ insuranceFeature.setCreatedAt(LocalDateTime.now());
+ insuranceFeature.setUpdatedAt(LocalDateTime.now());
+ return insuranceFeature;
+ })
+ .collect(Collectors.toList());
+
+ // 批量保存产品特色
+ boolean featureSuccess = insuranceFeatureService.saveBatch(features);
+
+ if (!featureSuccess) {
+ throw new RuntimeException("产品特色保存失败");
+ }
+ } catch (Exception e) {
+ // 事务会回滚
+ return AjaxResult.error("产品特色处理失败: " + e.getMessage());
+ }
+ }
+
+ return AjaxResult.success("创建成功");
+ }
+
+ /**
+ * 删除产品
+ */
+ @DeleteMapping("/{id}")
+ public AjaxResult delete(@PathVariable Integer id) {
+ InsuranceProduct product = insuranceProductService.getById(id);
+ if (product == null) {
+ return AjaxResult.error("产品不存在");
+ }
+
+ boolean success = insuranceProductService.removeById(id);
+ return success ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java
index d449a4c..922d668 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/InsuranceProduct.java
@@ -15,7 +15,7 @@
// 产品ID
@TableId(type = IdType.AUTO)
- private Integer productId;
+ private Integer id;
// 产品名称
private String productName;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceFeatureDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceFeatureDto.java
new file mode 100644
index 0000000..964e68a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceFeatureDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.system.domain.dto;
+
+import lombok.Data;
+
+/**
+ * @program: ruoyiim
+ * @description:
+ * @create: 2025-09-17 17:54
+ **/
+@Data
+public class InsuranceFeatureDto {
+
+ // 保险产品ID
+ private Integer productId;
+
+ // 特色标题
+ private String title;
+
+ // 特色详情
+ private String detail;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java
new file mode 100644
index 0000000..65a7fbd
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/InsuranceProductUpdateDTO.java
@@ -0,0 +1,63 @@
+package com.ruoyi.system.domain.dto;
+
+import lombok.Data;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 保险产品更新DTO
+ */
+@Data
+public class InsuranceProductUpdateDTO {
+
+ // 产品ID
+ private Integer id;
+
+ // 产品名称
+ private String productName;
+
+ // 产品代码
+ private String productCode;
+
+ // 保障详情
+ private String description;
+
+ // 保额
+ private BigDecimal coverageAmount;
+
+ // 保费
+ private BigDecimal premium;
+
+ // 保险期限
+ private String term;
+
+ // 产品状态
+ private String status;
+
+ // 医院数量
+ private Integer hospitalNumber;
+
+ // 保障说明
+ private String guaranteeExplanation;
+
+ // 投保年龄
+ private String insureAge;
+
+ // 告知义务
+ private String obligationDisclose;
+
+ // 产品特色
+ private String productFeature;
+
+ // 投保须知
+ private String liabilityExemption;
+
+ //产品特色
+ List<InsuranceFeatureDto> featureDtoList;
+
+ // 图片1
+ private String img1;
+
+ // 图片2
+ private String img2;
+}
\ No newline at end of file
--
Gitblit v1.9.3