Pu Zhibing
4 天以前 79eff526c529e9389d518edb516dac37119ce3aa
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -20,13 +20,14 @@
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper;
import com.stylefeng.guns.modular.specialTrain.dao.OrderPrivateCarMapper;
import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
import com.stylefeng.guns.modular.system.dao.PhoneMapper;
import com.stylefeng.guns.modular.system.dao.RegionMapper;
import com.stylefeng.guns.modular.system.dao.SysIntegralMapper;
import com.stylefeng.guns.modular.system.dao.UserInfoMapper;
import com.stylefeng.guns.modular.system.dao.*;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.service.impl.CarServiceImpl;
import com.stylefeng.guns.modular.system.service.impl.CompanyServiceImpl;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.ModifyTravelItineraryRequest;
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
import com.stylefeng.guns.modular.system.warpper.MerchantCouponListWarpper;
import com.stylefeng.guns.modular.taxi.dao.OrderTaxiMapper;
@@ -34,6 +35,7 @@
import org.apache.commons.lang.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
@@ -41,10 +43,8 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@@ -76,6 +76,8 @@
    @Resource
    private UserInfoMapper userInfoMapper;
    @Autowired
    private IOpenCityService openCityService;
    @Autowired
    private DateUtil dateUtil;
@@ -109,55 +111,61 @@
    @Resource
    private OrderPrivateCarMapper orderPrivateCarMapper;
    @Resource
    private OrderTaxiMapper orderTaxiMapper;
    @Resource
    private PhoneMapper phoneMapper;
    @Autowired
    private IOrderPositionService orderPositionService;
    @Autowired
    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
    @Resource
    private MongoTemplate mongoTemplate;
    @Autowired
    private IOrderCancelService orderCancelService;
    @Autowired
    private GeodesyUtil geodesyUtil;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private IOrderAdditionalFeeService orderAdditionalFeeService;
    
    @Autowired
    private RedisTemplate redisTemplate;
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    @Autowired
    private IMerchantActivityService merchantActivityService;
    @Autowired
    private IMerchantActivitySlaveService merchantActivitySlaveService;
    @Autowired
    private IUserMerchantCouponService userMerchantCouponService;
    @Autowired
    private IMerchantCouponService merchantCouponService;
    @Autowired
    private QrCodeConfiguration qrCodeConfiguration;
    @Value("${filePath}")
    private String filePath;
    @Autowired
    private TDriverPromotionActivityService driverPromotionActivityService;
    @Value("${pushMinistryOfTransport}")
    private boolean pushMinistryOfTransport;
    @Value("${callbackPath}")
    private String callbackPath;
    @Autowired
    private CarModelMapper carModelMapper;
    @Autowired
    private CarServiceImpl carServiceImpl;
    private CompanyServiceImpl companyServiceImpl;
    /**
@@ -236,7 +244,8 @@
        map.put("orderNumber", orderCrossCity.getOrderNum());
        map.put("totalMoney", new BigDecimal(totalMoney).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
        map.put("serverMoney", new BigDecimal(serverMoney).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
        Phone phone = phoneMapper.queryInfo(orderCrossCity.getCompanyId(), 1);
        OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString());
        Phone phone = phoneMapper.queryInfo(openCity.getId(), 1, 1);
        map.put("emergencyCall", null != phone ? phone.getPhone() : "110");
        map.put("orders", JSON.toJSONString(order));
@@ -256,7 +265,12 @@
    @Override
    public ResultUtil process(Integer orderId, Integer state, Double lon, Double lat, String address) throws Exception {
        OrderCrossCity orderCrossCity = this.selectById(orderId);
        if(10 == orderCrossCity.getState()){
            return ResultUtil.error("订单已被取消,不能继续操作");
        }
        UserInfo userInfo = userInfoMapper.selectById(orderCrossCity.getUserId());
        Driver driver = driverService.selectById(orderCrossCity.getDriverId());
        Company company = companyServiceImpl.selectById(driver.getCompanyId());
        switch (state){
            case 3://出发前往预约点
                orderCrossCity.setState(3);
@@ -285,15 +299,32 @@
                orderCrossCity.setGetoffTime(new Date());
                orderCrossCity.setState(8);//跨城直接到待评价
                orderCrossCity.setEndServiceTime(new Date());
                Driver driver = driverService.selectById(orderCrossCity.getDriverId());
                //添加抽成及收入记录
                Map<String, Object> map = incomeService.saveIncome(orderCrossCity.getId(), 3, orderCrossCity.getOrderMoney());
                orderCrossCity.setSplitAllocation(JSON.toJSONString(map));
                //非追缴单才需要记录收入
                if(0 == orderCrossCity.getRecoveryOrder()){
                    //添加收入
                    Double orderMoney = (2 == orderCrossCity.getAbnormal() && 2 == orderCrossCity.getAbnormalStatus() ? orderCrossCity.getResponsibilityMoney().doubleValue() : orderCrossCity.getOrderMoney());
                    Map<String, Object> map = incomeService.saveIncome(orderCrossCity.getId(), 3, orderMoney);
                    orderCrossCity.setSplitAllocation(JSON.toJSONString(map));
                }
                //待审核的异常单修改状态为已关闭
                if(2 == orderCrossCity.getAbnormal() && 1 == orderCrossCity.getAbnormalStatus()){
                    orderCrossCity.setAbnormalStatus(3);
                    orderCrossCity.setResponsibilityMoney(new BigDecimal(orderCrossCity.getOrderMoney()));
                    orderCrossCity.setResponsibilityType(3);
                    orderCrossCity.setAbnormalRemark("乘客已支付订单,申诉已自动关闭");
                }
                //还原座位数
                LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
                lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
                if(1 == orderCrossCity.getTravelMode()){
                    lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
                }else{
                    Car car = carServiceImpl.selectById(driver.getCarId());
                    CarModel carModel = carModelMapper.selectById(car.getCarModelId());
                    lineShiftDriver.setLaveSeat(carModel.getSeat() - 1);
                }
                lineShiftDriver.setLaveSeatNumber(
                        (ToolUtil.isNotEmpty(lineShiftDriver.getLaveSeatNumber()) ? lineShiftDriver.getLaveSeatNumber() + ","  : "") +
                                orderCrossCity.getSeatNumber()
@@ -302,7 +333,7 @@
                //修改司机空闲状态
                List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryWithin30Minutes(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11);
                if(orderCrossCities.size() == 0){
                if(orderCrossCities.size() <= 1){
                    driver = driverService.selectById(orderCrossCity.getDriverId());
                    driver.setState(2);
                    driverService.updateById(driver);
@@ -371,9 +402,25 @@
                pushUtil.removeTask(orderId, 3);//删除定时任务,结束推送数据
                systemNoticeService.addSystemNotice(1, "司机已结束本次行程,谢谢使用", orderCrossCity.getUserId(), 1);
                promotion(orderId);
                break;
        }
        this.updateById(orderCrossCity);
        //中台修改订单状态
        ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest();
        request1.setOrderId(orderCrossCity.getTravelId());
        request1.setStatus(orderCrossCity.getState());
        if (null != orderCrossCity.getDriverId()) {
            request1.setDriverId(driver.getEmpId().toString());
            request1.setSupplierShopId(company.getEnterCode());
        }
        if (2 == orderCrossCity.getPromotion()) {
            Driver driver2 = driverService.selectById(orderCrossCity.getPromotionDriverId());
            request1.setPromoterId(driver2.getEmpId().toString());
        }
        OrderUtil.modifyTravelItinerary(request1);
        // TODO: 2020/6/5 推送状态
        new Thread(new Runnable() {
@@ -386,7 +433,29 @@
        return ResultUtil.success();
    }
    public void promotion(Integer orderId) {
        OrderCrossCity orderCrossCity = this.baseMapper.selectById(orderId);
        UserInfo userInfo = userInfoMapper.selectById(orderCrossCity.getUserId());
        if(orderCrossCity.getPromotionDriverId()!=null ){
            String registAreaCode = userInfo.getRegistAreaCode();
            TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).le("startTime", new Date()).ge("endTime", new Date()).last("AND FIND_IN_SET(" + 3 + ", bizType) limit 1"));
            System.out.println("ddddd"+tDriverPromotionActivity);
            if(tDriverPromotionActivity!=null){
                Double payMoney = orderCrossCity.getPayMoney();
                System.out.println(payMoney);
                BigDecimal bigDecimal = tDriverPromotionActivity.getCommissionRatio().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(payMoney)).setScale(2, RoundingMode.HALF_UP);
                System.out.println(bigDecimal);
                orderCrossCity.setPromotionDriverId(userInfo.getBindDriverId());
                orderCrossCity.setPromotionMoney(bigDecimal);
                orderCrossCity.setPromotionActivityId(tDriverPromotionActivity.getId());
                orderCrossCity.setSuccessTime(new Date());
                this.baseMapper.updateById(orderCrossCity);
            }
        }
    }
    /**
     * 获取订单明细
     * @param orderId
@@ -545,16 +614,16 @@
        orderCrossCity.setIsReassign(1);
        orderCrossCity.setLineShiftDriverId(orderCrossCityWarpper.getLineShiftDriverId());
        //调用高德创建轨迹
        String s = gdFalconUtil.selectTerminal(driver.getPhone());
        String track = gdFalconUtil.createTrack(s);
        orderCrossCity.setTrackId(track);
//        String s = gdFalconUtil.selectTerminal(driver.getPhone());
//        String track = gdFalconUtil.createTrack(s);
//        orderCrossCity.setTrackId(track);
        //调用移动的小号接口
        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
        if(String.valueOf(map.get("code")).equals("200")){
            orderCrossCity.setTelX(map.get("telX"));
            orderCrossCity.setBindId(map.get("bindId"));
        }
//        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
//        if(String.valueOf(map.get("code")).equals("200")){
//            orderCrossCity.setTelX(map.get("telX"));
//            orderCrossCity.setBindId(map.get("bindId"));
//        }
        if(orderCrossCityWarpper.getTravelMode() == 2){//包车
//            orderCrossCity.setSeatNumber(lineShiftDriver.getLaveSeatNumber());
//            orderCrossCity.setPeopleNumber(lineShiftDriver.getLaveSeat());
@@ -857,7 +926,8 @@
                UserInfo userInfo = userInfoMapper.selectById(orderCrossCity.getUserId());
                SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId());
                OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString());
                SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
                userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
                userInfoMapper.updateById(userInfo);
                System.out.println("==============userInfo修改完毕==================="+userInfo);
@@ -915,7 +985,7 @@
        String lat = orderPosition.getLat();
        OrderCrossCity order = this.selectById(orderId);
        if(null == order){
            System.err.println("订单数据异常:" + orderId);
            System.err.println("跨城订单数据异常:" + orderId);
            return false;
        }
@@ -948,18 +1018,8 @@
                orderPosition.setInsertTime(new Date());
                //将数据存储到文件中
                List<OrderPosition> orderPositions = orderPositionService.queryPosition(orderCrossCity.getId(), 3);
                File file = new File(filePath + orderCrossCity.getId() + "_3" + ".txt");
                if(!file.exists()){
                    file.getParentFile().mkdirs();
                    file.createNewFile();
                }
                //写入相应的文件
                PrintWriter out = new PrintWriter(new FileWriter(file));
                orderPositions.add(orderPosition);
                System.err.println("存储新数据:" + JSON.toJSONString(orderPositions));
                out.write(JSON.toJSONString(orderPositions));
                out.flush();
                out.close();
                mongoTemplate.save(orderPositions);
            }
        }
        return false;//上层不需要处理