Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/master'

zyp 3 týždňov pred
rodič
commit
0902623179

+ 16 - 0
fs-admin/src/main/java/com/fs/course/controller/FsCourseTrafficLogController.java

@@ -4,8 +4,10 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
 import com.fs.course.param.FsCourseTrafficLogParam;
+import com.fs.course.param.InternetTrafficParam;
 import com.fs.course.vo.FsCourseTrafficLogListVO;
 import com.fs.qw.param.QwWatchLogStatisticsListParam;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -121,4 +123,18 @@ public class FsCourseTrafficLogController extends BaseController
     {
         return toAjax(fsCourseTrafficLogService.deleteFsCourseTrafficLogByLogIds(logIds));
     }
+
+    /**
+     * 充值流量
+     *
+     * @param internetTrafficParam
+     * @return
+     */
+    @PostMapping(value = "/rechargeTraffic")
+    public R rechargeTraffic(@RequestBody InternetTrafficParam internetTrafficParam) {
+
+        fsCourseTrafficLogService.updateTrafficStatus(internetTrafficParam);
+        return R.ok().put("data", null);  // 返回计算结果
+    }
+
 }

+ 19 - 0
fs-admin/src/main/java/com/fs/his/task/trafficlog/TrafficlogTask.java

@@ -0,0 +1,19 @@
+package com.fs.his.task.trafficlog;
+
+import com.fs.course.service.IFsCourseTrafficLogService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("trafficlogTask")
+@Slf4j
+public class TrafficlogTask {
+    @Autowired
+    private IFsCourseTrafficLogService fsCourseTrafficLogService;
+    /**
+     * 红包流量统计
+     */
+    public void sumTrafficlog(){
+        fsCourseTrafficLogService.sumTrafficlog();
+    }
+}

+ 9 - 0
fs-company/src/main/java/com/fs/company/controller/company/IndexStatisticsController.java

