package com.dsh.guns.modular.system.controller.specialTrain; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.feignClient.account.IncomeClient; import com.dsh.course.feignClient.activity.TUserClinet; import com.dsh.course.feignClient.driver.DriverClient; import com.dsh.course.feignClient.driver.model.DriverInfoReq; import com.dsh.course.feignClient.driver.model.DriverInfoRes; import com.dsh.course.feignClient.order.OrderLogisticsClient; import com.dsh.course.feignClient.order.OrderPrivateCarClient; import com.dsh.course.feignClient.order.ReassignClient; import com.dsh.course.feignClient.order.TransactionDetailsClient; import com.dsh.course.feignClient.order.model.*; import com.dsh.course.feignClient.orderCancel.OrderCancelClient; import com.dsh.course.feignClient.orderCancel.model.OrderCancelRes; import com.dsh.course.feignClient.payment.PaymentClient; import com.dsh.course.feignClient.payment.model.QueryPaymentRecordReq; import com.dsh.guns.core.base.controller.BaseController; import com.dsh.guns.core.common.constant.factory.PageFactory; import com.dsh.guns.core.log.LogObjectHolder; import com.dsh.guns.core.util.SinataUtil; import com.dsh.guns.modular.system.model.*; import com.dsh.guns.modular.system.util.HttpRequestUtil; import com.dsh.guns.modular.system.util.PushURL; import com.dsh.guns.modular.system.util.ResultUtil; 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 java.math.BigDecimal; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 专车改派管理控制器 * * @author fengshuonan * @Date 2020-09-03 14:20:27 */ @Controller @RequestMapping("/tReassign") public class TReassignController extends BaseController { private String PREFIX = "/system/tReassign/"; @Autowired private ReassignClient reassignClient; @Autowired private OrderPrivateCarClient itOrderPrivateCarService; @Autowired private DriverClient driverClient; @Autowired private OrderCancelClient orderCancelMapper; // @Autowired // private ICBCPayUtil icbcPayUtil; @Autowired private TUserClinet userClinet; @Autowired private TransactionDetailsClient transactionDetailsClient; @Autowired private PaymentClient paymentClient; @Autowired private IncomeClient incomeClient; @Autowired private OrderLogisticsClient orderLogisticsClient; /** * 跳转到专车改派管理首页 */ @RequestMapping("") public String index() { return PREFIX + "tReassign.html"; } /** * 跳转到小件物流改派管理首页 */ @RequestMapping("/smallPieceLogistics") public String smallPieceLogistics() { return PREFIX + "smallPieceLogistics.html"; } /** * 跳转到添加专车改派管理 */ @RequestMapping("/tReassign_add") public String tReassignAdd() { return PREFIX + "tReassign_add.html"; } /** * 跳转到修改专车改派管理 */ @RequestMapping("/tReassign_update/{tReassignId}") public String tReassignUpdate(@PathVariable Long tReassignId, Model model) { TReassign tReassign = reassignClient.queryReassignById(tReassignId); model.addAttribute("item",tReassign); LogObjectHolder.me().set(tReassign); return PREFIX + "tReassign_edit.html"; } /** * 跳转到修改专车改派管理 */ @RequestMapping("/tReassign_reassignment/{tReassignId}") public String tReassign_reassignment(@PathVariable Integer tReassignId, Model model) { model.addAttribute("tReassignId",tReassignId); return PREFIX + "tReassign_reassignment.html"; } /** * 获取摩托改派管理列表 */ @RequestMapping(value = "/list") @ResponseBody public Object list(String insertTime, String originalDriverName, String originalDriverPhone, String orderNum, String nowDriverName, String nowDriverPhone, Integer orderState, 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(reassignClient.getPrivateCarReassignOrderList(new PrivateCarReassignReq(page,ShiroKit.getUser().getRoleType(),ShiroKit.getUser().getObjectId(),beginTime,endTime,originalDriverName,originalDriverPhone,orderNum,nowDriverName,nowDriverPhone,orderState,state))); return super.packForBT(page); } /** * 选择司机列表 */ @RequestMapping(value = "/selectDriver/{orderId}") @ResponseBody public Object selectDriver(@PathVariable Long orderId, String name, String phone) { // TReassign reassign = tReassignService.selectById(orderId); TReassign reassign = reassignClient.queryReassignById(orderId); OrderPrivateCar privateCar = itOrderPrivateCarService.selectById(reassign.getOrderId()); Page> page = new PageFactory>().defaultPage(); page.setRecords(reassignClient.getCanSelectPrivateCarDriverList(new QueryCanSelectPrivateCarDriverReq(page,privateCar.getCompanyId(),name,phone))); return super.packForBT(page); } /** * 选择司机列表 */ // @RequestMapping(value = "/selectCrossDriver/{orderId}") // @ResponseBody // public Object selectCrossDriver(@PathVariable Integer orderId, // String name, // String phone) { // TReassign reassign = tReassignService.selectById(orderId); // TOrderCrossCity tOrderCrossCity = itOrderCrossCityService.selectById(reassign.getOrderId()); // LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(tOrderCrossCity.getLineShiftDriverId()); // Page> page = new PageFactory>().defaultPage(); // page.setRecords(tReassignService.getCanSelectCrossDriverList(page, tOrderCrossCity.getCompanyId(), tOrderCrossCity.getServerCarModelId(), // tOrderCrossCity.getLineId(), lineShiftDriver.getLineShiftId(), tOrderCrossCity.getTravelTime(), tOrderCrossCity.getPeopleNumber(), name, phone, tOrderCrossCity.getDriverId())); // return super.packForBT(page); // } /** * 选择司机列表 */ @RequestMapping(value = "/selectSmallDriver/{orderId}") @ResponseBody public Object selectSmallDriver(@PathVariable Long orderId, String name, String phone) { // TReassign reassign = tReassignService.selectById(orderId); TReassign reassign = reassignClient.queryReassignById(orderId); // TOrderLogistics tOrderLogistics = orderLogisticsService.selectById(reassign.getOrderId()); TOrderLogistics tOrderLogistics = orderLogisticsClient.queryByOrderId(reassign.getOrderId()); Page> page = new PageFactory>().defaultPage(); page.setRecords(reassignClient.getCanSelectSmallDriverList(new QueryCanSelectSmallDriverReq(page,tOrderLogistics.getCompanyId(), tOrderLogistics.getType(),name,phone))); return super.packForBT(page); } /** * 操作专车改派管理 * optType 1=拒绝 2=取消 */ @RequestMapping(value = "/opt") @ResponseBody public Object opt(@RequestParam Long tReassignId,@RequestParam Integer optType) { // ShiroUser user = ShiroKit.getUser(); // TReassign tReassign = tReassignService.selectById(tReassignId); TReassign tReassign = reassignClient.queryReassignById(tReassignId); if (1 == optType){ tReassign.setState(5); reassignClient.updateById(tReassign); //还原订单状态 OrderPrivateCar tOrderPrivateCar = itOrderPrivateCarService.selectById(tReassign.getOrderId()); tOrderPrivateCar.setState(tOrderPrivateCar.getOldState()); itOrderPrivateCarService.updateByIds(new UpdateStateReq(tOrderPrivateCar.getId(),tOrderPrivateCar.getOldState())); }else if (2 == optType){ tReassign.setState(4); reassignClient.updateById(tReassign); //修改订单状态"已取消" OrderPrivateCar tOrderPrivateCar = itOrderPrivateCarService.selectById(tReassign.getOrderId()); tOrderPrivateCar.setState(10); itOrderPrivateCarService.updateByIds(new UpdateStateReq(tOrderPrivateCar.getId(),10)); //修改司机状态"空闲" DriverInfoRes driver = driverClient.getDriver(tReassign.getOriginalDriverId()); driver.setState(2); DriverInfoReq driverInfoReq = new DriverInfoReq(); BeanUtils.copyProperties(driver,driverInfoReq); driverClient.updateDriver(driverInfoReq); //添加取消记录 OrderCancel orderCancel = new OrderCancel(); orderCancel.setOrderId(tReassign.getOrderId()); orderCancel.setOrderType(tReassign.getOrderType()); orderCancel.setReason("调度端取消订单"); // orderCancel.setRemark("调度“" + user.getName() + "-" + user.getId() + "”执行取消操作"); orderCancel.setState(2); orderCancel.setInsertTime(new Date()); orderCancel.setUserType(3); // orderCancel.setUserId(user.getId()); OrderCancelRes orderCancelRes = new OrderCancelRes(); BeanUtils.copyProperties(orderCancel,orderCancelRes); orderCancelMapper.saveOrderCancel(orderCancelRes); //调用推送 Map 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); } //返回驾驶员处罚金 DriverInfoRes originalDriver = driverClient.getDriver(tReassign.getOriginalDriverId()); //增加交易明细 TPubTransactionDetails details = new TPubTransactionDetails(); details.setUserId(originalDriver.getId()); details.setInsertTime(new Date()); details.setRemark("【专车改派】:改派失败或订单取消"); details.setMoney(new BigDecimal(tReassign.getMoney())); details.setState(1); details.setType(1); details.setUserType(2); details.setOrderType(3); details.setOrderId(tReassign.getOrderId()); TransactionDetailsReq transactionDetailsReq = new TransactionDetailsReq(); BeanUtils.copyProperties(details,transactionDetailsReq); transactionDetailsClient.addTransactionDetails(transactionDetailsReq); return SUCCESS_TIP; } /** * 操作专车改派管理 * optType 1=拒绝 2=取消 */ @RequestMapping(value = "/optSmall") @ResponseBody public Object optSmall(@RequestParam Long tReassignId,@RequestParam Integer optType) { try { // ShiroUser user = ShiroKit.getUser(); TReassign tReassign = reassignClient.queryReassignById(tReassignId); if (1 == optType){ tReassign.setState(5); reassignClient.updateById(tReassign); //还原订单状态 TOrderLogistics tOrderLogistics = orderLogisticsClient.queryByOrderId(tReassign.getOrderId()); tOrderLogistics.setState(tOrderLogistics.getOldState()); OrderLogisticsInfoReq orderLogisticsInfoReq = new OrderLogisticsInfoReq(); BeanUtils.copyProperties(tOrderLogistics,orderLogisticsInfoReq); orderLogisticsClient.updateOrderLogistics(orderLogisticsInfoReq); }else if (2 == optType){ tReassign.setState(4); reassignClient.updateById(tReassign); //修改订单状态"已取消" TOrderLogistics tOrderLogistics = orderLogisticsClient.queryByOrderId(tReassign.getOrderId()); tOrderLogistics.setState(10); OrderLogisticsInfoReq orderLogisticsInfoReq = new OrderLogisticsInfoReq(); BeanUtils.copyProperties(tOrderLogistics,orderLogisticsInfoReq); orderLogisticsClient.updateOrderLogistics(orderLogisticsInfoReq); //添加取消记录 OrderCancel orderCancel = new OrderCancel(); orderCancel.setOrderId(tReassign.getOrderId()); orderCancel.setOrderType(tReassign.getOrderType()); orderCancel.setReason("调度端取消订单"); // orderCancel.setRemark("调度“" + user.getName() + "-" + user.getId() + "”执行取消操作"); orderCancel.setState(2); orderCancel.setInsertTime(new Date()); orderCancel.setUserType(3); // orderCancel.setUserId(user.getId()); OrderCancelRes orderCancelRes = new OrderCancelRes(); BeanUtils.copyProperties(orderCancel,orderCancelRes); orderCancelMapper.saveOrderCancel(orderCancelRes); //调用推送 Map map = new HashMap<>(); map.put("id", tOrderLogistics.getId().toString()); map.put("orderType", tOrderLogistics.getType().toString()); String result = HttpRequestUtil.postRequest(PushURL.cancel_order_url, map); System.out.println("小件物流取消:【orderId="+tOrderLogistics.getId().toString()+"】,调用接口:"+result); //已支付的情况下进行退款操作 if(null != tOrderLogistics.getPayType() && null != tOrderLogistics.getPayMoney()) { if (tOrderLogistics.getPayType() == 3) {//余额支付 TUser tUser = userClinet.queryById(tOrderLogistics.getUserId()); tUser.setBalance(tUser.getBalance().add(tOrderLogistics.getPayMoney())); userClinet.updateById(tUser); } else { List paymentRecords = paymentClient.queryPaymentRecordList(new QueryPaymentRecordReq(1, null, null, tOrderLogistics.getId().longValue(), tOrderLogistics.getType(), null, 2)); if (paymentRecords.size() == 0) { return ResultUtil.error("订单还未进行支付"); } boolean b = false; // for(PaymentRecord query : paymentRecords){ // Map merrefund = icbcPayUtil.merrefund(query.getCode(), "", query.getAmount(), tOrderLogistics.getId() + "_" + tOrderLogistics.getType(), tOrderLogistics.getOrderNum()); // if (Integer.valueOf(merrefund.get("code").toString()) == 0) { // Map refundqry = icbcPayUtil.refundqry("", query.getCode(), tOrderLogistics.getOrderNum()); // if (Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 0) {//成功 // b = true; // } // 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("退款返回未知异常"); // } // } // } if(b){ //添加交易明细 } } transactionDetailsClient.addTransactionDetails(new TransactionDetailsReq(tOrderLogistics.getUserId(), "小件订单取消退款", tOrderLogistics.getPayMoney().doubleValue(), 1, 1, 1, 4, tOrderLogistics.getId())); //添加负的收入明细 List incomes = incomeClient.selectList(new QueryWrapper().eq("type", 2).eq("incomeId", tOrderLogistics.getId()).eq("orderType", tOrderLogistics.getType())); for(Income income : incomes){ if(income.getUserType() == 2){//处理司机的收入 DriverInfoRes driver = driverClient.getDriver(income.getObjectId()); driver.setBalance(new BigDecimal(driver.getBalance()).subtract(new BigDecimal(income.getMoney())).doubleValue()); // if(driver.getLaveBusinessMoney().compareTo(income.getMoney()) >= 0){ // driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() -income.getMoney()); // }else{ // double b = driver.getLaveBusinessMoney() - income.getMoney(); // driver.setLaveBusinessMoney(0d); // driver.setLaveActivityMoney(driver.getLaveActivityMoney() - b); // } DriverInfoReq driverInfoReq = new DriverInfoReq(); BeanUtils.copyProperties(driver,driverInfoReq); driverClient.updateDriver(driverInfoReq); } Income income1 = new Income(); BeanUtils.copyProperties(income, income1); income1.setMoney(income.getMoney() * -1); income1.setId(null); income1.setInsertTime(new Date()); incomeClient.insert(income1); } } } //返回驾驶员处罚金 DriverInfoRes originalDriver = driverClient.getDriver(tReassign.getOriginalDriverId()); //增加交易明细 TPubTransactionDetails details = new TPubTransactionDetails(); details.setUserId(originalDriver.getId()); details.setInsertTime(new Date()); details.setRemark("【小件物流】:改派失败或订单取消"); details.setMoney(new BigDecimal(tReassign.getMoney())); details.setState(1); details.setType(1); details.setUserType(2); details.setOrderType(tReassign.getOrderType()); details.setOrderId(tReassign.getOrderId()); TransactionDetailsReq transactionDetailsReq = new TransactionDetailsReq(); BeanUtils.copyProperties(details,transactionDetailsReq); transactionDetailsClient.addTransactionDetails(transactionDetailsReq); }catch (Exception e){ e.printStackTrace(); } return SUCCESS_TIP; } /** * 专车订单改派司机 */ @RequestMapping(value = "/selectDriver") @ResponseBody public Object selectDriver(@RequestParam Long orderId,@RequestParam Integer driverId) { //修改订单 TReassign tReassign = reassignClient.queryReassignById(orderId); OrderPrivateCar tOrderPrivateCar = itOrderPrivateCarService.selectById(tReassign.getOrderId()); //修改之前司机状态 -- 空闲 DriverInfoRes oldDriver = driverClient.getDriver(tReassign.getOriginalDriverId()); oldDriver.setState(2); DriverInfoReq driverInfoReq = new DriverInfoReq(); BeanUtils.copyProperties(oldDriver,driverInfoReq); driverClient.updateDriver(driverInfoReq); //查找司机对象 DriverInfoRes nowDriver = driverClient.getDriver(driverId); nowDriver.setState(3); DriverInfoReq driverInfoReq1 = new DriverInfoReq(); BeanUtils.copyProperties(nowDriver,driverInfoReq1); driverClient.updateDriver(driverInfoReq1); //修改专车订单 tOrderPrivateCar.setState(tOrderPrivateCar.getOldState()); tOrderPrivateCar.setDriverId(driverId); tOrderPrivateCar.setCarId(nowDriver.getCarId()); itOrderPrivateCarService.updateById2s(tOrderPrivateCar); //修改专车改派订单 tReassign.setNowDriverId(driverId); tReassign.setNowCarId(nowDriver.getCarId()); tReassign.setState(3); tReassign.setCompleteTime(new Date()); reassignClient.updateById(tReassign); //增加推送 Map map = new HashMap<>(); map.put("orderId", tOrderPrivateCar.getId().toString()); map.put("orderType", "1"); String result = HttpRequestUtil.postRequest(PushURL.order_push_url, map); System.out.println("专车改派:【orderId="+tOrderPrivateCar.getId().toString()+"】,调用接口:"+result); return SUCCESS_TIP; } /** * 专车订单改派司机 */ @RequestMapping(value = "/selectSmallDriver") @ResponseBody public Object selectSmallDriver(@RequestParam Long orderId,@RequestParam Integer driverId) { //修改订单 TReassign tReassign = reassignClient.queryReassignById(orderId); TOrderLogistics tOrderLogistics = orderLogisticsClient.queryByOrderId(tReassign.getOrderId()); DriverInfoRes nowDriver = driverClient.getDriver(driverId); //修改专车订单 tOrderLogistics.setState(tOrderLogistics.getOldState()); tOrderLogistics.setDriverId(driverId); tOrderLogistics.setCarId(nowDriver.getCarId()); OrderLogisticsInfoReq orderLogisticsInfoReq = new OrderLogisticsInfoReq(); BeanUtils.copyProperties(tOrderLogistics,orderLogisticsInfoReq); orderLogisticsClient.updateOrderLogistics(orderLogisticsInfoReq); tReassign.setNowDriverId(driverId); tReassign.setNowCarId(nowDriver.getCarId()); tReassign.setState(3); tReassign.setCompleteTime(new Date()); reassignClient.updateById(tReassign); List incomes = incomeClient.selectList(new QueryWrapper().eq("userType", 2).eq("type", 2).eq("incomeId", tOrderLogistics.getId()).eq("orderType", tOrderLogistics.getType())); for(Income income : incomes){ income.setObjectId(driverId); incomeClient.updateById(income); DriverInfoRes driver = driverClient.getDriver(tReassign.getOriginalDriverId()); driver.setBalance(new BigDecimal(driver.getBalance()).subtract(new BigDecimal(income.getMoney())).doubleValue()); // driver.setBusinessMoney(driver.getBusinessMoney() - income.getMoney()); // driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney()); DriverInfoReq driverInfoReq = new DriverInfoReq(); BeanUtils.copyProperties(driver,driverInfoReq); driverClient.updateDriver(driverInfoReq); driver = driverClient.getDriver(driverId); driver.setBalance(new BigDecimal(driver.getBalance()).add(new BigDecimal(income.getMoney())).doubleValue()); // driver.setBusinessMoney(driver.getBusinessMoney() + income.getMoney()); // driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() + income.getMoney()); DriverInfoReq driverInfoReq1 = new DriverInfoReq(); BeanUtils.copyProperties(driver,driverInfoReq); driverClient.updateDriver(driverInfoReq1); } //增加推送 Map map = new HashMap<>(); map.put("orderId", tOrderLogistics.getId().toString()); map.put("orderType", tOrderLogistics.getType().toString()); String result = HttpRequestUtil.postRequest(PushURL.order_push_url, map); System.out.println("小件物流改派:【orderId="+tOrderLogistics.getId().toString()+"】,调用接口:"+result); return SUCCESS_TIP; } }