8.3
luodangjia
2024-08-03 67157345fe1878681e39ec186ef37ff6b3b5c1fc
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java
@@ -2,17 +2,16 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.admin.entity.MasterWorker;
import com.ruoyi.admin.entity.RecoveryServe;
import com.ruoyi.admin.entity.Site;
import com.ruoyi.admin.entity.*;
import com.ruoyi.admin.netty.NettyChannelMap;
import com.ruoyi.admin.netty.NettyWebSocketController;
import com.ruoyi.admin.service.MasterWorkerService;
import com.ruoyi.admin.service.OrderService;
import com.ruoyi.admin.service.RecoveryServeService;
import com.ruoyi.admin.service.SiteService;
import com.ruoyi.admin.service.*;
import com.ruoyi.admin.utils.AddressDto;
import com.ruoyi.admin.utils.DescribeInstances;
import com.ruoyi.admin.utils.OcrBase;
import com.ruoyi.admin.vo.OrderDetailVO;
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.domain.Result;
import com.ruoyi.common.core.utils.GaoDeMapUtil;
@@ -22,15 +21,22 @@
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.api.entity.*;
import com.ruoyi.order.api.entity.ChangeDispatch;
import com.ruoyi.order.api.entity.Order;
import com.ruoyi.order.api.feignClient.ExchangeDispatchClient;
import com.ruoyi.order.api.feignClient.OrderClient;
import com.ruoyi.order.api.request.OrderCountDataRequest;
import com.ruoyi.system.api.model.LoginUser;
import com.tencentcloudapi.ocr.v20181119.models.BusinessCardOCRResponse;
import com.tencentcloudapi.ocr.v20181119.models.ClassifyDetectOCRResponse;
import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Response;
import com.tencentcloudapi.ocr.v20181119.models.WaybillOCRResponse;
import io.netty.channel.ChannelHandlerContext;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.Get;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@@ -39,6 +45,7 @@
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * <p>
@@ -105,6 +112,9 @@
        // 独立orderService
        return R.ok(orderService.orderListDetail(id));
    }
    @Resource
    private RecoveryClassifyService recoveryClassifyService;
    /**
     * 订单列表
@@ -126,6 +136,12 @@
                orderQueryRequest.getCityList().addAll(loginUser.getCityList());
            }
        }
        List<Integer> servIds = new ArrayList<>();
        if (orderQueryRequest.getClassNameId()!=null){
            List<Integer> classIds = recoveryClassifyService.lambdaQuery().eq(RecoveryClassify::getId, orderQueryRequest.getClassNameId()).list().stream().map(RecoveryClassify::getId).collect(Collectors.toList());
            servIds = recoveryServeService.lambdaQuery().eq(BaseEntity::getIsDelete,0).in(RecoveryServe::getClassifyId, classIds).list().stream().map(RecoveryServe::getId).collect(Collectors.toList());
        }
        orderQueryRequest.setServIds(servIds);
        Page<Order> data = orderClient.queryPage(orderQueryRequest).getData();
        if (null != data) {
            for (Order record : data.getRecords()) {
@@ -138,7 +154,9 @@
                    record.setServerName(masterWorker.getRealName());
                    record.setServerPhone(masterWorker.getPhone());
                }
                if (record.getAddress()!=null) {
                record.setReservationAddress(record.getReservationAddress() + record.getAddress());
                }
            }
        }
        return R.ok(data);
@@ -162,6 +180,13 @@
                orderQueryRequest.getCityList().addAll(loginUser.getCityList());
            }
        }
        List<Integer> servIds = new ArrayList<>();
        if (orderQueryRequest.getClassNameId()!=null){
            List<Integer> classIds = recoveryClassifyService.lambdaQuery().eq(RecoveryClassify::getId, orderQueryRequest.getClassNameId()).list().stream().map(RecoveryClassify::getId).collect(Collectors.toList());
            servIds = recoveryServeService.lambdaQuery().eq(BaseEntity::getIsDelete,0).in(RecoveryServe::getClassifyId, classIds).list().stream().map(RecoveryServe::getId).collect(Collectors.toList());
        }
        orderQueryRequest.setServIds(servIds);
        return R.ok(orderClient.orderPageCount(orderQueryRequest).getData());
    }
@@ -180,6 +205,9 @@
        return R.ok(orderClient.detail(id).getData());
    }
    @Resource
    private RecoveryServePriceService recoveryServePriceService;
    /**
     * 新增订单
     * 后台订单为指定订单,默认为待上门状态
@@ -216,9 +244,15 @@
        RecoveryServe recoveryServe = recoveryServeService.lambdaQuery()
                .eq(RecoveryServe::getId, order.getServeId())
                .eq(RecoveryServe::getIsDelete, 0).one();
        order.setServeName(recoveryServe.getServeName());
        order.setServePrice(recoveryServe.getDefaultPrice());
        RecoveryServePrice one = recoveryServePriceService.lambdaQuery().eq(RecoveryServePrice::getCity, order.getCityCode()).eq(RecoveryServePrice::getRecoveryServeId, order.getServeId()).eq(BaseEntity::getIsDelete, 0).one();
        if (one==null) {
        order.setOrderMoney(recoveryServe.getDefaultPrice());
        }else {
            order.setOrderMoney(one.getRecoveryPrice());
        }
        Boolean data = orderClient.save(order).getData();
        if (null == data) {
            return R.fail(orderClient.save(order).getMsg());
@@ -233,6 +267,52 @@
        return data ? R.ok() : R.fail();
    }
    @ApiOperation(value = "订单列表-编辑", tags = {"后台-订单管理"})
    @PostMapping(value = "/edit")
    public R<String> edit(@RequestBody OrderRequest order) {
        // 站点信息
        Site site = siteService.lambdaQuery()
                .eq(Site::getId, order.getSiteId())
                .eq(Site::getIsDelete, 0).one();
        order.setSiteName(site.getSiteName());
        // 师傅信息
        if (null != order.getServerId()) {
            MasterWorker masterWorker = masterWorkerService.lambdaQuery()
                    .eq(MasterWorker::getId, order.getServerId())
                    .eq(MasterWorker::getIsDelete, 0).one();
            order.setServerName(masterWorker.getRealName());
            order.setServerPhone(masterWorker.getPhone());
        } else {
            // 待派单状态
            order.setState(Constants.ZERO);
        }
        RecoveryServe recoveryServe = recoveryServeService.lambdaQuery()
                .eq(RecoveryServe::getId, order.getServeId())
                .eq(RecoveryServe::getIsDelete, 0).one();
        RecoveryServePrice one = recoveryServePriceService.lambdaQuery().eq(RecoveryServePrice::getCity, order.getCityCode()).eq(RecoveryServePrice::getRecoveryServeId, order.getServeId()).eq(BaseEntity::getIsDelete, 0).last("limit 1").one();
        if (one==null) {
            order.setOrderMoney(recoveryServe.getDefaultPrice());
        }else {
            order.setOrderMoney(one.getRecoveryPrice());
        }
        // 后台订单
        order.setType(Constants.ONE);
        Boolean data = orderClient.edit(order).getData();
        System.out.println("服务人员id:" + order.getServerId());
        ChannelHandlerContext context = NettyChannelMap.getData(String.valueOf(order.getServerId()));
        System.out.println("socket连接信息:" + context);
        if (null != context) {
            System.out.println("服务端发送消息到: " + order.getServerId());
            NettyWebSocketController.sendMsgToClient(context, "您有一条新的订单,请注意查收!");
        }
        return data ? R.ok() : R.fail();
    }
    /**
     * 订单派单/改派
     *
@@ -309,6 +389,8 @@
        return R.ok(orderClient.batchDelete(ids).getData());
    }
    /**
     * 订单列表-excel导出
     *
@@ -335,6 +417,12 @@
        return orderClient.oldData(index, pageNum, pageSize);
    }
    @ApiOperation(value = "ocr识别", tags = {"后台-首页"})
    @PostMapping (value = "/ocr")
    public R<AddressDto> ocr(OcrBase ocrBase) {
        return R.ok(DescribeInstances.orcr(ocrBase.getBase()));
    }
    /**
     * 订单列表-excel导出
     *