Browse Source

添加广告上下架、检查过期广告回调地址反馈

云殇忆 1 year ago
parent
commit
b5b0c77982

+ 15 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/job/CheckPlanTimeJob.java

@@ -0,0 +1,15 @@
+package com.ruoyi.demo.job;
+
+import com.ruoyi.demo.service.PlanService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component("checkPlanTimeJob")
+public class CheckPlanTimeJob {
+    @Autowired
+    PlanService planService;
+
+    public void start(){
+        planService.checkPlanTime();
+    }
+}

+ 3 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/PlanService.java

@@ -37,4 +37,7 @@ public interface PlanService {
     List<AddrCategory> getAddrCategoryLevel(String code,String level);
     List<AddrCategory> getAddrCategory();
     Page<Equipment> getEquipments(PlanBo bo);
+
+    // Job
+    void checkPlanTime();
 }

+ 43 - 1
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/PlanServiceImpl.java

@@ -308,8 +308,21 @@ public class PlanServiceImpl implements PlanService {
             return -1;
         // 改变状态,1:上架;0:下架
         plan.setOnState(plan.getOnState() + 1);
-        if (plan.getOnState() >= 2)
+        if (plan.getOnState() >= 2) {
             plan.setOnState(0);
+            // 发送下架信息
+            try {
+                App app = appMapper.selectOne(new QueryWrapper<App>()
+                    .eq("appkey", plan.getAppkey())
+                    .eq("state", 1)
+                    .eq("deleted", "0"));
+                Map<String, Object> map = Dict.create()
+                    .set("msg", "您的广告\"" + plan.getPlanName() + "\"已下架")
+                    .set("time", DateUtil.date());
+                SendCallBackUtil.sendCallBack(app.getCallBack(), map);
+            } catch (Exception e) {
+            }
+        }
         return planMapper.updateById(plan);
     }
 
@@ -530,4 +543,33 @@ public class PlanServiceImpl implements PlanService {
         Page<Equipment> page = new Page<>(bo.getPageNum(), bo.getPageSize());
         return equipmentMapper.selectPage(page, equipmentQueryWrapper);
     }
+
+    @Override
+    public void checkPlanTime() {
+        /* 逻辑:
+         每天8点检查一次,假设当前时间为[2023-1-3 08:00:00],
+         查询[2023-1-3 08:00:00 >= 计划结束时间 >= 2023-1-2 08:00:00]的计划,
+         获得对应的appkey,在查询这些appkey对应的小程序,
+         获得对应的callBack,对这些callBack返回信息。
+        */
+        List<Plan> plans = planMapper.selectList(new QueryWrapper<Plan>()
+            .eq("state", StateUtil.APPROVED) // 通过审核
+            .eq("on_state", OnStateUtil.UP) // 上架
+            .apply("plan_end_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')", DateUtil.date().toString())
+            .apply("plan_end_time >= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')", DateUtil.offsetDay(new Date(), -1).toString()));
+        for (Plan plan : plans) {
+            App app = appMapper.selectOne(new QueryWrapper<App>()
+                .eq("appkey", plan.getAppkey())
+                .eq("state", 1) // 启用
+                .eq("deleted", "0"));
+            Map<String, Object> map = Dict.create()
+                .set("msg", "您的广告\"" + plan.getPlanName() + "\"已下架")
+                .set("time", DateUtil.date());
+            try {
+                SendCallBackUtil.sendCallBack(app.getCallBack(), map);
+            } catch (Exception e) {
+                System.out.println("[appkey:" + app.getAppkey() + ",appName:" + app.getAppName() + "]的回调地址[" + app.getCallBack() + "]失效");
+            }
+        }
+    }
 }

+ 5 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/utils/SendCallBackUtil.java

@@ -5,6 +5,7 @@ import com.ruoyi.demo.entity.bo.CallBackBean;
 import org.springframework.web.client.RestTemplate;
 
 import java.time.LocalDateTime;
+import java.util.Map;
 
 public class SendCallBackUtil {
     // 例子
@@ -41,4 +42,8 @@ public class SendCallBackUtil {
             e.printStackTrace();
         }
     }
+
+    public static String sendCallBack(String callBack, Map<String, Object> map) {
+        return new RestTemplate().postForObject(callBack, map, String.class);
+    }
 }

+ 24 - 0
ruoyi-job/src/main/java/com/ruoyi/job/service/CheckPlanTimeService.java

@@ -0,0 +1,24 @@
+package com.ruoyi.job.service;
+
+import cn.hutool.core.date.DateUtil;
+import com.ruoyi.demo.service.PlanService;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class CheckPlanTimeService {
+    @Autowired
+    PlanService planService;
+
+    // 每天8点检查一次
+    @XxlJob("checkPlanTimeJobHandler")
+    public void start(){
+        XxlJobHelper.log("start checkPlanTime"+ DateUtil.date());
+        planService.checkPlanTime();
+        XxlJobHelper.log("finish checkPlanTime"+ DateUtil.date());
+    }
+}