Browse Source

1.运营模块代码提交

wq_dev
wangqiang 1 month ago
parent
commit
f0fefdc0d8
36 changed files with 2265 additions and 0 deletions
  1. 108
    0
      ruoyi-system/src/main/java/com/ruoyi/system/controller/ZsOperationGoodsController.java
  2. 108
    0
      ruoyi-system/src/main/java/com/ruoyi/system/controller/ZsOperationSendconfigController.java
  3. 108
    0
      ruoyi-system/src/main/java/com/ruoyi/system/controller/ZsOperationWarnconfigController.java
  4. 120
    0
      ruoyi-system/src/main/java/com/ruoyi/system/controller/ZsOperationWarnresultController.java
  5. 56
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/ZsOperationGoods.java
  6. 43
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/ZsOperationSendconfig.java
  7. 44
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/ZsOperationSmtp.java
  8. 44
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/ZsOperationWarnconfig.java
  9. 68
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/ZsOperationWarnresult.java
  10. 67
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ZsOperationGoodsBo.java
  11. 56
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ZsOperationSendconfigBo.java
  12. 56
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ZsOperationSmtpBo.java
  13. 56
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ZsOperationWarnconfigBo.java
  14. 84
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ZsOperationWarnresultBo.java
  15. 76
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ZsOperationGoodsVo.java
  16. 63
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ZsOperationSendconfigVo.java
  17. 61
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ZsOperationSmtpVo.java
  18. 65
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ZsOperationWarnconfigVo.java
  19. 96
    0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ZsOperationWarnresultVo.java
  20. 15
    0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/ZsOperationGoodsMapper.java
  21. 15
    0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/ZsOperationSendconfigMapper.java
  22. 15
    0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/ZsOperationSmtpMapper.java
  23. 15
    0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/ZsOperationWarnconfigMapper.java
  24. 15
    0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/ZsOperationWarnresultMapper.java
  25. 156
    0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ZsOperationGoodsServiceImpl.java
  26. 109
    0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ZsOperationSendconfigServiceImpl.java
  27. 108
    0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ZsOperationSmtpServiceImpl.java
  28. 108
    0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ZsOperationWarnconfigServiceImpl.java
  29. 129
    0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ZsOperationWarnresultServiceImpl.java
  30. 61
    0
      ruoyi-system/src/main/java/com/ruoyi/system/utils/EmailUtils.java
  31. 48
    0
      ruoyi-system/src/main/java/com/ruoyi/system/utils/HttpUtil.java
  32. 19
    0
      ruoyi-system/src/main/resources/mapper/system/ZsOperationGoodsMapper.xml
  33. 17
    0
      ruoyi-system/src/main/resources/mapper/system/ZsOperationSendconfigMapper.xml
  34. 17
    0
      ruoyi-system/src/main/resources/mapper/system/ZsOperationSmtpMapper.xml
  35. 17
    0
      ruoyi-system/src/main/resources/mapper/system/ZsOperationWarnconfigMapper.xml
  36. 22
    0
      ruoyi-system/src/main/resources/mapper/system/ZsOperationWarnresultMapper.xml

+ 108
- 0
ruoyi-system/src/main/java/com/ruoyi/system/controller/ZsOperationGoodsController.java View File

@@ -0,0 +1,108 @@
package com.ruoyi.system.controller;

import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;

import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.core.validate.QueryGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.vo.ZsOperationGoodsVo;
import com.ruoyi.system.domain.bo.ZsOperationGoodsBo;
import com.ruoyi.system.service.IZsOperationGoodsService;
import com.ruoyi.common.core.page.TableDataInfo;

/**
* 商品配置
*
* @author 王强
* @date 2025-05-08
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/operationGoods")
public class ZsOperationGoodsController extends BaseController {

private final IZsOperationGoodsService iZsOperationGoodsService;

/**
* 查询商品配置列表
*/
@SaCheckPermission("system:operationGoods:list")
@GetMapping("/list")
public TableDataInfo<ZsOperationGoodsVo> list(ZsOperationGoodsBo bo, PageQuery pageQuery) {
return iZsOperationGoodsService.queryPageList(bo, pageQuery);
}

/**
* 导出商品配置列表
*/
@SaCheckPermission("system:operationGoods:export")
@Log(title = "商品配置", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ZsOperationGoodsBo bo, HttpServletResponse response) {
List<ZsOperationGoodsVo> list = iZsOperationGoodsService.queryList(bo);
ExcelUtil.exportExcel(list, "商品配置", ZsOperationGoodsVo.class, response);
}

/**
* 获取商品配置详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:operationGoods:query")
@GetMapping("/{id}")
public R<ZsOperationGoodsVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(iZsOperationGoodsService.queryById(id));
}

/**
* 新增商品配置
*/
@SaCheckPermission("system:operationGoods:add")
@Log(title = "商品配置", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ZsOperationGoodsBo bo) {
return toAjax(iZsOperationGoodsService.insertByBo(bo));
}

/**
* 修改商品配置
*/
@SaCheckPermission("system:operationGoods:edit")
@Log(title = "商品配置", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ZsOperationGoodsBo bo) {
return toAjax(iZsOperationGoodsService.updateByBo(bo));
}

/**
* 删除商品配置
*
* @param ids 主键串
*/
@SaCheckPermission("system:operationGoods:remove")
@Log(title = "商品配置", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(iZsOperationGoodsService.deleteWithValidByIds(Arrays.asList(ids), true));
}
}

+ 108
- 0
ruoyi-system/src/main/java/com/ruoyi/system/controller/ZsOperationSendconfigController.java View File

@@ -0,0 +1,108 @@
package com.ruoyi.system.controller;

import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;

import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.core.validate.QueryGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.vo.ZsOperationSendconfigVo;
import com.ruoyi.system.domain.bo.ZsOperationSendconfigBo;
import com.ruoyi.system.service.IZsOperationSendconfigService;
import com.ruoyi.common.core.page.TableDataInfo;

/**
* 发送信息配置
*
* @author 王强
* @date 2025-05-09
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/operationSendconfig")
public class ZsOperationSendconfigController extends BaseController {

private final IZsOperationSendconfigService iZsOperationSendconfigService;

/**
* 查询发送信息配置列表
*/
@SaCheckPermission("system:operationSendconfig:list")
@GetMapping("/list")
public TableDataInfo<ZsOperationSendconfigVo> list(ZsOperationSendconfigBo bo, PageQuery pageQuery) {
return iZsOperationSendconfigService.queryPageList(bo, pageQuery);
}

/**
* 导出发送信息配置列表
*/
@SaCheckPermission("system:operationSendconfig:export")
@Log(title = "发送信息配置", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ZsOperationSendconfigBo bo, HttpServletResponse response) {
List<ZsOperationSendconfigVo> list = iZsOperationSendconfigService.queryList(bo);
ExcelUtil.exportExcel(list, "发送信息配置", ZsOperationSendconfigVo.class, response);
}

/**
* 获取发送信息配置详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:operationSendconfig:query")
@GetMapping("/{id}")
public R<ZsOperationSendconfigVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(iZsOperationSendconfigService.queryById(id));
}

/**
* 新增发送信息配置
*/
@SaCheckPermission("system:operationSendconfig:add")
@Log(title = "发送信息配置", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ZsOperationSendconfigBo bo) {
return toAjax(iZsOperationSendconfigService.insertByBo(bo));
}

/**
* 修改发送信息配置
*/
@SaCheckPermission("system:operationSendconfig:edit")
@Log(title = "发送信息配置", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ZsOperationSendconfigBo bo) {
return toAjax(iZsOperationSendconfigService.updateByBo(bo));
}

/**
* 删除发送信息配置
*
* @param ids 主键串
*/
@SaCheckPermission("system:operationSendconfig:remove")
@Log(title = "发送信息配置", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(iZsOperationSendconfigService.deleteWithValidByIds(Arrays.asList(ids), true));
}
}

+ 108
- 0
ruoyi-system/src/main/java/com/ruoyi/system/controller/ZsOperationWarnconfigController.java View File

@@ -0,0 +1,108 @@
package com.ruoyi.system.controller;

import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;

import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.core.validate.QueryGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.vo.ZsOperationWarnconfigVo;
import com.ruoyi.system.domain.bo.ZsOperationWarnconfigBo;
import com.ruoyi.system.service.IZsOperationWarnconfigService;
import com.ruoyi.common.core.page.TableDataInfo;

/**
* 预警配置
*
* @author 王强
* @date 2025-05-08
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/operationWarnconfig")
public class ZsOperationWarnconfigController extends BaseController {

private final IZsOperationWarnconfigService iZsOperationWarnconfigService;

/**
* 查询预警配置列表
*/
@SaCheckPermission("system:operationWarnconfig:list")
@GetMapping("/list")
public TableDataInfo<ZsOperationWarnconfigVo> list(ZsOperationWarnconfigBo bo, PageQuery pageQuery) {
return iZsOperationWarnconfigService.queryPageList(bo, pageQuery);
}

/**
* 导出预警配置列表
*/
@SaCheckPermission("system:operationWarnconfig:export")
@Log(title = "预警配置", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ZsOperationWarnconfigBo bo, HttpServletResponse response) {
List<ZsOperationWarnconfigVo> list = iZsOperationWarnconfigService.queryList(bo);
ExcelUtil.exportExcel(list, "预警配置", ZsOperationWarnconfigVo.class, response);
}

/**
* 获取预警配置详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:operationWarnconfig:query")
@GetMapping("/{id}")
public R<ZsOperationWarnconfigVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(iZsOperationWarnconfigService.queryById(id));
}

/**
* 新增预警配置
*/
@SaCheckPermission("system:operationWarnconfig:add")
@Log(title = "预警配置", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ZsOperationWarnconfigBo bo) {
return toAjax(iZsOperationWarnconfigService.insertByBo(bo));
}

/**
* 修改预警配置
*/
@SaCheckPermission("system:operationWarnconfig:edit")
@Log(title = "预警配置", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ZsOperationWarnconfigBo bo) {
return toAjax(iZsOperationWarnconfigService.updateByBo(bo));
}

/**
* 删除预警配置
*
* @param ids 主键串
*/
@SaCheckPermission("system:operationWarnconfig:remove")
@Log(title = "预警配置", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(iZsOperationWarnconfigService.deleteWithValidByIds(Arrays.asList(ids), true));
}
}

+ 120
- 0
ruoyi-system/src/main/java/com/ruoyi/system/controller/ZsOperationWarnresultController.java View File

@@ -0,0 +1,120 @@
package com.ruoyi.system.controller;

import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;

import cn.dev33.satoken.annotation.SaIgnore;
import com.ruoyi.system.domain.ZsOperationWarnconfig;
import com.ruoyi.system.task.MonitorTaskScheduler;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.core.validate.QueryGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.vo.ZsOperationWarnresultVo;
import com.ruoyi.system.domain.bo.ZsOperationWarnresultBo;
import com.ruoyi.system.service.IZsOperationWarnresultService;
import com.ruoyi.common.core.page.TableDataInfo;

/**
* 预警结果
*
* @author 王强
* @date 2025-05-12
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/operationWarnresult")
public class ZsOperationWarnresultController extends BaseController {

private final IZsOperationWarnresultService iZsOperationWarnresultService;

/**
* 查询预警结果列表
*/
@SaCheckPermission("system:operationWarnresult:list")
@GetMapping("/list")
public TableDataInfo<ZsOperationWarnresultVo> list(ZsOperationWarnresultBo bo, PageQuery pageQuery) {
return iZsOperationWarnresultService.queryPageList(bo, pageQuery);
}

/**
* 导出预警结果列表
*/
@SaCheckPermission("system:operationWarnresult:export")
@Log(title = "预警结果", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ZsOperationWarnresultBo bo, HttpServletResponse response) {
List<ZsOperationWarnresultVo> list = iZsOperationWarnresultService.queryList(bo);
ExcelUtil.exportExcel(list, "预警结果", ZsOperationWarnresultVo.class, response);
}

/**
* 获取预警结果详细信息
*
* @param id 主键
*/
@SaCheckPermission("system:operationWarnresult:query")
@GetMapping("/{id}")
public R<ZsOperationWarnresultVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(iZsOperationWarnresultService.queryById(id));
}

/**
* 新增预警结果
*/
@SaCheckPermission("system:operationWarnresult:add")
@Log(title = "预警结果", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ZsOperationWarnresultBo bo) {
return toAjax(iZsOperationWarnresultService.insertByBo(bo));
}

