Переглянути джерело

针对客户维度的红包领取开关

xw 2 днів тому
батько
коміт
3f32f99e47

+ 3 - 0
fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java

@@ -271,6 +271,9 @@ public class FsUserController extends AppBaseController {
 
         fsUser.setNickName(param.getNickName());
         fsUser.setRemark(param.getRemark());
+        if (param.getRedStatus() != null) {
+            fsUser.setRedStatus(param.getRedStatus());
+        }
         fsUserService.updateFsUser(fsUser);
         return ResponseResult.ok();
     }

+ 3 - 0
fs-company-app/src/main/java/com/fs/app/param/FsUserUpdateParam.java

@@ -23,4 +23,7 @@ public class FsUserUpdateParam {
      */
     @ApiModelProperty("用户备注")
     private String remark;
+
+    @ApiModelProperty("红包领取开关:1开启 0关闭,不传则不修改")
+    private Integer redStatus;
 }

+ 30 - 1
fs-company/src/main/java/com/fs/user/FsUserAdminController.java

@@ -37,6 +37,7 @@ import com.fs.qw.dto.FsUserTransferParamDTO;
 import com.fs.qw.dto.UserProjectDTO;
 import com.fs.qw.service.ICustomerTransferApprovalService;
 import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.user.param.FsUserRedStatusParam;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -46,14 +47,15 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import static com.fs.his.utils.PhoneUtil.encryptPhone;
-import java.util.List;
 
 @Api(tags = "会员管理接口")
 @RestController
@@ -205,6 +207,33 @@ public class FsUserAdminController extends BaseController {
         return toAjax(fsUserCompanyUserService.updateFsUserCompanyUser(fsUser));
     }
 
+    @PreAuthorize("@ss.hasPermi('user:fsUser:edit')")
+    @Log(title = "会员红包领取开关", businessType = BusinessType.UPDATE)
+    @PutMapping("/redStatus")
+    @ApiOperation("修改会员红包领取开关(red_status:1开启 0关闭)")
+    public AjaxResult updateRedStatus(@Valid @RequestBody FsUserRedStatusParam param) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        Long companyId = loginUser.getCompany().getCompanyId();
+        FsUser fsUser = fsUserService.selectFsUserById(param.getUserId());
+        if (fsUser == null) {
+            return AjaxResult.error("用户不存在");
+        }
+        boolean allowed = Objects.equals(fsUser.getCompanyId(), companyId);
+        if (!allowed) {
+            FsUserCompanyUser query = new FsUserCompanyUser();
+            query.setUserId(param.getUserId());
+            query.setCompanyId(companyId);
+            List<FsUserCompanyUser> rel = fsUserCompanyUserService.selectFsUserCompanyUserList(query);
+            allowed = rel != null && !rel.isEmpty();
+        }
+        if (!allowed) {
+            return AjaxResult.error("无权限操作该用户");
+        }
+        FsUser update = new FsUser();
+        update.setUserId(param.getUserId());
+        update.setRedStatus(param.getRedStatus());
+        return toAjax(fsUserService.updateFsUser(update));
+    }
 
     @ApiOperation("后台会员批量发送课程消息")
     @PostMapping("/batchSendCourse")

+ 30 - 0
fs-company/src/main/java/com/fs/user/param/FsUserRedStatusParam.java

@@ -0,0 +1,30 @@
+package com.fs.user.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 修改会员红包领取开关
+ */
+@Data
+@ApiModel("会员红包领取开关参数")
+public class FsUserRedStatusParam {
+
+    @NotNull(message = "用户ID不能为空")
+    @ApiModelProperty(value = "会员 userId(fs_user.user_id)", required = true)
+    private Long userId;
+
+    /**
+     * 1 可领取红包,0 关闭
+     */
+    @NotNull(message = "redStatus不能为空")
+    @Min(0)
+    @Max(1)
+    @ApiModelProperty(value = "红包领取:1开启 0关闭", required = true)
+    private Integer redStatus;
+}

+ 34 - 6
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -1655,9 +1655,11 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                     return sendIntegralReward(param, user, watchLog, config);
                 // 红包+积分
                 case 3:
-                    R sendRed = sendRedPacketReward(param, user, watchLog, video, config);
-                    if (!Objects.equals(sendRed.get("code"), 200)) {
-                        return sendRed;
+                    if (isUserRedPacketReceiveEnabled(user)) {
+                        R sendRed = sendRedPacketReward(param, user, watchLog, video, config);
+                        if (!Objects.equals(sendRed.get("code"), 200)) {
+                            return sendRed;
+                        }
                     }
                     return sendIntegralReward(param, user, watchLog, config);
                 default:
@@ -1803,6 +1805,7 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                     }
                     packetParam.setOpenId(openId);
                     BeanUtils.copyProperties(param, packetParam);
