| | |
| | | } |
| | | |
| | | @Override |
| | | public R<Order> detailBySubscriptionId(String subscriptionId) { |
| | | return R.fail(cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> changeOrderState(String orderId, Integer state) { |
| | | return R.fail(cause.getMessage()); |
| | | } |
| | |
| | | R<String> updatePhoneRecording(@RequestParam("orderId")String orderId, |
| | | @RequestParam("audioUrl")String audioUrl); |
| | | |
| | | /** |
| | | * 通过subscriptionId查询订单详情 |
| | | * @param subscriptionId 绑定id |
| | | * @return |
| | | */ |
| | | @GetMapping(value = "/order/detailBySubscriptionId") |
| | | R<Order> detailBySubscriptionId(@RequestParam("subscriptionId")String subscriptionId); |
| | | |
| | | } |
| | |
| | | import com.ruoyi.admin.utils.DescribeInstances; |
| | | import com.ruoyi.admin.utils.HttpUtil; |
| | | import com.ruoyi.admin.utils.PrivateNumberUtil; |
| | | import com.ruoyi.admin.vo.OrderByServeRecordVO; |
| | | import com.ruoyi.admin.vo.OrderDetailVO; |
| | | import com.ruoyi.admin.vo.OrderReasinDto; |
| | | import com.ruoyi.admin.vo.ReassinDto; |
| | | import com.ruoyi.admin.vo.*; |
| | | import com.ruoyi.admin.voice.util.AXBUtil; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.domain.BaseEntity; |
| | |
| | | private PrivateNumberUtil privateNumberUtil; |
| | | @Autowired |
| | | private IamConfigService iamConfigService; |
| | | @Autowired |
| | | private OrderRecordingService orderRecordingService; |
| | | /** |
| | | * 雪花算法类 |
| | | */ |
| | |
| | | IamConfig iamConfig = iamConfigService.getById(1); |
| | | if(Objects.nonNull(order.getIsOpenVirtualNumber()) && order.getIsOpenVirtualNumber() == 1){ |
| | | // 虚拟号码绑定 |
| | | String result = AXBUtil.axbBindNumber(iamConfig.getAppKey(), iamConfig.getAppSecret(), order.getOrderNumber(), order.getReservationPhone(), masterWorker.getPhone()); |
| | | String result = AXBUtil.axbBindNumber(iamConfig.getAppKey(), iamConfig.getAppSecret(), iamConfig.getVirtualNumber(), order.getReservationPhone(), masterWorker.getPhone()); |
| | | // 存储绑定后的唯一标识 |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String subscriptionId = jsonObject.getString("subscriptionId"); |
| | |
| | | IamConfig iamConfig = iamConfigService.getById(1); |
| | | if(Objects.nonNull(order.getIsOpenVirtualNumber()) && order.getIsOpenVirtualNumber() == 1){ |
| | | // 虚拟号码绑定 |
| | | String result = AXBUtil.axbBindNumber(iamConfig.getAppKey(), iamConfig.getAppSecret(), order.getOrderNumber(), order.getReservationPhone(), masterWorker.getPhone()); |
| | | String result = AXBUtil.axbBindNumber(iamConfig.getAppKey(), iamConfig.getAppSecret(), iamConfig.getVirtualNumber(), order.getReservationPhone(), masterWorker.getPhone()); |
| | | // 存储绑定后的唯一标识 |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String subscriptionId = jsonObject.getString("subscriptionId"); |
| | |
| | | MasterWorker masterWorker = masterWorkerService.lambdaQuery() |
| | | .eq(MasterWorker::getId, orderReasinDto.getWorkerId()) |
| | | .eq(MasterWorker::getIsDelete, 0).one(); |
| | | Order order = orderClient.exchangeOrder(orderId.getType(), orderId.getOrderId(), orderReasinDto.getWorkerId(), |
| | | masterWorker.getRealName(), masterWorker.getPhone()).getData(); |
| | | try{ |
| | | // 虚拟号码 师傅号码备案 |
| | | String fileName = privateNumberUtil.uploadNumberFile(masterWorker.getProfilePicture()).getData(); |
| | | R r = privateNumberUtil.addANumber(masterWorker.getPhone(), masterWorker.getRealName(), masterWorker.getIdNumber(), fileName); |
| | | if(r.getCode() == 500){ |
| | | throw new GlobalException(r.getMsg()); |
| | | } |
| | | }catch (Exception e){ |
| | | throw new GlobalException("虚拟号码绑定异常!"); |
| | | } |
| | | Order order = orderClient.exchangeOrder(orderId.getType(), orderId.getOrderId(), orderReasinDto.getWorkerId(), |
| | | masterWorker.getRealName(), masterWorker.getPhone()).getData(); |
| | | // 虚拟号码配置 |
| | | IamConfig iamConfig = iamConfigService.getById(1); |
| | | // 订单派单 |
| | |
| | | AXBUtil.axbModifyNumber(iamConfig.getAppKey(),iamConfig.getAppSecret(),order.getSubscriptionId(), order.getReservationPhone(), masterWorker.getPhone()); |
| | | }else { |
| | | // 虚拟号码绑定 |
| | | String result = AXBUtil.axbBindNumber(iamConfig.getAppKey(), iamConfig.getAppSecret(), order.getOrderNumber(), order.getReservationPhone(), masterWorker.getPhone()); |
| | | String result = AXBUtil.axbBindNumber(iamConfig.getAppKey(), iamConfig.getAppSecret(), iamConfig.getVirtualNumber(), order.getReservationPhone(), masterWorker.getPhone()); |
| | | // 存储绑定后的唯一标识 |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String subscriptionId = jsonObject.getString("subscriptionId"); |
| | |
| | | orderClient.updateState(order.getId(), 7); |
| | | if(Objects.nonNull(order.getIsOpenVirtualNumber()) && order.getIsOpenVirtualNumber() == 1){ |
| | | // 虚拟号码绑定 |
| | | String result = AXBUtil.axbBindNumber(iamConfig.getAppKey(), iamConfig.getAppSecret(), order.getOrderNumber(), order.getReservationPhone(), masterWorker.getPhone()); |
| | | String result = AXBUtil.axbBindNumber(iamConfig.getAppKey(), iamConfig.getAppSecret(), iamConfig.getVirtualNumber(), order.getReservationPhone(), masterWorker.getPhone()); |
| | | // 存储绑定后的唯一标识 |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String subscriptionId = jsonObject.getString("subscriptionId"); |
| | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.ruoyi.admin.entity.Order; |
| | | import com.ruoyi.admin.entity.IamConfig; |
| | | import com.ruoyi.admin.entity.OrderRecording; |
| | | import com.ruoyi.admin.service.IamConfigService; |
| | | import com.ruoyi.admin.service.OrderRecordingService; |
| | | import com.ruoyi.admin.service.OrderService; |
| | | import com.ruoyi.admin.voice.util.AXBUtil; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.order.api.entity.Order; |
| | | import com.ruoyi.order.api.feignClient.OrderClient; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | |
| | | @RequestMapping("/privateNumber") |
| | | public class PrivateNumberCallBackController { |
| | | |
| | | |
| | | @Resource |
| | | private OrderService orderService; |
| | | private OrderClient orderClient; |
| | | @Resource |
| | | private OrderRecordingService orderRecordingService; |
| | | @Resource |
| | | private IamConfigService iamConfigService; |
| | | |
| | | /** |
| | | * 隐私号码回调 |
| | |
| | | String recordObjectName = feeLstJson.getString("recordObjectName"); |
| | | String recordBucketName = feeLstJson.getString("recordBucketName"); |
| | | log.info("隐私号码回调:{},录音文件名:{},录音服务器名:{}", subscriptionId, recordObjectName, recordDomain); |
| | | Order order = orderService.getOne(Wrappers.lambdaQuery(Order.class) |
| | | .eq(Order::getSubscriptionId, subscriptionId) |
| | | .last("LIMIT 1")); |
| | | if(Objects.nonNull(order)){ |
| | | order.setRecordDomain(recordDomain); |
| | | order.setRecordObjectName(recordObjectName); |
| | | orderService.updateById(order); |
| | | Order order = orderClient.detailBySubscriptionId(subscriptionId).getData(); |
| | | long count = orderRecordingService.count(Wrappers.<OrderRecording>lambdaQuery() |
| | | .eq(OrderRecording::getRecordObjectName, recordObjectName) |
| | | .eq(OrderRecording::getRecordDomain, recordDomain)); |
| | | if (Objects.nonNull(order) && count == 0) { |
| | | IamConfig iamConfig = iamConfigService.getById(1); |
| | | OrderRecording orderRecording = new OrderRecording(); |
| | | orderRecording.setOrderId(order.getId()); |
| | | orderRecording.setRecordDomain(recordDomain); |
| | | orderRecording.setRecordObjectName(recordObjectName); |
| | | String recordingUrl = AXBUtil.axbGetRecordDownloadLink(iamConfig.getAppKey(), iamConfig.getAppSecret(), recordDomain, recordObjectName); |
| | | orderRecording.setPhoneRecording(recordingUrl); |
| | | orderRecordingService.save(orderRecording); |
| | | } |
| | | } |
| | | return R.ok("OK"); |
| | | return R.ok(); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | package com.ruoyi.admin.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.ruoyi.common.core.domain.BaseEntity; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Getter; |
| | | import lombok.Setter; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * <p> |
| | | * 通话录音 |
| | | * </p> |
| | | * |
| | | * @author hjl |
| | | * @since 2024-05-29 |
| | | */ |
| | | @Getter |
| | | @Setter |
| | | @TableName("t_order_recording") |
| | | @ApiModel(value = "OrderRecording对象", description = "通话录音") |
| | | public class OrderRecording implements Serializable { |
| | | |
| | | @TableId(value = "id",type = IdType.AUTO) |
| | | private Integer id; |
| | | @ApiModelProperty("订单id") |
| | | @TableField("order_id") |
| | | private String orderId; |
| | | @ApiModelProperty("录音文件存储的服务器域名") |
| | | @TableField("record_domain") |
| | | private String recordDomain; |
| | | @ApiModelProperty("录音文件名") |
| | | @TableField("record_object_name") |
| | | private String recordObjectName; |
| | | @ApiModelProperty("录音内容") |
| | | @TableField("phone_recording") |
| | | private String phoneRecording; |
| | | |
| | | } |
| New file |
| | |
| | | package com.ruoyi.admin.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.admin.entity.Agreement; |
| | | import com.ruoyi.admin.entity.OrderRecording; |
| | | |
| | | /** |
| | | * <p> |
| | | * 通话录音 Mapper 接口 |
| | | * </p> |
| | | * |
| | | * @author hjl |
| | | * @since 2024-05-29 |
| | | */ |
| | | public interface OrderRecordingMapper extends BaseMapper<OrderRecording> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.ruoyi.admin.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.admin.entity.Agreement; |
| | | import com.ruoyi.admin.entity.OrderRecording; |
| | | import com.ruoyi.common.core.domain.R; |
| | | |
| | | /** |
| | | * <p> |
| | | * 通话录音 服务类 |
| | | * </p> |
| | | * |
| | | * @author hjl |
| | | * @since 2024-05-29 |
| | | */ |
| | | public interface OrderRecordingService extends IService<OrderRecording> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.ruoyi.admin.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.admin.entity.Agreement; |
| | | import com.ruoyi.admin.entity.OrderRecording; |
| | | import com.ruoyi.admin.mapper.AgreementMapper; |
| | | import com.ruoyi.admin.mapper.OrderRecordingMapper; |
| | | import com.ruoyi.admin.service.AgreementService; |
| | | import com.ruoyi.admin.service.OrderRecordingService; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | /** |
| | | * <p> |
| | | * 通话录音 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author hjl |
| | | * @since 2024-05-29 |
| | | */ |
| | | @Service |
| | | public class OrderRecordingServiceImpl extends ServiceImpl<OrderRecordingMapper, OrderRecording> implements OrderRecordingService { |
| | | |
| | | } |
| | |
| | | import com.alibaba.excel.write.builder.ExcelWriterBuilder; |
| | | import com.alibaba.excel.write.metadata.WriteSheet; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.admin.entity.*; |
| | | import com.ruoyi.admin.mapper.OrderMapper; |
| | | import com.ruoyi.admin.mapper.OrderRecordingMapper; |
| | | import com.ruoyi.admin.mapper.UserMapper; |
| | | import com.ruoyi.admin.service.MasterWorkerService; |
| | | import com.ruoyi.admin.service.OrderService; |
| | |
| | | private EvaluateClient evaluateClient; |
| | | @Resource |
| | | private ServeRecordClient serveRecordClient; |
| | | @Resource |
| | | private OrderRecordingMapper orderRecordingMapper; |
| | | |
| | | /** |
| | | * linux服务器保存订单轨迹文件夹 |
| | |
| | | orderInfo.setRemark(order.getRemark()); |
| | | orderInfo.setCompleteTime(order.getCompleteTime()); |
| | | orderInfo.setReservationRemark(order.getReservationRemark()); |
| | | orderInfo.setPhoneRecording(order.getPhoneRecording()); |
| | | // 查询通话录音 |
| | | List<OrderRecording> orderRecordingList = orderRecordingMapper.selectList(Wrappers.lambdaQuery(OrderRecording.class) |
| | | .eq(OrderRecording::getOrderId, order.getId())); |
| | | orderInfo.setOrderRecordingList(orderRecordingList); |
| | | } |
| | | result.setOrderInfo(orderInfo); |
| | | } |
| | |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.io.IOException; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.Instant; |
| | | import java.util.Date; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | |
| | | log.info("获取token:{}",string); |
| | | JSONObject jsonObject = JSONObject.parseObject(string); |
| | | JSONObject tokenJson = jsonObject.getJSONObject("token"); |
| | | Date expiresAt = tokenJson.getDate("expires_at"); |
| | | redisService.setCacheObject("PRIVATE_NUMBER:",token,expiresAt.getTime()-System.currentTimeMillis(), TimeUnit.MILLISECONDS); |
| | | // 2025-10-23T07:27:59.224000Z |
| | | String expiresAt = tokenJson.getString("expires_at"); |
| | | // 将字符串解析为Instant |
| | | Instant instant = Instant.parse(expiresAt); |
| | | // 转换为Date |
| | | Date date = Date.from(instant); |
| | | // String replace = expiresAt.substring(0, expiresAt.lastIndexOf(".")).replace("T", " "); |
| | | // Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(replace); |
| | | redisService.setCacheObject("PRIVATE_NUMBER:",token,date.getTime()-System.currentTimeMillis(), TimeUnit.MILLISECONDS); |
| | | } catch (IOException e) { |
| | | throw new ServiceException(e.getMessage()); |
| | | } |
| | |
| | | multipartFile.getBytes() |
| | | ); |
| | | builder.addFormDataPart("files", multipartFile.getOriginalFilename(), fileBody); |
| | | System.err.println("文件名称+"+multipartFile.getOriginalFilename()); |
| | | } |
| | | } |
| | | } catch (IOException e) { |
| | |
| | | JSONObject jsonObject = JSONObject.parseObject(string); |
| | | String result = jsonObject.getString("result"); |
| | | if("Upload Successful.".equals(result)){ |
| | | System.err.println("返回的文件名称+"+file.getOriginalFilename()); |
| | | return R.ok(file.getOriginalFilename(),""); |
| | | }else { |
| | | String failReason = jsonObject.getString("failReason"); |
| New file |
| | |
| | | package com.ruoyi.admin.vo; |
| | | |
| | | import com.ruoyi.admin.entity.OrderRecording; |
| | | import com.ruoyi.order.api.entity.Order; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @ApiModel(value = "订单详情返回OrderDetailRecordIngVO-含通话录音列表") |
| | | public class OrderDetailRecordIngVO extends Order { |
| | | |
| | | @ApiModelProperty(value = "通话录音列表") |
| | | private List<OrderRecording> orderRecordingList; |
| | | |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.admin.entity.OrderRecording; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author HJL |
| | |
| | | @ApiModelProperty("备注") |
| | | private String remark; |
| | | @ApiModelProperty("电话录音") |
| | | private String phoneRecording; |
| | | private List<OrderRecording> orderRecordingList; |
| | | } |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | /** |
| | | * 通过subscriptionId查询订单详情 |
| | | */ |
| | | @ApiOperation(value = "订单列表-通过subscriptionId查询订单详情", tags = {"后台-订单管理"}) |
| | | @GetMapping(value = "/detailBySubscriptionId") |
| | | public R<Order> detailBySubscriptionId(@RequestParam("subscriptionId")String subscriptionId) { |
| | | // 通过subscriptionId查询订单详情 |
| | | Order order = orderService.getOne(Wrappers.lambdaQuery(Order.class) |
| | | .eq(Order::getSubscriptionId, subscriptionId) |
| | | .last("LIMIT 1")); |
| | | return R.ok(order); |
| | | } |
| | | |
| | | @ApiOperation(value = "订单列表-增加打印次数", tags = {"后台-订单管理"}) |
| | | @PostMapping(value = "/count") |
| | |
| | | import javax.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | public Page<Order> queryPage(OrderQueryRequest orderQueryRequest) { |
| | | Page<Order> page = Page.of(orderQueryRequest.getPageNum(), orderQueryRequest.getPageSize()); |
| | | // 基础查询 |
| | | |
| | | Page<Order> pageList = baseMapper.queryPage(orderQueryRequest, page); |
| | | |
| | | List<Order> records = pageList.getRecords(); |
| | | if(CollectionUtils.isEmpty(records)){ |
| | | return pageList; |
| | | } |
| | | List<String> orderIds = records.stream().map(Order::getId).collect(Collectors.toList()); |
| | | |
| | | List<ChangeDispatch> list = changeDispatchService.lambdaQuery() |
| | | .eq(ChangeDispatch::getIsDelete, 0) |
| | | .orderByDesc(ChangeDispatch::getCreateTime).list(); |
| | | .orderByDesc(ChangeDispatch::getCreateTime) |
| | | .in(ChangeDispatch::getOrderId, orderIds).list(); |
| | | for (Order order : pageList.getRecords()) { |
| | | ChangeDispatch changeDispatch = list.stream().filter(e -> e.getOrderId().equals(order.getId())) |
| | | .findFirst().orElse(null); |
| | |
| | | @Override |
| | | public Page<Order> orderListWorker(Integer userId, Integer state,String searchValues, Integer pageNum, Integer pageSize) { |
| | | Page<Order> orderPage = baseMapper.orderListWorker(userId, state, searchValues, Page.of(pageNum, pageSize)); |
| | | return baseMapper.orderListWorker(userId, state,searchValues, Page.of(pageNum, pageSize)); |
| | | return orderPage; |
| | | } |
| | | |
| | | @Override |
| | |
| | | <result column="is_delete" property="isDelete"/> |
| | | <result column="fake" property="fake"/> |
| | | <result column="apply_reason" property="applyReason"/> |
| | | <result column="virtual_number" property="virtualNumber"/> |
| | | <result column="is_open_virtual_number" property="isOpenVirtualNumber"/> |
| | | <result column="phone_recording" property="phoneRecording"/> |
| | | </resultMap> |
| | | |
| | | |
| | |
| | | o.address, |
| | | o.top_sort, |
| | | o.cancel_reason, |
| | | |
| | | o.remark, |
| | | o.package_info, |
| | | o.msg_count, |
| | |
| | | o.fake, |
| | | o.city_code, |
| | | o.is_reinvest, |
| | | o.virtual_number, |
| | | o.is_open_virtual_number, |
| | | o.phone_recording, |
| | | o.is_evaluate |
| | | from t_order o |
| | | <where> |
| | |
| | | |
| | | import cn.afterturn.easypoi.cache.manager.IFileLoader; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.admin.api.feignClient.AdminClient; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | |
| | | import com.ruoyi.system.api.model.LoginUserInfo; |
| | | import com.ruoyi.worker.entity.IamConfig; |
| | | import com.ruoyi.worker.entity.MasterWorker; |
| | | import com.ruoyi.worker.entity.OrderRecording; |
| | | import com.ruoyi.worker.entity.RecoveryServe; |
| | | import com.ruoyi.worker.service.IamConfigService; |
| | | import com.ruoyi.worker.service.MasterWorkerService; |
| | | import com.ruoyi.worker.service.OrderRecordingService; |
| | | import com.ruoyi.worker.service.RecoveryServeService; |
| | | import com.ruoyi.worker.vo.ServeCoordinate; |
| | | import com.ruoyi.worker.voice.util.AXBUtil; |
| | |
| | | |
| | | import lombok.Synchronized; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | |
| | | private RedisService redisService; |
| | | @Resource |
| | | private IamConfigService iamConfigService; |
| | | @Resource |
| | | private OrderRecordingService orderRecordingService; |
| | | |
| | | /** |
| | | * linux服务器保存订单轨迹文件夹 |
| | |
| | | if(Objects.nonNull(data)){ |
| | | Order orderInfo = data.getOrderInfo(); |
| | | if (Objects.nonNull(orderInfo) && Objects.nonNull(orderInfo.getIsOpenVirtualNumber()) && orderInfo.getIsOpenVirtualNumber() == 1){ |
| | | String recordDomain = orderInfo.getRecordDomain(); |
| | | String recordObjectName = orderInfo.getRecordObjectName(); |
| | | String audioUrl = AXBUtil.axbGetRecordDownloadLink(iamConfig.getAppKey(), iamConfig.getAppSecret(),recordDomain, recordObjectName); |
| | | orderInfo.setPhoneRecording(audioUrl); |
| | | // 设置音频 |
| | | orderClient.updatePhoneRecording(orderInfo.getId(), audioUrl); |
| | | // List<OrderRecording> orderRecordingList = orderRecordingService.list(Wrappers.lambdaQuery(OrderRecording.class) |
| | | // .eq(OrderRecording::getOrderId, orderInfo.getId())); |
| | | // if(!CollectionUtils.isEmpty(orderRecordingList)){ |
| | | // for (OrderRecording orderRecording : orderRecordingList) { |
| | | // String recordDomain = orderRecording.getRecordDomain(); |
| | | // String recordObjectName = orderRecording.getRecordObjectName(); |
| | | // String audioUrl = AXBUtil.axbGetRecordDownloadLink(iamConfig.getAppKey(), iamConfig.getAppSecret(),recordDomain, recordObjectName); |
| | | // orderRecording.setPhoneRecording(audioUrl); |
| | | //// // 设置音频 |
| | | //// orderClient.updatePhoneRecording(orderInfo.getId(), audioUrl); |
| | | // } |
| | | // orderRecordingService.updateBatchById(orderRecordingList); |
| | | // } |
| | | // 虚拟号码解绑 |
| | | AXBUtil.axbUnbindNumber(iamConfig.getAppKey(), iamConfig.getAppSecret(),subscriptionId, iamConfig.getVirtualNumber()); |
| | | } |
| New file |
| | |
| | | package com.ruoyi.worker.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.ruoyi.common.core.domain.BaseEntity; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Getter; |
| | | import lombok.Setter; |
| | | |
| | | /** |
| | | * <p> |
| | | * 通话录音 |
| | | * </p> |
| | | * |
| | | * @author hjl |
| | | * @since 2024-05-29 |
| | | */ |
| | | @Getter |
| | | @Setter |
| | | @TableName("t_order_recording") |
| | | @ApiModel(value = "OrderRecording对象", description = "通话录音") |
| | | public class OrderRecording extends BaseEntity { |
| | | |
| | | @TableId(value = "id",type = IdType.AUTO) |
| | | private Integer id; |
| | | @ApiModelProperty("订单id") |
| | | @TableField("order_id") |
| | | private String orderId; |
| | | @ApiModelProperty("录音文件存储的服务器域名") |
| | | @TableField("record_domain") |
| | | private String recordDomain; |
| | | @ApiModelProperty("录音文件名") |
| | | @TableField("record_object_name") |
| | | private String recordObjectName; |
| | | @ApiModelProperty("录音内容") |
| | | @TableField("phone_recording") |
| | | private String phoneRecording; |
| | | |
| | | } |
| New file |
| | |
| | | package com.ruoyi.worker.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.worker.entity.OrderRecording; |
| | | |
| | | /** |
| | | * <p> |
| | | * 通话录音 Mapper 接口 |
| | | * </p> |
| | | * |
| | | * @author hjl |
| | | * @since 2024-05-29 |
| | | */ |
| | | public interface OrderRecordingMapper extends BaseMapper<OrderRecording> { |
| | | |
| | | } |
| New file |
| | |
| | | package com.ruoyi.worker.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.worker.entity.OrderRecording; |
| | | |
| | | /** |
| | | * <p> |
| | | * 通话录音 服务类 |
| | | * </p> |
| | | * |
| | | * @author hjl |
| | | * @since 2024-05-29 |
| | | */ |
| | | public interface OrderRecordingService extends IService<OrderRecording> { |
| | | |
| | | } |
| | |
| | | orderListVO.setLatitude(order.getLatitude()); |
| | | orderListVO.setTopSort(topSort); |
| | | orderListVO.setFake(order.getFake()==null?0:order.getFake()); |
| | | orderListVO.setVirtualNumber(order.getVirtualNumber()); |
| | | orderListVO.setIsOpenVirtualNumber(order.getIsOpenVirtualNumber()); |
| | | orderListVO.setPhoneRecording(order.getPhoneRecording()); |
| | | OrderNotHandleVO vo = new OrderNotHandleVO(distance, orderListVO); |
| | | list.add(vo); |
| | | } |
| New file |
| | |
| | | package com.ruoyi.worker.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.worker.entity.OrderRecording; |
| | | import com.ruoyi.worker.mapper.OrderRecordingMapper; |
| | | import com.ruoyi.worker.service.OrderRecordingService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * <p> |
| | | * 通话录音 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author hjl |
| | | * @since 2024-05-29 |
| | | */ |
| | | @Service |
| | | public class OrderRecordingServiceImpl extends ServiceImpl<OrderRecordingMapper, OrderRecording> implements OrderRecordingService { |
| | | |
| | | } |
| | |
| | | @TableField("top_sort") |
| | | private Integer topSort; |
| | | |
| | | @ApiModelProperty("虚拟号码") |
| | | private String virtualNumber; |
| | | @ApiModelProperty("电话录音") |
| | | private String phoneRecording; |
| | | @ApiModelProperty("是否启用虚拟号 1=是 0=否") |
| | | private Integer isOpenVirtualNumber; |
| | | |
| | | public String getOrderIdStr() { |
| | | return String.valueOf(getOrderId()); |
| | | } |