瀏覽代碼

修复:
1.首页-扫码时间分布数据不正确问题
2.广告计划管理-缺少审核时间问题
3.广告计划管理-去掉广告id的搜索条件
4.广告管理-列表查询去掉广告id的搜索条件
5.广告管理-结果列表中添加广告开始结束时间字段
6.广告管理-投放广告计划接口添加模板字段
7.广告投放-列表查询去掉设备id的搜索条件
8.用户管理-列表查询去掉用户id的搜索条件
9.广告推送-添加广告推送计划接口添加模板字段
10.docker时区

云殇忆 1 年之前
父節點
當前提交
bd731ba92c

+ 1 - 1
.run/ruoyi-monitor-admin.run.xml

@@ -8,7 +8,7 @@
           <list>
             <DockerEnvVarImpl>
               <option name="name" value="TZ" />
-              <option name="value" value="Shanghai" />
+              <option name="value" value="Asia/Shanghai" />
             </DockerEnvVarImpl>
           </list>
         </option>

+ 1 - 1
.run/ruoyi-xxl-job-admin.run.xml

@@ -8,7 +8,7 @@
           <list>
             <DockerEnvVarImpl>
               <option name="name" value="TZ" />
-              <option name="value" value="Shanghai" />
+              <option name="value" value="Asia/Shanghai" />
             </DockerEnvVarImpl>
           </list>
         </option>

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

@@ -100,16 +100,6 @@ public class PlanController {
             return R.fail("该计划不存在");
         return R.fail("审核操作失败");
     }
-    // 下拉框——获取审核状态
-    // 已废弃
-    @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);
-    }
     /**
      * 查询广告计划管理列表
      * @param bo

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

@@ -57,6 +57,9 @@ public class Plan {
     private Float goodsPrice;
     @TableField("goods_classify")
     private String goodsClassify;
+    @TableField("template")
+    private String template;
+
     @TableField("plan_create_time")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonSerialize(using = LocalDateTimeSerializer.class)
@@ -72,6 +75,11 @@ public class Plan {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime planEndTime;
+    @TableField("audit_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime auditTime;
     @TableField("state")
     private Integer state;
 
@@ -87,30 +95,33 @@ public class Plan {
 
     public Plan(){}
     public Plan(App app, PlanAddBo bo){
-        this.setCommercialId(app.getCommercialId());
-        this.setCommercialName(app.getCommercialName());
-        this.setAppkey(app.getAppkey());
-        this.setAppName(app.getAppName());
-
-        this.setPlanName(bo.getPlanName());
-
-        this.setVendorId(bo.getVendorId());
-        this.setVendorName(bo.getVendorName());
-
-        this.setGoodsId(bo.getGoodsId());
-        this.setGoodsImg(bo.getGoodsImg());
-        this.setGoodsName(bo.getGoodsName());
-        this.setGoodsLogo(bo.getGoodsLogo());
-        this.setGoodsPrice(bo.getGoodsPrice());
-        this.setGoodsIntroduce(bo.getGoodsIntroduce());
-        this.setGoodsClassify(bo.getGoodsClassify());
-        this.setPlanCreateTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
+        this.commercialId = app.getCommercialId();
+        this.commercialName = app.getCommercialName();
+        this.appkey = app.getAppkey();
+        this.appName = app.getAppName();
+
+        this.planName = bo.getPlanName();
+
+        this.vendorId = bo.getVendorId();
+        this.vendorName = bo.getVendorName();
+
+        this.goodsId = bo.getGoodsId();
+        this.goodsImg = bo.getGoodsImg();
+        this.goodsName = bo.getGoodsName();
+        this.goodsLogo = bo.getGoodsLogo();
+        this.goodsPrice = bo.getGoodsPrice();
+        this.goodsIntroduce = bo.getGoodsIntroduce();
+        this.goodsClassify = bo.getGoodsClassify();
+        this.template = bo.getTemplate();
+
+        this.planCreateTime = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
         this.planStartTime = bo.getPlanStartTime();
         this.planEndTime = bo.getPlanEndTime();
-        this.setState(StateUtil.NOT_AUDITED);
 
-        this.setOnState(OnStateUtil.UP);
-        this.setPrincipalName(bo.getPrincipalName());
-        this.setPrincipalTelephone(bo.getPrincipalTelephone());
+        this.state = StateUtil.NOT_AUDITED;
+        this.onState = OnStateUtil.UP;
+
+        this.principalName = bo.getPrincipalName();
+        this.principalTelephone = bo.getPrincipalTelephone();
     }
 }

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

@@ -35,6 +35,7 @@ public class PlanAddBo {
     @NotNull(groups = {AddGroup.class},message = "商品价格不能为空")
     private Float goodsPrice;
     private String goodsClassify;
+    private String template;
 
     @NotBlank(groups = {AddGroup.class},message = "广告负责人名称不能为空")
     private String principalName;

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

@@ -23,6 +23,14 @@ public class PlanListVo {
     @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 onState;
 
     public PlanListVo(){}
@@ -33,6 +41,8 @@ public class PlanListVo {
         this.principalTelephone = plan.getPrincipalTelephone();
         this.goodsImg = plan.getGoodsImg();
         this.planCreateTime = plan.getPlanCreateTime();
+        this.planStartTime = plan.getPlanStartTime();
+        this.planEndTime = plan.getPlanEndTime();
         this.onState = OnStateUtil.getOnStateChar(plan.getOnState());
     }
 }

+ 5 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/entity/vo/PlanManageListVo.java

@@ -28,6 +28,10 @@ public class PlanManageListVo {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     private LocalDateTime planEndTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime auditTime;
     private String state;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonSerialize(using = LocalDateTimeSerializer.class)
@@ -45,6 +49,7 @@ public class PlanManageListVo {
         this.planCreateTime = plan.getPlanCreateTime();
         this.planStartTime = plan.getPlanStartTime();
         this.planEndTime = plan.getPlanEndTime();
+        this.auditTime = plan.getAuditTime();
         this.state = StateUtil.getStateName(plan.getState());
     }
 }

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

@@ -17,6 +17,7 @@ public class PlanPushVo {
     private String goodsIntroduce;
     private Float goodsPrice;
     private String goodsClassify;
+    private String template;
     private Integer sort;
 
     public PlanPushVo(){}
@@ -31,6 +32,7 @@ public class PlanPushVo {
         this.goodsPrice = plan.getGoodsPrice();
         this.goodsIntroduce = plan.getGoodsIntroduce();
         this.goodsClassify = plan.getGoodsClassify();
+        this.template = plan.getTemplate();
         this.sort = item.getSort();
     }
 }

+ 2 - 2
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/DlUserServiceImpl.java

@@ -27,8 +27,8 @@ public class DlUserServiceImpl implements DlUserService {
         QueryWrapper<DlUser> queryWrapper = new QueryWrapper<>();
         if (bo.getText() != null)
             queryWrapper.and(dlUserQueryWrapper -> {
-                dlUserQueryWrapper.like("user_id",bo.getText())
-                    .or()
+                dlUserQueryWrapper/*.like("user_id",bo.getText())
+                    .or()*/
                     .like("user_name",bo.getText())
                     .or()
                     .like("user_telephone",bo.getText());

+ 23 - 13
ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/PlanServiceImpl.java