+                    packetParam.setUser(user);
                     return sendAppRedPacket(packetParam, log,video, config);
                 } else {
                     return sendRedPacketRewardFsUser(param, user, log, video, config);
@@ -1812,9 +1815,11 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                 return sendIntegralReward(param, user, log, config);
             // 红包+积分
             case 3:
-                R sendRed = sendRedPacketRewardFsUser(param, user, log, video, config);
-                if (!Objects.equals(sendRed.get("code"), 200)) {
-                    return sendRed;
+                if (isUserRedPacketReceiveEnabled(user)) {
+                    R sendRed = sendRedPacketRewardFsUser(param, user, log, video, config);
+                    if (!Objects.equals(sendRed.get("code"), 200)) {
+                        return sendRed;
+                    }
                 }
                 return sendIntegralReward(param, user, log, config);
             default:
@@ -1834,6 +1839,9 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
      */
     private R sendRedPacketReward(FsCourseSendRewardUParam param, FsUser user, FsCourseWatchLog log, FsUserCourseVideo video, CourseConfig config) {
         logger.info("进入发放红包");
+        if (!isUserRedPacketReceiveEnabled(user)) {
+            return R.ok("恭喜您,答题成功啦 !");
+        }
         // 确定红包金额
         BigDecimal amount = BigDecimal.ZERO;
         FsUserCourseVideoRedPackage redPackage = fsUserCourseVideoRedPackageMapper.selectRedPacketByCompanyId(param.getVideoId(), param.getCompanyId(), param.getPeriodId());
@@ -2201,6 +2209,9 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
             return R.error(403,"已超过领取红包时间");
         }
 
+        if (!isUserRedPacketReceiveEnabled(user)) {
+            return R.ok("恭喜您,答题成功啦 !");
+        }
 
         // 确定红包金额
         BigDecimal amount = BigDecimal.ZERO;
@@ -5103,6 +5114,7 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                 }
                 packetParam.setOpenId(openId);
                 BeanUtils.copyProperties(param, packetParam);
+                packetParam.setUser(user);
 
                 return sendAppRedPacket(packetParam, watchLog,video, config);
             // 积分奖励
@@ -5135,6 +5147,9 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
             }
         }
 
+        if (packetParam.getUser() != null && !isUserRedPacketReceiveEnabled(packetParam.getUser())) {
+            return R.ok("恭喜您,答题成功啦 !");
+        }
 
         // 确定红包金额
         BigDecimal amount = BigDecimal.ZERO;
@@ -5354,5 +5369,18 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
             return R.ok("答题成功!");
         }
     }
+
+    /** 1 可领取红包;0 关闭;null 视为可领取(兼容历史数据) */
+    private boolean isUserRedPacketReceiveEnabled(FsUser user) {
+        if (user == null) {
+            return false;
+        }
+        if (user.getRedStatus() == null) {
+            return true;
+        }
+        return Objects.equals(user.getRedStatus(), 1);
+    }
+
+
 }
 

+ 4 - 0
fs-service/src/main/java/com/fs/his/domain/FsUser.java

@@ -66,6 +66,10 @@ public class FsUser extends BaseEntity
     @Excel(name = "1为正常,0为禁止")
     private Integer status;
 
+    /** 红包领取开关:1 可领取(默认),0 关闭后不允许领取红包 */
+    @ApiModelProperty("红包领取:1开启 0关闭")
+    private Integer redStatus;
+
     /** 推广上级用户ID */
     @Excel(name = "推广上级用户ID")
     private String tuiUserId;

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/vo/h5/FsUserPageListVO.java

