package com.stylefeng.guns.modular.system.controller.general;
|
|
import cn.hutool.core.date.DateUnit;
|
import cn.hutool.core.date.DateUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.stylefeng.guns.core.base.controller.BaseController;
|
import com.stylefeng.guns.core.base.tips.SuccessTip;
|
import com.stylefeng.guns.core.log.LogObjectHolder;
|
import com.stylefeng.guns.core.shiro.ShiroKit;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.system.controller.resp.TAppUserDetailOrderResp;
|
import com.stylefeng.guns.modular.system.controller.resp.TDriverCommissionResp;
|
import com.stylefeng.guns.modular.system.controller.resp.TOrderResp;
|
import com.stylefeng.guns.modular.system.controller.util.ExcelUtil;
|
import com.stylefeng.guns.modular.system.dao.TCancelOrderMapper;
|
import com.stylefeng.guns.modular.system.enums.OrderStateEnum;
|
import com.stylefeng.guns.modular.system.model.TAppUser;
|
import com.stylefeng.guns.modular.system.model.TDriver;
|
import com.stylefeng.guns.modular.system.model.TOrder;
|
import com.stylefeng.guns.modular.system.model.TOrderPosition;
|
import com.stylefeng.guns.modular.system.service.ITAppUserService;
|
import com.stylefeng.guns.modular.system.service.ITCancelOrderService;
|
import com.stylefeng.guns.modular.system.service.ITDriverService;
|
import com.stylefeng.guns.modular.system.service.ITOrderService;
|
import com.stylefeng.guns.modular.system.util.ResultUtil;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.springframework.beans.BeanUtils;
|
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.PathVariable;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.*;
|
import java.math.BigDecimal;
|
import java.text.DateFormat;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
|
/**
|
* 控制器
|
*
|
* @author fengshuonan
|
* @Date 2023-02-15 11:57:13
|
*/
|
@Controller
|
@RequestMapping("/tOrder")
|
public class TOrderController extends BaseController {
|
|
private String PREFIX = "/system/tOrder/";
|
|
@Autowired
|
private ITOrderService tOrderService;
|
@Autowired
|
private ITAppUserService tAppUserService;
|
@Autowired
|
private ITCancelOrderService tCancelOrderService;
|
@Resource
|
private TCancelOrderMapper tCancelOrderMapper;
|
|
@Autowired
|
private ITDriverService driverService;
|
|
@Value("${filePath}")
|
private String filePath;
|
|
/**
|
* 跳转到首页
|
*/
|
@RequestMapping("")
|
public String index(Model model) {
|
Integer roleType = Objects.requireNonNull(ShiroKit.getUser()).getRoleType();
|
Integer objectId = Objects.requireNonNull(ShiroKit.getUser()).getObjectId();
|
List<TOrderResp> tOrderResps = tCancelOrderMapper.orderExceptionList(null, null, null, null, null, null, null, null, roleType, objectId);
|
model.addAttribute("error", tOrderResps.size());
|
return PREFIX + "tOrder.html";
|
}
|
|
/**
|
* 跳转到添加
|
*/
|
@RequestMapping("/tOrder_add")
|
public String tOrderAdd() {
|
return PREFIX + "tOrder_add.html";
|
}
|
|
/**
|
* 跳转到修改
|
*/
|
@RequestMapping("/tOrder_update/{tOrderId}")
|
public String tOrderUpdate(@PathVariable Integer tOrderId, Model model) {
|
TOrder tOrder = tOrderService.selectById(tOrderId);
|
model.addAttribute("item",tOrder);
|
LogObjectHolder.me().set(tOrder);
|
return PREFIX + "tOrder_edit.html";
|
}
|
|
/**
|
* 跳转异常页面
|
* @return
|
*/
|
@RequestMapping("/tOrder-exception")
|
public String tOrderException(Model model) {
|
return PREFIX + "tOrderException.html";
|
}
|
|
/**
|
* 跳转到首页
|
*/
|
@RequestMapping("/cancelOrder")
|
public String cancelOrder() {
|
return PREFIX + "tCancelOrder.html";
|
}
|
|
/**
|
* 跳转冻结页面
|
* @return
|
*/
|
@RequestMapping("/tOrderException_start_and_stop")
|
public String tAppUserStartAndStop( Integer id,
|
Model model) {
|
|
// 查询订单
|
TOrder tOrder = tOrderService.selectById(id);
|
TAppUser tAppUser = new TAppUser();
|
if(Objects.nonNull(tOrder)){
|
tAppUser = tAppUserService.selectById(tOrder.getUserId());
|
}
|
|
model.addAttribute("id",id);
|
if(Objects.nonNull(tAppUser)){
|
model.addAttribute("status",tAppUser.getStatus());
|
}
|
return PREFIX + "tOrderStartAndStopException.html";
|
}
|
|
/**
|
* 跳转详情页面
|
*/
|
@RequestMapping("/orderDetail")
|
public String orderDetail(Integer orderId, Model model) {
|
tOrderService.orderDetail(orderId,model);
|
return PREFIX + "tOrderDetail.html";
|
}
|
|
/**
|
* 跳转异常详情页面
|
*/
|
@RequestMapping("/orderExceptionDetail")
|
public String orderExceptionDetail(Integer orderId, Model model) {
|
tOrderService.orderExceptionDetail(orderId,model);
|
return PREFIX + "tOrderExceptionDetail.html";
|
}
|
|
/**
|
* 获取列表
|
*/
|
@ApiOperation(value = "用户获取订单列表")
|
@RequestMapping(value = "/list")
|
@ResponseBody
|
public Object list(Integer userId) {
|
EntityWrapper<TOrder> wrapper = new EntityWrapper<>();
|
if(Objects.nonNull(userId)){
|
wrapper.eq("user_id",userId);
|
}
|
wrapper.orderBy("createTime",false);
|
return tOrderService.selectList(wrapper);
|
}
|
|
/**
|
* 获取列表
|
*/
|
@ApiOperation(value = "获取订单列表")
|
@RequestMapping(value = "/orderList")
|
@ResponseBody
|
public Object orderList(String createTime,
|
String code,
|
Integer source,
|
String userName,
|
String userPhone,
|
Integer state,
|
String driverName) {
|
return tOrderService.getOrderList(createTime, code, source, userName, userPhone, state, driverName,1);
|
}
|
|
/**
|
* 获取列表
|
*/
|
@ApiOperation(value = "获取订单异常列表")
|
@RequestMapping(value = "/orderExceptionList")
|
@ResponseBody
|
public Object orderExceptionList(String createTime,
|
String code,
|
Integer source,
|
String userName,
|
String userPhone,
|
Integer state,
|
String driverName) {
|
// return tOrderService.getOrderList(createTime, code, source, userName, userPhone, state, driverName,2);
|
return tCancelOrderService.orderExceptionList(createTime, code, source, userName, userPhone, state, driverName);
|
}
|
|
/**
|
* 获取列表
|
*/
|
@ApiOperation(value = "获取用户详情里的订单列表")
|
@RequestMapping(value = "/appUserDetailList")
|
@ResponseBody
|
public Object appUserDetailList(String condition,Integer userId) {
|
List<TAppUserDetailOrderResp> list = new ArrayList<>();
|
|
|
EntityWrapper<TOrder> wrapper = new EntityWrapper<>();
|
if(Objects.nonNull(userId)){
|
wrapper.eq("userId",userId);
|
}
|
List<TOrder> tOrders = tOrderService.selectList(wrapper);
|
for (TOrder tOrder : tOrders) {
|
TAppUserDetailOrderResp tAppUserDetailOrderResp = new TAppUserDetailOrderResp();
|
BeanUtils.copyProperties(tOrder,tAppUserDetailOrderResp);
|
|
// 计算总里程
|
if(Objects.nonNull(tOrder.getActualMileage())){
|
tAppUserDetailOrderResp.setMileageSum(tOrder.getActualMileage()/1000);
|
}
|
|
// 计算总时长
|
long travelTimeSum = 0;
|
if(Objects.nonNull(tAppUserDetailOrderResp.getBoardingTime()) && Objects.nonNull(tAppUserDetailOrderResp.getGetoffTime())){
|
travelTimeSum = DateUtil.between(tAppUserDetailOrderResp.getBoardingTime(), tAppUserDetailOrderResp.getGetoffTime(), DateUnit.MINUTE);
|
}
|
tAppUserDetailOrderResp.setTravelTimeSum(Integer.valueOf(Long.toString(travelTimeSum)));
|
|
list.add(tAppUserDetailOrderResp);
|
}
|
return list;
|
}
|
|
|
/**
|
* 获取列表
|
*/
|
@RequestMapping(value = "/list-back")
|
@ResponseBody
|
public Object listBack(String condition) {
|
return tOrderService.selectList(null);
|
}
|
|
/**
|
* 新增
|
*/
|
@RequestMapping(value = "/add")
|
@ResponseBody
|
public ResultUtil add(TOrder tOrder) {
|
ResultUtil add = tOrderService.add(tOrder);
|
return add;
|
}
|
|
/**
|
* 删除
|
*/
|
@RequestMapping(value = "/delete")
|
@ResponseBody
|
public Object delete(@RequestParam Integer tOrderId) {
|
tOrderService.deleteById(tOrderId);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 修改
|
*/
|
@RequestMapping(value = "/update")
|
@ResponseBody
|
public Object update(TOrder tOrder) {
|
tOrderService.updateById(tOrder);
|
return SUCCESS_TIP;
|
}
|
|
/**
|
* 详情
|
*/
|
@RequestMapping(value = "/detail/{tOrderId}")
|
@ResponseBody
|
public Object detail(@PathVariable("tOrderId") Integer tOrderId) {
|
return tOrderService.selectById(tOrderId);
|
}
|
|
@ApiOperation(value = "导出订单列表",notes="导出订单列表")
|
@RequestMapping(value = "/export")
|
@ResponseBody
|
public void export(String createTime,
|
String code,
|
Integer source,
|
String userName,
|
String userPhone,
|
Integer state,
|
String driverName,HttpServletResponse response) {
|
try {
|
Date date = new Date();
|
DateFormat format = new SimpleDateFormat("yyyyMMdd");
|
String time1 = format.format(date);
|
String fileName = "OrderInfo"+time1+".xls";
|
String[] title = new String[] {"下单时间","订单编号","订单来源","开始服务时间","下单用户昵称",
|
"下单用户手机","起点地址","终点地址","接单司机","司机电话","预估价","取消次数","订单状态"};
|
List<TOrderResp> orderList = tOrderService.getOrderList(createTime, code, source, userName, userPhone, state, driverName,1);
|
String[][] values = new String[orderList.size()][];
|
for (int i = 0; i < orderList.size(); i++) {
|
TOrderResp d = orderList.get(i);
|
values[i] = new String[title.length];
|
values[i][0] = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d.getCreateTime());
|
values[i][1] = d.getCode();
|
Integer source1 = d.getSource();
|
if(1 == source1){
|
values[i][2] = "小程序";
|
}else if(2 == source1){
|
values[i][2] = "司机创建";
|
}
|
if(Objects.nonNull(d.getStartTime())){
|
values[i][3] = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d.getStartTime());
|
}else {
|
values[i][3] = "";
|
}
|
values[i][4] = d.getUserName();
|
values[i][5] = d.getUserPhone();
|
values[i][6] = d.getStartAddress();
|
values[i][7] = d.getEndAddress();
|
values[i][8] = d.getDriverName();
|
values[i][9] = d.getDriverPhone();
|
values[i][10] = String.valueOf(Objects.nonNull(d.getEstimatedPrice())?d.getEstimatedPrice(): BigDecimal.ZERO);
|
values[i][11] = String.valueOf(d.getCancelCount());
|
Integer status1 = d.getState();
|
if(101 == status1){
|
values[i][12] = "待接单";
|
}else if(102 == status1){
|
values[i][12] = "已接单";
|
}else if(103 == status1){
|
values[i][12] = "前往预约点";
|
}else if(104 == status1){
|
values[i][12] = "到达预约点";
|
}else if(105 == status1){
|
values[i][12] = "开始服务";
|
}else if(106 == status1){
|
values[i][12] = "到达目的地";
|
}else if(107 == status1){
|
values[i][12] = "待支付";
|
}else if(108 == status1){
|
values[i][12] = "待评价";
|
}else if(109 == status1){
|
values[i][12] = "已完成";
|
}else if(201 == status1){
|
values[i][12] = "转单中";
|
}else if(301 == status1){
|
values[i][12] = "已取消";
|
}else if(401 == status1){
|
values[i][12] = "等待中";
|
}
|
}
|
HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("Variance"+time1, title, values, null);
|
ExcelUtil.setResponseHeader(response, fileName);
|
OutputStream os = response.getOutputStream();
|
wb.write(os);
|
os.flush();
|
os.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
@ApiOperation(value = "导出订单列表",notes="导出订单列表")
|
@RequestMapping(value = "/export-exception")
|
@ResponseBody
|
public void exportException(String createTime,
|
String code,
|
Integer source,
|
String userName,
|
String userPhone,
|
Integer state,
|
String driverName,HttpServletResponse response) {
|
try {
|
Date date = new Date();
|
DateFormat format = new SimpleDateFormat("yyyyMMdd");
|
String time1 = format.format(date);
|
String fileName = "OrderExceptionInfo"+time1+".xls";
|
String[] title = new String[] {"下单时间","订单编号","订单来源","乘车时间","下单用户昵称",
|
"下单用户手机","起点","终点","接单司机","司机电话","预估价格","取消次数","订单状态"};
|
List<TOrderResp> orderList = tOrderService.getOrderList(createTime, code, source, userName, userPhone, state, driverName,1);
|
String[][] values = new String[orderList.size()][];
|
for (int i = 0; i < orderList.size(); i++) {
|
TOrderResp d = orderList.get(i);
|
values[i] = new String[title.length];
|
values[i][0] = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d.getCreateTime());
|
values[i][1] = d.getCode();
|
Integer source1 = d.getSource();
|
if(1 == source1){
|
values[i][2] = "小程序";
|
}else if(2 == source1){
|
values[i][2] = "司机创建";
|
}
|
if(Objects.nonNull(d.getStartTime())){
|
values[i][3] = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d.getStartTime());
|
}else {
|
values[i][3] = "";
|
}
|
values[i][4] = d.getUserName();
|
values[i][5] = d.getUserPhone();
|
values[i][6] = d.getStartAddress();
|
values[i][7] = d.getEndAddress();
|
values[i][8] = d.getDriverName();
|
values[i][9] = d.getDriverPhone();
|
values[i][10] = String.valueOf(Objects.nonNull(d.getEstimatedPrice())?d.getEstimatedPrice(): BigDecimal.ZERO);
|
values[i][11] = String.valueOf(d.getCancelCount());
|
Integer status1 = d.getState();
|
if(101 == status1){
|
values[i][12] = "待接单";
|
}else if(102 == status1){
|
values[i][12] = "已接单";
|
}else if(103 == status1){
|
values[i][12] = "前往预约点";
|
}else if(104 == status1){
|
values[i][12] = "到达预约点";
|
}else if(105 == status1){
|
values[i][12] = "开始服务";
|
}else if(106 == status1){
|
values[i][12] = "到达目的地";
|
}else if(107 == status1){
|
values[i][12] = "待支付";
|
}else if(108 == status1){
|
values[i][12] = "待评价";
|
}else if(109 == status1){
|
values[i][12] = "已完成";
|
}else if(201 == status1){
|
values[i][12] = "转单中";
|
}else if(301 == status1){
|
values[i][12] = "已取消";
|
}else if(401 == status1){
|
values[i][12] = "等待中";
|
}
|
}
|
HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("Variance"+time1, title, values, null);
|
ExcelUtil.setResponseHeader(response, fileName);
|
OutputStream os = response.getOutputStream();
|
wb.write(os);
|
os.flush();
|
os.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
|
@RequestMapping(value = "/getOrderTrack")
|
@ResponseBody
|
public ResultUtil getOrderTrack(Integer orderDetailId){
|
if(ToolUtil.isNotEmpty(orderDetailId)){
|
try {
|
//将数据存储到文件中
|
File file = new File(filePath + orderDetailId + ".json");
|
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);
|
return ResultUtil.success(list);
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}else {
|
return ResultUtil.paranErr();
|
}
|
}
|
|
|
/**
|
* 关闭订单
|
*/
|
@RequestMapping(value = "/cancelOrderUpdate")
|
@ResponseBody
|
public Object cancelOrderUpdate(@RequestParam Integer tOrderId) {
|
TOrder tOrder = tOrderService.selectById(tOrderId);
|
tOrder.setState(OrderStateEnum.CANCELED.getCode());
|
tOrderService.updateById(tOrder);
|
if(null != tOrder.getDriverId()){
|
TDriver tDriver = driverService.selectById(tOrder.getDriverId());
|
tDriver.setServerStatus(1);
|
driverService.updateById(tDriver);
|
}
|
return SUCCESS_TIP;
|
}
|
}
|