From f6965e7733623222cef5165d5007d9c038d737b3 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 22 十月 2025 15:12:26 +0800
Subject: [PATCH] 添加订单虚拟号
---
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java | 191 +++++++++++++++++++++++++++++++----------------
1 files changed, 124 insertions(+), 67 deletions(-)
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java
index 3e0cbd2..a3c94e1 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java
@@ -14,13 +14,16 @@
import com.ruoyi.admin.service.*;
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.voice.util.AXBUtil;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.GaoDeMapUtil;
@@ -61,6 +64,7 @@
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@@ -100,7 +104,15 @@
private ExchangeDispatchClient dispatchClient;
@Resource
private TokenService tokenService;
+ @Resource
+ private RecoveryClassifyService recoveryClassifyService;
+ @Resource
+ private FranchiseeService franchiseeService;
+ @Resource
+ private PrivateNumberUtil privateNumberUtil;
+ @Autowired
+ private IamConfigService iamConfigService;
/**
* 雪花算法类
*/
@@ -144,11 +156,6 @@
}
return R.ok(orderDetailVO);
}
- @Resource
- private RecoveryClassifyService recoveryClassifyService;
-
- @Resource
- private FranchiseeService franchiseeService;
/**
* 订单列表
*
@@ -350,9 +357,10 @@
}else {
order.setOrderMoney(one.getRecoveryPrice());
}
- Boolean data = orderClient.save(order).getData();
- if (null == data) {
- return R.fail(orderClient.save(order).getMsg());
+ R<String> saveResult = orderClient.save(order);
+ String orderId = saveResult.getData();
+ if (!StringUtils.hasLength(orderId)) {
+ return R.fail(saveResult.getMsg());
}
System.out.println("服务人员id:" + order.getServerId());
ChannelHandlerContext context = NettyChannelMap.getData(String.valueOf(order.getServerId()));
@@ -361,7 +369,31 @@
System.out.println("服务端发送消息到: " + order.getServerId());
NettyWebSocketController.sendMsgToClient(context, "您有一条新的订单,请注意查收!");
}
- return data ? R.ok() : R.fail();
+
+ if (null != order.getServerId()) {
+ MasterWorker masterWorker = masterWorkerService.lambdaQuery()
+ .eq(MasterWorker::getId, order.getServerId())
+ .eq(MasterWorker::getIsDelete, 0).one();
+ try{
+ // 虚拟号码 师傅号码备案
+ String fileName = privateNumberUtil.uploadNumberFile(masterWorker.getProfilePicture()).getData();
+ R r = privateNumberUtil.addANumber(masterWorker.getPhone(), masterWorker.getRealName(), masterWorker.getIdNumber(), fileName);
+ }catch (Exception e){
+ throw new GlobalException("虚拟号码绑定异常!");
+ }
+ // 虚拟号码配置
+ 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());
+ // 存储绑定后的唯一标识
+ JSONObject jsonObject = JSONObject.parseObject(result);
+ String subscriptionId = jsonObject.getString("subscriptionId");
+ orderClient.updateSubscriptionId(orderId, subscriptionId,iamConfig.getVirtualNumber());
+ }
+ }
+
+ return StringUtils.hasLength(orderId) ? R.ok() : R.fail();
}
@@ -394,6 +426,17 @@
.eq(MasterWorker::getIsDelete, 0).one();
order.setServerName(masterWorker.getRealName());
order.setServerPhone(masterWorker.getPhone());
+
+ 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());
+ // 存储绑定后的唯一标识
+ JSONObject jsonObject = JSONObject.parseObject(result);
+ String subscriptionId = jsonObject.getString("subscriptionId");
+ orderClient.updateSubscriptionId(orderData.getId(), subscriptionId,iamConfig.getVirtualNumber());
+ }
+
} else {
// 待派单状态
order.setState(Constants.ZERO);
@@ -429,70 +472,70 @@
@RequiresPermissions("order_reassignment")
@ApiOperation(value = "订单列表-订单派单/改派", tags = {"后台-订单管理"})
@PostMapping(value = "/reassignment")
-
@Transactional(rollbackFor = Exception.class)
public R<String> reassignment(@RequestBody OrderReasinDto orderReasinDto) {
-// String[] split = orderIds.split(",");
for (ReassinDto orderId : orderReasinDto.getReassinDtos()) {
-
- MasterWorker masterWorker = masterWorkerService.lambdaQuery()
- .eq(MasterWorker::getId, orderReasinDto.getWorkerId())
- .eq(MasterWorker::getIsDelete, 0).one();
- Order item = orderClient.detail(orderId.getOrderId()).getData();
- Order order = orderClient.exchangeOrder(orderId.getType(), orderId.getOrderId(), orderReasinDto.getWorkerId(),
- masterWorker.getRealName(), masterWorker.getPhone()).getData();
- // 订单派单
- boolean result = true;
- if (Constants.TWO.equals(orderId.getType())) {
- orderClient.updateArrivalTime(order.getId(),orderReasinDto.getArriveTime());
-
- if (order.getState().equals(Constants.SIX) || order.getState().equals(Constants.THREE)) {
- orderClient.updateState(order.getId(), 7);
-
- //如果是待改派,将上门时间设置为最新的,并且更新再投原因
- if (order.getState().equals(Constants.SIX)){
- dispatchClient.changeReason(order.getId(), "");
+ 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);
+ }catch (Exception e){
+ throw new GlobalException("虚拟号码绑定异常!");
+ }
+ // 虚拟号码配置
+ IamConfig iamConfig = iamConfigService.getById(1);
+ // 订单派单
+ if (Constants.TWO.equals(orderId.getType())) {
+ orderClient.updateArrivalTime(order.getId(),orderReasinDto.getArriveTime());
+ if (order.getState().equals(Constants.SIX) || order.getState().equals(Constants.THREE)) {
+ orderClient.updateState(order.getId(), 7);
+ //如果是待改派,将上门时间设置为最新的,并且更新再投原因
+ if (order.getState().equals(Constants.SIX)){
+ dispatchClient.changeReason(order.getId(), "");
+ }
+ }
+ // 订单状态为 待完工时,需要更改状态 待上门且清空师傅到达预约点时间
+ if (order.getState().equals(Constants.TWO)) {
+ orderClient.updateStateAndArrivalTime(orderId.getOrderId(), Constants.ONE);
}
+ if(Objects.nonNull(order.getIsOpenVirtualNumber()) && order.getIsOpenVirtualNumber() == 1){
+ if(StringUtils.hasLength(order.getSubscriptionId())){
+ // 虚拟号码更换
+ 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());
+ // 存储绑定后的唯一标识
+ JSONObject jsonObject = JSONObject.parseObject(result);
+ String subscriptionId = jsonObject.getString("subscriptionId");
+ orderClient.updateSubscriptionId(order.getId(), subscriptionId,iamConfig.getVirtualNumber());
+ }
+ }
+
+
+ }else {
+ orderClient.updateArrivalTime(order.getId(),orderReasinDto.getArriveTime());
+ 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());
+ // 存储绑定后的唯一标识
+ JSONObject jsonObject = JSONObject.parseObject(result);
+ String subscriptionId = jsonObject.getString("subscriptionId");
+ orderClient.updateSubscriptionId(order.getId(), subscriptionId,iamConfig.getVirtualNumber());
+ }
}
- // 订单状态为 待完工时,需要更改状态 待上门且清空师傅到达预约点时间
- if (order.getState().equals(Constants.TWO)) {
- orderClient.updateStateAndArrivalTime(orderId.getOrderId(), Constants.ONE);
+ ChannelHandlerContext context = NettyChannelMap.getData(String.valueOf(orderReasinDto.getWorkerId()));
+ if (null != context) {
+ NettyWebSocketController.sendMsgToClient(context, "您有一条新的订单,请注意查收!");
}
-
-
-
-
- // 生成改派信息
-// ChangeDispatch changeDispatch = new ChangeDispatch();
-// changeDispatch.setWorkerId(item.getServerId());
-// changeDispatch.setWorkerName(item.getServerName());
-// changeDispatch.setApplyReason(orderReasinDto.getApplyReason());
-// changeDispatch.setApplyTime(new Date());
-// changeDispatch.setState(Constants.ONE);
-// changeDispatch.setOrderId(orderId.getOrderId());
-// changeDispatch.setOrderNumber(item.getOrderNumber());
-// if (null != item.getUserId()) {
-// changeDispatch.setUserId(item.getUserId());
-// }
-// changeDispatch.setUserName(item.getReservationName());
-// changeDispatch.setIsDelete(Constants.ZERO);
-// result = dispatchClient.saveRecord(changeDispatch).getData();
- }else {
- orderClient.updateArrivalTime(order.getId(),orderReasinDto.getArriveTime());
- orderClient.updateState(order.getId(), 7);
}
- ChannelHandlerContext context = NettyChannelMap.getData(String.valueOf(orderReasinDto.getWorkerId()));
- if (null != context) {
- NettyWebSocketController.sendMsgToClient(context, "您有一条新的订单,请注意查收!");
- }
-// try {
-// WebSocketServer.sendInfo("您有一条新的订单,请注意查收!", String.valueOf(workerId));
-// } catch (IOException e) {
-// return R.fail("订单推送失败!");
-// }
- }
-
return R.ok() ;
}
@@ -544,8 +587,10 @@
}
orderQueryRequest.setServIds(servIds);
Integer franchiseeId = loginUser.getSysUser().getFranchiseeId();
+ Integer isDisplay = 0;
if (franchiseeId!=null) {
Franchisee byId = franchiseeService.getById(franchiseeId);
+ isDisplay = byId.getIsDisplay();
String[] siteIds = byId.getSiteIds().split(",");
orderQueryRequest.setSiteIds(siteIds);
if (loginUser.getIsFranchisee() && siteIds.length == 0) {
@@ -562,6 +607,20 @@
R<List<Order>> result = orderClient.excelExport(orderQueryRequest);
+ if(franchiseeId!=null){
+ if(isDisplay == 0){
+ for (Order datum : result.getData()) {
+ if(StringUtils.hasLength(datum.getServerName())){
+ datum.setServerName(datum.getServerName().charAt(0)+"***");
+ }
+ if(StringUtils.hasLength(datum.getServerPhone())){
+ datum.setServerPhone(around(datum.getServerPhone(), 3, 4));
+ }
+ }
+ return orderService.excelExport(result.getData(), response);
+ }
+ return orderService.excelExport(result.getData(), response);
+ }
for (Order datum : result.getData()) {
if(StringUtils.hasLength(datum.getServerName()) && !"admin".equals(loginUser.getSysUser().getAccount())){
datum.setServerName(datum.getServerName().charAt(0)+"***");
@@ -607,8 +666,6 @@
/**
* 订单列表-excel导出
*
- * @param name 师傅姓名
- * @param phone 师傅电话
*/
@RequiresPermissions("order_count")
@ApiOperation(value = "订单统计", tags = {"后台-订单管理"})
--
Gitblit v1.7.1