@@ -7,6 +7,8 @@ import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.TokenService;
 import com.fs.statis.StatisticsRedisConstant;
 import com.fs.statis.dto.*;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.service.ISysConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -26,6 +28,10 @@ public class IndexStatisticsController {
 
     @Autowired
     private TokenService tokenService;
+
+
+    @Autowired
+    private ISysConfigService sysConfigService;
     /**
      * 分析概览
      */
@@ -71,6 +77,9 @@ public class IndexStatisticsController {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         Long companyId = loginUser.getCompany().getCompanyId();
         TrafficLogDTO trafficLogDTO = redisCache.getCacheObject(String.format("%s:%d",DATA_OVERVIEW_TRAFFIC_LOG,companyId));
+        SysConfig sysConfig = sysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
+        String configValue = sysConfig.getConfigValue();
+        trafficLogDTO.setTraffic(configValue);
         return R.ok().put("data",trafficLogDTO);
     }
 

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

@@ -233,6 +233,10 @@ public class FsUserController extends BaseController
     public TableDataInfo userlist(@PathVariable("name")String name)
     {
         List<UserVo> list = fsUserService.selectUserVOList(name);
+        if (list==null|| list.isEmpty()){
+            String s = encryptPhone(name);
+            list = fsUserService.selectUserVOList(s);
+        }
         return getDataTable(list);
     }
 

+ 66 - 0
fs-service/src/main/java/com/fs/course/mapper/FsCourseTrafficLogMapper.java

@@ -1,14 +1,17 @@
 package com.fs.course.mapper;
 
+import java.util.Date;
 import java.util.List;
 
 import com.fs.common.annotation.DataSource;
 import com.fs.common.enums.DataSourceType;
 import com.fs.course.domain.FsCourseTrafficLog;
 import com.fs.course.param.FsCourseTrafficLogParam;
+import com.fs.course.param.TrafficRecord;
 import com.fs.course.vo.FsCourseTrafficLogListVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
 import org.springframework.stereotype.Repository;
 
 /**
@@ -110,4 +113,67 @@ public interface FsCourseTrafficLogMapper
     void insertCourseTrafficLogByTwoDaysLaterBatch(@Param("list") List<FsCourseTrafficLog> redPacketLogs);
 
     List<FsCourseTrafficLogListVO> selectTrafficNew(FsCourseTrafficLogParam param);
+
+    @Select("<script>" +
+            "SELECT COALESCE(sum(internet_traffic), 0) FROM fs_course_traffic_log " +
+            "WHERE status =0" +
+            "<if test='createTime != null'>AND create_time &lt;= #{createTime}</if> " +
+            "</script>")
+    Long findRecordsNumBYD( @Param("createTime") Date createTime);
+
+    @Select("<script>" +
+            "SELECT log_id FROM fs_course_traffic_log " +
+            "WHERE status =0" +
+            "<if test='createTime != null'>AND create_time &lt;= #{createTime}</if> " +
+            "</script>")
+    List<Long> findRecordsNumByIds( @Param("createTime") Date createTime);
+    @Update("<script>" +
+            "UPDATE fs_course_traffic_log SET status = #{status} WHERE log_id IN " +
+            "<foreach item='id' collection='ids' open='(' separator=',' close=')'>" +
+            "#{id}" +
+            "</foreach>" +
+            "</script>")
+    int updateStatusByIds(@Param("ids") List<Long> ids,@Param("status")Integer status);
+
+
+
+    // 按创建时间查询未使用的流量记录(用于分批更新)
+    @Select("<script>" +
+            "SELECT COALESCE(sum(internet_traffic), 0) FROM fs_course_traffic_log " +
+            "WHERE status = 0" +
+            "<if test='companyId != null'>AND company_id = #{companyId}</if> " +
+            "</script>")
+    Long findRecordsNum(@Param("companyId") Long companyId);
+
+    // 批量更新状态
+    @Update("<script>" +
+            "UPDATE fs_course_traffic_log SET status = 1 WHERE log_id IN " +
+            "<foreach item='id' collection='ids' open='(' separator=',' close=')'>" +
+            "#{id}" +
+            "</foreach>" +
+            "</script>")
+    int updateStatusByIds(@Param("ids") List<Long> ids);
+
+    @Select("<script>" +
+            "SELECT internet_traffic FROM fs_course_traffic_log WHERE log_id IN " +
+            "<foreach item='id' collection='ids' open='(' separator=',' close=')'>" +
+            "#{id}" +
+            "</foreach>" +
+            "</script>")
+    List<Long> getTrafficByIds(@Param("ids") List<Long> ids);
+
+    // 新增带流量字段的记录查询(按公司ID)
+    @Select("<script>" +
+            "SELECT log_id, internet_traffic FROM fs_course_traffic_log " +
+            "WHERE status = 0" +
+            "<if test='companyId != null'>AND company_id = #{companyId}</if> " +
+            "ORDER BY create_time ASC " +
+            "LIMIT #{offset}, #{pageSize}" +
+            "</script>")
+    List<TrafficRecord> findUnusedRecordsWithTraffic(
+            @Param("companyId") Long companyId,
+            @Param("offset") int offset,
+            @Param("pageSize") int pageSize);
+
+
 }

+ 22 - 0
fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -465,4 +465,26 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
     FsCourseWatchLog getWatchCourseVideoIsOpen(@Param("userId") Long userId,@Param("videoId") Long videoId);
 
     void batchUpdateWatchLogIsOpen(@Param("list") List<FsCourseWatchLog> batchList);
+
+    @Select("select count(*) from fs_course_watch_log where user_id =#{userId} and project =#{projectId} ")
+    Long selectByWatchLjDay(@Param("userId") Long userId,@Param("projectId")  Long projectId);
+    @Select("SELECT IFNULL(MAX(streak), 0) AS current_consecutive_days\n" +
+            "FROM (\n" +
+            "    SELECT \n" +
+            "        watch_date,\n" +
+            "        @streak := IF(\n" +
+            "            DATEDIFF(@prev_date, watch_date) = 1, \n" +
+            "            @streak + 1, \n" +
+            "            1\n" +
+            "        ) AS streak,\n" +
+            "        @prev_date := watch_date\n" +
+            "    FROM (\n" +
+            "        SELECT DISTINCT DATE(create_time) AS watch_date\n" +
+            "        FROM fs_course_watch_log\n" +
+            "        WHERE user_id = #{userId} AND project = #{projectId}\n" +
+            "        ORDER BY watch_date DESC\n" +
+            "    ) AS dates,\n" +
+            "    (SELECT @streak := 0, @prev_date := NULL) AS vars\n" +
+            ") AS streak_data;")
+    Long selectByWatchlxDay(@Param("userId") Long userId,@Param("projectId")  Long projectId);
 }

+ 9 - 0
fs-service/src/main/java/com/fs/course/param/TrafficRecord.java

@@ -0,0 +1,9 @@
+package com.fs.course.param;
+
+import lombok.Data;
+
+@Data
+public class TrafficRecord {
+    private Long logId;
+    private Long internetTraffic; // 单位:KB
+}

+ 10 - 0
fs-service/src/main/java/com/fs/course/service/IFsCourseTrafficLogService.java

@@ -3,6 +3,7 @@ package com.fs.course.service;
 import java.util.List;
 import com.fs.course.domain.FsCourseTrafficLog;
 import com.fs.course.param.FsCourseTrafficLogParam;
+import com.fs.course.param.InternetTrafficParam;
 import com.fs.course.vo.FsCourseTrafficLogListVO;
 
 /**
@@ -70,4 +71,13 @@ public interface IFsCourseTrafficLogService
     void saveCourseTrafficLog();
 
     List<FsCourseTrafficLogListVO> selectTrafficNew(FsCourseTrafficLogParam param);
+
+
+    void updateTrafficStatus(InternetTrafficParam internetTrafficParam);
+
+
+    /**
+     * 定时统计流量总数
+     */
+    void sumTrafficlog();
 }