@@ -29,6 +29,9 @@ public class FsUserPageListVO {
     @ApiModelProperty(value = "状态:1为正常,0为禁止")
     private Integer status;
 
+    @ApiModelProperty(value = "红包领取:1开启 0关闭")
+    private Integer redStatus;
+
     private String statusText;
 
     @ApiModelProperty(value = "公司id")

+ 1 - 1
fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java

@@ -237,7 +237,7 @@ public interface QwExternalContactMapper extends BaseMapper<QwExternalContact> {
 
     @Select({"<script> " +
             "select ec.*,qu.qw_user_name,qd.dept_name as departmentName,cw.name way_name,wg.group_name way_group_name," +
-            "fu.first_login_app_time as firstLoginAppTime,fu.first_login_reward_address as firstLoginRewardAddress from qw_external_contact ec " +
+            "fu.first_login_app_time as firstLoginAppTime,fu.first_login_reward_address as firstLoginRewardAddress,fu.red_status as redStatus from qw_external_contact ec " +
             "left join qw_user qu on ec.user_id=qu.qw_user_id and qu.corp_id=ec.corp_id " +
             "left join qw_dept qd on qd.dept_id=qu.department and qd.corp_id=qu.corp_id " +
             "left join company_user cu on ec.company_user_id=cu.user_id " +

+ 3 - 0
fs-service/src/main/java/com/fs/qw/vo/QwExternalContactVO.java

@@ -123,6 +123,9 @@ public class QwExternalContactVO {
     private String customerName;
     private Long fsUserId;
 
+    /** 关联 fs_user 红包领取开关:1开启 0关闭;未绑定会员时为 null */
+    private Integer redStatus;
+
     /** 关联小程序用户首次登录 app 时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date firstLoginAppTime;

+ 3 - 0
fs-service/src/main/java/com/fs/store/vo/h5/FsUserPageListVO.java

@@ -30,6 +30,9 @@ public class FsUserPageListVO {
     @ApiModelProperty(value = "状态:1为正常,0为禁止")
     private Integer status;
 
+    @ApiModelProperty(value = "红包领取:1开启 0关闭")
+    private Integer redStatus;
+
     private String statusText;
 
     @ApiModelProperty(value = "公司id")

+ 6 - 0
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="firstLoginAppTime"    column="first_login_app_time"    />
         <result property="firstLoginRewardAddress"    column="first_login_reward_address"    />
         <result property="status"    column="status"    />
+        <result property="redStatus"    column="red_status"    />
         <result property="tuiUserId"    column="tui_user_id"    />
         <result property="tuiTime"    column="tui_time"    />
         <result property="tuiUserCount"    column="tui_user_count"    />
@@ -235,6 +236,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         fs_user.user_id,
         fs_user.avatar,
         fs_user.nick_name as nickname,
+        fs_user.red_status as redStatus,
         fs_user.phone,
         fs_user_course_count.id,
         fs_user_course_count.watch_course_count,
@@ -374,6 +376,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ucu.company_id,
         ucu.project_id,
         fs_user.integral,
+        fs_user.red_status as redStatus,
         (SELECT fucp2.period_name FROM fs_course_watch_log fcwl2
          LEFT JOIN fs_user_course_period fucp2 ON fcwl2.period_id = fucp2.period_id
          WHERE fcwl2.user_id = fs_user.user_id
@@ -575,6 +578,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="integral != null">integral,</if>
             <if test="signNum != null">sign_num,</if>
             <if test="status != null">status,</if>
+            <if test="redStatus != null">red_status,</if>
             <if test="tuiUserId != null">tui_user_id,</if>
             <if test="tuiTime != null">tui_time,</if>
             <if test="tuiUserCount != null">tui_user_count,</if>
@@ -627,6 +631,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="integral != null">#{integral},</if>
             <if test="signNum != null">#{signNum},</if>
             <if test="status != null">#{status},</if>
+            <if test="redStatus != null">#{redStatus},</if>
             <if test="tuiUserId != null">#{tuiUserId},</if>
             <if test="tuiTime != null">#{tuiTime},</if>
             <if test="tuiUserCount != null">#{tuiUserCount},</if>
@@ -685,6 +690,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="firstLoginRewardAddress != null">first_login_reward_address = #{firstLoginRewardAddress},</if>
             <if test="signNum != null">sign_num = #{signNum},</if>
             <if test="status != null">status = #{status},</if>
+            <if test="redStatus != null">red_status = #{redStatus},</if>
             <if test="tuiUserId != null">tui_user_id = #{tuiUserId},</if>
             <if test="tuiTime != null">tui_time = #{tuiTime},</if>
             <if test="tuiUserCount != null">tui_user_count = #{tuiUserCount},</if>

+ 1 - 0
fs-service/src/main/resources/mapper/hisStore/FsUserScrmMapper.xml

@@ -601,6 +601,7 @@
         fs_user.avatar,
         fs_user.phone,
         fs_user.status,
+        fs_user.red_status as redStatus,
         fs_user.create_time,
         fs_user.remark,
         ucu.company_user_id,

+ 1 - 1
fs-user-app/src/main/java/com/fs/app/controller/course/CourseFsUserController.java

@@ -181,7 +181,7 @@ public class CourseFsUserController extends AppBaseController {
         return questionBankService.courseAnswerByFsUser(param);
     }
 
-    @ApiOperation("发放奖励")
+    @ApiOperation("手动发放奖励")
     @PostMapping("/sendReward")
     @UserOperationLog(operationType = FsUserOperationEnum.SENDREWARD)
     @RepeatSubmit

+ 1 - 1
fs-user-app/src/main/java/com/fs/app/controller/course/CourseQwController.java

@@ -252,7 +252,7 @@ public class CourseQwController extends AppBaseController {
 
 
     @Login
-    @ApiOperation("发放奖励")
+    @ApiOperation("自动发放奖励")
     @PostMapping("/sendReward")
     @RepeatSubmit
     @UserOperationLog(operationType = FsUserOperationEnum.SENDREWARD)