吴树波 1 неделя назад
Родитель
Сommit
540c4640ef

+ 8 - 23
fs-admin/src/main/java/com/fs/course/controller/FsCourseQuestionBankController.java

@@ -156,34 +156,19 @@ public class FsCourseQuestionBankController extends BaseController
     @PreAuthorize("@ss.hasPermi('course:courseQuestionBank:importData')")
     @PostMapping("/importData")
     public AjaxResult importData(MultipartFile file) throws Exception {
-
-        ExcelUtil<FsCourseQuestionBankImportDTO> util =
-                new ExcelUtil<>(FsCourseQuestionBankImportDTO.class);
-        List<FsCourseQuestionBankImportDTO> list =
-                util.importExcel(file.getInputStream());
+        ExcelUtil<FsCourseQuestionBankImportDTO> util = new ExcelUtil<>(FsCourseQuestionBankImportDTO.class);
+        List<FsCourseQuestionBankImportDTO> list = util.importExcel(file.getInputStream());
 
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         Long userId = loginUser.getUser().getUserId();
-
-        // 读取配置
         String json = configService.selectConfigByKey("course.config");
         CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
-
-        // 绑定状态控制 userId
-        Long finalUserId = (ObjectUtil.isNotEmpty(config.getIsBound()) && config.getIsBound())
-                ? userId
-                : null;
-
-        // 调用 service
-        ImportResultDTO result =
-                fsCourseQuestionBankService.importData(list, loginUser.getUser().getNickName(), finalUserId);
-
-        // 返回 message + failList
-        Map<String, Object> resp = new HashMap<>();
-        resp.put("message", result.buildResultMessage());
-        resp.put("failList", result.getFailureList());
-
-        return AjaxResult.success(resp);
+        if (ObjectUtil.isNotEmpty(config.getIsBound())&&config.getIsBound()){
+            String message = fsCourseQuestionBankService.importData(list, loginUser.getUser().getNickName(),userId);
+            return AjaxResult.success(message);
+        }
+        String message = fsCourseQuestionBankService.importData(list, loginUser.getUser().getNickName(),null);
+        return AjaxResult.success(message);
     }
 
     @GetMapping(value = "/getByIds")

+ 13 - 13
fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java

@@ -116,19 +116,19 @@ public class FsUserCourseVideoController extends AppBaseController {
         PageInfo<FsUserCourseVideoPageListVO> pageInfo = new PageInfo<>(list);
         return ResponseResult.ok(pageInfo);
     }
-    @Login
-    @ApiOperation("获取看课使用小程序")
-    @GetMapping("/getLoginMiniAppId/{appId}")
-    public R getLoginMiniAppId(@PathVariable String appId) {
-        CompanyMiniapp params =  new CompanyMiniapp();
-        params.setCompanyId(getCompanyId());
-        List<CompanyMiniapp> miniApps = companyMiniappService.selectCompanyMiniappList(params);
-        if (miniApps != null) {
-            appId = miniApps.stream().min(Comparator.comparing(CompanyMiniapp::getSortNum)).map(CompanyMiniapp::getAppId).orElse(appId);
-        }
-
-        return R.ok().put("data", appId);
-    }
+//    @Login
+//    @ApiOperation("获取看课使用小程序")
+//    @GetMapping("/getLoginMiniAppId/{appId}")
+//    public R getLoginMiniAppId(@PathVariable String appId) {
+//        CompanyMiniapp params =  new CompanyMiniapp();
+//        params.setCompanyId(getCompanyId());
+//        List<CompanyMiniapp> miniApps = companyMiniappService.selectCompanyMiniappList(params);
+//        if (miniApps != null) {
+//            appId = miniApps.stream().min(Comparator.comparing(CompanyMiniapp::getSortNum)).map(CompanyMiniapp::getAppId).orElse(appId);
+//        }
+//
+//        return R.ok().put("data", appId);
+//    }
     @Login
     @ApiOperation("课程视频详情")
     @GetMapping(value = "/videoDetails")

+ 1 - 1
fs-service/src/main/java/com/fs/course/service/IFsCourseQuestionBankService.java

@@ -74,7 +74,7 @@ public interface IFsCourseQuestionBankService
      * @param nickName 昵称
      * @return String
      */
-    ImportResultDTO importData(List<FsCourseQuestionBankImportDTO> list, String nickName, Long userId);
+    String importData(List<FsCourseQuestionBankImportDTO> list, String nickName, Long userId);
 
     /**
      * 根据ID查询题目

+ 5 - 5
fs-service/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodDaysServiceImpl.java

@@ -13,13 +13,13 @@ import com.fs.course.domain.FsUserCoursePeriodDays;
 import com.fs.course.domain.FsUserCourseVideo;
 import com.fs.course.mapper.FsUserCoursePeriodDaysMapper;
 import com.fs.course.mapper.FsUserCoursePeriodMapper;
+import com.fs.course.mapper.FsUserCourseVideoMapper;
 import com.fs.course.mapper.FsUserCourseVideoRedPackageMapper;
 import com.fs.course.param.BatchAddCourseSectionParam;
 import com.fs.course.param.CompanyRedPacketParam;
 import com.fs.course.param.CourseAnalysisParam;
 import com.fs.course.param.PeriodCountParam;
 import com.fs.course.service.IFsUserCoursePeriodDaysService;
-import com.fs.course.service.IFsUserCourseVideoService;
 import com.fs.course.vo.FsPeriodCountVO;
 import com.fs.course.vo.PeriodRedPacketVO;
 import com.fs.course.vo.UpdateCourseTimeVo;
@@ -63,7 +63,7 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
     private final SysConfigMapper sysConfigMapper;
 
     private final FsUserCoursePeriodDaysMapper fsUserCoursePeriodDaysMapper;
-    private final IFsUserCourseVideoService fsUserCourseVideoService;
+    private final FsUserCourseVideoMapper fsUserCourseVideoMapper;
 
     @Autowired
     private FsUserCourseVideoRedPackageMapper fsUserCourseVideoRedPackageMapper;
@@ -167,7 +167,7 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
         AtomicInteger i = new AtomicInteger(0);
         FsUserCourseVideo fsUserCourseVideo = new FsUserCourseVideo();
         fsUserCourseVideo.setCourseId(entity.getCourseId());
-        List<FsUserCourseVideo> videoList = fsUserCourseVideoService.selectFsUserCourseVideoListByCourseId(fsUserCourseVideo);
+        List<FsUserCourseVideo> videoList = fsUserCourseVideoMapper.selectFsUserCourseVideoListByCourseId(fsUserCourseVideo);
         Map<Long, FsUserCourseVideo> videoMap = PubFun.listToMapByGroupObject(videoList, FsUserCourseVideo::getVideoId);
         List<FsUserCoursePeriodDays> collect = entity.getVideoIds().stream().map(e -> {
             FsUserCourseVideo video = videoMap.get(e);
@@ -280,7 +280,7 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
             // 7. 获取视频详情并按courseSort排序
             FsUserCourseVideo queryVideo = new FsUserCourseVideo();
             queryVideo.setCourseId(param.getCourseId());
-            List<FsUserCourseVideo> videoList = fsUserCourseVideoService.selectFsUserCourseVideoListByCourseId(queryVideo);
+            List<FsUserCourseVideo> videoList = fsUserCourseVideoMapper.selectFsUserCourseVideoListByCourseId(queryVideo);
             Map<Long, FsUserCourseVideo> videoMap = PubFun.listToMapByGroupObject(videoList, FsUserCourseVideo::getVideoId);
 
             // 8. 验证视频是否都存在
@@ -330,7 +330,7 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
                     // 按日期排序,获取最后一个课程的日期
                     LocalDate lastDate = existingDays.stream()
                             .map(FsUserCoursePeriodDays::getDayDate)
-                            .filter(date -> date != null)
+                            .filter(Objects::nonNull)
                             .max(LocalDate::compareTo)
                             .orElse(period.getPeriodStartingTime().plusDays(startLesson - 2));
 

+ 0 - 17
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderScrmMapper.java

@@ -1415,21 +1415,4 @@ public interface FsStoreOrderScrmMapper
 
     @Select("select * from fs_store_order_scrm where  `status`=2 and (extend_order_id is not null and extend_order_id != '') and (delivery_id is not null and delivery_id != '')")
     List<FsStoreOrderScrm> selectShippedOrder();
-    /**
-     * 获取发货单数据
-     * @param maps 查询参数
-     * @return list
-     * **/
-    List<FsStoreOrderDeliveryNoteExportVO> getDeliveryNote(@Param("maps") FsStoreOrderParam maps);
-    /**
-     * 获取订单用户信息
-     * @param list 订单号
-     * @return lsit
-     * **/
-    List<FsStoreOrderCodeOpenIdVo> selectOrderCodeOpenIdInOrderCode(@Param("list") List<String> list);
-    /**
-     * 获取未结算订单
-     * **/
-    List<FsStoreOrderScrm> getUnsettledOrder();
-
 }

