Quellcode durchsuchen

Merge branch 'master' into hlx

helixiao vor 1 Jahr
Ursprung
Commit
d3ecca70c8
16 geänderte Dateien mit 139 neuen und 38 gelöschten Zeilen
  1. 3 1
      commons/src/main/java/com/jzg/commons/entity/dto/MessageEditParam.java
  2. 4 2
      commons/src/main/java/com/jzg/commons/entity/dto/MessageParam.java
  3. 4 2
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java
  4. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  5. 20 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/component/ZmCrawlerRequestComponent.java
  6. 1 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/entity/po/ZmCrawlerOrder.java
  7. 10 10
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZhongMeiCrawlerRequestImpl.java
  8. 14 5
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZmCrawlerOrderServiceImpl.java
  9. 10 1
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/ZmCrawlerOrderService.java
  10. 38 6
      tenant/organization/src/main/java/com/jzg/organization/controller/MessageController.java
  11. 1 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysMessageMapper.java
  12. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/SysMessageService.java
  13. 8 0
      tenant/organization/src/main/java/com/jzg/organization/service/SysMessageTemplateService.java
  14. 2 6
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysMessageServiceImpl.java
  15. 10 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysMessageTemplateServiceImpl.java
  16. 12 2
      tenant/organization/src/main/resources/mapper/SysMessageMapper.xml

+ 3 - 1
commons/src/main/java/com/jzg/commons/entity/dto/MessageEditParam.java

@@ -8,7 +8,9 @@ import lombok.Data;
 @Data
 public class MessageEditParam {
 
-    @NotNull(message = "消息id不能为空")
     @Schema(description = "消息id")
     private String id;
+
+    @Schema(description = "消息类型")
+    private Integer type;
 }

+ 4 - 2
commons/src/main/java/com/jzg/commons/entity/dto/MessageParam.java

@@ -8,7 +8,9 @@ import lombok.Data;
 @Data
 public class MessageParam extends PageRequest {
 
-    /** 模版编号 */
-    @Schema(description = "类型")
+    /** 类型(0-增员消息 1-系统消息 2-订单消息 3-钱包消息 ) */
+    @Schema(description = "类型(0-增员消息 1-系统消息 2-订单消息 3-钱包消息 )")
     private Integer type;
+
+    private String userId;
 }

+ 4 - 2
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java

