| | |
| | | package com.stylefeng.guns.modular.system.controller.specialTrain; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | 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.beetl.ShiroExtUtil; |
| | | import com.stylefeng.guns.core.common.constant.factory.PageFactory; |
| | | 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.controller.general.TDriverController; |
| | | import com.stylefeng.guns.modular.system.controller.util.GetOpenBodySig; |
| | | 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 com.stylefeng.guns.modular.system.util.HttpRequestUtil; |
| | | import com.stylefeng.guns.modular.system.util.PayMoneyUtil; |
| | | import com.stylefeng.guns.modular.system.util.PushURL; |
| | | import com.stylefeng.guns.modular.system.util.ResultUtil; |
| | | import org.apache.commons.lang.time.DateFormatUtils; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.model.*; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.domain.Sort; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 跨城出行订单控制器 |
| | |
| | | private MongoTemplate mongoTemplate; |
| | | @Autowired |
| | | private ShiroExtUtil shiroExtUtil; |
| | | |
| | | |
| | | @Autowired |
| | | private IUserService sysUserService; |
| | | @Autowired |
| | | private ITCompanyService iTCompanyService; |
| | | |
| | | |
| | | /** |
| | | * 跳转到跨城出行订单首页 |
| | | */ |
| | |
| | | Integer serverCarModelId, |
| | | String driver, |
| | | Integer lineId, |
| | | Integer state) { |
| | | Integer state, |
| | | Integer abnormal, |
| | | Integer promotion, |
| | | String promotionUser) { |
| | | String beginTime = null; |
| | | String endTime = null; |
| | | if (SinataUtil.isNotEmpty(insertTime)){ |
| | |
| | | endTime = timeArray[1]; |
| | | } |
| | | Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage(); |
| | | page.setRecords(tOrderCrossCityService.getCrossCityOrderList(page, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state)); |
| | | page.setRecords(tOrderCrossCityService.getCrossCityOrderList(page, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state, abnormal, promotion, promotionUser,null)); |
| | | 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, 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<Map<String, Object>> list = tOrderCrossCityService.getCrossCityOrderListExport(null, beginTime, endTime, shiroExtUtil.getUser().getRoleType(), shiroExtUtil.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, lineId, state, abnormal, promotion, promotionUser,null); |
| | | |
| | | // 表格数据【封装】 |
| | | List<List<String>> dataList = new ArrayList<>(); |
| | | |
| | | //第一行显示【封装】 |
| | | List<String> twoList = new ArrayList<String>(); |
| | | twoList.add("总计:"); |
| | | twoList.add(String.valueOf(list.size())+"条"); |
| | | dataList.add(twoList); |
| | | |
| | | // 列【封装】 |
| | | List<String> shellList = new ArrayList<String>(); |
| | | 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<String,Object> object : list){ |
| | | // 详细数据列【封装】 |
| | | shellList = new ArrayList<String>(); |
| | | 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("-"); |
| | | } |
| | | |
| | | // 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; |
| | |
| | | |
| | | @Autowired |
| | | private IIncomeService incomeService; |
| | | |
| | | @Autowired |
| | | private TDriverController tDriverController; |
| | | |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | //中台修改订单状态 |
| | | ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest(); |
| | | request1.setOrderId(orderCrossCity.getTravelId()); |
| | | request1.setStatus(orderCrossCity.getState()); |
| | | if (null != orderCrossCity.getDriverId()) { |
| | | TDriver driver2 = tDriverService.selectById(orderCrossCity.getDriverId()); |
| | | TCompany company = iTCompanyService.selectById(driver2.getCompanyId()); |
| | | request1.setDriverId(driver2.getEmpId().toString()); |
| | | request1.setSupplierShopId(company.getEnterCode()); |
| | | } |
| | | if (2 == orderCrossCity.getPromotion() && null != orderCrossCity.getPromotionDriverId()) { |
| | | TDriver driver2 = tDriverService.selectById(orderCrossCity.getPromotionDriverId()); |
| | | request1.setPromoterId(driver2.getEmpId().toString()); |
| | | } |
| | | OrderUtil.modifyTravelItinerary(request1); |
| | | |
| | | //未支付,调取消订单 |
| | | if(null == orderCrossCity.getPayType() && ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){ |
| | | OrderUtil.tradeOrderCancel(orderCrossCity.getTravelId()); |
| | | } |
| | | |
| | | //已支付的情况下进行退款操作 |
| | | if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()){ |
| | |
| | | } |
| | | |
| | | if(query.getPayType() == 1){//微信 |
| | | Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), tOrderCrossCityId + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay"); |
| | | if(!"SUCCESS".equals(map.get("return_code"))){ |
| | | return ResultUtil.error(map.get("return_msg")); |
| | | //中台订单退款操作 |
| | | if(ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){ |
| | | User user1 = sysUserService.selectById(user.getId()); |
| | | TradeOrderRefundRequest request = new TradeOrderRefundRequest(); |
| | | request.setPartnerPayId(orderCrossCity.getTravelId()); |
| | | request.setPayId(query.getCode()); |
| | | request.setRefundTotalFee(orderCrossCity.getPayMoney().multiply(new BigDecimal(100)).intValue() + ""); |
| | | request.setRemark("服务商取消订单退款"); |
| | | request.setRefundType("RF"); |
| | | |
| | | RefundInfoRequest refundInfo = new RefundInfoRequest(); |
| | | refundInfo.setPayItemId(orderCrossCity.getTravelId()); |
| | | refundInfo.setPayId(query.getCode()); |
| | | refundInfo.setTradeFee(orderCrossCity.getPayMoney().multiply(new BigDecimal(100)).intValue() + ""); |
| | | request.setRefundInfos(new ArrayList<RefundInfoRequest>(){{ |
| | | add(refundInfo); |
| | | }}); |
| | | TradeOrderRefund tradeOrderRefund = OrderUtil.tradeOrderRefund(request); |
| | | //退款通知 |
| | | OrderRefundNoticeRequest request2 = new OrderRefundNoticeRequest(); |
| | | request2.setOrderId(orderCrossCity.getTravelId()); |
| | | request2.setRefundPayNum(tradeOrderRefund.getRefundId()); |
| | | request2.setRefundType("5"); |
| | | request2.setApplyRefundCharge(orderCrossCity.getPayMoney()); |
| | | request2.setActualRefundCharge(orderCrossCity.getPayMoney()); |
| | | request2.setRefundAccount(user1.getEnterId().toString()); |
| | | request2.setRemark("服务商取消订单退款"); |
| | | OrderUtil.orderRefundNotice(request2); |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId); |
| | | } |
| | | }else if(query.getPayType()==4){ |
| | | // TODO 退款 |
| | |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId); |
| | | } |
| | | } |
| | | |
| | | //添加负的收入明细 |
| | | List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().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.setBusinessMoney(driver.getBusinessMoney() - income.getMoney()); |
| | | driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney()); |
| | | 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); |
| | | } |
| | | } |
| | | //添加取消记录 |
| | |
| | | return SUCCESS_TIP; |
| | | } |
| | | |
| | | |
| | | public static ResultUtil cancleMoney(BigDecimal amount,String no) throws Exception { |
| | | JSONObject json = new JSONObject(); |
| | | json.put("requestTimestamp", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss")); // 报文请求时间 |
| | | // json.put("merOrderId", Util.getMerOrderId("34U0")); // 商户订单号 |
| | | json.put("merOrderId", no); // 商户订单号 |
| | | json.put("mid", "898150841210108"); // 商户号 |
| | | json.put("tid", "84UJWSE8"); // 终端号 |
| | | json.put("instMid", "QRPAYDEFAULT"); // 业务类型 |
| | | BigDecimal multiply = amount.multiply(new BigDecimal(100)); |
| | | int money = multiply.intValue(); |
| | | json.put("refundAmount",money); // 支付总金额 |
| | | System.err.println("请求报文json:\n" + json); |
| | | String url = "https://test-api-open.chinaums.com/v1/netpay/refund"; |
| | | // String url = "https://api-mop.chinaums.com/v1/netpay/refund"; |
| | | //OPEN-BODY-SIG 方式 |
| | | String result = GetOpenBodySig.sendOpenBodySig(url, json.toString()); |
| | | System.err.println("响应报文json:\n" + result); |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | Object appPayRequest = jsonObject.get("appPayRequest"); |
| | | System.out.println(appPayRequest); |
| | | return ResultUtil.success(appPayRequest); |
| | | } |
| | | |
| | | @Autowired |
| | | private ITEnterpriseWithdrawalService tEnterpriseWithdrawalService; |
| | | @Autowired |
| | | private IUserWithdrawalService userWithdrawalService; |
| | | |
| | | |
| | | } |