Преглед на файлове

1、迁移app发课短链
2、ipad发送消息调整
3、直播抽奖问题处理

yys преди 3 седмици
родител
ревизия
127bf07e2b

+ 7 - 0
fs-company/src/main/java/com/fs/company/controller/qw/QwSopLogsController.java

@@ -298,4 +298,11 @@ public class QwSopLogsController extends BaseController
     {
         return linkService.getWxaCodeGenerateScheme(param.getLinkStr(), param.getAppId());
     }
+
+    @PreAuthorize("@ss.hasPermi('qw:sopLogs:liveGenerate')")
+    @PostMapping("/generateLiveShortLink")
+    public R generateLiveShortLink(@RequestBody GenerateShortLinkParam param)
+    {
+        return linkService.getLiveWxaCodeGenerateScheme(param.getLinkStr(), param.getAppId());
+    }
 }

+ 206 - 38
fs-ipad-task/src/main/java/com/fs/app/service/IpadSendServer.java

@@ -67,6 +67,8 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
+import static com.fs.course.utils.LinkUtil.generateRandomStringWithLock;
+
 @Slf4j
 @Service
 @AllArgsConstructor
@@ -110,6 +112,8 @@ public class IpadSendServer {
     private final IFsCourseLinkService linkService;
 
     private static final List<String> PROJECT_NAMES = Arrays.asList("济南联志健康", "北京存在文化","宽益堂");
+    private static final String H5_LIVE_SHORT_LINK_PREFIX = "/pages_course/livingInvite.html?s=";
+    private static final String APP_LIVE_SHORT_LINK_PREFIX = "/pages_live/livingList?link=";
     private final LiveWatchLogMapper liveWatchLogMapper;
 
     /**
@@ -816,39 +820,117 @@ public class IpadSendServer {
 
 
     private void sendAppShortLink(BaseVo vo, QwSopCourseFinishTempSetting.Setting content, Map<String, FsCoursePlaySourceConfig> miniMap) {
-//        //发送短链前,先发送一个介绍语
-//        TxtVo introduction = TxtVo.builder().content("请复制以下短链内容").build();
-//        introduction.setBase(vo);
-//        ipadSendUtils.sendTxt(introduction);
-        //发送短链内容
-        String miniProgramPage = content.getMiniprogramPage();
-        String sendShortLink = null;
-        //解析直播短链信息
-        String livePrefix = "/pages_live/livingList?link=";
-        if (miniProgramPage.startsWith(livePrefix)) {
-            com.alibaba.fastjson.JSONObject obj = com.alibaba.fastjson.JSONObject.parseObject(miniProgramPage.substring(livePrefix.length()));
-            sendShortLink = livePrefix + obj.getString("link");
-        }
-        //解析课程短链信息
+        try {
+            String miniProgramPage = content.getMiniprogramPage();
+            if (StringUtils.isBlank(miniProgramPage) && StringUtils.isNotBlank(content.getLiveId())) {
+                miniProgramPage = buildAppLiveShortLinkPage(vo, content);
+            }
+            if (StringUtils.isBlank(miniProgramPage)) {
+                log.error("ID:{}-APP短链页面路径为空, liveId:{}", vo.getId(), content.getLiveId());
+                content.setSendStatus(2);
+                content.setSendRemarks("发送失败:APP短链页面路径为空");
+                return;
+            }
+
+            String sendShortLink = resolveAppShortLink(miniProgramPage);
+            if (StringUtils.isBlank(sendShortLink)) {
+                log.error("ID:{}-APP短链解析失败, page:{}", vo.getId(), miniProgramPage);
+                content.setSendStatus(2);
+                content.setSendRemarks("发送失败:APP短链解析失败");
+                return;
+            }
+
+            sendShortLink = sendShortLink.replace(".html", "");
+            String invitationCode = LinkUtil.encryptLink(sendShortLink);
+            if (StringUtils.isBlank(invitationCode)) {
+                log.error("ID:{}-APP短链加密失败, link:{}", vo.getId(), sendShortLink);
+                content.setSendStatus(2);
+                content.setSendRemarks("发送失败:短链加密失败");
+                return;
+            }
+
+            TxtVo txtVo = TxtVo.builder().content("太乙云养" + invitationCode).build();
+            txtVo.setBase(vo);
+            WxWorkResponseDTO<WxWorkSendTextMsgRespDTO> resp = ipadSendUtils.sendTxt(txtVo);
+            if (resp.getErrcode() != 0) {
+                log.debug("ID:{}-ipad接口请求返回异常:{}", vo.getId(), resp.getErrmsg());
+                content.setSendStatus(2);
+                content.setSendRemarks("发送失败:" + resp.getErrmsg());
+            }
+        } catch (Exception e) {
+            log.error("ID:{}-发送APP短链异常, liveId:{}", vo.getId(), content.getLiveId(), e);
+            content.setSendStatus(2);
+            content.setSendRemarks("发送失败:" + e.getMessage());
+        }
+    }
+
+    /**
+     * 解析APP短链,兼容直播/看课及 livingInvite 格式
+     */
+    private String resolveAppShortLink(String miniProgramPage) {
+        if (miniProgramPage.startsWith(APP_LIVE_SHORT_LINK_PREFIX)) {
+            com.alibaba.fastjson.JSONObject obj = com.alibaba.fastjson.JSONObject.parseObject(
+                    miniProgramPage.substring(APP_LIVE_SHORT_LINK_PREFIX.length()));
+            return APP_LIVE_SHORT_LINK_PREFIX + obj.getString("link");
+        }
         String coursePrefix = "/courseH5/pages/course/learning?course=";
         if (miniProgramPage.startsWith(coursePrefix)) {
-            com.alibaba.fastjson.JSONObject obj = com.alibaba.fastjson.JSONObject.parseObject(miniProgramPage.substring(coursePrefix.length()));
-            sendShortLink = coursePrefix + obj.getString("link");
+            com.alibaba.fastjson.JSONObject obj = com.alibaba.fastjson.JSONObject.parseObject(
+                    miniProgramPage.substring(coursePrefix.length()));
+            return coursePrefix + obj.getString("link");
         }
-        if (null == sendShortLink) {
-            log.warn("发送链接为空");
-            return;
+        if (miniProgramPage.contains("livingInvite") && miniProgramPage.contains("s=")) {
+            String jsonPart = miniProgramPage.substring(miniProgramPage.indexOf("s=") + 2);
+            com.alibaba.fastjson.JSONObject obj = com.alibaba.fastjson.JSONObject.parseObject(jsonPart);
+            String linkId = obj.getString("link");
+            if (StringUtils.isNotBlank(linkId)) {
+                return APP_LIVE_SHORT_LINK_PREFIX + linkId;
+            }
         }
-        sendShortLink = sendShortLink.replace(".html","");
-        String InvitationCode = LinkUtil.encryptLink(sendShortLink);
-        TxtVo txtVo = TxtVo.builder().content("康好健康"+InvitationCode).build();
-        txtVo.setBase(vo);
-        WxWorkResponseDTO<WxWorkSendTextMsgRespDTO> resp = ipadSendUtils.sendTxt(txtVo);
-        if (resp.getErrcode() != 0) {
-            log.debug("ID:{}-ipad接口请求返回异常:{}", vo.getId(), resp.getErrmsg());
-            content.setSendStatus(2);
-            content.setSendRemarks("发送失败:" + resp.getErrmsg());
+        return null;
+    }
+
+    /**
+     * 兜底构建APP直播短链页面路径
+     */
+    private String buildAppLiveShortLinkPage(BaseVo vo, QwSopCourseFinishTempSetting.Setting content) {
+        if (StringUtils.isBlank(content.getLiveId()) || vo.getQwUserId() == null || StringUtils.isBlank(vo.getExId())) {
+            return null;
         }
+        QwUser qwUser = qwUserMapper.selectById(vo.getQwUserId());
+        if (qwUser == null) {
+            return null;
+        }
+        QwExternalContact externalContact = qwExternalContactMapper.selectOne(
+                new LambdaQueryWrapper<QwExternalContact>()
+                        .eq(QwExternalContact::getQwUserId, vo.getQwUserId())
+                        .eq(QwExternalContact::getExternalUserId, vo.getExId())
+                        .last(" limit 1"));
+        if (externalContact == null) {
+            return null;
+        }
+
+        FsCourseLink link = new FsCourseLink();
+        link.setCompanyId(qwUser.getCompanyId());
+        link.setQwUserId(qwUser.getId());
+        link.setCompanyUserId(qwUser.getCompanyUserId());
+        link.setLiveId(Long.valueOf(content.getLiveId()));
+        link.setCorpId(StringUtils.isNotBlank(vo.getCorpId()) ? vo.getCorpId() : vo.getCorpCode());
+        link.setUNo(UUID.randomUUID().toString());
+        link.setQwExternalId(externalContact.getId());
+
+        String randomString = generateRandomStringWithLock();
+        if (StringUtils.isBlank(randomString)) {
+            link.setLink(UUID.randomUUID().toString().replace("-", ""));
+        } else {
+            link.setLink(randomString);
+        }
+
+        String courseJson = JSON.toJSONString(link);
+        String realLinkFull = APP_LIVE_SHORT_LINK_PREFIX + courseJson;
+        link.setRealLink(realLinkFull);
+        linkService.insertFsCourseLink(link);
+        return realLinkFull;
     }
 
     /**
@@ -858,19 +940,105 @@ public class IpadSendServer {
      * @param miniMap
      */
     private void sendLiveShortLink(BaseVo vo, QwSopCourseFinishTempSetting.Setting content, Map<String, FsCoursePlaySourceConfig> miniMap) {
-        FsCoursePlaySourceConfig courseMaConfig = miniMap.get(content.getMiniprogramAppid());
-        String miniProgramPage = content.getMiniprogramPage();
-        miniProgramPage = miniProgramPage.replace(".html","");
-        String link = linkService.getGotoWxAppLink(miniProgramPage, courseMaConfig.getAppid());
+        try {
+            String miniProgramPage = content.getMiniprogramPage();
+            if (StringUtils.isBlank(miniProgramPage)) {
+                miniProgramPage = buildLiveShortLinkPage(vo, content);
+            }
+            if (StringUtils.isBlank(miniProgramPage)) {
+                log.error("ID:{}-直播短链页面路径为空, liveId:{}", vo.getId(), content.getLiveId());
+                content.setSendStatus(2);
+                content.setSendRemarks("发送失败:直播短链页面路径为空");
+                return;
+            }
 
-        TxtVo txtVo = TxtVo.builder().content(link).build();
-        txtVo.setBase(vo);
-        WxWorkResponseDTO<WxWorkSendTextMsgRespDTO> resp = ipadSendUtils.sendTxt(txtVo);
-        if (resp.getErrcode() != 0) {
-            log.debug("ID:{}-ipad接口请求返回异常:{}", vo.getId(), resp.getErrmsg());
+            String appId = content.getMiniprogramAppid();
+            FsCoursePlaySourceConfig courseMaConfig = miniMap.get(appId);
+            if (courseMaConfig == null && StringUtils.isNotBlank(appId)) {
+                List<FsCoursePlaySourceConfig> configs = playSourceConfigService.list(
+                        new QueryWrapper<FsCoursePlaySourceConfig>().eq("appid", appId).eq("is_del", 0));
+                if (configs != null && !configs.isEmpty()) {
+                    courseMaConfig = configs.get(0);
+                }
+            }
+            if (courseMaConfig == null) {
+                log.error("ID:{}-未找到小程序配置, appId:{}", vo.getId(), appId);
+                content.setSendStatus(2);
+                content.setSendRemarks("发送失败:未找到小程序配置");
+                return;
+            }
+
+            miniProgramPage = miniProgramPage.replace(".html", "");
+            String link = linkService.getGotoWxAppLink(miniProgramPage, courseMaConfig.getAppid());
+            if (StringUtils.isBlank(link)) {
+                log.error("ID:{}-获取直播微信短链失败, page:{}", vo.getId(), miniProgramPage);
+                content.setSendStatus(2);
+                content.setSendRemarks("发送失败:获取微信短链失败");
+                return;
+            }
+
+            TxtVo txtVo = TxtVo.builder().content(link).build();
+            txtVo.setBase(vo);
+            WxWorkResponseDTO<WxWorkSendTextMsgRespDTO> resp = ipadSendUtils.sendTxt(txtVo);
+            if (resp.getErrcode() != 0) {
+                log.debug("ID:{}-ipad接口请求返回异常:{}", vo.getId(), resp.getErrmsg());
+                content.setSendStatus(2);
+                content.setSendRemarks("发送失败:" + resp.getErrmsg());
+            }
+        } catch (Exception e) {
+            log.error("ID:{}-发送直播短链异常, liveId:{}", vo.getId(), content.getLiveId(), e);
             content.setSendStatus(2);
-            content.setSendRemarks("发送失败:" + resp.getErrmsg());
+            content.setSendRemarks("发送失败:" + e.getMessage());
+        }
+    }
+
+    /**
+     * 兜底构建直播H5短链页面路径(SOP入库时未写入 miniprogramPage 时使用)
+     */
+    private String buildLiveShortLinkPage(BaseVo vo, QwSopCourseFinishTempSetting.Setting content) {
+        if (StringUtils.isBlank(content.getLiveId()) || vo.getQwUserId() == null || StringUtils.isBlank(vo.getExId())) {
+            return null;
+        }
+        QwUser qwUser = qwUserMapper.selectById(vo.getQwUserId());
+        if (qwUser == null) {
+            return null;
+        }
+        QwExternalContact externalContact = qwExternalContactMapper.selectOne(
+                new LambdaQueryWrapper<QwExternalContact>()
+                        .eq(QwExternalContact::getQwUserId, vo.getQwUserId())
+                        .eq(QwExternalContact::getExternalUserId, vo.getExId())
+                        .last(" limit 1"));
+        if (externalContact == null) {
+            return null;
+        }
+
+        FsCourseLink link = new FsCourseLink();
+        link.setCompanyId(qwUser.getCompanyId());
+        link.setQwUserId(qwUser.getId());
+        link.setCompanyUserId(qwUser.getCompanyUserId());
+        link.setLiveId(Long.valueOf(content.getLiveId()));
+        link.setCorpId(StringUtils.isNotBlank(vo.getCorpId()) ? vo.getCorpId() : vo.getCorpCode());
+        link.setUNo(UUID.randomUUID().toString());
+        link.setQwExternalId(externalContact.getId());
+
+        String randomString = generateRandomStringWithLock();
+        if (StringUtils.isBlank(randomString)) {
+            link.setLink(UUID.randomUUID().toString().replace("-", ""));
+        } else {
+            link.setLink(randomString);
+        }
+
+        String courseJson = JSON.toJSONString(link);
+        String realLinkFull = H5_LIVE_SHORT_LINK_PREFIX + courseJson;
+        realLinkFull = realLinkFull.substring(0, realLinkFull.length() - 1);
+        realLinkFull += ",\"externalId\":\"" + externalContact.getId() + "\"";
+        if (StringUtils.isNotBlank(content.getChatId())) {
+            realLinkFull += ",\"chatId\":\"" + content.getChatId() + "\"";
         }
+        realLinkFull += "}";
+        link.setRealLink(realLinkFull);
+        linkService.insertFsCourseLink(link);
+        return link.getRealLink();
     }
 
     /**

+ 2 - 0
fs-service/src/main/java/com/fs/course/service/IFsCourseLinkService.java

@@ -102,4 +102,6 @@ public interface IFsCourseLinkService
     List<FsCourseLinkDTO> selectFsCourseLinkListByQwUserId(FsCourseH5ListParam param);
 
     R getLinkInfo(Long logId);
+
+    R getLiveWxaCodeGenerateScheme(String linkStr, String appId);
 }

+ 80 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsCourseLinkServiceImpl.java

@@ -962,4 +962,84 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService
         map.put("link",link.getRealLink());
         return R.ok().put("data",map);
     }
+
+
+    @Override
+    public R getLiveWxaCodeGenerateScheme(String linkStr, String appId) {
+        CloseableHttpClient client = null;
+        try {
+            if (StringUtils.isBlank(linkStr)) {
+                return R.error("页面链接不能为空");
+            }
+            if (StringUtils.isBlank(appId)) {
+                return R.error("小程序appId不能为空");
+            }
+            client = HttpClients.createDefault();
+            if (linkStr.contains(".html")) {
+                linkStr = linkStr.replace(".html", "");
+            }
+            String[] split = linkStr.split("\\?");
+            if (split.length == 2 && split[0].length() > 0 && split[1].length() > 0) {
+                //处理页面路径
+                String pageUrl = split[0];
+                if (pageUrl.startsWith("/")) {
+                    pageUrl = pageUrl.substring(1);
+                }
+                //处理参数
+                String query = split[1];
+                query = URLEncoder.encode(query, StandardCharsets.UTF_8.toString());
+                //获取微信token
+                final WxMaService wxService = WxMaConfiguration.getMaService(appId);
+                String token = wxService.getAccessToken();
+                log.info("小程序TOKEN值-------->刷新前TOKEN:{}", token);
+                HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/generate_urllink?access_token=" + token);
+                JSONObject bodyObj = new JSONObject();
+                bodyObj.put("path", pageUrl);
+                bodyObj.put("query", query);
+                log.info("微信小程序请求参数打印:{}", bodyObj.toJSONString());
+                StringEntity entity = new StringEntity(bodyObj.toJSONString(), "UTF-8");
+                httpPost.setEntity(entity);
+                httpPost.setHeader("Content-type", "application/json");
+                httpPost.setHeader("cache-control", "max-age=0");
+                HttpEntity response = client.execute(httpPost).getEntity();
+                String responseString = EntityUtils.toString(response);
+                log.info("微信小程序接口响应数据:{}", responseString);
+                JSONObject jsonObject = JSONObject.parseObject(responseString);
+
+                if (jsonObject != null && TOKEN_VALID_CODE.equals(jsonObject.getString("errcode"))) {
+                    Integer curVersion = Integer.valueOf(version);
+                    synchronized (TOKEN_VALID_CODE) {
+                        if (curVersion.equals(version)) {
+                            log.info("小程序TOKEN:40001进入强制刷新-------->刷新前TOKEN:{}", token);
+                            wxService.getAccessToken(true);
+                            version = version.equals(Integer.MAX_VALUE) ? 0 : curVersion + 1;
+                            log.info("小程序TOKEN:40001进入强制刷新-------->刷新后TOKEN:{}", wxService.getAccessToken());
+                        }
+                        return getLiveWxaCodeGenerateScheme(linkStr, appId);
+                    }
+                }
+
+                if (jsonObject != null && !jsonObject.isEmpty() && jsonObject.containsKey("url_link")) {
+                    return R.ok().put("urlLink", jsonObject.getString("url_link"));
+                }
+                String errmsg = jsonObject != null ? jsonObject.getString("errmsg") : null;
+                if (StringUtils.isBlank(errmsg)) {
+                    errmsg = StringUtils.isNotBlank(responseString) ? responseString : "微信接口响应异常";
+                }
+                return R.error("获取失败:" + errmsg);
+            } else {
+                return R.error("页面链接错误,获取失败");
+            }
+
+        } catch (IllegalArgumentException e) {
+            log.error("获取直播小程序短链失败, appId: {}", appId, e);
+            return R.error(e.getMessage());
+        } catch (WxErrorException e) {
+            log.error("获取直播小程序短链失败, linkStr: {}, appId: {}", linkStr, appId, e);
+            return R.error("获取失败:" + e.getMessage());
+        } catch (Exception e) {
+            log.error("获取直播小程序短链失败, linkStr: {}, appId: {}", linkStr, appId, e);
+            return R.error("获取失败:" + e.getMessage());
+        }
+    }
 }

+ 0 - 8
fs-service/src/main/java/com/fs/live/mapper/LiveLotteryConfMapper.java

@@ -3,7 +3,6 @@ package com.fs.live.mapper;
 
 import com.fs.live.domain.LiveLotteryConf;
 import com.fs.live.vo.LiveLotteryConfVo;
-import com.fs.live.vo.LiveUserLotteryRecordVo;
 import org.apache.ibatis.annotations.*;
 
 import java.util.List;
@@ -101,11 +100,4 @@ public interface LiveLotteryConfMapper {
 
     @Select("SELECT * FROM live_lottery_conf WHERE live_id = #{liveId} AND lottery_status = 0 ")
     List<LiveLotteryConf> selectLiveLotteryConfListOn(LiveLotteryConf liveLotteryConf);
-
-    @Select("select lulr.*,fu.nickname as user_name,fsp.product_name as product_name\n" +
-            "        from live_user_lottery_record lulr left join fs_user fu on lulr.user_id = fu.user_id\n" +
-            "        left join live_goods lg on lulr.product_id = lg.goods_id\n" +
-            "        left join fs_store_product_scrm fsp on lg.product_id = fsp.product_id\n" +
-            "        where lulr.user_id = #{userId}")
-    List<LiveUserLotteryRecordVo> selectLiveUserLotteryRecordByUserId(long userId);
 }

+ 5 - 1
fs-service/src/main/java/com/fs/live/service/impl/LiveLotteryConfServiceImpl.java

@@ -9,6 +9,7 @@ import com.fs.live.domain.LiveLotteryRegistration;
 import com.fs.live.mapper.LiveLotteryConfMapper;
 import com.fs.live.mapper.LiveLotteryProductConfMapper;
 import com.fs.live.mapper.LiveLotteryRegistrationMapper;
+import com.fs.live.mapper.LiveUserLotteryRecordMapper;
 import com.fs.live.param.LiveLotteryProduct;
 import com.fs.live.param.LiveLotteryProductSaveParam;
 import com.fs.live.param.LotteryPO;
@@ -47,6 +48,9 @@ public class LiveLotteryConfServiceImpl implements ILiveLotteryConfService {
 
     @Autowired
     private LiveLotteryConfMapper baseMapper;
+
+    @Autowired
+    private LiveUserLotteryRecordMapper liveUserLotteryRecordMapper;
     @Autowired
     private ILiveAutoTaskService liveAutoTaskService;
     /**
@@ -310,7 +314,7 @@ public class LiveLotteryConfServiceImpl implements ILiveLotteryConfService {
 
     @Override
     public List<LiveUserLotteryRecordVo> myLottery(long userId) {
-        return baseMapper.selectLiveUserLotteryRecordByUserId(userId);
+        return liveUserLotteryRecordMapper.selectLiveUserLotteryRecordByUserId(userId);
     }
 
 

+ 32 - 15
fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java

@@ -58,10 +58,7 @@ import com.fs.sop.service.IQwSopService;
 import com.fs.sop.service.IQwSopTempVoiceService;
 import com.fs.sop.service.ISopUserLogsInfoService;
 import com.fs.sop.service.ISopUserLogsService;
-import com.fs.sop.vo.ExtCourseSopWatchLogVO;
-import com.fs.sop.vo.QwCreateLinkByAppVO;
-import com.fs.sop.vo.SopUserLogsInfoVOE;
-import com.fs.sop.vo.SopUserLogsVo;
+import com.fs.sop.vo.*;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
 import com.fs.system.service.ISysConfigService;
@@ -806,7 +803,22 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                                 } catch (Exception e) {
                                     log.error("浏览器看课模板解析失败:" + e);
                                 }
-
+                            case "20":
+                                try {
+                                    String jsonLive = configService.selectConfigByKey("his.config");
+                                    FSSysConfig sysConfigLive = JSON.parseObject(jsonLive, FSSysConfig.class);
+                                    createLiveWatchLogAndInsert(
+                                            qwUser.getCompanyId().toString(),
+                                            qwUser.getCompanyUserId().toString(),
+                                            groupUser.getId().toString(),
+                                            Long.valueOf(st.getLiveId()),
+                                            sysConfigLive.getAppId(),
+                                            2,
+                                            String.valueOf(qwUser.getId()),
+                                            param.getCorpId());
+                                } catch (Exception e) {
+                                    log.error("APP直播模板解析失败:" + e);
+                                }
                                 break;
                             default:
                                 break;
@@ -1497,7 +1509,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
         param.setIds(ids);
         log.info("一键群发操作日志1:{}", JSON.toJSONString(param));
         processQwSopLogsBySendMsg(param,param.getDraftStrategy());
-        return null;
+        return R.ok();
     }
 
     @Override
@@ -1596,12 +1608,16 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
             }else {
 
                 if (qwUser.getCompanyUserId()!=null && qwUser.getCompanyId()!=null){
-                    List<QwSopLogs> sopLogsList = processInsertSopUserLogsInfo(logs, qwUser, param, words, config, qwCompany, finalSort,
-                            finalSendType,miniMap,companies);
+
+//                    List<QwSopLogs> sopLogsList = processInsertSopUserLogsInfo(logs, qwUser, param, words, config, qwCompany, finalSort,
+//                            finalSendType,miniMap,companies);
+
+                    SopLogsResult result = processInsertSopUserLogsInfo(logs, qwUser, param, words, config, qwCompany, finalSort,
+                            finalSendType, miniMap,companies);
 
                     //批量插入 发送记录
-                    if (!sopLogsList.isEmpty()) {
-                        processAndInsertQwSopLogsBySendMsg(sopLogsList);
+                    if (!result.getSopLogsList().isEmpty()) {
+                        processAndInsertQwSopLogsBySendMsg(result.getSopLogsList());
                     }
 
                 }else {
@@ -1617,10 +1633,10 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
         return  R.ok();
     }
 
-    private List<QwSopLogs> processInsertSopUserLogsInfo(List<SopUserLogsInfo> sopUserLogsInfos,QwUser qwUser,
-                                                         SendUserLogsInfoMsgParam param,List<FastGptChatReplaceWords> words,
-                                                         CourseConfig config,QwCompany qwCompany,int finalSort,int finalSendType,
-                                                         Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap,List<Company> companies ){
+    private SopLogsResult processInsertSopUserLogsInfo(List<SopUserLogsInfo> sopUserLogsInfos, QwUser qwUser,
+                                                       SendUserLogsInfoMsgParam param, List<FastGptChatReplaceWords> words,
+                                                       CourseConfig config, QwCompany qwCompany, int finalSort, int finalSendType,
+                                                       Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap, List<Company> companies ){
 
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
@@ -1635,6 +1651,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
         }
         List<QwSopLogs> sopLogsList=new ArrayList<>();
 
+
         //域名
 //        String domainName = companyUserMapper.selectDomainByUserId(qwUser.getCompanyUserId());
 //        if (StringUtils.isEmpty(domainName)){
@@ -1716,7 +1733,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
 
 
 
-        return sopLogsList;
+        return new SopLogsResult(sopLogsList);
 
     }
 

+ 25 - 0
fs-service/src/main/java/com/fs/sop/vo/SopLogsResult.java

@@ -0,0 +1,25 @@
+package com.fs.sop.vo;
+
+import com.fs.sop.domain.QwSopLogs;
+
+import java.util.List;
+
+public class SopLogsResult {
+
+    private List<QwSopLogs> sopLogsList;
+
+    // 构造方法
+    public SopLogsResult(List<QwSopLogs> sopLogsList) {
+        this.sopLogsList = sopLogsList;
+    }
+
+    // getter和setter
+    public List<QwSopLogs> getSopLogsList() {
+        return sopLogsList;
+    }
+
+    public void setSopLogsList(List<QwSopLogs> sopLogsList) {
+        this.sopLogsList = sopLogsList;
+    }
+
+}

+ 21 - 2
fs-service/src/main/resources/mapper/his/FsIntegralCartMapper.xml

@@ -91,7 +91,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
     </select>
     <select id="getFsIntegralCartList" resultType="com.fs.his.vo.GetFsIntegralCartListVo">
-        select fc.*,fg.*,fg.integral as goodsIntegral,fu.integral as userIntegral
+        select
+            fc.id           as cartId,
+            fc.user_id      as userId,
+            fc.goods_id     as goodsId,
+            fc.cart_num     as quantity,
+            fc.is_selected  as isSelected,
+            fc.create_time  as createTime,
+            fc.update_time  as updateTime,
+            fg.img_url      as imgUrl,
+            fg.images       as images,
+            fg.goods_name   as goodsName,
+            fg.ot_price     as otPrice,
+            fg.goods_type   as goodsType,
+            fg.status       as status,
+            fg.integral     as goodsIntegral,
+            fg.stock        as stock,
+            fg.descs        as descs,
+            fg.bar_code     as barCode,
+            fu.integral     as userIntegral
         from fs_integral_cart fc
         left join fs_integral_goods fg on fc.goods_id = fg.goods_id
         left join fs_user fu on fu.user_id = fc.user_id
@@ -103,10 +121,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 and fg.goods_name like concat('%', #{param.goodsName}, '%')
             </if>
             <if test="cartId != null and cartId.size() > 0">
-                and fc.cart_id in
+                and fc.id in
                 <foreach collection="cartId" item="cartId" open="(" close=")" separator=",">#{cartId}</foreach>
             </if>
         </where>
+        order by fc.create_time desc
     </select>
 
     <delete id="deleteCartByGoodsId">