Browse Source

增加小程序端部分接口

cgp 2 days ago
parent
commit
3d28a06393

+ 21 - 0
fs-service/src/main/java/com/fs/his/dto/CollectionUserPhoneDTO.java

@@ -0,0 +1,21 @@
+package com.fs.his.dto;
+
+import lombok.Data;
+
+@Data
+public class CollectionUserPhoneDTO {
+    /**
+     * 微信用户id
+     * */
+    private String userId;
+
+    /**
+     * 用户手机号码
+     * */
+    private String userPhone;
+
+    /**
+     * 销售id
+     * */
+    private Long companyUserId;
+}

+ 13 - 0
fs-service/src/main/java/com/fs/his/vo/QrcRedPackageConfigVO.java

@@ -0,0 +1,13 @@
+package com.fs.his.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+/**
+ * 收集客户收集号二维码的红包配置
+ * */
+@Data
+public class QrcRedPackageConfigVO {
+    private Integer open;
+    private BigDecimal amount;
+}

+ 29 - 0
fs-service/src/main/java/com/fs/qw/domain/FsCompanyQrcPhone.java

@@ -0,0 +1,29 @@
+package com.fs.qw.domain;
+
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * 二维码收集用户手机号表
+ * 
+ * @author fs
+ */
+@Data
+public class FsCompanyQrcPhone {
+    /** 主键ID */
+    private Long id;
+    /** 销售人员id */
+    private Long companyUserId;
+    /** 客户手机号 */
+    private String userPhone;
+    /** 微信用户id(微信那边生成的) */
+    private String userId;
+    /** 创建时间 */
+    private Date createTime;
+    /** 创建人 */
+    private String createBy;
+    /** 更新时间 */
+    private Date updateTime;
+    /** 更新人 */
+    private String updateBy;
+}

+ 40 - 0
fs-service/src/main/java/com/fs/qw/domain/FsCompanyQrcRedPackageRecord.java

@@ -0,0 +1,40 @@
+package com.fs.qw.domain;
+
+import lombok.Data;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 分享二维码客户领取红包记录表
+ * 
+ * @author fs
+ */
+@Data
+public class FsCompanyQrcRedPackageRecord {
+    /** 主键ID */
+    private Integer id;
+    /** 红包金额 */
+    private BigDecimal amount;
+    /** 发放时间 */
+    private Date sendTime;
+    /** 领取时间 */
+    private Date collectTime;
+    /** 领取状态(0-已发放 1-已领取 2-已失效) */
+    private String collectType;
+    /** 微信用户id(微信那边生成的) */
+    private String userId;
+    /** 领取手机号 */
+    private String userPhone;
+    /** 销售人员id */
+    private Long companyUserId;
+    /** 微信批次ID */
+    private String batchId;
+    /** 公司ID */
+    private Long companyId;
+    /** 公司名称 */
+    private String companyName;
+    /** 创建时间 */
+    private Date createTime;
+    /** 更新时间 */
+    private Date updateTime;
+}

+ 38 - 0
fs-service/src/main/java/com/fs/qw/mapper/FsCompanyQrcPhoneMapper.java

@@ -0,0 +1,38 @@
+package com.fs.qw.mapper;
+
+import com.fs.qw.domain.FsCompanyQrcPhone;
+import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
+/**
+ * 收集手机号记录 Mapper 接口
+ * 
+ * @author fs
+ */
+public interface FsCompanyQrcPhoneMapper {
+
+    /**
+     * 根据主键查询
+     */
+    FsCompanyQrcPhone selectById(@Param("id") Long id);
+
+    /**
+     * 查询全部记录
+     */
+    List<FsCompanyQrcPhone> selectList(FsCompanyQrcPhone record);
+
+    /**
+     * 新增记录
+     */
+    int insert(FsCompanyQrcPhone record);
+
+    /**
+     * 更新记录(动态更新非空字段)
+     */
+    int updateById(FsCompanyQrcPhone record);
+
+    /**
+     * 根据主键删除
+     */
+    int deleteById(@Param("id") Long id);
+}