+ 166 - 4
fs-service/src/main/java/com/fs/course/service/impl/FsCourseTrafficLogServiceImpl.java

@@ -1,18 +1,21 @@
 package com.fs.course.service.impl;
 
 import java.text.SimpleDateFormat;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.DictUtils;
 import com.fs.company.cache.ICompanyCacheService;
 import com.fs.course.param.FsCourseTrafficLogParam;
+import com.fs.course.param.InternetTrafficParam;
+import com.fs.course.param.TrafficRecord;
 import com.fs.course.vo.FsCourseTrafficLogListVO;
 import com.fs.store.service.cache.IFsUserCourseCacheService;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.service.ISysConfigService;
 import com.hc.openapi.tool.util.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,7 +36,8 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
 {
     @Autowired
     private FsCourseTrafficLogMapper fsCourseTrafficLogMapper;
-
+    @Autowired
+    private ISysConfigService iSysConfigService;
     @Autowired
     private ICompanyCacheService companyCacheService;
 
@@ -202,6 +206,164 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
         return fsCourseTrafficLogListVOS;
     }
 
+    @Override
+    public void updateTrafficStatus(InternetTrafficParam internetTrafficParam) {
+        System.out.println("开始处理流量充值...");
+
+        // 计算充值对应的流量
+        double account = Double.parseDouble(internetTrafficParam.getAccount());
+
+        SysConfig config = iSysConfigService.selectConfigByConfigKey("statis.config");
+        JSONObject jsonObject = JSONObject.parseObject(config.getConfigValue());
+        float trafficPrice = jsonObject.getFloatValue("trafficPrice");
+
+        double trafficGB = account / trafficPrice;
+        long trafficKB = (long) (trafficGB * 1024 * 1024);
+
+        System.out.println("充值金额:" + account + " 元,对应可用流量:" + trafficKB + " KB");
+
+        long updatedTrafficKB = 0L;
+        int pageSize = 1000;  // 每次查询1000条
+        int pageNum = 0;      // 分页页码
+        int loopCount = 0;    // 查询次数
+        int maxLoop = 20;     // 最大循环次数
+
+        List<Long> idsToUpdate = new ArrayList<>();       // 用于更新状态为1的ID
+        Set<Long> processedIds = new HashSet<>();         // 用于去重
+        long remainingTrafficKB = trafficKB;              // 还需补充的流量
+        long totalInternetTrafficRemaining = 0L;          // 记录未处理的流量总和
+
+        // 第一阶段:处理需要用于充值的记录
+        while (updatedTrafficKB < trafficKB && loopCount < maxLoop) {
+            loopCount++;
+            int offset = pageNum * pageSize;
+
+            // 查询当前分页的数据
+            List<TrafficRecord> trafficRecords =
+                    fsCourseTrafficLogMapper.findUnusedRecordsWithTraffic(
+                            internetTrafficParam.getCompanyId(), offset, pageSize);
+
+            if (trafficRecords.isEmpty()) {
+                break;
+            }
+
+            // 处理当前批次的数据
+            for (TrafficRecord record : trafficRecords) {
+                Long logId = record.getLogId();
+
+                if (processedIds.contains(logId)) {
+                    continue;
+                }
+
+                if (updatedTrafficKB < trafficKB) {
+                    updatedTrafficKB += record.getInternetTraffic();
+                    idsToUpdate.add(logId);
+                    remainingTrafficKB = Math.max(0, trafficKB - updatedTrafficKB);
+                }
+
+                processedIds.add(logId);
+                totalInternetTrafficRemaining += record.getInternetTraffic();
+            }
+
+            try {
+                Thread.sleep(100);
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+                break;
+            }
+
+            pageNum++;
+        }
+
+        // 第二阶段:将所有未处理的记录状态改为3
+        List<Long> allUnprocessedIds = new ArrayList<>();
+        pageNum = 0;  // 重置分页
+        boolean hasMore = true;
+
+        while (hasMore && loopCount < maxLoop * 2) {  // 扩大循环次数限制
+            loopCount++;
+            int offset = pageNum * pageSize;
+
+            List<TrafficRecord> allRecords =
+                    fsCourseTrafficLogMapper.findUnusedRecordsWithTraffic(
+                            internetTrafficParam.getCompanyId(), offset, pageSize);
+
+            if (allRecords.isEmpty()) {
+                hasMore = false;
+                continue;
+            }
+
+            for (TrafficRecord record : allRecords) {
+                Long logId = record.getLogId();
+                if (!idsToUpdate.contains(logId)) {  // 不是已处理的记录
+                    allUnprocessedIds.add(logId);
+                }
+            }
+
+            pageNum++;
+        }
+
+        // 更新数据库状态
+        if (!idsToUpdate.isEmpty()) {
+            fsCourseTrafficLogMapper.updateStatusByIds(idsToUpdate, 1);
+            System.out.println("共更新状态为1的记录数:" + idsToUpdate.size());
+        }
+
+        if (!allUnprocessedIds.isEmpty()) {
+            fsCourseTrafficLogMapper.updateStatusByIds(allUnprocessedIds, 3);
+            System.out.println("共更新状态为3的记录数:" + allUnprocessedIds.size());
+        }
+
+        // 剩余的计算和输出逻辑保持不变...
+        Long count = fsCourseTrafficLogMapper.findRecordsNum(internetTrafficParam.getCompanyId());
+        long overflowTrafficKB = Math.max(0, updatedTrafficKB - trafficKB) + count;
+        if (overflowTrafficKB > 0) {
+            System.out.println("已使用流量超过充值流量,超出部分:" + overflowTrafficKB + " KB");
+        }
+
+        System.out.println("充值总流量:" + trafficKB + " KB");
+        System.out.println("已使用流量:" + updatedTrafficKB + " KB");
+        long finalRemainingTrafficKB = Math.max(0, trafficKB - updatedTrafficKB);
+        System.out.println("最终剩余流量:" + finalRemainingTrafficKB + " KB");
+
+        // 系统配置更新逻辑保持不变...
+        SysConfig sysConfig = iSysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
+        String trafficCount = finalRemainingTrafficKB == 0 ?
+                "-" + overflowTrafficKB : String.valueOf(finalRemainingTrafficKB);
+
+        if (ObjectUtils.isEmpty(sysConfig)) {
+            sysConfig = new SysConfig();
+            sysConfig.setConfigKey("redPacket.Traffic.config");
+            sysConfig.setConfigName("红包流量配置");
+            sysConfig.setConfigValue(trafficCount);
+            iSysConfigService.insertConfig(sysConfig);
+        } else {
+            sysConfig.setConfigValue(trafficCount);
+            iSysConfigService.updateConfig(sysConfig);
+        }
+    }
+    @Override
+    public void sumTrafficlog() {
+        SysConfig sysConfig = iSysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
+        Date date = new Date();
+        Long count = fsCourseTrafficLogMapper.findRecordsNumBYD(date);
+        List<Long> ids = fsCourseTrafficLogMapper.findRecordsNumByIds(date);
+        if (count<=0){
+            return;
+        }
+        if (ObjectUtils.isEmpty(sysConfig)){
+            sysConfig = new SysConfig();
+            sysConfig.setConfigKey("redPacket.Traffic.config");
+            sysConfig.setConfigName("红包流量配置");
+            sysConfig.setConfigValue("-"+count);
+            iSysConfigService.insertConfig(sysConfig);
+        }else {
+            sysConfig.setConfigValue(String.valueOf((Long.parseLong(sysConfig.getConfigValue())-count)));
+            iSysConfigService.updateConfig(sysConfig);
+        }
+        fsCourseTrafficLogMapper.updateStatusByIds(ids,2);
+    }
+
     private static String formatDuration(long millis) {
         long seconds = millis / 1000;
         long minutes = seconds / 60;

+ 1 - 1
fs-service/src/main/java/com/fs/course/service/impl/FsCourseWatchLogServiceImpl.java

@@ -405,7 +405,7 @@ public class FsCourseWatchLogServiceImpl extends ServiceImpl<FsCourseWatchLogMap
         if (videoDuration==null){
             FsUserCourseVideo video = courseVideoMapper.selectFsUserCourseVideoByVideoId(videoId);
             videoDuration=video.getDuration();
-            redisCache.setCacheObject(videoRedisKey,video.getDuration().toString());
+            redisCache.setCacheObject(videoRedisKey,video.getDuration());
         }
         return videoDuration;
     }