/**
* 修改预警结果
*/
@SaCheckPermission("system:operationWarnresult:edit")
@Log(title = "预警结果", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ZsOperationWarnresultBo bo) {
return toAjax(iZsOperationWarnresultService.updateByBo(bo));
}

/**
* 删除预警结果
*
* @param ids 主键串
*/
@SaCheckPermission("system:operationWarnresult:remove")
@Log(title = "预警结果", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(iZsOperationWarnresultService.deleteWithValidByIds(Arrays.asList(ids), true));
}

//立即调用预警监控
@SaIgnore
@GetMapping("/monitorWarn")
public void monitorWarn() {
iZsOperationWarnresultService.monitorWarn();
}

}

+ 56
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/ZsOperationGoods.java View File

@@ -0,0 +1,56 @@
package com.ruoyi.system.domain;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.math.BigDecimal;



/**
* 商品配置对象 zs_operation_goods
*
* @author 王强
* @date 2025-05-08
*/
@Data
@TableName("zs_operation_goods")
public class ZsOperationGoods {

private static final long serialVersionUID=1L;

/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 商品名字
*/
private String goodsSkuName;
/**
* 商品编号
*/
private String goodsSkuSn;
/**
* 商品url
*/
private String goodsSkuUrl;
/**
* 平台
*/
private String platform;
/**
* 基准价格
*/
private BigDecimal initPrice;
/**
* 备注
*/
private String remark;
/**
* 是否启用
*/
private String isDisabled;

}

+ 43
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/ZsOperationSendconfig.java View File

@@ -0,0 +1,43 @@
package com.ruoyi.system.domain;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
/**
* 发送信息配置对象 zs_operation_sendconfig
*
* @author 王强
* @date 2025-05-09
*/
@Data
@TableName("zs_operation_sendconfig")
public class ZsOperationSendconfig {

private static final long serialVersionUID=1L;

/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 预警方式
*/
private String code;
/**
* 配置
*/
private String configValue;
/**
* 模块
*/
private String module;
/**
* 发送邮箱
*/
private String sendEmail;
/**
* 邮箱配置id
*/
private Long smtpId;

}

+ 44
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/ZsOperationSmtp.java View File

@@ -0,0 +1,44 @@
package com.ruoyi.system.domain;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

/**
* 邮件配置对象 zs_operation_smtp
*
* @author 王强
* @date 2025-05-09
*/
@Data
@TableName("zs_operation_smtp")
public class ZsOperationSmtp {

private static final long serialVersionUID=1L;

/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 主机
*/
private String host;
/**
* 端口
*/
private Integer port;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 最大发信数
*/
private Long maxCount;

}

+ 44
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/ZsOperationWarnconfig.java View File

@@ -0,0 +1,44 @@
package com.ruoyi.system.domain;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

/**
* 预警配置对象 zs_operation_warnconfig
*
* @author 王强
* @date 2025-05-08
*/
@Data
@TableName("zs_operation_warnconfig")
public class ZsOperationWarnconfig {

private static final long serialVersionUID=1L;

/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 价格变化比例阈值(%)
*/
private String priceChangeThreshold;
/**
* 监控频率
*/
private String monitorFrequency;
/**
* 预警方式
*/
private String warnTypes;
/**
* 预警时间段
*/
private String warnTimeRange;
/**
* 备注
*/
private String remark;

}

+ 68
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/ZsOperationWarnresult.java View File

@@ -0,0 +1,68 @@
package com.ruoyi.system.domain;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
import java.math.BigDecimal;



/**
* 预警结果对象 zs_operation_warnresult
*
* @author 王强
* @date 2025-05-12
*/
@Data
@TableName("zs_operation_warnresult")
public class ZsOperationWarnresult {

private static final long serialVersionUID=1L;

/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 预警时间
*/
private Date warnTime;
/**
* 商品名字
*/
private String goodsSkuName;
/**
* 商品编号
*/
private String goodsSkuSn;
/**
* 基准价格
*/
private BigDecimal initPrice;
/**
* 当前价格
*/
private BigDecimal curPrice;
/**
* 价格变动幅度
*/
private String priceChangeRatio;
/**
* 预警方式
*/
private String warnTypes;
/**
* 通知内容/结果
*/
private String warnContent;
/**
* 处理状态
*/
private Integer status;
/**
* 图片快照
*/
private String snapshotUrl;

}

+ 67
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ZsOperationGoodsBo.java View File

@@ -0,0 +1,67 @@
package com.ruoyi.system.domain.bo;

import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;

import java.util.Date;

import java.math.BigDecimal;
import com.ruoyi.common.core.domain.BaseEntity;

/**
* 商品配置业务对象 zs_operation_goods
*
* @author 王强
* @date 2025-05-08
*/

@Data
@EqualsAndHashCode(callSuper = true)
public class ZsOperationGoodsBo extends BaseEntity {

/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;

/**
* 商品名字
*/
private String goodsSkuName;

/**
* 商品编号
*/
private String goodsSkuSn;

/**
* 商品url
*/
private String goodsSkuUrl;

/**
* 平台
*/
private String platform;

/**
* 基准价格
*/
private BigDecimal initPrice;

/**
* 备注
*/
private String remark;

/**
* 是否启用
*/
private String isDisabled;


}

+ 56
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ZsOperationSendconfigBo.java View File

@@ -0,0 +1,56 @@
package com.ruoyi.system.domain.bo;

import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;

import java.util.Date;

import com.ruoyi.common.core.domain.BaseEntity;

/**
* 发送信息配置业务对象 zs_operation_sendconfig
*
* @author 王强
* @date 2025-05-09
*/

@Data
@EqualsAndHashCode(callSuper = true)
public class ZsOperationSendconfigBo extends BaseEntity {

/**
* 主键
*/
@NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id;

/**
* 预警方式
*/
private String code;

/**
* 配置
*/
private String configValue;

/**
* 模块
*/
private String module;

/**
* 发送邮箱
*/
private String sendEmail;

/**
* 邮箱配置id
*/
private Long smtpId;


}

+ 56
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ZsOperationSmtpBo.java View File

@@ -0,0 +1,56 @@
package com.ruoyi.system.domain.bo;

import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;

import java.util.Date;

import com.ruoyi.common.core.domain.BaseEntity;

/**
* 邮件配置业务对象 zs_operation_smtp
*
* @author 王强
* @date 2025-05-09
*/

