From 92e00dafd06ec748b51f565c7a4c98986a618de9 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期六, 03 六月 2023 02:01:40 +0800 Subject: [PATCH] 新增加分账功能 --- driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java | 499 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 495 insertions(+), 4 deletions(-) diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java index 47b1267..11518dc 100644 --- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java +++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java @@ -10,6 +10,8 @@ import com.supersavedriving.driver.modular.system.service.*; import com.supersavedriving.driver.modular.system.util.*; import com.supersavedriving.driver.modular.system.util.GaoDe.MapUtil; +import com.supersavedriving.driver.modular.system.util.MallBook.model.*; +import com.supersavedriving.driver.modular.system.util.MallBook.util.TrhRequest; import com.supersavedriving.driver.modular.system.util.mongodb.model.Location; import com.supersavedriving.driver.modular.system.warpper.*; import com.supersavedriving.driver.core.util.ToolUtil; @@ -21,6 +23,7 @@ import com.supersavedriving.driver.modular.system.warpper.OrderInfoWarpper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.geo.Circle; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Metrics; @@ -95,6 +98,18 @@ @Autowired private IUserToCouponService userToCouponService; + + @Autowired + private IRechargeRecordService rechargeRecordService; + + @Autowired + private IDivisionRecordService divisionRecordService; + + @Autowired + private IAgentService agentService; + + @Value("${callbackPath}") + private String callbackPath;//支付回调网关地址 private Map<String, Timer> timerMap = new HashMap<>(); @@ -1183,10 +1198,78 @@ accountChangeDetail.setChangeType(7); accountChangeDetail.setOrderId(order.getId()); accountChangeDetail.setExplain("优惠券收入"); - driver.setCouponBalance(driver.getCouponBalance() + coupon.getCouponPreferentialAmount()); + driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount()); accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); driverService.updateById(driver); accountChangeDetailService.insert(accountChangeDetail); + + //补贴中分账 + Double discountedPrice = order.getDiscountedPrice(); + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(discountedPrice) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + discountedPrice -= surplusDividedAmount; + }else{ + break; + } + } + } + + + } + } + + if(order.getDiscountAmount() > 0){ + Driver driver = driverService.selectById(order.getDriverId()); + AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setUserType(2); + accountChangeDetail.setUserId(order.getDriverId()); + accountChangeDetail.setCreateTime(new Date()); + accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); + accountChangeDetail.setType(1); + accountChangeDetail.setChangeType(7); + accountChangeDetail.setOrderId(order.getId()); + accountChangeDetail.setExplain("折扣优惠收入"); + driver.setCommission(driver.getCommission() + order.getDiscountAmount()); + accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); + driverService.updateById(driver); + accountChangeDetailService.insert(accountChangeDetail); + + //补贴中分账 + Double discountedPrice = order.getDiscountAmount(); + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(discountedPrice) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + discountedPrice -= surplusDividedAmount; + }else{ + break; + } + } } } } @@ -1204,6 +1287,41 @@ pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState()); } return ResultUtil.success(); + } + + + + /** + * 转账 + * @param id + * @param merOrderId + * @param toUserId + * @param amount + * @param notifyUrl + * @return + */ + public ResultUtil zhaunzhang(Integer id, String merOrderId, String toUserId, Double amount, String notifyUrl){ + Transfer transfer = new Transfer(); + transfer.setDepositMerOrderId(merOrderId); + transfer.setToUserId(toUserId); + transfer.setAmount(String.valueOf(Double.valueOf(amount * 100))); + transfer.setOrderName("补贴"); + transfer.setNotifyUrl(notifyUrl); + transfer.setParameter1(id.toString()); + TrhRequest<Transfer> request = new TrhRequest(); + InterfaceResponse execute = request.execute(transfer, Transfer.SERVICE_CODE); + if("0000".equals(execute.getCode())){ + JSONObject jsonObject = JSON.parseObject(execute.getResult()); + Integer status = jsonObject.getInteger("status");//0:待处理;1:成功;2:失败 + if(2 == status){ + System.err.println("转账失败"); + return ResultUtil.error("转账失败"); + } + return ResultUtil.success(); + }else{ + System.err.println("转账失败:" + execute.getMsg()); + return ResultUtil.error(execute.getMsg()); + } } @@ -1260,6 +1378,30 @@ revenue.setAmount(num1); revenue.setCreateTime(new Date()); revenueService.insert(revenue); + + Double num1_1 = num1; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num1_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num1_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num1_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(0d); + rechargeRecordService.updateById(rechargeRecord); + num1_1 -= surplusDividedAmount; + }else{ + break; + } + } + } + } num3 = (num3 >= num1 ? num3 - num1 : 0); } @@ -1298,6 +1440,30 @@ accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); driverService.updateById(driver1); accountChangeDetailService.saveData(accountChangeDetail); + + Double num5_1 = num5; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num5_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num5_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num5_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(0d); + rechargeRecordService.updateById(rechargeRecord); + num5_1 -= surplusDividedAmount; + }else{ + break; + } + } + } + num3 = (num3 >= num5 ? num3 - num5 : 0); } num6 = (num3 >= num6 ? num6 : num3); @@ -1324,6 +1490,30 @@ accountChangeDetail.setNewData(driver2.getBalance() + driver2.getBackgroundBalance() + driver2.getCouponBalance() + driver2.getCommission()); driverService.updateById(driver2); accountChangeDetailService.saveData(accountChangeDetail); + + Double num6_1 = num6; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num6_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), num6_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num6_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(0d); + rechargeRecordService.updateById(rechargeRecord); + num6_1 -= surplusDividedAmount; + }else{ + break; + } + } + } + num3 = (num3 >= num6 ? num3 - num6 : 0); } num7 = (num3 >= num7 ? num7 : num3); @@ -1350,6 +1540,30 @@ accountChangeDetail.setNewData(driver3.getBalance() + driver3.getBackgroundBalance() + driver3.getCouponBalance() + driver3.getCommission()); driverService.updateById(driver3); accountChangeDetailService.saveData(accountChangeDetail); + + Double num7_1 = num7; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num7_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver3.getMerchantNumber(), num7_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num7_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver3.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(0d); + rechargeRecordService.updateById(rechargeRecord); + num7_1 -= surplusDividedAmount; + }else{ + break; + } + } + } + num3 = (num3 >= num7 ? num3 - num7 : 0); } }else{ @@ -1379,6 +1593,30 @@ accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); driverService.updateById(driver1); accountChangeDetailService.saveData(accountChangeDetail); + + Double num3_1 = num3_; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num3_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num3_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num3_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(0d); + rechargeRecordService.updateById(rechargeRecord); + num3_1 -= surplusDividedAmount; + }else{ + break; + } + } + } + num3 = (num3 >= num3_ ? num3 - num3_ : 0); } num4 = (num3 >= num4 ? num4 : num3); @@ -1405,6 +1643,30 @@ accountChangeDetail.setNewData(driver2.getBalance() + driver2.getBackgroundBalance() + driver2.getCouponBalance() + driver2.getCommission()); driverService.updateById(driver2); accountChangeDetailService.saveData(accountChangeDetail); + + Double num4_1 = num4; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num4_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), num4_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num4_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(0d); + rechargeRecordService.updateById(rechargeRecord); + num4_1 -= surplusDividedAmount; + }else{ + break; + } + } + } + num3 = (num3 >= num4 ? num3 - num4 : 0); } } @@ -1434,6 +1696,29 @@ accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); driverService.updateById(driver1); accountChangeDetailService.saveData(accountChangeDetail); + + Double num2_1 = num2_; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num2_1) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), num2_1, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num2_1); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(0d); + rechargeRecordService.updateById(rechargeRecord); + num2_1 -= surplusDividedAmount; + }else{ + break; + } + } + } num3 = (num3 >= num2_ ? num3 - num2_ : 0); } } @@ -1448,12 +1733,36 @@ revenue.setAmount(num3); revenue.setCreateTime(new Date()); revenueService.insert(revenue); + + Agent agent = agentService.selectById(driver.getAgentId()); + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num3) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), agent.getMerchantNumber(), num3, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num3); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), agent.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(zhaunzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(0d); + rechargeRecordService.updateById(rechargeRecord); + num3 -= surplusDividedAmount; + }else{ + break; + } + } + } } } } } //司机余额扣减抽佣金额 - if(n > 0){ + if(order.getPayMoney() > payMoney){ + Double m = order.getPayMoney() - payMoney; AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); accountChangeDetail.setUserType(2); @@ -1464,12 +1773,127 @@ accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); accountChangeDetail.setExplain("线下收款服务费支出"); accountChangeDetail.setCreateTime(new Date()); - driver.setBalance(driver.getBalance() - n); + driver.setBalance(driver.getBalance() - m); accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); driverService.updateById(driver); accountChangeDetailService.saveData(accountChangeDetail); + + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(m) >= 0){ + ResultUtil fengzhang = fengzhang(3, null, "553021440975", rechargeRecord.getId().longValue(), rechargeRecord.getOrderNumber(), m, 1); + if(fengzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - m); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil fengzhang = fengzhang(3, null, "553021440975", rechargeRecord.getId().longValue(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 1); + if(fengzhang.getCode() == 10000){ + rechargeRecord.setSurplusDividedAmount(0d); + rechargeRecordService.updateById(rechargeRecord); + m -= surplusDividedAmount; + }else{ + break; + } + } + } } } + + + + /** + * 分账操作 + * @param amount + */ + @Override + public ResultUtil fengzhang(Integer userType, Integer id, String merchantNumber, Long orderId, String merOrderId, Double amount, Integer sourceType){ + DivisionRecord divisionRecord = new DivisionRecord(); + divisionRecord.setUserType(userType); + divisionRecord.setUserId(id); + divisionRecord.setOrderId(orderId); + divisionRecord.setSourceType(sourceType); + divisionRecord.setAmount(amount); + divisionRecord.setMerchantNumber(merchantNumber); + divisionRecord.setState(1); + divisionRecord.setCreateTime(new Date()); + divisionRecordService.insert(divisionRecord); + + Complete complete = new Complete(); + complete.setOriginalMerOrderId(merOrderId); + complete.setNotifyUrl(callbackPath + "/base/order/ledgerCallback"); + complete.setParameter1(divisionRecord.getId().toString()); + //分账方列表 + List<PamentOrderUser> splitList = new ArrayList<>(); + PamentOrderUser pamentOrderUser = new PamentOrderUser(); + pamentOrderUser.setSplitUserId(merchantNumber); + pamentOrderUser.setSplitAmount(amount.toString()); + pamentOrderUser.setSplitType("1"); + splitList.add(pamentOrderUser); + complete.setSplitList(splitList); + TrhRequest<Complete> request = new TrhRequest(); + InterfaceResponse execute = request.execute(complete, Complete.SERVICE_CODE);//分账操作 + if("0000".equals(execute.getCode())){ + JSONObject jsonObject = JSON.parseObject(execute.getResult()); + Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败 + String merOrderId1 = jsonObject.getString("merOrderId"); + if(2 == status){ + System.err.println("订单支付成功后的分账处理异常失败"); + return ResultUtil.error("订单支付成功后的分账处理异常失败"); + } + if(1 == status){ + divisionRecord.setMerOrderId(merOrderId1); + divisionRecord.setPayTime(new Date()); + divisionRecord.setState(2); + divisionRecordService.updateById(divisionRecord); + //间隔10秒开始调用确认收货后开始提现 + + new Timer().schedule(new TimerTask() {//确认收货和提现 + @Override + public void run() { + confirmReceipt(merchantNumber, merOrderId, divisionRecord); + } + }, 15000); + return ResultUtil.success(); + } + }else{ + System.err.println("订单支付成功后的分账处理异常 :" + execute.getMsg()); + return ResultUtil.error("订单支付成功后的分账处理异常 :" + execute.getMsg()); + } + return ResultUtil.error("未知异常"); + } + + + + + /** + * 分账后的确认收货 + * @param divisionRecord + */ + public void confirmReceipt(String merchantNumber, String orderNumber, DivisionRecord divisionRecord){ + Receive receive = new Receive(); + receive.setOriginalMerOrderId(orderNumber); + receive.setAsynMerOrderId(divisionRecord.getMerOrderId()); + receive.setRcvAmount(divisionRecord.getAmount().toString()); + List<ReceiveUser> splitList = new ArrayList<>(); + ReceiveUser receiveUser = new ReceiveUser(); + receiveUser.setSplitUserId(merchantNumber); + receiveUser.setRcvSplitAmount(divisionRecord.getAmount().toString()); + splitList.add(receiveUser); + receive.setSplitList(splitList); + TrhRequest<Receive> request = new TrhRequest(); + InterfaceResponse execute1 = request.execute(receive, Receive.SERVICE_CODE);//确认收货 + if("0000".equals(execute1.getCode())){ + JSONObject jsonObject = JSON.parseObject(execute1.getResult()); + String merOrderId = jsonObject.getString("merOrderId"); + System.err.println("分账确认收货成功"); + }else{ + System.err.println("分账确认收货异常" + execute1.getMsg()); + } + } + /** * 获取司机的订单列表 @@ -1648,12 +2072,79 @@ accountChangeDetail.setChangeType(7); accountChangeDetail.setOrderId(order.getId()); accountChangeDetail.setExplain("优惠券收入"); - driver.setCouponBalance(driver.getCouponBalance() + coupon.getCouponPreferentialAmount()); + driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount()); accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); driverService.updateById(driver); accountChangeDetailService.insert(accountChangeDetail); + + //补贴中分账 + Double discountedPrice = order.getDiscountedPrice(); + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(discountedPrice) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + discountedPrice -= surplusDividedAmount; + }else{ + break; + } + } + } } } + + if(order.getDiscountAmount() > 0){ + Driver driver = driverService.selectById(order.getDriverId()); + AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setUserType(2); + accountChangeDetail.setUserId(order.getDriverId()); + accountChangeDetail.setCreateTime(new Date()); + accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); + accountChangeDetail.setType(1); + accountChangeDetail.setChangeType(7); + accountChangeDetail.setOrderId(order.getId()); + accountChangeDetail.setExplain("折扣优惠收入"); + driver.setCommission(driver.getCommission() + order.getDiscountAmount()); + accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission()); + driverService.updateById(driver); + accountChangeDetailService.insert(accountChangeDetail); + + //补贴中分账 + Double discountedPrice = order.getDiscountAmount(); + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(discountedPrice) >= 0){ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + discountedPrice -= surplusDividedAmount; + }else{ + break; + } + } + } + } + this.updateById(order); try { -- Gitblit v1.7.1