@@ -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)); | |||
} | |||
} |
@@ -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)); | |||
} | |||
} |
@@ -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)); | |||
} | |||
} |
@@ -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(); | |||
} | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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> { | |||
} |
@@ -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> { | |||
} |
@@ -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> { | |||
} |
@@ -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> { | |||
} |
@@ -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> { | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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); | |||
} | |||
} | |||
} |
@@ -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); | |||
} | |||
} | |||
} |
@@ -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; | |||
} | |||
} | |||
} |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |