From 9cf6d184a1b8a3a2a951a6842a586906747d46cd Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 05 八月 2025 20:56:43 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 61 ++ UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java | 23 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/controller/OrderPrivateCarController.java | 70 ++ UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BaseWarpper.java | 11 DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverAlipayServiceImpl.java | 127 +++- ManagementZYTravel/guns-admin/pom.xml | 6 ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOpenCity.java | 14 ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/alipay/AlipayProperties.java | 63 ++ DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverAlipayController.java | 28 + UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java | 37 + DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverAlipayService.java | 10 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 903 ++++++++++++++++++++++++-------- DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverAlipay.java | 14 ManagementZYTravel/guns-admin/src/main/resources/application.yml | 11 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java | 48 + DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java | 36 + UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCity.java | 14 ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/alipay/AlipayUtils.java | 118 ++++ 18 files changed, 1,324 insertions(+), 270 deletions(-) diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverAlipayController.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverAlipayController.java index fca7161..09cfcbd 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverAlipayController.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverAlipayController.java @@ -139,4 +139,32 @@ } } + /** + * 账户余额提现操作 + * @param money + * @param request + * @return + */ + @ResponseBody + @PostMapping("/api/withdrawal/aliWithdrawal") + @ApiOperation(value = "账户余额提现[0731]", tags = {"司机端-个人中心"}, notes = "") + @ApiImplicitParams({ + @ApiImplicitParam(value = "提现金额", name = "money", required = true, dataType = "double"), + @ApiImplicitParam(value = "支付宝账号id", name = "id", required = true, dataType = "int"), + @ApiImplicitParam(value = "提现类型(1=活动收入提现,2=业务收入提现)", name = "type", required = true, dataType = "int"), + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") + }) + public ResultUtil aliWithdrawal(Double money, Integer id, Integer type,HttpServletRequest request){ + try { + Integer uid = driverService.getUserIdFormRedis(request); + if(null == uid){ + return ResultUtil.tokenErr(); + } + return driverAlipayService.aliWithdrawal(money, id, uid, type); + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + } + } diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java index 2127df5..4e46bf9 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java @@ -444,7 +444,43 @@ @ApiModelProperty(value = "修改价格审核 1=待审核 2=通过") @TableField("priceAuditState") private Integer priceAuditState; + /** + * 预付金额 + */ + @TableField("paymentAdvanceMoney") + private Double paymentAdvanceMoney; + /** + * 支付方式(0:预付1:后付) + */ + @TableField("payMethod") + private Integer payMethod; + @ApiModelProperty(value = "支付流水号") + @TableField("transactionId") + private String transactionId; + public String getTransactionId() { + return transactionId; + } + + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + } + + public Integer getPayMethod() { + return payMethod; + } + + public void setPayMethod(Integer payMethod) { + this.payMethod = payMethod; + } + + public Double getPaymentAdvanceMoney() { + return paymentAdvanceMoney; + } + + public void setPaymentAdvanceMoney(Double paymentAdvanceMoney) { + this.paymentAdvanceMoney = paymentAdvanceMoney; + } public Integer getPriceAuditState() { return priceAuditState; } diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index 999e374..5518188 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -86,7 +86,8 @@ @Resource private UserInfoMapper userInfoMapper; - + @Autowired + private ITransactionDetailsService transactionDetailsService; @Autowired private ICompanyService companyService; @@ -94,7 +95,8 @@ private IIncomeService incomeService; @Autowired private ISpecialAreaBillingService specialAreaBillingService; - + @Autowired + private PayMoneyUtil payMoneyUtil; @Value("${filePath}") private String filePath; @@ -567,6 +569,61 @@ orderPrivateCar.setState(7); } + if(new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney()).compareTo(BigDecimal.ZERO)>0 && new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney()).compareTo(new BigDecimal(orderPrivateCar.getOrderMoney()))>-1) { + orderPrivateCar.setState(8); + // 退款情况 + if (new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney()).compareTo(new BigDecimal(orderPrivateCar.getOrderMoney())) > 0) { + // 退款 + if (orderPrivateCar.getPayType() == 1 && orderPrivateCar.getOrderMoney() != 0) {//微信退款 + // 微信退款 + payMoneyUtil.wxRefund(orderPrivateCar.getTransactionId(), orderPrivateCar.getOrderNum(), String.valueOf(orderPrivateCar.getPaymentAdvanceMoney()), String.valueOf(new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney()).subtract(new BigDecimal(orderPrivateCar.getOrderMoney()))), "/base/transferWXNotify"); + orderPrivateCar.setPayMoney(new BigDecimal(orderPrivateCar.getOrderMoney()).doubleValue()); + } + if (orderPrivateCar.getPayType() == 2 && orderPrivateCar.getOrderMoney() != 0) {//支付宝退款 + // 支付宝退款 + payMoneyUtil.aliRefund(orderPrivateCar.getTransactionId(), String.valueOf(new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney()).subtract(new BigDecimal(orderPrivateCar.getOrderMoney())).multiply(new BigDecimal(100)))); + orderPrivateCar.setPayMoney(new BigDecimal(orderPrivateCar.getOrderMoney()).doubleValue()); + } + if (orderPrivateCar.getPayType() == 3 && orderPrivateCar.getOrderMoney() != 0) {//余额支付 + BigDecimal refundMoney = new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney()).subtract(new BigDecimal(orderPrivateCar.getOrderMoney())); + // 余额退款 + UserInfo userInfo = userInfoMapper.selectById(orderPrivateCar.getUserId()); + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).add(refundMoney).doubleValue()); + userInfoMapper.updateById(userInfo); + //添加交易明细 + transactionDetailsService.saveData(orderPrivateCar.getUserId(), "专车差价退款", refundMoney.doubleValue(), 2, 1, 1, 1, orderPrivateCar.getId()); + } + } else { + orderPrivateCar.setPayMoney(new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney()).doubleValue()); + } + //添加已收入明细 + Company company = companyService.selectById(orderPrivateCar.getCompanyId()); + Double speMoney = company.getSpeMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 + if(c.compareTo(BigDecimal.ZERO)<1){ + c = BigDecimal.ZERO; + } + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); + d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); + incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + }else { + orderPrivateCar.setState(7); + } + // Map<String, String> map = chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX()); // if(String.valueOf(map.get("code")).equals("200")){ // orderPrivateCar.setTelX(""); diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverAlipay.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverAlipay.java index 8925a46..ce6a6d5 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverAlipay.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverAlipay.java @@ -40,6 +40,20 @@ */ @TableField("createTime") private Date createTime; + /** + * 身份证号 + * @return + */ + @TableField("idCard") + private String idCard; + + public String getIdCard() { + return idCard; + } + + public void setIdCard(String idCard) { + this.idCard = idCard; + } public Integer getId() { return id; diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverAlipayService.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverAlipayService.java index ecfec97..e8d0b79 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverAlipayService.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverAlipayService.java @@ -54,4 +54,14 @@ */ List<DriverAlipay> queryAlipay(Integer pageNum, Integer size, Integer driverId); + /** + * 提现 + * @param money + * @param id + * @param uid + * @param type + * @return + */ + ResultUtil aliWithdrawal(Double money, Integer id, Integer uid, Integer type); + } diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverAlipayServiceImpl.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverAlipayServiceImpl.java index 7afd8c7..967a7b8 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverAlipayServiceImpl.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverAlipayServiceImpl.java @@ -1,38 +1,21 @@ package com.stylefeng.guns.modular.system.service.impl; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; -import com.stylefeng.guns.core.common.constant.JwtConstants; -import com.stylefeng.guns.core.shiro.ShiroKit; -import com.stylefeng.guns.core.shiro.ShiroUser; -import com.stylefeng.guns.core.util.JwtTokenUtil; -import com.stylefeng.guns.core.util.ToolUtil; -import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; -import com.stylefeng.guns.modular.system.dao.*; -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.warpper.ActivityWarpper; -import com.stylefeng.guns.modular.system.warpper.BaseWarpper; -import com.stylefeng.guns.modular.system.warpper.LoginWarpper; -import com.stylefeng.guns.modular.system.warpper.RegisteredWarpper; -import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; -import org.apache.shiro.authc.SimpleAuthenticationInfo; -import org.apache.shiro.authc.UsernamePasswordToken; -import org.apache.shiro.authc.credential.HashedCredentialsMatcher; -import org.apache.shiro.crypto.hash.Md5Hash; -import org.apache.shiro.util.ByteSource; +import com.stylefeng.guns.core.util.DateUtil; +import com.stylefeng.guns.modular.system.dao.DriverAlipayMapper; +import com.stylefeng.guns.modular.system.dao.DriverMapper; +import com.stylefeng.guns.modular.system.dao.WithdrawalMapper; +import com.stylefeng.guns.modular.system.model.Driver; +import com.stylefeng.guns.modular.system.model.DriverAlipay; +import com.stylefeng.guns.modular.system.model.Withdrawal; +import com.stylefeng.guns.modular.system.service.IDriverAlipayService; +import com.stylefeng.guns.modular.system.util.ResultUtil; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; -import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Date; +import java.util.List; @Service @@ -40,6 +23,10 @@ @Autowired private DriverAlipayMapper driverAlipayMapper; + @Autowired + private DriverMapper driverMapper; + @Autowired + private WithdrawalMapper withdrawalMapper; @Override public ResultUtil saveAlipay(String userName, String account, Integer driverId) { @@ -74,7 +61,7 @@ public ResultUtil delAlipay(Integer id, Integer driverId) { DriverAlipay driverAlipay = this.selectById(id); if(driverAlipay.getDriverId().compareTo(driverId) != 0){ - return ResultUtil.error("你无权删除此卡号"); + return ResultUtil.error("你无权删除此账号"); } this.deleteById(id); return ResultUtil.success(); @@ -85,4 +72,86 @@ pageNum = (pageNum - 1) * size; return driverAlipayMapper.queryAlipay(pageNum, size, driverId); } + + @Override + public ResultUtil aliWithdrawal(Double money, Integer id, Integer uid, Integer type) { + if(money.compareTo(0D) <= 0){ + return ResultUtil.error("提现金额必须大于0"); + } + Driver driver = driverMapper.selectById(uid); + Integer withdrawalRule = driverMapper.getWithdrawalRule(); + if(withdrawalRule==null){ + return ResultUtil.error("暂未设置提现时间,请联系平台"); + } + String week =withdrawalRule==1?"星期一": + withdrawalRule==2?"星期二": + withdrawalRule==3?"星期三": + withdrawalRule==4?"星期四": + withdrawalRule==5?"星期五": + withdrawalRule==6?"星期六":"星期日"; + String weeks = DateUtil.getAfterDayWeek("0"); + if(!weeks.equals(week)){ + return ResultUtil.error(" 每周"+(withdrawalRule==1?"一": + withdrawalRule==2?"二": + withdrawalRule==3?"三": + withdrawalRule==4?"四": + withdrawalRule==5?"五": + withdrawalRule==6?"六":"日")+"统一申请提现,平台统一处理。"); + } + if(null == type){ + type = 1; + } + + Withdrawal withdrawal = new Withdrawal(); + if(type == 1){ + if(null == driver.getLaveActivityMoney()){ + return ResultUtil.error("账户没有余额,不能提现"); + } + if(driver.getLaveActivityMoney().compareTo(money) < 0){ + return ResultUtil.error("提现金额必须小于账户余额"); + } + withdrawal.setBalance(driver.getLaveActivityMoney()); + } + if(type == 2){ + if(null == driver.getLaveBusinessMoney()){ + return ResultUtil.error("账户没有余额,不能提现"); + } + + Double money1 = driverMapper.getThisWeekMoney(uid); + Double laveBusinessMoney =driver.getLaveBusinessMoney()-(money1==null?0d:money1); + if(laveBusinessMoney.compareTo(money) < 0){ + return ResultUtil.error("提现金额必须小于账户余额"); + } + withdrawal.setBalance(driver.getLaveBusinessMoney()-(money1==null?0d:money1)); + } + DriverAlipay driverAlipay = this.selectById(id); + if(null == driverAlipay){ + return ResultUtil.error("请选择提现账号"); + } + withdrawal.setCode(driverAlipay.getAccount()); + withdrawal.setFlag(1); + withdrawal.setInsertTime(new Date()); + withdrawal.setMoney(money); + withdrawal.setName(driverAlipay.getUserName()); + withdrawal.setState(1); + withdrawal.setUserId(uid); + withdrawal.setUserType(2); + withdrawal.setBankName("支付宝"); + withdrawal.setType(type); + withdrawal.setWithdrawalType(1);//线上 + + if(type == 1){ + double v = new BigDecimal(driver.getLaveActivityMoney()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + driver.setLaveActivityMoney(v); + v = new BigDecimal(driver.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + driver.setBalance(v); + } + if(type == 2){ + double v = new BigDecimal(driver.getLaveBusinessMoney()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + driver.setLaveBusinessMoney(v); + } + withdrawalMapper.insert(withdrawal); + driverMapper.updateById(driver); + return ResultUtil.success(); + } } diff --git a/ManagementZYTravel/guns-admin/pom.xml b/ManagementZYTravel/guns-admin/pom.xml index b5cb44b..91c42a7 100644 --- a/ManagementZYTravel/guns-admin/pom.xml +++ b/ManagementZYTravel/guns-admin/pom.xml @@ -209,6 +209,12 @@ <version>3.14.4</version> <scope>runtime</scope> </dependency> + <dependency> + <groupId>com.alipay.sdk</groupId> + <artifactId>alipay-sdk-java</artifactId> + <version>4.39.186.ALL</version> + <scope>compile</scope> + </dependency> </dependencies> diff --git a/ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOpenCity.java b/ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOpenCity.java index 674f3fe..204a296 100644 --- a/ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOpenCity.java +++ b/ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOpenCity.java @@ -1,6 +1,8 @@ package com.stylefeng.guns.modular.system.model; import com.baomidou.mybatisplus.enums.IdType; + +import java.math.BigDecimal; import java.util.Date; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.activerecord.Model; @@ -64,6 +66,18 @@ private Integer insertUser; private Date updateTime; private Integer updateUser; + /** + * 订单额度 + */ + private BigDecimal orderMagnitude; + + public BigDecimal getOrderMagnitude() { + return orderMagnitude; + } + + public void setOrderMagnitude(BigDecimal orderMagnitude) { + this.orderMagnitude = orderMagnitude; + } public Integer getAreaId() { return areaId; diff --git a/ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/alipay/AlipayProperties.java b/ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/alipay/AlipayProperties.java new file mode 100644 index 0000000..4592cce --- /dev/null +++ b/ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/alipay/AlipayProperties.java @@ -0,0 +1,63 @@ +package com.stylefeng.guns.modular.system.util.alipay; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class AlipayProperties { + + @Value("${alipay.appId}") + private String appId;//支付宝appid + + @Value("${alipay.appCertPath}") + private String appCertPath;//应用公钥 + + @Value("${alipay.rootCertPath}") + private String rootCertPath;//支付宝根证书 + + @Value("${alipay.alipayPublicCertPath}") + private String alipayPublicCertPath;//支付宝公钥 + + @Value("${alipay.privateKey}") + private String privateKey;//应用私钥 + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getAppCertPath() { + return appCertPath; + } + + public void setAppCertPath(String appCertPath) { + this.appCertPath = appCertPath; + } + + public String getRootCertPath() { + return rootCertPath; + } + + public void setRootCertPath(String rootCertPath) { + this.rootCertPath = rootCertPath; + } + + public String getAlipayPublicCertPath() { + return alipayPublicCertPath; + } + + public void setAlipayPublicCertPath(String alipayPublicCertPath) { + this.alipayPublicCertPath = alipayPublicCertPath; + } + + public String getPrivateKey() { + return privateKey; + } + + public void setPrivateKey(String privateKey) { + this.privateKey = privateKey; + } +} diff --git a/ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/alipay/AlipayUtils.java b/ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/alipay/AlipayUtils.java new file mode 100644 index 0000000..f952ff3 --- /dev/null +++ b/ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/alipay/AlipayUtils.java @@ -0,0 +1,118 @@ +package com.stylefeng.guns.modular.system.util.alipay; + +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.AlipayConfig; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.domain.AlipayFundTransUniTransferModel; +import com.alipay.api.domain.Participant; +import com.alipay.api.request.AlipayFundTransUniTransferRequest; +import com.alipay.api.response.AlipayFundTransUniTransferResponse; + +public class AlipayUtils { + public static void main(String[] args) throws AlipayApiException { + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); + + // 构造请求参数以调用接口 + AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); + AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel(); + // 设置商家侧唯一订单号 + model.setOutBizNo("2025080400001"); + // 设置订单总金额 + model.setTransAmount("0.01"); + // 设置描述特定的业务场景 + model.setBizScene("DIRECT_TRANSFER"); + // 设置业务产品码 + model.setProductCode("TRANS_ACCOUNT_NO_PWD"); + + // 设置转账业务的标题 + model.setOrderTitle("司机提现"); + // 设置收款方信息 + Participant payeeInfo = new Participant(); + payeeInfo.setIdentity("18398968484"); + payeeInfo.setCertType("IDENTITY_CARD"); + payeeInfo.setCertNo("51370119991015653X"); + payeeInfo.setName("陈昆"); + payeeInfo.setIdentityType("ALIPAY_LOGON_ID"); + model.setPayeeInfo(payeeInfo); + // 设置业务备注 + model.setRemark("司机提现"); + // 设置转账业务请求的扩展参数 + model.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}"); + + request.setBizModel(model); + AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request); + System.err.println(response.getBody()); + + if (response.isSuccess()) { + System.err.println("调用成功"); + } else { + System.err.println("调用失败"); + // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 + // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); + // System.out.println(diagnosisUrl); + } + } + + /** + * 提现 + */ + public static String aliWithdrawal(String outBizNo, String money, String account, String idCard,String userName) throws AlipayApiException { + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); + + // 构造请求参数以调用接口 + AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); + AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel(); + // 设置商家侧唯一订单号 + model.setOutBizNo(outBizNo); + // 设置订单总金额 + model.setTransAmount(money); + // 设置描述特定的业务场景 + model.setBizScene("DIRECT_TRANSFER"); + // 设置业务产品码 + model.setProductCode("TRANS_ACCOUNT_NO_PWD"); + + // 设置转账业务的标题 + model.setOrderTitle("司机提现"); + // 设置收款方信息 + Participant payeeInfo = new Participant(); + payeeInfo.setIdentity(account); + payeeInfo.setCertType("IDENTITY_CARD"); + payeeInfo.setCertNo(idCard); + payeeInfo.setName(userName); + payeeInfo.setIdentityType("ALIPAY_LOGON_ID"); + model.setPayeeInfo(payeeInfo); + // 设置业务备注 + model.setRemark("司机提现"); + // 设置转账业务请求的扩展参数 + model.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}"); + + request.setBizModel(model); + AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request); + System.out.println(response.getBody()); + if (response.isSuccess()) { + System.out.println("调用成功"); + } else { + System.out.println("调用失败"); + } + return response.getBody(); + } + + private static AlipayConfig getAlipayConfig() { + String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHyTR7MWUrHoxoCA0g19QP3RtuTLYI/c0WmUZPp66pzTtldO0ctfGmfECboBfrriVjqQSm+ZByd3PR818SQooJXKm2Zf+JIf29vHQexotEoG/GOJjc7T9Ez/2Q/nuxnTVAosy092gM8Fu11lbX8SXi5w1vKNI6ApxIgU2gWHeLVHOkJosFxDIz5CrNlP4BGZRhW543xGi5/hpXrHNYno69fLXPOKwN+TQh8JW4xaqtebXd9wcWofAoeoel/BhdPAlb8NtkGzv7/ar7CzMrS8scjgJw48muN7XwmoJnlF92nb/7F6vEI/7l0tfeJqyFDSIKrgqfmcfBzD9uBPJwH0nhAgMBAAECggEACEb4nwXcz+sVzgWnnzfo4mqtEGU2t4eZJ+aCBbsIB6vOEho1lgl1SJvMaHAy5RgBiXi1IuSVrJShh8vZIMjTl0yBv++pyxc6W4WQYovh03YgOiobD2Sa9bvkDiGlMqeNpnoGFoX6XseMH6KIOrOlhpZlGECZyBV+p2DSdZLO/rw5Z0e0KoWa9WvG0ilT9SEphXlcjNg+dYQHcymZgqjagN4PHipecHRXEUEw7sJR4vsqmzDwzyUi/f3eKPgp1C/p2Yv3El+L3ibU6lTB255fM7G3xlZhmaTOsoKw9h1AAumyWzwkzX8zU23GdxKw6YyxJPiow26xZyzKMABpPywUkQKBgQDFurbvZxKEY+9aep8QjISve+agGbUWQ8YtMxGlVST5ZklJArmWBt5c9nJKGuSS22v5q3ljLdFE1+KGj5VcAVml1DhU7l/pzHzWEBRmmOgQ3n5t7QDD0YMPKs4QSaGKr3cX4r8sbFb9FBQOapeK0Auy4GvHSor86mNj3etM+Q4t7QKBgQCvzUxFau6WnRf6bbyReJxp8y16SpvUj058F+nmiiXiYf6PUtdZg/JvxUTeG2VgiDrfvSAE69SRvRchI1Mj49CSeKyAq8aVbMh4Dio+Sjh8JQK768Aq1bHfyJferl8eVNnOrPq+7vcu5DGgELzSXEevheftVLVIcmgxkl5jbNttRQKBgBmiCvUeN5hSHEVugBB1Jv5Y4Zz/uCoavyY86Jy2XQS37eg5IjYAzfLfQBG7SsZ/C5BiWmoxFmAGXKd1FbfHtQd6a5MXE/gLOmPF0d87E1qcfWdiwiagkoz0z6Hs6bRA6v99tarcoKpOYAs+ZkbokZuu3EoJr9r5x8i6jDZ+UwhBAoGAUlVexCAJb2ZRRYrBRovrDT/Da8OnaYxYIIv+kmbeyUBFvQ/6JUVDdI856p+AAg6rK//iEAv2uO6K940YsfVOyFpVx8krLu4MkRVpOVT/UTzwI9yMWkNMk9bZMYQOriDlBQNER8mY4FAk4acVF5v6Qrz+2srSQAS8wYKgTAY+WdUCgYEAsf/VlYGaxEhOGI1i7Zh8gQ5AyelgBO0uqPYetFbEkL+8FrU/BgoS219bK3GjpsEgM2QZs1D8TugUP+uvCSQNQ5js0Hqu+XyhJkBPnwSJpv/dXyQ6KoBg+U2rrna8MRTM/Y/jKHReqo5mMXMl3MMsRTRO5R5PVgfZ+soX81bvhEY="; + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("2021005181621462"); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + alipayConfig.setFormat("json"); + alipayConfig.setAppCertPath("D:/alipayCert/appCertPublicKey_2021005181621462.crt"); + alipayConfig.setAlipayPublicCertPath("D:/alipayCert/alipayCertPublicKey_RSA2.crt"); + alipayConfig.setRootCertPath("D:/alipayCert/alipayRootCert.crt"); + return alipayConfig; + } + +} diff --git a/ManagementZYTravel/guns-admin/src/main/resources/application.yml b/ManagementZYTravel/guns-admin/src/main/resources/application.yml index 46043b8..96e6ee8 100644 --- a/ManagementZYTravel/guns-admin/src/main/resources/application.yml +++ b/ManagementZYTravel/guns-admin/src/main/resources/application.yml @@ -63,9 +63,10 @@ spring: datasource: url: jdbc:mysql://127.0.0.1:3306/zytravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai -# url: jdbc:mysql://192.168.110.80:3306/zytravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai username: root password: 0KiwEhl6EnIFWNqB7d1FJLWKy9urjvMS +# url: jdbc:mysql://192.168.110.80:3306/zytravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai +# username: root # password: 123456 db-name: guns #用来搜集数据库的所有表 filters: wall,mergeStat @@ -115,4 +116,10 @@ threadsInheritContextClassLoaderOfInitializingThread: true job-store-type: jdbc - +--- +alipay: + appId: "2021005181621462" #应用程序唯一标识 + appCertPath: "D:\\alipayCert\\appCertPublicKey_2021005181621462.crt" #应用公钥 + rootCertPath: "D:\\alipayCert\\alipayRootCert.crt" #支付宝根证书 + alipayPublicCertPath: "D:\alipayCert\alipayCertPublicKey_RSA2.crt" #支付宝公钥 + privateKey: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHyTR7MWUrHoxoCA0g19QP3RtuTLYI/c0WmUZPp66pzTtldO0ctfGmfECboBfrriVjqQSm+ZByd3PR818SQooJXKm2Zf+JIf29vHQexotEoG/GOJjc7T9Ez/2Q/nuxnTVAosy092gM8Fu11lbX8SXi5w1vKNI6ApxIgU2gWHeLVHOkJosFxDIz5CrNlP4BGZRhW543xGi5/hpXrHNYno69fLXPOKwN+TQh8JW4xaqtebXd9wcWofAoeoel/BhdPAlb8NtkGzv7/ar7CzMrS8scjgJw48muN7XwmoJnlF92nb/7F6vEI/7l0tfeJqyFDSIKrgqfmcfBzD9uBPJwH0nhAgMBAAECggEACEb4nwXcz+sVzgWnnzfo4mqtEGU2t4eZJ+aCBbsIB6vOEho1lgl1SJvMaHAy5RgBiXi1IuSVrJShh8vZIMjTl0yBv++pyxc6W4WQYovh03YgOiobD2Sa9bvkDiGlMqeNpnoGFoX6XseMH6KIOrOlhpZlGECZyBV+p2DSdZLO/rw5Z0e0KoWa9WvG0ilT9SEphXlcjNg+dYQHcymZgqjagN4PHipecHRXEUEw7sJR4vsqmzDwzyUi/f3eKPgp1C/p2Yv3El+L3ibU6lTB255fM7G3xlZhmaTOsoKw9h1AAumyWzwkzX8zU23GdxKw6YyxJPiow26xZyzKMABpPywUkQKBgQDFurbvZxKEY+9aep8QjISve+agGbUWQ8YtMxGlVST5ZklJArmWBt5c9nJKGuSS22v5q3ljLdFE1+KGj5VcAVml1DhU7l/pzHzWEBRmmOgQ3n5t7QDD0YMPKs4QSaGKr3cX4r8sbFb9FBQOapeK0Auy4GvHSor86mNj3etM+Q4t7QKBgQCvzUxFau6WnRf6bbyReJxp8y16SpvUj058F+nmiiXiYf6PUtdZg/JvxUTeG2VgiDrfvSAE69SRvRchI1Mj49CSeKyAq8aVbMh4Dio+Sjh8JQK768Aq1bHfyJferl8eVNnOrPq+7vcu5DGgELzSXEevheftVLVIcmgxkl5jbNttRQKBgBmiCvUeN5hSHEVugBB1Jv5Y4Zz/uCoavyY86Jy2XQS37eg5IjYAzfLfQBG7SsZ/C5BiWmoxFmAGXKd1FbfHtQd6a5MXE/gLOmPF0d87E1qcfWdiwiagkoz0z6Hs6bRA6v99tarcoKpOYAs+ZkbokZuu3EoJr9r5x8i6jDZ+UwhBAoGAUlVexCAJb2ZRRYrBRovrDT/Da8OnaYxYIIv+kmbeyUBFvQ/6JUVDdI856p+AAg6rK//iEAv2uO6K940YsfVOyFpVx8krLu4MkRVpOVT/UTzwI9yMWkNMk9bZMYQOriDlBQNER8mY4FAk4acVF5v6Qrz+2srSQAS8wYKgTAY+WdUCgYEAsf/VlYGaxEhOGI1i7Zh8gQ5AyelgBO0uqPYetFbEkL+8FrU/BgoS219bK3GjpsEgM2QZs1D8TugUP+uvCSQNQ5js0Hqu+XyhJkBPnwSJpv/dXyQ6KoBg+U2rrna8MRTM/Y/jKHReqo5mMXMl3MMsRTRO5R5PVgfZ+soX81bvhEY=" #应用私钥 diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java index 2af95df..e3f45e6 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java @@ -1401,4 +1401,52 @@ e.printStackTrace(); } } + + /** + * 专车微信退款成功回调 + * @param request + * @param response + */ + @ResponseBody + @PostMapping("/base/transferWXNotify") + public void transferWXNotify(HttpServletRequest request, HttpServletResponse response){ + try { + Map<String, String> map = payMoneyUtil.wxRefundCallback(request); + if(null != map){ + String order_id = map.get("refund_id"); + String out_refund_no = map.get("out_refund_no"); + String refund_fee = map.get("refund_fee"); + String result = map.get("result"); + if(ToolUtil.isNotEmpty(out_refund_no) && ToolUtil.isNotEmpty(order_id)){ + PrintWriter out = response.getWriter(); + out.write(result); + out.flush(); + out.close(); + + String[] split = out_refund_no.split(","); + try{ + Integer.valueOf(split[0]); + }catch (Exception e){ + split = split[0].split("_"); + } + Integer id = Integer.valueOf(split[0]); + Integer type = Integer.valueOf(split[1]); + switch (type){ + case 1: + OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(id); + if(orderPrivateCar.getState() == 10 || orderPrivateCar.getState() == 12){ + //添加交易明细 + transactionDetailsService.saveData(orderPrivateCar.getUserId(), "专车取消退款", Double.valueOf(refund_fee), 2, 1, 1, 1, id); + }else { + transactionDetailsService.saveData(orderPrivateCar.getUserId(), "专车差价退款", Double.valueOf(refund_fee), 2, 1, 1, 1, id); + } + break; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + } diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/controller/OrderPrivateCarController.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/controller/OrderPrivateCarController.java index bf0c625..1bdcbd1 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/controller/OrderPrivateCarController.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/controller/OrderPrivateCarController.java @@ -11,6 +11,7 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import io.swagger.models.auth.In; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -57,9 +58,69 @@ * @param request * @return */ +// @ResponseBody +// @PostMapping("/api/orderPrivateCar/saveOrderPrivateCar") +// @ApiOperation(value = "专车下单/扫码下单", tags = {"用户端-专车"}, notes = "") +// @ApiImplicitParams({ +// @ApiImplicitParam(value = "订单类型(1=普通订单,2=摆渡订单)", name = "type", required = true, dataType = "int"), +// @ApiImplicitParam(value = "服务车型id(扫码下单不用上传)", name = "serverCarModelId", required = false, dataType = "int"), +// @ApiImplicitParam(value = "出行时间(2020-08-20 10:10)", name = "travelTime", required = true, dataType = "string"), +// @ApiImplicitParam(value = "是否预约(1=否,2=是)", name = "orderType", required = true, dataType = "int"), +// @ApiImplicitParam(value = "是否代下单(0=否,1=是)", name = "substitute", required = true, dataType = "int"), +// @ApiImplicitParam(value = "下单地点经度", name = "placementLon", required = true, dataType = "string"), +// @ApiImplicitParam(value = "下单地点纬度", name = "placementLat", required = true, dataType = "string"), +// @ApiImplicitParam(value = "起点经度", name = "startLon", required = true, dataType = "string"), +// @ApiImplicitParam(value = "起点纬度", name = "startLat", required = true, dataType = "string"), +// @ApiImplicitParam(value = "起点地址", name = "startAddress", required = true, dataType = "string"), +// @ApiImplicitParam(value = "终点经度", name = "endLon", required = true, dataType = "string"), +// @ApiImplicitParam(value = "终点纬度", name = "endLat", required = true, dataType = "string"), +// @ApiImplicitParam(value = "终点地址", name = "endAddress", required = true, dataType = "string"), +// @ApiImplicitParam(value = "订单来源(1:APP下单,2:扫码下单,3:小程序下单,4:司机下单,5:调度下单)", name = "orderSource", required = true, dataType = "int"), +// @ApiImplicitParam(value = "司机id(扫码下单必传)", name = "driverId", required = false, dataType = "int"), +// @ApiImplicitParam(value = "乘客姓名(代下单必传)", name = "passengers", required = false, dataType = "string"), +// @ApiImplicitParam(value = "乘客电话(代下单必传)", name = "passengersPhone", required = false, dataType = "string"), +// @ApiImplicitParam(value = "预估价", name = "estimatedPrice", required = false, dataType = "BigDecimal"), +// @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") +// }) +// public ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer orderType, Integer substitute, String placementLon, String placementLat, String startLon, String startLat, +// String startAddress, String endLon, String endLat, String endAddress, String passengers, String passengersPhone, Integer orderSource, Integer driverId, +// Integer type, BigDecimal estimatedPrice, HttpServletRequest request){ +// try { +// Integer uid = userInfoService.getUserIdFormRedis(request); +// if(null == uid){ +// return ResultUtil.tokenErr(); +// } +// return orderPrivateCarService.saveOrderPrivateCar(serverCarModelId, travelTime, orderType, substitute, placementLon, placementLat, +// startLon, startLat, startAddress, endLon, endLat, endAddress, passengers, passengersPhone, orderSource, driverId, type, uid,estimatedPrice); +// }catch (Exception e){ +// e.printStackTrace(); +// return ResultUtil.runErr(); +// } +// } + /** + * 专车下单 + * @param serverCarModelId + * @param travelTime + * @param orderType + * @param substitute + * @param placementLon + * @param placementLat + * @param startLon + * @param startLat + * @param startAddress + * @param endLon + * @param endLat + * @param endAddress + * @param passengers + * @param passengersPhone + * @param orderSource + * @param driverId + * @param request + * @return + */ @ResponseBody @PostMapping("/api/orderPrivateCar/saveOrderPrivateCar") - @ApiOperation(value = "专车下单/扫码下单", tags = {"用户端-专车"}, notes = "") + @ApiOperation(value = "专车下单/扫码下单[0731]", tags = {"用户端-专车"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单类型(1=普通订单,2=摆渡订单)", name = "type", required = true, dataType = "int"), @ApiImplicitParam(value = "服务车型id(扫码下单不用上传)", name = "serverCarModelId", required = false, dataType = "int"), @@ -79,18 +140,21 @@ @ApiImplicitParam(value = "乘客姓名(代下单必传)", name = "passengers", required = false, dataType = "string"), @ApiImplicitParam(value = "乘客电话(代下单必传)", name = "passengersPhone", required = false, dataType = "string"), @ApiImplicitParam(value = "预估价", name = "estimatedPrice", required = false, dataType = "BigDecimal"), + @ApiImplicitParam(value = "城市code", name = "cityCode", required = true, dataType = "string"), + @ApiImplicitParam(value = "钱下标", name = "carIndex", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer orderType, Integer substitute, String placementLon, String placementLat, String startLon, String startLat, String startAddress, String endLon, String endLat, String endAddress, String passengers, String passengersPhone, Integer orderSource, Integer driverId, - Integer type, BigDecimal estimatedPrice, HttpServletRequest request){ + Integer type, BigDecimal estimatedPrice, String cityCode, Integer carIndex, HttpServletRequest request){ try { Integer uid = userInfoService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } return orderPrivateCarService.saveOrderPrivateCar(serverCarModelId, travelTime, orderType, substitute, placementLon, placementLat, - startLon, startLat, startAddress, endLon, endLat, endAddress, passengers, passengersPhone, orderSource, driverId, type, uid,estimatedPrice); + startLon, startLat, startAddress, endLon, endLat, endAddress, passengers, passengersPhone, orderSource, driverId, type, + uid,estimatedPrice,cityCode,carIndex); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java index 40c4781..e30593c 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java @@ -406,6 +406,43 @@ @ApiModelProperty(value = "修改价格审核 1=待审核 2=通过") @TableField("priceAuditState") private Integer priceAuditState; + @ApiModelProperty(value = "支付流水号") + @TableField("transactionId") + private String transactionId; + /** + * 预付金额 + */ + @TableField("paymentAdvanceMoney") + private Double paymentAdvanceMoney; + /** + * 支付方式(0:预付1:后付) + */ + @TableField("payMethod") + private Integer payMethod; + + public Integer getPayMethod() { + return payMethod; + } + + public void setPayMethod(Integer payMethod) { + this.payMethod = payMethod; + } + + public Double getPaymentAdvanceMoney() { + return paymentAdvanceMoney; + } + + public void setPaymentAdvanceMoney(Double paymentAdvanceMoney) { + this.paymentAdvanceMoney = paymentAdvanceMoney; + } + + public String getTransactionId() { + return transactionId; + } + + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + } public Integer getPriceAuditState() { return priceAuditState; diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java index 1daf7be..2e6b936 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java @@ -37,7 +37,28 @@ */ ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, String startAddress, String endLon, String endLat, String endAddress, String name, - String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, BigDecimal estimatedPrice) throws Exception; + String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, BigDecimal estimatedPrice, + String cityCode,Integer carIndex) throws Exception; +// /** +// * 专车下单操作 +// * @param serverCarModelId 服务车型id +// * @param travelTime 出行时间 +// * @param reservation 是否预约(1=否,2=是) +// * @param instead 是否代下单(0=否,1=是) +// * @param startLon 起点经度 +// * @param startLat 起点纬度 +// * @param startAddress 起点详细地址 +// * @param endLon 终点经度 +// * @param endLat 终点纬度 +// * @param endAddress 终点详细地址 +// * @param name 乘客姓名 +// * @param phone 乘客电话 +// * @return +// * @throws Exception +// */ +// ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, +// String startLon, String startLat, String startAddress, String endLon, String endLat, String endAddress, String name, +// String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, BigDecimal estimatedPrice) throws Exception; /** diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index 9891424..20e4ff9 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -18,10 +18,7 @@ import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.service.impl.OrderPositionServiceImpl; import com.stylefeng.guns.modular.system.util.*; -import com.stylefeng.guns.modular.system.warpper.BaseWarpper; -import com.stylefeng.guns.modular.system.warpper.EndPushWarpper; -import com.stylefeng.guns.modular.system.warpper.OrderInfoWarpper; -import com.stylefeng.guns.modular.system.warpper.OrderServerWarpper; +import com.stylefeng.guns.modular.system.warpper.*; import com.stylefeng.guns.modular.taxi.dao.OrderTaxiMapper; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.model.PaymentRecord; @@ -35,6 +32,7 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; @@ -167,7 +165,10 @@ @Autowired private IAssignOrderService assignOrderService; - + @Autowired + private IOpenCityService openCityService; + @Autowired + private IServerCarModelService serverCarModelService; // @Autowired // private ALiSendSms aLiSendSms; @@ -207,7 +208,8 @@ */ @Override public synchronized ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, - String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid,BigDecimal estimatedPrice) throws Exception { + String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, + BigDecimal estimatedPrice,String cityCode,Integer carIndex) throws Exception { //如果出行时间大于当前10分钟则默认为预约单 if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){ @@ -319,193 +321,491 @@ CarService query1 = carServiceMapper.query(1, driver.getCarId()); orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); orderPrivateCar.setSnatchOrderTime(new Date()); - - //调用高德创建轨迹 -// String s = gdFalconUtil.selectTerminal(driver.getPhone()); -// String track = gdFalconUtil.createTrack(s); -// JSONObject jsonObject = JSONObject.parseObject(track); -// orderPrivateCar.setTrackId(String.valueOf(jsonObject.getInteger("trid"))); - - //调用移动的小号接口 - /* Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); - Region region = regionMapper.query(geocode1.get("districtCode"));*/ -// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), null); -// if(String.valueOf(map.get("code")).equals("200")){ -// orderPrivateCar.setTelX(map.get("telX")); -// orderPrivateCar.setBindId(map.get("bindId")); -// } - driver.setState(3); driverService.updateById(driver); } - orderPrivateCar.setIsReassign(1); - orderPrivateCar.setIsDelete(1); - this.insert(orderPrivateCar); - - if(orderSource == 2){//扫码下单 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); - } - }).start(); - } - - - // TODO: 2021/5/11 修改,根据后台设定的派单范围查询范围内有无司机,将单子指派给距离最近的司机(距离相同随机取),范围内没有司机再进行推单流程 - if(orderPrivateCar.getState() == 1){ - Company query = companyCityService.query(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); - if(null == query){ - return ResultUtil.error("起点暂未企业提供服务"); + // 查询城市的订单额度 + OpenCity openCity = openCityService.selectOne(new EntityWrapper<OpenCity>() + .eq("code", cityCode) + .ne("flag", 3) + .orderBy("orderMagnitude", false) + .last("LIMIT 1")); + // 查询预估价格 + ResultUtil<List<ServerCarModelWarpper>> listResultUtil = serverCarModelService.queryServerCarModel(startLon + "," + startLat, endLon + "," + endLat, 1); + List<ServerCarModelWarpper> data = listResultUtil.getData(); + data = data.stream().filter(e -> serverCarModelId.equals(e.getId())).sorted(Comparator.comparing(ServerCarModelWarpper::getAmount)).collect(Collectors.toList()); + if(Objects.nonNull(openCity) && !CollectionUtils.isEmpty(data) && BigDecimal.valueOf(data.get(0).getAmount()).compareTo(openCity.getOrderMagnitude()) > 0){ + orderPrivateCar.setIsReassign(1); + orderPrivateCar.setIsDelete(1); + orderPrivateCar.setState(7); + if(orderSource == 2){ + orderPrivateCar.setOrderMoney(data.get(0).getAmount()); + }else { + orderPrivateCar.setOrderMoney(data.get(carIndex).getAmount()); } - AssignOrder assignOrder = assignOrderService.selectOne(new EntityWrapper<AssignOrder>().eq("companyId", query.getId()).eq("type", 1)); - if(null != assignOrder){//配置了指派规则才处理 - boolean lock = redisUtil.lock("order_lock", 10); - if(!lock){ - int num1 = 1; - while (num1 <= 10){ - Thread.sleep(3000);//等待3秒 - lock = redisUtil.lock("order_lock", 10); - if(lock){ - break; - }else{ - num1++; + orderPrivateCar.setPayMethod(0); + this.insert(orderPrivateCar); + BaseWarpper baseWarpper = new BaseWarpper(); + baseWarpper.setId(orderPrivateCar.getId()); + baseWarpper.setState(orderPrivateCar.getState()); + baseWarpper.setPayMethod(0); + baseWarpper.setAmount(orderPrivateCar.getOrderMoney()); + return ResultUtil.success(baseWarpper); + }else { + orderPrivateCar.setIsReassign(1); + orderPrivateCar.setIsDelete(1); + orderPrivateCar.setPayMethod(1); + this.insert(orderPrivateCar); + + if(orderSource == 2){//扫码下单 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); + } + }).start(); + } + + + // TODO: 2021/5/11 修改,根据后台设定的派单范围查询范围内有无司机,将单子指派给距离最近的司机(距离相同随机取),范围内没有司机再进行推单流程 + if(orderPrivateCar.getState() == 1){ + Company query = companyCityService.query(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + if(null == query){ + return ResultUtil.error("起点暂未企业提供服务"); + } + AssignOrder assignOrder = assignOrderService.selectOne(new EntityWrapper<AssignOrder>().eq("companyId", query.getId()).eq("type", 1)); + if(null != assignOrder){//配置了指派规则才处理 + boolean lock = redisUtil.lock("order_lock", 10); + if(!lock){ + int num1 = 1; + while (num1 <= 10){ + Thread.sleep(3000);//等待3秒 + lock = redisUtil.lock("order_lock", 10); + if(lock){ + break; + }else{ + num1++; + } } } - } - try { - //获取空闲司机 - List<Driver> drivers = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), assignOrder.getDistance(), null);//获取范围内空闲司机 - List<Integer> driverIds = drivers.stream().map(Driver::getId).collect(Collectors.toList()); - if(drivers.size() > 0) {//有司机,直接指派给司机 - Driver dr = null; - if (drivers.size() > 1) { - List<Driver> ds = new ArrayList<>();//存储直线距离最近的几个司机 - for (int i = 0; i < assignOrder.getPeople(); i++) { - Driver driver = null; - int m = 0; - int index = 0; - // 查询预约单 - List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); - List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList()); - for (int j = 0; j < drivers.size(); j++) { - Driver driver1 = drivers.get(j); - if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) { - continue; - } - // 判断该司机是否有30分钟内预约单 - long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && - DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); - if (count > 0) { - continue; - } - String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); - if (null != value) { + try { + //获取空闲司机 + List<Driver> drivers = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), assignOrder.getDistance(), null);//获取范围内空闲司机 + List<Integer> driverIds = drivers.stream().map(Driver::getId).collect(Collectors.toList()); + if(drivers.size() > 0) {//有司机,直接指派给司机 + Driver dr = null; + if (drivers.size() > 1) { + List<Driver> ds = new ArrayList<>();//存储直线距离最近的几个司机 + for (int i = 0; i < assignOrder.getPeople(); i++) { + Driver driver = null; + int m = 0; + int index = 0; + // 查询预约单 + List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); + List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList()); + for (int j = 0; j < drivers.size(); j++) { + Driver driver1 = drivers.get(j); + if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) { + continue; + } + // 判断该司机是否有30分钟内预约单 + long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && + DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); + if (count > 0) { + continue; + } + String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); + if (null != value) { // Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 0);//计算距离 // Integer d = Integer.valueOf(distance1.get("distance")); - String[] split = value.split(","); - double distance = GDMapGeocodingUtil.getDistance(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0])); - int d = Double.valueOf(distance).intValue(); - if ((0 == m && null == driver) || (d < m)) { - driver = drivers.get(j); + String[] split = value.split(","); + double distance = GDMapGeocodingUtil.getDistance(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0])); + int d = Double.valueOf(distance).intValue(); + if ((0 == m && null == driver) || (d < m)) { + driver = drivers.get(j); + m = d; + index = j; + } + } + } + ds.add(driver); + drivers.remove(index); + } + + //再根据直线距离最短的司机中找出行驶距离最短的司机 + Integer m = 0; + for (Driver driver : ds) { + String value = redisUtil.getValue("DRIVER" + driver.getId()); + if (null != value) { + Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1);//计算距离 + Integer d = Integer.valueOf(distance1.get("distance")); + if ((0 == m && null == dr) || (d.intValue() < m.intValue())) { + dr = driver; m = d; - index = j; } } } - ds.add(driver); - drivers.remove(index); + } else { + List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); + if (orderPrivateCarss.size() == 0) { + dr = drivers.get(0); + } } - - //再根据直线距离最短的司机中找出行驶距离最短的司机 - Integer m = 0; - for (Driver driver : ds) { - String value = redisUtil.getValue("DRIVER" + driver.getId()); - if (null != value) { - Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1);//计算距离 - Integer d = Integer.valueOf(distance1.get("distance")); - if ((0 == m && null == dr) || (d.intValue() < m.intValue())) { - dr = driver; - m = d; + + if (Objects.nonNull(dr)) { + orderPrivateCar.setDriverId(dr.getId()); + orderPrivateCar.setCompanyId(dr.getFranchiseeId() != null && dr.getFranchiseeId() != 0 ? dr.getFranchiseeId() : ( + dr.getCompanyId() != null && dr.getCompanyId() != 0 ? dr.getCompanyId() : 1)); + orderPrivateCar.setState(2); + orderPrivateCar.setCarId(dr.getCarId()); + CarService query1 = carServiceMapper.query(1, dr.getCarId()); + orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); + orderPrivateCar.setSnatchOrderTime(new Date()); + if (orderPrivateCar.getOrderType() != 2) { + dr.setState(3); + } + driverService.updateById(dr); + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); } - } + }).start(); } - } else { - List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); - if (orderPrivateCarss.size() == 0) { - dr = drivers.get(0); - } - } - - if (Objects.nonNull(dr)) { - orderPrivateCar.setDriverId(dr.getId()); - orderPrivateCar.setCompanyId(dr.getFranchiseeId() != null && dr.getFranchiseeId() != 0 ? dr.getFranchiseeId() : ( - dr.getCompanyId() != null && dr.getCompanyId() != 0 ? dr.getCompanyId() : 1)); - orderPrivateCar.setState(2); - orderPrivateCar.setCarId(dr.getCarId()); - CarService query1 = carServiceMapper.query(1, dr.getCarId()); - orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); - orderPrivateCar.setSnatchOrderTime(new Date()); - if (orderPrivateCar.getOrderType() != 2) { - dr.setState(3); - } - driverService.updateById(dr); - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); - } - }).start(); - } - - - //调用高德创建轨迹 -// String s = gdFalconUtil.selectTerminal(dr.getPhone()); -// String track = gdFalconUtil.createTrack(s); -// orderPrivateCar.setTrackId(track); - - //调用移动的小号接口 - /* Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); - Region region = regionMapper.query(geocode1.get("districtCode"));*/ -// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), dr.getPhone(), null); -// if(String.valueOf(map.get("code")).equals("200")){ -// orderPrivateCar.setTelX(map.get("telX")); -// orderPrivateCar.setBindId(map.get("bindId")); -// } - - this.updateById(orderPrivateCar); - - //发送短信给司机 + this.updateById(orderPrivateCar); + + //发送短信给司机 // aLiSendSms.sendSms(dr.getPhone(), "SMS_216832951", "{\"" + orderPrivateCar.getStartAddress() + "\"}"); + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + redisUtil.unlock("order_lock"); } - }catch (Exception e){ - e.printStackTrace(); - }finally { - redisUtil.unlock("order_lock"); } } + + + //推单操作 + if(orderPrivateCar.getState() == 1){ + this.pushOrder(orderPrivateCar); + } + //添加消息 + systemNoticeService.addSystemNotice(1, "您的专车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); + BaseWarpper baseWarpper = new BaseWarpper(); + baseWarpper.setState(orderPrivateCar.getState()); + baseWarpper.setId(orderPrivateCar.getId()); + baseWarpper.setPayMethod(1); + return ResultUtil.success(baseWarpper); } - - - //推单操作 - if(orderPrivateCar.getState() == 1){ - this.pushOrder(orderPrivateCar); - } - - - //添加消息 - systemNoticeService.addSystemNotice(1, "您的专车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); - - BaseWarpper baseWarpper = new BaseWarpper(); - baseWarpper.setState(orderPrivateCar.getState()); - baseWarpper.setId(orderPrivateCar.getId()); - return ResultUtil.success(baseWarpper); } + +// @Override +// public synchronized ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, +// String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid,BigDecimal estimatedPrice) throws Exception { +// +// //如果出行时间大于当前10分钟则默认为预约单 +// if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){ +// reservation = 2; +// } +// +// /** +// * 1.下了即时单就不能下预约单和即时单 +// * 2.下了预约单和再下一张即时单不能再下预约单 +// */ +// List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 11); +// if(orderPrivateCars.size() > 0){ +// return ResultUtil.error("有未完成的订单"); +// } +// List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 11); +// if(list.size() > 0){ +// return ResultUtil.error("有未完成的订单"); +// } +// +// orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11); +// if(orderPrivateCars.size() > 0 && reservation == 2){ +// return ResultUtil.error("有未完成的订单"); +// } +// +// orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 7,12); +// if(orderPrivateCars.size() > 0){ +// BaseWarpper baseWarpper = new BaseWarpper(); +// baseWarpper.setState(7); +// baseWarpper.setId(orderPrivateCars.get(0).getId()); +// return ResultUtil.success(baseWarpper); +// } +// +// +// list = orderTaxiMapper.queryByState_(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11); +// if(list.size() > 0 && reservation == 2){ +// return ResultUtil.error("有未完成的订单"); +// } +// +// startAddress = startAddress.replaceAll("& #40;", "("); +// startAddress = startAddress.replaceAll("& #41;", ")"); +// endAddress = endAddress.replaceAll("& #40;", "("); +// endAddress = endAddress.replaceAll("& #41;", ")"); +// if((orderSource == 1 || orderSource == 3) && null == serverCarModelId){ +// return ResultUtil.error("请选择服务车型"); +// } +// +// OrderPrivateCar orderPrivateCar = new OrderPrivateCar(); +// orderPrivateCar.setType(type); +// orderPrivateCar.setUserId(uid); +// orderPrivateCar.setServerCarModelId(serverCarModelId); +// orderPrivateCar.setOrderNum(this.getOrderNum()); +// orderPrivateCar.setPlacementLon(Double.valueOf(placementLon)); +// orderPrivateCar.setPlacementLat(Double.valueOf(placementLat)); +// Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat); +// orderPrivateCar.setPlacementAddress(geocode.get("address")); +// orderPrivateCar.setStartLon(Double.valueOf(startLon)); +// orderPrivateCar.setStartLat(Double.valueOf(startLat)); +// orderPrivateCar.setStartAddress(startAddress); +// orderPrivateCar.setEndLon(Double.valueOf(endLon)); +// orderPrivateCar.setEndLat(Double.valueOf(endLat)); +// orderPrivateCar.setEndAddress(endAddress); +// orderPrivateCar.setSubstitute(instead); +// orderPrivateCar.setPassengers(name); +// orderPrivateCar.setPassengersPhone(phone); +// if(instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())){ +// UserInfo userInfo = userInfoService.selectById(uid); +// if(ToolUtil.isEmpty(userInfo.getPhone())){ +// return ResultUtil.error("请先绑定手机号码"); +// } +// orderPrivateCar.setPassengers(userInfo.getName()); +// orderPrivateCar.setPassengersPhone(userInfo.getPhone()); +// } +// orderPrivateCar.setState(1); +// orderPrivateCar.setInsertTime(new Date()); +// orderPrivateCar.setTravelTime(travelTime); +// orderPrivateCar.setOrderType(reservation); +// orderPrivateCar.setOrderSource(orderSource); +// orderPrivateCar.setEstimatedPrice(estimatedPrice); +// if(orderSource == 2){//扫码下单 +// Driver driver = driverService.selectById(driverId); +// if(null == driver){ +// return ResultUtil.error("司机信息有误,无法完成下单"); +// } +// if(driver.getAuthState() == 1){ +// return ResultUtil.error("司机信息还未完成审核,无法完成下单"); +// } +// if(driver.getAuthState() == 3){ +// return ResultUtil.error("司机账户已被冻结,无法提供服务"); +// } +// if(driver.getAuthState() == 4){ +// return ResultUtil.error("司机信息未通过审核,无法提供服务"); +// } +// if(driver.getState() == 1){ +// return ResultUtil.error("司机还未上线,无法提供服务"); +// } +// if(driver.getState() == 3){ +// return ResultUtil.error("司机正在服务中,无法提供服务"); +// } +// List<DriverService> query = driverServiceService.query(driverId, 1); +// if(query.size() == 0){ +// return ResultUtil.error("该司机不能服务此业务"); +// } +// +// orderPrivateCar.setDriverId(driverId); +// orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( +// driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); +// orderPrivateCar.setState(2); +// orderPrivateCar.setCarId(driver.getCarId()); +// CarService query1 = carServiceMapper.query(1, driver.getCarId()); +// orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); +// orderPrivateCar.setSnatchOrderTime(new Date()); +// +// //调用高德创建轨迹 +//// String s = gdFalconUtil.selectTerminal(driver.getPhone()); +//// String track = gdFalconUtil.createTrack(s); +//// JSONObject jsonObject = JSONObject.parseObject(track); +//// orderPrivateCar.setTrackId(String.valueOf(jsonObject.getInteger("trid"))); +// +// //调用移动的小号接口 +// /* Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); +// Region region = regionMapper.query(geocode1.get("districtCode"));*/ +//// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), null); +//// if(String.valueOf(map.get("code")).equals("200")){ +//// orderPrivateCar.setTelX(map.get("telX")); +//// orderPrivateCar.setBindId(map.get("bindId")); +//// } +// +// driver.setState(3); +// driverService.updateById(driver); +// } +// +// orderPrivateCar.setIsReassign(1); +// orderPrivateCar.setIsDelete(1); +// this.insert(orderPrivateCar); +// +// if(orderSource == 2){//扫码下单 +// new Thread(new Runnable() { +// @Override +// public void run() { +// pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); +// pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); +// pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); +// } +// }).start(); +// } +// +// +// // TODO: 2021/5/11 修改,根据后台设定的派单范围查询范围内有无司机,将单子指派给距离最近的司机(距离相同随机取),范围内没有司机再进行推单流程 +// if(orderPrivateCar.getState() == 1){ +// Company query = companyCityService.query(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); +// if(null == query){ +// return ResultUtil.error("起点暂未企业提供服务"); +// } +// AssignOrder assignOrder = assignOrderService.selectOne(new EntityWrapper<AssignOrder>().eq("companyId", query.getId()).eq("type", 1)); +// if(null != assignOrder){//配置了指派规则才处理 +// boolean lock = redisUtil.lock("order_lock", 10); +// if(!lock){ +// int num1 = 1; +// while (num1 <= 10){ +// Thread.sleep(3000);//等待3秒 +// lock = redisUtil.lock("order_lock", 10); +// if(lock){ +// break; +// }else{ +// num1++; +// } +// } +// } +// try { +// //获取空闲司机 +// List<Driver> drivers = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), assignOrder.getDistance(), null);//获取范围内空闲司机 +// List<Integer> driverIds = drivers.stream().map(Driver::getId).collect(Collectors.toList()); +// if(drivers.size() > 0) {//有司机,直接指派给司机 +// Driver dr = null; +// if (drivers.size() > 1) { +// List<Driver> ds = new ArrayList<>();//存储直线距离最近的几个司机 +// for (int i = 0; i < assignOrder.getPeople(); i++) { +// Driver driver = null; +// int m = 0; +// int index = 0; +// // 查询预约单 +// List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); +// List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList()); +// for (int j = 0; j < drivers.size(); j++) { +// Driver driver1 = drivers.get(j); +// if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) { +// continue; +// } +// // 判断该司机是否有30分钟内预约单 +// long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && +// DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); +// if (count > 0) { +// continue; +// } +// String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); +// if (null != value) { +//// Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 0);//计算距离 +//// Integer d = Integer.valueOf(distance1.get("distance")); +// String[] split = value.split(","); +// double distance = GDMapGeocodingUtil.getDistance(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0])); +// int d = Double.valueOf(distance).intValue(); +// if ((0 == m && null == driver) || (d < m)) { +// driver = drivers.get(j); +// m = d; +// index = j; +// } +// } +// } +// ds.add(driver); +// drivers.remove(index); +// } +// +// //再根据直线距离最短的司机中找出行驶距离最短的司机 +// Integer m = 0; +// for (Driver driver : ds) { +// String value = redisUtil.getValue("DRIVER" + driver.getId()); +// if (null != value) { +// Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1);//计算距离 +// Integer d = Integer.valueOf(distance1.get("distance")); +// if ((0 == m && null == dr) || (d.intValue() < m.intValue())) { +// dr = driver; +// m = d; +// } +// } +// } +// } else { +// List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); +// if (orderPrivateCarss.size() == 0) { +// dr = drivers.get(0); +// } +// } +// +// if (Objects.nonNull(dr)) { +// orderPrivateCar.setDriverId(dr.getId()); +// orderPrivateCar.setCompanyId(dr.getFranchiseeId() != null && dr.getFranchiseeId() != 0 ? dr.getFranchiseeId() : ( +// dr.getCompanyId() != null && dr.getCompanyId() != 0 ? dr.getCompanyId() : 1)); +// orderPrivateCar.setState(2); +// orderPrivateCar.setCarId(dr.getCarId()); +// CarService query1 = carServiceMapper.query(1, dr.getCarId()); +// orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); +// orderPrivateCar.setSnatchOrderTime(new Date()); +// if (orderPrivateCar.getOrderType() != 2) { +// dr.setState(3); +// } +// driverService.updateById(dr); +// new Thread(new Runnable() { +// @Override +// public void run() { +// pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); +// pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); +// pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); +// } +// }).start(); +// } +// +// +// //调用高德创建轨迹 +//// String s = gdFalconUtil.selectTerminal(dr.getPhone()); +//// String track = gdFalconUtil.createTrack(s); +//// orderPrivateCar.setTrackId(track); +// +// //调用移动的小号接口 +// /* Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); +// Region region = regionMapper.query(geocode1.get("districtCode"));*/ +//// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), dr.getPhone(), null); +//// if(String.valueOf(map.get("code")).equals("200")){ +//// orderPrivateCar.setTelX(map.get("telX")); +//// orderPrivateCar.setBindId(map.get("bindId")); +//// } +// +// this.updateById(orderPrivateCar); +// +// //发送短信给司机 +//// aLiSendSms.sendSms(dr.getPhone(), "SMS_216832951", "{\"" + orderPrivateCar.getStartAddress() + "\"}"); +// } +// }catch (Exception e){ +// e.printStackTrace(); +// }finally { +// redisUtil.unlock("order_lock"); +// } +// } +// } +// +// +// //推单操作 +// if(orderPrivateCar.getState() == 1){ +// this.pushOrder(orderPrivateCar); +// } +// +// +// //添加消息 +// systemNoticeService.addSystemNotice(1, "您的专车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); +// +// BaseWarpper baseWarpper = new BaseWarpper(); +// baseWarpper.setState(orderPrivateCar.getState()); +// baseWarpper.setId(orderPrivateCar.getId()); +// return ResultUtil.success(baseWarpper); +// } /** @@ -783,7 +1083,6 @@ if(userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()){ return ResultUtil.error("余额不足,无法完成支付", ""); } - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); //添加交易明细 transactionDetailsService.saveData(uid, "取消订单", query.getMoney(), 2, 1, 1, 1, id); @@ -1062,6 +1361,12 @@ Integer uid = orderPrivateCar.getUserId(); Double orderMoney = orderPrivateCar.getOrderMoney(); + System.out.println("=========================订单金额====================="+orderMoney); + if(Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney() > 0){ + double couponMoney1 = Objects.nonNull(orderPrivateCar.getCouponMoney()) ? orderPrivateCar.getCouponMoney() : 0.00; + orderMoney = orderMoney - orderPrivateCar.getPaymentAdvanceMoney() - couponMoney1; + System.out.println("=========================减去先付后金额====================="+orderMoney); + } UserInfo userInfo = userInfoService.selectById(uid); ResultUtil resultUtil = ResultUtil.success(new HashMap<>()); orderPrivateCar.setCouponMoney(0D);//初始化历史数据 @@ -1195,9 +1500,9 @@ if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ return ResultUtil.error("余额不足,无法完成支付", ""); } - + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - + SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId()); userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 @@ -1205,10 +1510,10 @@ transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 1, orderId); userInfoService.updateById(userInfo); - orderPrivateCar.setState(8); +// orderPrivateCar.setState(8); orderPrivateCar.setPayType(3); - orderPrivateCar.setPayMoney(orderMoney); - orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue()); +// orderPrivateCar.setPayMoney(orderMoney); +// orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue()); //处理优惠券和红包 if(null != userCouponRecord){ @@ -1221,41 +1526,100 @@ query.setEndTime(new Date()); userRedPacketRecordService.updateById(query); } - if(orderPrivateCar.getIsplatPay()==1){ - //添加已收入明细 - Company company = companyService.selectById(orderPrivateCar.getCompanyId()); - Double speMoney = company.getSpeMoney(); - BigDecimal d = null;//企业收入 - BigDecimal c = null;//司机收入 - if(company.getIsSpeFixedOrProportional() == 2){//固定 - d = new BigDecimal(speMoney); - c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 + + if(orderPrivateCar.getPayMethod() == 0){ + // 先付 + if(Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney() > 0){ + orderPrivateCar.setPayMoney(new BigDecimal(orderMoney).add(new BigDecimal(orderPrivateCar.getPaymentAdvanceMoney())).doubleValue()); + orderPrivateCar.setOrderMoney(orderPrivateCar.getPayMoney()); + //添加已收入明细 + Company company = companyService.selectById(orderPrivateCar.getCompanyId()); + Double speMoney = company.getSpeMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 + if(c.compareTo(BigDecimal.ZERO)<1){ + c = BigDecimal.ZERO; + } + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); + d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); + incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + orderPrivateCar.setState(8); + }else { + if(orderPrivateCar.getOrderSource() == 2){ + orderPrivateCar.setState(2); + }else { + orderPrivateCar.setState(1); + } + orderPrivateCar.setPaymentAdvanceMoney(orderMoney); + orderPrivateCar.setOrderMoney(orderMoney); + orderPrivateCar.setPayMoney(orderMoney); } - if(company.getIsSpeFixedOrProportional() == 1){//比例 - Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); - d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); - c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + } + }).start(); + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); + if(orderPrivateCar.getState() == 1){ + this.pushOrder(orderPrivateCar); } - incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); - incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); + }else { + // 后付 + orderPrivateCar.setPayMoney(orderMoney); + if(orderPrivateCar.getIsplatPay()==1){ + //添加已收入明细 + Company company = companyService.selectById(orderPrivateCar.getCompanyId()); + Double speMoney = company.getSpeMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 + if(c.compareTo(BigDecimal.ZERO)<1){ + c = BigDecimal.ZERO; + } + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); + d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); + incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + } + + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + } + }).start(); + + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); } - - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - } - }).start(); - - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); } this.updateAllColumnById(orderPrivateCar); @@ -1374,6 +1738,32 @@ //添加交易明细 transactionDetailsService.saveData(orderPrivateCar.getUserId(), "取消订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); orderPrivateCar.setState(10); + // 判断订单金额是否为空或者为0 + if(orderPrivateCar.getPayMethod() == 0){ + // 先付 + Double refundMoney = orderPrivateCar.getOrderMoney(); + if(Objects.nonNull(orderPrivateCar.getCouponMoney())){ + refundMoney = new BigDecimal(refundMoney).subtract(new BigDecimal(orderPrivateCar.getCouponMoney())).doubleValue(); + } + // 退款 + if(orderPrivateCar.getPayType() == 1 && orderPrivateCar.getOrderMoney() !=0){//微信退款 + // 微信退款 + payMoneyUtil.wxRefund(orderPrivateCar.getTransactionId(),orderPrivateCar.getOrderNum(),String.valueOf(orderPrivateCar.getOrderMoney()),String.valueOf(refundMoney),"/base/transferWXNotify"); + } + if(orderPrivateCar.getPayType() == 2 && orderPrivateCar.getOrderMoney() !=0) {//支付宝退款 + // 支付宝退款 + payMoneyUtil.aliRefund(orderPrivateCar.getTransactionId(),String.valueOf(refundMoney*100)); + } + if(orderPrivateCar.getPayType() == 3 && orderPrivateCar.getOrderMoney() !=0) {//余额退款 + // 余额退款 + UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).add(new BigDecimal(refundMoney)).doubleValue()); + userInfoService.updateById(userInfo); + //添加交易明细 + transactionDetailsService.saveData(orderPrivateCar.getUserId(), "专车取消退款", refundMoney, 2, 1, 1, 1, id); + } + } + //解除小号绑定 // if(orderPrivateCar.getBindId() != null){ // chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX()); @@ -1448,10 +1838,9 @@ return; } transactionDetailsService.saveData(orderPrivateCar.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); - orderPrivateCar.setState(8); +// orderPrivateCar.setState(8); orderPrivateCar.setPayType(type); - orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue()); - orderPrivateCar.setPayMoney(query.getAmount()); + orderPrivateCar.setTransactionId(order_id); this.updateById(orderPrivateCar); UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); @@ -1476,29 +1865,77 @@ query.setState(2); query.setCode(order_id); paymentRecordService.updateById(query); - - if(orderPrivateCar.getIsplatPay()==1){ - //添加已收入明细 - Company company = companyService.selectById(orderPrivateCar.getCompanyId()); - Double taxi = company.getSpeMoney(); - BigDecimal d = null;//企业收入 - BigDecimal c = null;//司机收入 - if(company.getIsSpeFixedOrProportional() == 2){//固定 - d = new BigDecimal(taxi); - c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + + // 判断先付还是后付 + if(orderPrivateCar.getPayMethod() == 0){ + + if (Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney() > 0 ) { + orderPrivateCar.setState(8); + orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+query.getAmount()); + orderPrivateCar.setPayMoney(orderPrivateCar.getPayMoney()+query.getAmount()); + //添加已收入明细 + Company company = companyService.selectById(orderPrivateCar.getCompanyId()); + Double speMoney = company.getSpeMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 + if(c.compareTo(BigDecimal.ZERO)<1){ + c = BigDecimal.ZERO; + } + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); + d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); + incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + }else { + if(orderPrivateCar.getOrderSource() == 2){ + orderPrivateCar.setState(2); + }else { + orderPrivateCar.setState(1); + } + orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue()); + orderPrivateCar.setPayMoney(query.getAmount()); + orderPrivateCar.setPaymentAdvanceMoney(orderPrivateCar.getOrderMoney()); } - if(company.getIsSpeFixedOrProportional() == 1){//比例 - Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); - d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); - c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + this.updateById(orderPrivateCar); + }else { + orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+orderPrivateCar.getFreeMoney().doubleValue()); + orderPrivateCar.setPayMoney(query.getAmount()); + orderPrivateCar.setState(8); + this.updateById(orderPrivateCar); + if(orderPrivateCar.getIsplatPay()==1){ + //添加已收入明细 + Company company = companyService.selectById(orderPrivateCar.getCompanyId()); + Double taxi = company.getSpeMoney(); + BigDecimal d = null;//企业收入 + BigDecimal c = null;//司机收入 + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(taxi); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); + d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); + incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); } - incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); - incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); } // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 new Thread(new Runnable() { diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCity.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCity.java index 0cf1845..c626362 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCity.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OpenCity.java @@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableName; +import java.math.BigDecimal; + /** * 开通城市 */ @@ -43,7 +45,19 @@ */ @TableField("provinceName") private String provinceName; + /** + * 订单额度 + */ + @TableField("orderMagnitude") + private BigDecimal orderMagnitude; + public BigDecimal getOrderMagnitude() { + return orderMagnitude; + } + + public void setOrderMagnitude(BigDecimal orderMagnitude) { + this.orderMagnitude = orderMagnitude; + } public String getCode() { return code; } diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BaseWarpper.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BaseWarpper.java index 90e1ed1..a76d9c6 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BaseWarpper.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/BaseWarpper.java @@ -1,5 +1,6 @@ package com.stylefeng.guns.modular.system.warpper; +import com.baomidou.mybatisplus.annotations.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -33,6 +34,16 @@ @ApiModelProperty("状态") private Integer state; + @ApiModelProperty("0先付 1后付") + private Integer payMethod; + + public Integer getPayMethod() { + return payMethod; + } + + public void setPayMethod(Integer payMethod) { + this.payMethod = payMethod; + } public Integer getState() { return state; -- Gitblit v1.7.1