+ 0 - 11
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java

@@ -354,17 +354,6 @@ public interface IFsStoreOrderScrmService
 
     R receiveWaybillPush(String body);
 
-    /**
-     * 获取发货单数据
-     * @param param 查询条件
-     * @return list
-     * **/
-    List<FsStoreOrderDeliveryNoteExportVO> getDeliveryNote(FsStoreOrderParam param);
-
-    R importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList, String miniAppId);
-
-    void refreshOrderSettlementStatus();
-
     /**
      * 套餐包制单
      * @param companyUser 销售

+ 186 - 209
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -43,10 +43,7 @@ import com.fs.company.domain.CompanyDept;
 import com.fs.company.domain.CompanyMoneyLogs;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.domain.*;
-import com.fs.company.mapper.CompanyDeptMapper;
-import com.fs.company.mapper.CompanyMapper;
-import com.fs.company.mapper.CompanyMoneyLogsMapper;
-import com.fs.company.mapper.CompanyTagMapper;
+import com.fs.company.mapper.*;
 import com.fs.company.service.ICompanyDeptService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
@@ -219,6 +216,8 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
 
     @Autowired
     private IFsStoreCartScrmService cartService;
+    @Autowired
+    private CompanyUserUserMapper companyUserUserMapper;
 
     @Autowired
     private ApplicationEventPublisher publisher;
@@ -4884,24 +4883,6 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             .ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US)
             .withZone(ZoneId.of("Asia/Shanghai"));
 
-    private static final DateTimeFormatter STANDARD_FORMATTER = DateTimeFormatter
-            .ofPattern("yyyy-MM-dd HH:mm:ss");
-
-    public static LocalDateTime parseCstToLocalDateTime(String cstDateStr) {
-        if (cstDateStr == null || cstDateStr.trim().isEmpty()) {
-            return null;
-        }
-
-        try {
-            // 解析为带时区的日期时间
-            ZonedDateTime zonedDateTime = ZonedDateTime.parse(cstDateStr, CST_FORMATTER);
-            // 转换为本地日期时间(忽略时区,仅保留年月日时分秒)
-            return zonedDateTime.toLocalDateTime();
-        } catch (DateTimeParseException e) {
-            System.err.println("日期解析失败: " + e.getMessage());
-            return null;
-        }
-    }
     @Override
     public List<FsStoreOrderVO> selectFsStoreOrderListVOByErpAccount(FsStoreOrderParam param) {
         List<FsStoreOrderVO> list = fsStoreOrderMapper.selectFsStoreOrderListVOByErpAccount(param);
@@ -5159,194 +5140,194 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         return null;
     }
 
-    @Override
-    public List<FsStoreOrderDeliveryNoteExportVO> getDeliveryNote(FsStoreOrderParam param) {
-        return fsStoreOrderMapper.getDeliveryNote(param);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public R importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList, String appId) {
-        try {
-            StringBuilder builder = new StringBuilder();
-            //获取商城配置
-            String json = configService.selectConfigByKey("store.config");
-            StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
-
-            List<FsOrderDeliveryNoteDTO> successList = new ArrayList<>(dtoList.size());
-            //提前获取所有必要数据
-            Map<String, String> expressDeliveryMap = buildExpressDeliveryMap();
-            //提取所有有效订单号
-            List<String> orderCodeList = new ArrayList<>(dtoList.size());
-            for (int i = 0; i < dtoList.size(); i++) {
-                FsOrderDeliveryNoteDTO dto = dtoList.get(i);
-                if (StringUtils.isEmpty(dto.getOrderNumber())) {
-                    builder.append("数据第").append(i + 2).append("行系统订单为空!").append(System.lineSeparator());
-                }
-                if (StringUtils.isEmpty(dto.getLogisticsCompany())) {
-                    builder.append("数据第").append(i + 2).append("行物流公司为空!").append(System.lineSeparator());
-                }
-                if (StringUtils.isEmpty(dto.getDeliveryId())) {
-                    builder.append("数据第").append(i + 2).append("行快递单号为空!").append(System.lineSeparator());
-                } else {
-                    //处理订单ID信息
-                    String originalOrderNumber = dto.getOrderNumber();
-                    String processedOrderNumber = extractNumbers(originalOrderNumber);
-                    dto.setOrderNumber(processedOrderNumber);
-                    orderCodeList.add(dto.getOrderNumber());
-                }
-            }
-
-            //批量查询订单信息
-            if (orderCodeList.isEmpty()) {
-                return R.ok(builder.toString());
-            }
-            List<FsStoreOrderCodeOpenIdVo> orderCodeOpenIdVoList = fsStoreOrderMapper.selectOrderCodeOpenIdInOrderCode(orderCodeList);
-            Map<String, OrderOpenIdTransDTO> orderMap = new HashMap<>(orderCodeOpenIdVoList.size());
-            Map<String, List<FsStoreOrderCodeOpenIdVo>> orderDetailsMap = new HashMap<>(orderCodeOpenIdVoList.size());
-
-            for (FsStoreOrderCodeOpenIdVo vo : orderCodeOpenIdVoList) {
-                orderMap.computeIfAbsent(vo.getId(), k -> {
-                    OrderOpenIdTransDTO dto = new OrderOpenIdTransDTO();
-                    dto.setOpenId(vo.getOpenId());
-                    dto.setTransactionId(vo.getOutTransId());
-                    return dto;
-                });
-
-                orderDetailsMap
-                        .computeIfAbsent(vo.getId(), k -> new ArrayList<>())
-                        .add(vo);
-            }
-            final WxMaService wxService = WxMaConfiguration.getMaService(appId);
-            String uploadTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"))
-                    .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
-
-            for (int i = 0; i < dtoList.size(); i++) {
-                FsOrderDeliveryNoteDTO dto = dtoList.get(i);
-                int rowNum = i + 2;
-                if (StringUtils.isEmpty(dto.getOrderNumber())) {
-                    continue;
-                }
-                if (StringUtils.isEmpty(dto.getDeliveryId())) {
-                    builder.append("数据第").append(rowNum).append("行快递单号为空!")
-                            .append(System.lineSeparator());
-                    continue;
-                }
-
-                if (StringUtils.isEmpty(dto.getLogisticsCompany())) {
-                    builder.append("数据第").append(rowNum).append("行快递公司编号为空!")
-                            .append(System.lineSeparator());
-                    continue;
-                }
-//                if (dto.getDeliveryStatus() == null) {
-//                    dto.setDeliveryStatus(0);
+//    @Override
+//    public List<FsStoreOrderDeliveryNoteExportVO> getDeliveryNote(FsStoreOrderParam param) {
+//        return fsStoreOrderMapper.getDeliveryNote(param);
+//    }
+//
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public R importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList, String appId) {
+//        try {
+//            StringBuilder builder = new StringBuilder();
+//            //获取商城配置
+//            String json = configService.selectConfigByKey("store.config");
+//            StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
+//
+//            List<FsOrderDeliveryNoteDTO> successList = new ArrayList<>(dtoList.size());
+//            //提前获取所有必要数据
+//            Map<String, String> expressDeliveryMap = buildExpressDeliveryMap();
+//            //提取所有有效订单号
+//            List<String> orderCodeList = new ArrayList<>(dtoList.size());
+//            for (int i = 0; i < dtoList.size(); i++) {
+//                FsOrderDeliveryNoteDTO dto = dtoList.get(i);
+//                if (StringUtils.isEmpty(dto.getOrderNumber())) {
+//                    builder.append("数据第").append(i + 2).append("行系统订单为空!").append(System.lineSeparator());
 //                }
-//                if (ObjectUtil.isNotNull(dto.getDeliveryTime())) {
-//                    dto.setDeliveryTime(parseCstToDateOnlyString(dto.getDeliveryTime()));
+//                if (StringUtils.isEmpty(dto.getLogisticsCompany())) {
+//                    builder.append("数据第").append(i + 2).append("行物流公司为空!").append(System.lineSeparator());
 //                }
+//                if (StringUtils.isEmpty(dto.getDeliveryId())) {
+//                    builder.append("数据第").append(i + 2).append("行快递单号为空!").append(System.lineSeparator());
+//                } else {
+//                    //处理订单ID信息
+//                    String originalOrderNumber = dto.getOrderNumber();
+//                    String processedOrderNumber = extractNumbers(originalOrderNumber);
+//                    dto.setOrderNumber(processedOrderNumber);
+//                    orderCodeList.add(dto.getOrderNumber());
+//                }
+//            }
 //
-//                if (ObjectUtil.isNotNull(dto.getDeliveryPayTime()) &&
-//                        !dto.getDeliveryPayTime().isEmpty()) {
-//                    dto.setDeliveryPayTime(parseCstToDateOnlyString(dto.getDeliveryPayTime()));
+//            //批量查询订单信息
+//            if (orderCodeList.isEmpty()) {
+//                return R.ok(builder.toString());
+//            }
+//            List<FsStoreOrderCodeOpenIdVo> orderCodeOpenIdVoList = fsStoreOrderMapper.selectOrderCodeOpenIdInOrderCode(orderCodeList);
+//            Map<String, OrderOpenIdTransDTO> orderMap = new HashMap<>(orderCodeOpenIdVoList.size());
+//            Map<String, List<FsStoreOrderCodeOpenIdVo>> orderDetailsMap = new HashMap<>(orderCodeOpenIdVoList.size());
+//
+//            for (FsStoreOrderCodeOpenIdVo vo : orderCodeOpenIdVoList) {
+//                orderMap.computeIfAbsent(vo.getId(), k -> {
+//                    OrderOpenIdTransDTO dto = new OrderOpenIdTransDTO();
+//                    dto.setOpenId(vo.getOpenId());
+//                    dto.setTransactionId(vo.getOutTransId());
+//                    return dto;
+//                });
+//
+//                orderDetailsMap
+//                        .computeIfAbsent(vo.getId(), k -> new ArrayList<>())
+//                        .add(vo);
+//            }
+//            final WxMaService wxService = WxMaConfiguration.getMaService(appId);
+//            String uploadTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"))
+//                    .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
+//
+//            for (int i = 0; i < dtoList.size(); i++) {
+//                FsOrderDeliveryNoteDTO dto = dtoList.get(i);
+//                int rowNum = i + 2;
+//                if (StringUtils.isEmpty(dto.getOrderNumber())) {
+//                    continue;
 //                }
-                // 验证快递公司
-                String deliverySn = expressDeliveryMap.get(dto.getLogisticsCompany());
-                if (deliverySn == null) {
-                    builder.append("数据第").append(rowNum).append("行订单号为")
-                            .append(dto.getOrderNumber()).append("物流公司名称异常")
-                            .append(System.lineSeparator());
-                    continue;
-                }
-                dto.setDeliverySn(deliverySn);
-
-                // 检查订单是否存在
-                String orderNumber = dto.getOrderNumber();
-                OrderOpenIdTransDTO orderInfo = orderMap.get(orderNumber);
-                if (orderInfo == null) {
-                    builder.append("数据第").append(rowNum).append("行订单号")
-                            .append(orderNumber).append("不存在").append(System.lineSeparator());
-                    continue;
-                }
-                //验证是否开启微信发货
-                if (config.getIsWeChatShipping() != null && config.getIsWeChatShipping()) {
-                    // 上传物流信息到微信
-                    List<FsStoreOrderCodeOpenIdVo> orderDetails = orderDetailsMap.get(orderNumber);
-                    if (uploadShippingInfoToWechat(wxService, orderInfo, orderDetails, dto, uploadTime)) {
-                        successList.add(dto);
-                    } else {
-                        builder.append("数据第").append(rowNum).append("行订单号为")
-                                .append(orderNumber).append("上传微信失败").append(System.lineSeparator());
-                    }
-                } else {
-                    successList.add(dto);
-                }
-            }
-
-            //批量更新数据
-            if (!successList.isEmpty()) {
-                batchUpdateDeliveryNotes(successList);
-            }
-
-            return R.ok(builder.toString().equals("") ? "操作成功!" : builder.toString());
-        } catch (Exception e) {
-            log.error("导入发货单快递信息失败", e);
-            return R.error("导入失败:" + e.getMessage());
-        }
-    }
-
-    @Override
-    @Transactional(rollbackFor = Throwable.class, propagation = Propagation.REQUIRED)
-    public void refreshOrderSettlementStatus() {
-        try {
-            // 判断是否对接微信发货
-            String json = configService.selectConfigByKey("store.config");
-            StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
-            logger.info("进入微信结算订单定时任务--------------->{}", "start");
-            if (config != null && config.getIsWeChatShipping() != null && config.getIsWeChatShipping()) {
-                // 获取未结算订单
-                List<FsStoreOrderScrm> orderScrmList = fsStoreOrderMapper.getUnsettledOrder();
-
-//                String payConfig = configService.selectConfigByKey("store.pay");
-                String payConfig = configService.selectConfigByKey("his.pay");
-                JSONObject js = JSON.parseObject(payConfig);
-                String appId = js.getString("appId");
-
-                if (ObjectUtil.isNotNull(appId) && !appId.isEmpty()) {
-                    final WxMaService wxService = WxMaConfiguration.getMaService(appId);
-
-                    if (!orderScrmList.isEmpty()) {
-                        for (FsStoreOrderScrm order : orderScrmList) {
-                            WxMaOrderShippingInfoGetRequest request = new WxMaOrderShippingInfoGetRequest();
-                            request.setTransactionId(order.getBankTransactionId());
-                            WxMaOrderShippingInfoGetResponse response;
-
-                            try {
-                                response = wxService.getWxMaOrderShippingService().get(request);
-
-                                if (response.getErrCode().equals(0)) {
-                                    // 订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款
-                                    if (response.getOrder().getOrderState().equals(3) || response.getOrder().getOrderState().equals(4)) {
-                                        if (order.getStatus() == OrderInfoEnum.STATUS_2.getValue()) {
-                                            this.finishOrder(order.getId());
-                                        }
-                                    }
-                                    logger.info("请求信息------------------------》{}", response);
-                                }
+//                if (StringUtils.isEmpty(dto.getDeliveryId())) {
+//                    builder.append("数据第").append(rowNum).append("行快递单号为空!")
+//                            .append(System.lineSeparator());
+//                    continue;
+//                }
+//
+//                if (StringUtils.isEmpty(dto.getLogisticsCompany())) {
+//                    builder.append("数据第").append(rowNum).append("行快递公司编号为空!")
+//                            .append(System.lineSeparator());
+//                    continue;
+//                }
+////                if (dto.getDeliveryStatus() == null) {
+////                    dto.setDeliveryStatus(0);
+////                }
+////                if (ObjectUtil.isNotNull(dto.getDeliveryTime())) {
+////                    dto.setDeliveryTime(parseCstToDateOnlyString(dto.getDeliveryTime()));
+////                }
+////
+////                if (ObjectUtil.isNotNull(dto.getDeliveryPayTime()) &&
+////                        !dto.getDeliveryPayTime().isEmpty()) {
+////                    dto.setDeliveryPayTime(parseCstToDateOnlyString(dto.getDeliveryPayTime()));
+////                }
+//                // 验证快递公司
+//                String deliverySn = expressDeliveryMap.get(dto.getLogisticsCompany());
+//                if (deliverySn == null) {
+//                    builder.append("数据第").append(rowNum).append("行订单号为")
+//                            .append(dto.getOrderNumber()).append("物流公司名称异常")
+//                            .append(System.lineSeparator());
+//                    continue;
+//                }
+//                dto.setDeliverySn(deliverySn);
+//
+//                // 检查订单是否存在
+//                String orderNumber = dto.getOrderNumber();
+//                OrderOpenIdTransDTO orderInfo = orderMap.get(orderNumber);
+//                if (orderInfo == null) {
+//                    builder.append("数据第").append(rowNum).append("行订单号")
+//                            .append(orderNumber).append("不存在").append(System.lineSeparator());
+//                    continue;
+//                }
+//                //验证是否开启微信发货
+//                if (config.getIsWeChatShipping() != null && config.getIsWeChatShipping()) {
+//                    // 上传物流信息到微信
+//                    List<FsStoreOrderCodeOpenIdVo> orderDetails = orderDetailsMap.get(orderNumber);
+//                    if (uploadShippingInfoToWechat(wxService, orderInfo, orderDetails, dto, uploadTime)) {
+//                        successList.add(dto);
+//                    } else {
+//                        builder.append("数据第").append(rowNum).append("行订单号为")
+//                                .append(orderNumber).append("上传微信失败").append(System.lineSeparator());
+//                    }
+//                } else {
+//                    successList.add(dto);
+//                }
+//            }
+//
+//            //批量更新数据
+//            if (!successList.isEmpty()) {
+//                batchUpdateDeliveryNotes(successList);
+//            }
+//
+//            return R.ok(builder.toString().equals("") ? "操作成功!" : builder.toString());
+//        } catch (Exception e) {
+//            log.error("导入发货单快递信息失败", e);
+//            return R.error("导入失败:" + e.getMessage());
+//        }
+//    }
 
-                            } catch (WxErrorException e) {
-                                logger.info("异常信息------------------------》{}", e.getMessage());
-                                continue;
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            e.getStackTrace();
-        } finally {
-            logger.info("进入微信结算订单定时任务--------------->{}", "end");
-        }
-    }
+//    @Override
+//    @Transactional(rollbackFor = Throwable.class, propagation = Propagation.REQUIRED)
+//    public void refreshOrderSettlementStatus() {
+//        try {
+//            // 判断是否对接微信发货
+//            String json = configService.selectConfigByKey("store.config");
+//            StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
+//            logger.info("进入微信结算订单定时任务--------------->{}", "start");
+//            if (config != null && config.getIsWeChatShipping() != null && config.getIsWeChatShipping()) {
+//                // 获取未结算订单
+//                List<FsStoreOrderScrm> orderScrmList = fsStoreOrderMapper.getUnsettledOrder();
+//
+////                String payConfig = configService.selectConfigByKey("store.pay");
+//                String payConfig = configService.selectConfigByKey("his.pay");
+//                JSONObject js = JSON.parseObject(payConfig);
+//                String appId = js.getString("appId");
+//
+//                if (ObjectUtil.isNotNull(appId) && !appId.isEmpty()) {
+//                    final WxMaService wxService = WxMaConfiguration.getMaService(appId);
+//
+//                    if (!orderScrmList.isEmpty()) {
+//                        for (FsStoreOrderScrm order : orderScrmList) {
+//                            WxMaOrderShippingInfoGetRequest request = new WxMaOrderShippingInfoGetRequest();
+//                            request.setTransactionId(order.getBankTransactionId());
+//                            WxMaOrderShippingInfoGetResponse response;
+//
+//                            try {
+//                                response = wxService.getWxMaOrderShippingService().get(request);
+//
+//                                if (response.getErrCode().equals(0)) {
+//                                    // 订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款
+//                                    if (response.getOrder().getOrderState().equals(3) || response.getOrder().getOrderState().equals(4)) {
+//                                        if (order.getStatus() == OrderInfoEnum.STATUS_2.getValue()) {
+//                                            this.finishOrder(order.getId());
+//                                        }
+//                                    }
+//                                    logger.info("请求信息------------------------》{}", response);
+//                                }
+//
+//                            } catch (WxErrorException e) {
+//                                logger.info("异常信息------------------------》{}", e.getMessage());
+//                                continue;
+//                            }
+//                        }
+//                    }
+//                }
+//            }
+//        } catch (Exception e) {
+//            e.getStackTrace();
+//        } finally {
+//            logger.info("进入微信结算订单定时任务--------------->{}", "end");
+//        }
+//    }
 
     private void batchUpdateDeliveryNotes(List<FsOrderDeliveryNoteDTO> list) {
         int batchSize = 500;
@@ -5461,10 +5442,6 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         return R.ok().put("orderKey", uuid);
     }
 
-    private static final DateTimeFormatter CST_FORMATTER = DateTimeFormatter
-            .ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US)
-            .withZone(ZoneId.of("Asia/Shanghai"));
-
     private static final DateTimeFormatter STANDARD_FORMATTER = DateTimeFormatter
             .ofPattern("yyyy-MM-dd HH:mm:ss");
 

+ 0 - 1
fs-service/src/main/java/com/fs/ipad/vo/BaseVo.java

@@ -16,7 +16,6 @@ public class BaseVo{
     private String corpCode;
     private Long qwUserId;
     private boolean isRoom;
-    private Long qwUserId;
 
     public void setBase(BaseVo vo){
         this.uuid = vo.getUuid();

+ 7 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwWatchLogMapper.java

@@ -420,4 +420,11 @@ public interface QwWatchLogMapper extends BaseMapper<QwWatchLog>{
     int selectQwWatchLogIsFirstByUserId(Long userId);
 
 
+    @Select("select \n" +
+            "COUNT(CASE WHEN day = 0 and status in (1,2) THEN 1 END) AS firstOnline,\n" +
+            "COUNT(CASE WHEN day = 0 and status=2 THEN 1 END) AS firstOver,\n" +
+            "COUNT(CASE WHEN day = 1 and status in (1,2) THEN 1 END) AS d1Online,\n" +
+            "COUNT(CASE WHEN day = 1 and status=2 THEN 1 END) AS d1Over\n" +
+            " from qw_watch_log where qw_user_id=#{id} and DATE(line_time) = DATE(#{createTime})")
+    QwWatchLogStatisticsListVO selectQwWatchLogByQwUserId(@Param("id")Long id,@Param("createTime") Date createTime);
 }

+ 0 - 1
fs-service/src/main/java/com/fs/qw/service/IQwExternalContactService.java

@@ -250,7 +250,6 @@ public interface IQwExternalContactService extends IService<QwExternalContact> {
     List<QwUserDelLossLogVO> selectQwUserDelLossLogList(QwUserDelLossLogParam param);
 
     void updateQwExternalContactStatusById(QwExternalContact qwExternalContact);
-    List<QwExternalContact> selectQwUserAndLevel(List<Long> qwUserIdList, List<String> levelList, boolean isReg);
 
     R getRepeat(RepeatParam param);
     List<QwExternalContactVO> selectQwExternalContactListVONewSys(QwExternalContactParam qwExternalContact);

+ 0 - 1
fs-service/src/main/java/com/fs/qw/service/impl/CustomerTransferApprovalServiceImpl.java

@@ -22,7 +22,6 @@ import com.fs.qw.service.ICustomerTransferApprovalService;
 import com.fs.qw.vo.TransferCustomDTO;
 import com.fs.store.service.cache.IFsUserCacheService;
 import lombok.extern.slf4j.Slf4j;
-import com.hc.openapi.tool.util.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.hc.core5.util.Asserts;

+ 0 - 1
fs-service/src/main/java/com/fs/sop/vo/SopUserLogsVo.java

@@ -22,7 +22,6 @@ public class SopUserLogsVo  {
     private Integer minSend;
     private Long externalId;
     private Integer maxSend;
-    private Integer filterMode;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private String startTime;

+ 133 - 89
fs-user-app/src/main/java/com/fs/app/controller/store/CompanyUserScrmController.java

@@ -4,48 +4,79 @@ package com.fs.app.controller.store;
 import cn.hutool.core.img.ImgUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.fs.app.annotation.Login;
 import com.fs.app.controller.AppBaseController;
 import com.fs.app.param.FsBindCompanyUserParam;
 import com.fs.common.config.FSConfig;
 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.exception.CustomException;
 import com.fs.common.utils.CloudHostUtils;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.sign.Md5Utils;
+import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.domain.CompanyUserCard;
 import com.fs.company.domain.CompanyUserUser;
+import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.company.param.CompanyUserLoginParam;
+import com.fs.company.param.companyUserAddPrintParam;
 import com.fs.company.service.ICompanyUserCardService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.company.service.ICompanyUserUserService;
+import com.fs.config.ai.AiHostProper;
+import com.fs.fastGpt.domain.FastgptChatVoiceHomo;
+import com.fs.fastGpt.mapper.FastgptChatVoiceHomoMapper;
+import com.fs.fastgptApi.util.AudioUtils;
+import com.fs.fastgptApi.vo.AudioVO;
 import com.fs.framework.security.SecurityUtils;
+import com.fs.his.dto.PayConfigDTO;
+import com.fs.his.service.IFsPrescribeService;
+import com.fs.sop.domain.QwSopTempVoice;
+import com.fs.sop.service.IQwSopTempVoiceService;
+import com.fs.system.oss.CloudStorageService;
+import com.fs.system.oss.OSSFactory;
+import com.fs.system.service.ISysConfigService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.io.FileUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+import static com.fs.app.controller.CompanyUserController.SOP_TEMP_VOICE_KEY;
 
 
 @Api("销售中心")
 @RestController
-@RequestMapping(value="/store/app/companyUser")
+@RequestMapping(value = "/store/app/companyUser")
 public class CompanyUserScrmController extends AppBaseController {
-
+    @Autowired
+    private ISysConfigService configService;
     @Autowired
     private FSConfig fsConfig;
     @Autowired
     RedisCache redisCache;
+
     @Autowired
     private ICompanyUserService companyUserService;
     @Autowired
@@ -54,75 +85,90 @@ public class CompanyUserScrmController extends AppBaseController {
     @Autowired
     private ICompanyUserUserService companyUserUserService;
 
+
+    @Autowired
+    private CompanyUserMapper companyUserMapper;
+
+    @Autowired
+    private IFsPrescribeService fsPrescribeService;
+    @Autowired
+    private IQwSopTempVoiceService voiceService;
+    @Autowired
+    private FastgptChatVoiceHomoMapper fastgptChatVoiceHomoMapper;
+    @Autowired
+    AiHostProper aiHostProper;
+
     @PostMapping("/login")
-    public R Login(@RequestBody CompanyUserLoginParam param, HttpServletRequest request){
+    public R Login(@RequestBody CompanyUserLoginParam param, HttpServletRequest request) {
         try {
-            CompanyUser companyUser=companyUserService.selectUserByUserName(param.getUserName());
-            if(companyUser==null||companyUser.getDelFlag().equals("1")){
+            CompanyUser companyUser = companyUserService.selectUserByUserName(param.getUserName());
+            if (companyUser == null || companyUser.getDelFlag().equals("1")) {
                 return R.error("用户不存在");
             }
-            if(!companyUser.getStatus().equals("0")){
+            if (!companyUser.getStatus().equals("0")) {
                 return R.error("用户已禁用");
 
             }
-            String pwd=SecurityUtils.encryptPassword(param.getPassword());
-            if(!SecurityUtils.matchesPassword(param.getPassword(),companyUser.getPassword())){
+            String pwd = SecurityUtils.encryptPassword(param.getPassword());
+            if (!SecurityUtils.matchesPassword(param.getPassword(), companyUser.getPassword())) {
                 return R.error("密码不正确");
             }
-            redisCache.setCacheObject("company-user-token:"+Md5Utils.hash(companyUser.getUserId().toString()),companyUser.getUserId(),5, TimeUnit.DAYS);
+            redisCache.setCacheObject("company-user-token:" + Md5Utils.hash(companyUser.getUserId().toString()), companyUser.getUserId(), 5, TimeUnit.DAYS);
             return R.ok().put("companyUserToken", Md5Utils.hash(companyUser.getUserId().toString()));
-        } catch (Exception e){
+        } catch (Exception e) {
 
             return R.error("操作异常");
         }
     }
+
     @Login
     @ApiOperation("绑定销售")
     @PostMapping("/bindCompanyUser")
-    public R bindCompanyUser(@Validated @RequestBody FsBindCompanyUserParam param, HttpServletRequest request){
-        CompanyUserUser map=new CompanyUserUser();
+    public R bindCompanyUser(@Validated @RequestBody FsBindCompanyUserParam param, HttpServletRequest request) {
+        CompanyUserUser map = new CompanyUserUser();
         map.setCompanyUserId(param.getCompanyUserId());
         map.setUserId(Long.parseLong(getUserId()));
-        List<CompanyUserUser> list= companyUserUserService.selectCompanyUserUserList(map);
-        if(list==null||list.size()==0){
-            CompanyUser companyUser=companyUserService.selectCompanyUserById(param.getCompanyUserId());
-            if(companyUser!=null&&companyUser.getStatus().equals("0")){
+        List<CompanyUserUser> list = companyUserUserService.selectCompanyUserUserList(map);
+        if (list == null || list.size() == 0) {
+            CompanyUser companyUser = companyUserService.selectCompanyUserById(param.getCompanyUserId());
+            if (companyUser != null && companyUser.getStatus().equals("0")) {
                 map.setCompanyId(companyUser.getCompanyId());
                 companyUserUserService.insertCompanyUserUser(map);
             }
         }
         return R.ok();
     }
+
     @ApiOperation("获取销售信息")
     @GetMapping("/getUserInfo")
-    public R getUserInfo(@RequestParam("token")String token, HttpServletRequest request){
-        Long userId=redisCache.getCacheObject("company-user-token:"+token);
-        if(userId==null){
-            return R.error(403,"用户失效");
+    public R getUserInfo(@RequestParam("token") String token, HttpServletRequest request) {
+        Long userId = redisCache.getCacheObject("company-user-token:" + token);
+        if (userId == null) {
+            return R.error(403, "用户失效");
         }
-        CompanyUser companyUser=companyUserService.selectCompanyUserById(userId);
-        if(companyUser==null||companyUser.getDelFlag().equals("1")){
+        CompanyUser companyUser = companyUserService.selectCompanyUserById(userId);
+        if (companyUser == null || companyUser.getDelFlag().equals("1")) {
             return R.error("用户不存在");
         }
-        if(!companyUser.getStatus().equals("0")){
+        if (!companyUser.getStatus().equals("0")) {
             return R.error("用户已禁用");
         }
-        return R.ok().put("data",companyUser);
+        return R.ok().put("data", companyUser);
     }
 
     @ApiOperation("获取销售名片")
     @GetMapping("/getCompanyUserCard")
-    public R getCompanyUserCard(@RequestParam("cardId")Long cardId,HttpServletRequest request){
+    public R getCompanyUserCard(@RequestParam("cardId") Long cardId, HttpServletRequest request) {
         //获取用户码
-        CompanyUserCard companyUserCard=companyUserCardService.selectCompanyUserCardById(cardId);
-        return R.ok().put("data",companyUserCard);
+        CompanyUserCard companyUserCard = companyUserCardService.selectCompanyUserCardById(cardId);
+        return R.ok().put("data", companyUserCard);
     }
 
     @GetMapping("/query/{id}")
-    public R querySopVoiceById(@PathVariable("id") Long id){
+    public R querySopVoiceById(@PathVariable("id") Long id) {
         QwSopTempVoice tempVoice = voiceService.selectQwSopTempVoiceById(id);
         AudioVO audioVO = new AudioVO();
-        if(tempVoice != null){
+        if (tempVoice != null) {
             audioVO.setId(tempVoice.getId());
             audioVO.setVoiceTxt(tempVoice.getVoiceTxt());
             audioVO.setUrl(tempVoice.getVoiceUrl());
@@ -133,24 +179,23 @@ public class CompanyUserScrmController extends AppBaseController {
         return R.ok().put("data", audioVO);
     }
 
-    @Login
     @ApiOperation("获取支付宝收款码")
     @GetMapping("/getQrImg")
-    public R getQrImg(@RequestParam("token")String token,HttpServletRequest request){
-        Long userId=redisCache.getCacheObject("company-user-token:"+token);
+    public R getQrImg(@RequestParam("token") String token, HttpServletRequest request) {
+        Long userId = redisCache.getCacheObject("company-user-token:" + token);
         try {
-            CompanyUser companyUser=companyUserService.selectCompanyUserById(userId);
+            CompanyUser companyUser = companyUserService.selectCompanyUserById(userId);
             File newFile = new File("qr.jpg");
             File newFileT = new File("simsunb.ttf");
             try {
-                InputStream stream =  getClass().getClassLoader().getResourceAsStream("qr.jpg");
+                InputStream stream = getClass().getClassLoader().getResourceAsStream("qr.jpg");
                 FileUtils.copyInputStreamToFile(stream, newFile);
                 // if(!newFile.exists()){
                 //     InputStream stream =  getClass().getClassLoader().getResourceAsStream("fx.jpg");
                 //     FileUtils.copyInputStreamToFile(stream, newFile);
                 // }
-                if(!newFileT.exists()){
-                    InputStream streamT =  getClass().getClassLoader()
+                if (!newFileT.exists()) {
+                    InputStream streamT = getClass().getClassLoader()
                             .getResourceAsStream("simsunb.ttf");
                     FileUtils.copyInputStreamToFile(streamT, newFileT);
                 }
@@ -160,10 +205,9 @@ public class CompanyUserScrmController extends AppBaseController {
             }
 
             try {
-                String url=fsConfig.getQrPath()+"/qr-"+userId+".jpg";
+                String url = fsConfig.getQrPath() + "/qr-" + userId + ".jpg";
                 File outputFile = new File(url);
-                if(!outputFile.exists())
-                {
+                if (!outputFile.exists()) {
                     try {
                         outputFile.createNewFile();
 
@@ -183,9 +227,8 @@ public class CompanyUserScrmController extends AppBaseController {
 //                        100, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
 //                        0.8f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
 //                );
-                File qr = new File(fsConfig.getQrPath()+"/qr-"+userId+".png");
-                if(!qr.exists())
-                {
+                File qr = new File(fsConfig.getQrPath() + "/qr-" + userId + ".png");
+                if (!qr.exists()) {
                     try {
                         qr.createNewFile();
 
@@ -193,8 +236,8 @@ public class CompanyUserScrmController extends AppBaseController {
                         e.printStackTrace();
                     }
                 }
-                QrCodeUtil.generate( "http://alipay.yjf.runtzh.com/#/?companyId="+companyUser.getCompanyId()+"&companyUserId="+companyUser.getUserId(), 200, 200,
-                        FileUtil.file(fsConfig.getQrPath()+"/qr-"+userId+".png"));
+                QrCodeUtil.generate("http://alipay.yjf.runtzh.com/#/?companyId=" + companyUser.getCompanyId() + "&companyUserId=" + companyUser.getUserId(), 200, 200,
+                        FileUtil.file(fsConfig.getQrPath() + "/qr-" + userId + ".png"));
                 ImgUtil.pressImage(
                         newFile,
                         outputFile,
@@ -203,13 +246,13 @@ public class CompanyUserScrmController extends AppBaseController {
                         20, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                         1f
                 );
-                return R.ok().put("url","profile/qr/qr-"+userId+".jpg");
+                return R.ok().put("url", "profile/qr/qr-" + userId + ".jpg");
 
             } catch (Exception e) {
                 e.printStackTrace();
                 return R.error("操作异常");
             }
-        } catch (Exception e){
+        } catch (Exception e) {
 
             return R.error("操作异常");
         }
@@ -217,31 +260,31 @@ public class CompanyUserScrmController extends AppBaseController {
 
     @ApiOperation("获取公司收款码")
     @GetMapping("/getCompanyWxaCodeByPayment")
-    public R getCompanyWxaCodeByPayment(@RequestParam("companyId")Long companyId,
+    public R getCompanyWxaCodeByPayment(@RequestParam("companyId") Long companyId,
                                         @RequestParam(value = "appId", required = false) String appId,
                                         @RequestParam(required = false) Long companyUserId,
-                                        HttpServletRequest request){
+                                        HttpServletRequest request) {
 
         String json = configService.selectConfigByKey("his.pay");
         PayConfigDTO payConfigDTO = JSONUtil.toBean(json, PayConfigDTO.class);
-        if (appId == null || appId.trim().isEmpty() ) {
+        if (appId == null || appId.trim().isEmpty()) {
             appId = payConfigDTO.getAppId();
         }
         //获取用户码
         String WxaCode;
-        if(CloudHostUtils.hasCloudHostName("鸿森堂")) {
+        if (CloudHostUtils.hasCloudHostName("鸿森堂")) {
             WxaCode = redisCache.getCacheObject("company-wxa-code:" + companyId + ":" + appId + ":" + companyUserId);
         } else {
             WxaCode = redisCache.getCacheObject("company-wxa-code:" + companyId + ":" + appId);
         }
-        return R.ok().put("data",WxaCode);
+        return R.ok().put("data", WxaCode);
     }
 
 
     @ApiOperation("上传声纹")
     @PostMapping("/addVoicePrintUrl")
     public R addVoicePrintUrl(@RequestBody companyUserAddPrintParam param) throws Exception {
-        Long userId=param.getCompanyUserId();
+        Long userId = param.getCompanyUserId();
         CompanyUser companyUser = new CompanyUser();
         companyUser.setUserId(userId);
         companyUser.setVoicePrintUrl(param.getVoicePrintUrl());
@@ -262,8 +305,8 @@ public class CompanyUserScrmController extends AppBaseController {
 
         try {
             CloseableHttpClient httpClient = HttpClients.createDefault();
-            HttpPost httpPost = new HttpPost(aiHostProper.getCommonApi()+"/app/common/addCompanyAudio");
-            String json = "{\"url\":\""+wavUrl+"\",\"id\":\""+userId+"\"}";
+            HttpPost httpPost = new HttpPost(aiHostProper.getCommonApi() + "/app/common/addCompanyAudio");
+            String json = "{\"url\":\"" + wavUrl + "\",\"id\":\"" + userId + "\"}";
             StringEntity entity = new StringEntity(json);
             httpPost.setEntity(entity);
             httpPost.setHeader("Content-type", "application/json");
@@ -272,8 +315,8 @@ public class CompanyUserScrmController extends AppBaseController {
             if (response.getStatusLine().getStatusCode() == 200) {
                 String responseBody = EntityUtils.toString(response.getEntity());
                 JSONObject jsonObject = JSON.parseObject(responseBody);
-                Integer code = (Integer)jsonObject.get("code");
-                if (code==200){
+                Integer code = (Integer) jsonObject.get("code");
+                if (code == 200) {
                     voiceService.insertQwSopTempVoiceModel(userId);
                     return R.ok();
                 }
@@ -291,44 +334,44 @@ public class CompanyUserScrmController extends AppBaseController {
     }
 
     @GetMapping("/querySopVoiceList")
-    public TableDataInfo querySopVoiceList(@RequestParam("companyUserId")Long companyUserId,@RequestParam("recordType") Integer recordType){
+    public TableDataInfo querySopVoiceList(@RequestParam("companyUserId") Long companyUserId, @RequestParam("recordType") Integer recordType) {
         startPage();
         QwSopTempVoice sopTempVoice = new QwSopTempVoice();
         sopTempVoice.setRecordType(recordType);
 
-        Long userId=companyUserId;
+        Long userId = companyUserId;
         sopTempVoice.setCompanyUserId(userId);
         List<QwSopTempVoice> sopTempVoices = voiceService.selectQwSopTempVoiceNewList(sopTempVoice);
         return getDataTable(sopTempVoices);
     }
 
     @GetMapping("/createUserAllVoice")
-    public R createUserAllVoice(@RequestParam("companyUserId")Long companyUserId){
+    public R createUserAllVoice(@RequestParam("companyUserId") Long companyUserId) {
         QwSopTempVoice sopTempVoice = new QwSopTempVoice();
         sopTempVoice.setRecordType(0);
 
-        if(companyUserId==null){
-            throw  new CustomException("未登录",403);
+        if (companyUserId == null) {
+            throw new CustomException("未登录", 403);
         }
 
-        if(companyUserId != null){
+        if (companyUserId != null) {
             CompanyUser companyUser = companyUserMapper.selectCompanyUserByCompanyUserId(companyUserId);
-            if(companyUser != null && companyUser.getVoicePrintUrl() == null){
-                return R.ok().put("code",201).put("msg","账号未录制声纹,请录制后再试!");
+            if (companyUser != null && companyUser.getVoicePrintUrl() == null) {
+                return R.ok().put("code", 201).put("msg", "账号未录制声纹,请录制后再试!");
             }
         }
 
         sopTempVoice.setCompanyUserId(companyUserId);
         List<QwSopTempVoice> sopTempVoices = voiceService.selectQwSopTempVoiceNewList(sopTempVoice);
-        if(sopTempVoices != null && !sopTempVoices.isEmpty()){
+        if (sopTempVoices != null && !sopTempVoices.isEmpty()) {
             List<Long> newCompanyUserId = redisCache.getVoiceAllList(SOP_TEMP_VOICE_KEY);
-            if(newCompanyUserId != null && newCompanyUserId.contains(companyUserId)){
-                return R.error().put("code",202).put("msg","语音还未转换完成,请完成后再添加!");
-            }else{
-                redisCache.setVoice(SOP_TEMP_VOICE_KEY,companyUserId);
-                sopTempVoices.forEach(m -> m.setVoiceTxt(m.getVoiceTxt().replace(" ","")));
+            if (newCompanyUserId != null && newCompanyUserId.contains(companyUserId)) {
+                return R.error().put("code", 202).put("msg", "语音还未转换完成,请完成后再添加!");
+            } else {
+                redisCache.setVoice(SOP_TEMP_VOICE_KEY, companyUserId);
+                sopTempVoices.forEach(m -> m.setVoiceTxt(m.getVoiceTxt().replace(" ", "")));
                 redisCache.setVoiceList(SOP_TEMP_VOICE_KEY + ":" + companyUserId, sopTempVoices);
-                return R.ok().put("msg","语音已加入队列进行转换,请耐心等待!");
+                return R.ok().put("msg", "语音已加入队列进行转换,请耐心等待!");
             }
         }
         return null;
@@ -336,30 +379,30 @@ public class CompanyUserScrmController extends AppBaseController {
 
 
     @GetMapping("/companyUserVoice")
-    public R companyUserVoice(@RequestParam("companyUserId")Long companyUserId,@RequestParam("id") Long id){
+    public R companyUserVoice(@RequestParam("companyUserId") Long companyUserId, @RequestParam("id") Long id) {
         AudioVO audioVO = new AudioVO();
 
 
         List<QwSopTempVoice> sopTempVoices = redisCache.getVoiceAllList(SOP_TEMP_VOICE_KEY + ":" + companyUserId);
-        if(sopTempVoices != null && !sopTempVoices.isEmpty()){
+        if (sopTempVoices != null && !sopTempVoices.isEmpty()) {
             List<Long> collect = sopTempVoices.stream().map(QwSopTempVoice::getId).collect(Collectors.toList());
-            if (collect.contains(id)){
-                return R.ok().put("code",202).put("msg","该语音已进入转换,请完成后再试。");
+            if (collect.contains(id)) {
+                return R.ok().put("code", 202).put("msg", "该语音已进入转换,请完成后再试。");
             }
         }
 
-        if(companyUserId != null){
+        if (companyUserId != null) {
             CompanyUser companyUser = companyUserMapper.selectCompanyUserByCompanyUserId(companyUserId);
-            if(companyUser != null && companyUser.getVoicePrintUrl() == null){
-                return R.ok().put("code",201).put("msg","账号未录制声纹,请录制后再试!");
+            if (companyUser != null && companyUser.getVoicePrintUrl() == null) {
+                return R.ok().put("code", 201).put("msg", "账号未录制声纹,请录制后再试!");
             }
         }
 
         QwSopTempVoice qwSopTempVoice = voiceService.selectQwSopTempVoiceById(id);
-        if(qwSopTempVoice != null && qwSopTempVoice.getCompanyUserId() != null){
+        if (qwSopTempVoice != null && qwSopTempVoice.getCompanyUserId() != null) {
             List<FastgptChatVoiceHomo> homos = fastgptChatVoiceHomoMapper.selectFastgptChatVoiceHomoList(new FastgptChatVoiceHomo());
-            audioVO = AudioUtils.createUserUrlAndUrl(homos,qwSopTempVoice.getCompanyUserId(), qwSopTempVoice.getVoiceTxt().replace(" ",""));
-            if(audioVO != null && audioVO.getWavUrl() != null &&  audioVO.getUrl() != null){
+            audioVO = AudioUtils.createUserUrlAndUrl(homos, qwSopTempVoice.getCompanyUserId(), qwSopTempVoice.getVoiceTxt().replace(" ", ""));
+            if (audioVO != null && audioVO.getWavUrl() != null && audioVO.getUrl() != null) {
                 qwSopTempVoice.setVoiceUrl(audioVO.getUrl());
                 qwSopTempVoice.setUserVoiceUrl(audioVO.getWavUrl());
                 qwSopTempVoice.setDuration(audioVO.getDuration());
@@ -372,27 +415,28 @@ public class CompanyUserScrmController extends AppBaseController {
 
     /**
      * 当只有user_voice_url时,生成表中对应条的voice_url
-     * @param userVoiceUrl  wav格式的语音文件
-     * @param id            qw_sop_temp_voice的id
+     *
+     * @param userVoiceUrl wav格式的语音文件
+     * @param id           qw_sop_temp_voice的id
      * @return
      */
     @GetMapping("/companyUserVoiceNew")