+ 44 - 0
fs-service/src/main/java/com/fs/qw/mapper/FsCompanyQrcRedPackageRecordMapper.java

@@ -0,0 +1,44 @@
+package com.fs.qw.mapper;
+
+import com.fs.qw.domain.FsCompanyQrcRedPackageRecord;
+import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
+/**
+ * 红包领取记录 Mapper 接口
+ * 
+ * @author fs
+ */
+public interface FsCompanyQrcRedPackageRecordMapper {
+
+    /**
+     * 根据主键查询
+     */
+    FsCompanyQrcRedPackageRecord selectById(@Param("id") Integer id);
+
+    /**
+     * 查询全部记录
+     */
+    List<FsCompanyQrcRedPackageRecord> selectList(FsCompanyQrcRedPackageRecord record);
+
+    /**
+     * 新增记录
+     */
+    int insert(FsCompanyQrcRedPackageRecord record);
+
+    /**
+     * 更新记录(动态更新非空字段)
+     */
+    int updateById(FsCompanyQrcRedPackageRecord record);
+
+    /**
+     * 根据主键删除
+     */
+    int deleteById(@Param("id") Integer id);
+
+    /**
+     * 根据用户id查询用户是领取分享二维码红包详情
+     * 一个用户id只能领取一次红包
+     * */
+    FsCompanyQrcRedPackageRecord getRedPackageRecordByUserId(String userId);
+}

+ 49 - 0
fs-service/src/main/java/com/fs/qw/service/IFsCompanyQrcPhoneService.java

@@ -0,0 +1,49 @@
+package com.fs.qw.service;
+
+import com.fs.his.dto.CollectionUserPhoneDTO;
+import com.fs.his.vo.QrcRedPackageConfigVO;
+import com.fs.qw.domain.FsCompanyQrcPhone;
+import java.util.List;
+
+/**
+ * 收集手机号记录 Service 接口
+ * 
+ * @author fs
+ */
+public interface IFsCompanyQrcPhoneService {
+
+    /**
+     * 根据主键查询
+     */
+    FsCompanyQrcPhone selectById(Long id);
+
+    /**
+     * 查询列表
+     */
+    List<FsCompanyQrcPhone> selectList(FsCompanyQrcPhone record);
+
+    /**
+     * 新增
+     */
+    int insert(FsCompanyQrcPhone record);
+
+    /**
+     * 更新
+     */
+    int update(FsCompanyQrcPhone record);
+
+    /**
+     * 删除
+     */
+    int deleteById(Long id);
+
+    /**
+     * 提交收集的客户手机号
+     */
+    int submitPhone(CollectionUserPhoneDTO userPhoneDTO);
+
+    /**
+     * 获取分享二维码配置中的红包金额
+     */
+    QrcRedPackageConfigVO getQrcRedPackageConfigAmount();
+}

+ 49 - 0
fs-service/src/main/java/com/fs/qw/service/IFsCompanyQrcRedPackageRecordService.java

@@ -0,0 +1,49 @@
+package com.fs.qw.service;
+
+import com.fs.his.dto.CollectionUserPhoneDTO;
+import com.fs.qw.domain.FsCompanyQrcRedPackageRecord;
+import java.util.List;
+
+/**
+ * 红包领取记录 Service 接口
+ * 
+ * @author fs
+ */
+public interface IFsCompanyQrcRedPackageRecordService {
+
+    /**
+     * 根据主键查询
+     */
+    FsCompanyQrcRedPackageRecord selectById(Integer id);
+
+    /**
+     * 查询列表(可传入条件对象)
+     */
+    List<FsCompanyQrcRedPackageRecord> selectList(FsCompanyQrcRedPackageRecord record);
+
+    /**
+     * 新增
+     */
+    int insert(FsCompanyQrcRedPackageRecord record);
+
+    /**
+     * 更新
+     */
+    int update(FsCompanyQrcRedPackageRecord record);
+
+    /**
+     * 删除
+     */
+    int deleteById(Integer id);
+
+    /**
+     * 根据用户id查询用户是领取分享二维码红包详情
+     * 一个用户id只能领取一次红包
+     * */
+    FsCompanyQrcRedPackageRecord getRedPackageRecordByUserId(String userId);
+
+    /**
+     * 领取红包
+     */
+    int claimRedPacket(String userId);
+}

