package com.stylefeng.guns.modular.shunfeng.controller; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.shunfeng.model.OrderRide; import com.stylefeng.guns.modular.shunfeng.model.vo.ApiJson; import com.stylefeng.guns.modular.shunfeng.service.IDriverRideService; import com.stylefeng.guns.modular.shunfeng.service.IFinancialService; import com.stylefeng.guns.modular.shunfeng.service.IOrderRideService; import com.stylefeng.guns.modular.shunfeng.service.ITimeTaskService; import com.stylefeng.guns.modular.system.model.UserInfo; import com.stylefeng.guns.modular.system.service.ISystemNoticeService; import com.stylefeng.guns.modular.system.service.IUserInfoService; import com.stylefeng.guns.modular.system.util.CbyzxOrderPayHelper; import com.stylefeng.guns.modular.system.util.UUIDUtil; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Date; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * 支付相关接口 */ @Api("顺风车支付相关接口") @Controller @RequestMapping("/api/payInfo") public class PayInfoController { @Autowired private IOrderRideService orderRideService; @Autowired private ITimeTaskService timeTaskService; @Autowired private IUserInfoService userInfoService; @Autowired private ISystemNoticeService systemNoticeService; /*顺风车司机*/ @Autowired private IDriverRideService driverRideService; @Autowired private IFinancialService financialService; @Autowired private CbyzxOrderPayHelper cbyzxOrderPayHelper; /** * 顺风车支付 * @param orderId * @param couponId * @return */ @ResponseBody @PostMapping("/payBalanceRide") @ApiOperation(value = "余额支付", httpMethod = "POST") @ApiImplicitParams({ @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "int"), @ApiImplicitParam(name = "couponId", value = "优惠券id", dataType = "int"), }) public Object payBalanceRide(Integer orderId, Integer couponId) { try { OrderRide orderRide = orderRideService.selectById(orderId); if (orderRide.getState() == 6) { return ApiJson.returnNG("超出支付时间,订单已自动取消"); } if (orderRide.getState() == 2) { return ApiJson.returnNG("该订单已支付"); } orderRide.setPayTime(new Date()); orderRide.setPayType(1);//1余额 orderRide.setState(2);//已支付 Double couponMoney = 0d; Integer cid = 0;//优惠券id String couponName = ""; /*todo 如果使用了优惠券*/ if (couponId != null && couponId > 0) { // orderRide.setCouponId(couponId); // CouponUser couponUser=couponUserService.selectById(couponId); // if(couponUser!=null){ // couponMoney=couponUser.getUsableMoney(); // cid=couponUser.getCouponId(); // couponName=couponUser.getCouponName(); // //标记优惠券已使用 // couponUser.setState(3); // couponUserService.updateById(couponUser); // } } /*支付金额=订单金额-优惠券*/ Double money = orderRide.getMoney() - couponMoney < 0 ? 0 : orderRide.getMoney() - couponMoney; //减去用户余额 UserInfo userInfo = userInfoService.selectById(orderRide.getUserId()); if ((userInfo.getBalance() == null ? 0 : userInfo.getBalance()) < money) { return ApiJson.returnNG("用户余额不足"); } if (cid > 0) { //todo 优惠券总额 // Coupon coupon=couponService.selectById(cid); // //优惠券类型(1注册、2分享、3活动、4验票) // coupon.setUseNumber(coupon.getUseNumber()+1); // coupon.setUseMoney(coupon.getUseMoney()+couponMoney); // couponService.updateById(coupon); // orderRide.setCouponName(couponName); // orderRide.setCouponMoney(couponMoney); } orderRideService.updateById(orderRide); //系统消息 systemNoticeService.addSystemNotice(1, "您成功支付从" + orderRide.getStartName() + "到" + orderRide.getEndName() + "的顺风车订单", orderRide.getUserId(), 1); /*修改用户余额*/ userInfo.setBalance(userInfo.getBalance() - money); userInfoService.updateById(userInfo); } catch (Exception e) { e.printStackTrace(); } return ApiJson.returnOK("支付成功"); } /** * 线上支付 * @param orderId 订单ID * @param type (1:订单支付,2:充值 3:出租车红包支付,4:服务费用缴费,5顺风车支付) * @param payType (1:支付宝,2:微信 3:银行卡 ,4:小程序) * @param isBalance (是否开启余额支付 1否,2是) * @param code 微信小程序支付需要 * @return */ @ResponseBody @PostMapping("/payOnline") @ApiOperation(value = "线上支付", httpMethod = "POST") @ApiImplicitParams({ @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "int"), @ApiImplicitParam(name = "payType", value = "支付类型 1=支付宝,2 = 微信 3:银行卡 4:小程序", dataType = "int"), @ApiImplicitParam(name = "path", value = "前端支付很后的跳转页面", dataType = "string"), @ApiImplicitParam(name = "ip", value = "前端支付IP地址", dataType = "string"), }) public Object payOnline(Integer orderId, Integer type, String code, Integer payType, Integer isBalance, String path, String ip, HttpServletRequest request, Integer couponId) { try { if (orderId == null || orderId == 0) { return ApiJson.returnNG("订单ID不能为空"); } if (type == null || type == 0) { return ApiJson.returnNG("type不能为空"); } if (payType == null || payType == 0) { return ApiJson.returnNG("payType不能为空"); } if (ToolUtil.isNotEmpty(code)) { /*根据微信端的code获取openId*/ // openId=new JsapiTicketUtilX().getOpenId(code); } OrderRide orderRide = orderRideService.selectById(orderId); if (orderRide.getState() == 6) { return ApiJson.returnNG("该订单已取消"); } if (orderRide.getState() == 2) {//已支付 return ApiJson.returnNG("该订单不需要支付"); } UserInfo userInfo = userInfoService.selectById(orderRide.getUserId()); if (userInfo == null) { return ApiJson.returnNG("用户信息不存在"); } String outTradeNo = orderId + "_8_" + UUIDUtil.getRandomCode(5); JSONObject response = cbyzxOrderPayHelper.createOrder(orderRide.getUserId(), userInfo.getAppletsOpenId(), outTradeNo, orderRide.getMoney()); if (!cbyzxOrderPayHelper.isCreateSuccess(response)) { return ApiJson.returnNG(cbyzxOrderPayHelper.extractMessage(response), response); } return ApiJson.returnOK(response); } catch (Exception e) { e.printStackTrace(); } return ApiJson.returnNG("购票失败"); } /** * 支付宝回调 * @return */ @ResponseBody @RequestMapping("/alipay/notify") public void notifyUrl(HttpServletRequest request, HttpServletResponse response) { new PayUtil().notifyUrl(request, response); } /** * 微信回调 * @param request * @param response */ @ResponseBody @RequestMapping("/wxpay/notify") public void wxnotify(HttpServletRequest request, HttpServletResponse response) { new PayUtil().wxnotify(request, response); } }