+ 8 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseServiceImpl.java

@@ -529,6 +529,14 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
             // 观看时长
             recordVO.setWatchTime((BigDecimal) sumMap.getOrDefault("watchTime", BigDecimal.ZERO));
 
+            Long ljDay = fsCourseWatchLogMapper.selectByWatchLjDay(recordVO.getUserId(),recordVO.getProjectId());
+            System.out.println("进入了统计累计观看天数:"+ljDay+"天");
+            recordVO.setWatchLjCount(ljDay);
+            //连续观看天数
+            Long lxDay = fsCourseWatchLogMapper.selectByWatchlxDay(recordVO.getUserId(),recordVO.getProjectId());
+            System.out.println("进入了连续观看天数:"+lxDay+"天");
+            recordVO.setWatchLxCount(lxDay);
+
             // 领取状态
             Long count = fsCourseAnswerLogsMapper.selectRedStatus(recordVO.getUserId(), recordVO.getVideoId());
             if (Objects.nonNull(count) && count > 0) {

+ 15 - 0
fs-service/src/main/java/com/fs/course/vo/FsUserCourseParticipationRecordVO.java

@@ -64,4 +64,19 @@ public class FsUserCourseParticipationRecordVO {
      * 标签
      */
     private List<CompanyTag> tags;
+
+    /**
+     * 累计观看天数
+     */
+    private Long watchLjCount;
+
+    /**
+     * 连续观看天数
+     */
+    private Long watchLxCount;
+
+    /**
+     * 项目编号
+     */
+    private Long projectId;
 }

+ 4 - 0
fs-service/src/main/java/com/fs/statis/dto/TrafficLogDTO.java

@@ -22,4 +22,8 @@ public class TrafficLogDTO implements Serializable {
      * 本月流量
      */
     private Long thisMonth;
+    /**
+     * 剩余流量
+     */
+    private String traffic;
 }

+ 19 - 19
fs-service/src/main/java/com/fs/task/trafficlog/TrafficlogTask.java

@@ -1,19 +1,19 @@
-package com.fs.task.trafficlog;
-
-import com.fs.course.service.IFsCourseTrafficLogService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service("trafficlogTask")
-@Slf4j
-public class TrafficlogTask {
-    @Autowired
-    private IFsCourseTrafficLogService fsCourseTrafficLogService;
-    /**
-     * 红包流量统计
-     */
-    /*public void sumTrafficlog(){
-        fsCourseTrafficLogService.sumTrafficlog();
-    }*/
-}
+//package com.fs.task.trafficlog;
+//
+//import com.fs.course.service.IFsCourseTrafficLogService;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Service;
+//
+//@Service("trafficlogTask")
+//@Slf4j
+//public class TrafficlogTask {
+//    @Autowired
+//    private IFsCourseTrafficLogService fsCourseTrafficLogService;
+//    /**
+//     * 红包流量统计
+//     */
+//    /*public void sumTrafficlog(){
+//        fsCourseTrafficLogService.sumTrafficlog();
+//    }*/
+//}

+ 16 - 0
fs-user-app/src/main/java/com/fs/app/controller/UserController.java

@@ -6,6 +6,7 @@ import com.fs.app.annotation.Login;
 import com.fs.app.param.FsDoctorRegisterParam;
 import com.fs.app.param.FsUserEditParam;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.sign.Md5Utils;
@@ -23,6 +24,7 @@ import com.fs.his.utils.qrcode.QRCodeUtils;
 import com.fs.his.vo.FsDoctorListUVO;
 import com.fs.his.vo.FsUserCouponCountUVO;
 import com.fs.his.vo.FsUserCouponListUVO;
+import com.fs.his.vo.UserVo;
 import com.fs.qw.service.IQwAppContactWayService;
 import com.fs.system.oss.CloudStorageService;
 import com.fs.system.oss.OSSFactory;
@@ -277,4 +279,18 @@ public class UserController extends  AppBaseController {
         return userService.updateStatus(id);
     }
 
+    /**
+     * 查询用户
+     */
+    @GetMapping("/user/list/{name}")
+    public TableDataInfo userlist(@PathVariable("name")String name)
+    {
+        List<UserVo> list = userService.selectUserVOList(name);
+        if (list==null|| list.isEmpty()){
+            String s = encryptPhone(name);
+            list = userService.selectUserVOList(s);
+        }
+        return getDataTable(list);
+    }
+
 }