+ 115 - 0
fs-service/src/main/java/com/fs/qw/service/impl/FsCompanyQrcPhoneServiceImpl.java

@@ -0,0 +1,115 @@
+package com.fs.qw.service.impl;
+
+
+import com.fs.common.BeanCopyUtils;
+import com.fs.common.exception.CustomException;
+import com.fs.common.utils.DateUtils;
+import com.fs.his.dto.CollectionUserPhoneDTO;
+import com.fs.his.vo.QrcRedPackageConfigVO;
+import com.fs.qw.domain.FsCompanyQrcPhone;
+import com.fs.qw.domain.FsCompanyQrcRedPackageRecord;
+import com.fs.qw.mapper.FsCompanyQrcPhoneMapper;
+import com.fs.qw.service.IFsCompanyQrcPhoneService;
+import com.fs.qw.service.IFsCompanyQrcRedPackageRecordService;
+import com.fs.system.service.ISysConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 收集手机号记录 Service 实现
+ * 
+ * @author fs
+ */
+@Slf4j
+@Service
+public class FsCompanyQrcPhoneServiceImpl implements IFsCompanyQrcPhoneService {
+
+    @Autowired
+    private FsCompanyQrcPhoneMapper phoneMapper;
+
+    @Autowired
+    private IFsCompanyQrcRedPackageRecordService redPackageRecordService;
+
+    @Autowired
+    private ISysConfigService sysConfigService;
+
+    private static final String QRC_RED_PACKAGE_CONFIG_KEY = "qrcRedPackage.config";
+
+    @Override
+    public FsCompanyQrcPhone selectById(Long id) {
+        return phoneMapper.selectById(id);
+    }
+
+    @Override
+    public List<FsCompanyQrcPhone> selectList(FsCompanyQrcPhone record) {
+        return phoneMapper.selectList(record);
+    }
+
+    @Override
+    public int insert(FsCompanyQrcPhone qrcPhone) {
+        try {
+            return phoneMapper.insert(qrcPhone);
+        } catch (DuplicateKeyException e) {
+            throw new CustomException("用户已注册过此小程序");
+        }
+    }
+
+    @Override
+    public int update(FsCompanyQrcPhone qrcPhone) {
+        return phoneMapper.updateById(qrcPhone);
+    }
+
+    @Override
+    public int deleteById(Long id) {
+        return phoneMapper.deleteById(id);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int submitPhone(CollectionUserPhoneDTO userPhoneDTO) {
+        // 1. 构建手机号记录
+        FsCompanyQrcPhone qrcPhone = new FsCompanyQrcPhone();
+        BeanCopyUtils.copy(userPhoneDTO, qrcPhone);
+        qrcPhone.setCreateTime(DateUtils.getNowDate());
+        // 2. 插入手机号(捕获唯一键冲突)
+        try {
+            phoneMapper.insert(qrcPhone);
+        } catch (DuplicateKeyException e) {
+            throw new CustomException("用户已注册过此小程序");
+        }
+        // 3. 下发待领取红包记录(只新增记录,不实际发红包)
+        FsCompanyQrcRedPackageRecord redPackageRecord = buildRedPackageRecord(userPhoneDTO);
+        redPackageRecordService.insert(redPackageRecord);
+        // 4. 返回成功
+        return 1;
+    }
+
+    /**
+     * 获取分享二维码配置中的红包金额
+     */
+    @Override
+    public QrcRedPackageConfigVO getQrcRedPackageConfigAmount() {
+        return sysConfigService.getConfig(QRC_RED_PACKAGE_CONFIG_KEY, QrcRedPackageConfigVO.class);
+    }
+
+    private FsCompanyQrcRedPackageRecord buildRedPackageRecord(CollectionUserPhoneDTO userPhoneDTO) {
+        FsCompanyQrcRedPackageRecord redPackageRecord=new FsCompanyQrcRedPackageRecord();
+        redPackageRecord.setUserId(userPhoneDTO.getUserId());
+        redPackageRecord.setCompanyUserId(userPhoneDTO.getCompanyUserId());
+        QrcRedPackageConfigVO qrcRedPackageConfigAmount = getQrcRedPackageConfigAmount();
+        if (BigDecimal.ONE.intValue()==qrcRedPackageConfigAmount.getOpen()){
+            redPackageRecord.setAmount(qrcRedPackageConfigAmount.getAmount());//红包金额
+        }else {
+            redPackageRecord.setAmount(BigDecimal.ZERO);
+        }
+        redPackageRecord.setCreateTime(DateUtils.getNowDate());
+        return redPackageRecord;
+    }
+
+}

+ 75 - 0
fs-service/src/main/java/com/fs/qw/service/impl/FsCompanyQrcRedPackageRecordServiceImpl.java

@@ -0,0 +1,75 @@
+package com.fs.qw.service.impl;
+
+import com.fs.common.exception.CustomException;
+import com.fs.common.utils.DateUtils;
+import com.fs.qw.domain.FsCompanyQrcRedPackageRecord;
+import com.fs.qw.mapper.FsCompanyQrcRedPackageRecordMapper;
+import com.fs.qw.service.IFsCompanyQrcRedPackageRecordService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 红包领取记录 Service 实现
+ * 
+ * @author fs
+ */
+@Slf4j
+@Service
+public class FsCompanyQrcRedPackageRecordServiceImpl implements IFsCompanyQrcRedPackageRecordService {
+
+    @Autowired
+    private FsCompanyQrcRedPackageRecordMapper recordMapper;
+
+    @Override
+    public FsCompanyQrcRedPackageRecord selectById(Integer id) {
+        return recordMapper.selectById(id);
+    }
+
+    @Override
+    public List<FsCompanyQrcRedPackageRecord> selectList(FsCompanyQrcRedPackageRecord record) {
+        return recordMapper.selectList(record);
+    }
+
+    @Override
+    public int insert(FsCompanyQrcRedPackageRecord record) {
+        try {
+            return recordMapper.insert(record);
+        } catch (DuplicateKeyException e) {
+            throw new CustomException("用户已领取过红包,请勿重复领取");
+        }
+    }
+
+    @Override
+    public int update(FsCompanyQrcRedPackageRecord record) {
+        return recordMapper.updateById(record);
+    }
+
+    @Override
+    public int deleteById(Integer id) {
+        return recordMapper.deleteById(id);
+    }
+
+    @Override
+    public FsCompanyQrcRedPackageRecord getRedPackageRecordByUserId(String userId) {
+        return recordMapper.getRedPackageRecordByUserId(userId);
+    }
+
+    @Override
+    public int claimRedPacket(String userId) {
+        FsCompanyQrcRedPackageRecord record=recordMapper.getRedPackageRecordByUserId(userId);
+        if (record==null){
+            throw new CustomException("用户没有待领取的红包记录");
+        }
+        if (("1").equals(record.getCollectType())){
+            throw new CustomException("用户已领取过红包,请勿重复领取");
+        }
+        //TODO 真实发送红包逻辑待完善
+        record.setUpdateTime(DateUtils.getNowDate());
+        return recordMapper.updateById(record);
+
+    }
+}

+ 5 - 0
fs-service/src/main/java/com/fs/system/service/ISysConfigService.java

@@ -89,4 +89,9 @@ public interface ISysConfigService
     public String checkConfigKeyUnique(SysConfig config);
 
     SysConfig selectConfigByConfigKey(String configKey);
+
+    /**
+     * 根据key获取配置
+     * */
+    public <T> T getConfig(String configKey, Class<T> clazz);
 }