-    public R companyUserVoiceNew( @RequestParam("companyUserId")Long companyUserId,@RequestParam("id") Long id,@RequestParam("userVoiceUrl") String userVoiceUrl){
+    public R companyUserVoiceNew(@RequestParam("companyUserId") Long companyUserId, @RequestParam("id") Long id, @RequestParam("userVoiceUrl") String userVoiceUrl) {
 
         AudioVO audioVO = new AudioVO();
 
         List<QwSopTempVoice> sopTempVoices = redisCache.getVoiceAllList(SOP_TEMP_VOICE_KEY + ":" + companyUserId);
-        if(sopTempVoices != null && !sopTempVoices.isEmpty()){
+        if (sopTempVoices != null && !sopTempVoices.isEmpty()) {
             List<Long> collect = sopTempVoices.stream().map(QwSopTempVoice::getId).collect(Collectors.toList());
-            if (collect.contains(id)){
-                return R.ok().put("code",202).put("msg","该语音已进入转换,请完成后再试。");
+            if (collect.contains(id)) {
+                return R.ok().put("code", 202).put("msg", "该语音已进入转换,请完成后再试。");
             }
         }
 
         QwSopTempVoice qwSopTempVoice = voiceService.selectQwSopTempVoiceByIdAndUserVoiceUrl(id);
-        if(qwSopTempVoice != null && qwSopTempVoice.getId() != null){
+        if (qwSopTempVoice != null && qwSopTempVoice.getId() != null) {
             audioVO = AudioUtils.createVoiceUrl(qwSopTempVoice.getCompanyUserId(), userVoiceUrl);
-            if(audioVO != null && audioVO.getUrl() != null){
+            if (audioVO != null && audioVO.getUrl() != null) {
                 qwSopTempVoice.setVoiceUrl(audioVO.getUrl());
                 qwSopTempVoice.setUserVoiceUrl(userVoiceUrl);
                 qwSopTempVoice.setDuration(audioVO.getDuration());