lyhzzz 4 月之前
父節點
當前提交
9d18e38ad6

+ 16 - 0
src/main/java/com/fdkankan/fusion/controller/BaseController.java

@@ -3,7 +3,11 @@ package com.fdkankan.fusion.controller;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.jwt.JWT;
 import cn.hutool.jwt.JWTUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.util.RedisKeyUtil;
+import com.fdkankan.fusion.exception.BusinessException;
 import com.fdkankan.fusion.httpClient.response.FdkkUserVo;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
@@ -15,6 +19,7 @@ import org.springframework.data.domain.Sort.Direction;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.WebDataBinder;
 import org.springframework.web.bind.annotation.InitBinder;
+import scala.Int;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -42,6 +47,17 @@ public class BaseController {
         Object userName = jwt.getPayload("nickName");
         return userName.toString();
     }
+
+    protected Long getUserId(){
+        String redisKey = String.format(RedisKeyUtil.loginToken,StpUtil.getTokenValue());
+        if(!redisUtil.hasKey(redisKey)){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+        }
+        String objStr = redisUtil.get(redisKey);
+        JSONObject jsonObject = JSON.parseObject(objStr);
+
+        return jsonObject.getLong("id");
+    }
     protected String getDeptId(){
         return "";
     }

+ 1 - 0
src/main/java/com/fdkankan/fusion/controller/SceneController.java

