Parcourir la source

Merge remote-tracking branch 'origin/master'

yh il y a 2 jours
Parent
commit
d808223414
21 fichiers modifiés avec 410 ajouts et 300 suppressions
  1. 41 0
      fs-admin/src/main/java/com/fs/course/business/FsVideoResourceBusinessService.java
  2. 27 23
      fs-admin/src/main/java/com/fs/course/controller/FsVideoResourceController.java
  3. 20 5
      fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java
  4. 2 0
      fs-service/src/main/java/com/fs/course/domain/FsUserCourseVideo.java
  5. 18 13
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java
  6. 16 6
      fs-service/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java
  7. 171 215
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  8. 3 0
      fs-service/src/main/java/com/fs/his/domain/FsUserInformationCollection.java
  9. 3 4
      fs-service/src/main/java/com/fs/his/mapper/FsPackageOrderMapper.java
  10. 3 4
      fs-service/src/main/java/com/fs/his/service/IFsPackageOrderService.java
  11. 29 12
      fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java
  12. 22 6
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java
  13. 12 0
      fs-service/src/main/java/com/fs/his/vo/FsUserInfoCollectionAndStoreOrderVo.java
  14. 26 4
      fs-service/src/main/java/com/fs/ipad/IpadSendUtils.java
  15. 3 3
      fs-service/src/main/resources/application-config-druid-cfryt-test.yml
  16. 3 3
      fs-service/src/main/resources/application-config-druid-cfryt.yml
  17. 1 1
      fs-service/src/main/resources/application-config-fzbt.yml
  18. 1 1
      fs-service/src/main/resources/application-config-myhk.yml
  19. 6 0
      fs-service/src/main/resources/mapper/his/FsPackageOrderMapper.xml
  20. 2 0
      fs-service/src/main/resources/mapper/his/FsUserInformationCollectionMapper.xml
  21. 1 0
      fs-service/src/main/resources/mapper/qw/QwGroupChatMapper.xml

+ 41 - 0
fs-admin/src/main/java/com/fs/course/business/FsVideoResourceBusinessService.java

