package com.stylefeng.guns.modular.system.controller.specialTrain; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; 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.shiro.ShiroUser; import com.stylefeng.guns.core.util.DateUtil; import com.stylefeng.guns.core.util.SinataUtil; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.system.dao.LineShiftDriverMapper; import com.stylefeng.guns.modular.system.dao.OrderCancelMapper; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; 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.util.*; /** * 跨城出行订单控制器 * * @author fengshuonan * @Date 2020-09-16 14:56:46 */ @Controller @RequestMapping("/tOrderCrossCity") public class TOrderCrossCityController extends BaseController { private String PREFIX = "/system/tOrderCrossCity/"; @Autowired private ITOrderCrossCityService tOrderCrossCityService; @Autowired private ITServerCarmodelService tServerCarmodelService; @Autowired private ITLineService itLineService; @Autowired private ITOrderPositionService tOrderPositionService; private ResultUtil resultUtil; @Autowired private ITUserService userService; @Resource private MongoTemplate mongoTemplate; @Autowired private IUserService sysUserService; @Autowired private ITCompanyService iTCompanyService; /** * 跳转到跨城出行订单首页 */ @RequestMapping("") public String index(Model model) { //服务快车车型 List carmodelList = tServerCarmodelService.selectList(new EntityWrapper().eq("type", 2).eq("state", 1)); model.addAttribute("carmodelList", carmodelList); //线路 List lineList = itLineService.selectList(new EntityWrapper().last(" where not FIND_IN_SET(state,'3')")); model.addAttribute("lineList",lineList); return PREFIX + "tOrderCrossCity.html"; } /** * 跳转到查看跨城出行订单详情页面 */ @RequestMapping("/tOrderCrossCity_detail/{tOrderCrossCityId}") public String tOrderCrossCityUpdate(@PathVariable Integer tOrderCrossCityId, Model model) { Map item = tOrderCrossCityService.getCrossCityOrderDetailById(tOrderCrossCityId); model.addAttribute("item",item); return PREFIX + "tOrderCrossCity_detail.html"; } /** * 跳转到跨城出行订单轨迹页面 */ @RequestMapping("/tOrderCrossCity_track/{tOrderCrossCityId}") public String tOrderCrossCity_track(@PathVariable Integer tOrderCrossCityId, Model model) { model.addAttribute("tOrderCrossCityId",tOrderCrossCityId); return PREFIX + "tOrderCrossCity_track.html"; } /** * 获取订单轨迹 * * @param orderDetailId * @return */ @ResponseBody @RequestMapping(value = "/getOrderTrack", method = RequestMethod.POST) public ResultUtil getOrderTrack(Integer orderDetailId) { if (ToolUtil.isNotEmpty(orderDetailId)) { try { Query query = new Query() .addCriteria(Criteria.where("orderId").is(orderDetailId).and("orderType").is(3)) .with(new Sort(Sort.Direction.ASC, "insertTime")); List positions = mongoTemplate.find(query, TOrderPosition.class); resultUtil = ResultUtil.success(positions); } catch (Exception e) { e.printStackTrace(); resultUtil = ResultUtil.runErr(); } } else { resultUtil = ResultUtil.paranErr(); } return resultUtil; } /** * 获取跨城出行订单列表 */ @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 lineId, Integer state, Integer abnormal, Integer promotion, String promotionUser, String travelId) { String beginTime = null; String endTime = null; if (SinataUtil.isNotEmpty(insertTime)){ String[] timeArray = insertTime.split(" - "); beginTime = timeArray[0]; endTime = timeArray[1]; } Page> page = new PageFactory>().defaultPage(); page.setRecords(tOrderCrossCityService.getCrossCityOrderList(page, beginTime, endTime, ShiroKit.getUser().getRoleType(), ShiroKit.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state, abnormal, promotion, promotionUser,null, travelId)); return super.packForBT(page); } @GetMapping("/export") @ResponseBody public void export(String insertTime, String orderNum, Integer orderSource, String userName, String userPhone, String passengers, String passengersPhone, Integer serverCarModelId, String driver, Integer lineId, Integer state, Integer abnormal, Integer promotion, String promotionUser, String travelId, HttpServletRequest request, HttpServletResponse response) { try { String beginTime = null; String endTime = null; if (SinataUtil.isNotEmpty(insertTime)) { String[] timeArray = insertTime.split(" - "); beginTime = timeArray[0]; endTime = timeArray[1]; } List> list = tOrderCrossCityService.getCrossCityOrderListExport(null, beginTime, endTime, ShiroKit.getUser().getRoleType(), ShiroKit.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state, abnormal, promotion, promotionUser,null, travelId); // 表格数据【封装】 List> dataList = new ArrayList<>(); //第一行显示【封装】 List twoList = new ArrayList(); twoList.add("总计:"); twoList.add(String.valueOf(list.size())+"条"); dataList.add(twoList); // 列【封装】 List shellList = new ArrayList(); 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 object : list){ // 详细数据列【封装】 shellList = new ArrayList(); if(SinataUtil.isNotEmpty(object.get("insertTime"))){ shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("insertTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss")); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("orderNum"))){ shellList.add(object.get("orderNum").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("travelId"))){ shellList.add(object.get("travelId").toString()); }else{ shellList.add("-"); } // 1:APP下单,2:扫码下单,3:小程序下单,4:预约订单,5:调度下单 if(SinataUtil.isNotEmpty(object.get("orderSource"))){ switch (object.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; case "6": shellList.add("道行龙城下单"); break; default: shellList.add("-"); break; } } if(SinataUtil.isNotEmpty(object.get("travelTime"))){ shellList.add(DateUtil.formatDate(DateUtil.parse(object.get("travelTime").toString(),"YYYY-MM-dd HH:mm:ss.S"), "YYYY-MM-dd HH:mm:ss")); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("userName"))){ shellList.add(object.get("userName").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("userPhone"))){ shellList.add(object.get("userPhone").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("passengers"))){ shellList.add(object.get("passengers").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("passengersPhone"))){ shellList.add(object.get("passengersPhone").toString()); }else{ shellList.add("-"); } // if(SinataUtil.isNotEmpty(object.get("contactPersonPhone"))){ // shellList.add(object.get("contactPersonPhone").toString()); // }else{ // shellList.add("-"); // } if(SinataUtil.isNotEmpty(object.get("startAddress"))){ shellList.add(object.get("startAddress").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("endAddress"))){ shellList.add(object.get("endAddress").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("lineName"))){ shellList.add(object.get("lineName").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("serverCarModelName"))){ shellList.add(object.get("serverCarModelName").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("driver"))){ shellList.add(object.get("driver").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("car"))){ shellList.add(object.get("car").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("orderMoney"))){ shellList.add(object.get("orderMoney").toString()); }else{ shellList.add("-"); } // 1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付 if(SinataUtil.isNotEmpty(object.get("state"))){ switch (object.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("-"); break; } } if(SinataUtil.isNotEmpty(object.get("abnormal"))){ shellList.add(object.get("abnormal").toString().equals("1")?"否":"是"); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("promotion"))){ shellList.add(object.get("promotion").toString().equals("1")?"否":"是"); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("promotionUser"))){ shellList.add(object.get("promotionUser").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("promotionPhone"))){ shellList.add(object.get("promotionPhone").toString()); }else{ shellList.add("-"); } dataList.add(shellList); } try { // 调用工具类进行导出 ExcelExportUtil.easySheet("订单导出记录"+DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "订单导出记录", dataList,request, response); } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } @Autowired private ITDriverService tDriverService; @Resource private LineShiftDriverMapper lineShiftDriverMapper; @Autowired private ITransactionDetailsService transactionDetailsService; @Autowired private IPaymentRecordService paymentRecordService; @Autowired private PayMoneyUtil payMoneyUtil; @Resource private OrderCancelMapper orderCancelMapper; @Autowired private IIncomeService incomeService; /** * 取消跨城出行订单 */ @RequestMapping(value = "/cancel") @ResponseBody public Object cancel(@RequestParam Integer tOrderCrossCityId) throws Exception { TOrderCrossCity tOrderCrossCity = tOrderCrossCityService.selectById(tOrderCrossCityId); ShiroUser user = ShiroKit.getUser(); TOrderCrossCity orderCrossCity = tOrderCrossCityService.selectById(tOrderCrossCityId); if (orderCrossCity.getState() > 5 && orderCrossCity.getState() != 11 && orderCrossCity.getState() != 7) { return ResultUtil.error("订单状态不在可取消范围内"); } orderCrossCity.setState(10); tOrderCrossCityService.updateById(orderCrossCity); if (orderCrossCity.getDriverId() != null) { //修改司机信息 LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat() ? lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); String seat = ""; String[] split = orderCrossCity.getSeatNumber().split(","); for(String s : split){ seat += s + ","; } seat = lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1); //总和大于总座位数的情况 if(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat()){ seat = ""; for(int i = 1; i <= lineShiftDriver.getTotalSeat(); i++){ seat += i + ","; } seat = seat.substring(0, seat.length() - 1); } lineShiftDriver.setLaveSeatNumber(seat); lineShiftDriverMapper.updateById(lineShiftDriver); if(lineShiftDriver.getLaveSeat() >= lineShiftDriver.getTotalSeat()){ TDriver driver = tDriverService.selectById(orderCrossCity.getDriverId()); driver.setState(2); tDriverService.updateById(driver); } } //已支付的情况下进行退款操作 if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()){ if(orderCrossCity.getPayType()==5){ TDriver driver = tDriverService.selectById(orderCrossCity.getDriverId()); if(orderCrossCity.getPayMoney().doubleValue()>0) { } } if(orderCrossCity.getPayType() == 3){//余额支付 TUser userInfo = userService.selectById(orderCrossCity.getUserId()); userInfo.setBalance(userInfo.getBalance().add(orderCrossCity.getPayMoney())); userService.updateById(userInfo); //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", orderCrossCity.getPayMoney().doubleValue(), 1, 1, 1, 3, tOrderCrossCityId); if(orderCrossCity.getPayMoney().doubleValue()>0){ if(orderCrossCity.getOrderSource()==4){ } } }else{ PaymentRecord query = null; if(orderCrossCity.getOrderSource() == 4){ List query1 = paymentRecordService.query(1, orderCrossCity.getDriverId(), 2, tOrderCrossCityId, 3, orderCrossCity.getPayType(), 2); System.out.println(query1); query = paymentRecordService.query(1, orderCrossCity.getDriverId(), 2, tOrderCrossCityId, 3, orderCrossCity.getPayType(), 2).get(0); }else{ query = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, tOrderCrossCityId, 3, orderCrossCity.getPayType(), 2).get(0); } if(null == query){ return ResultUtil.error("订单还未进行支付"); } if(query.getPayType() == 1){//微信 // TODO 退款 //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId); }else if(query.getPayType()==4){ // TODO 退款 TUser userInfo = userService.selectById(orderCrossCity.getUserId()); userInfo.setBalance(userInfo.getBalance().add(orderCrossCity.getPayMoney())); userService.updateById(userInfo); //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", orderCrossCity.getPayMoney().doubleValue(), 1, 1, 1, 3, tOrderCrossCityId); System.out.println("退款"); String billNo = orderCrossCity.getBillNo(); // cancleMoney(orderCrossCity.getPayMoney(),billNo); }else{//支付宝 Map map = payMoneyUtil.aliRefund(query.getCode(), query.getAmount().toString()); if(!"10000".equals(map.get("code"))){ return ResultUtil.error(map.get("msg")); } //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId); } } } //添加取消记录 OrderCancel orderCancel = new OrderCancel(); orderCancel.setOrderId(tOrderCrossCityId); orderCancel.setOrderType(3); orderCancel.setReason("调度端取消订单"); orderCancel.setRemark("调度“" + user.getName() + "-" + user.getId() + "”执行取消操作"); orderCancel.setState(2); orderCancel.setInsertTime(new Date()); orderCancel.setUserType(3); orderCancel.setUserId(user.getId()); orderCancelMapper.insert(orderCancel); //增加推送 Map map1 = new HashMap<>(); map1.put("id", tOrderCrossCity.getId().toString()); map1.put("orderType", "3"); String result1 = HttpRequestUtil.postRequest(PushURL.cancel_order_url, map1); System.out.println("跨城出行取消:【orderId="+tOrderCrossCity.getId().toString()+"】,调用接口:"+result1); return ResultUtil.success(); } /** * 删除跨城出行订单 */ @RequestMapping(value = "/delete") @ResponseBody public Object delete(@RequestParam Integer tOrderCrossCityId) { TOrderCrossCity tOrderCrossCity = tOrderCrossCityService.selectById(tOrderCrossCityId); tOrderCrossCity.setIsDelete(2); tOrderCrossCityService.updateById(tOrderCrossCity); return SUCCESS_TIP; } }