Jelajahi Sumber

广告管理、广告计划管理、广告推送、广告投放、首页

云殇忆 1 tahun lalu
induk
melakukan
d1c7d3e000
25 mengubah file dengan 570 tambahan dan 130 penghapusan
  1. 71 30
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/PlanController.java
  2. 26 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/StatisticsController.java
  3. 3 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Goods.java
  4. 3 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Order.java
  5. 22 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Plan.java
  6. 12 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/PlanAudit.java
  7. 15 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/PlanItem.java
  8. 2 2
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Statistics.java
  9. 1 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/PlanBo.java
  10. 19 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanHomeVo.java
  11. 1 5
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanListVo.java
  12. 6 12
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanManageListVo.java
  13. 27 21
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanPushListVo.java
  14. 42 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanPushStatisticsListVo.java
  15. 40 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/ScanListVo.java
  16. 2 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/PlanItemMapper.java
  17. 1 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/PlanMapper.java
  18. 1 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/StatisticsMapper.java
  19. 14 6
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/PlanService.java
  20. 13 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/StatisticsService.java
  21. 157 46
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/PlanServiceImpl.java
  22. 49 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/StatisticsServiceImpl.java
  23. 16 0
      ruoyi-demo/src/main/resources/mapper/demo/PlanItemMapper.xml
  24. 14 0
      ruoyi-demo/src/main/resources/mapper/demo/PlanMapper.xml
  25. 13 0
      ruoyi-demo/src/main/resources/mapper/demo/StatisticsMapper.xml

+ 71 - 30
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/PlanController.java

@@ -1,11 +1,10 @@
 package com.ruoyi.demo.controller;
 
+import com.github.pagehelper.PageInfo;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.demo.entity.bo.PlanAddBo;
 import com.ruoyi.demo.entity.bo.PlanBo;
-import com.ruoyi.demo.entity.vo.PlanDetailVo;
-import com.ruoyi.demo.entity.vo.PlanListVo;
-import com.ruoyi.demo.entity.vo.StateVo;
+import com.ruoyi.demo.entity.vo.*;
 import com.ruoyi.demo.service.PlanService;
 import com.ruoyi.demo.utils.StateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,39 +14,27 @@ import java.util.ArrayList;
 import java.util.List;
 
 @RestController
