package com.stylefeng.guns.modular.system.controller.general; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; 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.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.model.TAppUser; import com.stylefeng.guns.modular.system.model.TDriver; import com.stylefeng.guns.modular.system.model.TOrder; import com.stylefeng.guns.modular.system.service.ITAppUserService; import com.stylefeng.guns.modular.system.service.ITCancelOrderService; import com.stylefeng.guns.modular.system.service.ITOrderService; 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.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.servlet.http.HttpServletResponse; import java.io.OutputStream; 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; /** * 跳转到首页 */ @RequestMapping("") public String index() { 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 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.getCancelOrderList(createTime, code, source, userName, userPhone, state, driverName); } /** * 获取列表 */ @ApiOperation(value = "获取用户详情里的订单列表") @RequestMapping(value = "/appUserDetailList") @ResponseBody public Object appUserDetailList(String condition,Integer userId) { List list = new ArrayList<>(); EntityWrapper wrapper = new EntityWrapper<>(); if(Objects.nonNull(userId)){ wrapper.eq("userId",userId); } List 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 Object add(TOrder tOrder) { tOrderService.insert(tOrder); return SUCCESS_TIP; } /** * 删除 */ @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 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 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(); } } }