+ 19 - 1
fs-service/src/main/java/com/fs/system/service/impl/SysConfigServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.system.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.fs.common.annotation.DataSource;
 import com.fs.common.constant.Constants;
 import com.fs.common.constant.UserConstants;
@@ -11,6 +12,7 @@ import com.fs.common.utils.StringUtils;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
 import com.fs.system.service.ISysConfigService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import javax.annotation.PostConstruct;
@@ -22,8 +24,9 @@ import java.util.concurrent.ConcurrentHashMap;
 /**
  * 参数配置 服务层实现
  *
-
  */
+
+@Slf4j
 @Service
 @ThreadSafe
 public class SysConfigServiceImpl implements ISysConfigService
@@ -234,6 +237,21 @@ public class SysConfigServiceImpl implements ISysConfigService
         return configMapper.selectConfigByConfigKey(configKey);
     }
 
+    @Override
+    public <T> T getConfig(String configKey, Class<T> clazz) {
+        String json = selectConfigByKey(configKey);
+        if (StringUtils.isBlank(json)) {
+            log.warn("系统配置为空, configKey={}", configKey);
+            return null;
+        }
+        try {
+            return JSON.parseObject(json, clazz);
+        } catch (Exception e) {
+            log.error("解析系统配置失败, configKey={}, json={}", configKey, json, e);
+            return null;
+        }
+    }
+
     /**
      * 设置cache key
      *

+ 72 - 0
fs-service/src/main/resources/mapper/qw/FsCompanyQrcPhoneMapper.xml

@@ -0,0 +1,72 @@
+<?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="com.fs.qw.mapper.FsCompanyQrcPhoneMapper">
+
+    <!-- 结果映射 -->
+    <resultMap id="BaseResultMap" type="com.fs.qw.domain.FsCompanyQrcPhone">
+        <id column="id" property="id" />
+        <result column="company_user_id" property="companyUserId" />
+        <result column="user_phone" property="userPhone" />
+        <result column="user_id" property="userId" />
+        <result column="create_time" property="createTime" />
+        <result column="create_by" property="createBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_by" property="updateBy" />
+    </resultMap>
+
+    <!-- 基础字段 -->
+    <sql id="Base_Column_List">
+        id, company_user_id, user_phone, user_id, create_time, create_by, update_time, update_by
+    </sql>
+
+    <!-- 根据主键查询 -->
+    <select id="selectById" resultMap="BaseResultMap">
+        SELECT <include refid="Base_Column_List" />
+        FROM fs_company_qrc_phone
+        WHERE id = #{id}
+    </select>
+
+    <!-- 条件查询 -->
+    <select id="selectList" resultMap="BaseResultMap">
+        SELECT <include refid="Base_Column_List" />
+        FROM fs_company_qrc_phone
+        <where>
+            <if test="companyUserId != null">AND company_user_id = #{companyUserId}</if>
+            <if test="userPhone != null and userPhone != ''">AND user_phone = #{userPhone}</if>
+            <if test="userId != null and userId != ''">AND user_id = #{userId}</if>
+            <if test="createBy != null and createBy != ''">AND create_by = #{createBy}</if>
+            <if test="updateBy != null and updateBy != ''">AND update_by = #{updateBy}</if>
+        </where>
+        ORDER BY create_time DESC
+    </select>
+
+    <!-- 新增(主键自增,无需插入) -->
+    <insert id="insert" parameterType="com.fs.qw.domain.FsCompanyQrcPhone" useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO fs_company_qrc_phone (
+            company_user_id, user_phone, user_id, create_time, create_by, update_time, update_by
+        ) VALUES (
+                     #{companyUserId}, #{userPhone}, #{userId}, #{createTime}, #{createBy}, #{updateTime}, #{updateBy}
+                 )
+    </insert>
+
+    <!-- 动态更新 -->
+    <update id="updateById" parameterType="com.fs.qw.domain.FsCompanyQrcPhone">
+        UPDATE fs_company_qrc_phone
+        <set>
+            <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="userPhone != null and userPhone != ''">user_phone = #{userPhone},</if>
+            <if test="userId != null and userId != ''">user_id = #{userId},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+        </set>
+        WHERE id = #{id}
+    </update>
+
+    <!-- 删除 -->
+    <delete id="deleteById">
+        DELETE FROM fs_company_qrc_phone WHERE id = #{id}
+    </delete>
+
+</mapper>

+ 97 - 0
fs-service/src/main/resources/mapper/qw/FsCompanyQrcRedPackageRecordMapper.xml

@@ -0,0 +1,97 @@
+<?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="com.fs.qw.mapper.FsCompanyQrcRedPackageRecordMapper">
+
+    <!-- 结果映射 -->
+    <resultMap id="BaseResultMap" type="com.fs.qw.domain.FsCompanyQrcRedPackageRecord">
+        <id column="id" property="id" />
+        <result column="amount" property="amount" />
+        <result column="send_time" property="sendTime" />
+        <result column="collect_time" property="collectTime" />
+        <result column="collect_type" property="collectType" />
+        <result column="user_id" property="userId" />
+        <result column="user_phone" property="userPhone" />
+        <result column="company_user_id" property="companyUserId" />
+        <result column="batch_id" property="batchId" />
+        <result column="company_id" property="companyId" />
+        <result column="company_name" property="companyName" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+    <!-- 基础字段 -->
+    <sql id="Base_Column_List">
+        id, amount, send_time, collect_time, collect_type, user_id, user_phone,
+        company_user_id, batch_id, company_id, company_name, create_time, update_time
+    </sql>
+
+    <!-- 根据主键查询 -->
+    <select id="selectById" resultMap="BaseResultMap">
+        SELECT <include refid="Base_Column_List" />
+        FROM fs_company_qrc_red_package_record
+        WHERE id = #{id}
+    </select>
+
+    <!-- 条件查询(非空字段作为条件) -->
+    <select id="selectList" resultMap="BaseResultMap">
+        SELECT <include refid="Base_Column_List" />
+        FROM fs_company_qrc_red_package_record
+        <where>
+            <if test="amount != null">AND amount = #{amount}</if>
+            <if test="sendTime != null">AND send_time = #{sendTime}</if>
+            <if test="collectTime != null">AND collect_time = #{collectTime}</if>
+            <if test="collectType != null and collectType != ''">AND collect_type = #{collectType}</if>
+            <if test="userId != null and userId != ''">AND user_id = #{userId}</if>
+            <if test="userPhone != null and userPhone != ''">AND user_phone = #{userPhone}</if>
+            <if test="companyUserId != null">AND company_user_id = #{companyUserId}</if>
+            <if test="batchId != null and batchId != ''">AND batch_id = #{batchId}</if>
+            <if test="companyId != null">AND company_id = #{companyId}</if>
+            <if test="companyName != null and companyName != ''">AND company_name = #{companyName}</if>
+        </where>
+        ORDER BY create_time DESC
+    </select>
+
+    <select id="getRedPackageRecordByUserId" resultType="com.fs.qw.domain.FsCompanyQrcRedPackageRecord">
+        SELECT <include refid="Base_Column_List" />
+            FROM fs_company_qrc_red_package_record
+        WHERE user_id = #{userId}
+    </select>
+
+    <!-- 新增(所有字段,主键需自行赋值或使用自增) -->
+    <insert id="insert" parameterType="com.fs.qw.domain.FsCompanyQrcRedPackageRecord">
+        INSERT INTO fs_company_qrc_red_package_record (
+            id, amount, send_time, collect_time, collect_type, user_id,
+            user_phone, company_user_id, batch_id, company_id, company_name,
+            create_time, update_time
+        ) VALUES (
+                     #{id}, #{amount}, #{sendTime}, #{collectTime}, #{collectType}, #{userId},
+                     #{userPhone}, #{companyUserId}, #{batchId}, #{companyId}, #{companyName},
+                     #{createTime}, #{updateTime}
+                 )
+    </insert>
+
+    <!-- 动态更新(根据主键,非空字段更新) -->
+    <update id="updateById" parameterType="com.fs.qw.domain.FsCompanyQrcRedPackageRecord">
+        UPDATE fs_company_qrc_red_package_record
+        <set>
+            <if test="amount != null">amount = #{amount},</if>
+            <if test="sendTime != null">send_time = #{sendTime},</if>
+            <if test="collectTime != null">collect_time = #{collectTime},</if>
+            <if test="collectType != null and collectType != ''">collect_type = #{collectType},</if>
+            <if test="userId != null and userId != ''">user_id = #{userId},</if>
+            <if test="userPhone != null and userPhone != ''">user_phone = #{userPhone},</if>
+            <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="batchId != null and batchId != ''">batch_id = #{batchId},</if>
+            <if test="companyId != null">company_id = #{companyId},</if>
+            <if test="companyName != null and companyName != ''">company_name = #{companyName},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </set>
+        WHERE id = #{id}
+    </update>
+
+    <!-- 删除 -->
+    <delete id="deleteById">
+        DELETE FROM fs_company_qrc_red_package_record WHERE id = #{id}
+    </delete>
+
+</mapper>

+ 40 - 7
fs-user-app/src/main/java/com/fs/app/controller/store/FsShareMaterialController.java

@@ -3,12 +3,12 @@ package com.fs.app.controller.store;
 
 import com.fs.common.core.domain.R;
 import com.fs.his.domain.FsShareMaterial;
+import com.fs.his.dto.CollectionUserPhoneDTO;
 import com.fs.his.service.IFsShareMaterialService;
+import com.fs.qw.service.IFsCompanyQrcPhoneService;
+import com.fs.qw.service.IFsCompanyQrcRedPackageRecordService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
 /**
@@ -18,19 +18,52 @@ import org.springframework.web.bind.annotation.RestController;
  * @date 2026-06-25
  */
 @RestController