@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
-@FeignClient(name="jzg-organization",url = "http://192.168.0.250:8084/")
+@FeignClient(name="jzg-organization",url = "http://192.168.0.19:8084/")
 public interface OrgClient {
 
     /**
@@ -70,7 +70,9 @@ public interface OrgClient {
     public List<PtlAgreementCostTypeVo> queryByCostId(@RequestParam String costId);
 
     @GetMapping(value = "/userInfo/getUserByMobile")
-    public SalesmanVo getUserByMobile(@RequestParam String mobile, @RequestHeader("Authorization") String authToken);
+    public SalesmanVo getUserByMobile(@RequestParam String mobile,
+                                      @RequestHeader("Authorization") String authToken,
+                                      @RequestHeader("system_code") String systemCode);
 
     /**
      * 用户账户信息查询

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -370,7 +370,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         insOrdersVo.setAgreementName(ptlAgreement.getData().getAgreement().getAgreementName());
 
         // 业务员信息
-        SalesmanVo salesmanInfo = orgClient.getUserByMobile(insOrdersVo.getCreateBy(),baseController.getToken());
+        SalesmanVo salesmanInfo = orgClient.getUserByMobile(insOrdersVo.getCreateBy(),baseController.getToken(),baseController.getAppSystemCode());
         InsOrdersVo.Salesman salesman = new InsOrdersVo.Salesman();
         salesman.setName(salesmanInfo.getName());
         salesman.setDeptName(salesmanInfo.getDeptName());

+ 20 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/component/ZmCrawlerRequestComponent.java

@@ -24,6 +24,7 @@ import com.jzg.quotation.zhongmei.crawler.properties.ZmCrawlerProperties;
 import com.jzg.quotation.zhongmei.crawler.util.Base64Tool;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RBucket;
 import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.springframework.http.HttpHeaders;
@@ -71,6 +72,11 @@ public class ZmCrawlerRequestComponent {
 
     public static final String USER_CODE = "USER_CODE";
 
+    public static final String ZM_SAVE = "zm:save:";
+
+    public static final Duration ZM_SAVE_TIME = Duration.ofHours(3L);
+
+
     /**
      * 验证码
      * @return
@@ -851,6 +857,18 @@ public class ZmCrawlerRequestComponent {
         return request(RequestUrl.POLICY_PRINT, printRequest, ZmCrawlerPolicyPrintResponse.class );
     }
 
+    /**
+     * 保存订单财险
+     * @param quotedPriceResponse
+     * @param orderNo
+     */
+    public void cacheZmCrawlerSaveResponse(ZmCrawlerQuotedPriceResponse quotedPriceResponse, String orderNo) {
+        String response = JSONObject.toJSONString(quotedPriceResponse);
+        RBucket<String> bucket = redissonClient.getBucket(ZM_SAVE + orderNo);
+        bucket.set(response, ZM_SAVE_TIME);
+    }
+
+
     public static void main(String[] args) {
         System.out.println(Base64Tool.encode(JSONObject.toJSONString("{\n" +
                 "            \"head\": {\n" +
@@ -876,4 +894,6 @@ public class ZmCrawlerRequestComponent {
                 "            \"platModelCode\": \"\"\n" +
                 "        }")));
     }
+
+
 }

+ 1 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/entity/po/ZmCrawlerOrder.java

@@ -16,6 +16,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
 @Data
 @Document("zhongmei.crawler.order")
 public class ZmCrawlerOrder {
+
     @Id
     private String id;
     /**

+ 10 - 10
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZhongMeiCrawlerRequestImpl.java

@@ -67,29 +67,29 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
                 .getAttributionInformationVo();
         String userCode = zmCrawlerRequestComponent.getUserCode(attributionInformationVo.getUsername());
         String authorization = zmCrawlerRequestComponent.getAuthorization(attributionInformationVo.getUsername());
-        //获取配置信息
+        // 1.1 配置信息
         ZmCrawlerConfigureParameters zmCrawlerConfigureParameters = ConfigureParametersConversion.conversionEntity(ZmCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         BaseRequestHead head = new BaseRequestHead(authorization, "2");
-        //获取归属信息
+        // 1.2 获取归属信息
         SaleInfoDTO saleInfoDTO = zmCrawlerRequestComponent.getSaleInfoDTO(zmCrawlerConfigureParameters, head);
-        //车型查询
+        // 2.0 车型查询
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
         ZmCrawlerModelQueryRequest modelQueryRequest = new ZmCrawlerModelQueryRequest(saleInfoDTO,head,carInfoVo);
         List<ZmCrawlerModelQueryResponse.FullCarDataDTO> fullCarDataDTOS = zmCrawlerRequestComponent.modelQuery(modelQueryRequest);
-        //过滤车型
+        // 2.1 获取相同的车型
         ZmCrawlerModelQueryResponse.FullCarDataDTO fullCarDataDTO = CarModelsFilterUtils.to(fullCarDataDTOS, quoteVo.getCarInfoVo());
-        //获取实际价值
+        // 2.2 计算折旧价格
         ZmCrawlerActualValueRequest actualValueRequest = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),head);
         ZmCrawlerActualValueResponse actualValueResponse = zmCrawlerRequestComponent.getActualValue(actualValueRequest);
 
-        //报价
+        // 3.0 保费计算
         ZmCrawlerQuotedPriceRequest quotedPriceRequest = new ZmCrawlerQuotedPriceRequest(zmCrawlerConfigureParameters, quoteVo, saleInfoDTO, fullCarDataDTO, actualValueResponse, userCode, head);
         ZmCrawlerQuotedPriceResponse quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
+        // 3.1 缓存数据
+        zmCrawlerRequestComponent.cacheZmCrawlerSaveResponse(quotedPriceResponse, quotedPriceResponse.getBussinessMain().getContractMainNo());
 
-        ZmCrawlerOrder zmCrawlerOrder = new ZmCrawlerOrder();
-        zmCrawlerOrder.setOrdersNo(quoteVo.getOrder().getOrdersNo());
-        zmCrawlerOrder.setUserName(quotedPriceResponse.getBussinessMain().getSaleInfo().getSalesman().getHandlerName());
-        zmCrawlerOrderService.save(zmCrawlerOrder);
+        // 4.0 保存数据
+        zmCrawlerOrderService.save(quoteVo,quotedPriceResponse);
 
         return ZmCrawlerQuoteResultVoBuild.build(quoteVo, quotedPriceResponse);
     }

+ 14 - 5
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZmCrawlerOrderServiceImpl.java

@@ -1,5 +1,8 @@
 package com.jzg.quotation.zhongmei.crawler.service.Impl;
 
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.quotation.commons.utils.TimeProcessing;
+import com.jzg.quotation.zhongmei.crawler.entity.Response.ZmCrawlerQuotedPriceResponse;
 import com.jzg.quotation.zhongmei.crawler.entity.po.ZmCrawlerOrder;
 import com.jzg.quotation.zhongmei.crawler.repository.ZmCrawlerOrderReposiroty;
 import com.jzg.quotation.zhongmei.crawler.service.ZmCrawlerOrderService;
@@ -7,6 +10,8 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Optional;
+
 /**
  * @description: todo
  * @author: shenwd
@@ -34,12 +39,16 @@ public class ZmCrawlerOrderServiceImpl implements ZmCrawlerOrderService {
 
     }
 
-    /**
-     * @param ZmCrawlerOrder
-     * @return
-     */
     @Override
-    public ZmCrawlerOrder save(ZmCrawlerOrder ZmCrawlerOrder) {
+    public ZmCrawlerOrder save(QuoteVo quoteVo, ZmCrawlerQuotedPriceResponse quotedPriceResponse) {
+        ZmCrawlerOrder zmCrawlerOrder = new ZmCrawlerOrder();
+        zmCrawlerOrder.setId(quoteVo.getOrder().getOrdersNo());
+        zmCrawlerOrder.setOrdersNo(quoteVo.getOrder().getOrdersNo());
+
+
+        zmCrawlerOrder.setBussinessNo(quotedPriceResponse.getBussinessMain().getContractMainNo());
+        zmCrawlerOrderReposiroty.save(zmCrawlerOrder);
         return null;
     }
+
 }

+ 10 - 1
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/ZmCrawlerOrderService.java

@@ -1,5 +1,7 @@
 package com.jzg.quotation.zhongmei.crawler.service;
 
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.quotation.zhongmei.crawler.entity.Response.ZmCrawlerQuotedPriceResponse;
 import com.jzg.quotation.zhongmei.crawler.entity.po.ZmCrawlerOrder;
 
 /**
@@ -12,5 +14,12 @@ public interface ZmCrawlerOrderService {
 
     void deleteByOrdersNo(String ordersNo);
 
-    ZmCrawlerOrder save(ZmCrawlerOrder ZmCrawlerOrder);
+    /**
+     * 保存订单信息
+     * @param quoteVo
+     * @param quotedPriceResponse
+     * @return
+     */
+    ZmCrawlerOrder save(QuoteVo quoteVo, ZmCrawlerQuotedPriceResponse quotedPriceResponse);
+
 }

+ 38 - 6
tenant/organization/src/main/java/com/jzg/organization/controller/MessageController.java

@@ -1,5 +1,6 @@
 package com.jzg.organization.controller;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -11,6 +12,7 @@ import com.jzg.commons.entity.po.*;
 import com.jzg.commons.entity.vo.MessageNoticeVo;
 import com.jzg.commons.entity.vo.MessageVo;
 import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.organization.service.*;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -18,7 +20,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 消息管理接口
@@ -36,6 +40,9 @@ public class MessageController extends BaseController {
     @Autowired
     private SysMessageUserService messageUserService;
 
+    @Autowired
+    private SysMessageTemplateService messageTemplateService;
+
     @Autowired
     private SysUserService userService;
 
@@ -49,6 +56,10 @@ public class MessageController extends BaseController {
     @PostMapping("/messageList")
     @Operation(summary = "消息列表分页")
     public HttpResult messageList(@RequestBody MessageParam param){
+        String userName = getUserName();
+        SysUser sysUser = userService.getOne(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getMobile, userName));
+        param.setUserId(sysUser.getId());
         Page<MessageVo> result = messageService.queryPage(param);
         return HttpResult.ok(result);
     }
@@ -60,7 +71,10 @@ public class MessageController extends BaseController {
     @Operation(summary = "获取消息数量", description = "获取消息数量")
     @GetMapping(value = "/getMessageCount")
     public HttpResult getMessageCount() {
-        return HttpResult.ok(messageService.getMessageCount());
+        String userName = getUserName();
+        SysUser sysUser = userService.getOne(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getMobile, userName));
+        return HttpResult.ok(messageService.getMessageCount(sysUser.getId()));
     }
 
     /**
@@ -76,11 +90,29 @@ public class MessageController extends BaseController {
         SysUserJzgInfo info = userJzgInfoService.getOne(new LambdaQueryWrapper<SysUserJzgInfo>()
                 .eq(SysUserJzgInfo::getUserId, sysUser.getId())
         );
-        LambdaUpdateWrapper<SysMessageUser>  wrapper = new LambdaUpdateWrapper<>();
-        wrapper.eq(SysMessageUser::getUserId, info.getId())
-                .eq(SysMessageUser::getMessageId, param.getId())
-                .set(SysMessageUser::getIsRead, 1);
-        messageUserService.update(wrapper);
+        if(StringUtils.isNotBlank(param.getId())){
+            LambdaUpdateWrapper<SysMessageUser>  wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(SysMessageUser::getUserId, info.getId())
+                    .eq(SysMessageUser::getMessageId, param.getId())
+                    .set(SysMessageUser::getIsRead, 1);
+            messageUserService.update(wrapper);
+        }else if(Objects.nonNull(param.getType())){
+            List<SysMessageTemplate> templates = messageTemplateService.getTemplateByType(param.getType());
+            if(CollUtil.isNotEmpty(templates)){
+                List<String> codes = templates.stream().map(SysMessageTemplate::getTplCode).collect(Collectors.toList());
+                LambdaUpdateWrapper<SysMessage> wrapper = new LambdaUpdateWrapper<>();
+                wrapper.in(SysMessage::getTplCode, codes);
+                wrapper.eq(SysMessage::getIsDelete, 0);
+                List<SysMessage> messages = messageService.list(wrapper);
+                List<String> messageIds = messages.stream().map(SysMessage::getId).collect(Collectors.toList());
+                LambdaUpdateWrapper<SysMessageUser> wrapper2 = new LambdaUpdateWrapper<>();
+                wrapper2.eq(SysMessageUser::getUserId, info.getId())
+                        .in(SysMessageUser::getMessageId, messageIds)
+                        .set(SysMessageUser::getIsRead, 1);
+                messageUserService.update(wrapper2);
+            }
+
+        }
         return HttpResult.ok("修改成功");
     }
 

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/mapper/SysMessageMapper.java

@@ -31,7 +31,7 @@ public interface SysMessageMapper extends BaseMapper<SysMessage> {
      * 消息列表
      * @return
      */
-    List<MessageVo> queryList();
+    List<MessageVo> queryList(@Param("userId")String userId);
 }
 
 

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/service/SysMessageService.java

@@ -26,7 +26,7 @@ public interface SysMessageService extends IService<SysMessage> {
      * 消息数量获取
      * @return
      */
-    Map<Integer, Long> getMessageCount();
+    Map<Integer, Long> getMessageCount(String userId);
 
     /**
      * 消息新增

+ 8 - 0
tenant/organization/src/main/java/com/jzg/organization/service/SysMessageTemplateService.java

@@ -6,6 +6,7 @@ import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.po.SysMessageTemplate;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -23,4 +24,11 @@ public interface SysMessageTemplateService extends IService<SysMessageTemplate>
      */
     SysMessageTemplate getModel(MessageCodeEnum messageCodeEnum);
 
+    /**
+     * 根据类型获取消息模版
+     * @param type 消息模版编码
+     * @return SysMessageTemplate  消息模版
+     */
+    List<SysMessageTemplate> getTemplateByType(Integer type);
+
 }

+ 2 - 6
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysMessageServiceImpl.java

@@ -1,19 +1,15 @@
 package com.jzg.organization.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.entity.dto.MessageAddParam;
 import com.jzg.commons.entity.dto.MessageParam;
 import com.jzg.commons.entity.po.SysMessage;
-import com.jzg.commons.entity.po.SysMessageNotice;
 import com.jzg.commons.entity.po.SysMessageUser;
 import com.jzg.commons.entity.vo.MessageVo;
-import com.jzg.commons.util.StringUtils;
 import com.jzg.organization.mapper.SysMessageMapper;
 import com.jzg.organization.mapper.SysMessageUserMapper;
 import com.jzg.organization.service.SysMessageService;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,8 +39,8 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
     }
 
     @Override