@@ -32,6 +32,7 @@ public class SceneController extends BaseController{
     @PostMapping("/list")
     public ResultData list(@RequestBody ScenePram param){
         param.setShare(getShare());
+        param.setUserId(getUserId());
         return ResultData.ok(sceneService.pageList(param));
     }
 

+ 8 - 0
src/main/java/com/fdkankan/fusion/mapper/IScenePlusMapper.java

@@ -1,9 +1,13 @@
 package com.fdkankan.fusion.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.fusion.entity.ScenePlus;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fdkankan.fusion.request.DataParam;
+import com.fdkankan.fusion.request.SceneParam2;
+import com.fdkankan.fusion.request.ScenePram;
 import com.fdkankan.fusion.response.DataGroupVo;
+import com.fdkankan.fusion.response.SceneVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -24,4 +28,8 @@ public interface IScenePlusMapper extends BaseMapper<ScenePlus> {
 
     List<DataGroupVo> groupByType(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("cameraIds") List<Long> cameraIds);
 
+
+    Page<SceneVo> pageList2(Page<SceneVo> page, ScenePram param);
+    Page<SceneVo> selectMesh(Page<SceneVo> page, ScenePram param);
+    Page<SceneVo> selectLaser(Page<SceneVo> page, ScenePram param);
 }

+ 41 - 0
src/main/java/com/fdkankan/fusion/request/SceneParam2.java

@@ -0,0 +1,41 @@
+package com.fdkankan.fusion.request;
+
+import com.fdkankan.fusion.common.RequestBase;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class SceneParam2 extends RequestBase {
+    private String num;
+    private String sceneName;   //场景标题
+    private String snCode;      //sn码
+    private String userName;    //绑定账号
+    private Integer type;   //0 看看,1看见,2深时
+    private Integer companyId;
+    private Long userId;
+    private Integer isObj;
+
+    private List<String> snCodes;
+    private List<String> authNumList = new ArrayList<>();
+
+    private String ryId;
+    private String ryNo;
+    private Integer authType;
+
+    private Integer platformId;
+
+    private List<Long> otherUserIds =  new ArrayList<>();
+    private List<Integer>  otherPlatformIds = new ArrayList<>();
+
+    private Integer sceneType = 0;  //0自己场景,1场景共享
+    private Integer caseId;
+
+
+    private List<Integer> sceneSource;
+    private Boolean threeCamType;
+    private Boolean notThreeCamType;
+    private Long notUserId;
+
+}

+ 4 - 0
src/main/java/com/fdkankan/fusion/request/ScenePram.java

@@ -25,6 +25,10 @@ public class ScenePram extends RequestBase {
 
     private String num;
 
+    private Integer isObj;
+    private Long userId;
+
+
     public String getSceneName() {
         return sceneName== null ?null :sceneName.trim();
     }

+ 3 - 0
src/main/java/com/fdkankan/fusion/response/SceneVo.java

@@ -27,6 +27,9 @@ public class SceneVo extends Model {
     private Boolean bind = true;
     private String deptId;
     private String deptName;
+    private Integer sceneSource;
+
+    private String sceneType;
 
     /**
      *      "    Scene_Location_Slam  = 0, //slam\n" +

+ 9 - 0
src/main/java/com/fdkankan/fusion/service/IScenePlusService.java

@@ -1,9 +1,12 @@
 package com.fdkankan.fusion.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.fusion.entity.ScenePlus;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.fusion.request.DataParam;
+import com.fdkankan.fusion.request.ScenePram;
 import com.fdkankan.fusion.response.DataGroupVo;
+import com.fdkankan.fusion.response.SceneVo;
 
 import java.util.List;
 
@@ -22,4 +25,10 @@ public interface IScenePlusService extends IService<ScenePlus> {
     List<DataGroupVo> groupByCameraId(DataParam param, List<Long> cameraIds);
 
     List<DataGroupVo> groupByType(DataParam param, List<Long> cameraIds);
+
+    Page<SceneVo> selectLaser(Page<SceneVo> objectPage, ScenePram param);
+
+    Page<SceneVo> selectMesh(Page<SceneVo> objectPage, ScenePram param);
+
+    Page<SceneVo> pageList2(Page<SceneVo> objectPage, ScenePram param);
 }

+ 12 - 15
src/main/java/com/fdkankan/fusion/service/impl/CaseServiceImpl.java

@@ -123,23 +123,20 @@ public class CaseServiceImpl extends ServiceImpl<ICaseMapper, CaseEntity> implem
             HashMap<Integer, List<String>> typeMap = caseNumService.getTypeMap(param.getCaseId());
             param.setTypeMap(typeMap);
         }
+
+        List<CaseNumEntity> caseNumEntities = caseNumService.getByCaseId(param.getCaseId());
+        List<String> collect = caseNumEntities.stream().map(CaseNumEntity::getNum).collect(Collectors.toList());
+
         List<SceneVo> listAll = new ArrayList<>();
-        for (Integer type : param.getTypeMap().keySet()) {
-            List<String> numList = param.getTypeMap().get(type);
-            if(numList ==null || numList.size() <=0 || type ==3){
-                continue;
-            }
-            ScenePram scenePram = new ScenePram();
-            scenePram.setType(type);
-            scenePram.setPageNum(1);
-            scenePram.setPageSize(99999);
-            scenePram.setNumList(param.getTypeMap().get(type));
-            scenePram.setShare("1");
-            PageInfo pageInfo = sceneService.pageList(scenePram);
-            List<SceneVo> list1 = (List<SceneVo>) pageInfo.getList();
-            listAll.addAll(list1);
+        ScenePram scenePram = new ScenePram();
+        scenePram.setPageNum(1);
+        scenePram.setPageSize(99999);
+        scenePram.setNumList(collect);
+        PageInfo pageInfo = sceneService.pageList(scenePram);
+        List<SceneVo> list1 = (List<SceneVo>) pageInfo.getList();
+
+        listAll.addAll(list1);
 
-        }
         if(listAll.size() >0){
             List<String> numList = listAll.parallelStream().map(SceneVo::getNum).collect(Collectors.toList());
             //设置模型

+ 1 - 0
src/main/java/com/fdkankan/fusion/service/impl/CommonUploadServiceImpl.java

@@ -2,6 +2,7 @@ package com.fdkankan.fusion.service.impl;
 
 
 import cn.hutool.core.io.FileUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.fdkankan.fusion.common.OssPath;
 import com.fdkankan.fusion.common.ResultCode;

+ 1 - 0
src/main/java/com/fdkankan/fusion/service/impl/DictFileServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fdkankan.fusion.service.impl;
 
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.fusion.common.PageInfo;

+ 1 - 0
src/main/java/com/fdkankan/fusion/service/impl/DictServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fdkankan.fusion.service.impl;
 
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.fusion.common.PageInfo;

+ 18 - 0
src/main/java/com/fdkankan/fusion/service/impl/ScenePlusServiceImpl.java

@@ -2,10 +2,13 @@ package com.fdkankan.fusion.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.fusion.entity.ScenePlus;
 import com.fdkankan.fusion.mapper.IScenePlusMapper;
 import com.fdkankan.fusion.request.DataParam;
+import com.fdkankan.fusion.request.ScenePram;
 import com.fdkankan.fusion.response.DataGroupVo;
+import com.fdkankan.fusion.response.SceneVo;
 import com.fdkankan.fusion.service.IScenePlusService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
@@ -41,4 +44,19 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
     public List<DataGroupVo> groupByType(DataParam param, List<Long> cameraIds) {
         return getBaseMapper().groupByType(param.getStartTime(),param.getEndTime(),cameraIds);
     }
+
+    @Override
+    public Page<SceneVo> selectLaser(Page<SceneVo> objectPage, ScenePram param) {
+        return this.getBaseMapper().selectLaser(objectPage,param);
+    }
+
+    @Override
+    public Page<SceneVo> selectMesh(Page<SceneVo> objectPage, ScenePram param) {
+        return this.getBaseMapper().selectMesh(objectPage,param);
+    }
+
+    @Override
+    public Page<SceneVo> pageList2(Page<SceneVo> objectPage, ScenePram param) {
+        return this.getBaseMapper().pageList2(objectPage,param);
+    }
 }

+ 40 - 116
src/main/java/com/fdkankan/fusion/service/impl/SceneService.java

@@ -82,135 +82,59 @@ public class SceneService implements ISceneService {
         return listAll;
     }
 
+    @Autowired
+    IScenePlusService scenePlusService;
     @Override
     public PageInfo pageList(ScenePram param) {
-        if(param.getType() == null){
-           throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
-        }
-        List<TmCamera> tmCameraList = null;
-        String tokenValue = null;
-        try {
-             tokenValue = StpUtil.getTokenValue();
-        }catch (Exception e){
 
+        Page<SceneVo> page ;
+        if(param.getIsObj() != null){
+            if(param.getIsObj() == 0){
+                page = scenePlusService.selectLaser(new Page<>(param.getPageNum(),param.getPageSize()),param);
+            }else {
+                page = scenePlusService.selectMesh(new Page<>(param.getPageNum(),param.getPageSize()),param);
+            }
+        }else {
+            page = scenePlusService.pageList2(new Page<>(param.getPageNum(), param.getPageSize()), param);
         }
 
-        if(StringUtils.isNotBlank(tokenValue) && StringUtils.isBlank(param.getShare()) ){
-            tmCameraList = tmCameraService.getByDeptIds();
-            List<String> snCodes = tmCameraList.stream().map(TmCamera::getCameraSn).collect(Collectors.toList());
-            if(CollectionUtil.isNotEmpty(snCodes)){
-                param.setSnCodes(snCodes);
-            }
+        Page<SceneVo> voPage = new Page<>(param.getPageNum(),param.getPageSize());
+        for (SceneVo record : voPage.getRecords()) {
+            record.setType(toFusionType(setSceneType(record.getSceneSource(),record.getSceneType())));
         }
-        if(StringUtils.isNotBlank(param.getDeptId())){
-            List<String> deptIds = new ArrayList<>();
-            if(param.getSearchType() == 0){
-                List<TmDepartment> sonByDeptId = tmDepartmentService.getSonByDeptId(param.getDeptId());
-                deptIds = sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList());
-            }
-            deptIds.add(param.getDeptId());
-            List<TmCamera> tmCameras = tmCameraService.getByDeptIds(deptIds);
-            Set<String> snCodeSet = tmCameras.parallelStream().map(TmCamera::getCameraSn).collect(Collectors.toSet());
-            List<String> snCodes = param.getSnCodes();
-            if(snCodes == null){
-                snCodes = new ArrayList<>(snCodeSet);
-            }else {
-                snCodes = snCodes.stream().filter(snCodeSet::contains).collect(Collectors.toList());
-            }
-            param.setSnCodes(snCodes);
+        voPage.setRecords(page.getRecords());
+        voPage.setTotal(page.getTotal());
+        return PageInfo.PageInfo(voPage);
+    }
+
+
+    private Integer setSceneType(Integer sceneSource,String sceneType) {
+        if(sceneSource == 3 ){
+            return 1;
         }
-//        if(StringUtils.isNotBlank(param.getSnCode())){
-//            List<String> snCodes = param.getSnCodes();
-//            List<String> snCodes1 = new ArrayList<>();
-//            snCodes1.add(param.getSnCode());
-//            if(snCodes == null){
-//                snCodes = snCodes1;
-//            }else {
-//                snCodes = snCodes.stream().filter(snCodes1::contains).collect(Collectors.toList());
-//            }
-//            param.setSnCodes(snCodes);
-//        }
-        if(param.getCaseId() !=null){
-            String deptId =  caseService.getDeptId(param.getCaseId());
-            List<TmCamera> tmCameras = tmCameraService.getByDeptIds(Arrays.asList(deptId));
-            List<String> snCodes = param.getSnCodes();
-            List<String> snCodes1 = tmCameras.stream().map(TmCamera::getCameraSn).collect(Collectors.toList());
-            snCodes1.add(param.getSnCode());
-            if(snCodes == null){
-                snCodes = snCodes1;
-            }else {
-                snCodes = snCodes.stream().filter(snCodes1::contains).collect(Collectors.toList());
-            }
-            param.setSnCodes(snCodes);
+        if(sceneSource == 4 && sceneType.equals("laser")){
+            return 2;
         }
-        if(CollectionUtil.isEmpty(param.getSnCodes()) && CollectionUtil.isEmpty(param.getNumList())){
-            return PageInfo.PageInfoEmpty();
+        if(sceneSource == 4 && sceneType.equals("4dkankan")){
+            return 5;
         }
-        List<SceneVo> sceneVoList = new ArrayList<>();
-        long total = 0;
-        if(param.getType() == 0 || param.getType() == 1 || param.getType() == 4 || param.getType() == 6 || param.getType() == 7){      //看看,看见 ,深时obj
-            //获取四维(看看,看见)场景数据
-            FdkkResponse fdkkResponse = fdKKClient.sceneList(param);
-            if(fdkkResponse.getCode() !=0){
-                throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg());
-            }
-            PageInfo pageInfo = JSONObject.parseObject(JSONObject.toJSONString(fdkkResponse.getData()), PageInfo.class);
-            total =  pageInfo.getTotal();
-            JSONArray list = JSONArray.parseArray(JSONObject.toJSONString( pageInfo.getList()));
-            sceneVoList = overSceneVo(list,param.getType());
-
+        if(sceneSource == 5 && sceneType.equals("laser")){
+            return 6;
         }
-        if(param.getType() == 2 || param.getType() == 5){       //深时
-            //获取激光(深时)场景数据
-            LaserSceneParam laserSceneParam = new LaserSceneParam();
-            laserSceneParam.setPageNum(param.getPageNum());
-            laserSceneParam.setPageSize(param.getPageSize());
-            laserSceneParam.setStatus(param.getStatus());
-            laserSceneParam.setSnCode(param.getSnCode());
-            laserSceneParam.setSnCodes(param.getSnCodes());
-            if(param.getType() == 5){
-                laserSceneParam.setSceneSource(5);
-            }
-            if(StringUtils.isNotBlank(param.getSceneName())){
-                laserSceneParam.setTitle(param.getSceneName());
-            }
-            if(param.getNumList() != null && param.getNumList().size() >0){
-                laserSceneParam.setSceneCodes(param.getNumList());
-            }
-            FdkkResponse fdkkResponse = laserClient.sceneList(laserSceneParam);
-            if(fdkkResponse.getCode() !=200){
-                throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg());
-            }
-            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(fdkkResponse.getData()));
-            JSONArray list = jsonObject.getJSONArray("list");
-            total =jsonObject.getLong("total");
-            for (Object o : list) {
-                String res = JSONObject.toJSONString(o);
-                SceneVo vo = JSONObject.parseObject(res,SceneVo.class);
-                if( StringUtils.isEmpty(vo.getPhone())){
-                    vo.setBind(false);
-                }
-                if(vo.getStatus() == 4){    //4生成OBJ中设置为计算中
-                    vo.setStatus(0);
-                }
-                vo.setType(param.getType());
-                sceneVoList.add(vo);
-            }
+        if(sceneSource == 5 && sceneType.equals("4dkankan")){
+            return 7;
         }
-        Set<String> snCodes = sceneVoList.stream().map(SceneVo::getSnCode).collect(Collectors.toSet());
+        return 0;
+    }
 
-        HashMap<String, TmDepartment> map = tmCameraService.getMapBySnCodes(snCodes);
-        for (SceneVo sceneVo : sceneVoList) {
-            TmDepartment tmDepartment = map.get(sceneVo.getSnCode().toUpperCase());
-            if(tmDepartment != null){
-                sceneVo.setDeptId(tmDepartment.getId());
-                sceneVo.setDeptName(tmDepartment.getName());
-            }
+    private Integer toFusionType(Integer type) {
+        switch (type){
+            case 5 :return 4;
+            case 6 :return 5;
+            case 7 :return 6;
+            case 8 :return 7;
+            default: return type;
         }
-        Page<SceneVo> voPage = new Page<>(param.getPageNum(),param.getPageSize());
-        voPage.setRecords(sceneVoList);
-        voPage.setTotal(total);
-        return PageInfo.PageInfo(voPage);
     }
 
     /**

+ 117 - 0
src/main/resources/mapper/fusion/ScenePlusMapper.xml

@@ -33,4 +33,121 @@
         </if>
         group by scene_source
     </select>
+
+
+
+    <select id="selectMesh" resultType="com.fdkankan.fusion.response.SceneVo">
+        <include refid="selectMesh"></include>
+        order by create_time desc
+    </select>
+
+    <select id="selectLaser" resultType="com.fdkankan.fusion.response.SceneVo">
+        <include refid="selectLaser"></include>
+        order by shoot_time desc
+    </select>
+
+
+    <select id="pageList2" resultType="com.fdkankan.fusion.response.SceneVo">
+        <include refid="selectMesh"></include>
+        UNION  all
+        <include refid="selectLaser"></include>
+        ORDER BY create_time desc
+
+    </select>
+
+    <sql id="selectMesh">
+        select s.id,'4dkankan' as sceneType,s.title as sceneName ,s.num,s.create_time,c.sn_code,e.space as sceneSize
+        ,u.user_name,e.view_count,s.scene_status as status,s.pay_status,'v4' as scene_version,e.web_site , e.thumb
+        ,e.algorithm_time,s.user_id,s.scene_source,s.three_cam_type,e.is_obj
+        from t_scene_plus s
+        left join t_scene_plus_ext e on s.id = e.plus_id
+        left join t_user u on s.user_id = u.id
+        left join t_camera c on s.camera_id = c.id
+        WHERE s.rec_status = 'A' and
+        ( s.scene_source in (4,5) and e.is_obj = 1 or s.scene_source not in (4,5) )
+
+        <if test="param.sceneName != null and param.sceneName!='' ">
+            and s.title like concat ('%',#{param.sceneName},'%')
+        </if>
+        <if test="param.snCode != null and param.snCode !='' ">
+            and c.sn_code like concat ('%',#{param.snCode},'%')
+        </if>
+        <if test="param.num != null and param.num !='' ">
+            and s.num like concat ('%',#{param.num},'%')
+        </if>
+        <if test="param.userName != null and param.userName !='' ">
+            and u.user_name like concat ('%',#{param.userName},'%')
+        </if>
+        <if test="param.notUserId != null ">
+            and u.id != #{param.notUserId}
+        </if>
+
+        <if test="param.sceneSource != null and param.sceneSource.size >0">
+            and s.scene_source in
+            <foreach item="source" collection="param.sceneSource" open="(" separator="," close=")">
+                #{source}
+            </foreach>
+        </if>
+        <if test="param.threeCamType !=null  ">
+            and s.three_cam_type = 'yzl'
+        </if>
+        <if test="param.notThreeCamType !=null ">
+            and s.three_cam_type is null
+        </if>
+
+        <if test="param.userId!=null">
+            and u.id  = #{param.userId}
+        </if>
+        <if test="param.numList != null and param.numList.size >0">
+            and s.num in
+            <foreach item="num" collection="param.numList" open="(" separator="," close=")">
+                #{num}
+            </foreach>
+        </if>
+
+
+    </sql>
+
+    <sql id="selectLaser">
+        SELECT s.id,'laser' as sceneType, s.title as sceneName,s.scene_code as num,s.shoot_time as createTime,s.sn_code,s.space as scennSize,s.user_name,s.view_count,s.status,
+        s.pay_status,'v4' as scene_version,s.web_site,s.init_pic as thumb,s.algorithm_time,s.user_id,s.scene_source,
+        null as asthree_cam_type ,null as is_obj
+        from fdkk_laser.t_scene s
+        left join t_user u on s.user_id = u.id
+        WHERE s.deleted = 0 and s.status !=-1 and s.scene_source in (4,5)
+
+        <if test="param.sceneName != null and param.sceneName!='' ">
+            and s.title like concat ('%',#{param.sceneName},'%')
+        </if>
+        <if test="param.snCode != null and param.snCode !='' ">
+            and s.sn_code like concat ('%',#{param.snCode},'%')
+        </if>
+        <if test="param.num != null and param.num !='' ">
+            and s.scene_code like concat ('%',#{param.num},'%')
+        </if>
+        <if test="param.userName != null and param.userName !='' ">
+            and s.user_name like concat ('%',#{param.userName},'%')
+        </if>
+        <if test="param.notUserId != null ">
+            and u.id != #{param.notUserId}
+        </if>
+
+        <if test="param.sceneSource != null and param.sceneSource.size >0">
+            and s.scene_source in
+            <foreach item="source" collection="param.sceneSource" open="(" separator="," close=")">
+                #{source}
+            </foreach>
+        </if>
+
+        <if test="param.numList != null and param.numList.size >0">
+            and s.scene_code in
+            <foreach item="num" collection="param.numList" open="(" separator="," close=")">
+                #{num}
+            </foreach>
+        </if>
+
+        <if test="param.userId!=null">
+            and u.id  = #{param.userId}
+        </if>
+    </sql>
 </mapper>