package com.stylefeng.guns.modular.system.controller.specialTrain; import com.alibaba.fastjson.JSONArray; 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.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.HttpRequestUtil; import com.stylefeng.guns.modular.system.util.PushURL; import com.stylefeng.guns.modular.system.util.ResultUtil; 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.*; import javax.annotation.Resource; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.math.BigDecimal; 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; @Value("${filePath}") private String filePath; @Autowired private ITDriverService tDriverService; @Resource private LineShiftDriverMapper lineShiftDriverMapper; @Autowired private ITUserService userService; @Autowired private ITransactionDetailsService transactionDetailsService; @Autowired private IPaymentRecordService paymentRecordService; @Resource private OrderCancelMapper orderCancelMapper; @Autowired private IIncomeService incomeService; /** * 跳转到跨城出行订单首页 */ @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"; } /* @Autowired private ICBCPayUtil icbcPayUtil;*/ /** * 获取订单轨迹 * @param orderDetailId * @return */ @ResponseBody @RequestMapping(value = "/getOrderTrack", method = RequestMethod.POST) public ResultUtil getOrderTrack(String orderDetailId){ if(ToolUtil.isNotEmpty(orderDetailId)){ try { //将数据存储到文件中 File file = new File(filePath + orderDetailId + "_3.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 list = JSONArray.parseArray(sb.toString(), TOrderPosition.class); // List list = tOrderPositionService.selectList(new EntityWrapper().eq("orderType", 3).eq("orderId", orderDetailId).orderBy("insertTime")); /*if(list.size() == 0){ return ResultUtil.error("该订单没有运行轨迹"); }*/ resultUtil = ResultUtil.success(list); }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) { 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)); return super.packForBT(page); } /** * 取消跨城出行订单 */ @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); } } //调用推送 Map map = new HashMap<>(); map.put("id", orderCrossCity.getId().toString()); map.put("orderType", "3"); map.put("from", "admin"); String result = HttpRequestUtil.postRequest(PushURL.cancel_order_url, map); System.out.println("跨城出行取消:【orderId="+orderCrossCity.getId().toString()+"】,调用接口:"+result); //已支付的情况下进行退款操作 if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()) { if (orderCrossCity.getPayType() == 3) {//余额支付 TUser tUser = userService.selectById(orderCrossCity.getUserId()); tUser.setBalance(tUser.getBalance().add(orderCrossCity.getPayMoney())); userService.updateById(tUser); //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城订单取消退款", orderCrossCity.getPayMoney().doubleValue(), 1, 1, 1, 3, tOrderCrossCityId); } else { PaymentRecord query = paymentRecordService.query(1, null, null, tOrderCrossCityId, 3, null, 2); if (null == query) { return ResultUtil.error("订单还未进行支付"); } /*Map merrefund = icbcPayUtil.merrefund(query.getCode(), "", query.getAmount(), tOrderCrossCityId + "_3", orderCrossCity.getOrderNum()); if (Integer.valueOf(merrefund.get("code").toString()) == 0) { boolean b = true; while (b) { Map refundqry = icbcPayUtil.refundqry("", query.getCode(), orderCrossCity.getOrderNum()); if (Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 0) {//成功 //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城订单取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId); } if (Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 1) {//失败 return ResultUtil.error("订单取消失败(退款不成功)"); } if (Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 2) {//未知 return ResultUtil.error("退款返回未知异常"); } } }*/ } //添加负的收入明细 List incomes = incomeService.selectList(new EntityWrapper().eq("type", 2).eq("incomeId", tOrderCrossCityId).eq("orderType", 3)); for(Income income : incomes){ if(income.getUserType() == 2){//处理司机的收入 TDriver driver = tDriverService.selectById(income.getObjectId()); driver.setBalance(driver.getBalance().subtract(new BigDecimal(income.getMoney()))); driver.setLaveBusinessMoney(new BigDecimal(driver.getLaveBusinessMoney()).subtract(new BigDecimal(income.getMoney())).doubleValue()); driver.setBusinessMoney(new BigDecimal(driver.getBusinessMoney()).subtract(new BigDecimal(income.getMoney())).doubleValue()); tDriverService.updateById(driver); } Income income1 = new Income(); BeanUtils.copyProperties(income, income1); income1.setMoney(income.getMoney() * -1); income1.setId(null); income1.setInsertTime(new Date()); incomeService.insert(income1); } } //添加取消记录 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"); map1.put("from", "admin"); String result1 = HttpRequestUtil.postRequest(PushURL.cancel_order_url, map1); System.out.println("跨城出行取消:【orderId="+tOrderCrossCity.getId().toString()+"】,调用接口:"+result1); return SUCCESS_TIP; } /** * 删除跨城出行订单 */ @RequestMapping(value = "/delete") @ResponseBody public Object delete(@RequestParam Integer tOrderCrossCityId) { TOrderCrossCity tOrderCrossCity = tOrderCrossCityService.selectById(tOrderCrossCityId); tOrderCrossCity.setIsDelete(2); tOrderCrossCityService.updateById(tOrderCrossCity); return SUCCESS_TIP; } }