xuhy
1 天以前 73195f372cdb8d59b74ee86b76fbf4c9595caea1
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java
@@ -14,13 +14,13 @@
import com.ruoyi.admin.service.*;
import com.ruoyi.admin.utils.DescribeInstances;
import com.ruoyi.admin.utils.HttpUtil;
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.utils.PrivateNumberUtil;
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;
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 +61,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 +101,17 @@
    private ExchangeDispatchClient dispatchClient;
    @Resource
    private TokenService tokenService;
    @Resource
    private RecoveryClassifyService recoveryClassifyService;
    @Resource
    private FranchiseeService franchiseeService;
    @Resource
    private PrivateNumberUtil privateNumberUtil;
    @Autowired
    private IamConfigService iamConfigService;
    @Autowired
    private OrderRecordingService orderRecordingService;
    /**
     * 雪花算法类
     */
@@ -144,11 +155,6 @@
        }
        return R.ok(orderDetailVO);
    }
    @Resource
    private RecoveryClassifyService recoveryClassifyService;
    @Resource
    private FranchiseeService franchiseeService;
    /**
     * 订单列表
     *
@@ -350,9 +356,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 +368,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();
            // 虚拟号码配置
            IamConfig iamConfig = iamConfigService.getById(1);
            if(Objects.nonNull(order.getIsOpenVirtualNumber()) && order.getIsOpenVirtualNumber() == 1){
                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("虚拟号码绑定异常!");
                }
                // 虚拟号码绑定
                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.updateSubscriptionId(orderId, subscriptionId,iamConfig.getVirtualNumber());
            }
        }
        return StringUtils.hasLength(orderId) ? R.ok() : R.fail();
    }
@@ -394,6 +425,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(), iamConfig.getVirtualNumber(), 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 +471,76 @@
    @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 order1 = orderClient.detail(orderId.getOrderId()).getData();
            if(Objects.nonNull(order1.getIsOpenVirtualNumber()) && order1.getIsOpenVirtualNumber() == 1){
                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);
            // 订单派单
            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(), iamConfig.getVirtualNumber(), 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(), iamConfig.getVirtualNumber(), 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 +592,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,8 +612,22 @@
        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())){
            if(StringUtils.hasLength(datum.getServerName()) && !"admin".equals(loginUser.getSysUser().getAccount())){
                datum.setServerName(datum.getServerName().charAt(0)+"***");
            }
            if(StringUtils.hasLength(datum.getServerPhone())){
@@ -607,36 +671,23 @@
    /**
     * 订单列表-excel导出
     *
     * @param name  师傅姓名
     * @param phone 师傅电话
     */
    @RequiresPermissions("order_count")
    @ApiOperation(value = "订单统计", tags = {"后台-订单管理"})
    @GetMapping(value = "/orderCount")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "师傅姓名", name = "name", dataType = "String"),
            @ApiImplicitParam(value = "师傅电话", name = "phone", dataType = "String"),
            @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true)
    })
    public R<Page<OrderCountVO>> orderCount(String name, String phone,
                                            @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
                                            @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
    @PostMapping(value = "/orderCount")
    public R<Page<OrderCountVO>> orderCount(@RequestBody OrderCountDataRequest orderCountDataRequest) {
        LoginUser loginUser = tokenService.getLoginUser();
        if (null == loginUser) {
            return R.loginExpire("登录失效!");
        }
        List<String> cityList = new ArrayList<>();
        if (loginUser.getIsFranchisee()) {
            cityList = loginUser.getCityList();
        if (orderCountDataRequest.getCityList().isEmpty()) {
            List<String> cityList = new ArrayList<>();
            if (loginUser.getIsFranchisee()) {
                cityList = loginUser.getCityList();
                orderCountDataRequest.setCityList(cityList);
            }
        }
        // 查询参数
        OrderCountDataRequest orderCountDataRequest = new OrderCountDataRequest();
        orderCountDataRequest.setWorkerName(name);
        orderCountDataRequest.setWorkerPhone(phone);
        orderCountDataRequest.setCityList(cityList);
        orderCountDataRequest.setPageNum(pageNum);
        orderCountDataRequest.setPageSize(pageSize);
        Integer franchiseeId = loginUser.getSysUser().getFranchiseeId();
@@ -991,9 +1042,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()));