Explorar el Código

同步小黑屋代码

Long hace 2 semanas
padre
commit
a7a73ed003

+ 20 - 0
fs-admin/src/main/java/com/fs/his/controller/FsUserController.java

@@ -3,6 +3,7 @@ package com.fs.his.controller;
 import java.util.List;
 
 import com.fs.common.core.domain.R;
+import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.utils.ParseUtils;
 import com.fs.common.utils.SecurityUtils;
 import com.fs.his.domain.FsUserAddress;
@@ -11,6 +12,9 @@ import com.fs.his.utils.PhoneUtil;
 import com.fs.his.vo.FsUserExportListVO;
 import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.UserVo;
+import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.vo.h5.FsUserPageListVO;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -183,5 +187,21 @@ public class FsUserController extends BaseController
         return R.ok().put("data",list);
     }
 
+    @PreAuthorize("@ss.hasPermi('his:user:darkRoomList')")
+    @GetMapping("/darkRoomList")
+    @ApiOperation("小黑屋")
+    public TableDataInfo darkRoomList(FsUserPageListParam param) {
+        startPage();
+        List<FsUserPageListVO> list = fsUserService.selectFsUserPageList(param);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('his:user:enabledUsers')")
+    @PostMapping("/enabledUsers")
+    @ApiOperation("批量启用会员")
+    public ResponseResult<Boolean> enabledUsers(@RequestBody String[] ids) {
+        Boolean r = fsUserService.disabledUser(ids, true);
+        return ResponseResult.ok(r);
+    }
 
 }

+ 27 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsUserController.java

@@ -3,11 +3,14 @@ package com.fs.company.controller.store;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.security.SecurityUtils;
+import com.fs.framework.service.TokenService;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserAddress;
 import com.fs.his.param.FsUserParam;
@@ -15,6 +18,9 @@ import com.fs.his.service.IFsUserService;
 import com.fs.his.vo.FsUserExportListVO;
 import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.UserVo;
+import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.vo.h5.FsUserPageListVO;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -36,6 +42,9 @@ public class FsUserController extends BaseController
 {
     @Autowired
     private IFsUserService fsUserService;
+    @Autowired
+    private TokenService tokenService;
+
     /**
      * 查询用户列表
      */
@@ -214,5 +223,23 @@ public class FsUserController extends BaseController
         return getDataTable(list);
     }
 
+    @PreAuthorize("@ss.hasPermi('users:user:darkRoomList')")
+    @GetMapping("/darkRoomList")
+    @ApiOperation("小黑屋")
+    public TableDataInfo darkRoomList(FsUserPageListParam param) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setUserId(loginUser.getUser().getUserId());
+        startPage();
+        List<FsUserPageListVO> list = fsUserService.selectFsUserPageList(param);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('users:user:enabledUsers')")
+    @PostMapping("/enabledUsers")
+    @ApiOperation("批量启用会员")
+    public ResponseResult<Boolean> enabledUsers(@RequestBody String[] ids) {
+        Boolean r = fsUserService.disabledUser(ids, true);
+        return ResponseResult.ok(r);
+    }
 
 }

+ 6 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java

@@ -10,6 +10,8 @@ import com.fs.his.vo.FsUserExportListVO;
 import com.fs.his.vo.FsUserVO;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
+import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.vo.h5.FsUserPageListVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
@@ -243,4 +245,8 @@ public interface FsUserMapper
     List<FsCourseAnalysisCountVO> courseAnalysisAnswerCount(CourseAnalysisParam param);
 
     FsUser selectFsUserById(@Param("userId") Long userId);
+
+    int batchUpdateFsUserByIds(@Param("ids") String[] ids, @Param("status") Integer status);
+
+    List<FsUserPageListVO> selectFsUserPageList(FsUserPageListParam param);
 }

+ 6 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserService.java

