Selaa lähdekoodia

Merge branch 'lcy' of http://47.107.53.207:3000/traineeCoder001/Digital-Investment

JensionDzero 1 vuosi sitten
vanhempi
säilyke
3ac58d9bdb
33 muutettua tiedostoa jossa 1058 lisäystä ja 0 poistoa
  1. 43 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/GoodsController.java
  2. 85 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/controller/PlanController.java
  3. 29 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Exposure.java
  4. 38 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Goods.java
  5. 63 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Plan.java
  6. 33 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/PlanAudit.java
  7. 30 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/PlanItem.java
  8. 48 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/Statistics.java
  9. 16 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/SystemSetter.java
  10. 11 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/GoodsBo.java
  11. 10 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/GoodsDeleteBo.java
  12. 39 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/PlanAddBo.java
  13. 16 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/PlanBo.java
  14. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/GoodsDetailVo.java
  15. 24 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/GoodsListVo.java
  16. 26 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanDetailVo.java
  17. 24 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanItemVo.java
  18. 55 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanListVo.java
  19. 38 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanPushVo.java
  20. 14 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/StateVo.java
  21. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/ExposureMapper.java
  22. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/GoodsMapper.java
  23. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/PlanAuditMapper.java
  24. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/PlanItemMapper.java
  25. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/PlanMapper.java
  26. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/StatisticsMapper.java
  27. 9 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/SystemSetterMapper.java
  28. 16 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/GoodsService.java
  29. 18 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/PlanService.java
  30. 57 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/GoodsServiceImpl.java
  31. 193 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/PlanServiceImpl.java
  32. 37 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/utils/SignUtil.java
  33. 23 0
      ruoyi-demo/src/main/java/com/ruoyi/demo/utils/StateUtil.java

+ 43 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/GoodsController.java

@@ -0,0 +1,43 @@
+package com.ruoyi.demo.controller;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.demo.entity.Goods;
+import com.ruoyi.demo.entity.bo.GoodsBo;
+import com.ruoyi.demo.entity.bo.GoodsDeleteBo;
+import com.ruoyi.demo.service.GoodsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/goods")
+public class GoodsController {
+    @Autowired
+    GoodsService goodsService;
+
+    @PostMapping()
+    public R addGoods(@RequestBody Goods goods){
+        int i = goodsService.addGoods(goods);
+        if (i == 2)
+            return R.ok("已存在该商品");
+        if (i == 1)
+            return R.ok("添加成功");
+        return R.fail("添加失败");
+    }
+
+    @DeleteMapping()
+    public R deleteGoods(GoodsDeleteBo bo){
+        int total = bo.getDeleteItems().size();
+        int i = goodsService.deleteGoods(bo);
+        return R.ok("选择删除" + total + "个,成功删除" + i + "个");
+    }
+
+    @GetMapping("/list")
+    public R goodsList(GoodsBo bo){
+        return R.ok(goodsService.getGoodsList(bo));
+    }
+
+    @GetMapping("/detail")
+    public R goodsDetail(GoodsBo bo){
+        return R.ok(goodsService.getGoodsDetail(bo));
+    }
+}

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

@@ -0,0 +1,85 @@
+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.entity.vo.PlanDetailVo;
+import com.ruoyi.demo.entity.vo.PlanListVo;
+import com.ruoyi.demo.entity.vo.StateVo;
+import com.ruoyi.demo.service.PlanService;
+import com.ruoyi.demo.utils.StateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+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();
+        int total = planIds.size();
+        int i = planService.deletePlan(planIds);
+        return R.ok("选择删除" + total + "个,成功删除" + i + "个");
+    }
+
+    @PutMapping()
+    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);
+        if (i == 1)
+            return R.ok("审核操作成功");
+        if (i == -1)
+            return R.fail("该计划不存在");
+        return R.fail("审核操作失败");
+    }
+
+    @GetMapping("/list")
+    public R planList(PlanBo bo){
+        List<PlanListVo> vos = planService.getPlanList(bo);
+        return R.ok(vos);
+    }
+
+    @GetMapping("/{planId}")
+    public R planDetail(@PathVariable String planId){
+        PlanDetailVo vo = planService.getPlanDetail(planId);
+        return R.ok(vo);
+    }
+
+    @GetMapping("/push")
+    public R planPush(){
+        return R.ok(planService.getPlanPush());
+    }
+
+    @GetMapping("/getState")
+    public R getState(){
+        List<StateVo> vos = new ArrayList<>();
+        vos.add(new StateVo(StateUtil.NOT_AUDITED,StateUtil.NOT_AUDITED_CHAR));
+        vos.add(new StateVo(StateUtil.APPROVED,StateUtil.APPROVED_CHAR));
+        vos.add(new StateVo(StateUtil.NOT_APPROVED,StateUtil.NOT_APPROVED_CHAR));
+        return R.ok(vos);
+    }
+}

