Sfoglia il codice sorgente

new: 新增用户、活跃用户数据清洗

lwh 4 giorni fa
parent
commit
fe21d591a5

+ 8 - 3
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/controller/MarketingAppsController.java

@@ -58,9 +58,14 @@ public class MarketingAppsController {
 	 */
 	@GetMapping("/list")
 	@Operation(summary = "查询应用列表")
-	public R<List<MarketingAppsVO>> MarketingApps() {
-		List<MarketingAppsVO> marketingAppsVOS = marketingAppsService.marketingApps();
-		return R.ok(marketingAppsVOS);
+	public R<List<MarketingAppsVO>> MarketingApps(@Valid @ParameterObject Boolean isAll) {
+//		if (isAll) {
+			List<MarketingAppsVO> marketingAppsVOS = marketingAppsService.marketingApps();
+			return R.ok(marketingAppsVOS);
+//		}else {
+//			List<MarketingAppsVO> marketingAppsVOS = marketingAppsService.getMarketingApps();
+//			return R.ok(marketingAppsVOS);
+//		}
 	}
 
 	@GetMapping("/detail")

+ 31 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/mapper/MarketingAppsMapper.java

@@ -3,9 +3,12 @@ package com.pig4cloud.pig.marketing.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.pig4cloud.pig.common.core.util.R;
 import com.pig4cloud.pig.marketing.api.entity.MarketingApps;
 import com.pig4cloud.pig.marketing.api.vo.app.PageStatAppFirstMktDataVO;
 import com.pig4cloud.pig.marketing.api.vo.app.PageStatAppSecondMktDataVO;
+import com.pig4cloud.pig.statistics.api.entity.user.MktStatActiveUser;
+import com.pig4cloud.pig.statistics.api.entity.user.MktStatNewUser;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -34,4 +37,32 @@ public interface MarketingAppsMapper extends BaseMapper<MarketingApps> {
 			@Param("startTime") LocalDateTime startTime,
 			@Param("endTime") LocalDateTime endTime
 	);
+
+	/**
+	 * 更新活跃用户数据
+	 * @param activeUser
+	 * @return int
+	 */
+	int updateMktStatActiveUser(MktStatActiveUser activeUser);
+
+	/**
+	 * 更新新增用户数据
+	 * @param mktStatNewUser
+	 * @return int
+	 */
+	int updateMktStatNewUser(MktStatNewUser mktStatNewUser);
+
+	/**
+	 * 保存活跃用户数据
+	 * @param activeUser
+	 * @return int
+	 */
+	int saveMktStatActiveUser(MktStatActiveUser activeUser);
+
+	/**
+	 * 保存新增用户数据
+	 * @param mktStatNewUser
+	 * @return int
+	 */
+	int saveMktStatNewUser(MktStatNewUser mktStatNewUser);
 }

+ 8 - 1
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/service/MarketingAppsService.java

@@ -29,10 +29,17 @@ public interface MarketingAppsService {
 	Page pageMarketingApps(PageMarketingAppsDTO reqDto, Boolean status);
 
 	/**
-	 * 分页查询应用列表
+	 * 获取全部应用列表
 	 */
 	List<MarketingAppsVO> marketingApps();
 
+
+	/**
+	 * 获取有数据的应用列表
+	 * @return 应用列表
+	 */
+	List<MarketingAppsVO> getMarketingApps();
+
 	/**
 	 * 根据ID获取应用详情
 	 * @param id 应用ID

+ 11 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/service/impl/MarketingAppsServiceImpl.java

@@ -147,6 +147,16 @@ public class MarketingAppsServiceImpl implements MarketingAppsService {
 		return marketingAppsVOList;
 	}
 
+	/**
+	 * 获取有数据的应用列表
+	 * @return 应用列表
+	 */
+	@Override
+	public List<MarketingAppsVO> getMarketingApps() {
+
+		return List.of();
+	}
+
 	/**
 	 * 根据ID获取应用详情
 	 * @param id 应用ID
@@ -809,6 +819,7 @@ public class MarketingAppsServiceImpl implements MarketingAppsService {
 		return false;
 	}
 
+
 	/**
 	 * 检查应用IP表中是否存在冲突
 	 */

+ 25 - 15
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/service/impl/TcpDataServiceImpl.java

@@ -13,6 +13,7 @@ import com.pig4cloud.pig.marketing.api.entity.mongo.Message;
 import com.pig4cloud.pig.marketing.api.service.MktMgmtHandPushService;
 import com.pig4cloud.pig.marketing.api.vo.mongo.*;
 import com.pig4cloud.pig.marketing.config.UserStatisticsConfig;
+import com.pig4cloud.pig.marketing.mapper.MarketingAppsMapper;
 import com.pig4cloud.pig.marketing.repository.MessageRepository;
 import com.pig4cloud.pig.marketing.service.MktMgmtPushRecordService;
 import com.pig4cloud.pig.marketing.service.TcpDataService;
@@ -64,6 +65,8 @@ import java.util.stream.Collectors;
 		@Autowired
 		private MktMgmtHandPushService mktMgmtHandPushService;
 
+		private final MarketingAppsMapper appsMapper;
+
 		private final RemoteStatUserDataService remoteStatUserDataService;
 
 		// 添加 RedisTemplate 依赖
@@ -159,7 +162,7 @@ import java.util.stream.Collectors;
 
 		// 从JSON对象中提取需要的字段
 		String bundle = extractStringFromJson(deviceInfoJson, "bundle", "");
-		String appId = extractStringFromJson(deviceInfoJson, "appId", bundle);
+		String appId = extractStringFromJson(deviceInfoJson, "appid", bundle);
 		String channel = extractStringFromJson(deviceInfoJson, "channel", "应用市场");
 		String version = extractStringFromJson(deviceInfoJson, "version", "0.0.0");
 
@@ -172,8 +175,9 @@ import java.util.stream.Collectors;
 		activeUser.setVersion(version);
 		activeUser.setStatDate(LocalDateTime.now());
 
-		R<Boolean> result = remoteStatUserDataService.updateMktStatActiveUser(activeUser);
-		if (result.getData() == null || !result.getData()) {
+//		R<Boolean> result = remoteStatUserDataService.updateMktStatActiveUser(activeUser);
+		int result = appsMapper.updateMktStatActiveUser(activeUser);
+		if (result > 0) {
 			log.error("update活跃用户记录失败:clientID = {}", clientID);
 		} else {
 			log.debug("update活跃用户记录成功:clientID = {}, appId = {}, channel = {}", clientID, appId, channel);
@@ -201,7 +205,7 @@ import java.util.stream.Collectors;
 
 		// 从JSON对象中提取需要的字段
 		String bundle = extractStringFromJson(deviceInfoJson, "bundle", "");
-		String appId = extractStringFromJson(deviceInfoJson, "appId", bundle);
+		String appId = extractStringFromJson(deviceInfoJson, "appid", bundle);
 		String channel = extractStringFromJson(deviceInfoJson, "channel", "应用市场");
 		String version = extractStringFromJson(deviceInfoJson, "version", "0.0.0");
 		String oldVersion = extractStringFromJson(deviceInfoJson, "oldVersion", "");
@@ -216,8 +220,10 @@ import java.util.stream.Collectors;
 		mktStatNewUser.setOldVersion(oldVersion);
 		mktStatNewUser.setStatDate(LocalDateTime.now());
 
-		R<Boolean> result = remoteStatUserDataService.updateMktStatNewUser(mktStatNewUser);
-		if (result.getData() == null || !result.getData()) {
+//		R<Boolean> result = remoteStatUserDataService.updateMktStatNewUser(mktStatNewUser);
+		int result = appsMapper.updateMktStatNewUser(mktStatNewUser);
+
+		if (result > 0) {
 			log.error("update新增用户记录失败:clientID = {}", clientID);
 		} else {
 			log.debug("update新增用户记录成功:clientID = {}, appId = {}, channel = {}", clientID, appId, channel);
@@ -246,7 +252,7 @@ import java.util.stream.Collectors;
 
 		// 从JSON对象中提取需要的字段
 		String bundle = extractStringFromJson(deviceInfoJson, "bundle", "");
-		String appId = extractStringFromJson(deviceInfoJson, "appId", bundle);
+		String appId = extractStringFromJson(deviceInfoJson, "appid", bundle);
 		String channel = extractStringFromJson(deviceInfoJson, "channel", "应用市场");
 		String version = extractStringFromJson(deviceInfoJson, "version", "0.0.0");
 
@@ -259,8 +265,10 @@ import java.util.stream.Collectors;
 		activeUser.setVersion(version);
 		activeUser.setStatDate(LocalDateTime.now());
 
-		R<Boolean> result = remoteStatUserDataService.saveMktStatActiveUser(activeUser);
-		if (result.getData() == null || !result.getData()) {
+//		R<Boolean> result = remoteStatUserDataService.saveMktStatActiveUser(activeUser);
+		int result = appsMapper.saveMktStatActiveUser(activeUser);
+
+		if (result > 0) {
 			log.error("add活跃用户记录失败:clientID = {}", clientID);
 		} else {
 			log.debug("add活跃用户记录成功:clientID = {}, appId = {}, channel = {}", clientID, appId, channel);
@@ -288,7 +296,7 @@ import java.util.stream.Collectors;
 
 		// 从JSON对象中提取需要的字段
 		String bundle = extractStringFromJson(deviceInfoJson, "bundle", "");
-		String appId = extractStringFromJson(deviceInfoJson, "appId", bundle);
+		String appId = extractStringFromJson(deviceInfoJson, "appid", bundle);
 		String channel = extractStringFromJson(deviceInfoJson, "channel", "应用市场");
 		String version = extractStringFromJson(deviceInfoJson, "version", "0.0.0");
 		String oldVersion = extractStringFromJson(deviceInfoJson, "oldVersion", "");
@@ -303,8 +311,10 @@ import java.util.stream.Collectors;
 		mktStatNewUser.setOldVersion(oldVersion);
 		mktStatNewUser.setStatDate(LocalDateTime.now());
 
-		R<Boolean> result = remoteStatUserDataService.saveMktStatNewUser(mktStatNewUser);
-		if (result.getData() == null || !result.getData()) {
+//		R<Boolean> result = remoteStatUserDataService.saveMktStatNewUser(mktStatNewUser);
+		int result = appsMapper.saveMktStatNewUser(mktStatNewUser);
+
+		if (result > 0) {
 			log.error("add新增用户记录失败:clientID = {}", clientID);
 		} else {
 			log.debug("add新增用户记录成功:clientID = {}, appId = {}, channel = {}", clientID, appId, channel);
@@ -448,9 +458,6 @@ import java.util.stream.Collectors;
 			saveRecordDTO.setPushDomain(reqDto.getClientDomain());
 			saveRecordDTO.setClientId(reqDto.getClientID());
 
-			s = mktMgmtPushRecordService.saveRecord(saveRecordDTO);
-			hand = mktMgmtHandPushService.handPush(saveRecordDTO);
-
 			// 根据客户端ID查询设备信息
 			Query query = new Query(Criteria.where("clientID").is(reqDto.getClientID()));
 			Device device = mongoTemplate.findOne(query, Device.class);
@@ -458,6 +465,9 @@ import java.util.stream.Collectors;
 
 			// 添加用户统计逻辑
 			updateUserStatistics(reqDto.getClientID());
+
+			s = mktMgmtPushRecordService.saveRecord(saveRecordDTO);
+			hand = mktMgmtHandPushService.handPush(saveRecordDTO);
 		}
 
 		log.info("保存推送记录:{}--{}", s,hand);

+ 73 - 0
pig-marketing/pig-marketing-biz/src/main/resources/mapper/MarketingAppsMapper.xml

@@ -20,6 +20,79 @@
 
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.pig4cloud.pig.marketing.mapper.MarketingAppsMapper">
+	<update id="updateMktStatActiveUser">
+		UPDATE mkt_stat_active_user
+		SET
+			app_id = #{appId},
+			version = #{version},
+			stat_date = #{statDate},
+			update_time = NOW()
+		WHERE
+			user_id = #{userId}
+		  AND version = '0.0.0'
+		  AND channel = '应用市场'
+		  AND del_flag = '0'
+	</update>
+
+	<update id="updateMktStatNewUser">
+		UPDATE mkt_stat_new_user
+		SET
+			app_id = #{appId},
+			version = #{version},
+			stat_date = #{statDate},
+			update_time = NOW()
+		WHERE
+			user_id = #{userId}
+		  AND version = '0.0.0'
+		  AND channel = '应用市场'
+		  AND del_flag = '0'
+	</update>
+
+	<insert id="saveMktStatNewUser">
+		INSERT INTO mkt_stat_new_user (
+			user_id,
+			app_id,
+			channel,
+			version,
+			old_version,
+			stat_date,
+			create_time,
+			update_time,
+			del_flag
+		) VALUES (
+					 #{userId},
+					 #{appId},
+					 #{channel},
+					 #{version},
+					 #{oldVersion},
+					 #{statDate},
+					 NOW(),
+					 NOW(),
+					 '0'
+				 )
+	</insert>
+
+	<insert id="saveMktStatActiveUser">
+		INSERT INTO mkt_stat_active_user (
+			user_id,
+			app_id,
+			channel,
+			version,
+			stat_date,
+			create_time,
+			update_time,
+			del_flag
+		) VALUES (
+					 #{userId},
+					 #{appId},
+					 #{channel},
+					 #{version},
+					 #{statDate},
+					 NOW(),
+					 NOW(),
+					 '0'
+				 )
+	</insert>
 
 
 	<select id="statAppFirstMktData" resultType="com.pig4cloud.pig.marketing.api.vo.app.PageStatAppFirstMktDataVO">

+ 1 - 1
pig-statistics/pig-statistics-api/src/main/java/com/pig4cloud/pig/statistics/api/dto/user/GetVersionDistributionDTO.java

@@ -45,6 +45,6 @@ public class GetVersionDistributionDTO implements Serializable {
 	 * 类型
 	 */
 	@NotBlank(message = "类型不能为空")
-	@Schema(description = "类型,upgradeChannel-升级用户渠道",example = "upgradeChannel")
+	@Schema(description = "类型,upgradeChannel-升级用户渠道,newUserChannel-新增用户渠道,upgradeVersion-升级用户版本",example = "upgradeChannel")
 	private String type;
 }

+ 1 - 1
pig-statistics/pig-statistics-biz/src/main/java/com/pig4cloud/pig/statistics/socket/TcpServer.java

@@ -14,7 +14,7 @@ import java.net.Socket;
  * TCP服务器主类,负责监听端口和管理客户端连接
  */
 @Slf4j
-@Component
+//@Component
 public class TcpServer {
 	@Value("${tcp.server.port}")
 	private int port;