From 9478f791a1f3a6fa6eb4246c894cfbcd758fef56 Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期四, 25 九月 2025 14:21:39 +0800 Subject: [PATCH] 用户行为分析初始版 --- framework/src/main/java/cn/lili/modules/lmk/mapper/ShareActionMapper.java | 34 ++++ framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareActionServiceImpl.java | 127 +++++++++++++++ framework/src/main/java/cn/lili/modules/lmk/domain/entity/ShareAction.java | 42 +++++ framework/src/main/java/cn/lili/modules/lmk/enums/general/UserActionPageEnums.java | 12 + framework/src/main/java/cn/lili/modules/lmk/service/ShareActionService.java | 65 ++++++++ framework/src/main/resources/mapper/lmk/ShareActionMapper.xml | 50 ++++++ framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareActionQuery.java | 22 ++ framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareActionForm.java | 52 ++++++ framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareActionVO.java | 51 ++++++ buyer-api/src/main/java/cn/lili/controller/lmk/ActionRecordBuyerController.java | 23 +- 10 files changed, 467 insertions(+), 11 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/ActionRecordBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/ActionRecordBuyerController.java index 940b731..8929dfa 100644 --- a/buyer-api/src/main/java/cn/lili/controller/lmk/ActionRecordBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/lmk/ActionRecordBuyerController.java @@ -1,20 +1,15 @@ package cn.lili.controller.lmk; -import cn.lili.group.Update; +import cn.lili.base.Result; import cn.lili.group.Add; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import lombok.RequiredArgsConstructor; -import java.util.List; -import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotEmpty; +import cn.lili.modules.lmk.domain.form.ActionRecordForm; +import cn.lili.modules.lmk.domain.form.ShareActionForm; +import cn.lili.modules.lmk.service.ActionRecordService; +import cn.lili.modules.lmk.service.ShareActionService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import cn.lili.modules.lmk.service.ActionRecordService; -import cn.lili.base.Result; -import cn.lili.modules.lmk.domain.form.ActionRecordForm; -import cn.lili.modules.lmk.domain.query.ActionRecordQuery; import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; /** @@ -31,12 +26,18 @@ public class ActionRecordBuyerController { private final ActionRecordService actionRecordService; + private final ShareActionService shareActionService; @PostMapping @ApiOperation(value = "娣诲姞", notes = "娣诲姞") public Result add(@RequestBody @Validated(Add.class) ActionRecordForm form) { return actionRecordService.add(form); } + @PostMapping("/share") + @ApiOperation(value = "娣诲姞鍒嗕韩", notes = "娣诲姞鍒嗕韩") + public Result shareAdd(@RequestBody @Validated(Add.class) ShareActionForm form) { + return shareActionService.add(form); + } @GetMapping("/sessionId") @ApiOperation(value = "鑾峰彇浼氳瘽id", notes = "鑾峰彇浼氳瘽id") public Result grantSessionId() { diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ShareAction.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ShareAction.java new file mode 100644 index 0000000..dda7291 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ShareAction.java @@ -0,0 +1,42 @@ +package cn.lili.modules.lmk.domain.entity; + +import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; + +/** + * 鐢ㄦ埛琛屼负鍒嗕韩 + * + * @author peng + * @since 2025-09-25 + */ +@Data +@TableName("lmk_share_action") +public class ShareAction extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableField("user_id") + /** 鐢ㄦ埛id */ + private String userId; + + @TableField("share_option") + /** 鍒嗕韩鍙傛暟 */ + private String shareOption; + + @TableField("page_code") + /** 椤甸潰缂栫爜 */ + private String pageCode; + + @TableField("page_type") + /** 椤甸潰绫诲瀷 */ + private String pageType; + + @TableField("pid") + /** pid */ + private Long pid; + + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareActionForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareActionForm.java new file mode 100644 index 0000000..e2d83b6 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareActionForm.java @@ -0,0 +1,52 @@ +package cn.lili.modules.lmk.domain.form; + +import cn.lili.group.Update; +import cn.lili.group.Add; +import cn.lili.base.AbsForm; +import cn.lili.modules.lmk.domain.entity.ShareAction; +import org.springframework.beans.BeanUtils; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import org.springframework.lang.NonNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 鐢ㄦ埛琛屼负鍒嗕韩琛ㄥ崟 + * + * @author peng + * @since 2025-09-25 + */ +@Data +@ApiModel(value = "ShareAction琛ㄥ崟", description = "鐢ㄦ埛琛屼负鍒嗕韩琛ㄥ崟") +public class ShareActionForm extends AbsForm { + + @ApiModelProperty("鐢ㄦ埛id") + private Long userId; + + @NotBlank(message = "鍒嗕韩鍙傛暟涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鍒嗕韩鍙傛暟") + private String shareOption; + + @NotBlank(message = "椤甸潰缂栫爜涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("椤甸潰缂栫爜") + private String pageCode; + + @NotBlank(message = "椤甸潰绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("椤甸潰绫诲瀷") + private String pageType; + + @ApiModelProperty("pid") + private Long pid; + + public static ShareAction getEntityByForm(@NonNull ShareActionForm form, ShareAction entity) { + if(entity == null) { + entity = new ShareAction(); + } + BeanUtils.copyProperties(form, entity); + return entity; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareActionQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareActionQuery.java new file mode 100644 index 0000000..e5f223a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareActionQuery.java @@ -0,0 +1,22 @@ +package cn.lili.modules.lmk.domain.query; + +import cn.lili.base.AbsQuery; +import java.util.List; +import org.springframework.lang.NonNull; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 鐢ㄦ埛琛屼负鍒嗕韩鏌ヨ + * + * @author peng + * @since 2025-09-25 + */ +@Data +@ApiModel(value = "ShareAction鏌ヨ鍙傛暟", description = "鐢ㄦ埛琛屼负鍒嗕韩鏌ヨ鍙傛暟") +public class ShareActionQuery extends AbsQuery { +} + diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareActionVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareActionVO.java new file mode 100644 index 0000000..a56f517 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareActionVO.java @@ -0,0 +1,51 @@ +package cn.lili.modules.lmk.domain.vo; + +import cn.lili.base.AbsVo; +import cn.lili.modules.lmk.domain.entity.ShareAction; +import java.util.List; +import org.springframework.lang.NonNull; +import org.springframework.beans.BeanUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 鐢ㄦ埛琛屼负鍒嗕韩灞曠ず + * + * @author peng + * @since 2025-09-25 + */ +@Data +@ApiModel(value = "鐢ㄦ埛琛屼负鍒嗕韩鍝嶅簲鏁版嵁", description = "鐢ㄦ埛琛屼负鍒嗕韩鍝嶅簲鏁版嵁") +public class ShareActionVO extends AbsVo { + + /** 鐢ㄦ埛id */ + @ApiModelProperty("鐢ㄦ埛id") + private Long userId; + + /** 鍒嗕韩鍙傛暟 */ + @ApiModelProperty("鍒嗕韩鍙傛暟") + private String shareOption; + + /** 椤甸潰缂栫爜 */ + @ApiModelProperty("椤甸潰缂栫爜") + private String pageCode; + + /** 椤甸潰绫诲瀷 */ + @ApiModelProperty("椤甸潰绫诲瀷") + private String pageType; + + /** pid */ + @ApiModelProperty("pid") + private Long pid; + + public static ShareActionVO getVoByEntity(@NonNull ShareAction entity, ShareActionVO vo) { + if(vo == null) { + vo = new ShareActionVO(); + } + BeanUtils.copyProperties(entity, vo); + return vo; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/UserActionPageEnums.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/UserActionPageEnums.java index c0ca5cc..6bbed37 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/enums/general/UserActionPageEnums.java +++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/UserActionPageEnums.java @@ -16,7 +16,19 @@ ORDER_LIST("璁㈠崟鍒楄〃"), ORDER_DETAIL("璁㈠崟璇︽儏"), ACTIVITY("娲诲姩"), + PRIZE_DETAIL("鎶藉娲诲姩"), + CART_LIST("璐墿杞�"), + TBA_BAR_MY("鎴戠殑椤甸潰"), SHOPPING_SQUARE("鍟嗗搧骞垮満"), + ACTIVITY_LIST("娲诲姩鍒楄〃"), + ACTIVITY_DETAIL("娲诲姩璇︽儏"), + PUBLISH_VIDEO("瑙嗛鍙戝竷"), + SWIPER_GOODS("婊戝姩鍟嗗搧"), + COUPON_CENTER("棰嗗嵎涓績"), + MY_COUPON("鎴戠殑浼樻儬鍗�"), + AFTER_SALE("鍞悗鍒楄〃"), + APPLY_SALE("鐢宠鍞悗"), + REFUND_ORDER("閫�娆�/閫�璐�"), GOODS_DETAILS("鍟嗗搧璇︽儏椤甸潰"); private final String des; diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/ShareActionMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/ShareActionMapper.java new file mode 100644 index 0000000..0581cbb --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/ShareActionMapper.java @@ -0,0 +1,34 @@ +package cn.lili.modules.lmk.mapper; + +import cn.lili.modules.lmk.domain.entity.ShareAction; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.lili.modules.lmk.domain.vo.ShareActionVO; +import cn.lili.modules.lmk.domain.form.ShareActionForm; +import cn.lili.modules.lmk.domain.query.ShareActionQuery; +import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 鐢ㄦ埛琛屼负鍒嗕韩 Mapper 鎺ュ彛 + * + * @author peng + * @since 2025-09-25 + */ +@Mapper +public interface ShareActionMapper extends BaseMapper<ShareAction> { + + /** + * id鏌ユ壘鐢ㄦ埛琛屼负鍒嗕韩 + * @param id + * @return + */ + ShareActionVO getById(String id); + + /** + * 鍒嗛〉 + */ + IPage getPage(IPage page, @Param("query") ShareActionQuery query); + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/ShareActionService.java b/framework/src/main/java/cn/lili/modules/lmk/service/ShareActionService.java new file mode 100644 index 0000000..e75ebad --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/ShareActionService.java @@ -0,0 +1,65 @@ +package cn.lili.modules.lmk.service; + +import cn.lili.modules.lmk.domain.entity.ShareAction; +import com.baomidou.mybatisplus.extension.service.IService; +import cn.lili.base.Result; +import cn.lili.modules.lmk.domain.form.ShareActionForm; +import cn.lili.modules.lmk.domain.query.ShareActionQuery; +import java.util.List; + +/** + * 鐢ㄦ埛琛屼负鍒嗕韩 鏈嶅姟绫� + * + * @author peng + * @since 2025-09-25 + */ +public interface ShareActionService extends IService<ShareAction> { + + /** + * 娣诲姞 + * @param form + * @return + */ + Result add(ShareActionForm form); + + /** + * 淇敼 + * @param form + * @return + */ + Result update(ShareActionForm form); + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + Result remove(List<String> ids); + + /** + * id鍒犻櫎 + * @param id + * @return + */ + Result removeById(String id); + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + Result page(ShareActionQuery query); + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + Result detail(String id); + + /** + * 鍒楄〃 + * @return + */ + Result all(); +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareActionServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareActionServiceImpl.java new file mode 100644 index 0000000..acb7525 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareActionServiceImpl.java @@ -0,0 +1,127 @@ +package cn.lili.modules.lmk.service.impl; + +import cn.lili.common.security.AuthUser; +import cn.lili.common.security.context.UserContext; +import com.baomidou.mybatisplus.core.metadata.IPage; +import cn.lili.modules.lmk.domain.entity.ShareAction; +import cn.lili.modules.lmk.mapper.ShareActionMapper; +import cn.lili.modules.lmk.service.ShareActionService; +import cn.lili.base.Result; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.lili.modules.lmk.domain.form.ShareActionForm; +import cn.lili.modules.lmk.domain.vo.ShareActionVO; +import cn.lili.modules.lmk.domain.query.ShareActionQuery; +import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; +import cn.lili.utils.PageUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 鐢ㄦ埛琛屼负鍒嗕韩 鏈嶅姟瀹炵幇绫� + * + * @author peng + * @since 2025-09-25 + */ +@Service +@RequiredArgsConstructor +public class ShareActionServiceImpl extends ServiceImpl<ShareActionMapper, ShareAction> implements ShareActionService { + + private final ShareActionMapper shareActionMapper; + + /** + * 娣诲姞 + * @param form + * @return + */ + @Override + public Result add(ShareActionForm form) { + AuthUser currentUser = UserContext.getCurrentUser(); + if (currentUser == null) { + return Result.ok(); + } + + ShareAction entity = ShareActionForm.getEntityByForm(form, null); + entity.setUserId(currentUser.getId()); + baseMapper.insert(entity); + return Result.ok("娣诲姞鎴愬姛").data(entity.getId()); + } + + /** + * 淇敼 + * @param form + * @return + */ + @Override + public Result update(ShareActionForm form) { + ShareAction entity = baseMapper.selectById(form.getId()); + + // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 + Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); + BeanUtils.copyProperties(form, entity); + baseMapper.updateById(entity); + return Result.ok("淇敼鎴愬姛"); + } + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + @Override + public Result remove(List<String> ids) { + baseMapper.deleteBatchIds(ids); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * id鍒犻櫎 + * @param id + * @return + */ + @Override + public Result removeById(String id) { + baseMapper.deleteById(id); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + @Override + public Result page(ShareActionQuery query) { + IPage<ShareActionVO> page = PageUtil.getPage(query, ShareActionVO.class); + baseMapper.getPage(page, query); + return Result.ok().data(page.getRecords()).total(page.getTotal()); + } + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + @Override + public Result detail(String id) { + ShareActionVO vo = baseMapper.getById(id); + Assert.notNull(vo, "璁板綍涓嶅瓨鍦�"); + return Result.ok().data(vo); + } + + /** + * 鍒楄〃 + * @return + */ + @Override + public Result all() { + List<ShareAction> entities = baseMapper.selectList(null); + List<ShareActionVO> vos = entities.stream() + .map(entity -> ShareActionVO.getVoByEntity(entity, null)) + .collect(Collectors.toList()); + return Result.ok().data(vos); + } +} diff --git a/framework/src/main/resources/mapper/lmk/ShareActionMapper.xml b/framework/src/main/resources/mapper/lmk/ShareActionMapper.xml new file mode 100644 index 0000000..62dddf8 --- /dev/null +++ b/framework/src/main/resources/mapper/lmk/ShareActionMapper.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cn.lili.modules.lmk.mapper.ShareActionMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.ShareActionVO"> + <id column="id" property="id"/> + <result column="user_id" property="userId" /> + <result column="share_option" property="shareOption" /> + <result column="page_code" property="pageCode" /> + <result column="page_type" property="pageType" /> + <result column="pid" property="pid" /> + </resultMap> + + + + + + + + <select id="getById" resultMap="BaseResultMap"> + SELECT + LSA.user_id, + LSA.share_option, + LSA.page_code, + LSA.page_type, + LSA.pid, + LSA.id + FROM + lmk_share_action LSA + WHERE + LSA.id = #{id} AND LSA.delete_flag = 0 + </select> + + + <select id="getPage" resultMap="BaseResultMap"> + SELECT + LSA.user_id, + LSA.share_option, + LSA.page_code, + LSA.page_type, + LSA.pid, + LSA.id + FROM + lmk_share_action LSA + WHERE + LSA.delete_flag = 0 + </select> + +</mapper> -- Gitblit v1.8.0