package com.ruoyi.web.controller.product;
|
|
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.system.domain.InsuranceFeature;
|
import com.ruoyi.system.domain.InsuranceProduct;
|
import com.ruoyi.system.domain.dto.InsuranceProductUpdateDTO;
|
import com.ruoyi.im.service.InsuranceFeatureService;
|
import com.ruoyi.im.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.LocalDate;
|
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(@RequestBody InsuranceProductUpdateDTO dto) {
|
// 1. 查询产品是否存在
|
InsuranceProduct insuranceProduct = insuranceProductService.getById(dto.getId());
|
if (insuranceProduct == null) {
|
return AjaxResult.error("产品不存在");
|
}
|
|
// 2. 更新产品基本信息
|
insuranceProduct.setProductName(dto.getProductName());
|
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.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.getProductFeature() != null && !dto.getProductFeature().isEmpty()) {
|
try {
|
// 先删除该产品原有的所有特色
|
deleteByProductId(insuranceProduct.getId());
|
|
// 转换DTO为实体并设置产品ID
|
List<InsuranceFeature> features = dto.getProductFeature().stream()
|
.map(f -> {
|
InsuranceFeature insuranceFeature = new InsuranceFeature();
|
insuranceFeature.setProductId(insuranceProduct.getId());
|
insuranceFeature.setTitle(f.getTitle());
|
insuranceFeature.setDetail(f.getDetail());
|
insuranceFeature.setCreatedAt(new Date());
|
insuranceFeature.setUpdatedAt(new Date());
|
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);
|
List<InsuranceFeature> features = insuranceFeatureService.list(new LambdaQueryWrapper<InsuranceFeature>()
|
.eq(InsuranceFeature::getProductId, insuranceProduct.getId()));
|
insuranceProduct.setProductFeature(features);
|
return AjaxResult.success(insuranceProduct);
|
}
|
|
/**
|
* 产品信息列表
|
*/
|
@GetMapping("/list")
|
public TableDataInfo list(@RequestParam(value = "productName",required = false) String productName,
|
@RequestParam(value = "productCode",required = false) String productCode,
|
@RequestParam(value = "status",required = false) String status) {
|
startPage();
|
|
LambdaQueryWrapper<InsuranceProduct> wrapper = new LambdaQueryWrapper<>();
|
|
// 产品名称模糊查询
|
if (StringUtils.isNotBlank(productName)) {
|
wrapper.like(InsuranceProduct::getProductName, productName);
|
}
|
|
// 产品代码模糊查询
|
if (StringUtils.isNotBlank(productCode)) {
|
wrapper.like(InsuranceProduct::getProductCode, productCode);
|
}
|
|
// 产品状态精确查询
|
if (StringUtils.isNotBlank(status)) {
|
wrapper.eq(InsuranceProduct::getStatus, status);
|
}
|
|
// 按创建时间倒序排列
|
wrapper.orderByDesc(InsuranceProduct::getCreatedAt);
|
|
List<InsuranceProduct> list = insuranceProductService.list(wrapper);
|
list.forEach(f->{
|
List<InsuranceFeature> features = insuranceFeatureService.list(new LambdaQueryWrapper<InsuranceFeature>()
|
.eq(InsuranceFeature::getProductId, f.getId()));
|
f.setProductFeature(features);
|
});
|
return getDataTable(list);
|
}
|
|
/**
|
* 新增产品(包含产品特色)
|
*/
|
@PostMapping("/create")
|
@Transactional(rollbackFor = Exception.class)
|
public AjaxResult create(@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.setLiabilityExemption(dto.getLiabilityExemption());
|
product.setImg1(dto.getImg1());
|
product.setImg2(dto.getImg2());
|
|
// 设置创建时间和更新时间
|
product.setCreatedAt(new Date());
|
product.setUpdatedAt(new Date());
|
|
// 3. 保存产品信息
|
boolean productSuccess = insuranceProductService.save(product);
|
|
if (!productSuccess) {
|
return AjaxResult.error("产品创建失败");
|
}
|
|
// 4. 处理产品特色
|
if (dto.getProductFeature() != null && !dto.getProductFeature().isEmpty()) {
|
try {
|
// 转换DTO为实体并设置产品ID
|
List<InsuranceFeature> features = dto.getProductFeature().stream()
|
.map(f -> {
|
InsuranceFeature insuranceFeature = new InsuranceFeature();
|
insuranceFeature.setProductId(product.getId());
|
insuranceFeature.setTitle(f.getTitle());
|
insuranceFeature.setDetail(f.getDetail());
|
insuranceFeature.setCreatedAt(new Date());
|
insuranceFeature.setUpdatedAt(new Date());
|
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("创建成功");
|
}
|
|
/**
|
* 删除产品
|
*/
|
@GetMapping("/delete")
|
public AjaxResult delete(@RequestParam(value = "id") Integer id) {
|
InsuranceProduct product = insuranceProductService.getById(id);
|
if (product == null) {
|
return AjaxResult.error("产品不存在");
|
}
|
|
boolean success = insuranceProductService.removeById(id);
|
return success ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
|
}
|
}
|