@Data
@EqualsAndHashCode(callSuper = true)
public class ZsOperationSmtpBo extends BaseEntity {

/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;

/**
* 主机
*/
private String host;

/**
* 端口
*/
private Integer port;

/**
* 用户名
*/
private String username;

/**
* 密码
*/
private String password;

/**
* 最大发信数
*/
private Long maxCount;


}

+ 56
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ZsOperationWarnconfigBo.java View File

@@ -0,0 +1,56 @@
package com.ruoyi.system.domain.bo;

import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;

import java.util.Date;

import com.ruoyi.common.core.domain.BaseEntity;

/**
* 预警配置业务对象 zs_operation_warnconfig
*
* @author 王强
* @date 2025-05-08
*/

@Data
@EqualsAndHashCode(callSuper = true)
public class ZsOperationWarnconfigBo extends BaseEntity {

/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;

/**
* 价格变化比例阈值(%)
*/
private String priceChangeThreshold;

/**
* 监控频率
*/
private String monitorFrequency;

/**
* 预警方式
*/
private String warnTypes;

/**
* 预警时间段
*/
private String warnTimeRange;

/**
* 备注
*/
private String remark;


}

+ 84
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/ZsOperationWarnresultBo.java View File

@@ -0,0 +1,84 @@
package com.ruoyi.system.domain.bo;

import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;

import java.util.Date;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;

/**
* 预警结果业务对象 zs_operation_warnresult
*
* @author 王强
* @date 2025-05-12
*/

@Data
@EqualsAndHashCode(callSuper = true)
public class ZsOperationWarnresultBo extends BaseEntity {

/**
* 主键ID
*/
private Long id;

/**
* 预警时间
*/
private Date warnTime;

/**
* 商品名字
*/
private String goodsSkuName;

/**
* 商品编号
*/
private String goodsSkuSn;

/**
* 基准价格
*/
private BigDecimal initPrice;

/**
* 当前价格
*/
private BigDecimal curPrice;

/**
* 价格变动幅度
*/
private String priceChangeRatio;

/**
* 预警方式
*/
private String warnTypes;

/**
* 通知内容/结果
*/
private String warnContent;

/**
* 处理状态
*/
private Integer status;

/**
* 图片快照
*/
@NotBlank(message = "图片快照不能为空", groups = { AddGroup.class, EditGroup.class })
private String snapshotUrl;


}

+ 76
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ZsOperationGoodsVo.java View File

@@ -0,0 +1,76 @@
package com.ruoyi.system.domain.vo;

import java.math.BigDecimal;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;



/**
* 商品配置视图对象 zs_operation_goods
*
* @author 王强
* @date 2025-05-08
*/
@Data
@ExcelIgnoreUnannotated
public class ZsOperationGoodsVo {

private static final long serialVersionUID = 1L;

/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;

/**
* 商品名字
*/
@ExcelProperty(value = "商品名字")
private String goodsSkuName;

/**
* 商品编号
*/
@ExcelProperty(value = "商品编号")
private String goodsSkuSn;

/**
* 商品url
*/
@ExcelProperty(value = "商品url")
private String goodsSkuUrl;

/**
* 平台
*/
@ExcelProperty(value = "平台", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "zs_operation_platform")
private String platform;

/**
* 基准价格
*/
@ExcelProperty(value = "基准价格")
private BigDecimal initPrice;

/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;

/**
* 是否启用
*/
@ExcelProperty(value = "是否启用", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "zs_is_disabled")
private String isDisabled;


}

+ 63
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ZsOperationSendconfigVo.java View File

@@ -0,0 +1,63 @@
package com.ruoyi.system.domain.vo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;



/**
* 发送信息配置视图对象 zs_operation_sendconfig
*
* @author 王强
* @date 2025-05-09
*/
@Data
@ExcelIgnoreUnannotated
public class ZsOperationSendconfigVo {

private static final long serialVersionUID = 1L;

/**
* 主键
*/
@ExcelProperty(value = "主键")
private Long id;

/**
* 预警方式
*/
@ExcelProperty(value = "预警方式", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "zs_operation_warn_types")
private String code;

/**
* 配置
*/
@ExcelProperty(value = "配置")
private String configValue;

/**
* 模块
*/
@ExcelProperty(value = "模块", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "zs_operation_module")
private String module;

/**
* 发送邮箱
*/
@ExcelProperty(value = "发送邮箱")
private String sendEmail;

/**
* 邮箱配置id
*/
@ExcelProperty(value = "邮箱配置id")
private Long smtpId;


}

+ 61
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ZsOperationSmtpVo.java View File

@@ -0,0 +1,61 @@
package com.ruoyi.system.domain.vo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;



/**
* 邮件配置视图对象 zs_operation_smtp
*
* @author 王强
* @date 2025-05-09
*/
@Data
@ExcelIgnoreUnannotated
public class ZsOperationSmtpVo {

private static final long serialVersionUID = 1L;

/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;

/**
* 主机
*/
@ExcelProperty(value = "主机")
private String host;

/**
* 端口
*/
@ExcelProperty(value = "端口")
private Integer port;

/**
* 用户名
*/
@ExcelProperty(value = "用户名")
private String username;

/**
* 密码
*/
@ExcelProperty(value = "密码")
private String password;

/**
* 最大发信数
*/
@ExcelProperty(value = "最大发信数")
private Long maxCount;


}

+ 65
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ZsOperationWarnconfigVo.java View File

@@ -0,0 +1,65 @@
package com.ruoyi.system.domain.vo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;



/**
* 预警配置视图对象 zs_operation_warnconfig
*
* @author 王强
* @date 2025-05-08
*/
@Data
@ExcelIgnoreUnannotated
public class ZsOperationWarnconfigVo {

private static final long serialVersionUID = 1L;

/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;

/**
* 价格变化比例阈值(%)
*/
@ExcelProperty(value = "价格变化比例阈值", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "%=")
private String priceChangeThreshold;

/**
* 监控频率
*/
@ExcelProperty(value = "监控频率", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "zs_operation_monitor_frequency")
private String monitorFrequency;

/**
* 预警方式
*/
@ExcelProperty(value = "预警方式", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "zs_operation_warn_types")
private String warnTypes;

/**
* 预警时间段
*/
@ExcelProperty(value = "预警时间段", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "zs_operation_warn_time_range")
private String warnTimeRange;

/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;


}