+ 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;
+}

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

@@ -0,0 +1,38 @@
+package com.ruoyi.demo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+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_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;
+    @TableField("create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime createTime;
+}

+ 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;
+}

+ 33 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/PlanAudit.java

@@ -0,0 +1,33 @@
+package com.ruoyi.demo.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+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_audit")
+public class PlanAudit {
+    @TableId(value = "audit_id",type = IdType.ASSIGN_ID)
+    private String auditId;
+    @TableField("plan_id")
+    private String planId;
+    @TableField("user_id")
+    private String userId;
+    @TableField(value = "user_name",fill = FieldFill.INSERT)
+    private String userName;
+    @TableField("state")
+    private Integer state;
+    @TableField("audit_comment")
+    private String auditComment;
+    @TableField("audit_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime auditTime;
+}

+ 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;
+}

+ 11 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/GoodsBo.java

@@ -0,0 +1,11 @@
+package com.ruoyi.demo.entity.bo;
+
+import lombok.Data;
+
+@Data
+public class GoodsBo {
+    private String appkey;
+    private String goodsId;
+    private String goodsName;
+    private String goodsClassify;
+}

+ 10 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/bo/GoodsDeleteBo.java

@@ -0,0 +1,10 @@
+package com.ruoyi.demo.entity.bo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class GoodsDeleteBo {
+    private List<GoodsBo> deleteItems;
+}

+ 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;
+}

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

@@ -0,0 +1,16 @@
+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;
+    private String auditComment;
+}

+ 9 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/GoodsDetailVo.java

@@ -0,0 +1,9 @@
+package com.ruoyi.demo.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class GoodsDetailVo {
+    private String goodsLogo;
+    private String goodsIntroduce;
+}

+ 24 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/GoodsListVo.java

@@ -0,0 +1,24 @@
+package com.ruoyi.demo.entity.vo;
+
+import com.ruoyi.demo.entity.Goods;
+import lombok.Data;
+
+@Data
+public class GoodsListVo {
+    private String appkey;
+    private String goodsId;
+    private String goodsImg;
+    private String goodsName;
+    private Float goodsPrice;
+    private String goodsClassify;
+
+    public GoodsListVo(){}
+    public GoodsListVo(Goods goods){
+        this.appkey = goods.getAppkey();
+        this.goodsId = goods.getGoodsId();
+        this.goodsImg = goods.getGoodsId();
+        this.goodsName = goods.getGoodsName();
+        this.goodsPrice = goods.getGoodsPrice();
+        this.goodsClassify = goods.getGoodsClassify();
+    }
+}

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

@@ -0,0 +1,26 @@
+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(){}
+    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;
+    }
+}

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

@@ -0,0 +1,24 @@
+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(){}
+    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();
+    }
+}

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

@@ -0,0 +1,55 @@
+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 com.ruoyi.demo.utils.StateUtil;
+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(){}
+    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();
+        this.state = StateUtil.getStateName(plan.getState());
+    }
+}

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

@@ -0,0 +1,38 @@
+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(){}
+    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();
+    }
+}

+ 14 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/StateVo.java

@@ -0,0 +1,14 @@
+package com.ruoyi.demo.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class StateVo {
+    private int state;
+    private String stateName;
+
+    public StateVo(int state,String stateName){
+        this.state = state;
+        this.stateName = stateName;
+    }
+}

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

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

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

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

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

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

+ 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> {
+}

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

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

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

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

+ 16 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/GoodsService.java

@@ -0,0 +1,16 @@
+package com.ruoyi.demo.service;
+
+import com.ruoyi.demo.entity.Goods;
+import com.ruoyi.demo.entity.bo.GoodsBo;
+import com.ruoyi.demo.entity.bo.GoodsDeleteBo;
+import com.ruoyi.demo.entity.vo.GoodsDetailVo;
+import com.ruoyi.demo.entity.vo.GoodsListVo;
+
+import java.util.List;
+
+public interface GoodsService {
+    int addGoods(Goods goods);
+    int deleteGoods(GoodsDeleteBo bo);
+    List<GoodsListVo> getGoodsList(GoodsBo bo);
+    GoodsDetailVo getGoodsDetail(GoodsBo bo);
+}

+ 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,String auditComment,String userId);
+    List<PlanListVo> getPlanList(PlanBo bo);
+    PlanDetailVo getPlanDetail(String planId);
+    List<PlanPushVo> getPlanPush();
+}

+ 57 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/GoodsServiceImpl.java

@@ -0,0 +1,57 @@
+package com.ruoyi.demo.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.demo.entity.Goods;
+import com.ruoyi.demo.entity.bo.GoodsBo;
+import com.ruoyi.demo.entity.bo.GoodsDeleteBo;
+import com.ruoyi.demo.entity.vo.GoodsDetailVo;
+import com.ruoyi.demo.entity.vo.GoodsListVo;
+import com.ruoyi.demo.mapper.GoodsMapper;
+import com.ruoyi.demo.service.GoodsService;
+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.List;
+
+@Service
+@Transactional
+public class GoodsServiceImpl implements GoodsService {
+    @Autowired
+    GoodsMapper goodsMapper;
+
+    @Override
+    public int addGoods(Goods goods) {
+        QueryWrapper<Goods> goodsQueryWrapper = new QueryWrapper<>();
+        goodsQueryWrapper.eq("appkey",goods.getAppkey());
+        goodsQueryWrapper.eq("goodsId",goods.getGoodsId());
+        Goods one = goodsMapper.selectOne(goodsQueryWrapper);
+        if (one != null)
+            return 2;
+        goods.setCreateTime(LocalDateTime.now());
+        return goodsMapper.insert(goods);
+    }
+
+    @Override
+    public int deleteGoods(GoodsDeleteBo bo) {
+        int i = 0;
+        for (GoodsBo item : bo.getDeleteItems()) {
+            QueryWrapper<Goods> goodsQueryWrapper = new QueryWrapper<>();
+            goodsQueryWrapper.eq("appkey",item.getAppkey());
+            goodsQueryWrapper.eq("goodsId",item.getGoodsId());
+            i += goodsMapper.delete(goodsQueryWrapper);
+        }
+        return i;
+    }
+
+    @Override
+    public List<GoodsListVo> getGoodsList(GoodsBo bo) {
+        return null;
+    }
+
+    @Override
+    public GoodsDetailVo getGoodsDetail(GoodsBo bo) {
+        return null;
+    }
+}

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

