Преглед изворни кода

实体类+添加广告计划

云殇忆 пре 1 година
родитељ
комит
356d7bd698

+ 59 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/PlanController.java

@@ -0,0 +1,59 @@
+package com.ruoyi.demo.controller;
+
+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.service.PlanService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("plan")
+public class PlanController {
+    @Autowired
+    PlanService planService;
+
+    @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()
+    public R deletePlan(PlanBo bo){
+        List<String> planIds = bo.getPlanIds();
+        return null;
+    }
+
+    @PutMapping()
+    public R checkPlan(PlanBo bo){
+        String planId = bo.getPlanId();
+        Integer state = bo.getState();
+        return null;
+    }
+
+    @GetMapping("/list")
+    public R planList(PlanBo bo){
+        return null;
+    }
+
+    @GetMapping("/{planId}")
+    public R planDetail(@PathVariable String planId){
+        return null;
+    }
+
+    @GetMapping("/push")
+    public R planPush(){
+        return null;
+    }
+}

+ 29 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Exposure.java

@@ -0,0 +1,29 @@
+package com.ruoyi.demo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+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
+@TableName("dl_exposure")
+public class Exposure {
+    @TableField("item_id")
+    private String itemId;
+    @TableField("exposure_count")
+    public Integer exposureCount;
+    @TableField("exposure_time")
+    public Integer exposureTime;
+    @TableField("create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime createTime;
+}

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

@@ -0,0 +1,26 @@
+package com.ruoyi.demo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("dl_goods")
+public class Goods {
+    @TableField("appkey")
+    private String appkey;
+    @TableField("goods_id")
+    private String goodsId;
+    @TableField("goods_img")
+    private String goodsImg;
+    @TableField("goods_name")
+    private String goodsName;
+    @TableField("goods_logo")
+    private String goodsLogo;
+    @TableField("goods_introduce")
+    private String goodsIntroduce;
+    @TableField("goods_price")
+    private Float goodsPrice;
+    @TableField("goods_classify")
+    private String goodsClassify;
+}

+ 63 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Plan.java

@@ -0,0 +1,63 @@
+package com.ruoyi.demo.entity;
+
+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.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
+@TableName("dl_plan")
+public class Plan {
+    @TableId(value = "plan_id",type = IdType.ASSIGN_ID)
+    private String planId;
+    @TableField("commercial_id")
+    private String commercialId;
+    @TableField("commercial_name")
+    private String commercialName;
+    @TableField("appkey")
+    private String appkey;
+    @TableField("app_name")
+    private String appName;
+    @TableField("goods_id")
+    private String goodsId;
+    @TableField("goods_img")
+    private String goodsImg;
+    @TableField("goods_name")
+    private String goodsName;
+    @TableField("goods_logo")
+    private String goodsLogo;
+    @TableField("goods_introduce")
+    private String goodsIntroduce;
+    @TableField("goods_price")
+    private Float goodsPrice;
+    @TableField("goods_classify")
+    private String goodsClassify;
+    @TableField("plan_create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planCreateTime;
+    @TableField("plan_start_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planStartTime;
+    @TableField("plan_end_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planEndTime;
+    @TableField("state")
+    private Integer state;
+
+    @TableField("show_delete")
+    private Integer showDelete;
+}

+ 30 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/PlanItem.java

@@ -0,0 +1,30 @@
+package com.ruoyi.demo.entity;
+
+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 lombok.Data;
+
+@Data
+@TableName("dl_plan_item")
+public class PlanItem {
+    @TableId(value = "item_id",type = IdType.ASSIGN_ID)
+    private String itemId;
+    @TableField("plan_id")
+    private String planId;
+    @TableField("store_id")
+    private String storeId;
+    @TableField("equipment_id")
+    private String equipmentId;
+    @TableField("equipment_name")
+    private String equipmentName;
+    @TableField("addr_info")
+    private String addrInfo;
+    @TableField("addr_code")
+    private String addrCode;
+    @TableField("addr_code_info")
+    private String addrCodeInfo;
+    @TableField("qr_code")
+    private String qrCode;
+}

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

@@ -0,0 +1,48 @@
+package com.ruoyi.demo.entity;
+
+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.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
+@TableName("dl_statistics")
+public class Statistics {
+    @TableId(value = "statistics_id",type = IdType.ASSIGN_ID)
+    private String statisticsId;
+    @TableField("appkey")
+    private String appkey;
+    @TableField("equipment_id")
+    private String equipmentId;
+    @TableField("equipment_name")
+    private String equipmentName;
+    @TableField("goods_id")
+    private String goodsId;
+    @TableField("goods_name")
+    private String goodsName;
+    @TableField("deal_tool_count")
+    private Integer dealToolCount;
+    @TableField("deal_tool_price")
+    private Float dealToolPrice;
+    @TableField("user_id")
+    private String userId;
+    @TableField("user_name")
+    private String userName;
+    @TableField("user_telephone")
+    private String userTelephone;
+    @TableField("behavior")
+    private Integer behavior;
+    @TableField("time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime time;
+}

+ 16 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/SystemSetter.java

@@ -0,0 +1,16 @@
+package com.ruoyi.demo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("dl_system_setter")
+public class SystemSetter {
+    @TableField("interval_carousel")
+    private Integer intervalCarousel;
+    @TableField("interval_request")
+    private Integer intervalRequest;
+    @TableField("interval_submit")
+    private Integer intervalSubmit;
+}

+ 39 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/PlanAddBo.java

@@ -0,0 +1,39 @@
+package com.ruoyi.demo.entity.bo;
+
+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.PlanItem;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class PlanAddBo {
+    private String appkey;
+    private String commercialId;
+    private String goodsId;
+    private String goodsImg;
+    private String goodsName;
+    private String goodsLogo;
+    private String goodsIntroduce;
+    private Float goodsPrice;
+    private String goodsClassify;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planCreateTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planStartTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planEndTime;
+    private List<PlanItem> items;
+    private String sign;
+}

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

@@ -0,0 +1,15 @@
+package com.ruoyi.demo.entity.bo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PlanBo {
+    private Integer state;
+    private String appkey;
+    private String appName;
+    private String goods;
+    private String planId;
+    private List<String> planIds;
+}

+ 25 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanDetailVo.java

@@ -0,0 +1,25 @@
+package com.ruoyi.demo.entity.vo;
+
+import com.ruoyi.demo.entity.Plan;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PlanDetailVo {
+    private String goodsName;
+    private String goodsImg;
+    private String goodsLogo;
+    private String goodsIntroduce;
+    private String goodsClassify;
+    private List<PlanItemVo> planItems;
+
+    public PlanDetailVo(Plan plan, List<PlanItemVo> itemVos){
+        this.goodsName = plan.getGoodsName();
+        this.goodsImg = plan.getGoodsImg();
+        this.goodsLogo = plan.getGoodsLogo();
+        this.goodsIntroduce = plan.getGoodsIntroduce();
+        this.goodsClassify = plan.getGoodsClassify();
+        this.planItems = itemVos;
+    }
+}

+ 23 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanItemVo.java

@@ -0,0 +1,23 @@
+package com.ruoyi.demo.entity.vo;
+
+import com.ruoyi.demo.entity.PlanItem;
+import lombok.Data;
+
+@Data
+public class PlanItemVo {
+    private String equipmentId;
+    private String equipmentName;
+    private String addrInfo;
+    private String addrCode;
+    private String addrCodeInfo;
+    private String qrCode;
+
+    public PlanItemVo(PlanItem item){
+        this.equipmentId = item.getEquipmentId();
+        this.equipmentName = item.getEquipmentName();
+        this.addrInfo = item.getAddrInfo();
+        this.addrCode = item.getAddrCode();
+        this.addrCodeInfo = item.getAddrCodeInfo();
+        this.qrCode = item.getQrCode();
+    }
+}

+ 58 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanListVo.java

@@ -0,0 +1,58 @@
+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.Plan;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class PlanListVo {
+    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;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planStartTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime planEndTime;
+    private String state;
+
+    public PlanListVo(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();
+        this.planCreateTime = plan.getPlanCreateTime();
+        this.planStartTime = plan.getPlanStartTime();
+        this.planEndTime = plan.getPlanEndTime();
+        if (plan.getState() == 0)
+            this.state = "未审核";
+        else if (plan.getState() == 1)
+            this.state = "审核通过";
+        else
+            this.state = "审核未通过";
+    }
+}

+ 37 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanPushVo.java

@@ -0,0 +1,37 @@
+package com.ruoyi.demo.entity.vo;
+
+import com.ruoyi.demo.entity.Plan;
+import com.ruoyi.demo.entity.PlanItem;
+import com.ruoyi.demo.entity.SystemSetter;
+import lombok.Data;
+
+@Data
+public class PlanPushVo {
+    private String equipmentId;
+    private String equipmentName;
+    private String qrCode;
+    private String goodsId;
+    private String goodsName;
+    private String goodsLogo;
+    private String goodsIntroduce;
+    private Float goodsPrice;
+    private String goodsClassify;
+    private Integer intervalCarousel;
+    private Integer intervalRequest;
+    private Integer intervalSubmit;
+
+    public PlanPushVo(PlanItem item, Plan plan, SystemSetter setter){
+        this.equipmentId = item.getEquipmentId();
+        this.equipmentName = item.getEquipmentName();
+        this.qrCode = item.getQrCode();
+        this.goodsId = plan.getGoodsId();
+        this.goodsName = plan.getGoodsName();
+        this.goodsLogo = plan.getGoodsLogo();
+        this.goodsPrice = plan.getGoodsPrice();
+        this.goodsIntroduce = plan.getGoodsIntroduce();
+        this.goodsClassify = plan.getGoodsClassify();
+        this.intervalCarousel = setter.getIntervalCarousel();
+        this.intervalRequest = setter.getIntervalRequest();
+        this.intervalSubmit = setter.getIntervalSubmit();
+    }
+}

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

@@ -0,0 +1,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;
+
+@Mapper
+public interface PlanItemMapper extends BaseMapper<PlanItem> {
+}

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

@@ -0,0 +1,9 @@
+package com.ruoyi.demo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.demo.entity.Plan;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PlanMapper extends BaseMapper<Plan> {
+}

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

@@ -0,0 +1,18 @@
+package com.ruoyi.demo.service;
+
+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 java.util.List;
+
+public interface PlanService {
+    int addPlan(PlanAddBo bo);
+    int deletePlan(List<String> ids);
+    int checkPlan(String planId,Integer state);
+    List<PlanListVo> getPlanList(PlanBo bo);
+    PlanDetailVo getPlanDetail(String planId);
+    PlanPushVo getPlanPush();
+}

+ 114 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/PlanServiceImpl.java

@@ -0,0 +1,114 @@
+package com.ruoyi.demo.service.impl;
+
+import cn.hutool.core.lang.Dict;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.PlanListVo;
+import com.ruoyi.demo.entity.vo.PlanPushVo;
+import com.ruoyi.demo.mapper.AppMapper;
+import com.ruoyi.demo.mapper.CommercialMapper;
+import com.ruoyi.demo.mapper.PlanItemMapper;
+import com.ruoyi.demo.mapper.PlanMapper;
+import com.ruoyi.demo.service.PlanService;
+import com.ruoyi.demo.utils.SignUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class PlanServiceImpl implements PlanService {
+    @Autowired
+    PlanMapper planMapper;
+    @Autowired
+    PlanItemMapper planItemMapper;
+    @Autowired
+    AppMapper appMapper;
+    @Autowired
+    CommercialMapper commercialMapper;
+
+    @Override
+    public int addPlan(PlanAddBo bo) {
+        QueryWrapper<App> appQueryWrapper = new QueryWrapper<>();
+        appQueryWrapper.eq("appkey",bo.getAppkey());
+        App app = appMapper.selectOne(appQueryWrapper);
+        if (app == null)
+            return -1;
+        QueryWrapper<Commercial> commercialQueryWrapper = new QueryWrapper<>();
+        commercialQueryWrapper.eq("commercial_id",bo.getCommercialId());
+        Commercial commercial = commercialMapper.selectOne(commercialQueryWrapper);
+        if (commercial == null)
+            return -2;
+        Map<String,Object> params = Dict.create()
+            .set("appkey",bo.getAppkey())
+            .set("commercialId",bo.getCommercialId())
+            .set("goodsId",bo.getGoodsId())
+            .set("goodsImg",bo.getGoodsImg())
+            .set("goodsName",bo.getGoodsName())
+            .set("goodsLogo",bo.getGoodsLogo())
+            .set("goodsIntroduce",bo.getGoodsIntroduce())
+            .set("goodsPrice",bo.getGoodsPrice())
+            .set("goodsClassify",bo.getGoodsClassify())
+            .set("planCreateTime",bo.getPlanCreateTime())
+            .set("planStartTime",bo.getPlanStartTime())
+            .set("planEndTime",bo.getPlanEndTime())
+            .set("items",bo.getItems())
+            .set("sign",bo.getSign());
+        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(0);
+        planMapper.insert(plan);
+        // 插入广告计划明细
+        for (PlanItem item : bo.getItems()) {
+            item.setPlanId(plan.getPlanId());
+            planItemMapper.insert(item);
+        }
+        return 1;
+    }
+
+    @Override
+    public int deletePlan(List<String> ids) {
+        return 0;
+    }
+
+    @Override
+    public int checkPlan(String planId, Integer state) {
+        return 0;
+    }
+
+    @Override
+    public List<PlanListVo> getPlanList(PlanBo bo) {
+        return null;
+    }
+
+    @Override
+    public PlanDetailVo getPlanDetail(String planId) {
+        return null;
+    }
+
+    @Override
+    public PlanPushVo getPlanPush() {
+        return null;
+    }
+}

+ 37 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/utils/SignUtil.java

@@ -0,0 +1,37 @@
+package com.ruoyi.demo.utils;
+
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.crypto.SecureUtil;
+
+import java.util.Map;
+
+public class SignUtil {
+
+    public static String sign(Map<String, Object> params, String xmlData, String appSecret) {
+        params.remove("sign");
+        String data = MapUtil.sortJoin(params, "", "", true, xmlData);
+        data = appSecret + data + appSecret;
+        String md5 = SecureUtil.md5(data);
+        return md5.toUpperCase();
+    }
+
+    public static boolean verify(Map<String, Object> params, String xmlData, String appSecret) {
+        String signed = (String) params.remove("sign");
+        String sign = sign(params, xmlData, appSecret);
+        return sign.equals(signed);
+    }
+
+    public static String sign(Map<String, Object> params, String appSecret) {
+        params.remove("sign");
+        String data = MapUtil.sortJoin(params, "", "", true);
+        data = appSecret + data + appSecret;
+        String md5 = SecureUtil.md5(data);
+        return md5.toUpperCase();
+    }
+
+    public static boolean verify(Map<String, Object> params, String appSecret) {
+        String signed = (String) params.remove("sign");
+        String sign = sign(params, appSecret);
+        return sign.equals(signed);
+    }
+}