-@RequestMapping("/store/app/shareMaterial")
+@RequestMapping("/store/app/collectionPhone")
 public class FsShareMaterialController
 {
     @Autowired
-    private IFsShareMaterialService fsShareMaterialService;
+    private IFsShareMaterialService shareMaterialService;
+
+    @Autowired
+    private IFsCompanyQrcPhoneService companyQrcPhoneService;
+
+    @Autowired
+    private IFsCompanyQrcRedPackageRecordService companyQrcRedPackageRecordService;
 
     /**
      * 根据素材id查询素材类型以及url
      * */
     @GetMapping("/getShareMaterial/{materialId}")
     public R shareMaterialOptions(@PathVariable Long materialId){
-        FsShareMaterial fsShareMaterial = fsShareMaterialService.selectFsShareMaterialById(materialId);
+        FsShareMaterial fsShareMaterial = shareMaterialService.selectFsShareMaterialById(materialId);
         return R.ok().put("data",fsShareMaterial);
     }
 
+    /**
+     * 提交收集的客户手机号
+     */
+    @PostMapping("/submitPhone")
+    public R submitPhone(@RequestBody CollectionUserPhoneDTO userPhoneDTO){
+        int result = companyQrcPhoneService.submitPhone(userPhoneDTO);
+        return result>0?R.ok():R.error("提交失败");
+    }
+
+    /**
+     * 根据微信用户id查询用户是领取分享二维码红包详情
+     * 一个用户id只能领取一次红包
+     * */
+    @GetMapping("/getRedPackageRecord/{userId}")
+    public R getRedPackageRecord(@PathVariable String userId){
+        return R.ok().put("data",companyQrcRedPackageRecordService.getRedPackageRecordByUserId(userId));
+    }
+
+    /**
+     * 客户点击领取红包
+     * */
+    @GetMapping("/claimRedPacket/{userId}")
+    public R claimRedPacket(@PathVariable String userId){
+        int result = companyQrcRedPackageRecordService.claimRedPacket(userId);
+        return result>0?R.ok():R.error("领取失败");
+    }
+
 }