|
|
@@ -0,0 +1,569 @@
|
|
|
+package com.fs.company.controller.qw;
|
|
|
+
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.fs.common.config.RedisTenantContext;
|
|
|
+import com.fs.common.core.domain.R;
|
|
|
+import com.fs.common.core.domain.ResponseResult;
|
|
|
+import com.fs.common.core.redis.RedisCache;
|
|
|
+import com.fs.common.utils.StringUtils;
|
|
|
+import com.fs.company.service.ICompanyService;
|
|
|
+import com.fs.company.vo.RedPacketMoneyVO;
|
|
|
+import com.fs.course.mapper.FsCourseRedPacketLogMapper;
|
|
|
+import com.fs.course.mapper.FsCourseWatchLogMapper;
|
|
|
+import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
|
|
|
+import com.fs.course.service.*;
|
|
|
+import com.fs.course.vo.FsUserCourseVideoQVO;
|
|
|
+import com.fs.framework.datasource.TenantDataSourceManager;
|
|
|
+import com.fs.his.domain.FsUser;
|
|
|
+import com.fs.his.service.IFsInquiryOrderService;
|
|
|
+import com.fs.his.utils.qrcode.QRCodeUtils;
|
|
|
+import com.fs.qw.domain.QwCompany;
|
|
|
+import com.fs.qw.domain.QwIpadServerLog;
|
|
|
+import com.fs.qw.domain.QwUser;
|
|
|
+import com.fs.qw.mapper.QwExternalContactMapper;
|
|
|
+import com.fs.qw.mapper.QwUserMapper;
|
|
|
+import com.fs.qw.service.*;
|
|
|
+import com.fs.qwApi.service.QwApiService;
|
|
|
+import com.fs.sop.mapper.QwSopLogsMapper;
|
|
|
+import com.fs.sop.mapper.QwSopMapper;
|
|
|
+import com.fs.sop.mapper.SopUserLogsMapper;
|
|
|
+import com.fs.sop.service.*;
|
|
|
+import com.fs.sop.vo.QwSopLogsDoSendListTVO;
|
|
|
+import com.fs.store.service.IFsUserCourseCountService;
|
|
|
+import com.fs.tenant.domain.TenantInfo;
|
|
|
+import com.fs.tenant.service.TenantInfoService;
|
|
|
+import com.fs.wxwork.dto.WxWorkGetQrCodeDTO;
|
|
|
+import com.fs.wxwork.service.WxWorkService;
|
|
|
+import io.swagger.annotations.Api;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.bind.annotation.GetMapping;
|
|
|
+import org.springframework.web.bind.annotation.PostMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+
|
|
|
+import java.time.Duration;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+@Api("公共接口")
|
|
|
+@RestController
|
|
|
+@RequestMapping(value="/app/common")
|
|
|
+public class TaskManualController {
|
|
|
+
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(TaskManualController.class);
|
|
|
+
|
|
|
+// @Autowired
|
|
|
+// private SopLogsTaskService service;
|
|
|
+ @Autowired
|
|
|
+ private IFsUserCourseVideoService courseVideoService;
|
|
|
+ @Autowired
|
|
|
+ private IQwExternalContactService qwExternalContactService;
|
|
|
+ @Autowired
|
|
|
+ private IFsUserVideoService fsUserVideoService;
|
|
|
+ @Autowired
|
|
|
+ private IHuaweiObsService huaweiObsService;
|
|
|
+ @Autowired
|
|
|
+ private IFsCourseWatchLogService watchLogService;
|
|
|
+ @Autowired
|
|
|
+ private QwExternalContactMapper qwExternalContactMapper;
|
|
|
+ @Autowired
|
|
|
+ private IFsCourseRedPacketLogService fsCourseRedPacketLogService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IQwSopLogsService qwSopLogsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private QwSopMapper qwSopMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private FsCourseWatchLogMapper fsCourseWatchLogMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsCourseLinkService courseLinkService;
|
|
|
+ @Autowired
|
|
|
+ private FsCourseRedPacketLogMapper fsCourseRedPacketLogMapper;
|
|
|
+ @Autowired
|
|
|
+ private ICompanyService companyService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SopUserLogsMapper sopUserLogsMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private QwSopLogsMapper qwSopLogsMapper;
|
|
|
+ @Autowired
|
|
|
+ private IQwSopTempRulesService tempRulesService;
|
|
|
+ @Autowired
|
|
|
+ private IQwSopTempVoiceService qwSopTempVoiceService;
|
|
|
+
|
|
|
+// @Autowired
|
|
|
+// private QwExternalContactRatingService qwExternalContactRatingService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISopUserLogsService iSopUserLogsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsUserCourseCountService userCourseCountService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISopUserLogsInfoService iSopUserLogsInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsInquiryOrderService inquiryOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IQwMaterialService iQwMaterialService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFsCourseLinkService iFsCourseLinkService;
|
|
|
+
|
|
|
+// @Autowired
|
|
|
+// private SyncQwExternalContactService syncQwExternalContactService;
|
|
|
+ @Autowired
|
|
|
+ private IFsUserCourseVideoService fsUserCourseVideoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ public RedisCache redisCache;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private QwUserMapper qwUserMapper;
|
|
|
+
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ IQwIpadServerService ipadServerService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ IQwIpadServerLogService qwIpadServerLogService;
|
|
|
+ @Autowired
|
|
|
+ IQwIpadServerUserService qwIpadServerUserService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ IQwExternalContactService externalContactService;
|
|
|
+ @Autowired
|
|
|
+ WxWorkService wxWorkService;
|
|
|
+ @Autowired
|
|
|
+ private IQwUserService qwUserService;
|
|
|
+ @Autowired
|
|
|
+ private IQwDeptService qwDeptService;
|
|
|
+ @Autowired
|
|
|
+ private TenantInfoService tenantInfoService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IQwCompanyService qwCompanyService;
|
|
|
+ @Autowired
|
|
|
+ private TenantDataSourceManager tenantDataSourceManager;
|
|
|
+
|
|
|
+ @RequestMapping("/syncQwUserAsync")
|
|
|
+ public void syncQwUserAsync(String corpId) {
|
|
|
+ QwCompany qwCompany = qwCompanyService.selectQwCompanyByCorpId(corpId);
|
|
|
+ if (ObjectUtil.isEmpty(corpId)) {
|
|
|
+ return; // 跳过无效租户,继续下一个
|
|
|
+ }
|
|
|
+
|
|
|
+ TenantInfo tenantInfo = null;
|
|
|
+ try {
|
|
|
+ tenantInfo = tenantInfoService.getById(qwCompany.getTenantId());
|
|
|
+ if (ObjectUtil.isEmpty(tenantInfo)) {
|
|
|
+ log.warn("租户信息不存在,tenantId={}", qwCompany.getTenantId());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 切换到租户数据源
|
|
|
+ tenantDataSourceManager.switchTenant(tenantInfo);
|
|
|
+ // 切换Redis租户上下文
|
|
|
+ RedisTenantContext.setTenantId(tenantInfo.getId());
|
|
|
+
|
|
|
+ log.info("开始同步企微用户,租户={}, corpId={}", tenantInfo.getId(), qwCompany.getCorpId());
|
|
|
+
|
|
|
+ // 执行同步操作
|
|
|
+ qwUserService.syncQwUser(qwCompany.getCorpId(),tenantInfo.getId());
|
|
|
+
|
|
|
+ log.info("同步完成,租户={}", tenantInfo.getId());
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("同步企微员工和部门失败,租户={}, corpId={}",
|
|
|
+ qwCompany.getTenantId(), qwCompany.getCorpId(), e);
|
|
|
+ } finally {
|
|
|
+ // 清理租户上下文(数据源和Redis)
|
|
|
+ try {
|
|
|
+ tenantDataSourceManager.clear(); // 假设有此方法,请根据实际API调整
|
|
|
+ } catch (Exception ignored) {}
|
|
|
+
|
|
|
+ try {
|
|
|
+ RedisTenantContext.clear(); // 或 RedisTenantContext.removeTenantId()
|
|
|
+ } catch (Exception ignored) {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ */
|
|
|
+ @GetMapping("/selectQwUserByTest")
|
|
|
+ public void selectQwUserByTest() {
|
|
|
+ try {
|
|
|
+ List<QwUser> list = qwUserMapper.selectQwUserByTest();
|
|
|
+ for (QwUser qwUser : list) {
|
|
|
+ try {
|
|
|
+
|
|
|
+ Long serverId = qwUser.getServerId();
|
|
|
+
|
|
|
+ if (serverId==null){
|
|
|
+ System.out.println("serverId不存在");
|
|
|
+ }else {
|
|
|
+ //没绑定销售 或者 已经离职
|
|
|
+ if (qwUser.getStatus()==0 || qwUser.getIsDel()==2){
|
|
|
+
|
|
|
+ updateIpadStatus(qwUser,serverId);
|
|
|
+ }
|
|
|
+
|
|
|
+ //绑定了销售-也绑定了ipad,但是长时间离线的(离线状态,无操作超过2天的,也自动解绑)
|
|
|
+ if(qwUser.getUpdateTime()!=null){
|
|
|
+ Date createTime = qwUser.getUpdateTime();
|
|
|
+ Integer serverStatus = qwUser.getServerStatus();
|
|
|
+ Integer ipadStatus = qwUser.getIpadStatus();
|
|
|
+
|
|
|
+ boolean result = isCreateTimeMoreThanDaysWithOptional(createTime, 2);
|
|
|
+ //大于2天 ,绑定了ipad,离线
|
|
|
+ if(result && serverStatus==1 && ipadStatus==0){
|
|
|
+ updateIpadStatus(qwUser,serverId);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("解绑ipad报错"+e);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("定时处理未绑定员工企微异常",e);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void updateIpadStatus(QwUser qwUser,Long serverId){
|
|
|
+ QwUser u = new QwUser();
|
|
|
+ u.setId(qwUser.getId());
|
|
|
+ u.setServerId(null);
|
|
|
+ u.setServerStatus(0);
|
|
|
+ qwUserMapper.updateQwUser(u);
|
|
|
+ ipadServerService.addServer(serverId);
|
|
|
+ QwIpadServerLog qwIpadServerLog = new QwIpadServerLog();
|
|
|
+ qwIpadServerLog.setType(2);
|
|
|
+ qwIpadServerLog.setTilie("解绑");
|
|
|
+ qwIpadServerLog.setServerId(serverId);
|
|
|
+ qwIpadServerLog.setQwUserId(qwUser.getId());
|
|
|
+ qwIpadServerLog.setCompanyUserId(qwUser.getCompanyUserId());
|
|
|
+ qwIpadServerLog.setCompanyId(qwUser.getCompanyId());
|
|
|
+ qwIpadServerLog.setCreateTime(new Date());
|
|
|
+ qwIpadServerLogService.insertQwIpadServerLog(qwIpadServerLog);
|
|
|
+ qwIpadServerUserService.deleteQwIpadServerUserByQwUserId(qwUser.getId());
|
|
|
+ WxWorkGetQrCodeDTO wxWorkGetQrCodeDTO = new WxWorkGetQrCodeDTO();
|
|
|
+ wxWorkGetQrCodeDTO.setUuid(qwUser.getUid());
|
|
|
+ wxWorkService.LoginOut(wxWorkGetQrCodeDTO,qwUser.getServerId());
|
|
|
+ updateIpadStatus(qwUser.getId(),0);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static boolean isCreateTimeMoreThanDaysWithOptional(Date createTime, int days) {
|
|
|
+ return Optional.ofNullable(createTime)
|
|
|
+ .map(time -> {
|
|
|
+ LocalDateTime createDateTime = time.toInstant()
|
|
|
+ .atZone(ZoneId.systemDefault())
|
|
|
+ .toLocalDateTime();
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ Duration duration = Duration.between(createDateTime, now);
|
|
|
+ return duration.toDays() > days;
|
|
|
+ })
|
|
|
+ .orElse(false); // 为null时返回false,可根据需求调整
|
|
|
+ }
|
|
|
+
|
|
|
+ void updateIpadStatus(Long id ,Integer status){
|
|
|
+ QwUser u = new QwUser();
|
|
|
+ u.setId(id);
|
|
|
+ u.setIpadStatus(status);
|
|
|
+ qwUserMapper.updateQwUser(u);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ */
|
|
|
+ @GetMapping("/countQwApiAopLogToken")
|
|
|
+ public void countQwApiAopLogToken() {
|
|
|
+
|
|
|
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ // 获取当前日期(只包含年月日)
|
|
|
+ LocalDate currentDate = LocalDate.now();
|
|
|
+
|
|
|
+ String todayStr = currentDate.format(dateFormatter);
|
|
|
+ qwSopLogsService.countQwApiAopLogToken(todayStr);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询视频时长
|
|
|
+ */
|
|
|
+ @GetMapping("/getVideoDuration")
|
|
|
+ public Long getVideoDuration(Long videoId) {
|
|
|
+
|
|
|
+ String redisKey = "h5user:video:duration:" + videoId;
|
|
|
+ Long duration = redisCache.getCacheObject(redisKey);
|
|
|
+
|
|
|
+ if (duration == null) {
|
|
|
+ FsUserCourseVideoQVO videoInfo = fsUserCourseVideoService.selectFsUserCourseVideoByVideoIdVO(videoId,null);
|
|
|
+ if (videoInfo == null || videoInfo.getDuration() == null) {
|
|
|
+ throw new IllegalArgumentException("视频时长信息不存在");
|
|
|
+ }
|
|
|
+ duration = videoInfo.getDuration();
|
|
|
+
|
|
|
+ // 将查询结果缓存到Redis,设置适当过期时间
|
|
|
+ redisCache.setCacheObject(redisKey, duration);
|
|
|
+ }
|
|
|
+
|
|
|
+ return duration;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取跳转微信小程序的链接地址
|
|
|
+ */
|
|
|
+ @GetMapping("/getGotoWxAppLink")
|
|
|
+ @ApiOperation("获取跳转微信小程序的链接地址")
|
|
|
+ public ResponseResult<String> getGotoWxAppLink(String linkStr,String appid) {
|
|
|
+ return ResponseResult.ok(courseLinkService.getGotoWxAppLink(linkStr,appid));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发官方通连
|
|
|
+ */
|
|
|
+ @GetMapping("/sopguanfanone")
|
|
|
+ public R sopguanfanone(String dateTime) throws Exception {
|
|
|
+
|
|
|
+ LocalDateTime localDateTime = DateUtil.parseLocalDateTime(dateTime);
|
|
|
+
|
|
|
+ int currentHour = localDateTime.getHour();
|
|
|
+ LocalDate localDate = localDateTime.toLocalDate();
|
|
|
+
|
|
|
+ String taskStartTime = localDate.atTime(currentHour, 0, 0)
|
|
|
+ .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
+ String taskEndTime = localDate.atTime(currentHour, 59, 59)
|
|
|
+ .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
+
|
|
|
+ qwSopLogsService.createCorpMassSendingByUserLogs( taskStartTime, taskEndTime);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发一对一
|
|
|
+ */
|
|
|
+ @GetMapping("/sopguanfantwo")
|
|
|
+ public R sopguanfantwo(String dateTime) throws Exception {
|
|
|
+
|
|
|
+ LocalDateTime localDateTime = DateUtil.parseLocalDateTime(dateTime);
|
|
|
+
|
|
|
+
|
|
|
+ LocalDate localDate = localDateTime.toLocalDate();
|
|
|
+ String date = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
+
|
|
|
+ qwSopLogsService.createCorpMassSending(date);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查官方的执行结果
|
|
|
+ */
|
|
|
+ @GetMapping("/sopguanfantResult")
|
|
|
+ public R sopguanfantResult() throws Exception {
|
|
|
+ qwSopLogsService.qwSopLogsResultNew();
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @GetMapping("/testMaterial")
|
|
|
+ public void testMaterial() throws Exception {
|
|
|
+
|
|
|
+ iQwMaterialService.updateQwMaterialByQw();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @GetMapping("/testSop")
|
|
|
+ public R testSop() throws Exception {
|
|
|
+
|
|
|
+ return iFsCourseLinkService.getWxaCodeGenerateScheme("/pages_course/video.html?course={\"companyId\":100,\"companyUserId\":2020,\"corpId\":\"wweb0666cc79d79da5\",\"courseId\":61,\"link\":\"1950497651577323520\",\"linkType\":3,\"qwExternalId\":2356946,\"qwUserId\":\"1682\",\"uNo\":\"b8b010e1-ee0f-42ec-8ad8-06681d1b449a\",\"videoId\":366}","wx34bba1ae94d34986");
|
|
|
+ }
|
|
|
+
|
|
|
+ @GetMapping("/testRatingSop")
|
|
|
+ public R testRatingSop(String sopId) throws Exception {
|
|
|
+
|
|
|
+ long startTimeMillis = System.currentTimeMillis();
|
|
|
+ log.info("====== 开始选择和处理 sop营期-用户分级 ======");
|
|
|
+
|
|
|
+ iSopUserLogsService.ratingUserLogs(sopId);
|
|
|
+
|
|
|
+ long endTimeMillis = System.currentTimeMillis();
|
|
|
+ log.info("====== sop营期-用户分级处理完成,耗时 {} 毫秒 ======", (endTimeMillis - startTimeMillis));
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 定义一个方法来批量处理插入逻辑,支持每 500 条数据一次的批量插入
|
|
|
+ private void processAndInsertQwSopLogs(List<QwSopLogsDoSendListTVO> logsByJsApiNotExtId) {
|
|
|
+ // 定义批量插入的大小
|
|
|
+ int batchSize = 500;
|
|
|
+
|
|
|
+ // 循环处理外部用户 ID,每次处理批量大小的子集
|
|
|
+ for (int i = 0; i < logsByJsApiNotExtId.size(); i += batchSize) {
|
|
|
+
|
|
|
+ int endIndex = Math.min(i + batchSize, logsByJsApiNotExtId.size());
|
|
|
+ List<QwSopLogsDoSendListTVO> batchList = logsByJsApiNotExtId.subList(i, endIndex); // 获取当前批次的子集
|
|
|
+
|
|
|
+ // 直接使用批次数据进行批量更新,不需要额外的 List
|
|
|
+ try {
|
|
|
+ qwSopLogsMapper.batchUpdateQwSopLogsBySendTime(batchList);
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 记录异常日志,方便后续排查问题
|
|
|
+ log.error("批量更新数据时发生异常,处理的批次起始索引为: " + i, e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+// @GetMapping("/test")
|
|
|
+// public R test(String time, String sopId) throws Exception {
|
|
|
+// log.info("进入sop任务");
|
|
|
+//// LocalDateTime currentTime = DateUtil.parseLocalDateTime(time);
|
|
|
+//// // 计算下一个整点时间
|
|
|
+//// LocalDateTime nextHourTime = currentTime.withMinute(0).withSecond(0).withNano(0).plusHours(1);
|
|
|
+////
|
|
|
+//// // 打印日志,确认时间
|
|
|
+//// log.info("任务实际执行时间: {}", currentTime);
|
|
|
+//// log.info("传递给任务的时间参数: {}", nextHourTime);
|
|
|
+// List<String> sopidList = new ArrayList<>();
|
|
|
+// if(StringUtils.isNotEmpty(sopId)){
|
|
|
+// sopidList = Arrays.asList(sopId.split(","));
|
|
|
+// }
|
|
|
+// sopLogsTaskService.selectSopUserLogsListByTime(DateUtil.parseLocalDateTime(time), sopidList);
|
|
|
+// return R.ok();
|
|
|
+// }
|
|
|
+// @GetMapping("/testWx")
|
|
|
+// public R testWx(String time) throws Exception {
|
|
|
+// sopWxLogsService.wxSopLogsByTime(DateUtil.parseLocalDateTime(time));
|
|
|
+// return R.ok();
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+ @GetMapping("/testVideo")
|
|
|
+ public R testVideo(String sopId) throws Exception {
|
|
|
+ qwSopTempVoiceService.synchronous(sopId, Arrays.asList(Arrays.asList(2020L, 100L), Arrays.asList(2758L, 170L)));
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ IQwCompanyService iQwCompanyService;
|
|
|
+ @GetMapping("/testSop2")
|
|
|
+ public R testSop2() throws Exception {
|
|
|
+
|
|
|
+ String cropId="ww401085d7b785aae8";
|
|
|
+
|
|
|
+ QwCompany qwCompany = iQwCompanyService.getQwCompanyByRedis(cropId);
|
|
|
+
|
|
|
+ String status="100_asddas_6666";
|
|
|
+
|
|
|
+ String url="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+cropId+"&redirect_uri=" +
|
|
|
+ "http://"+qwCompany.getRealmNameUrl()+"/qwh5/pages/user/index?corpId="+cropId +
|
|
|
+ "&response_type=code&scope=snsapi_base&state="+status+"&agentid="+qwCompany.getServerAgentId()+"#wechat_redirect";
|
|
|
+
|
|
|
+ R andUpload = QRCodeUtils.createAndUpload(url);
|
|
|
+
|
|
|
+ return R.ok().put("data",andUpload);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private QwApiService qwApiService;
|
|
|
+
|
|
|
+ @GetMapping("/testSop3")
|
|
|
+ public R testSop3(String date) throws Exception {
|
|
|
+// qwSopLogsService.createCorpMassSending(date);
|
|
|
+// QwGetGroupmsgSendParam qwGetGroupmsgSendParam = new QwGetGroupmsgSendParam();
|
|
|
+// qwGetGroupmsgSendParam.setMsgid("msg7tWFCgAAjJC-HqurNKsOJif5oUHQiA");
|
|
|
+// qwGetGroupmsgSendParam.setUserid("ZhangZhanYue");
|
|
|
+//
|
|
|
+// QwGroupmsgSendResult groupmsgSendResult = qwApiService.getGroupmsgSendResult(qwGetGroupmsgSendParam, "ww5a88c4f879f204c5");
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ IQwSopTagService qwSopTagService;
|
|
|
+ @GetMapping("/tag")
|
|
|
+ public R tag() throws Exception {
|
|
|
+ qwSopTagService.addTag();
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+// @Autowired
|
|
|
+// private SopLogsChatTaskService sopLogsChatTaskService;
|
|
|
+// @GetMapping("/test2")
|
|
|
+// public String selectChatSopUserLogsListByTime() throws Exception {
|
|
|
+// userCourseCountService.insertFsUserCourseCountTask();
|
|
|
+// return "s";
|
|
|
+// }
|
|
|
+ @GetMapping("/isAddkf")
|
|
|
+ public ResponseResult<FsUser> isAddkf(FsUserCourseAddCompanyUserParam param) throws Exception {
|
|
|
+ return courseVideoService.isAddCompanyUser(param);
|
|
|
+ }
|
|
|
+
|
|
|
+ @PostMapping("/updateUrl")
|
|
|
+ public R updateUrl()
|
|
|
+ {
|
|
|
+ log.info("开始更新URL");
|
|
|
+ try {
|
|
|
+ fsUserVideoService.updateVideoUrl();
|
|
|
+ huaweiObsService.uploadByCOS();
|
|
|
+ log.info("更新URL成功完成");
|
|
|
+
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("开始更新URL执行失败", e);
|
|
|
+ }
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+ @GetMapping("/updateRedPack")
|
|
|
+ public R updateRedPack(String start , String end ){
|
|
|
+ LocalDateTime startTime = DateUtil.parseLocalDateTime(start);
|
|
|
+ LocalDateTime endTime = DateUtil.parseLocalDateTime(end);
|
|
|
+ List<RedPacketMoneyVO> redPacketMoneyVOS = fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogHourseByCompany(startTime, endTime);
|
|
|
+ for (RedPacketMoneyVO redPacketMoneyVO : redPacketMoneyVOS) {
|
|
|
+ companyService.subtractCompanyMoneyHourse(redPacketMoneyVO.getMoney(),redPacketMoneyVO.getCompanyId(), startTime.toLocalTime(), endTime.toLocalTime());
|
|
|
+ }
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+// @GetMapping("/syncQwExternalContactUnionid")
|
|
|
+// public R syncQwExternalContactUnionid(){
|
|
|
+// return syncQwExternalContactService.syncQwExternalContactUnionid();
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+ @GetMapping("/queryRedPacketResult")
|
|
|
+ public R queryRedPacketResult(String startTime , String endTime) {
|
|
|
+ fsCourseRedPacketLogService.queryRedPacketResult(startTime, endTime);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+// @GetMapping("/autoPullGroup")
|
|
|
+// public R autoPullGroup(){
|
|
|
+// qwTask1.autoPullGroup();
|
|
|
+// return R.ok();
|
|
|
+// }
|
|
|
+
|
|
|
+}
|