@@ -88,6 +88,7 @@ public class PlanServiceImpl implements PlanService {
 
     @Override
     public int addPlan(PlanAddBo bo) {
+        // app是否可用
         QueryWrapper<App> appQueryWrapper = new QueryWrapper<>();
         appQueryWrapper.eq("appkey",bo.getAppkey());
         appQueryWrapper.eq("state",1);
@@ -95,6 +96,7 @@ public class PlanServiceImpl implements PlanService {
         App app = appMapper.selectOne(appQueryWrapper);
         if (app == null)
             return -1;
+        // 校验
         Map<String,Object> params = Dict.create()
             .set("appkey",bo.getAppkey())
             .set("goodsId",bo.getGoodsId())
@@ -156,6 +158,7 @@ public class PlanServiceImpl implements PlanService {
 
     @Override
     public int checkPlan(PlanBo bo,Long userId,String userName) {
+        // 是否有该计划
         QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
         planQueryWrapper.eq("plan_id",bo.getPlanId());
         planQueryWrapper.eq("deleted","0");
@@ -170,21 +173,23 @@ public class PlanServiceImpl implements PlanService {
         App app = appMapper.selectOne(appQueryWrapper);
         if (app == null)
             return -1;
-
+        // 确定审核状态并更新广告计划
         plan.setState(bo.getState());
+        LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Shanghai")); // 启动回调地址时也用该时间
+        plan.setAuditTime(now);
         int i = planMapper.updateById(plan);
-        if (i == 0)
-            return 0;
-//        SysUser sysUser = sysUserMapper.selectById(userId);
+        if (i == 0) return 0;
+        // 插入审核记录
         PlanAudit audit = new PlanAudit(bo,userId.toString(),userName);
         int insert = planAuditMapper.insert(audit);
-        if (insert == 1){
+        if (insert == 1){ // 审核计划插入成功
+            // 启动回调地址
             CallBackBean callBackBean = new CallBackBean();
             callBackBean.setAuditPerson(userName);
             if (bo.getState() == 1)
                 callBackBean.setAuditComment("审核通过");
             else callBackBean.setAuditComment("审核不通过");
-            callBackBean.setAuditTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
+            callBackBean.setAuditTime(now);
             SendCallBackUtil.sendCallBack(app.getCallBack(),callBackBean);
         }
         return insert;
@@ -196,8 +201,8 @@ public class PlanServiceImpl implements PlanService {
         QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
         if (bo.getText() != null)
             planQueryWrapper.and(planQueryWrapper1 -> {
-                planQueryWrapper1.like("plan_id",bo.getText())
-                    .or()
+                planQueryWrapper1/*.like("plan_id",bo.getText())
+                    .or()*/
                     .like("plan_name",bo.getText())
                     .or()
                     .like("principal_name",bo.getText())
@@ -264,12 +269,14 @@ public class PlanServiceImpl implements PlanService {
     @Override
     public List<PlanPushVo> getPlanPushByCode(String equipmentCode) {
         List<PlanPushVo> pushVos = new ArrayList<>();
+        // 根据设备编号查询设备下的广告计划子项
         QueryWrapper<PlanItem> itemQueryWrapper = new QueryWrapper<>();
         itemQueryWrapper.eq("equipment_code",equipmentCode);
         itemQueryWrapper.eq("deleted","0");
         List<PlanItem> items = planItemMapper.selectList(itemQueryWrapper);
+        // 排序
         items.sort(Comparator.comparing(PlanItem::getSort).reversed());
-        for (PlanItem item : items){
+        for (PlanItem item : items){ // 根据计划子项查询计划,并补齐返回信息
             QueryWrapper<Plan> planQueryWrapper = new QueryWrapper<>();
             planQueryWrapper.eq("plan_id",item.getPlanId());
             planQueryWrapper.apply("plan_start_time <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')",LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
@@ -286,12 +293,14 @@ public class PlanServiceImpl implements PlanService {
 
     @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;
+        // 改变状态,1:上架;0:下架
         plan.setOnState(plan.getOnState()+1);
         if (plan.getOnState() >= 2)
             plan.setOnState(0);
@@ -305,8 +314,8 @@ public class PlanServiceImpl implements PlanService {
         planQueryWrapper.eq("state",bo.getState());
         if (bo.getText() != null)
             planQueryWrapper.and(planQueryWrapper1 -> {
-                planQueryWrapper1.like("plan_id",bo.getText())
-                    .or()
+                planQueryWrapper1/*.like("plan_id",bo.getText())
+                    .or()*/
                     .like("app_name",bo.getText())
                     .or()
                     .like("commercial_name",bo.getText());
@@ -320,6 +329,7 @@ public class PlanServiceImpl implements PlanService {
         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);
@@ -391,10 +401,10 @@ public class PlanServiceImpl implements PlanService {
         QueryWrapper<PlanPushStatistics> statisticsQueryWrapper = new QueryWrapper<>();
         if (bo.getText() != null)
             statisticsQueryWrapper.and(planPushStatisticsQueryWrapper -> {
-                planPushStatisticsQueryWrapper.like("equipment_id",bo.getText())
+                planPushStatisticsQueryWrapper/*.like("equipment_id",bo.getText())
                     .or()
                     .like("equipment_code",bo.getText())
-                    .or()
+                    .or()*/
                     .like("equipment_name",bo.getText());
             });
         if (bo.getStartTime() != null)

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

@@ -148,21 +148,21 @@ public class StatisticsServiceImpl implements StatisticsService {
     @Override
     public List<TimeAndCountVo> getTimeDisToVo(String option) {
         List<TimeAndCountVo> vos = new ArrayList<>();
-        if (option.equals("day")){
+        if (option.equals("day")){ // 时间粒度:天
             for (int i=0;i<30;i++){
                 TimeAndCountVo vo = new TimeAndCountVo();
                 vo.setTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusDays(-i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                 vo.setCount(statisticsMapper.selectTimeDisByDay(vo.getTime()));
                 vos.add(vo);
             }
-        } else if (option.equals("year")){
+        } else if (option.equals("year")){ // 时间粒度:年
             for (int i=0;i<12;i++){
                 TimeAndCountVo vo = new TimeAndCountVo();
                 vo.setTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusYears(-i).format(DateTimeFormatter.ofPattern("yyyy")));
                 vo.setCount(statisticsMapper.selectTimeDisByYear(vo.getTime()));
                 vos.add(vo);
             }
-        } else {
+        } else { // 时间粒度:月
             for (int i=0;i<12;i++){
                 TimeAndCountVo vo = new TimeAndCountVo();
                 vo.setTime(LocalDateTime.now(ZoneId.of("Asia/Shanghai")).plusMonths(-i).format(DateTimeFormatter.ofPattern("yyyy-MM")));

+ 2 - 1
ruoyi-demo/src/main/resources/mapper/demo/PlanMapper.xml

@@ -9,6 +9,7 @@
         SELECT
             COUNT(*)
         FROM
-            `dl_plan`;
+            `dl_plan`
+        WHERE deleted = 0;
     </select>
 </mapper>

+ 14 - 16
ruoyi-demo/src/main/resources/mapper/demo/StatisticsMapper.xml

@@ -8,7 +8,8 @@
             COUNT(*)
         FROM
             `dl_statistics`
-        WHERE behavior = 0;
+        WHERE behavior = 0
+        AND deleted = 0;
     </select>
     <select id="selectUserIdsByEquipmentCode" resultType="java.lang.String">
         SELECT DISTINCT
@@ -55,32 +56,29 @@
 	        COUNT(*) count
         FROM
             `dl_statistics`
-        <where>
-            <if test="month != null">
-                DATE_FORMAT(`time`,'%Y-%m') = #{month}
-            </if>
-        </where>;
+        WHERE behavior = 0
+        <if test="month != null">
+            AND DATE_FORMAT(`time`,'%Y-%m') = #{month}
+        </if>;
     </select>
     <select id="selectTimeDisByDay" resultType="java.lang.Integer">
         SELECT
             COUNT(*) count
         FROM
             `dl_statistics`
-        <where>
-            <if test="day != null">
-                DATE_FORMAT(`time`,'%Y-%m-%d') = #{day}
-            </if>
-        </where>;
+        WHERE behavior = 0
+        <if test="day != null">
+            AND DATE_FORMAT(`time`,'%Y-%m-%d') = #{day}
+        </if>;
     </select>
     <select id="selectTimeDisByYear" resultType="java.lang.Integer">
         SELECT
             COUNT(*) count
         FROM
             `dl_statistics`
-        <where>
-            <if test="year != null">
-                DATE_FORMAT(`time`,'%Y') = #{year}
-            </if>
-        </where>;
+        WHERE behavior = 0
+        <if test="year != null">
+            AND DATE_FORMAT(`time`,'%Y') = #{year}
+        </if>;
     </select>
 </mapper>