+ 96
- 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ZsOperationWarnresultVo.java View File

@@ -0,0 +1,96 @@
package com.ruoyi.system.domain.vo;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;



/**
* 预警结果视图对象 zs_operation_warnresult
*
* @author 王强
* @date 2025-05-12
*/
@Data
@ExcelIgnoreUnannotated
public class ZsOperationWarnresultVo {

private static final long serialVersionUID = 1L;

/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;

/**
* 预警时间
*/
@ExcelProperty(value = "预警时间")
private Date warnTime;

/**
* 商品名字
*/
@ExcelProperty(value = "商品名字")
private String goodsSkuName;

/**
* 商品编号
*/
@ExcelProperty(value = "商品编号")
private String goodsSkuSn;

/**
* 基准价格
*/
@ExcelProperty(value = "基准价格")
private BigDecimal initPrice;

/**
* 当前价格
*/
@ExcelProperty(value = "当前价格")
private BigDecimal curPrice;

/**
* 价格变动幅度
*/
@ExcelProperty(value = "价格变动幅度")
private String priceChangeRatio;

/**
* 预警方式
*/
@ExcelProperty(value = "预警方式", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "zs_operation_warn_types")
private String warnTypes;

/**
* 通知内容/结果
*/
@ExcelProperty(value = "通知内容/结果")
private String warnContent;

/**
* 处理状态
*/
@ExcelProperty(value = "处理状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "zs_operation_status")
private Integer status;

/**
* 图片快照
*/
@ExcelProperty(value = "图片快照")
private String snapshotUrl;


}

+ 15
- 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/ZsOperationGoodsMapper.java View File

@@ -0,0 +1,15 @@
package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.ZsOperationGoods;
import com.ruoyi.system.domain.vo.ZsOperationGoodsVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus;

/**
* 商品配置Mapper接口
*
* @author 王强
* @date 2025-05-08
*/
public interface ZsOperationGoodsMapper extends BaseMapperPlus<ZsOperationGoodsMapper, ZsOperationGoods, ZsOperationGoodsVo> {

}

+ 15
- 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/ZsOperationSendconfigMapper.java View File

@@ -0,0 +1,15 @@
package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.ZsOperationSendconfig;
import com.ruoyi.system.domain.vo.ZsOperationSendconfigVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus;

/**
* 发送信息配置Mapper接口
*
* @author 王强
* @date 2025-05-09
*/
public interface ZsOperationSendconfigMapper extends BaseMapperPlus<ZsOperationSendconfigMapper, ZsOperationSendconfig, ZsOperationSendconfigVo> {

}

+ 15
- 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/ZsOperationSmtpMapper.java View File

@@ -0,0 +1,15 @@
package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.ZsOperationSmtp;
import com.ruoyi.system.domain.vo.ZsOperationSmtpVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus;

/**
* 邮件配置Mapper接口
*
* @author 王强
* @date 2025-05-09
*/
public interface ZsOperationSmtpMapper extends BaseMapperPlus<ZsOperationSmtpMapper, ZsOperationSmtp, ZsOperationSmtpVo> {

}

+ 15
- 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/ZsOperationWarnconfigMapper.java View File

@@ -0,0 +1,15 @@
package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.ZsOperationWarnconfig;
import com.ruoyi.system.domain.vo.ZsOperationWarnconfigVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus;

/**
* 预警配置Mapper接口
*
* @author 王强
* @date 2025-05-08
*/
public interface ZsOperationWarnconfigMapper extends BaseMapperPlus<ZsOperationWarnconfigMapper, ZsOperationWarnconfig, ZsOperationWarnconfigVo> {

}

+ 15
- 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/ZsOperationWarnresultMapper.java View File

@@ -0,0 +1,15 @@
package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.ZsOperationWarnresult;
import com.ruoyi.system.domain.vo.ZsOperationWarnresultVo;
import com.ruoyi.common.core.mapper.BaseMapperPlus;

/**
* 预警结果Mapper接口
*
* @author 王强
* @date 2025-05-12
*/
public interface ZsOperationWarnresultMapper extends BaseMapperPlus<ZsOperationWarnresultMapper, ZsOperationWarnresult, ZsOperationWarnresultVo> {

}

+ 156
- 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ZsOperationGoodsServiceImpl.java View File

@@ -0,0 +1,156 @@
package com.ruoyi.system.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.system.utils.HttpUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.ruoyi.system.domain.bo.ZsOperationGoodsBo;
import com.ruoyi.system.domain.vo.ZsOperationGoodsVo;
import com.ruoyi.system.domain.ZsOperationGoods;
import com.ruoyi.system.mapper.ZsOperationGoodsMapper;
import com.ruoyi.system.service.IZsOperationGoodsService;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Collection;

/**
* 商品配置Service业务层处理
*
* @author 王强
* @date 2025-05-08
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class ZsOperationGoodsServiceImpl implements IZsOperationGoodsService {

private final ZsOperationGoodsMapper baseMapper;

/**
* 查询商品配置
*/
@Override
public ZsOperationGoodsVo queryById(Long id){
return baseMapper.selectVoById(id);
}

/**
* 查询商品配置列表
*/
@Override
public TableDataInfo<ZsOperationGoodsVo> queryPageList(ZsOperationGoodsBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZsOperationGoods> lqw = buildQueryWrapper(bo);
Page<ZsOperationGoodsVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}

/**
* 查询商品配置列表
*/
@Override
public List<ZsOperationGoodsVo> queryList(ZsOperationGoodsBo bo) {
LambdaQueryWrapper<ZsOperationGoods> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}

private LambdaQueryWrapper<ZsOperationGoods> buildQueryWrapper(ZsOperationGoodsBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ZsOperationGoods> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getGoodsSkuName()), ZsOperationGoods::getGoodsSkuName, bo.getGoodsSkuName());
lqw.like(StringUtils.isNotBlank(bo.getGoodsSkuSn()), ZsOperationGoods::getGoodsSkuSn, bo.getGoodsSkuSn());
lqw.eq(StringUtils.isNotBlank(bo.getPlatform()), ZsOperationGoods::getPlatform, bo.getPlatform());
lqw.eq(StringUtils.isNotBlank(bo.getIsDisabled()), ZsOperationGoods::getIsDisabled, bo.getIsDisabled());
return lqw;
}