@@ -0,0 +1,193 @@
+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.PlanItemVo;
+import com.ruoyi.demo.entity.vo.PlanListVo;
+import com.ruoyi.demo.entity.vo.PlanPushVo;
+import com.ruoyi.demo.mapper.*;
+import com.ruoyi.demo.service.PlanService;
+import com.ruoyi.demo.utils.SignUtil;
+import com.ruoyi.demo.utils.StateUtil;
+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;
+import java.util.Map;
+
+@Service
+@Transactional
+public class PlanServiceImpl implements PlanService {
+    @Autowired
+    PlanMapper planMapper;
+    @Autowired
+    PlanItemMapper planItemMapper;
+    @Autowired
+    PlanAuditMapper planAuditMapper;
+    @Autowired
+    AppMapper appMapper;
+    @Autowired
+    CommercialMapper commercialMapper;
+    @Autowired
+    SystemSetterMapper systemSetterMapper;
+
+    @Override
+    public int addPlan(PlanAddBo bo) {
+        QueryWrapper<App> appQueryWrapper = new QueryWrapper<>();
+        appQueryWrapper.eq("appkey",bo.getAppkey());
+        appQueryWrapper.eq("show_delete",0);
+        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(StateUtil.NOT_AUDITED);
+        planMapper.insert(plan);
+        // 插入广告计划明细
+        for (PlanItem item : bo.getItems()) {
+            item.setPlanId(plan.getPlanId());
+            planItemMapper.insert(item);
+        }
+        return 1;
+    }
+
+    @Override
+    public int deletePlan(List<String> ids) {
+        int i = 0;
+        for (String id : ids){
+            QueryWrapper<Plan> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("plan_id",id);
+            i += planMapper.delete(queryWrapper);
+        }
+        return i;
+    }
+
+    @Override
+    public int checkPlan(String planId, Integer state, String auditComment,String userId) {
+        QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
+        planQueryWrapper.eq("plan_id",planId);
+        planQueryWrapper.eq("show_delete",0);
+        Plan plan = planMapper.selectOne(planQueryWrapper);
+        if (plan == null)
+            return -1;
+        plan.setState(state);
+        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());
+        planAuditMapper.insert(audit);
+        return 1;
+    }
+
+    @Override
+    public List<PlanListVo> getPlanList(PlanBo bo) {
+        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())
+                .or()
+                .like("goods_introduce",bo.getGoods());
+        }
+        planQueryWrapper.eq("show_delete",0);
+        List<Plan> plans = planMapper.selectList(planQueryWrapper);
+        List<PlanListVo> vos = new ArrayList<>();
+        for (Plan plan : plans){
+            vos.add(new PlanListVo(plan));
+        }
+        return vos;
+    }
+
+    @Override
+    public PlanDetailVo getPlanDetail(String planId) {
+        QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
+        planQueryWrapper.eq("plan_id",planId);
+        planQueryWrapper.eq("show_delete",0);
+        Plan plan = planMapper.selectOne(planQueryWrapper);
+        if (plan == null)
+            return null;
+        QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
+        itemQueryWrapper.eq("plan_id",planId);
+        List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
+        List<PlanItemVo> itemVos = new ArrayList<>();
+        if (items != null)
+            for (PlanItem item : items){
+                itemVos.add(new PlanItemVo(item));
+            }
+        PlanDetailVo vo = new PlanDetailVo(plan, itemVos);
+        return vo;
+    }
+
+    @Override
+    public List<PlanPushVo> getPlanPush() {
+//        查询可投放的广告计划
+//        再根据每个广告计划,查询其明细
+//        返回结果
+        QueryWrapper<SystemSetter> systemSetterQueryWrapper = new QueryWrapper<>();
+        SystemSetter setter = systemSetterMapper.selectOne(systemSetterQueryWrapper);
+        QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
+        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);
+        List<PlanPushVo> pushVos = new ArrayList<>();
+        for (Plan plan : planMapper.selectList(planQueryWrapper)) {
+            QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
+            itemQueryWrapper.eq("plan_id",plan.getPlanId());
+            for (PlanItem item : planItemMapper.selectList(itemQueryWrapper)) {
+                pushVos.add(new PlanPushVo(item,plan,setter));
+            }
+        }
+        return pushVos;
+    }
+}

+ 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);
+    }
+}

+ 23 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/utils/StateUtil.java

@@ -0,0 +1,23 @@
+package com.ruoyi.demo.utils;
+
+public class StateUtil {
+    // 未审核
+    public static int NOT_AUDITED = 0;
+    public static String NOT_AUDITED_CHAR = "未审核";
+    // 审核通过
+    public static int APPROVED = 1;
+    public static String APPROVED_CHAR = "审核通过";
+    // 审核未通过
+    public static int NOT_APPROVED = 2;
+    public static String NOT_APPROVED_CHAR = "审核未通过";
+
+    public static String getStateName(int state){
+        if (state == NOT_AUDITED)
+            return NOT_AUDITED_CHAR;
+        if (state == APPROVED)
+            return APPROVED_CHAR;
+        if (state == NOT_APPROVED)
+            return NOT_APPROVED_CHAR;
+        return "无效状态";
+    }
+}