@@ -14,6 +14,8 @@ import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.UserVo;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
+import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.vo.h5.FsUserPageListVO;
 
 /**
  * 用户Service接口
@@ -118,4 +120,8 @@ public interface IFsUserService
     FsUser selectFsUserByMpOpenId(String openId);
 
     void setRepeatFansTag(FsUserCourseBeMemberParam param);
+
+    List<FsUserPageListVO> selectFsUserPageList(FsUserPageListParam param);
+
+    Boolean disabledUser(String[] ids, boolean status);
 }

+ 49 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -5,6 +5,7 @@ import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import cn.hutool.json.JSONUtil;
 import com.fs.common.core.domain.R;
@@ -15,6 +16,8 @@ import com.fs.company.domain.CompanyTagUser;
 import com.fs.company.mapper.CompanyTagMapper;
 import com.fs.company.mapper.CompanyTagUserMapper;
 import com.fs.company.service.ICompanyTagService;
+import com.fs.course.domain.FsUserCompanyUser;
+import com.fs.course.mapper.FsUserCompanyUserMapper;
 import com.fs.course.param.newfs.FsUserCourseBeMemberParam;
 import com.fs.his.config.IntegralConfig;
 import com.fs.his.domain.FsUserAddress;
@@ -28,11 +31,14 @@ import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.UserVo;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
+import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.vo.h5.FsUserPageListVO;
 import com.fs.system.service.ISysConfigService;
 import com.fs.watch.domain.WatchUser;
 import com.fs.watch.service.WatchUserService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.his.domain.FsUser;
@@ -70,6 +76,8 @@ public class FsUserServiceImpl implements IFsUserService
 
     @Autowired
     private CompanyTagUserMapper companyTagUserMapper;
+    @Autowired
+    private FsUserCompanyUserMapper fsUserCompanyUserMapper;
 
 
     /**
@@ -454,4 +462,45 @@ public class FsUserServiceImpl implements IFsUserService
         }
     }
 
+    @Override
+    public List<FsUserPageListVO> selectFsUserPageList(FsUserPageListParam param) {
+        List<FsUserPageListVO> fsUserPageListVOS = fsUserMapper.selectFsUserPageList(param);
+
+        // 获取当前销售所有重粉会员
+        List<FsUserCompanyUser> fsUserCompanyUsers = fsUserCompanyUserMapper.selectRepeatUser(param.getUserId());
+
+        if(!fsUserCompanyUsers.isEmpty()){
+            List<Long> userIds = fsUserCompanyUsers.stream().map(FsUserCompanyUser::getUserId).collect(Collectors.toList());
+            // 获取会员所属的重粉销售
+            List<FsUserCompanyUser> repeatCompanyUserNames = fsUserCompanyUserMapper.selectRepeatCompanyUserName(userIds);
+            Map<Long, String> map = repeatCompanyUserNames.stream().collect(Collectors.toMap(FsUserCompanyUser::getUserId, FsUserCompanyUser::getRepeatCompanyUserName));
+
+            return fsUserPageListVOS.stream().map(v -> {
+                FsUserPageListVO fsUserPageListVO = new FsUserPageListVO();
+                BeanUtils.copyProperties(v, fsUserPageListVO);
+                fsUserPageListVO.setRepeatCompanyUserName(map.get(v.getUserId()));
+                if("微信用户".equals(v.getNickname()) && StringUtils.isNotEmpty(v.getPhone())){
+                    fsUserPageListVO.setNickname(v.getPhone());
+                }
+                return fsUserPageListVO;
+            }).collect(Collectors.toList());
+
+        } else {
+            return fsUserPageListVOS;
+        }
+    }
+
+    @Override
+    public Boolean disabledUser(String[] ids, boolean status) {
+        boolean result;
+        if (status) {
+            // 启用
+            result = fsUserMapper.batchUpdateFsUserByIds(ids, 1) > 0;
+        } else {
+            // 禁用
+            result = fsUserMapper.batchUpdateFsUserByIds(ids, 0) > 0;
+        }
+        return result;
+    }
+
 }

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

@@ -185,7 +185,121 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where user_id = #{userId}
     </select>
 
+    <select id="selectFsUserPageList" resultType="com.fs.store.vo.h5.FsUserPageListVO">
+        SELECT
+        fs_user.*,
+        fs_user_course_count.id,
+        fs_user_course_count.watch_course_count,
+        fs_user_course_count.miss_course_count,
+        fs_user_course_count.miss_course_status,
+        fs_user_course_count.course_ids,
+        fs_user_course_count.part_course_count,
+        fs_user_course_count.last_watch_date,
+        fs_user_course_count.STATUS AS courseCountStatus,
+        fs_user_course_count.stop_watch_days,
+        fs_user_course_count.complete_watch_date,
+        GROUP_CONCAT(DISTINCT company_tag.tag) AS tag,
+        GROUP_CONCAT(DISTINCT company_tag.tag_id) AS tagIds,
+        company_user.nick_name as companyUserNickName,
+        fs_user_company_user.is_repeat_fans
+        FROM
+        fs_user
+        LEFT JOIN fs_user_course_count ON fs_user.user_id = fs_user_course_count.user_id
+        LEFT JOIN company_tag_user ON fs_user.user_id = company_tag_user.user_id
+        LEFT JOIN company_tag ON FIND_IN_SET(company_tag.tag_id, company_tag_user.tag_ids) > 0
+        LEFT JOIN fs_user_company_user ON fs_user_company_user.user_id = fs_user.user_id
+        LEFT JOIN company_user ON company_user.user_id = fs_user_company_user.company_user_id
+        where fs_user.is_del = 0
+        <if test="userId != null and userId !='' ">
+            and (company_user.user_id = #{userId} OR company_user.parent_id = #{userId} )
+        </if>
+        <if test="companyUserId != null and companyUserId !='' ">
+            and company_user.user_id = #{companyUserId}
+        </if>
+        <choose>
+            <when test = "isBlack">
+                AND (fs_user.status = 0 or fs_user_company_user.is_repeat_fans = 1)
+            </when>
+            <otherwise>
+                AND (fs_user.status = 1 and fs_user_company_user.is_repeat_fans = 0)
+            </otherwise>
+        </choose>
+        <if test="keyword != null and keyword !='' ">
+            AND (fs_user.nickname LIKE concat('%',#{keyword},'%')
+            or  fs_user.phone LIKE concat('%',#{keyword},'%')
+            )
+        </if>
+        <if test="registerStartTime != null and registerStartTime !='' ">
+            AND fs_user.create_time &gt;= #{registerStartTime}
+        </if>
+        <if test="registerEndTime != null and registerEndTime !='' ">
+            AND fs_user.create_time &lt;= #{registerEndTime}
+        </if>
+        <if test="tagIds != null and tagIds.length > 0">
+            AND
+            <foreach collection="tagIds" item="item" index="index" open="(" separator="or" close=")">
+                company_tag_user.tag_ids LIKE concat('%"',#{item},'"%')
+            </foreach>
+        </if>
+        <if test="tabValue != null and tabValue !='' ">
+            <choose>
+                <when test = "tabValue == 1">
+                    AND DAY(fs_user.create_time) = DAY(NOW())
+                </when>
+                <when test = "tabValue == 2">
+                    AND DAY(fs_user_course_count.complete_watch_date) = DAY(NOW())
+                </when>
+                <when test = "tabValue == 3">
+                    AND (fs_user_course_count.status = 3 or fs_user_course_count.status is null)
+                </when>
+            </choose>
+        </if>
+        <if test="watchCourseType != null and watchCourseType !='' ">
+            <choose>
+                <when test = "watchCourseType == 1">
+                    AND (fs_user_course_count.status = 3 or fs_user_course_count.status is null)
+                </when>
+                <when test = "watchCourseType == 2">
+                    AND fs_user_course_count.status = 1
+                </when>
+                <when test = "watchCourseType == 3">
+                    AND fs_user_course_count.status = 2
+                </when>
+            </choose>
+        </if>
+        <if test="missCourseStatus != null and missCourseStatus !='' ">
+            <choose>
+                <when test = "missCourseStatus == 1">
+                    AND fs_user_course_count.miss_course_status = 1
+                </when>
+                <when test = "missCourseStatus == 2">
+                    AND (fs_user_course_count.miss_course_status = 2 or fs_user_course_count.miss_course_status is null )
+                </when>
+            </choose>
+        </if>
+
+        group by fs_user.user_id
+
+        <if test="continueMissCourseSort != null and continueMissCourseSort !='' ">
+            order by
+            <choose>
+                <when test = "continueMissCourseSort == 0">
+                    fs_user.create_time desc
+                </when>
+                <when test = "continueMissCourseSort == 1">
+                    fs_user.nickname asc
+                </when>
+            </choose>
+        </if>
+    </select>
 
+    <update id="batchUpdateFsUserByIds" parameterType="Long">
+        update fs_user
+        set status = #{status} where user_id in
+        <foreach item="id" collection="ids" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
 
     <insert id="insertFsUser" parameterType="FsUser" useGeneratedKeys="true" keyProperty="userId">
         insert into fs_user