-    public Map<Integer, Long> getMessageCount() {
-        List<MessageVo> messageVoList = baseMapper.queryList();
+    public Map<Integer, Long> getMessageCount(String userId) {
+        List<MessageVo> messageVoList = baseMapper.queryList(userId);
         Map<Integer, Long> countResult = messageVoList.stream()
                 .filter(x -> x.getIsRead().equals(0))
                 .collect(Collectors.groupingBy(MessageVo::getTplType, Collectors.counting()));

+ 10 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysMessageTemplateServiceImpl.java

@@ -12,6 +12,7 @@ import org.apache.commons.lang3.text.StrSubstitutor;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -31,6 +32,15 @@ public class SysMessageTemplateServiceImpl extends ServiceImpl<SysMessageTemplat
                 .eq(SysMessageTemplate::getIsDelete, 0);
         return baseMapper.selectOne(wrapper);
     }
+
+    @Override
+    public List<SysMessageTemplate> getTemplateByType(Integer type) {
+        LambdaQueryWrapper<SysMessageTemplate> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysMessageTemplate::getType, type)
+                .eq(SysMessageTemplate::getIsEnable, 0)
+                .eq(SysMessageTemplate::getIsDelete, 0);
+        return baseMapper.selectList(wrapper);
+    }
 }
 
 

