Przeglądaj źródła

车票广告配置

zoujiajian 3 lat temu
rodzic
commit
655f7ee4d3

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/TicketAdvertiseConfigClickRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.TicketAdvertiseConfigClickRecord;
+
+/*
+ *项目名: netflix
+ *文件名: TicketAdvertiseConfigClickRecordMapper
+ *创建者: JavaZou
+ *创建时间:2023/7/12 12:22
+ */
+public interface TicketAdvertiseConfigClickRecordMapper extends BaseMapper<TicketAdvertiseConfigClickRecord> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/TicketAdvertiseConfigMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.TicketAdvertiseConfig;
+
+/*
+ *项目名: netflix
+ *文件名: TicketAdvertiseConfigMapper
+ *创建者: JavaZou
+ *创建时间:2023/7/12 12:21
+ */
+public interface TicketAdvertiseConfigMapper extends BaseMapper<TicketAdvertiseConfig> {
+}

+ 49 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/TicketAdvertiseConfig.java

@@ -0,0 +1,49 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+/*
+ *项目名: netflix
+ *文件名: TicketAdvertiseConfig
+ *创建者: JavaZou
+ *创建时间:2023/7/12 12:20
+ */
+@Getter
+@Setter
+@SearchBean(tables = "ticket_advertise_config tc left join goods_don g on g.id = tc.goods_id"
+		, where = "tc.deleted is true")
+public class TicketAdvertiseConfig extends BaseEntity {
+	@NotEmpty(message = "标题不为空")
+	@DbField("tc.title")
+	private String title;
+
+	@NotNull(message = "请选择对应平台")
+	@DbField("tc.goods_id")
+	private Long goodsId;
+
+	@DbField("g.title")
+	@TableField(exist = false)
+	private String goodsTitle;
+
+	@DbField("tc.link")
+	private String link;
+
+	@DbField("tc.pic")
+	private String pic;
+
+	@DbField("tc.click")
+	private Integer click;
+
+	@DbField("tc.status")
+	private Boolean status;
+
+	@DbField("tc.deleted")
+	private Boolean deleted;
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/TicketAdvertiseConfigClickRecord.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: TicketAdvertiseConfigClickRecord
+ *创建者: JavaZou
+ *创建时间:2023/7/12 12:21
+ */
+@Getter
+@Setter
+public class TicketAdvertiseConfigClickRecord extends BaseEntity{
+	private Long userId;
+
+	private Long configId;
+}

+ 39 - 0
netflix-dao/src/main/java/com/cyksj/model/views/TicketAdvertiseConfigFrontView.java

@@ -0,0 +1,39 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: TicketAdvertiseConfigFrontView
+ *创建者: JavaZou
+ *创建时间:2023/7/12 14:16
+ */
+@Getter
+@Setter
+@SearchBean(tables = "ticket_advertise_config tc left join goods_don g on g.id = tc.goods_id"
+		, where = "tc.deleted is true and tc.status is true")
+public class TicketAdvertiseConfigFrontView {
+	@DbField("tc.id")
+	private Long configId;
+
+	@DbField("tc.goods_id")
+	@JsonIgnore
+	private Long goodsId;
+
+	@DbField("tc.title")
+	private String title;
+
+	@DbField("g.title")
+	private String goodsTitle;
+
+	@DbField("tc.link")
+	private String link;
+
+	@DbField("tc.pic")
+	private String pic;
+}

+ 14 - 0
netflix-service/src/main/java/com/cyksj/service/mange/ticket/TicketAdvertiseConfigClickRecordService.java

@@ -0,0 +1,14 @@
+package com.cyksj.service.mange.ticket;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.TicketAdvertiseConfigClickRecord;
+
+/*
+ *项目名: netflix
+ *文件名: TicketAdvertiseConfigClickRecordService
+ *创建者: JavaZou
+ *创建时间:2023/7/12 14:01
+ */
+public interface TicketAdvertiseConfigClickRecordService extends IService<TicketAdvertiseConfigClickRecord> {
+	void recordUserClickTicketAdvertise(long userId, Long configId);
+}

+ 14 - 0
netflix-service/src/main/java/com/cyksj/service/mange/ticket/TicketAdvertiseConfigService.java

@@ -0,0 +1,14 @@
+package com.cyksj.service.mange.ticket;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.TicketAdvertiseConfig;
+
+/*
+ *项目名: netflix
+ *文件名: TicketAdvertiseConfigService
+ *创建者: JavaZou
+ *创建时间:2023/7/12 13:49
+ */
+public interface TicketAdvertiseConfigService extends IService<TicketAdvertiseConfig> {
+	void saveOrUpdateAdvertiseConfig(TicketAdvertiseConfig config);
+}

+ 48 - 0
netflix-service/src/main/java/com/cyksj/service/mange/ticket/impl/TicketAdvertiseConfigClickRecordServiceImpl.java

@@ -0,0 +1,48 @@
+package com.cyksj.service.mange.ticket.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.mapper.TicketAdvertiseConfigClickRecordMapper;
+import com.cyksj.mapper.TicketAdvertiseConfigMapper;
+import com.cyksj.model.entity.TicketAdvertiseConfig;
+import com.cyksj.model.entity.TicketAdvertiseConfigClickRecord;
+import com.cyksj.service.mange.ticket.TicketAdvertiseConfigClickRecordService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/*
+ *项目名: netflix
+ *文件名: TicketAdvertiseConfigClickRecordServiceImpl
+ *创建者: JavaZou
+ *创建时间:2023/7/12 14:01
+ */
+@Service
+@RequiredArgsConstructor
+public class TicketAdvertiseConfigClickRecordServiceImpl extends ServiceImpl<TicketAdvertiseConfigClickRecordMapper, TicketAdvertiseConfigClickRecord> implements TicketAdvertiseConfigClickRecordService {
+	private final TicketAdvertiseConfigMapper ticketAdvertiseConfigMapper;
+
+	@Override
+	public void recordUserClickTicketAdvertise(long userId, Long configId) {
+		TicketAdvertiseConfig ticketAdvertiseConfig = ticketAdvertiseConfigMapper.selectById(configId);
+		if (ticketAdvertiseConfig == null) return;
+		TicketAdvertiseConfigClickRecord record = new TicketAdvertiseConfigClickRecord();
+		record.setUserId(userId);
+		record.setConfigId(configId);
+		this.save(record);
+
+		updateAdvertiseClickNum(ticketAdvertiseConfig.getId(), ticketAdvertiseConfig.getClick());
+	}
+
+	public void updateAdvertiseClickNum(Long configId, Integer o_click) {
+		int update = 0;
+		while (update != 1) {
+			TicketAdvertiseConfig ticketAdvertiseConfig = ticketAdvertiseConfigMapper.selectById(configId);
+			if (ticketAdvertiseConfig == null) break;
+			o_click = ticketAdvertiseConfig.getClick();
+			update = ticketAdvertiseConfigMapper.update(null, Wrappers.lambdaUpdate(TicketAdvertiseConfig.class)
+					.set(TicketAdvertiseConfig::getClick, o_click + 1)
+					.eq(TicketAdvertiseConfig::getId, configId)
+					.eq(TicketAdvertiseConfig::getClick, o_click));
+		}
+	}
+}

+ 25 - 0
netflix-service/src/main/java/com/cyksj/service/mange/ticket/impl/TicketAdvertiseConfigServiceImpl.java

@@ -0,0 +1,25 @@
+package com.cyksj.service.mange.ticket.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.mapper.TicketAdvertiseConfigMapper;
+import com.cyksj.model.entity.TicketAdvertiseConfig;
+import com.cyksj.service.mange.ticket.TicketAdvertiseConfigService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/*
+ *项目名: netflix
+ *文件名: TicketAdvertiseConfigServiceImpl
+ *创建者: JavaZou
+ *创建时间:2023/7/12 13:50
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class TicketAdvertiseConfigServiceImpl extends ServiceImpl<TicketAdvertiseConfigMapper, TicketAdvertiseConfig> implements TicketAdvertiseConfigService {
+	@Override
+	public void saveOrUpdateAdvertiseConfig(TicketAdvertiseConfig config) {
+		this.saveOrUpdate(config);
+	}
+}

+ 0 - 3
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -8,7 +8,6 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.mapper.GroupsRelationMapper;
 import com.cyksj.mapper.UserMapper;
-import com.cyksj.mapper.corp.CorpUserMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.views.CorpUserFollowView;
 import com.cyksj.model.views.GoodsDonViews;
@@ -44,8 +43,6 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final BeanSearcher beanSearcher;
 
-	private final CorpUserMapper corpUserMapper;
-
 	private final CouponCommonService couponCommonService;
 
 	private final GroupsRelationMapper groupsRelationMapper;

+ 23 - 5
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -25,12 +25,10 @@ import com.cyksj.model.dto.QuestionnaireView;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.request.OrderPayRequest;
-import com.cyksj.model.views.DoubleVerifyCodeView;
-import com.cyksj.model.views.QuestionnairePromotionFieldsListView;
-import com.cyksj.model.views.RenewalView;
-import com.cyksj.model.views.UserTicketView;
+import com.cyksj.model.views.*;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
+import com.cyksj.service.mange.ticket.TicketAdvertiseConfigClickRecordService;
 import com.cyksj.service.order.OrderDonService;
 import com.cyksj.service.relation.GroupRelationFrontService;
 import com.cyksj.service.user.UserService;
@@ -90,7 +88,7 @@ public class GroupRelationController {
 
     private final QuestionnairePromotionMapper questionnairePromotionMapper;
 
-    private final QuestionnairePromotionMapper promotionMapper;
+    private final TicketAdvertiseConfigClickRecordService ticketAdvertiseConfigClickRecordService;
 
     private final GlobalThreadPoolTaskExecutor THREAD_POOL;
 
@@ -435,4 +433,24 @@ public class GroupRelationController {
         });
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
+
+    /**
+     * 对应平台车票 广告配置列表
+     */
+    @GetMapping("/get/advertise/{goodsId}")
+    public Result<List<TicketAdvertiseConfigFrontView>> getTicketAdvertiseConfig(@PathVariable Long goodsId) {
+        List<TicketAdvertiseConfigFrontView> views = beanSearcher.searchAll(TicketAdvertiseConfigFrontView.class, MapUtils.flatBuilder(request.getParameterMap())
+                .field(TicketAdvertiseConfig::getGoodsId, goodsId).build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(views);
+    }
+
+    /**
+     * 记录用户点击车票广告
+     */
+    @PostMapping("/click/ticket/advertise/record/{configId}")
+    public Result<String> recordClickTicketAdvertise(@PathVariable Long configId) {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        ticketAdvertiseConfigClickRecordService.recordUserClickTicketAdvertise(userId, configId);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
 }

+ 84 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/sys/TicketAdvertiseConfigController.java

@@ -0,0 +1,84 @@
+package com.cyksj.web.controller.manage.sys;
+
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.entity.TicketAdvertiseConfig;
+import com.cyksj.service.mange.ticket.TicketAdvertiseConfigService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+/*
+ *项目名: netflix
+ *文件名: TicketAdvertiseConfigController
+ *创建者: JavaZou
+ *创建时间:2023/7/12 12:24
+ */
+@RestController
+@RequestMapping("/manage/ticket/config")
+@RequiredArgsConstructor
+public class TicketAdvertiseConfigController {
+	private final TicketAdvertiseConfigService ticketAdvertiseConfigService;
+
+	private final BeanSearcher beanSearcher;
+
+	private final HttpServletRequest request;
+
+	/**
+	 * 新建车票 广告配置图
+	 */
+	@PostMapping("/advertise")
+	public Result<String> saveTicketAdvertiseConfig(@RequestBody @Validated TicketAdvertiseConfig config) {
+		ticketAdvertiseConfigService.saveOrUpdateAdvertiseConfig(config);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+
+	/**
+	 * 编辑广告配置
+	 */
+	@PutMapping("/advertise/update")
+	public Result<String> updateTicketAdvertiseConfig(@RequestBody @Validated TicketAdvertiseConfig config) {
+		ticketAdvertiseConfigService.saveOrUpdateAdvertiseConfig(config);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 删除
+	 */
+	@DeleteMapping("/advertise/delete/{id}")
+	public Result<String> saveTicketAdvertiseConfig(@PathVariable Long id) {
+		ticketAdvertiseConfigService.update(null, Wrappers.lambdaUpdate(TicketAdvertiseConfig.class)
+				.set(TicketAdvertiseConfig::getDeleted, false)
+				.eq(TicketAdvertiseConfig::getId, id));
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 广告配置列表
+	 */
+	@GetMapping("/advertise/get")
+	public Result<SearchResult<TicketAdvertiseConfig>> getAdvertiseConfig() {
+		SearchResult<TicketAdvertiseConfig> search = beanSearcher.search(TicketAdvertiseConfig.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+	/**
+	 * 上下架广告配置
+	 */
+	@PutMapping("/advertise/updateStatus/{id}")
+	public Result<String> updateStatusById(@PathVariable Long id) {
+		TicketAdvertiseConfig ticketAdvertiseConfig = ticketAdvertiseConfigService.getById(id);
+		Assert.notNull(ticketAdvertiseConfig, "该车票配置不存在");
+		ticketAdvertiseConfig.setStatus(!ticketAdvertiseConfig.getStatus());
+		ticketAdvertiseConfigService.updateById(ticketAdvertiseConfig);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+}