Pu Zhibing
4 天以前 8522e469e00e1cf6c0410165b0f76c806c13ca83
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -16,25 +16,30 @@
import com.stylefeng.guns.modular.system.dao.RegionMapper;
import com.stylefeng.guns.modular.system.dao.SysReformistMapper;
import com.stylefeng.guns.modular.system.model.AdditionalFee;
import com.stylefeng.guns.modular.system.model.Company;
import com.stylefeng.guns.modular.system.model.Driver;
import com.stylefeng.guns.modular.system.model.OrderPosition;
import com.stylefeng.guns.modular.system.service.IAdditionalFeeService;
import com.stylefeng.guns.modular.system.service.IDriverService;
import com.stylefeng.guns.modular.system.service.IOpenCityService;
import com.stylefeng.guns.modular.system.service.IOrderService;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.qianyuntong.EmployeeUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.AddAccountInfoRequest;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.ModifyTravelItineraryRequest;
import com.stylefeng.guns.modular.system.util.zhenglian.ZhengLianUtil;
import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo;
import com.stylefeng.guns.modular.system.util.zhenglian.model.ZLUserInfo;
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
import com.stylefeng.guns.modular.system.warpper.OrderListWarpper;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.*;
/**
@@ -97,10 +102,13 @@
    @Autowired
    private IAdditionalFeeService additionalFeeService;
    
    @Autowired
    private RedissonClient redissonClient;
//    @Autowired
//    private RedissonClient redissonClient;
    @Autowired
    private IOpenCityService openCityService;
    @Autowired
    private ICompanyService companyService;
@@ -118,6 +126,44 @@
     */
    @Override
    public List<Map<String, Object>> queryOrderList(Integer state, Integer pageNum, Integer size, Integer uid) throws Exception {
        Driver driver = driverService.selectById(uid);
        //获取证联数据
        if(null == driver.getCustId() || 0 == driver.getAccOpenFlag()){
            TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo();
            tradeTerminalInfo.setTerminal("1");
            InetAddress inetAddress = InetAddress.getLocalHost();
            String ip = inetAddress.getHostAddress();
            tradeTerminalInfo.setIp(ip);
            NetworkInterface networkInterface = NetworkInterface.getByInetAddress(inetAddress);
            byte[] mac = networkInterface.getHardwareAddress();
            StringBuilder macAddress = new StringBuilder();
            for (int i = 0; i < mac.length; i++) {
                macAddress.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
            }
            tradeTerminalInfo.setMac(macAddress.toString());
            ZLUserInfo userInfo = ZhengLianUtil.getUserInfo(driver.getEmpId().toString(), tradeTerminalInfo);
            if(null != userInfo){
                driver.setCustId(userInfo.getCustId());
                driver.setAccOpenFlag(userInfo.getAccOpenFlag());
                driverService.updateById(driver);
            }
        }
        //同步到中台
        if(null != driver.getAccOpenFlag() && 1 == driver.getAccOpenFlag() && 0 == driver.getIsSynchronous()){
            AddAccountInfoRequest request = new AddAccountInfoRequest();
            request.setCustId(driver.getCustId());
            request.setAccountNo(driver.getEmpId().toString());
            request.setAccountName(driver.getName());
            request.setMobile(driver.getPhone());
            Integer status = EmployeeUtil.addAccountInfo(request);
            if(0 == status){
                driver.setIsSynchronous(1);
                driverService.updateById(driver);
            }
        }
        Integer page = pageNum;
        pageNum = (pageNum - 1) * size;
        List<Map<String, Object>> datas = new ArrayList<>();
@@ -511,8 +557,8 @@
    public ResultUtil grabOrder(Integer orderId, Integer orderType, Integer uid) throws Exception {
        //专车和出租是批量下单,所以这里需要将两种类型的抢单操作通过一个锁来一起控制
        if(1 == orderType || 2 == orderType){
            RLock lock = redissonClient.getLock("grabOrder:" + orderId);
            if(!lock.tryLock()){
            Boolean lock = redisTemplate.opsForValue().setIfAbsent("grabOrder:" + orderId, "1");
            if(!lock){
                return ResultUtil.error("抢单失败,请稍后重试");
            }
            try {
@@ -525,7 +571,7 @@
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                lock.unlock();
                redisTemplate.delete("grabOrder:" + orderId);
            }
        }
        switch (orderType){
@@ -1183,6 +1229,21 @@
                orderPrivateCar.setPayMoney(orderPrivateCar.getOrderMoney());
                orderPrivateCar.setState(8);
                orderPrivateCarService.updateById(orderPrivateCar);
                Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
                Company company1 = companyService.selectById(driver.getCompanyId());
                //中台修改订单状态
                ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest();
                request1.setOrderId(orderPrivateCar.getTravelId());
                request1.setStatus(orderPrivateCar.getState());
                request1.setDriverId(driver.getEmpId().toString());
                if(2 == orderPrivateCar.getPromotion()){
                    Driver driver1 = driverService.selectById(orderPrivateCar.getPromotionDriverId());
                    request1.setPromoterId(driver1.getEmpId().toString());
                }
                request1.setSupplierShopId(company1.getEnterCode());
                OrderUtil.modifyTravelItinerary(request1);
                userId = orderPrivateCar.getUserId();
                driverId = orderPrivateCar.getDriverId();
                state = orderPrivateCar.getState();
@@ -1212,6 +1273,21 @@
                orderTaxi.setPayMoney(orderTaxi.getOrderMoney());
                orderTaxi.setState(8);
                orderTaxiService.updateById(orderTaxi);
                Driver driver1 = driverService.selectById(orderTaxi.getDriverId());
                Company company = companyService.selectById(driver1.getCompanyId());
                //中台修改订单状态
                ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
                request.setOrderId(orderTaxi.getTravelId());
                request.setStatus(orderTaxi.getState());
                request.setDriverId(driver1.getEmpId().toString());
                if(2 == orderTaxi.getPromotion()){
                    Driver driver2 = driverService.selectById(orderTaxi.getPromotionDriverId());
                    request.setPromoterId(driver2.getEmpId().toString());
                }
                request.setSupplierShopId(company.getEnterCode());
                OrderUtil.modifyTravelItinerary(request);
                userId = orderTaxi.getUserId();
                driverId = orderTaxi.getDriverId();
                state = orderTaxi.getState();