+ 12 - 2
tenant/organization/src/main/resources/mapper/SysMessageMapper.xml

@@ -33,17 +33,27 @@
             <if test="param.type != null">
                 and smt.type = #{param.type}
             </if>
+
+            <if test="param.userId != null and param.userId != ''">
+                and smu.user_id = #{param.userId}
+            </if>
         </where>
         ORDER BY sm.create_time DESC
     </select>
     <select id="queryList" resultType="com.jzg.commons.entity.vo.MessageVo">
-        SELECT sm.id, sm.title, sm.content, sm.tpl_id AS tplId,
+        SELECT sm.id, sm.title, sm.content,
         sm.tpl_code AS tplCode,sm.create_by as createBy,sm.create_time as createTime,
         sm.update_by as updateBy,sm.update_time as updateTime,sm.is_delete as isDelete,sm.system_code as systemCode,
         smu.user_id as userId, smu.is_read as isRead ,smt.type as tplType
         FROM sys_message_user smu
         LEFT JOIN sys_message sm on smu.message_id = sm.id
-        LEFT JOIN sys_message_template smt on sm.tpl_id = smt.id
+        LEFT JOIN sys_message_template smt on sm.tpl_code = smt.tpl_code
+        <where>
+            sm.id is not null
+            <if test="userId != null and userId != ''">
+                and smu.user_id = #{userId}
+            </if>
+        </where>
         ORDER BY sm.create_time DESC
     </select>
 </mapper>