@@ -0,0 +1,41 @@
+package com.fs.course.business;
+
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.fs.course.domain.FsUserCourseVideo;
+import com.fs.course.domain.FsVideoResource;
+import com.fs.course.service.IFsUserCourseVideoService;
+import com.fs.course.service.IFsVideoResourceService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class FsVideoResourceBusinessService {
+
+    private final IFsVideoResourceService fsVideoResourceService;
+
+    private final IFsUserCourseVideoService fsUserCourseVideoService;
+
+    public FsVideoResourceBusinessService(IFsVideoResourceService fsVideoResourceService,
+                                          IFsUserCourseVideoService fsUserCourseVideoService) {
+        this.fsVideoResourceService = fsVideoResourceService;
+        this.fsUserCourseVideoService = fsUserCourseVideoService;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void edit(FsVideoResource fsVideoResource) {
+        FsVideoResource oldResource = fsVideoResourceService.getById(fsVideoResource.getId());
+        fsVideoResourceService.updateById(fsVideoResource);
+        fsUserCourseVideoService.update(new UpdateWrapper<FsUserCourseVideo>()
+                .eq("video_url", oldResource.getVideoUrl())
+                .set("video_url", fsVideoResource.getVideoUrl())
+                .set("line_one", fsVideoResource.getLine1())
+                .set("line_two", fsVideoResource.getLine2())
+                .set("line_three", fsVideoResource.getLine3())
+                .set("duration", fsVideoResource.getDuration())
+                .set("file_size", fsVideoResource.getFileSize())
+                .set("file_key", fsVideoResource.getFileKey())
+                .set("file_name", fsVideoResource.getFileName())
+                .set("thumbnail", fsVideoResource.getThumbnail())
+        );
+    }
+}

+ 27 - 23
fs-admin/src/main/java/com/fs/course/controller/FsVideoResourceController.java

@@ -11,6 +11,8 @@ import com.fs.common.core.domain.model.LoginUser;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ServletUtils;
+import com.fs.config.cloud.CloudHostProper;
+import com.fs.course.business.FsVideoResourceBusinessService;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.FsVideoResource;
 import com.fs.course.service.IFsVideoResourceService;
@@ -19,7 +21,6 @@ import com.fs.framework.web.service.TokenService;
 import com.fs.system.service.ISysConfigService;
 import com.github.pagehelper.PageHelper;
 import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
@@ -37,11 +38,13 @@ public class FsVideoResourceController extends BaseController {
 
     private final IFsVideoResourceService fsVideoResourceService;
 
-    @Autowired
-    private TokenService tokenService;
+    private final TokenService tokenService;
 
-    @Autowired
-    private ISysConfigService configService;
+    private final ISysConfigService configService;
+
+    private final CloudHostProper cloudHostProper;
+
+    private final FsVideoResourceBusinessService videoResourceBusinessService;
 
     /**
      * 查询视频素材库列表
@@ -53,8 +56,7 @@ public class FsVideoResourceController extends BaseController {
                               @RequestParam(required = false) Integer typeId,
                               @RequestParam(required = false) Integer typeSubId,
                               @RequestParam(required = false, defaultValue = "1") Integer pageNum,
-                              @RequestParam(required = false, defaultValue = "10") Integer pageSize)
-    {
+                              @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
         Map<String, Object> params = new HashMap<>();
         params.put("resourceName", resourceName);
         params.put("fileName", fileName);
@@ -63,7 +65,7 @@ public class FsVideoResourceController extends BaseController {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         String json = configService.selectConfigByKey("course.config");
         CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
-        if (ObjectUtil.isNotEmpty(config.getIsBound())&&config.getIsBound()){
+        if (ObjectUtil.isNotEmpty(config.getIsBound()) && config.getIsBound()) {
             params.put("userId", loginUser.getUser().getUserId());
         }
         PageHelper.startPage(pageNum, pageSize);
@@ -77,8 +79,7 @@ public class FsVideoResourceController extends BaseController {
      */
     @PreAuthorize("@ss.hasPermi('course:videoResource:query')")
     @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
-    {
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
         return AjaxResult.success(fsVideoResourceService.getById(id));
     }
 
@@ -88,13 +89,12 @@ public class FsVideoResourceController extends BaseController {
     @PreAuthorize("@ss.hasPermi('course:videoResource:add')")
     @Log(title = "视频素材库", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody FsVideoResource fsVideoResource)
-    {
+    public AjaxResult add(@RequestBody FsVideoResource fsVideoResource) {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         Long userId = loginUser.getUser().getUserId();
         String json = configService.selectConfigByKey("course.config");
         CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
-        if (ObjectUtil.isNotEmpty(config.getIsBound())&&config.getIsBound()){
+        if (ObjectUtil.isNotEmpty(config.getIsBound()) && config.getIsBound()) {
             fsVideoResource.setUserId(userId);
         }
         fsVideoResource.setCreateTime(LocalDateTime.now());
@@ -108,8 +108,12 @@ public class FsVideoResourceController extends BaseController {
     @PreAuthorize("@ss.hasPermi('course:videoResource:edit')")
     @Log(title = "视频素材库", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody FsVideoResource fsVideoResource)
-    {
+    public AjaxResult edit(@RequestBody FsVideoResource fsVideoResource) {
+        if (("今正科技".equals(cloudHostProper.getCompanyName()))) {
+            // 同步资源到课程
+            videoResourceBusinessService.edit(fsVideoResource);
+            return AjaxResult.success();
+        }
         fsVideoResourceService.updateById(fsVideoResource);
         return AjaxResult.success();
     }
@@ -120,8 +124,7 @@ public class FsVideoResourceController extends BaseController {
     @PreAuthorize("@ss.hasPermi('course:videoResource:remove')")
     @Log(title = "视频素材库", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids)
-    {
+    public AjaxResult remove(@PathVariable Long[] ids) {
         Wrapper<FsVideoResource> updateWrapper = Wrappers.<FsVideoResource>lambdaUpdate()
                 .set(FsVideoResource::getIsDel, 1)
                 .in(FsVideoResource::getId, Arrays.asList(ids));
@@ -131,6 +134,7 @@ public class FsVideoResourceController extends BaseController {
 
     /**
      * 批量修改视频分类
+     *
      * @param typeId
      * @param typeSubId
      * @param ids
@@ -142,13 +146,13 @@ public class FsVideoResourceController extends BaseController {
     public AjaxResult batchUpdateClass(@RequestParam("typeId") Long typeId,
                                        @RequestParam("typeSubId") Long typeSubId,
                                        @RequestParam("ids") String ids) {
-        if(typeId == null || typeId <= 0){
+        if (typeId == null || typeId <= 0) {
             return AjaxResult.error("请选择分类");
         }
-        if(typeSubId == null || typeSubId <= 0){
+        if (typeSubId == null || typeSubId <= 0) {
             return AjaxResult.error("请选择子分类");
         }
-        if(ids == null || ids.isEmpty()){
+        if (ids == null || ids.isEmpty()) {
             return AjaxResult.error("请选择要修改的分类");
         }
 
@@ -178,12 +182,12 @@ public class FsVideoResourceController extends BaseController {
         String json = configService.selectConfigByKey("course.config");
         CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
 
-        list.forEach(v ->{
+        list.forEach(v -> {
             v.setCreateTime(LocalDateTime.now());
-            if (ObjectUtil.isNotEmpty(config.getIsBound())&&config.getIsBound()){
+            if (ObjectUtil.isNotEmpty(config.getIsBound()) && config.getIsBound()) {
                 v.setUserId(userId);
             }
-        } );
+        });
         fsVideoResourceService.saveBatch(list);
         return AjaxResult.success();
     }

+ 20 - 5
fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java

@@ -128,6 +128,9 @@ public class FsStoreOrderController extends BaseController
     private IFsDfAccountService fsDfAccountService;
     @Autowired
     private FsUserInformationCollectionMapper userInformationCollectionMapper;
+    @Autowired
+    private IFsPackageOrderService fsPackageOrderService;
+
     /**
      * 查询订单列表
      */
@@ -652,8 +655,8 @@ public class FsStoreOrderController extends BaseController
     {
         String nickName = getLoginUser().getUser().getNickName();
         if(CloudHostUtils.hasCloudHostName("金牛明医")){
-            FsUserInformationCollection fsUserInformationCollection = userInformationCollectionMapper.selectFsUserInformationCollectionByOrderCode(fsStoreOrder.getOrderCode());
-            if (fsUserInformationCollection != null&&fsUserInformationCollection.getDoctorType2Confirm()!=1) {
+            FsUserInfoCollectionAndStoreOrderVo info = fsPackageOrderService.selectInformationCollectionByStoreOrderId(fsStoreOrder.getOrderId());
+            if (info != null&&info.getDoctorType2Confirm()!=1) {
                 return AjaxResult.error("药师未确认");
             }
         }
@@ -760,8 +763,16 @@ public class FsStoreOrderController extends BaseController
         if (orderIds.isEmpty()){
             return R.ok();
         }
-        orderIds.forEach(orderId->{
+        //失败的订单
+        StringBuilder msg = new StringBuilder();
+        for (Long orderId : orderIds) {
             try {
+                //判断是否是信息采集订单 且 药师已经确认
+                FsUserInfoCollectionAndStoreOrderVo info = fsPackageOrderService.selectInformationCollectionByStoreOrderId(orderId);
+                if (info != null&&info.getDoctorType2Confirm()!=1) {
+                    msg.append("订单编号:").append(info.getStoreOrderCode()).append(",推送erp失败,失败原因-信息采集订单,药师暂未确认!\n");
+                    continue;
+                }
                 df.setOrderId(orderId);
                 FsStoreOrderDf temp = fsStoreOrderDfService.selectFsStoreOrderDfByOrderId(df.getOrderId());
                 if (temp == null){
@@ -777,8 +788,12 @@ public class FsStoreOrderController extends BaseController
                 throw new RuntimeException(e);
             }
 
-        });
-        return R.ok();
+        }
+        if (msg.toString().isEmpty()){
+            return R.ok();
+        } else {
+            return R.error(msg.toString());
+        }
     }
 
 

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

@@ -1,5 +1,6 @@
 package com.fs.course.domain;
 
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntity;
@@ -64,6 +65,7 @@ public class FsUserCourseVideo extends BaseEntity
 
     private String fileName;
 
+    @TableLogic(value = "0", delval = "1")
     private Integer isDel;
 
     /**

+ 18 - 13
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java

@@ -1,5 +1,6 @@
 package com.fs.course.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.course.domain.FsUserCourseVideo;
 import com.fs.course.param.CourseVideoUpdates;
 import com.fs.course.param.FsCourseListBySidebarParam;
@@ -25,8 +26,7 @@ import java.util.Map;
  * @author fs
  * @date 2024-05-17
  */
-public interface FsUserCourseVideoMapper
-{
+public interface FsUserCourseVideoMapper extends BaseMapper<FsUserCourseVideo> {
     /**
      * 查询课堂视频
      *
@@ -94,7 +94,7 @@ public interface FsUserCourseVideoMapper
             "<if test = ' maps.userId!=null and maps.userId != \"\" '> " +
             "and v.user_id = #{maps.userId} " +
             "</if>" +
-            " order by v.course_sort  "+
+            " order by v.course_sort  " +
             "</script>"})
     List<FsUserCourseVideo> selectFsUserCourseVideoListByCourseId(@Param("maps") FsUserCourseVideo fsUserCourseVideo);
 
@@ -110,7 +110,7 @@ public interface FsUserCourseVideoMapper
             "<if test = ' maps.keyword!=null and maps.keyword != \"\" '> " +
             "and v.title like CONCAT('%',#{maps.keyword},'%') " +
             "</if>" +
-            " order by v.course_sort  "+
+            " order by v.course_sort  " +
             "</script>"})
     List<FsUserCourseVideoListUVO> selectFsUserCourseVideoListUVOByCourseId(@Param("maps") FsUserCourseVideoListUParam param);
 
@@ -121,7 +121,7 @@ public interface FsUserCourseVideoMapper
             "<if test = ' maps.keyword!=null and maps.keyword != \"\" '> " +
             "and v.title like CONCAT('%',#{maps.keyword},'%') " +
             "</if>" +
-            " order by v.course_sort  "+
+            " order by v.course_sort  " +
             "</script>"})
     List<FsUserCourseVideoListUVO> selectFsUserCourseVideoListByCourseIdAll(@Param("maps") FsUserCourseVideoListUParam param);
 
@@ -129,6 +129,7 @@ public interface FsUserCourseVideoMapper
     @Select("select v.*  from fs_user_course_video v  " +
             "where v.is_del = 0 and v.course_id = #{courseId}  order by v.course_sort  ")
     List<FsUserCourseVideo> selectFsUserCourseListByCourseId(Long courseId);
+
     @Select({"<script> " +
             "select v.video_id, v.title, v.video_url, v.thumbnail, SEC_TO_TIME(v.duration) as duration,v.create_time, v.talent_id, v.course_id, " +
             " v.status, v.course_sort  from fs_user_course_video v  " +
@@ -140,10 +141,10 @@ public interface FsUserCourseVideoMapper
     Long selectVideoCountByCourseId(@Param("courseId") Long courseId);
 
     @Select("select course_sort from fs_user_course_video where course_id = #{courseId} and is_del = 0 order by course_sort desc limit 1 ")
-    Long selectCourseVideoSort(@Param("courseId")Long courseId);
+    Long selectCourseVideoSort(@Param("courseId") Long courseId);
 
     @Select("select count(0) from fs_user_course_video where course_id = #{courseId} and course_sort = #{courseSort} and is_del = 0 ")
-    Long selectFsUserCourseVideoByCourseSort(@Param("courseId")Long courseId, @Param("courseSort")Long courseSort);
+    Long selectFsUserCourseVideoByCourseSort(@Param("courseId") Long courseId, @Param("courseSort") Long courseSort);
 
 
     @Select("select video_id dict_value, title dict_label  from fs_user_course_video where course_id=#{id} and is_del = 0 order by course_sort")
@@ -156,7 +157,7 @@ public interface FsUserCourseVideoMapper
             "<if test = ' maps.title!=null and maps.title != \"\" '> " +
             "and v.title = #{maps.title} " +
             "</if>" +
-            " order by v.course_sort  "+
+            " order by v.course_sort  " +
             "</script>"})
     List<FsUserCourseVideoVO> selectFsUserCourseVideoListByCourseIdAndCompany(@Param("maps") FsUserCourseVideoParam fsUserCourseVideo);
 
@@ -164,10 +165,13 @@ public interface FsUserCourseVideoMapper
             "left join fs_user_course c on c.course_id = v.course_id " +
             "where c.is_private = 1 and v.is_del = 0 ")
     List<FsUserCourseVideo> selectVideoIsPrivate();
+
     @Select("select * from fs_user_course_video WHERE video_id=#{videoId}")
     FsUserCourseVideo selectFsUserCourseVideoByVideoStringId(String videoId);
+
     @Select("select * from fs_user_course_video WHERE course_id=#{courseId} and is_del = 0 order by course_sort,video_id")
     List<FsUserCourseVideo> selectVideoByCourseId(Long courseId);
+
     @Select("select v.* from fs_user_course_video v " +
             "left join fs_user_course c on c.course_id = v.course_id " +
             "where c.is_private = 1 and v.is_del = 0 and v.is_transcode = #{isTranscode}")
@@ -192,8 +196,9 @@ public interface FsUserCourseVideoMapper
 
     /**
      * 获取选项列表
-     * @param params    参数
-     * @return  list
+     *
+     * @param params 参数
+     * @return list
      */
     List<OptionsVO> selectVideoListByMap(@Param("params") Map<String, Object> params);
 
@@ -227,7 +232,7 @@ public interface FsUserCourseVideoMapper
 
     List<FsUserCourseVideoPageListVO> selectFsUserCourseVideoListByMap(@Param("params") Map<String, Object> params);
 
-    FsUserCourseVideo selectByFileKey(@Param("params")String fileKey);
+    FsUserCourseVideo selectByFileKey(@Param("params") String fileKey);
 
     @Select("select * from fs_user_course_video where file_key = #{fileKey} ")
     List<FsUserCourseVideo> selectVideoByFileKey(@Param("fileKey") String fileKey);
@@ -243,7 +248,7 @@ public interface FsUserCourseVideoMapper
     @Select("select title from fs_user_course_video WHERE video_id=#{videoId}")
     String selectFsUserCourseVideoByVideoForTitle(@Param("videoId") Long videoId);
 
-    FsUserCourseVideo selectFsUserCourseVideoByVideoIdAndUserId(@Param("videoId") Long videoId,@Param("userId") Long userId);
+    FsUserCourseVideo selectFsUserCourseVideoByVideoIdAndUserId(@Param("videoId") Long videoId, @Param("userId") Long userId);
 
     /**
      * 查询选择使用的视频列表
@@ -255,7 +260,7 @@ public interface FsUserCourseVideoMapper
      */
     List<FsUserCourseVideoAppletVO> getFsUserCourseVideoAppletVOListByIds(@Param("videoIds") List<Long> videoIds);
 
-    FsUserCourseVO selectFsUserCourseVideoVoByVideoIdAndCourdeId(@Param("videoId") Long videoId,@Param("courseId") Long courseId);
+    FsUserCourseVO selectFsUserCourseVideoVoByVideoIdAndCourdeId(@Param("videoId") Long videoId, @Param("courseId") Long courseId);
 
     @Select("select video_id,is_first,course_sort,tg_id,watching_tg_id,watched_tg_id,watching_tag_id,watched_tag_id,tag_group_id from fs_user_course_video")
     @MapKey("videoId")

+ 16 - 6
fs-service/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java

@@ -17,7 +17,6 @@ import com.fs.course.vo.newfs.FsUserVideoListVO;
 import com.fs.his.domain.FsUser;
 import com.fs.his.vo.OptionsVO;
 import com.fs.qw.param.FsUserCourseRedPageParam;
-import com.fs.sop.domain.QwSopTempDay;
 
 import java.util.List;
 import java.util.Map;
@@ -28,8 +27,7 @@ import java.util.Map;
  * @author fs
  * @date 2024-05-17
  */
-public interface IFsUserCourseVideoService
-{
+public interface IFsUserCourseVideoService extends IService<FsUserCourseVideo> {
     /**
      * 查询课堂视频
      *
@@ -63,6 +61,7 @@ public interface IFsUserCourseVideoService
     public int updateFsUserCourseVideo(FsUserCourseVideo fsUserCourseVideo);
 
     public int updateFsUserCourseRedPage(FsUserCourseRedPageParam userCourseRedPageParam);
+
     public void sortCourseVideo(List<FsUserCourseVideo> list);
 
     /**
@@ -107,12 +106,14 @@ public interface IFsUserCourseVideoService
 
     /**
      * 获取课程视频分页列表
+     *
      * @return FsUserCourseVideoPageListVO
      */
     List<FsUserCourseVideoPageListVO> pageListCourseVideo(UserCourseVideoPageParam param);
 
     /**
      * 获取课程视频详情
+     *
      * @return FsUserCourseVideoDetailsVO
      */
     ResponseResult<FsUserCourseVideoDetailsVO> getVideoDetails(Long videoId);
@@ -121,6 +122,7 @@ public interface IFsUserCourseVideoService
 
     /**
      * 获取下拉视频列表(有分页,仅返回两个字段)
+     *
      * @param param 入参
      * @return list
      */
@@ -128,6 +130,7 @@ public interface IFsUserCourseVideoService
 
     /**
      * 判断是否添加销售
+     *
      * @param param 入参
      * @return 是/否 成功
      */
@@ -135,6 +138,7 @@ public interface IFsUserCourseVideoService
 
     /**
      * 获取链接用户课程详情
+     *
      * @param param 入参
      */
     ResponseResult<FsUserCourseVideoLinkDetailsVO> getLinkCourseVideoDetails(FsUserCourseVideoLinkParam param);
@@ -144,6 +148,7 @@ public interface IFsUserCourseVideoService
 
     /**
      * 更新看课时长
+     *
      * @param param 入参
      * @return
      */
@@ -157,8 +162,9 @@ public interface IFsUserCourseVideoService
 
     /**
      * 获取选项列表
-     * @param params    参数
-     * @return  list
+     *
+     * @param params 参数
+     * @return list
      */
     List<OptionsVO> selectVideoListByMap(Map<String, Object> params);
 
@@ -166,16 +172,19 @@ public interface IFsUserCourseVideoService
 
     /**
      * 只查询用户当天课程章节数据
+     *
      * @param param
      * @return
      */
     List<FsCourseVideoListBySidebarVO> getFsCourseVideoListBySidebarToday(FsCourseListBySidebarParam param);
 
     R createMiniLink(FsCourseLinkMiniParam param);
+
     R createCartLink(FsCourseLinkMiniParam param);
 
     /**
      * 校验时长
+     *
      * @param param
      * @return
      */
@@ -197,7 +206,8 @@ public interface IFsUserCourseVideoService
 
     R checkUserInfo(Long userId);
 
-    public FsUserCourseVideoQVO selectFsUserCourseVideoByVideoIdVO(Long videoId,Long userId);
+    public FsUserCourseVideoQVO selectFsUserCourseVideoByVideoIdVO(Long videoId, Long userId);
+
     R updateWatchDurationIsOpen(FsUserCourseVideoFinishUParam param);
 
     R isAddKfIsOpen(FsUserCourseVideoAddKfUParam param);

Fichier diff supprimé car celui-ci est trop grand
+ 171 - 215
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java


+ 3 - 0
fs-service/src/main/java/com/fs/his/domain/FsUserInformationCollection.java

@@ -101,8 +101,11 @@ public class FsUserInformationCollection extends BaseEntity{
     private String patientName;
 
     private Long companyId;
+    //药师id
     private Long doctorType2Id;
+    //药师确认
     private Integer doctorType2Confirm;
+    //药师签名
     private String doctorType2Sign;
 
 }

+ 3 - 4
fs-service/src/main/java/com/fs/his/mapper/FsPackageOrderMapper.java

@@ -8,10 +8,7 @@ import com.fs.his.domain.FsStorePayment;
 import com.fs.his.dto.PackageOrderDTO;
 import com.fs.his.param.FsPackageOrderListUParam;
 import com.fs.his.param.FsPackageOrderParam;
-import com.fs.his.vo.FsPackageOrderExcelVO;
-import com.fs.his.vo.FsPackageOrderListUVO;
-import com.fs.his.vo.FsPackageOrderListVO;
-import com.fs.his.vo.FsPackageOrderVO;
+import com.fs.his.vo.*;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
@@ -241,4 +238,6 @@ public interface FsPackageOrderMapper
     List<PackageOrderDTO> getNewOrder();
 
     List<FsPackageOrder> selectOutTimeOrderList(@Param("unPayTime") Integer unPayTime);
+
+    FsUserInfoCollectionAndStoreOrderVo selectInformationCollectionByStoreOrderId(@Param("orderId")Long orderId);
 }

+ 3 - 4
fs-service/src/main/java/com/fs/his/service/IFsPackageOrderService.java

@@ -10,10 +10,7 @@ import com.fs.his.domain.FsPackageOrder;
 import com.fs.his.domain.FsStorePayment;
 import com.fs.his.dto.PackageOrderDTO;
 import com.fs.his.param.*;
-import com.fs.his.vo.FsPackageOrderExcelVO;
-import com.fs.his.vo.FsPackageOrderListUVO;
-import com.fs.his.vo.FsPackageOrderListVO;
-import com.fs.his.vo.FsPackageOrderVO;
+import com.fs.his.vo.*;
 import io.swagger.models.auth.In;
 
 /**
@@ -146,4 +143,6 @@ public interface IFsPackageOrderService
     List<FsPackageOrder> selectOutTimeOrderList(Integer unPayTime);
 
     R editPatientImages(Long orderId, String imagesList);
+
+    FsUserInfoCollectionAndStoreOrderVo selectInformationCollectionByStoreOrderId(Long orderId);
 }

+ 29 - 12
fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java

@@ -46,10 +46,7 @@ import com.fs.his.service.*;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.utils.HttpUtil;
 import com.fs.his.utils.PhoneUtil;
-import com.fs.his.vo.FsPackageOrderExcelVO;
-import com.fs.his.vo.FsPackageOrderListUVO;
-import com.fs.his.vo.FsPackageOrderListVO;
-import com.fs.his.vo.FsPackageOrderVO;
+import com.fs.his.vo.*;
 import com.fs.huifuPay.domain.HuiFuCreateOrder;
 import com.fs.huifuPay.domain.HuifuCreateOrderResult;
 import com.fs.huifuPay.sdk.opps.core.utils.HuiFuUtils;
@@ -627,14 +624,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         order.setCycle(fsPackage.getCycle());
         order.setCostDiscountMoney(fsPackage.getTotalCostPrice().subtract(fsPackage.getTotalPrice()));
         if(fsPackageOrderMapper.insertFsPackageOrder(order)>0){
-            if (param.getIsUserInformation()!=null && param.getIsUserInformation() == 1){
-                FsUserInformationCollection fsUserInformationCollection = fsUserInformationCollectionService.selectFsUserInformationCollectionById(param.getUserInformationId());
-                if (fsUserInformationCollection != null) {
-                    fsUserInformationCollection.setPackageOrderCode(order.getOrderSn());
-                    fsUserInformationCollection.setPackageOrderId(order.getOrderId());
-                    fsUserInformationCollectionService.updatePackageOrderCode(fsUserInformationCollection);
-                }
-            }
+            updateFsUserInformationCollectionByPackageOrder(param, order);
             String redisKey = String.valueOf(StrUtil.format("{}{}", FsConstants.REDIS_PACKAGE_ORDER_UNPAY, order.getOrderId()));
             redisCache.setCacheObject(redisKey,order.getOrderId(),30, TimeUnit.MINUTES);
             return R.ok().put("order",order);
@@ -644,6 +634,23 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         }
     }
 
+    private void updateFsUserInformationCollectionByPackageOrder(FsPackageOrderCreateParam param, FsPackageOrder order) {
+        if (param.getIsUserInformation()!=null && param.getIsUserInformation() == 1){
+            FsUserInformationCollection fsUserInformationCollection = fsUserInformationCollectionService.selectFsUserInformationCollectionById(param.getUserInformationId());
+            if (fsUserInformationCollection != null) {
+                fsUserInformationCollection.setPackageOrderCode(order.getOrderSn());
+                fsUserInformationCollection.setPackageOrderId(order.getOrderId());
+                fsUserInformationCollectionService.updatePackageOrderCode(fsUserInformationCollection);
+                //更新订单表
+                FsPackageOrder temp = new FsPackageOrder();
+                temp.setOrderId(order.getOrderId());
+                //添加前缀 区分信息采集订单
+                temp.setOrderSn("info"+ order.getOrderSn());
+                fsPackageOrderMapper.updateFsPackageOrder(temp);
+            }
+        }
+    }
+
     @Override
     @Transactional
     public R payOrder(FsPackageOrderPayParam param) {
@@ -1870,4 +1877,14 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         }
         return R.ok();
     }
+
+    /**
+     * 根据storeOrderId 查询信息采集信息
+     * @param orderId
+     * @return FsUserInformationCollection
+     */
+    @Override
+    public FsUserInfoCollectionAndStoreOrderVo selectInformationCollectionByStoreOrderId(Long orderId) {
+        return fsPackageOrderMapper.selectInformationCollectionByStoreOrderId(orderId);
+    }
 }

+ 22 - 6
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -1188,6 +1188,11 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                 if (vo.getDeliverySn() == null || vo.getDeliverySn().isEmpty()) {
                     throw new CustomException("快递单号为空");
                 }
+                //判断是否是信息采集订单 且 药师已经确认
+                FsUserInfoCollectionAndStoreOrderVo info = fsPackageOrderMapper.selectInformationCollectionByStoreOrderId(o.getOrderId());
+                if (info != null&&info.getDoctorType2Confirm()!=1) {
+                    throw new CustomException("订单编号"+ info.getStoreOrderCode() +",手动发货导入发货失败,失败原因-信息采集订单,药师暂未确认!");
+                }
                 FsStoreOrder fsStoreOrder = new FsStoreOrder();
 
                 fsStoreOrder.setDeliverySn(vo.getDeliverySn());
@@ -3957,30 +3962,41 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
                 FsStoreOrder param = new FsStoreOrder(); //修改订单的参数
                 param.setOrderCode(vo.getOrderCode());
                 param.setOrderId(o.getOrderId());
-                if ("6".equals(vo.getStatus())) {
+                String inputStatus = vo.getStatus();
+                if ("6".equals(inputStatus)) {
                     failureNum++;
                     String msg = "<br/>" + failureNum + "、订单编号 " + vo.getOrderCode() + " 导入失败:";
                     failureMsg.append(msg).append("该状态不支持修改为待推送");
                     continue;
                 }
-                if ("-1".equals(vo.getStatus())) {
+                if ("-1".equals(inputStatus)) {
                     failureNum++;
                     String msg = "<br/>" + failureNum + "、订单编号 " + vo.getOrderCode() + " 导入失败:";
                     failureMsg.append(msg).append("该状态不支持修改为退款中,需要手动申请退款");
                     continue;
                 }
-                if ("-2".equals(vo.getStatus())) {
+                if ("-2".equals(inputStatus)) {
                     failureNum++;
                     String msg = "<br/>" + failureNum + "、订单编号 " + vo.getOrderCode() + " 导入失败:";
                     failureMsg.append(msg).append("该状态不支持修改为退款中,需要审核完成退款");
                     continue;
                 }
+                //发货
+                if ("2".equals(inputStatus)){
+                    //判断是否是信息采集订单 且 药师已经确认
+                    FsUserInfoCollectionAndStoreOrderVo info = fsPackageOrderMapper.selectInformationCollectionByStoreOrderId(o.getOrderId());
+                    if (info != null&&info.getDoctorType2Confirm()!=1) {
+                        String msg = "<br/>" + failureNum + "、订单编号 " + vo.getOrderCode() + " 导入失败:";
+                        failureMsg.append(msg).append("失败原因-信息采集订单,药师暂未确认!");
+                        continue;
+                    }
+                }
 
                 Integer status = o.getStatus();
 
-                if (StringUtils.isNotBlank(vo.getStatus())){
-                    param.setStatus(Integer.valueOf(vo.getStatus()));
-                    status = Integer.valueOf(vo.getStatus());
+                if (StringUtils.isNotBlank(inputStatus)){
+                    param.setStatus(Integer.valueOf(inputStatus));
+                    status = Integer.valueOf(inputStatus);
                 }
                 /**
                  * 地址和电话仅待付款和待推送可以修改

+ 12 - 0
fs-service/src/main/java/com/fs/his/vo/FsUserInfoCollectionAndStoreOrderVo.java

@@ -0,0 +1,12 @@
+package com.fs.his.vo;
+
+import com.fs.his.domain.FsUserInformationCollection;
+import lombok.Data;
+
+
+@Data
+public class FsUserInfoCollectionAndStoreOrderVo extends FsUserInformationCollection {
+    private String storeOrderCode;
+
+
+}

+ 26 - 4
fs-service/src/main/java/com/fs/ipad/IpadSendUtils.java

@@ -3,6 +3,7 @@ package com.fs.ipad;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.exception.base.BaseException;
@@ -17,6 +18,7 @@ import com.fs.qw.domain.QwGroupChat;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.mapper.QwGroupChatMapper;
+import com.fs.qw.mapper.QwUserMapper;
 import com.fs.sop.domain.QwSop;
 import com.fs.sop.domain.SopUserLogs;
 import com.fs.sop.mapper.QwSopMapper;
@@ -53,8 +55,10 @@ public class IpadSendUtils {
     private final QwSopMapper qwSopMapper;
     private final QwExternalContactMapper qwExternalContactMapper;
     private final SopUserLogsMapper sopUserLogsMapper;
+    private final QwUserMapper qwUserMapper;
     private final RedisCache redisCacheUrl;
     private final String FILE_KEY = "ipad:upload:";
+    private final String USER_KEY = "ipad:user:";
 
     /**
      * 发送卡片消息
@@ -241,11 +245,22 @@ public class IpadSendUtils {
      * @return 返回的userid
      */
     private Long chatIds(BaseVo vo){
+        // 实时查询群聊信息
+        QwGroupChat qwGroupChat = qwGroupChatMapper.selectQwGroupChatByChatId(vo.getExId());
+        if(qwGroupChat == null){
+            throw new BaseException("未找到群聊,检查SOP任务数据");
+        }
+        if(qwGroupChat.getRoomid() != null){
+            return qwGroupChat.getRoomid();
+        }
+        // 找到对应的企业微信
+        QwUser qwUser = qwUserMapper.selectOne(new QueryWrapper<QwUser>().eq("corp_id", qwGroupChat.getCorpId()).eq("ipad_status", 1).last(" limit 1"));
         WxWorkChatIdToRoomIdDTO tdo = new WxWorkChatIdToRoomIdDTO();
-        tdo.setChatid(vo.getExId());
-        tdo.setCorpid(vo.getCorpId());
-        tdo.setUuid(vo.getUuid());
-        WxWorkResponseDTO<WxWorkChatIdToRoomIdResp> result = wxWorkService.ChatIdToRoomId(tdo, vo.getServerId());
+        // 重新组装数据
+        tdo.setChatid(qwGroupChat.getChatId());
+//        tdo.setCorpid(vo.getCorpId());
+        tdo.setUuid(qwUser.getUid());
+        WxWorkResponseDTO<WxWorkChatIdToRoomIdResp> result = wxWorkService.ChatIdToRoomId(tdo, qwUser.getServerId());
         if(result.getErrcode() != 0){
             throw new BaseException(result.getErrmsg());
         }
@@ -254,6 +269,13 @@ public class IpadSendUtils {
             log.error("未找到群聊数据,请求数据:{},返回数据:{}", JSON.toJSONString(tdo), JSON.toJSONString(result));
             throw new BaseException("未找到群聊:" + vo.getId());
         }
+        try {
+            qwGroupChat.setRoomid(data.getRoom_id());
+            qwGroupChatMapper.updateQwGroupChat(qwGroupChat);
+            redisCache.setCacheObject(USER_KEY + vo.getExId(), data.getRoom_id().toString());
+        }catch (Exception e){
+            log.error("存储群ID失败", e);
+        }
         return data.getRoom_id();
     }
 

+ 3 - 3
fs-service/src/main/resources/application-config-druid-cfryt-test.yml

@@ -69,13 +69,13 @@ nuonuo:
 tencent_cloud_config:
   secret_id: AKIDiMq9lDf2EOM9lIfqqfKo7FNgM5meD0sT
   secret_key: u5SuS80342xzx8FRBukza9lVNHKNMSaB
-  bucket: syysy-1323137866
+  bucket: ryt-1323137866
   app_id: 1323137866
   region: ap-chongqing
-  proxy: syysy
+  proxy: ryt
 cloud_host:
   company_name: 赤峰润
-  projectCode: SYYSY
+  projectCode: ryt
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://ysy-1329817240.cos.ap-guangzhou.myqcloud.com/ysy/20250820/2c47e4f105b641b4a49df50a77338e32.png

+ 3 - 3
fs-service/src/main/resources/application-config-druid-cfryt.yml

@@ -69,13 +69,13 @@ nuonuo:
 tencent_cloud_config:
   secret_id: AKIDiMq9lDf2EOM9lIfqqfKo7FNgM5meD0sT
   secret_key: u5SuS80342xzx8FRBukza9lVNHKNMSaB
-  bucket: cfryt-1323137866
+  bucket: ryt-1323137866
   app_id: 1323137866
   region: ap-chongqing
-  proxy: cfryt
+  proxy: ryt
 cloud_host:
   company_name: 赤峰润
-  projectCode: SYYSY
+  projectCode: ryt
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://ysy-1329817240.cos.ap-guangzhou.myqcloud.com/ysy/20250820/2c47e4f105b641b4a49df50a77338e32.png

+ 1 - 1
fs-service/src/main/resources/application-config-fzbt.yml

@@ -53,7 +53,7 @@ fs :
   commonApi: http://172.27.0.17:8010
   jwt:
     # 加密秘钥
-    secret: f4e2e52034348f86b67cde581c0f9eb5
+    secret: fzbt-zxqzbl
     # token有效时长,7天,单位秒
     expire: 31536000
     header: AppToken

+ 1 - 1
fs-service/src/main/resources/application-config-myhk.yml

@@ -67,7 +67,7 @@ fs :
   commonApi: http://172.27.0.7:8010
   jwt:
     # 加密秘钥
-    secret: f4e2e52034348f86b67cde581c0f9eb5
+    secret: myhk-zxqzbl
     # token有效时长,7天,单位秒
     expire: 31536000
     header: AppToken

+ 6 - 0
fs-service/src/main/resources/mapper/his/FsPackageOrderMapper.xml

@@ -320,4 +320,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectOutTimeOrderList" resultType="com.fs.his.domain.FsPackageOrder">
         select * from fs_package_order  where status = 1 AND NOW() &gt; DATE_ADD(create_time, INTERVAL ${unPayTime} MINUTE)
     </select>
+    <select id="selectInformationCollectionByStoreOrderId" resultType="com.fs.his.vo.FsUserInfoCollectionAndStoreOrderVo">
+        SELECT ic.* FROM `fs_package_order` po
+                             INNER  JOIN fs_store_order so ON po.store_order_id = so.order_id
+                             INNER  JOIN fs_user_information_collection ic ON po.order_id = ic.package_order_id
+        WHERE po.store_order_id = #{orderId} ORDER BY po.order_id desc LIMIT 1
+    </select>
 </mapper>

+ 2 - 0
fs-service/src/main/resources/mapper/his/FsUserInformationCollectionMapper.xml

@@ -98,6 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 <if test="maps.doctorType2Id != null and maps.doctorType2Id != ''"> and fui.doctor_type2_id = #{maps.doctorType2Id}</if>
                 <if test="maps.doctorType2Confirm != null"> and fui.doctor_type2_confirm = #{maps.doctorType2Confirm}</if>
                 <if test="maps.packageOrderCode != null  and maps.packageOrderCode != ''"> and fui.package_order_code = #{maps.packageOrderCode}</if>
+                <if test="maps.patientName != null  and maps.patientName != ''"> and fp.patient_name like concat(#{maps.patientName},"%")</if>
             </where>
         order by id desc
     </select>
@@ -108,6 +109,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="maps.doctorId != null and maps.doctorId != ''"> and fui.doctor_id = #{maps.doctorId}</if>
             <if test="maps.doctorConfirm != null"> and fui.doctor_confirm = #{maps.doctorConfirm}</if>
             <if test="maps.packageOrderCode != null  and maps.packageOrderCode != ''"> and fui.package_order_code = #{maps.packageOrderCode}</if>
+            <if test="maps.patientName != null  and maps.patientName != ''"> and fp.patient_name like concat(#{maps.patientName},"%")</if>
         </where>
         order by id desc
     </select>

+ 1 - 0
fs-service/src/main/resources/mapper/qw/QwGroupChatMapper.xml

@@ -203,6 +203,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="todayJoin != null">today_join = #{todayJoin},</if>
             <if test="todayOut != null">today_out = #{todayOut},</if>
             <if test="allOutGroup != null">all_out_group = #{allOutGroup},</if>
+            <if test="roomid != null">roomid = #{roomid},</if>
         </trim>
         where chat_id = #{chatId}
     </update>

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff