peng
昨天 9478f791a1f3a6fa6eb4246c894cfbcd758fef56
用户行为分析初始版
2个文件已修改
8个文件已添加
478 ■■■■■ 已修改文件
buyer-api/src/main/java/cn/lili/controller/lmk/ActionRecordBuyerController.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/entity/ShareAction.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareActionForm.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareActionQuery.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareActionVO.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/enums/general/UserActionPageEnums.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/mapper/ShareActionMapper.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/ShareActionService.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareActionServiceImpl.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/ShareActionMapper.xml 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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() {
framework/src/main/java/cn/lili/modules/lmk/domain/entity/ShareAction.java
New file
@@ -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;
}
framework/src/main/java/cn/lili/modules/lmk/domain/form/ShareActionForm.java
New file
@@ -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;
    }
}
framework/src/main/java/cn/lili/modules/lmk/domain/query/ShareActionQuery.java
New file
@@ -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 {
}
framework/src/main/java/cn/lili/modules/lmk/domain/vo/ShareActionVO.java
New file
@@ -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;
    }
}
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;
framework/src/main/java/cn/lili/modules/lmk/mapper/ShareActionMapper.java
New file
@@ -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);
}
framework/src/main/java/cn/lili/modules/lmk/service/ShareActionService.java
New file
@@ -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();
}
framework/src/main/java/cn/lili/modules/lmk/service/impl/ShareActionServiceImpl.java
New file
@@ -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());
        // 为空抛IllegalArgumentException,做全局异常处理
        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);
    }
}
framework/src/main/resources/mapper/lmk/ShareActionMapper.xml
New file
@@ -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>