/**
* 新增商品配置
*/
@Override
public Boolean insertByBo(ZsOperationGoodsBo bo) {
ZsOperationGoods add = BeanUtil.toBean(bo, ZsOperationGoods.class);
//获取抓取的信息
Map<String, Object> reMap = HttpUtil.sendGetRequest(bo.getGoodsSkuUrl(),false,bo.getPlatform());
if ((boolean)reMap.get("success")) {
List dataList = (List)reMap.get("data");
Map dataMap = (Map)dataList.get(0);
String title = (String)dataMap.get("title");
String price = (String)dataMap.get("price");
if (org.apache.commons.lang3.StringUtils.isNotBlank(price)) {
price =price.replace(",","").trim();
}
String sku = (String)dataMap.get("sku");
String remark = (String)dataMap.get("remark");
add.setGoodsSkuName(title);
add.setGoodsSkuSn(sku);
add.setRemark(remark);
add.setInitPrice(new BigDecimal(price));
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
return flag;
} else {
log.info("新增商品同步数据失败!reMap="+reMap.toString());
return false;
}
}

/**
* 修改商品配置
*/
@Override
public Boolean updateByBo(ZsOperationGoodsBo bo) {
ZsOperationGoods update = BeanUtil.toBean(bo, ZsOperationGoods.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}

/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ZsOperationGoods entity){
//TODO 做一些数据校验,如唯一约束
String errMessage = "";
if (StringUtils.isBlank(entity.getGoodsSkuName())) {
errMessage= "商品名称不能为空";
}
if (StringUtils.isBlank(entity.getGoodsSkuSn())) {
errMessage= "商品编码不能为空";
}
if (StringUtils.isBlank(entity.getGoodsSkuUrl())) {
errMessage= "商品url不能为空";
}
if (entity.getInitPrice()==null) {
errMessage= "基准价格不能为空";
}
if (StringUtils.isBlank(entity.getIsDisabled())) {
errMessage= "是否启用不能为空";
}
if (StringUtils.isBlank(entity.getPlatform())) {
errMessage= "平台不能为空";
}

if (!"".equals(errMessage)) {
throw new RuntimeException(errMessage);
}
}

/**
* 批量删除商品配置
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

+ 109
- 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ZsOperationSendconfigServiceImpl.java View File

@@ -0,0 +1,109 @@
package com.ruoyi.system.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.ruoyi.system.domain.bo.ZsOperationSendconfigBo;
import com.ruoyi.system.domain.vo.ZsOperationSendconfigVo;
import com.ruoyi.system.domain.ZsOperationSendconfig;
import com.ruoyi.system.mapper.ZsOperationSendconfigMapper;
import com.ruoyi.system.service.IZsOperationSendconfigService;

import java.util.List;
import java.util.Map;
import java.util.Collection;

/**
* 发送信息配置Service业务层处理
*
* @author 王强
* @date 2025-05-09
*/
@RequiredArgsConstructor
@Service
public class ZsOperationSendconfigServiceImpl implements IZsOperationSendconfigService {

private final ZsOperationSendconfigMapper baseMapper;

/**
* 查询发送信息配置
*/
@Override
public ZsOperationSendconfigVo queryById(Long id){
return baseMapper.selectVoById(id);
}

/**
* 查询发送信息配置列表
*/
@Override
public TableDataInfo<ZsOperationSendconfigVo> queryPageList(ZsOperationSendconfigBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZsOperationSendconfig> lqw = buildQueryWrapper(bo);
Page<ZsOperationSendconfigVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}

/**
* 查询发送信息配置列表
*/
@Override
public List<ZsOperationSendconfigVo> queryList(ZsOperationSendconfigBo bo) {
LambdaQueryWrapper<ZsOperationSendconfig> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}

private LambdaQueryWrapper<ZsOperationSendconfig> buildQueryWrapper(ZsOperationSendconfigBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ZsOperationSendconfig> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getModule()), ZsOperationSendconfig::getModule, bo.getModule());
return lqw;
}

