Prechádzať zdrojové kódy

update:发送福袋

yfh 3 týždňov pred
rodič
commit
fc50ada99f

+ 6 - 0
fs-service/src/main/java/com/fs/course/param/FsCourseLinkMiniParam.java

@@ -30,4 +30,10 @@ public class FsCourseLinkMiniParam {
      */
     private String chatId;
 
+
+    /**
+     * 福袋选择id
+     */
+    private Long luckyBagId;
+
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.course.domain.FsUserCourseVideo;
+import com.fs.course.domain.LuckyBagCollectRecord;
 import com.fs.course.param.*;
 import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
 import com.fs.course.param.newfs.FsUserCourseVideoLinkParam;
@@ -274,6 +275,13 @@ public interface IFsUserCourseVideoService extends IService<FsUserCourseVideo> {
      */
     List<OptionsVO> selectVideoOptionsByCourseId(Long courseId);
 
+    /**
+     * 创建app福袋
+     * @param param
+     * @return
+     */
+    R createAppFd(LuckyBagCollectRecord param);
+
     R registerQwFsUserFinish(FsUserCourseVideoAddKfUParam param);
 
 }

+ 143 - 71
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -72,16 +72,15 @@ import com.fs.qw.domain.*;
 import com.fs.qw.domain.QwCompany;
 import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.domain.QwUser;
-import com.fs.qw.mapper.QwExternalContactMapper;
-import com.fs.qw.mapper.QwGroupChatMapper;
-import com.fs.qw.mapper.QwGroupChatUserMapper;
-import com.fs.qw.mapper.QwUserMapper;
+import com.fs.qw.mapper.*;
 import com.fs.qw.param.FsUserCourseRedPageParam;
 import com.fs.qw.service.IQwCompanyService;
 import com.fs.qw.service.IQwExternalContactService;
+import com.fs.qw.vo.QwSopCourseFinishTempSetting;
 import com.fs.qwApi.Result.QwAddContactWayResult;
 import com.fs.qwApi.param.QwAddContactWayParam;
 import com.fs.qwApi.service.QwApiService;
+import com.fs.sop.domain.QwSopLogs;
 import com.fs.sop.domain.SopUserLogsInfo;
 import com.fs.sop.mapper.SopUserLogsInfoMapper;
 import com.fs.sop.service.ISopUserLogsInfoService;
@@ -136,6 +135,10 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
     @Autowired
     private OpenIMService openIMService;
     @Autowired
+    private LuckyBagMapper luckyBagMapper;
+    @Autowired
+    private LuckyBagCollectRecordMapper luckyBagCollectRecordMapper;
+    @Autowired
     private CompanyCompanyFsuserMapper companyCompanyFsuserMapper;
     private static final Logger logger = LoggerFactory.getLogger(FsUserCourseVideoServiceImpl.class);
 
@@ -260,9 +263,6 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
     @Autowired
     private IFsCourseLinkService linkService;
 
-    @Autowired
-    private FsDepVideoShowMapper fsDepVideoShowMapper;
-
     @Autowired
     private FsPackageMapper fsPackageMapper;
 
@@ -2832,9 +2832,6 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
         // 1、获取视频详情、问题详情
         ResponseResult<FsUserCourseVideoDetailsVO> videoDetails = this.getVideoDetails(param.getVideoId());
         FsUserCourseVideoDetailsVO courseVideoDetails = videoDetails.getData() != null ? videoDetails.getData() : null;
-        if(courseVideoDetails != null){
-            getGoodsAndShow(param.getVideoId(),courseVideoDetails);
-        }
 
         //课程logo
         if (param.getPeriodId() != null) {
@@ -2952,44 +2949,6 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
         return ResponseResult.ok(vo);
     }
 
-    /**
-     * 小黄车商品和展示
-     */
-    private void getGoodsAndShow(Long videoId, FsUserCourseVideoDetailsVO vo) {
-        String show = fsDepVideoShowMapper.selectFsDepVideoShowByVideoId(videoId, null);
-        vo.setShowTreatment(ObjectUtil.isEmpty(show) ? "1" : show);
-
-        FsUserCourseVideo courseVideo = fsUserCourseVideoMapper.selectFsUserCourseVideoByVideoId(videoId);
-        String packageJson = courseVideo.getPackageJson();
-        if (StringUtils.isNotEmpty(packageJson)) {
-            List<String> packageIds = new ArrayList<>();
-            ObjectMapper objectMapper = new ObjectMapper();
-            JsonNode jsonNode = null;
-            try {
-                jsonNode = objectMapper.readTree(packageJson);
-            } catch (JsonProcessingException e) {
-                throw new RuntimeException(e);
-            }
-            if (jsonNode.isArray()) {
-                for (JsonNode node : jsonNode) {
-                    String packageId = node.path("packageId").asText();
-                    if (StringUtils.isNotEmpty(packageId)) {
-                        packageIds.add(packageId);
-                    }
-                }
-                List<FsPackageListVO> fsPackageListVOS = new ArrayList<>();
-                if (!packageIds.isEmpty()) {
-                    fsPackageListVOS = fsPackageMapper.selectFsPackagesByIds(packageIds);
-                }else {
-                    fsPackageListVOS = new ArrayList<>();
-                }
-                vo.setTreatmentPackage(fsPackageListVOS);
-            }
-        }else {
-            vo.setTreatmentPackage(new ArrayList<>());
-        }
-    }
-
     /**
      * @Description: 是否看课中断
      * @Param:
@@ -4749,38 +4708,151 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
 
         return link;
     }
+
     @Override
-    public R registerQwFsUser(FsUserCourseVideoAddKfUParam param) {
-        logger.info("zyp \n【判断添加客服】:{}", param);
+    public List<OptionsVO> selectVideoOptionsByCourseId(Long courseId) {
+        return fsUserCourseVideoMapper.selectVideoOptionsByCourseId(courseId);
+    }
 
-        // 参数校验
-        if (param == null) {
-            return R.error("参数不能为空");
-        }
+    @Override
+    public R createAppFd(LuckyBagCollectRecord param) {
 
-        // 查询用户
-        FsUser fsUser = fsUserMapper.selectFsUserByUserId(param.getUserId());
+        try {
+            CompanyUser companyUser = companyUserMapper.selectCompanyUserByCompanyUserId(param.getCompanyUserId());
+            if (companyUser==null||companyUser.getCompanyId()==null||companyUser.getUserId()==null){
+                return R.error("员工不存在!");
+            }
 
-        // 用户不存在唤起重新授权
-        if (fsUser == null) {
-            return R.error(401, "用户不存在");
-        }
+            Company company = companyMapper.selectCompanyById(param.getCompanyId());
+            if (company == null ) {
+                return  R.error().put("msg","企业不存在,请联系管理员");
+            }
+            String course = configService.selectConfigByKey("course.config");
+            CourseConfig config = JSON.parseObject(course, CourseConfig.class);
+            LocalDateTime sendDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+            LocalDateTime expireDateTime = sendDateTime.plusDays(config.getVideoLinkExpireDate() - 1);
+            expireDateTime = expireDateTime.toLocalDate().atTime(23, 59, 59);
+            Date updateTime = Date.from(expireDateTime.atZone(ZoneId.systemDefault()).toInstant());
 
-        if (fsUser.getStatus() != null && fsUser.getStatus() == 0) {
-            return R.error("会员被停用,无权限,请联系客服!");
-        }
+            Long businessId = addLuckyBagCollectRecord(param.getLuckyBagId(),param.getUserId(),updateTime,String.valueOf(param.getCompanyUserId()),String.valueOf(param.getCompanyId()));
 
-        // 处理群聊逻辑
-        if (param.getChatId() != null) {
-            return handleGroupChatLogic(param,fsUser);
+            return R.ok().put("data",businessId);
+        }catch (Exception e){
+            e.printStackTrace();
+            return R.error("发放福袋失败!");
         }
+    }
 
-        // 处理普通外部联系人逻辑
-        return handleExternalContactLogic(param, fsUser);
+
+    /**
+     * 增加福袋发放记录、领取记录
+     *
+     * @param luckyBagId
+     * @param userId
+     * @param sendTime
+     * @param companyUserId
+     * @param companyId
+     * @return
+     */
+    private Long addLuckyBagCollectRecord(Long luckyBagId,
+                                          Long userId,
+                                          Date sendTime,
+                                          String companyUserId,
+                                          String companyId) {
+        try {
+
+            if (StringUtils.isEmpty(companyId) || StringUtils.isEmpty(companyUserId)) {
+                log.warn("公司ID或用户ID为空 [companyId:{}, companyUserId:{}]", companyId, companyUserId);
+                return null;
+            }
+
+            // 验证福袋ID
+            if (luckyBagId == null) {
+                log.warn("福袋ID为空");
+                return null;
+            }
+
+            // 查询福袋信息
+            LuckyBag luckyBag = luckyBagMapper.selectLuckyBagById(luckyBagId);
+            if (luckyBag == null) {
+                log.warn("未找到对应的福袋信息 [luckyBagId:{}]", luckyBagId);
+                return null;
+            }
+
+            // 检查福袋状态
+            if (luckyBag.getDataStatus() != null && luckyBag.getDataStatus().equals(0)) {
+                log.warn("福袋被禁用 [luckyBagId:{}]", luckyBagId);
+                return null;
+            }
+
+            // 查询公司信息
+            Company company = companyMapper.selectCompanyById(Long.valueOf(companyId));
+            if (company == null) {
+                log.warn("未找到对应的公司信息 [companyId:{}]", companyId);
+                return null;
+            }
+
+            LuckyBagCollectRecord luckyBagCollectRecord = buildLuckyBagRecord(luckyBagId,userId,sendTime,
+                    companyUserId, companyId, company, luckyBag);
+
+            // 插入记录并返回ID
+            int result = luckyBagCollectRecordMapper.insertLuckyBagCollectRecord(luckyBagCollectRecord);
+            if (result <= 0) {
+                log.warn("福袋记录插入失败 [luckyBagId:{}]", luckyBagId);
+                return null;
+            }
+
+            // 返回新增记录的ID
+            Long recordId = luckyBagCollectRecord.getId();
+            if (recordId == null) {
+                log.warn("福袋记录插入成功但未返回ID [luckyBagId:{}]", luckyBagId);
+                return null;
+            }
+
+            log.info("福袋记录添加成功 [recordId:{}, luckyBagId:{}]", recordId, luckyBagId);
+            return recordId;
+
+        } catch (NumberFormatException e) {
+            log.error("ID转换失败 [companyId:{}, companyUserId:{}]", companyId, companyUserId, e);
+            return null;
+        } catch (Exception e) {
+            log.error("ID:" + (luckyBagId != null ? luckyBagId : "unknown") + "-添加福袋记录失败", e);
+            return null;
+        }
     }
-    @Override
-    public List<OptionsVO> selectVideoOptionsByCourseId(Long courseId) {
-        return fsUserCourseVideoMapper.selectVideoOptionsByCourseId(courseId);
+
+    /**
+     * 构建福袋记录对象
+     */
+    private LuckyBagCollectRecord buildLuckyBagRecord(Long luckyBagId,
+                                                      Long userId,
+                                                      Date sendTime,
+                                                      String companyUserId,
+                                                      String companyId,
+                                                      Company company,
+                                                      LuckyBag luckyBag) {
+        LuckyBagCollectRecord record = new LuckyBagCollectRecord();
+        record.setLuckyBagId(luckyBagId);
+        record.setExpiryTime(sendTime);
+        record.setCollectType("0");
+        record.setSendTime(new Date());
+        record.setCompanyId(Long.valueOf(companyId));
+        record.setUserId(userId);
+        if (ObjectUtil.isNotEmpty(userId)){
+            FsUser fsUser = fsUserMapper.selectFsUserByUserId(userId);
+            record.setUserName(ObjectUtil.isNotEmpty(fsUser)?fsUser.getNickName():null);
+        }
+        record.setCompanyName(company.getCompanyName());
+        record.setCompanyUserId(Long.valueOf(companyUserId));
+
+        record.setRewardType(2L);
+
+        // 设置币种金额
+        if (luckyBag.getRewardType() != null && luckyBag.getRewardType().equals("1")) {
+            record.setCoinAmount(luckyBag.getAmount());
+        }
+
+        return record;
     }
 }
 

+ 48 - 0
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -3,17 +3,25 @@ package com.fs.app.controller;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.ObjectUtil;
 import com.fs.app.annotation.Login;
 import com.fs.app.param.*;
 import com.fs.app.utils.WxUtil;
 import com.fs.common.VerifyCodeUtil;
+import com.fs.common.annotation.Log;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.core.redis.RedisCache;
+import com.fs.common.enums.BusinessType;
 import com.fs.common.exception.ServiceException;
 import com.fs.common.service.ISmsService;
 import com.fs.common.utils.sign.Md5Utils;
 import com.fs.core.config.WxOpenProperties;
+import com.fs.course.domain.LuckyBag;
+import com.fs.course.domain.LuckyBagCollectRecord;
+import com.fs.course.param.FsCourseLinkMiniParam;
+import com.fs.course.service.IFsUserCourseVideoService;
 import com.fs.his.config.FsSysConfig;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserNewTask;
@@ -23,6 +31,9 @@ import com.fs.his.service.IFsUserNewTaskService;
 import com.fs.his.service.IFsUserService;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.FsUserRegisterParam;
+import com.fs.qw.domain.QwUser;
+import com.fs.qw.service.ILuckyBagService;
+import com.fs.voice.utils.StringUtil;
 import com.fs.watch.domain.WatchDeviceSetup;
 import com.fs.watch.domain.WatchUser;
 import com.fs.watch.service.WatchUserService;
@@ -60,7 +71,11 @@ public class AppLoginController extends AppBaseController{
     private IFsUserNewTaskService userNewTaskService;
     @Autowired
     private WxOpenProperties openProperties;
+    @Autowired
+    private ILuckyBagService luckyBagService;
 
+    @Autowired
+    private IFsUserCourseVideoService fsUserCourseVideoService;
     @Autowired
     private RedisCache redisCache;
 
@@ -873,4 +888,37 @@ public class AppLoginController extends AppBaseController{
         // 不存在,追加到末尾
         return currentAppIds + "," + newAppId;
     }
+
+
+
+    /**
+     * 创建 福袋
+     */
+
+    @RepeatSubmit
+    @PostMapping("/createFdMiniLink")
+    @Log(title = "createFdMiniLink", businessType = BusinessType.INSERT)
+    public R createAppFd(@RequestBody LuckyBagCollectRecord param) {
+
+        if (ObjectUtil.isEmpty(param.getLuckyBagId())){
+            return R.error("福袋id不能为空");
+        }
+        return fsUserCourseVideoService.createAppFd(param);
+    }
+    /**
+     * 查询福袋配置信息
+     *
+     * @param reward
+     * @return
+     */
+    @GetMapping("/luckyBagList")
+    public TableDataInfo list(LuckyBag reward)
+    {
+        reward.setDataStatus("1");
+
+        reward.setCompanyId(String.valueOf(reward.getCompanyId()));
+        startPage();
+        List<LuckyBag> list = luckyBagService.selectLuckyBagList(reward);
+        return getDataTable(list);
+    }
 }

+ 0 - 9
fs-user-app/src/main/java/com/fs/app/controller/CourseController.java

@@ -398,13 +398,4 @@ public class CourseController extends  AppBaseController{
         return courseVideoService.registerQwFsUserFinish(param);
     }
 
-
-    @Login
-    @ApiOperation("注册链接接口")
-    @PostMapping("/registerQwFsUser")
-    public R registerQwFsUser(@RequestBody FsUserCourseVideoAddKfUParam param) {
-        Long userId = Long.parseLong(getUserId());
-        param.setUserId(userId);
-        return courseVideoService.registerQwFsUser(param);
-    }
 }