package com.stylefeng.guns.modular.system.controller.specialTrain;
|
|
import cn.hutool.system.UserInfo;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.plugins.Page;
|
import com.google.gson.Gson;
|
import com.stylefeng.guns.core.base.controller.BaseController;
|
import com.stylefeng.guns.core.common.constant.factory.PageFactory;
|
import com.stylefeng.guns.core.shiro.ShiroKit;
|
import com.stylefeng.guns.core.util.DateUtil;
|
import com.stylefeng.guns.core.util.ExcelExportUtil;
|
import com.stylefeng.guns.core.util.SinataUtil;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.system.controller.util.PushUtil;
|
import com.stylefeng.guns.modular.system.dao.OrderCancelMapper;
|
import com.stylefeng.guns.modular.system.dao.TSystemPriceMapper;
|
import com.stylefeng.guns.modular.system.model.*;
|
import com.stylefeng.guns.modular.system.service.*;
|
import com.stylefeng.guns.modular.system.util.GoogleMap.FleetEngineUtil;
|
import com.stylefeng.guns.modular.system.util.HttpRequestUtil;
|
import com.stylefeng.guns.modular.system.util.PushURL;
|
import com.stylefeng.guns.modular.system.util.ResultUtil;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.ui.Model;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.*;
|
import java.math.BigDecimal;
|
import java.math.MathContext;
|
import java.math.RoundingMode;
|
import java.util.*;
|
|
/**
|
* 专车订单控制器
|
*
|
* @author fengshuonan
|
* @Date 2020-09-02 17:28:59
|
*/
|
@Controller
|
@RequestMapping("/tOrderPrivateCar")
|
public class TOrderPrivateCarController extends BaseController {
|
|
Logger log = LoggerFactory.getLogger(this.getClass());
|
|
private String PREFIX = "/system/tOrderPrivateCar/";
|
|
@Autowired
|
private ITOrderPrivateCarService tOrderPrivateCarService;
|
|
@Autowired
|
private ITServerCarmodelService tServerCarmodelService;
|
|
@Autowired
|
private ITOrderPositionService tOrderPositionService;
|
|
@Autowired
|
private ITDriverService tDriverService;
|
|
@Resource
|
private OrderCancelMapper orderCancelMapper;
|
|
@Value("${filePath}")
|
private String filePath;
|
|
@Autowired
|
private FleetEngineUtil fleetEngineUtil;
|
|
@Resource
|
private ITUserService userService;
|
|
|
|
|
/**
|
* 跳转到专车订单首页
|
*/
|
@RequestMapping("")
|
public String index(Model model) {
|
//服务专车车型
|
List<TServerCarmodel> carmodelList = tServerCarmodelService.selectList(new EntityWrapper<TServerCarmodel>().eq("type", 1).eq("state", 1));
|
model.addAttribute("carmodelList",carmodelList);
|
return PREFIX + "tOrderPrivateCar.html";
|
}
|
|
/**
|
* 跳转到修改专车订单
|
*/
|
@RequestMapping("/tOrderPrivateCar_orderDetail/{tOrderPrivateCarId}")
|
public String tOrderPrivateCarUpdate(@PathVariable Integer tOrderPrivateCarId, Model model) {
|
Map<String, Object> item = tOrderPrivateCarService.getPrivateCarOrderDetailById(tOrderPrivateCarId);
|
model.addAttribute("item",item);
|
return PREFIX + "tOrderPrivateCar_orderDetail.html";
|
}
|
/**
|
* 跳转到修改专车订单
|
*/
|
@RequestMapping("/toChangeMoney/{tOrderPrivateCarId}")
|
public String toChangeMoney(@PathVariable Integer tOrderPrivateCarId, Model model) {
|
Map<String, Object> item = tOrderPrivateCarService.getPrivateCarOrderDetailById(tOrderPrivateCarId);
|
model.addAttribute("item",item);
|
return PREFIX + "toChangeMoney.html";
|
}
|
/**
|
* 跳转到出租车订单轨迹页面
|
*/
|
@RequestMapping("/tOrderPrivateCar_trajectory/{tOrderPrivateCarId}")
|
public String tOrderTaxi_trajectory(@PathVariable Integer tOrderPrivateCarId, Model model) {
|
model.addAttribute("tOrderPrivateCarId",tOrderPrivateCarId);
|
return PREFIX + "tOrderPrivateCar_trajectory.html";
|
}
|
|
/**
|
* 获取专车订单列表
|
*/
|
@RequestMapping(value = "/list")
|
@ResponseBody
|
public Object list(String insertTime,
|
String orderNum,
|
Integer orderSource,
|
String userName,
|
String userPhone,
|
String passengers,
|
String passengersPhone,
|
Integer serverCarModelId,
|
String driver,
|
Integer state,
|
Integer smsNumber) {
|
String beginTime = null;
|
String endTime = null;
|
if (SinataUtil.isNotEmpty(insertTime)){
|
String[] timeArray = insertTime.split(" - ");
|
beginTime = timeArray[0];
|
endTime = timeArray[1];
|
}
|
Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
|
page.setRecords(tOrderPrivateCarService.getPrivateCarOrderList(page,beginTime,endTime,ShiroKit.getUser().getRoleType(),ShiroKit.getUser().getObjectId(),orderNum,orderSource,userName,userPhone,passengers,passengersPhone,serverCarModelId,driver,state,smsNumber));
|
return super.packForBT(page);
|
}
|
|
private ResultUtil resultUtil;
|
|
/**
|
* 获取订单轨迹
|
* @param orderDetailId
|
* @return
|
*/
|
@ResponseBody
|
@RequestMapping(value = "/getOrderTrack", method = RequestMethod.POST)
|
public ResultUtil getOrderTrack(String orderDetailId){
|
if(ToolUtil.isNotEmpty(orderDetailId)){
|
try {
|
// List<TOrderPosition> list = tOrderPositionService.selectList(new EntityWrapper<TOrderPosition>().eq("orderType", 1).eq("orderId", orderDetailId).orderBy("insertTime"));
|
/*if(list.size() == 0){
|
return ResultUtil.error("该订单没有运行轨迹");
|
}*/
|
//将数据存储到文件中
|
File file = new File(filePath + orderDetailId + "_1.txt");
|
if(!file.exists()){
|
return ResultUtil.success(new ArrayList<>());
|
}
|
//读取文件(字符流)
|
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
|
//循环取出数据
|
String str = null;
|
StringBuffer sb = new StringBuffer();
|
while ((str = in.readLine()) != null) {
|
sb.append(str);
|
}
|
List<TOrderPosition> list = JSONArray.parseArray(sb.toString(), TOrderPosition.class);
|
resultUtil = ResultUtil.success(list);
|
}catch (Exception e){
|
e.printStackTrace();
|
resultUtil = ResultUtil.runErr();
|
}
|
}else {
|
resultUtil = ResultUtil.paranErr();
|
}
|
return resultUtil;
|
}
|
|
@Autowired
|
private ITCompanyService companyService;
|
|
@Autowired
|
private ITDriverService driverService;
|
|
@Autowired
|
private IIncomeService incomeService;
|
|
|
|
/**
|
* 支付专车订单
|
*/
|
@RequestMapping(value = "/changeMoney")
|
@ResponseBody
|
public Object changeMoney(Integer id,BigDecimal money) {
|
TOrderPrivateCar orderPrivateCar = tOrderPrivateCarService.selectById(id);
|
orderPrivateCar.setAbnormalMoney(orderPrivateCar.getOrderMoney());
|
orderPrivateCar.setOrderMoney(money);
|
orderPrivateCar.setPayMoney(money);
|
orderPrivateCar.setState(7);
|
orderPrivateCar.setIsDispute(1);
|
orderPrivateCar.updateById();
|
return SUCCESS_TIP;
|
}
|
|
|
@RequestMapping(value = "/frozenOrder")
|
@ResponseBody
|
public Object frozenOrder(@RequestParam Integer tOrderPrivateCarId) throws Exception {
|
TOrderPrivateCar orderPrivateCar = tOrderPrivateCarService.selectById(tOrderPrivateCarId);
|
|
if(orderPrivateCar.getIsFrozen() == 1 && orderPrivateCar.getState() < 7){
|
if(orderPrivateCar.getArriveTime()==null){
|
orderPrivateCar.setArriveTime(orderPrivateCar.getStartServiceTime());
|
}
|
orderPrivateCar = this.setMoney(orderPrivateCar, 0D, 0D);//计算费用
|
orderPrivateCar.setPayManner(1);
|
orderPrivateCar.setParkMoney(new BigDecimal(0));
|
orderPrivateCar.setRoadTollMoney(new BigDecimal(0));
|
//判断是否首单免费-免费直接完成
|
Integer orderNumber = tOrderPrivateCarService.selectCount(new EntityWrapper<TOrderPrivateCar>().eq("userId",orderPrivateCar.getUserId()).last("and (state=8 or state=9)"));
|
|
if(orderNumber<=0){//判断是否是首单
|
//判断是否免单
|
TUser userInfo = userService.selectById(orderPrivateCar.getUserId());
|
if(userInfo.getFreeMoney().doubleValue()>0d){
|
if(orderPrivateCar.getOrderMoney().compareTo(userInfo.getFreeMoney())<=0){
|
orderPrivateCar.setState(8);
|
orderPrivateCar.setIsFree(2);
|
//添加已收入明细
|
TCompany company = companyService.selectById(orderPrivateCar.getCompanyId());
|
Double speMoney = company.getSpeMoney().doubleValue();
|
BigDecimal d = null;//企业收入
|
BigDecimal c = null;//司机收入
|
if(company.getIsSpeFixedOrProportional() == 2){//固定
|
d = new BigDecimal(speMoney);
|
c = orderPrivateCar.getOrderMoney().subtract(d);//只有出行金额参与抽成,其余归属司机
|
}
|
if(company.getIsSpeFixedOrProportional() == 1){//比例
|
Double price = orderPrivateCar.getStartMoney().add(orderPrivateCar.getMileageMoney()).add(new BigDecimal(orderPrivateCar.getWaitMoney())).add(orderPrivateCar.getDurationMoney()).add(orderPrivateCar.getLongDistanceMoney()).doubleValue();
|
d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN)));
|
c = orderPrivateCar.getOrderMoney().subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
|
}
|
incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
|
incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
|
TDriver driver = driverService.selectById(orderPrivateCar.getDriverId());
|
driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
driver.setBalance((null != driver.getBalance() ? driver.getBalance() : new BigDecimal("0")).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN));
|
driverService.updateById(driver);
|
}else{
|
orderPrivateCar.setState(7);
|
orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney().subtract(userInfo.getFreeMoney()));
|
orderPrivateCar.setFreeMoney(userInfo.getFreeMoney());
|
|
}
|
|
}else{
|
orderPrivateCar.setState(7);
|
}
|
|
}else{
|
orderPrivateCar.setState(7);
|
}
|
|
tOrderPrivateCarService.updateById(orderPrivateCar);
|
|
|
TUser userInfo = userService.selectById(orderPrivateCar.getUserId());
|
Integer language1 = userInfo.getLanguage();
|
systemNoticeService.addSystemNotice(1, language1 == 1 ? "司机已结束本次行程,谢谢使用" : language1 == 2 ?
|
"The driver has finished the trip,thank you for using I-GO" : "Le chauffeur a terminé le trajet, merci d'utiliser I-GO", orderPrivateCar.getUserId());
|
|
//回滚司机状态为空闲
|
TDriver driver = driverService.selectById(orderPrivateCar.getDriverId());
|
driver.setState(2);
|
driverService.updateById(driver);
|
|
TOrderPrivateCar finalOrderTaxi = orderPrivateCar;
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
pushUtil.pushOrderState(1, finalOrderTaxi.getUserId(), finalOrderTaxi.getId(), 1, finalOrderTaxi.getState(), 0, "");
|
pushUtil.pushOrderState(2, finalOrderTaxi.getDriverId(), finalOrderTaxi.getId(), 1, finalOrderTaxi.getState(), 0, "");
|
}
|
}).start();
|
|
TOrderPrivateCar finalOrderPrivateCar = orderPrivateCar;
|
new Thread(()->{
|
try {
|
//上报google
|
fleetEngineUtil.reportBillableEvent(finalOrderPrivateCar.getTripId());
|
log.warn("上报时间:{},tripid:{},created_at:{},completed_at:{}", System.currentTimeMillis(), finalOrderPrivateCar.getTripId(),
|
finalOrderPrivateCar.getInsertTime().getTime(), finalOrderPrivateCar.getEndServiceTime().getTime());
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}).start();
|
|
pushUtil.frozenOrder(orderPrivateCar.getDriverId(), 2);
|
}
|
|
orderPrivateCar.setIsFrozen(orderPrivateCar.getIsFrozen()==1?2:1);
|
orderPrivateCar.setIsDispute(1);
|
tOrderPrivateCarService.updateById(orderPrivateCar);
|
return SUCCESS_TIP;
|
}
|
@Autowired
|
private PushUtil pushUtil;
|
@Autowired
|
private ITSystemNoticeService systemNoticeService;
|
@Resource
|
private TSystemPriceMapper systemPriceMapper;
|
public TOrderPrivateCar setMoney(TOrderPrivateCar orderPrivateCar, Double parkingFee, Double crossingFee) throws Exception {
|
System.err.println("计算金额:"+orderPrivateCar);
|
Map<String, Object> query1 = systemPriceMapper.query(orderPrivateCar.getCompanyId(), 1, orderPrivateCar.getServerCarModelId());
|
//开始根据不同的方式计算金额
|
double amount = 0;
|
JSONObject jsonObject = JSON.parseObject(query1.get("content").toString());
|
Double num1 = jsonObject.getDouble("num1");//起步价(元)
|
Double num2 = jsonObject.getDouble("num2");//起步公里(公里)
|
Double num3 = jsonObject.getDouble("num3");//起步时间(分钟)
|
Double num4 = jsonObject.getDouble("num4");//里程费(元)
|
Double num5 = jsonObject.getDouble("num5");//时长费(分钟)
|
Double num6 = jsonObject.getDouble("num6");//等待费(分钟)
|
Double num7 = jsonObject.getDouble("num7");//等待费(元)
|
Double num8 = jsonObject.getDouble("num8");//远途费(公里)
|
Double num9 = jsonObject.getDouble("num9");//远途费(公里)
|
Double num10 = jsonObject.getDouble("num10");//远途费(元)
|
Double num11 = jsonObject.getDouble("num11");//远途费(公里)
|
Double num12 = jsonObject.getDouble("num12");//远途费(公里)
|
Double num13 = jsonObject.getDouble("num13");//远途费(元)
|
Double num14 = jsonObject.getDouble("num14");//远途费(公里)
|
Double num15 = jsonObject.getDouble("num15");//远途费(元)
|
String num16 = jsonObject.getString("num16");//夜间费(开始时间)
|
Double num17 = jsonObject.getDouble("num17");//夜间费(元)
|
Double num18 = jsonObject.getDouble("num18");//夜间费(元)
|
Double num19 = jsonObject.getDouble("num19");//夜间费(元)
|
Double num20 = jsonObject.getDouble("num20");//夜间费(元)
|
Double num21 = jsonObject.getDouble("num21");//夜间费(元)
|
Double num22 = jsonObject.getDouble("num22");//夜间费(元)
|
String num23 = jsonObject.getString("num23");//高峰费(开始时间)
|
String num24 = jsonObject.getString("num24");//高峰费(开始时间)
|
Double num25 = jsonObject.getDouble("num25");//高峰费(元)
|
Double num26 = jsonObject.getDouble("num26");//高峰费(元)
|
Double num27 = jsonObject.getDouble("num27");//高峰费(元)
|
Double num28 = jsonObject.getDouble("num28");//高峰费(元)
|
Double num29 = jsonObject.getDouble("num29");//高峰费(元)
|
Double num30 = jsonObject.getDouble("num30");//高峰费(元)
|
|
Date date = new Date();
|
double d = (null == orderPrivateCar.getMileage() ? 0D : orderPrivateCar.getMileage()) / 1000;//实际公里
|
if (orderPrivateCar.getEndServiceTime() == null){
|
orderPrivateCar.setEndServiceTime(new Date());
|
}
|
double t=1;
|
if (orderPrivateCar.getStartServiceTime() == null){
|
t = 1;//实际时间(不满一分钟按一分钟算)
|
}else{
|
t = ((orderPrivateCar.getEndServiceTime().getTime() - orderPrivateCar.getStartServiceTime().getTime()) / 60000) + 1;//实际时间(不满一分钟按一分钟算)
|
}
|
double w = ((orderPrivateCar.getStartServiceTime().getTime() - orderPrivateCar.getArriveTime().getTime()) / 60000) + 1;//等待分钟(不满一分钟按一分钟算)
|
double d1 = (d - num2) < 0 ? 0 : d - num2;//超出起步里程的公里
|
double t1 = (t - num3) < 0 ? 0 : new BigDecimal(t - num3).setScale(0, BigDecimal.ROUND_UP).doubleValue();//超过起步分钟数的时间
|
double w1 = (w - num6) < 0 ? 0 : new BigDecimal(w - num6).setScale(0, BigDecimal.ROUND_UP).doubleValue();//超出等待时间的时间
|
double yt1 = 0;//远途1段
|
double yt2 = 0;//远途2段
|
double yt3 = 0;//远途3段
|
|
|
//夜间服务处理逻辑
|
if(ToolUtil.isNotEmpty(num16)){
|
Calendar s = Calendar.getInstance();
|
s.setTime(date);
|
s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num16.split(" - ")[0].split(":")[0]));
|
s.set(Calendar.MINUTE, Integer.valueOf(num16.split(" - ")[0].split(":")[1]));
|
|
Calendar e = Calendar.getInstance();
|
e.setTime(date);
|
e.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num16.split(" - ")[1].split(":")[0]));
|
e.set(Calendar.MINUTE, Integer.valueOf(num16.split(" - ")[1].split(":")[1]));
|
|
if(date.getTime() > s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
|
if(d > num8.doubleValue() && d <= num9.doubleValue()){
|
yt1 = num20 * (d - num8);
|
}
|
if(d > num9.doubleValue()){
|
yt1 = num20 * (num9 - num8);
|
}
|
if(d > num11.doubleValue() && d <= num12.doubleValue()){
|
yt2 = num21 * (d - num11);
|
}
|
if(d > num12.doubleValue()){
|
yt2 = num21 * (num12 - num11);
|
}
|
if(d > num14.doubleValue()){
|
yt3 = num22 * (d - num14);
|
}
|
amount = num17 + (d1 * num18) + (t1 * num19) + (w1 * num7) + yt1 + yt2 + yt3;
|
orderPrivateCar.setStartMileage(num2);
|
orderPrivateCar.setStartMoney(new BigDecimal(num17));//起步价
|
orderPrivateCar.setStartDuration((int)(num3.doubleValue()));
|
orderPrivateCar.setMileageKilometers(new BigDecimal(d1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setMileageMoney(new BigDecimal(d1 * num18).setScale(2, BigDecimal.ROUND_HALF_EVEN));//里程费
|
orderPrivateCar.setDuration(new BigDecimal(t1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setDurationMoney(new BigDecimal(t1 * num19).setScale(2, BigDecimal.ROUND_HALF_EVEN));//时长费
|
orderPrivateCar.setWait(new BigDecimal(w1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setWaitMoney(new BigDecimal(w1 * num7).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//等待费
|
orderPrivateCar.setLongDistance(new BigDecimal((d > num8) ? d - num8 : 0).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setLongDistanceMoney(new BigDecimal(yt1 + yt2 + yt3).setScale(2, BigDecimal.ROUND_HALF_EVEN));//远途费
|
orderPrivateCar.setParkMoney(new BigDecimal(parkingFee));//停车费
|
orderPrivateCar.setRoadTollMoney(new BigDecimal(crossingFee));//过路费
|
orderPrivateCar.setRedPacketMoney(new BigDecimal("0"));//红包抵扣
|
orderPrivateCar.setCouponMoney(new BigDecimal("0"));//优惠券抵扣
|
orderPrivateCar.setDiscount(0D);//优惠抵扣
|
orderPrivateCar.setPayMoney(new BigDecimal("0"));//支付金额
|
orderPrivateCar.setOrderMoney(new BigDecimal(amount + parkingFee + crossingFee).setScale(2, BigDecimal.ROUND_HALF_EVEN));
|
orderPrivateCar.setMoneyType(2);
|
orderPrivateCar.setMoneyTime(num16);
|
return orderPrivateCar;
|
}
|
}
|
|
|
//高峰时段处理逻辑
|
Calendar s1 = Calendar.getInstance();
|
s1.setTime(date);
|
s1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num23.split(" - ")[0].split(":")[0]));
|
s1.set(Calendar.MINUTE, Integer.valueOf(num23.split(" - ")[0].split(":")[1]));
|
|
Calendar e1 = Calendar.getInstance();
|
e1.setTime(date);
|
e1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num23.split(" - ")[1].split(":")[0]));
|
e1.set(Calendar.MINUTE, Integer.valueOf(num23.split(" - ")[1].split(":")[1]));
|
|
Calendar s2 = Calendar.getInstance();
|
s2.setTime(date);
|
s2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num24.split(" - ")[0].split(":")[0]));
|
s2.set(Calendar.MINUTE, Integer.valueOf(num24.split(" - ")[0].split(":")[1]));
|
|
Calendar e2 = Calendar.getInstance();
|
e2.setTime(date);
|
e2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num24.split(" - ")[1].split(":")[0]));
|
e2.set(Calendar.MINUTE, Integer.valueOf(num24.split(" - ")[1].split(":")[1]));
|
|
if((date.getTime() > s1.getTimeInMillis() && date.getTime() < e1.getTimeInMillis()) || (date.getTime() > s2.getTimeInMillis() && date.getTime() < e2.getTimeInMillis())){
|
if(d > num8.doubleValue() && d <= num9.doubleValue()){
|
yt1 = num28 * (d - num8);
|
}
|
if(d > num9.doubleValue()){
|
yt1 = num28 * (num9 - num8);
|
}
|
if(d > num11.doubleValue() && d <= num12.doubleValue()){
|
yt2 = num29 * (d - num11);
|
}
|
if(d > num12.doubleValue()){
|
yt2 = num29 * (num12 - num11);
|
}
|
if(d > num14.doubleValue()){
|
yt3 = num30 * (d - num14);
|
}
|
amount = num25 + (d1 * num26) + (t1 * num27) + (w1 * num7) + yt1 + yt2 + yt3;
|
orderPrivateCar.setStartMileage(num2);
|
orderPrivateCar.setStartDuration((int)(num3.doubleValue()));
|
orderPrivateCar.setStartMoney(new BigDecimal(num25));//起步价
|
orderPrivateCar.setMileageKilometers(new BigDecimal(d1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setMileageMoney(new BigDecimal(d1 * num26).setScale(2, BigDecimal.ROUND_HALF_EVEN));//里程费
|
orderPrivateCar.setDuration(new BigDecimal(t1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setDurationMoney(new BigDecimal(t1 * num27).setScale(2, BigDecimal.ROUND_HALF_EVEN));//时长费
|
orderPrivateCar.setWait(new BigDecimal(w1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setWaitMoney(new BigDecimal(w1 * num7).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//等待费
|
orderPrivateCar.setLongDistance(new BigDecimal((d > num8) ? d - num8 : 0).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setLongDistanceMoney(new BigDecimal(yt1 + yt2 + yt3).setScale(2, BigDecimal.ROUND_HALF_EVEN));//远途费
|
orderPrivateCar.setParkMoney(new BigDecimal(parkingFee));//停车费
|
orderPrivateCar.setRoadTollMoney(new BigDecimal(crossingFee));//过路费
|
orderPrivateCar.setRedPacketMoney(new BigDecimal("0"));//红包抵扣
|
orderPrivateCar.setCouponMoney(new BigDecimal("0"));//优惠券抵扣
|
orderPrivateCar.setDiscount(0D);//优惠抵扣
|
orderPrivateCar.setPayMoney(new BigDecimal("0"));//支付金额
|
orderPrivateCar.setOrderMoney(new BigDecimal(amount + parkingFee + crossingFee).setScale(2, BigDecimal.ROUND_HALF_EVEN));
|
|
orderPrivateCar.setMoneyType(3);
|
if((date.getTime() > s1.getTimeInMillis() && date.getTime() < e1.getTimeInMillis())){
|
orderPrivateCar.setMoneyTime(num23);
|
}else{
|
orderPrivateCar.setMoneyTime(num24);
|
}
|
|
return orderPrivateCar;
|
}
|
|
//其他时间段的计算
|
if(d > num8.doubleValue() && d <= num9.doubleValue()){
|
yt1 = num10 * (d - num8);
|
}
|
if(d > num9.doubleValue()){
|
yt1 = num10 * (num9 - num8);
|
}
|
if(d > num11.doubleValue() && d <= num12.doubleValue()){
|
yt2 = num13 * (d - num11);
|
}
|
if(d > num12.doubleValue()){
|
yt2 = num13 * (num12 - num11);
|
}
|
if(d > num14.doubleValue()){
|
yt3 = num15 * (d - num14);
|
}
|
amount = num1 + (d1 * num4) + (t1 * num5) + (w1 * num7) + yt1 + yt2 + yt3;
|
orderPrivateCar.setStartMileage(num2);
|
orderPrivateCar.setStartDuration((int)(num3.doubleValue()));
|
orderPrivateCar.setStartMoney(new BigDecimal(num1));//起步价
|
orderPrivateCar.setMileageKilometers(new BigDecimal(d1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setMileageMoney(new BigDecimal(d1 * num4).setScale(2, BigDecimal.ROUND_HALF_EVEN));//里程费
|
orderPrivateCar.setDuration(new BigDecimal(t1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setDurationMoney(new BigDecimal(t1 * num5).setScale(2, BigDecimal.ROUND_HALF_EVEN));//时长费
|
orderPrivateCar.setWait(new BigDecimal(w1).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setWaitMoney(new BigDecimal(w1 * num7).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//等待费
|
orderPrivateCar.setLongDistance(new BigDecimal((d > num8) ? d - num8 : 0).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
orderPrivateCar.setLongDistanceMoney(new BigDecimal(yt1 + yt2 + yt3).setScale(2, BigDecimal.ROUND_HALF_EVEN));//远途费
|
orderPrivateCar.setParkMoney(new BigDecimal(parkingFee));//停车费
|
orderPrivateCar.setRoadTollMoney(new BigDecimal(crossingFee));//过路费
|
orderPrivateCar.setRedPacketMoney(new BigDecimal("0"));//红包抵扣
|
orderPrivateCar.setCouponMoney(new BigDecimal("0"));//优惠券抵扣
|
orderPrivateCar.setDiscount(0D);//优惠抵扣
|
orderPrivateCar.setPayMoney(new BigDecimal("0"));//支付金额
|
orderPrivateCar.setOrderMoney(new BigDecimal(amount + parkingFee + crossingFee).setScale(2, BigDecimal.ROUND_HALF_EVEN));
|
//
|
orderPrivateCar.setMoneyType(1);
|
return orderPrivateCar;
|
}
|
/**
|
* 支付专车订单
|
*/
|
@RequestMapping(value = "/platPay")
|
@ResponseBody
|
public Object platPay(@RequestParam Integer tOrderPrivateCarId) {
|
TOrderPrivateCar orderPrivateCar = tOrderPrivateCarService.selectById(tOrderPrivateCarId);
|
|
if(orderPrivateCar.getIsplatPay()==2){
|
return "error";
|
}
|
//添加已收入明细
|
TCompany company = companyService.selectById(orderPrivateCar.getCompanyId());
|
Double taxi = company.getSpeMoney().doubleValue();
|
BigDecimal d = null;//企业收入
|
BigDecimal c = null;//司机收入
|
if(company.getIsSpeFixedOrProportional() == 2){//固定
|
d = new BigDecimal(taxi);
|
c = orderPrivateCar.getOrderMoney().subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
|
}
|
if(company.getIsSpeFixedOrProportional() == 1){//比例
|
Double price = orderPrivateCar.getStartMoney().doubleValue() + orderPrivateCar.getMileageMoney().doubleValue() + orderPrivateCar.getWaitMoney().doubleValue()+ orderPrivateCar.getDurationMoney().doubleValue() + orderPrivateCar.getLongDistanceMoney().doubleValue();
|
d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
|
c = orderPrivateCar.getOrderMoney().subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
|
}
|
incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
|
incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
|
TDriver driver = driverService.selectById(orderPrivateCar.getDriverId());
|
driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
driver.setBalance((null != driver.getBalance() ? driver.getBalance() : BigDecimal.ZERO).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN));
|
driverService.updateById(driver);
|
orderPrivateCar.setIsplatPay(2);
|
orderPrivateCar.setPayManner(1);
|
orderPrivateCar.setState(8);
|
orderPrivateCar.setPayMoney(orderPrivateCar.getOrderMoney());
|
tOrderPrivateCarService.updateAllColumnById(orderPrivateCar);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 取消专车订单
|
*/
|
@RequestMapping(value = "/cancel")
|
@ResponseBody
|
public Object cancel(@RequestParam Integer tOrderPrivateCarId) {
|
TOrderPrivateCar tOrderPrivateCar = tOrderPrivateCarService.selectById(tOrderPrivateCarId);
|
|
//修改之前司机状态 -- 空闲
|
if(null != tOrderPrivateCar.getDriverId()){
|
TDriver driver = tDriverService.selectById(tOrderPrivateCar.getDriverId());
|
driver.setState(2);
|
tDriverService.updateById(driver);
|
}
|
|
tOrderPrivateCar.setState(10);
|
tOrderPrivateCarService.updateById(tOrderPrivateCar);
|
|
TUser tUser = userService.selectById(tOrderPrivateCar.getUserId());
|
Integer language = tUser.getLanguage();
|
OrderCancel orderCancel = new OrderCancel();
|
orderCancel.setOrderId(tOrderPrivateCarId);
|
orderCancel.setOrderType(1);
|
orderCancel.setReason("The platform cancelled the order");
|
orderCancel.setRemark("The platform cancelled the order");
|
orderCancel.setUserType(2);
|
orderCancel.setState(2);
|
orderCancel.setInsertTime(new Date());
|
orderCancelMapper.insert(orderCancel);
|
|
//修改行程信息
|
try {
|
fleetEngineUtil.updateTrip("CANCELED", null, null, tOrderPrivateCar.getTripId(), null, null, null, null);
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
|
|
//增加推送
|
Map<String,String> map = new HashMap<>();
|
map.put("id", tOrderPrivateCar.getId().toString());
|
map.put("orderType", "1");
|
String result = HttpRequestUtil.postRequest(PushURL.cancel_order_url, map);
|
System.out.println("专车取消:【orderId="+tOrderPrivateCar.getId().toString()+"】,调用接口:"+result);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 删除专车订单
|
*/
|
@RequestMapping(value = "/delete")
|
@ResponseBody
|
public Object delete(@RequestParam Integer tOrderPrivateCarId) {
|
TOrderPrivateCar tOrderPrivateCar = tOrderPrivateCarService.selectById(tOrderPrivateCarId);
|
tOrderPrivateCar.setIsDelete(2);
|
tOrderPrivateCarService.updateById(tOrderPrivateCar);
|
return SUCCESS_TIP;
|
}
|
|
@RequestMapping("/getExcel")
|
@ResponseBody
|
public void getExcel(String insertTime,String orderNum,Integer orderSource,
|
String userName,String userPhone,String passengers,
|
String passengersPhone,Integer serverCarModelId,String driver,
|
Integer state,
|
Integer smsNumber,
|
HttpServletRequest request,
|
HttpServletResponse response) {
|
String beginTime = null;
|
String endTime = null;
|
if (SinataUtil.isNotEmpty(insertTime)){
|
String[] timeArray = insertTime.split(" - ");
|
beginTime = timeArray[0];
|
endTime = timeArray[1];
|
}
|
List<Map<String, Object>> list = tOrderPrivateCarService.getPrivateCarOrderListNoPage(beginTime, endTime, ShiroKit.getUser().getRoleType(), ShiroKit.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state,smsNumber);
|
// 表格数据【封装】
|
List<List<String>> dataList = new ArrayList<>();
|
// 表头行
|
List<String> shellList = new ArrayList<String>();
|
shellList.add("下单时间");
|
shellList.add("订单编号");
|
shellList.add("订单来源");
|
shellList.add("乘车时间");
|
shellList.add("下单用户昵称");
|
shellList.add("下单用户手机");
|
shellList.add("乘车用户姓名");
|
shellList.add("乘车用户手机");
|
shellList.add("起点");
|
shellList.add("终点");
|
shellList.add("选择车型");
|
shellList.add("接单司机");
|
shellList.add("接单车辆");
|
shellList.add("订单金额");
|
shellList.add("状态");
|
shellList.add("起步里程");
|
shellList.add("起步价");
|
shellList.add("里程公里");
|
shellList.add("里程费");
|
shellList.add("时长分钟");
|
shellList.add("时长费");
|
shellList.add("等待分钟");
|
shellList.add("等待费");
|
shellList.add("远途公里");
|
shellList.add("远途费");
|
shellList.add("停车费");
|
shellList.add("过路费");
|
shellList.add("红包抵扣金额");
|
shellList.add("优惠券抵扣金额");
|
shellList.add("折扣");
|
shellList.add("折扣优惠金额");
|
shellList.add("支付金额");
|
shellList.add("首单免费");
|
shellList.add("免费金额");
|
shellList.add("备注");
|
|
dataList.add(shellList);
|
for (Map<String, Object> map : list) {
|
//数据行
|
shellList = new ArrayList<String>();
|
//下单时间
|
if(SinataUtil.isNotEmpty(map.get("insertTime"))){
|
shellList.add(String.valueOf(map.get("insertTime")));
|
}else{
|
shellList.add("-");
|
}
|
//订单编号
|
if(SinataUtil.isNotEmpty(map.get("orderNum"))){
|
shellList.add(map.get("orderNum").toString());
|
}else{
|
shellList.add("-");
|
}
|
//订单来源
|
if(SinataUtil.isNotEmpty(map.get("orderSource"))){
|
switch (map.get("orderSource").toString()) {
|
case "1":
|
shellList.add("app下单");
|
break;
|
case "2":
|
shellList.add("推荐下单");
|
break;
|
case "3":
|
shellList.add("小程序下单");
|
break;
|
case "4":
|
shellList.add("司机下单");
|
break;
|
case "5":
|
shellList.add("调度下单");
|
break;
|
default:
|
shellList.add("-");
|
}
|
}else{
|
shellList.add("-");
|
}
|
//乘车时间
|
if(SinataUtil.isNotEmpty(map.get("travelTime"))){
|
shellList.add(String.valueOf(map.get("travelTime")));
|
}else{
|
shellList.add("-");
|
}
|
//下单用户昵称
|
if(SinataUtil.isNotEmpty(map.get("userName"))){
|
shellList.add(map.get("userName").toString());
|
}else{
|
shellList.add("-");
|
}
|
//下单用户手机
|
if(SinataUtil.isNotEmpty(map.get("userPhone"))){
|
shellList.add(map.get("userPhone").toString());
|
}else{
|
shellList.add("-");
|
}
|
//乘车用户姓名
|
if(SinataUtil.isNotEmpty(map.get("passengers"))){
|
shellList.add(map.get("passengers").toString());
|
}else{
|
shellList.add("-");
|
}
|
//乘车用户手机
|
if(SinataUtil.isNotEmpty(map.get("passengersPhone"))){
|
shellList.add(map.get("passengersPhone").toString());
|
}else{
|
shellList.add("-");
|
}
|
//起点
|
if(SinataUtil.isNotEmpty(map.get("startAddress"))){
|
shellList.add(map.get("startAddress").toString());
|
}else{
|
shellList.add("-");
|
}
|
//终点
|
if(SinataUtil.isNotEmpty(map.get("endAddress"))){
|
shellList.add(map.get("endAddress").toString());
|
}else{
|
shellList.add("-");
|
}
|
//选择车型
|
if(SinataUtil.isNotEmpty(map.get("serverCarModel"))){
|
shellList.add(map.get("serverCarModel").toString());
|
}else{
|
shellList.add("-");
|
}
|
//接单司机
|
if(SinataUtil.isNotEmpty(map.get("driver"))){
|
shellList.add(map.get("driver").toString());
|
}else{
|
shellList.add("-");
|
}
|
//接单车辆
|
if(SinataUtil.isNotEmpty(map.get("car"))){
|
shellList.add(map.get("car").toString());
|
}else{
|
shellList.add("-");
|
}
|
//订单金额
|
if(SinataUtil.isNotEmpty(map.get("orderMoney"))){
|
shellList.add(map.get("orderMoney").toString());
|
}else{
|
shellList.add("0");
|
}
|
//状态
|
if(SinataUtil.isNotEmpty(map.get("state"))){
|
switch (map.get("state").toString()) {
|
case "1":
|
shellList.add("待接单");
|
break;
|
case "2":
|
shellList.add("待出发");
|
break;
|
case "3":
|
shellList.add("待到达预约地点");
|
break;
|
case "4":
|
shellList.add("待乘客上车");
|
break;
|
case "5":
|
shellList.add("服务中");
|
break;
|
case "6":
|
shellList.add("完成服务");
|
break;
|
case "7":
|
shellList.add("待支付");
|
break;
|
case "8":
|
shellList.add("待评价");
|
break;
|
case "9":
|
shellList.add("已完成");
|
break;
|
case "10":
|
shellList.add("已取消");
|
break;
|
case "11":
|
shellList.add("改派中");
|
break;
|
case "12":
|
shellList.add("取消待支付");
|
break;
|
default:
|
shellList.add("-");
|
}
|
}else{
|
shellList.add("-");
|
}
|
//起步里程
|
if(SinataUtil.isNotEmpty(map.get("startMileage"))){
|
shellList.add(map.get("startMileage").toString());
|
}else{
|
shellList.add("-");
|
}
|
//起步价
|
if(SinataUtil.isNotEmpty(map.get("startMoney"))){
|
shellList.add(map.get("startMoney").toString());
|
}else{
|
shellList.add("-");
|
}
|
//里程公里
|
if(SinataUtil.isNotEmpty(map.get("mileageKilometers"))){
|
shellList.add(map.get("mileageKilometers").toString());
|
}else{
|
shellList.add("-");
|
}
|
//里程费
|
if(SinataUtil.isNotEmpty(map.get("mileageMoney"))){
|
shellList.add(map.get("mileageMoney").toString());
|
}else{
|
shellList.add("-");
|
}
|
//时长分钟
|
if(SinataUtil.isNotEmpty(map.get("duration"))){
|
shellList.add(map.get("duration").toString());
|
}else{
|
shellList.add("-");
|
}
|
//时长费
|
if(SinataUtil.isNotEmpty(map.get("durationMoney"))){
|
shellList.add(map.get("durationMoney").toString());
|
}else{
|
shellList.add("0.00");
|
}
|
//等待分钟
|
if(SinataUtil.isNotEmpty(map.get("wait"))){
|
shellList.add(map.get("wait").toString());
|
}else{
|
shellList.add("-");
|
}
|
//等待费
|
if(SinataUtil.isNotEmpty(map.get("waitMoney"))){
|
shellList.add(map.get("waitMoney").toString());
|
}else{
|
shellList.add("0.00");
|
}
|
//远途公里
|
if(SinataUtil.isNotEmpty(map.get("longDistance"))){
|
shellList.add(map.get("longDistance").toString());
|
}else{
|
shellList.add("0.00");
|
}
|
//远途费
|
if(SinataUtil.isNotEmpty(map.get("longDistanceMoney"))){
|
shellList.add(map.get("longDistanceMoney").toString());
|
}else{
|
shellList.add("0.00");
|
}
|
//停车费
|
if(SinataUtil.isNotEmpty(map.get("parkMoney"))){
|
shellList.add(map.get("parkMoney").toString());
|
}else{
|
shellList.add("0.00");
|
}
|
//过路费
|
if(SinataUtil.isNotEmpty(map.get("roadTollMoney"))){
|
shellList.add(map.get("roadTollMoney").toString());
|
}else{
|
shellList.add("0.00");
|
}
|
//红包抵扣金额
|
if(SinataUtil.isNotEmpty(map.get("redPacketMoney"))){
|
shellList.add(map.get("redPacketMoney").toString());
|
}else{
|
shellList.add("0.00");
|
}
|
//优惠券抵扣金额
|
if(SinataUtil.isNotEmpty(map.get("couponMoney"))){
|
shellList.add(map.get("couponMoney").toString());
|
}else{
|
shellList.add("0.00");
|
}
|
//折扣
|
if(SinataUtil.isNotEmpty(map.get("discount"))){
|
shellList.add(map.get("discount").toString());
|
}else{
|
shellList.add("-");
|
}
|
//折扣优惠金额
|
if(SinataUtil.isNotEmpty(map.get("discountMoney"))){
|
shellList.add(map.get("discountMoney").toString());
|
}else{
|
shellList.add("0.00");
|
}
|
//支付金额
|
if(SinataUtil.isNotEmpty(map.get("payMoney"))){
|
shellList.add(map.get("payMoney").toString());
|
}else{
|
shellList.add("0.00");
|
}
|
//首单免费
|
if(SinataUtil.isNotEmpty(map.get("isFree"))){
|
if("1".equals(map.get("isFree").toString())){
|
shellList.add("否");
|
}else if("2".equals(map.get("isFree").toString())){
|
shellList.add("是");
|
}
|
|
}else{
|
shellList.add("--");
|
}
|
//免费金额
|
if(SinataUtil.isNotEmpty(map.get("freeMoney"))){
|
shellList.add(map.get("freeMoney").toString());
|
}else{
|
shellList.add("-");
|
}
|
//备注
|
if(SinataUtil.isNotEmpty(map.get("remark"))){
|
shellList.add(map.get("remark").toString());
|
}else{
|
shellList.add("-");
|
}
|
|
dataList.add(shellList);
|
}
|
try {
|
// 调用工具类进行导出
|
ExcelExportUtil.easySheet("专车订单数据"+ DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "专车订单数据", dataList,request, response);
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
}
|
}
|