-@RequestMapping("plan")
+@RequestMapping("/plan")
 public class PlanController {
     @Autowired
     PlanService planService;
 
-    @PostMapping()
-    public R addPlan(@RequestBody PlanAddBo bo){
-        int i = planService.addPlan(bo);
+    // 广告管理
+    // 上下架广告计划
+    @PutMapping("/{planId}")
+    public R planUpDown(@PathVariable String planId){
+        int i = planService.planUpDown(planId);
         if (i == 1)
-            return R.ok("广告添加成功");
+            return R.ok("成功");
         if (i == -1)
-            return R.fail("无效的appkey");
-        if (i == -2)
-            return R.fail("无效商户");
-        if (i == -3)
-            return R.fail("校验sign出错");
-        return R.fail("广告添加失败");
-    }
-
-    @DeleteMapping()
-    public R deletePlan(PlanBo bo){
-        List<String> planIds = bo.getPlanIds();
-        int total = planIds.size();
-        int i = planService.deletePlan(planIds);
-        return R.ok("选择删除" + total + "个,成功删除" + i + "个");
+            return R.fail("计划不存在");
+        return R.fail("失败");
     }
-
-    // 广告管理
     // 查询广告计划列表
     @GetMapping("/list")
     public R planList(PlanBo bo){
-        List<PlanListVo> vos = planService.getPlanList(bo);
-        return R.ok(vos);
+        PageInfo<List<PlanListVo>> planList = planService.getPlanList(bo);
+        return R.ok(planList);
     }
     // 查询广告计划明细
     @GetMapping("/{planId}")
@@ -68,10 +55,7 @@ public class PlanController {
     public R checkPlan(PlanBo bo){
         // 获取用户id和用户名
         String userId = "1";
-        String planId = bo.getPlanId();
-        Integer state = bo.getState();
-        String auditComment = bo.getAuditComment();
-        int i = planService.checkPlan(planId, state, auditComment,userId);
+        int i = planService.checkPlan(bo,userId);
         if (i == 1)
             return R.ok("审核操作成功");
         if (i == -1)
@@ -79,6 +63,7 @@ public class PlanController {
         return R.fail("审核操作失败");
     }
     // 下拉框——获取审核状态
+    // 已废弃
     @GetMapping("/getState")
     public R getState(){
         List<StateVo> vos = new ArrayList<>();
@@ -87,4 +72,60 @@ public class PlanController {
         vos.add(new StateVo(StateUtil.NOT_APPROVED,StateUtil.NOT_APPROVED_CHAR));
         return R.ok(vos);
     }
+    // 查询广告计划管理列表
+    @GetMapping("/audit/list")
+    public R auditList(PlanBo bo){
+        PageInfo<List<PlanManageListVo>> list = planService.getPlanManageList(bo);
+        return R.ok(list);
+    }
+    // 查询广告计划管理明细
+    @GetMapping("/audit/{planId}")
+    public R auditDetail(@PathVariable String planId){
+        return R.ok(planService.getPlanManageDetail(planId));
+    }
+
+    // 广告推送
+    // 添加广告推送计划
+    @PostMapping()
+    public R addPlan(@RequestBody PlanAddBo bo){
+        int i = planService.addPlan(bo);
+        if (i == 1)
+            return R.ok("广告添加成功");
+        if (i == -1)
+            return R.fail("无效的appkey");
+        if (i == -2)
+            return R.fail("无效商户");
+        if (i == -3)
+            return R.fail("校验sign出错");
+        return R.fail("广告添加失败");
+    }
+    // 删除广告推送计划
+    @DeleteMapping("/{planId")
+    public R deletePlan(@PathVariable String planId){
+        int i = planService.deletePlan(planId);
+        if (i == 1)
+            return R.ok("删除成功");
+        return R.fail("删除失败");
+    }
+    // 查询广告计划推送计划列表
+    @GetMapping("/push/list")
+    public R pushList(PlanBo bo){
+        PageInfo<List<PlanPushListVo>> list = planService.getPlanPushList(bo);
+        return R.ok(list);
+    }
+
+    // 广告投放
+    // 广告投放列表
+    @GetMapping("/statistics/list")
+    public R statisticsList(PlanBo bo){
+        PageInfo<List<PlanPushStatisticsListVo>> list = planService.getPlanPushStatisticsList(bo);
+        return R.ok(list);
+    }
+
+    // 首页
+    // 获取总广告数
+    @GetMapping("/total")
+    public R total(){
+        return R.ok(planService.getPlanTotal());
+    }
 }

+ 26 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/StatisticsController.java

@@ -0,0 +1,26 @@
+package com.ruoyi.demo.controller;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.demo.entity.bo.PlanBo;
+import com.ruoyi.demo.service.StatisticsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/statistics")
+public class StatisticsController {
+    @Autowired
+    StatisticsService statisticsService;
+
+    @GetMapping("/scanList")
+    public R scanList(PlanBo bo){
+        return R.ok(statisticsService.getScanList(bo));
+    }
+
+    @GetMapping("/total")
+    public R scanTotal(){
+        return R.ok(statisticsService.getScanTotal());
+    }
+}

+ 3 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Goods.java

@@ -35,4 +35,7 @@ public class Goods {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime createTime;
+
+    @TableField("deleted")
+    private String deleted;
 }

+ 3 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Order.java

@@ -47,6 +47,7 @@ public class Order {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime createTime;
-    @TableField("show_delete")
-    private Integer showDelete;
+
+    @TableField("deleted")
+    private String deleted;
 }

+ 22 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Plan.java

@@ -9,6 +9,8 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import com.ruoyi.demo.entity.bo.PlanAddBo;
+import com.ruoyi.demo.utils.StateUtil;
 import lombok.Data;
 
 import java.time.LocalDateTime;
@@ -69,6 +71,24 @@ public class Plan {
     @TableField("principal_telephone")
     private String principalTelephone;
 
-    @TableField("show_delete")
-    private Integer showDelete;
+    @TableField("deleted")
+    private String deleted;
+
+    public Plan(){}
+    public Plan(Commercial commercial, App app, PlanAddBo bo){
+        this.setCommercialId(commercial.getCommercialId());
+        this.setCommercialName(commercial.getCommercialName());
+        this.setAppkey(app.getAppkey());
+        this.setAppName(app.getAppName());
+        this.setGoodsId(bo.getGoodsId());
+        this.setGoodsImg(bo.getGoodsImg());
+        this.setGoodsName(bo.getGoodsName());
+        this.setGoodsLogo(bo.getGoodsLogo());
+        this.setGoodsIntroduce(bo.getGoodsIntroduce());
+        this.setGoodsClassify(bo.getGoodsClassify());
+        this.setPlanCreateTime(bo.getPlanCreateTime());
+        this.setPlanStartTime(bo.getPlanStartTime());
+        this.setPlanEndTime(bo.getPlanEndTime());
+        this.setState(StateUtil.NOT_AUDITED);
+    }
 }

+ 12 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/PlanAudit.java

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import com.ruoyi.demo.entity.bo.PlanBo;
 import lombok.Data;
 
 import java.time.LocalDateTime;
@@ -31,6 +32,15 @@ public class PlanAudit {
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime auditTime;
 
-    @TableField("show_delete")
-    private Integer showDelete;
+    @TableField("deleted")
+    private String deleted;
+
+    public PlanAudit (){}
+    public PlanAudit(PlanBo bo,String userId){
+        this.setPlanId(bo.getPlanId());
+        this.setUserId(userId);
+        this.setState(bo.getState());
+        this.setAuditComment(bo.getAuditComment());
+        this.setAuditTime(LocalDateTime.now());
+    }
 }

+ 15 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/PlanItem.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.demo.entity.bo.PlanItemAddBo;
 import lombok.Data;
 
 @Data
@@ -31,6 +32,18 @@ public class PlanItem {
     @TableField("sort")
     private String sort;
 
-    @TableField("show_delete")
-    private Integer showDelete;
+    @TableField("deleted")
+    private String deleted;
+
+    public PlanItem(){}
+    public PlanItem(String planId, PlanItemAddBo bo){
+        this.planId = planId;
+        this.storeId = bo.getStoreId();
+        this.equipmentId = bo.getEquipmentId();
+        this.equipmentName = bo.getEquipmentName();
+        this.addrInfo = bo.getAddrInfo();
+        this.addrCode = bo.getAddrCode();
+        this.addrCodeInfo = bo.getAddrCodeInfo();
+        this.qrCode = bo.getQrCode();
+    }
 }

+ 2 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Statistics.java

@@ -56,6 +56,6 @@ public class Statistics {
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime time;
 
-    @TableField("show_delete")
-    private Integer showDelete;
+    @TableField("deleted")
+    private String deleted;
 }

+ 1 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/PlanBo.java

@@ -30,4 +30,5 @@ public class PlanBo {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime endTime;
+    private String commercialId;
 }

+ 19 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanHomeVo.java

@@ -0,0 +1,19 @@
+package com.ruoyi.demo.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class PlanHomeVo {
+    private Integer total;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime time;
+}

+ 1 - 5
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanListVo.java

@@ -16,11 +16,9 @@ import java.time.LocalDateTime;
 public class PlanListVo {
     private String planId;
     private String planName;
+    private String goodsImg;
     private String principalName;
     private String principalTelephone;
-    private String goodsId;
-    private String goodsImg;
-    private String goodsName;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
@@ -32,9 +30,7 @@ public class PlanListVo {
         this.planId = plan.getPlanId();
         this.principalName = plan.getPrincipalName();
         this.principalTelephone = plan.getPrincipalTelephone();
-        this.goodsId = plan.getGoodsId();
         this.goodsImg = plan.getGoodsImg();
-        this.goodsName = plan.getGoodsName();
         this.planCreateTime = plan.getPlanCreateTime();
         this.onState = OnStateUtil.getOnStateChar(plan.getOnState());
     }

+ 6 - 12
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanManageListVo.java

@@ -14,18 +14,12 @@ import java.time.LocalDateTime;
 @Data
 public class PlanManageListVo {
     private String planId;
-    private String commercialId;
-    private String commercialName;
-    private String appkey;
     private String appName;
-    private String goodsId;
     private String goodsImg;
     private String goodsName;
     private Float goodsPrice;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonSerialize(using = LocalDateTimeSerializer.class)
-    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
-    private LocalDateTime planCreateTime;
+    private String commercialName;
+    private Integer equipmentCount;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
@@ -35,16 +29,16 @@ public class PlanManageListVo {
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime planEndTime;
     private String state;
-    private Integer equipmentCount;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planCreateTime;
 
     public PlanManageListVo(){}
     public PlanManageListVo(Plan plan){
         this.planId = plan.getPlanId();
-        this.commercialId = plan.getCommercialId();
         this.commercialName = plan.getCommercialName();
-        this.appkey = plan.getAppkey();
         this.appName = plan.getAppName();
-        this.goodsId = plan.getGoodsId();
         this.goodsImg = plan.getGoodsImg();
         this.goodsName = plan.getGoodsName();
         this.goodsPrice = plan.getGoodsPrice();

+ 27 - 21
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanPushListVo.java

@@ -5,37 +5,43 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
-import com.ruoyi.demo.entity.PlanPushStatistics;
+import com.ruoyi.demo.entity.Plan;
+import com.ruoyi.demo.utils.StateUtil;
 import lombok.Data;
 
 import java.time.LocalDateTime;
 
+// 广告推送计划列表
 @Data
 public class PlanPushListVo {
-    private String statisticsId;
-    private String equipmentId;
-    private String equipmentName;
-    private Integer carouselCount;
-    private Integer scanCodeCount;
-    private String ratio;
-    private Integer totalUserCount;
-    private Float totalPrice;
+    private String planId;
+    private String goodsImg;
+    private String principalName;
+    private String principalTelephone;
+    private String state;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
-    private LocalDateTime lasterTime;
+    private LocalDateTime planStartTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planEndTime;
+    private Integer equipmentCount;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planCreateTime;
 
     public PlanPushListVo(){}
-    public PlanPushListVo(PlanPushStatistics statistics){
-        this.statisticsId = statistics.getStatisticsId();
-        this.equipmentId = statistics.getEquipmentId();
-        this.equipmentName = statistics.getEquipmentName();
-        this.carouselCount = statistics.getCarouselCount();
-        this.scanCodeCount = statistics.getScanCodeCount();
-        float r = (float) statistics.getTradeCount()/statistics.getCarouselCount();
-        this.ratio = ((int)(r*100)+"%");
-        this.totalUserCount = statistics.getTotalUserCount();
-        this.totalPrice = statistics.getTotalPrice();
-        this.lasterTime = statistics.getLasterTime();
+    public PlanPushListVo(Plan plan){
+        this.planId = plan.getPlanId();
+        this.goodsImg = plan.getGoodsImg();
+        this.principalName = plan.getPrincipalName();
+        this.principalTelephone = plan.getPrincipalTelephone();
+        this.planCreateTime = plan.getPlanCreateTime();
+        this.planStartTime = plan.getPlanStartTime();
+        this.planEndTime = plan.getPlanEndTime();
+        this.state = StateUtil.getStateName(plan.getState());
     }
 }

+ 42 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanPushStatisticsListVo.java

@@ -0,0 +1,42 @@
+package com.ruoyi.demo.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import com.ruoyi.demo.entity.PlanPushStatistics;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+// 广告投放列表
+@Data
+public class PlanPushStatisticsListVo {
+    private String statisticsId;
+    private String equipmentId;
+    private String equipmentName;
+    private Integer carouselCount;
+    private Integer scanCodeCount;
+    private String ratio;
+    private Integer totalUserCount;
+    private Float totalPrice;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime lasterTime;
+
+    public PlanPushStatisticsListVo(){}
+    public PlanPushStatisticsListVo(PlanPushStatistics statistics){
+        this.statisticsId = statistics.getStatisticsId();
+        this.equipmentId = statistics.getEquipmentId();
+        this.equipmentName = statistics.getEquipmentName();
+        this.carouselCount = statistics.getCarouselCount();
+        this.scanCodeCount = statistics.getScanCodeCount();
+        float r = (float) statistics.getTradeCount()/statistics.getCarouselCount();
+        this.ratio = ((int)(r*100)+"%");
+        this.totalUserCount = statistics.getTotalUserCount();
+        this.totalPrice = statistics.getTotalPrice();
+        this.lasterTime = statistics.getLasterTime();
+    }
+}

+ 40 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/ScanListVo.java

@@ -0,0 +1,40 @@
+package com.ruoyi.demo.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import com.ruoyi.demo.entity.Statistics;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class ScanListVo {
+    private String planId;
+    private String planName;
+    private String equipmentId;
+    private String equipmentName;
+    private String addrInfo;
+    private String userId;
+    private String userName;
+    private String userTelephone;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime time;
+
+    public ScanListVo(){}
+    public ScanListVo(Statistics statistics){
+        this.planId = statistics.getPlanId();
+        this.planName = statistics.getPlanName();
+        this.equipmentId = statistics.getEquipmentId();
+        this.equipmentName = statistics.getEquipmentName();
+        this.addrInfo = statistics.getAddrInfo();
+        this.userId = statistics.getUserId();
+        this.userName = statistics.getUserName();
+        this.userTelephone = statistics.getUserTelephone();
+        this.time = statistics.getTime();
+    }
+}

+ 2 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/PlanItemMapper.java

@@ -3,7 +3,9 @@ package com.ruoyi.demo.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.demo.entity.PlanItem;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 @Mapper
 public interface PlanItemMapper extends BaseMapper<PlanItem> {
+    Integer selectEquipmentCountByPlanId(@Param("planId") String planId);
 }

+ 1 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/PlanMapper.java

@@ -6,4 +6,5 @@ import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
 public interface PlanMapper extends BaseMapper<Plan> {
+    Integer selectPlanTotal();
 }

+ 1 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/StatisticsMapper.java

@@ -6,4 +6,5 @@ import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
 public interface StatisticsMapper extends BaseMapper<Statistics> {
+    Integer selectTotal();
 }

+ 14 - 6
ruoyi-demo/src/main/java/com/ruoyi/demo/service/PlanService.java

@@ -1,18 +1,26 @@
 package com.ruoyi.demo.service;
 
+import com.github.pagehelper.PageInfo;
+import com.ruoyi.demo.entity.Plan;
 import com.ruoyi.demo.entity.bo.PlanAddBo;
 import com.ruoyi.demo.entity.bo.PlanBo;
-import com.ruoyi.demo.entity.vo.PlanDetailVo;
-import com.ruoyi.demo.entity.vo.PlanListVo;
-import com.ruoyi.demo.entity.vo.PlanPushVo;
+import com.ruoyi.demo.entity.vo.*;
 
 import java.util.List;
 
 public interface PlanService {
     int addPlan(PlanAddBo bo);
-    int deletePlan(List<String> ids);
-    int checkPlan(String planId,Integer state,String auditComment,String userId);
-    List<PlanListVo> getPlanList(PlanBo bo);
+    int deletePlan(String id);
+    int deletePlans(List<String> ids);
+    int checkPlan(PlanBo bo,String userId);
+    PageInfo<List<PlanListVo>> getPlanList(PlanBo bo);
     PlanDetailVo getPlanDetail(String planId);
     List<PlanPushVo> getPlanPush();
+
+    int planUpDown(String planId);
+    PageInfo<List<PlanManageListVo>> getPlanManageList(PlanBo bo);
+    PlanManageDetailVo getPlanManageDetail(String planId);
+    PageInfo<List<PlanPushListVo>> getPlanPushList(PlanBo bo);
+    PageInfo<List<PlanPushStatisticsListVo>> getPlanPushStatisticsList(PlanBo bo);
+    PlanHomeVo getPlanTotal();
 }

+ 13 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/StatisticsService.java

@@ -0,0 +1,13 @@
+package com.ruoyi.demo.service;
+
+import com.github.pagehelper.PageInfo;
+import com.ruoyi.demo.entity.bo.PlanBo;
+import com.ruoyi.demo.entity.vo.PlanHomeVo;
+import com.ruoyi.demo.entity.vo.ScanListVo;
+
+import java.util.List;
+
+public interface StatisticsService {
+    PageInfo<List<ScanListVo>> getScanList(PlanBo bo);
+    PlanHomeVo getScanTotal();
+}

+ 157 - 46
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/PlanServiceImpl.java

@@ -2,13 +2,13 @@ package com.ruoyi.demo.service.impl;
 
 import cn.hutool.core.lang.Dict;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import com.ruoyi.demo.entity.*;
 import com.ruoyi.demo.entity.bo.PlanAddBo;
 import com.ruoyi.demo.entity.bo.PlanBo;
-import com.ruoyi.demo.entity.vo.PlanDetailVo;
-import com.ruoyi.demo.entity.vo.PlanItemVo;
-import com.ruoyi.demo.entity.vo.PlanListVo;
-import com.ruoyi.demo.entity.vo.PlanPushVo;
+import com.ruoyi.demo.entity.bo.PlanItemAddBo;
+import com.ruoyi.demo.entity.vo.*;
 import com.ruoyi.demo.mapper.*;
 import com.ruoyi.demo.service.PlanService;
 import com.ruoyi.demo.utils.SignUtil;
@@ -37,12 +37,16 @@ public class PlanServiceImpl implements PlanService {
     CommercialMapper commercialMapper;
     @Autowired
     SystemSetterMapper systemSetterMapper;
+    @Autowired
+    StoreMapper storeMapper;
+    @Autowired
+    PlanPushStatisticsMapper planPushStatisticsMapper;
 
     @Override
     public int addPlan(PlanAddBo bo) {
         QueryWrapper<App> appQueryWrapper = new QueryWrapper<>();
         appQueryWrapper.eq("appkey",bo.getAppkey());
-        appQueryWrapper.eq("show_delete",0);
+        appQueryWrapper.eq("deleted","0");
         App app = appMapper.selectOne(appQueryWrapper);
         if (app == null)
             return -1;
@@ -69,32 +73,25 @@ public class PlanServiceImpl implements PlanService {
         if (!SignUtil.verify(params,app.getAppSecret()))
             return -3;
         // 插入广告计划
-        Plan plan = new Plan();
-        plan.setCommercialId(commercial.getCommercialId());
-        plan.setCommercialName(commercial.getCommercialName());
-        plan.setAppkey(app.getAppkey());
-        plan.setAppName(app.getAppName());
-        plan.setGoodsId(bo.getGoodsId());
-        plan.setGoodsImg(bo.getGoodsImg());
-        plan.setGoodsName(bo.getGoodsName());
-        plan.setGoodsLogo(bo.getGoodsLogo());
-        plan.setGoodsIntroduce(bo.getGoodsIntroduce());
-        plan.setGoodsClassify(bo.getGoodsClassify());
-        plan.setPlanCreateTime(bo.getPlanCreateTime());
-        plan.setPlanStartTime(bo.getPlanStartTime());
-        plan.setPlanEndTime(bo.getPlanEndTime());
-        plan.setState(StateUtil.NOT_AUDITED);
+        Plan plan = new Plan(commercial,app,bo);
         planMapper.insert(plan);
         // 插入广告计划明细
-        for (PlanItem item : bo.getItems()) {
-            item.setPlanId(plan.getPlanId());
+        for (PlanItemAddBo itemAddBo : bo.getItems()) {
+            PlanItem item = new PlanItem(plan.getPlanId(), itemAddBo);
             planItemMapper.insert(item);
         }
         return 1;
     }
 
     @Override
-    public int deletePlan(List<String> ids) {
+    public int deletePlan(String id) {
+        QueryWrapper<Plan> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("plan_id",id);
+        return planMapper.delete(queryWrapper);
+    }
+
+    @Override
+    public int deletePlans(List<String> ids) {
         int i = 0;
         for (String id : ids){
             QueryWrapper<Plan> queryWrapper = new QueryWrapper<>();
@@ -105,55 +102,45 @@ public class PlanServiceImpl implements PlanService {
     }
 
     @Override
-    public int checkPlan(String planId, Integer state, String auditComment,String userId) {
+    public int checkPlan(PlanBo bo,String userId) {
         QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
-        planQueryWrapper.eq("plan_id",planId);
-        planQueryWrapper.eq("show_delete",0);
+        planQueryWrapper.eq("plan_id",bo.getPlanId());
+        planQueryWrapper.eq("deleted","0");
         Plan plan = planMapper.selectOne(planQueryWrapper);
         if (plan == null)
             return -1;
-        plan.setState(state);
+        plan.setState(bo.getState());
         int i = planMapper.updateById(plan);
         if (i == 0)
             return 0;
-        PlanAudit audit = new PlanAudit();
-        audit.setPlanId(planId);
-        audit.setUserId(userId);
-        audit.setState(state);
-        audit.setAuditComment(auditComment);
-        audit.setAuditTime(LocalDateTime.now());
+        PlanAudit audit = new PlanAudit(bo,userId);
         planAuditMapper.insert(audit);
         return 1;
     }
 
     @Override
-    public List<PlanListVo> getPlanList(PlanBo bo) {
+    public PageInfo<List<PlanListVo>> getPlanList(PlanBo bo) {
+        PageHelper.startPage(bo.getPageNum(), bo.getPageSize(),true);
         QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
-        if (bo.getState() != null)
-            planQueryWrapper.eq("state",bo.getState());
-        if (bo.getAppkey() != null)
-            planQueryWrapper.like("appkey",bo.getAppkey());
-        if (bo.getAppName() != null)
-            planQueryWrapper.like("app_name",bo.getAppName());
-        if (bo.getGoods() != null){
-            planQueryWrapper.like("goods_name",bo.getGoods())
+        if (bo.getText() != null){
+            planQueryWrapper.like("plan_id",bo.getText())
                 .or()
-                .like("goods_introduce",bo.getGoods());
+                .like("goods_name",bo.getText());
         }
-        planQueryWrapper.eq("show_delete",0);
+        planQueryWrapper.eq("deleted","0");
         List<Plan> plans = planMapper.selectList(planQueryWrapper);
         List<PlanListVo> vos = new ArrayList<>();
         for (Plan plan : plans){
             vos.add(new PlanListVo(plan));
         }
-        return vos;
+        return new PageInfo(vos);
     }
 
     @Override
     public PlanDetailVo getPlanDetail(String planId) {
         QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
         planQueryWrapper.eq("plan_id",planId);
-        planQueryWrapper.eq("show_delete",0);
+        planQueryWrapper.eq("deleted","0");
         Plan plan = planMapper.selectOne(planQueryWrapper);
         if (plan == null)
             return null;
@@ -180,6 +167,7 @@ public class PlanServiceImpl implements PlanService {
         planQueryWrapper.apply("DATE_FORMAT(plan_start_time,'%Y-%m-%d %H:%i:%s') <= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now());
         planQueryWrapper.apply("DATE_FORMAT(plan_end_time,'%Y-%m-%d %H:%i:%s') > DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now());
         planQueryWrapper.eq("state",1);
+        planQueryWrapper.eq("deleted","0");
         List<PlanPushVo> pushVos = new ArrayList<>();
         for (Plan plan : planMapper.selectList(planQueryWrapper)) {
             QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
@@ -190,4 +178,127 @@ public class PlanServiceImpl implements PlanService {
         }
         return pushVos;
     }
+
+    @Override
+    public int planUpDown(String planId) {
+        QueryWrapper<Plan> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("plan_id",planId);
+        queryWrapper.eq("deleted","0");
+        Plan plan = planMapper.selectOne(queryWrapper);
+        if (plan == null)
+            return -1;
+        plan.setOnState(plan.getOnState()+1);
+        if (plan.getOnState() >= 2)
+            plan.setOnState(0);
+        return planMapper.updateById(plan);
+    }
+
+    @Override
+    public PageInfo<List<PlanManageListVo>> getPlanManageList(PlanBo bo) {
+        PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
+        QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
+        planQueryWrapper.eq("state",bo.getState());
+        if (bo.getText() != null)
+            planQueryWrapper.like("plan_id",bo.getText())
+                .or()
+                .like("principal_name",bo.getText())
+                .or()
+                .like("principal_telephone",bo.getText());
+        if (bo.getStartTime() != null)
+            planQueryWrapper.apply("DATE_FORMAT(plan_start_time,'%Y-%m-%d %H:%i:%s') <= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",bo.getStartTime());
+        if (bo.getEndTime() != null)
+            planQueryWrapper.apply("DATE_FORMAT(plan_end_time,'%Y-%m-%d %H:%i:%s') > DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",bo.getEndTime());
+        planQueryWrapper.eq("deleted","0");
+        List<Plan> plans = planMapper.selectList(planQueryWrapper);
+        List<PlanManageListVo> vos = new ArrayList<>();
+        for (Plan plan : plans){
+            PlanManageListVo vo = new PlanManageListVo(plan);
+            Integer count = planItemMapper.selectEquipmentCountByPlanId(plan.getPlanId());
+            vo.setEquipmentCount(count);
+            vos.add(vo);
+        }
+        return new PageInfo(vos);
+    }
+
+    @Override
+    public PlanManageDetailVo getPlanManageDetail(String planId) {
+        QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
+        planQueryWrapper.eq("plan_id",planId);
+        planQueryWrapper.eq("deleted","0");
+        Plan plan = planMapper.selectOne(planQueryWrapper);
+        if (plan == null)
+            return null;
+        QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
+        itemQueryWrapper.eq("plan_id",planId);
+        itemQueryWrapper.eq("deleted","0");
+        List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
+        List<PlanManageItemVo> itemVos = new ArrayList<>();
+        for (PlanItem item : items){
+            PlanManageItemVo itemVo = new PlanManageItemVo(item);
+            Store store = storeMapper.selectById(item.getStoreId());
+            itemVo.setStoreName(store.getStoreName());
+            itemVos.add(itemVo);
+        }
+        PlanManageDetailVo vo = new PlanManageDetailVo(plan, itemVos);
+        return vo;
+    }
+
+    @Override
+    public PageInfo<List<PlanPushListVo>> getPlanPushList(PlanBo bo) {
+        PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
+        QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
+        planQueryWrapper.eq("appkey",bo.getAppkey());
+        planQueryWrapper.eq("commercialId",bo.getCommercialId());
+        if (bo.getText() != null)
+            planQueryWrapper.like("plan_id",bo.getText())
+                .or()
+                .like("plan_name",bo.getText())
+                .or()
+                .like("principal_name",bo.getText())
+                .or()
+                .like("principal_telephone",bo.getText());
+        if (bo.getStartTime() != null)
+            planQueryWrapper.apply("DATE_FORMAT(plan_start_time,'%Y-%m-%d %H:%i:%s') <= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",bo.getStartTime());
+        if (bo.getEndTime() != null)
+            planQueryWrapper.apply("DATE_FORMAT(plan_end_time,'%Y-%m-%d %H:%i:%s') > DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",bo.getEndTime());
+        planQueryWrapper.eq("deleted","0");
+        List<Plan> plans = planMapper.selectList(planQueryWrapper);
+        List<PlanPushListVo> vos = new ArrayList<>();
+        for (Plan plan : plans){
+            PlanPushListVo vo = new PlanPushListVo(plan);
+            Integer count = planItemMapper.selectEquipmentCountByPlanId(plan.getPlanId());
+            vo.setEquipmentCount(count);
+            vos.add(vo);
+        }
+        return new PageInfo(vos);
+    }
+
+    @Override
+    public PageInfo<List<PlanPushStatisticsListVo>> getPlanPushStatisticsList(PlanBo bo) {
+        PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
+        QueryWrapper<PlanPushStatistics> statisticsQueryWrapper = new QueryWrapper<>();
+        if (bo.getText() != null)
+            statisticsQueryWrapper.like("plan_id",bo.getText())
+                .or()
+                .like("equipment_id",bo.getText())
+                .or()
+                .like("equipment_name",bo.getText());
+        if (bo.getStartTime() != null)
+            statisticsQueryWrapper.apply("DATE_FORMAT(plan_start_time,'%Y-%m-%d %H:%i:%s') <= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",bo.getStartTime());
+        if (bo.getEndTime() != null)
+            statisticsQueryWrapper.apply("DATE_FORMAT(plan_end_time,'%Y-%m-%d %H:%i:%s') > DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",bo.getEndTime());
+        List<PlanPushStatistics> list = planPushStatisticsMapper.selectList(statisticsQueryWrapper);
+        List<PlanPushStatisticsListVo> vos = new ArrayList<>();
+        for (PlanPushStatistics statistics : list){
+            vos.add(new PlanPushStatisticsListVo(statistics));
+        }
+        return new PageInfo(vos);
+    }
+
+    @Override
+    public PlanHomeVo getPlanTotal() {
+        PlanHomeVo vo = new PlanHomeVo();
+        vo.setTotal(planMapper.selectPlanTotal());
+        return vo;
+    }
 }

+ 49 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/StatisticsServiceImpl.java

@@ -0,0 +1,49 @@
+package com.ruoyi.demo.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ruoyi.demo.entity.Statistics;
+import com.ruoyi.demo.entity.bo.PlanBo;
+import com.ruoyi.demo.entity.vo.PlanHomeVo;
+import com.ruoyi.demo.entity.vo.ScanListVo;
+import com.ruoyi.demo.mapper.StatisticsMapper;
+import com.ruoyi.demo.service.StatisticsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@Transactional
+public class StatisticsServiceImpl implements StatisticsService {
+    @Autowired
+    StatisticsMapper statisticsMapper;
+
+    @Override
+    public PageInfo<List<ScanListVo>> getScanList(PlanBo bo) {
+        PageHelper.startPage(bo.getPageNum(),bo.getPageSize(),true);
+        QueryWrapper<Statistics> queryWrapper = new QueryWrapper<>();
+        if (bo.getStartTime() != null)
+            queryWrapper.apply("DATE_FORMAT(plan_start_time,'%Y-%m-%d %H:%i:%s') <= DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",bo.getStartTime());
+        if (bo.getEndTime() != null)
+            queryWrapper.apply("DATE_FORMAT(plan_end_time,'%Y-%m-%d %H:%i:%s') > DATE_FORMAT({0},'%Y-%m-%d %H:%i:%s')",bo.getEndTime());
+        List<Statistics> list = statisticsMapper.selectList(queryWrapper);
+        List<ScanListVo> vos = new ArrayList<>();
+        for (Statistics statistics : list){
+            vos.add(new ScanListVo(statistics));
+        }
+        return new PageInfo(vos);
+    }
+
+    @Override
+    public PlanHomeVo getScanTotal() {
+        PlanHomeVo vo = new PlanHomeVo();
+        vo.setTotal(statisticsMapper.selectTotal());
+        vo.setTime(LocalDateTime.now());
+        return vo;
+    }
+}

+ 16 - 0
ruoyi-demo/src/main/resources/mapper/demo/PlanItemMapper.xml

@@ -0,0 +1,16 @@
+<?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.demo.mapper.PlanItemMapper">
+    <select id="selectEquipmentCountByPlanId" resultType="java.lang.Integer">
+        SELECT
+            COUNT(*)
+        FROM
+            `dl_plan_item`
+        WHERE
+            plan_id = #{planId}
+        GROUP BY
+            plan_id;
+    </select>
+</mapper>

+ 14 - 0
ruoyi-demo/src/main/resources/mapper/demo/PlanMapper.xml

@@ -0,0 +1,14 @@
+<?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.demo.mapper.PlanMapper">
+
+
+    <select id="selectPlanTotal" resultType="java.lang.Integer">
+        SELECT
+            COUNT(*)
+        FROM
+            `dl_plan`;
+    </select>
+</mapper>

+ 13 - 0
ruoyi-demo/src/main/resources/mapper/demo/StatisticsMapper.xml

@@ -0,0 +1,13 @@
+<?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.demo.mapper.StatisticsMapper">
+    <select id="selectTotal" resultType="java.lang.Integer">
+        SELECT
+            COUNT(*)
+        FROM
+            `dl_statistics`
+        WHERE behavior = 0;
+    </select>
+</mapper>