/**
* 新增发送信息配置
*/
@Override
public Boolean insertByBo(ZsOperationSendconfigBo bo) {
ZsOperationSendconfig add = BeanUtil.toBean(bo, ZsOperationSendconfig.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}

/**
* 修改发送信息配置
*/
@Override
public Boolean updateByBo(ZsOperationSendconfigBo bo) {
ZsOperationSendconfig update = BeanUtil.toBean(bo, ZsOperationSendconfig.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}

/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ZsOperationSendconfig entity){
//TODO 做一些数据校验,如唯一约束
}

/**
* 批量删除发送信息配置
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

+ 108
- 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ZsOperationSmtpServiceImpl.java View File

@@ -0,0 +1,108 @@
package com.ruoyi.system.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.ruoyi.system.domain.bo.ZsOperationSmtpBo;
import com.ruoyi.system.domain.vo.ZsOperationSmtpVo;
import com.ruoyi.system.domain.ZsOperationSmtp;
import com.ruoyi.system.mapper.ZsOperationSmtpMapper;
import com.ruoyi.system.service.IZsOperationSmtpService;

import java.util.List;
import java.util.Map;
import java.util.Collection;

/**
* 邮件配置Service业务层处理
*
* @author 王强
* @date 2025-05-09
*/
@RequiredArgsConstructor
@Service
public class ZsOperationSmtpServiceImpl implements IZsOperationSmtpService {

private final ZsOperationSmtpMapper baseMapper;

/**
* 查询邮件配置
*/
@Override
public ZsOperationSmtpVo queryById(Long id){
return baseMapper.selectVoById(id);
}

/**
* 查询邮件配置列表
*/
@Override
public TableDataInfo<ZsOperationSmtpVo> queryPageList(ZsOperationSmtpBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZsOperationSmtp> lqw = buildQueryWrapper(bo);
Page<ZsOperationSmtpVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}

/**
* 查询邮件配置列表
*/
@Override
public List<ZsOperationSmtpVo> queryList(ZsOperationSmtpBo bo) {
LambdaQueryWrapper<ZsOperationSmtp> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}

private LambdaQueryWrapper<ZsOperationSmtp> buildQueryWrapper(ZsOperationSmtpBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ZsOperationSmtp> lqw = Wrappers.lambdaQuery();
return lqw;
}

/**
* 新增邮件配置
*/
@Override
public Boolean insertByBo(ZsOperationSmtpBo bo) {
ZsOperationSmtp add = BeanUtil.toBean(bo, ZsOperationSmtp.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}

/**
* 修改邮件配置
*/
@Override
public Boolean updateByBo(ZsOperationSmtpBo bo) {
ZsOperationSmtp update = BeanUtil.toBean(bo, ZsOperationSmtp.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}

/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ZsOperationSmtp entity){
//TODO 做一些数据校验,如唯一约束
}

/**
* 批量删除邮件配置
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

+ 108
- 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ZsOperationWarnconfigServiceImpl.java View File

@@ -0,0 +1,108 @@
package com.ruoyi.system.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.ruoyi.system.domain.bo.ZsOperationWarnconfigBo;
import com.ruoyi.system.domain.vo.ZsOperationWarnconfigVo;
import com.ruoyi.system.domain.ZsOperationWarnconfig;
import com.ruoyi.system.mapper.ZsOperationWarnconfigMapper;
import com.ruoyi.system.service.IZsOperationWarnconfigService;

import java.util.List;
import java.util.Map;
import java.util.Collection;

/**
* 预警配置Service业务层处理
*
* @author 王强
* @date 2025-05-08
*/
@RequiredArgsConstructor
@Service
public class ZsOperationWarnconfigServiceImpl implements IZsOperationWarnconfigService {

private final ZsOperationWarnconfigMapper baseMapper;

/**
* 查询预警配置
*/
@Override
public ZsOperationWarnconfigVo queryById(Long id){
return baseMapper.selectVoById(id);
}

/**
* 查询预警配置列表
*/
@Override
public TableDataInfo<ZsOperationWarnconfigVo> queryPageList(ZsOperationWarnconfigBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZsOperationWarnconfig> lqw = buildQueryWrapper(bo);
Page<ZsOperationWarnconfigVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}

/**
* 查询预警配置列表
*/
@Override
public List<ZsOperationWarnconfigVo> queryList(ZsOperationWarnconfigBo bo) {
LambdaQueryWrapper<ZsOperationWarnconfig> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}

private LambdaQueryWrapper<ZsOperationWarnconfig> buildQueryWrapper(ZsOperationWarnconfigBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ZsOperationWarnconfig> lqw = Wrappers.lambdaQuery();
return lqw;
}

/**
* 新增预警配置
*/
@Override
public Boolean insertByBo(ZsOperationWarnconfigBo bo) {
ZsOperationWarnconfig add = BeanUtil.toBean(bo, ZsOperationWarnconfig.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}

/**
* 修改预警配置
*/
@Override
public Boolean updateByBo(ZsOperationWarnconfigBo bo) {
ZsOperationWarnconfig update = BeanUtil.toBean(bo, ZsOperationWarnconfig.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}

/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ZsOperationWarnconfig entity){
//TODO 做一些数据校验,如唯一约束
}

/**
* 批量删除预警配置
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

+ 129
- 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ZsOperationWarnresultServiceImpl.java View File

@@ -0,0 +1,129 @@
package com.ruoyi.system.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.system.domain.ZsOperationWarnconfig;
import com.ruoyi.system.mapper.ZsOperationWarnconfigMapper;
import com.ruoyi.system.task.MonitorTaskScheduler;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.domain.bo.ZsOperationWarnresultBo;
import com.ruoyi.system.domain.vo.ZsOperationWarnresultVo;
import com.ruoyi.system.domain.ZsOperationWarnresult;
import com.ruoyi.system.mapper.ZsOperationWarnresultMapper;
import com.ruoyi.system.service.IZsOperationWarnresultService;

import java.util.List;
import java.util.Map;
import java.util.Collection;

/**
* 预警结果Service业务层处理
*
* @author 王强
* @date 2025-05-12
*/
@RequiredArgsConstructor
@Service
public class ZsOperationWarnresultServiceImpl implements IZsOperationWarnresultService {

private final ZsOperationWarnresultMapper baseMapper;
@Autowired
private MonitorTaskScheduler monitorTaskScheduler;
@Autowired
private ZsOperationWarnconfigMapper zsOperationWarnconfigMapper;
/**
* 查询预警结果
*/
@Override
public ZsOperationWarnresultVo queryById(Long id){
return baseMapper.selectVoById(id);
}

/**
* 查询预警结果列表
*/
@Override
public TableDataInfo<ZsOperationWarnresultVo> queryPageList(ZsOperationWarnresultBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<ZsOperationWarnresult> lqw = buildQueryWrapper(bo);
Page<ZsOperationWarnresultVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}

/**
* 查询预警结果列表
*/
@Override
public List<ZsOperationWarnresultVo> queryList(ZsOperationWarnresultBo bo) {
LambdaQueryWrapper<ZsOperationWarnresult> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}

private LambdaQueryWrapper<ZsOperationWarnresult> buildQueryWrapper(ZsOperationWarnresultBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<ZsOperationWarnresult> lqw = Wrappers.lambdaQuery();
lqw.between(params.get("beginWarnTime") != null && params.get("endWarnTime") != null,
ZsOperationWarnresult::getWarnTime ,params.get("beginWarnTime"), params.get("endWarnTime"));
lqw.like(StringUtils.isNotBlank(bo.getGoodsSkuName()), ZsOperationWarnresult::getGoodsSkuName, bo.getGoodsSkuName());
lqw.eq(StringUtils.isNotBlank(bo.getGoodsSkuSn()), ZsOperationWarnresult::getGoodsSkuSn, bo.getGoodsSkuSn());
lqw.eq(bo.getStatus() != null, ZsOperationWarnresult::getStatus, bo.getStatus());
return lqw;
}

/**
* 新增预警结果
*/
@Override
public Boolean insertByBo(ZsOperationWarnresultBo bo) {
ZsOperationWarnresult add = BeanUtil.toBean(bo, ZsOperationWarnresult.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}

/**
* 修改预警结果
*/
@Override
public Boolean updateByBo(ZsOperationWarnresultBo bo) {
ZsOperationWarnresult update = BeanUtil.toBean(bo, ZsOperationWarnresult.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}

/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(ZsOperationWarnresult entity){
//TODO 做一些数据校验,如唯一约束
}

/**
* 批量删除预警结果
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
//拉取商品 进行比对
@Override
public void monitorWarn() {
List<ZsOperationWarnconfig> zsOperationWarnconfigs = zsOperationWarnconfigMapper.selectList();
if (zsOperationWarnconfigs!=null&&zsOperationWarnconfigs.size()>0) {
ZsOperationWarnconfig zsOperationWarnconfig = zsOperationWarnconfigs.get(0);
monitorTaskScheduler.monitorWarn(zsOperationWarnconfig);
}
}
}

+ 61
- 0
ruoyi-system/src/main/java/com/ruoyi/system/utils/EmailUtils.java View File

@@ -0,0 +1,61 @@
package com.ruoyi.system.utils;

import com.ruoyi.system.domain.ZsOperationSmtp;
import com.ruoyi.system.mapper.ZsOperationSmtpMapper;
import com.sun.mail.util.MailSSLSocketFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
//邮件发送工具类
@Component
@Slf4j
public class EmailUtils {
@Autowired
private ZsOperationSmtpMapper zsOperationSmtpMapper;
/**
* 发送邮件
* @param sendEmail 发送邮箱
* @param receiveEmail 接收邮箱
* @param content 邮件标题
* @param receiveEmail 邮件内容
* @param smtpId 邮件配置id
*/
@Async
public void sendMailByTransport(String sendEmail ,String receiveEmail,String title,String content,Long smtpId) {
try {
ZsOperationSmtp smtp = zsOperationSmtpMapper.selectById(smtpId);
Properties props = new Properties();
props.put("mail.smtp.host", smtp.getHost());
props.put("mail.smtp.socketFactory.port", String.valueOf(smtp.getPort()));
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", String.valueOf(smtp.getPort()));
final String username = smtp.getUsername().trim();
final String password = smtp.getPassword().trim();
Session session = Session.getInstance(props,
new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username,password);
}
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(sendEmail));
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(receiveEmail));
message.setSubject(title);
message.setText(content);
Transport.send(message);
} catch (Exception e) {
log.error("邮件发送失败",e);
}
}
}

+ 48
- 0
ruoyi-system/src/main/java/com/ruoyi/system/utils/HttpUtil.java View File

@@ -0,0 +1,48 @@
package com.ruoyi.system.utils;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.HashMap;
import java.util.Map;
//调用获取商品信息工具类
@Component
public class HttpUtil {
private static String BASE_URL;

@Value("${zs-operation.url}")
public void setBaseUrl(String baseUrl) {
HttpUtil.BASE_URL = baseUrl;
}

private static final RestTemplate restTemplate = new RestTemplate();

/**
* 发送GET请求并处理响应
* @param url 请求URL
* @param needScreenshot 是否需要截图
* @return 响应结果
*/
public static Map<String, Object> sendGetRequest(String url, boolean needScreenshot,String platform) {

try {
// 构建请求URL和参数
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(BASE_URL)
.queryParam("url", url)
.queryParam("needScreenshot", needScreenshot)
.queryParam("platform", platform);

// 发送GET请求
ResponseEntity<Map> response = restTemplate.getForEntity(builder.toUriString(), Map.class);
Map body = response.getBody();
return body;
} catch (Exception e) {
Map<String, Object> reMap = new HashMap<>();
reMap.put("success", false);
reMap.put("message", "请求发生错误: " + e.getMessage());
return reMap;
}
}
}

+ 19
- 0
ruoyi-system/src/main/resources/mapper/system/ZsOperationGoodsMapper.xml View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.ZsOperationGoodsMapper">

<resultMap type="com.ruoyi.system.domain.ZsOperationGoods" id="ZsOperationGoodsResult">
<result property="id" column="id"/>
<result property="goodsSkuName" column="goods_sku_name"/>
<result property="goodsSkuSn" column="goods_sku_sn"/>
<result property="goodsSkuUrl" column="goods_sku_url"/>
<result property="platform" column="platform"/>
<result property="initPrice" column="init_price"/>
<result property="remark" column="remark"/>
<result property="isDisabled" column="is_disabled"/>
</resultMap>


</mapper>

+ 17
- 0
ruoyi-system/src/main/resources/mapper/system/ZsOperationSendconfigMapper.xml View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.ZsOperationSendconfigMapper">

<resultMap type="com.ruoyi.system.domain.ZsOperationSendconfig" id="ZsOperationSendconfigResult">
<result property="id" column="id"/>
<result property="code" column="code"/>
<result property="configValue" column="config_value"/>
<result property="module" column="module"/>
<result property="sendEmail" column="send_email"/>
<result property="smtpId" column="smtp_id"/>
</resultMap>


</mapper>

+ 17
- 0
ruoyi-system/src/main/resources/mapper/system/ZsOperationSmtpMapper.xml View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.ZsOperationSmtpMapper">

<resultMap type="com.ruoyi.system.domain.ZsOperationSmtp" id="ZsOperationSmtpResult">
<result property="id" column="id"/>
<result property="host" column="host"/>
<result property="port" column="port"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
<result property="maxCount" column="max_count"/>
</resultMap>


</mapper>

+ 17
- 0
ruoyi-system/src/main/resources/mapper/system/ZsOperationWarnconfigMapper.xml View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.ZsOperationWarnconfigMapper">

<resultMap type="com.ruoyi.system.domain.ZsOperationWarnconfig" id="ZsOperationWarnconfigResult">
<result property="id" column="id"/>
<result property="priceChangeThreshold" column="price_change_threshold"/>
<result property="monitorFrequency" column="monitor_frequency"/>
<result property="warnTypes" column="warn_types"/>
<result property="warnTimeRange" column="warn_time_range"/>
<result property="remark" column="remark"/>
</resultMap>


</mapper>

+ 22
- 0
ruoyi-system/src/main/resources/mapper/system/ZsOperationWarnresultMapper.xml View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.ZsOperationWarnresultMapper">

<resultMap type="com.ruoyi.system.domain.ZsOperationWarnresult" id="ZsOperationWarnresultResult">
<result property="id" column="id"/>
<result property="warnTime" column="warn_time"/>
<result property="goodsSkuName" column="goods_sku_name"/>
<result property="goodsSkuSn" column="goods_sku_sn"/>
<result property="initPrice" column="init_price"/>
<result property="curPrice" column="cur_price"/>
<result property="priceChangeRatio" column="price_change_ratio"/>
<result property="warnTypes" column="warn_types"/>
<result property="warnContent" column="warn_content"/>
<result property="status" column="status"/>
<result property="snapshotUrl" column="snapshot_url"/>
</resultMap>


</mapper>

Loading…
Cancel
Save