From 6cabe9ee512ddd3d04c4e10b39d34641ecc0e844 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期一, 24 七月 2023 15:06:41 +0800 Subject: [PATCH] 修改bug --- driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java | 577 ++++++++++++++++++++++++++++++--------------------------- 1 files changed, 305 insertions(+), 272 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 a87c1fc..6443d6d 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 @@ -21,6 +21,8 @@ import com.supersavedriving.driver.modular.system.warpper.AddOrderWarpper; import com.supersavedriving.driver.modular.system.warpper.HallOrderList; import com.supersavedriving.driver.modular.system.warpper.OrderInfoWarpper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -46,6 +48,8 @@ */ @Service public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService { + + Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class); @Autowired private IDriverWorkService driverWorkService; @@ -107,6 +111,9 @@ @Autowired private IAgentService agentService; + @Autowired + private IOrderPositionService orderPositionService; + @Value("${callbackPath}") private String callbackPath;//支付回调网关地址 @@ -159,13 +166,26 @@ driver.setServerStatus(2); order.setOrderTakingTime(new Date()); } - order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(3)); + order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5)); order.setSource(2); AppUser appUser = appUserService.selectOne(new EntityWrapper<AppUser>().eq("phone", addOrderWarpper.getPhone()).eq("status", 1)); if(null != appUser){ order.setUserId(appUser.getId()); } + + + String startAddress = addOrderWarpper.getStartAddress(); + startAddress = startAddress.replaceAll("& #40;", "("); + startAddress = startAddress.replaceAll("& #41;", ")"); + addOrderWarpper.setStartAddress(startAddress); + if(ToolUtil.isNotEmpty(addOrderWarpper.getEndAddress())){ + String endAddress = addOrderWarpper.getEndAddress(); + endAddress = endAddress.replaceAll("& #40;", "("); + endAddress = endAddress.replaceAll("& #41;", ")"); + addOrderWarpper.setEndAddress(endAddress); + } + order.setUserName(addOrderWarpper.getUserName()); order.setUserPhone(addOrderWarpper.getPhone()); order.setAgentId(driver.getAgentId()); @@ -490,7 +510,8 @@ continue; } Driver driver1 = driverService.selectById(youTuiDriver.getDriverId()); - if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1){ + int count = this.selectCount(new EntityWrapper<Order>().eq("driverId", youTuiDriver.getDriverId()).eq("status", 1).in("state", Arrays.asList(102, 103, 104, 105, 201, 401))); + if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1 || count > 0){ continue; } DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver1.getId()).eq("status", 1)); @@ -546,7 +567,10 @@ if(null == driverWork){ continue; } - + int count = this.selectCount(new EntityWrapper<Order>().eq("driverId", driver1.getId()).eq("status", 1).in("state", Arrays.asList(102, 103, 104, 105, 201, 401))); + if(count > 0){ + continue; + } if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大 integral = driver1.getIntegral(); score = driver1.getScore(); @@ -593,19 +617,22 @@ @Override public void run() { Order order1 = OrderServiceImpl.this.selectById(order.getId()); - if(order1.getState() != 101 && order1.getState() != 201 && order1.getDriverId().compareTo(driver1.getId()) != 0){ + if(order1.getState() != 101 && order1.getState() != 201 && order1.getState() != 301 && order1.getDriverId().compareTo(driver1.getId()) != 0){ driver1.setServerStatus(1); driverService.updateById(driver1); } - if(order1.getState() == 201 || (order1.getState() == 101 && null == order1.getDriverId())){ + if(order1.getState() == 201 || order1.getState() == 301 || (order1.getState() == 101 && null == order1.getDriverId())){ driver1.setServerStatus(1); driverService.updateById(driver1); - + } + if(order1.getState() == 201 || (order1.getState() == 101 && null == order1.getDriverId())){ order1.setHallOrder(1); OrderServiceImpl.this.updateById(order1); ExtraPushOrder(order); } + + } }, num4 * 1000); }else{ @@ -650,7 +677,7 @@ for (Driver driver1 : drivers) { String value = redisUtil.getValue("DRIVER" + driver1.getId()); if (ToolUtil.isEmpty(value)) { - return; + continue; } pushUtil.pushGrabOrderExtras(driver1.getId(), 2); } @@ -673,6 +700,7 @@ pageNum = (pageNum - 1) * pageSize; String value = redisUtil.getValue("DRIVER" + uid); List<HallOrderList> hallOrderLists = this.baseMapper.queryOrderHall(pageNum, pageSize); + List<HallOrderList> lists = new ArrayList<>(); hallOrderLists.forEach(hallOrderList -> { if(ToolUtil.isEmpty(hallOrderList.getAvatar())){ hallOrderList.setAvatar("https://csxdj.obs.cn-south-1.myhuaweicloud.com:443/66cc269703a84e4da87fb21e2c21ab1f.png"); @@ -682,11 +710,17 @@ Map<String, Double> distance = GeodesyUtil.getDistance(hallOrderList.getStartLng() + "," + hallOrderList.getStartLat(), value); Double wgs84 = distance.get("WGS84"); hallOrderList.setCurrentDistance(wgs84); + + if(wgs84 > 5000){ + return; + } }else{ hallOrderList.setCurrentDistance(0D); + return; } + lists.add(hallOrderList); }); - return hallOrderLists; + return lists; } @@ -725,7 +759,7 @@ Integer num10 = JSON.parseObject(systemConfig.getContent()).getInteger("num10"); if (num10 > 0) { AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(uid); accountChangeDetail.setType(2); @@ -943,10 +977,17 @@ Integer w = new BigDecimal(Double.valueOf(System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue(); order.setWaitTime(order.getWaitTime() + w); order.setStartWaitTime(null); + orderPositionService.initMap(order.getId()); break; case 106: order.setGetoffTime(new Date()); if(ToolUtil.isEmpty(order.getEndAddress())){ + + String endAddress = processOperationsWarpper.getEndAddress(); + endAddress = endAddress.replaceAll("& #40;", "("); + endAddress = endAddress.replaceAll("& #41;", ")"); + processOperationsWarpper.setEndAddress(endAddress); + order.setEndAddress(processOperationsWarpper.getEndAddress()); order.setEndLng(processOperationsWarpper.getEndLng()); order.setEndLat(processOperationsWarpper.getEndLat()); @@ -960,6 +1001,17 @@ city = null != weatherCity ? weatherCity.getId().toString() : ""; } order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city); + Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney()); + if(null != coupon){ + order.setCouponId(coupon.getId()); + order.setDiscountedPrice(coupon.getCouponPreferentialAmount()); + order.setPayMoney(order.getOrderMoney() - coupon.getCouponPreferentialAmount()); + UserToCoupon userToCoupon = userToCouponService.selectById(coupon.getId()); + userToCoupon.setValidCount(userToCoupon.getValidCount() - 1); + userToCouponService.updateById(userToCoupon); + }else{ + order.setPayMoney(order.getOrderMoney()); + } //修改司机状态和积分 Driver driver = driverService.selectById(order.getDriverId()); @@ -1000,7 +1052,7 @@ Integer num5 = JSON.parseObject(systemConfig.getContent()).getInteger("num5"); if(num5 > 0){ AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(order.getDriverId()); accountChangeDetail.setType(2); @@ -1025,7 +1077,7 @@ Integer num8 = JSON.parseObject(systemConfig.getContent()).getInteger("num8"); if(num8 > 0){ AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(order.getDriverId()); accountChangeDetail.setType(2); @@ -1138,6 +1190,12 @@ @Override public ResultUtil setOrderEndAddress(Integer uid, OrderEndAddressWarpper orderEndAddressWarpper) throws Exception { Order order = this.selectById(orderEndAddressWarpper.getOrderId()); + + String endAddress = orderEndAddressWarpper.getEndAddress(); + endAddress = endAddress.replaceAll("& #40;", "("); + endAddress = endAddress.replaceAll("& #41;", ")"); + orderEndAddressWarpper.setEndAddress(endAddress); + order.setEndLat(orderEndAddressWarpper.getEndLat()); order.setEndLng(orderEndAddressWarpper.getEndLng()); order.setEndAddress(orderEndAddressWarpper.getEndAddress()); @@ -1245,7 +1303,7 @@ OrderPriceWarpper orderPriceWarpper = new OrderPriceWarpper(); orderPriceWarpper.setStartTime(order.getArrivalTimeAtTheAppointmentPoint().getTime()); orderPriceWarpper.setEndTime(order.getGetoffTime().getTime()); - orderPriceWarpper.setActualMileage(Double.valueOf(order.getActualMileage() / 1000)); + orderPriceWarpper.setActualMileage(Double.valueOf(order.getActualMileage()) / 1000); if(null != order.getStartPrice() && 0 != order.getStartPrice()){ orderPriceWarpper.setStartPrice(order.getStartPrice()); orderPriceWarpper.setStartDistance(order.getStartDistance()); @@ -1267,7 +1325,7 @@ orderPriceWarpper.setDiscountedPrice(order.getDiscountedPrice()); orderPriceWarpper.setBadWeatherPrice(order.getBadWeatherPrice()); orderPriceWarpper.setPayMoney(order.getPayMoney()); - if(order.getState() < 107){ + if(order.getState() < 106){ orderPriceWarpper.setPayMoney(order.getOrderMoney()); } orderPriceWarpper.setWxCollectionCode(driver.getWxCollectionCode()); @@ -1286,47 +1344,60 @@ */ @Override public ResultUtil setOrderStatus(Integer uid, Long orderId, Integer payType, Integer state) throws Exception { - List<Integer> s = Arrays.asList(107, 108); - if(!s.contains(state)){ - return ResultUtil.error("操作失败,请刷新订单"); - } - Order order = this.selectById(orderId); - order.setState(state); - - if(payType == 2 && state == 107){ - order.setPayType(3); - Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney()); - if(null != coupon){ - order.setCouponId(coupon.getId()); - order.setDiscountedPrice(coupon.getCouponPreferentialAmount()); - order.setPayMoney(order.getOrderMoney() - coupon.getCouponPreferentialAmount()); - }else{ - order.setPayMoney(order.getOrderMoney()); + try { + boolean lock = redisUtil.lock(orderId + "",5); + if(!lock){ + int num1 = 1; + while (num1 <= 10){ + Thread.sleep(3000);//等待3秒 + lock = redisUtil.lock(orderId + "",5); + if(lock){ + break; + }else{ + num1++; + } + } } - } + if(!lock){ + redisUtil.unlock(orderId + ""); + return ResultUtil.error("请稍后重试"); + } - if(payType == 2 && state == 108){ - order.setPayTime(new Date()); - if(null != order.getCouponId()){ - UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId()); - if(userToCoupon.getValidCount() > 0){ - userToCoupon.setValidCount(userToCoupon.getValidCount() - 1); - userToCouponService.updateById(userToCoupon); + Order order = this.selectById(orderId); + if(state == 107 && order.getState() != 106){ + redisUtil.unlock(orderId + ""); + return ResultUtil.error("操作失败,请刷新数据"); + } + if(state == 108 && order.getState() != 107){ + redisUtil.unlock(orderId + ""); + return ResultUtil.error("操作失败,请刷新数据"); + } + + order.setState(state); + + if(payType == 2 && state == 107){ + order.setPayType(3); + } + + if(payType == 2 && state == 108){ + order.setPayTime(new Date()); + if(null != order.getCouponId()){ + UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId()); Coupon coupon = couponService.selectById(userToCoupon.getCouponId()); Driver driver = driverService.selectById(order.getDriverId()); AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(order.getDriverId()); accountChangeDetail.setCreateTime(new Date()); - accountChangeDetail.setOldData(driver.getCouponBalance() + driver.getCommission()); + accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); accountChangeDetail.setType(1); accountChangeDetail.setChangeType(7); accountChangeDetail.setOrderId(order.getId()); accountChangeDetail.setExplain("优惠券收入"); - driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount()); - accountChangeDetail.setNewData(driver.getCouponBalance() + driver.getCommission()); + driver.setCommission(new BigDecimal(driver.getCommission()).add(new BigDecimal(coupon.getCouponPreferentialAmount())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); driverService.updateById(driver); accountChangeDetailService.insert(accountChangeDetail); @@ -1336,84 +1407,60 @@ 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"); + ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback"); if(10000 == zhaunzhang.getCode()){ - rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - discountedPrice); + Double remainAmount = zhaunzhang.getData(); + rechargeRecord.setSurplusDividedAmount(remainAmount); rechargeRecordService.updateById(rechargeRecord); } break; }else{ - ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); if(10000 == zhaunzhang.getCode()){ - rechargeRecord.setSurplusDividedAmount(0D); + Double remainAmount = zhaunzhang.getData(); + rechargeRecord.setSurplusDividedAmount(remainAmount); rechargeRecordService.updateById(rechargeRecord); - discountedPrice -= surplusDividedAmount; + discountedPrice = new BigDecimal(discountedPrice).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); }else{ break; } } } - - } } + this.updateById(order); - 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.getCouponBalance() + driver.getCommission()); - accountChangeDetail.setType(1); - accountChangeDetail.setChangeType(7); - accountChangeDetail.setOrderId(order.getId()); - accountChangeDetail.setExplain("折扣优惠收入"); - driver.setCommission(driver.getCommission() + order.getDiscountAmount()); - accountChangeDetail.setNewData(driver.getCouponBalance() + driver.getCommission()); - driverService.updateById(driver); - accountChangeDetailService.insert(accountChangeDetail); + if(payType == 2 && state == 108){//计算抽成 + saveRevenue(order); + } - //补贴中分账 - 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; + PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper(); + pushOrderInfoWarpper.setId(order.getId()); + pushOrderInfoWarpper.setState(order.getState()); + pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper); + if(null != order.getUserId()){ + pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState()); + } + + if(payType == 2 && state == 107){ + new Timer().schedule(new TimerTask() { + @Override + public void run() { + try { + OrderServiceImpl.this.setOrderStatus(uid, orderId, payType, 108); + }catch (Exception e){ + e.printStackTrace(); } } - } + }, 60000); } + redisUtil.unlock(orderId + ""); + return ResultUtil.success(); + }catch (Exception e){ + redisUtil.unlock(orderId + ""); + e.printStackTrace(); + return ResultUtil.error("系统异常"); } - this.updateById(order); - - if(payType == 2 && state == 108){//计算抽成 - saveRevenue(order); - } - - PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper(); - pushOrderInfoWarpper.setId(order.getId()); - pushOrderInfoWarpper.setState(order.getState()); - pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper); - if(null != order.getUserId()){ - pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState()); - } - return ResultUtil.success(); } @@ -1427,11 +1474,11 @@ * @param notifyUrl * @return */ - public ResultUtil zhaunzhang(Integer id, String merOrderId, String toUserId, Double amount, String notifyUrl){ + public ResultUtil<Double> 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).intValue())); + transfer.setAmount(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + ""); transfer.setOrderName("补贴"); transfer.setNotifyUrl(notifyUrl); transfer.setParameter1(id.toString()); @@ -1439,12 +1486,13 @@ 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){ + String status = jsonObject.getString("status");//0:待处理;1:成功;2:失败 + if("2" == status){ System.err.println("转账失败"); return ResultUtil.error("转账失败"); } - return ResultUtil.success(); + Double remainAmount = Double.valueOf(jsonObject.getInteger("remainAmount")) / 100; + return ResultUtil.success(remainAmount); }else{ System.err.println("转账失败:" + execute.getMsg()); return ResultUtil.error(execute.getMsg()); @@ -1473,7 +1521,7 @@ JSONObject jsonObject2 = JSON.parseObject(systemConfig1.getContent()); Integer num4 = jsonObject2.getInteger("num4"); AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(driver1.getId()); accountChangeDetail.setType(2); @@ -1498,17 +1546,17 @@ if(order.getOrderMoney() >= num2){//订单金额大于num2才有抽佣金 driver = driverService.selectById(order.getDriverId()); AccountChangeDetail accountChangeDetail1 = new AccountChangeDetail(); - accountChangeDetail1.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail1.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail1.setUserType(2); accountChangeDetail1.setUserId(driver.getId()); accountChangeDetail1.setType(1); accountChangeDetail1.setChangeType(9); accountChangeDetail1.setOrderId(order.getId()); - accountChangeDetail1.setOldData(driver.getBalance() + driver.getBackgroundBalance()); - accountChangeDetail1.setExplain("线下收款服务费支出"); + accountChangeDetail1.setOldData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail1.setExplain("订单信息费"); accountChangeDetail1.setCreateTime(new Date()); - driver.setBalance(driver.getBalance() - num3); - accountChangeDetail1.setNewData(driver.getBalance() + driver.getBackgroundBalance()); + driver.setBalance(new BigDecimal(driver.getBalance()).subtract(new BigDecimal(num3)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail1.setNewData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); driverService.updateById(driver); accountChangeDetailService.saveData(accountChangeDetail1); @@ -1526,16 +1574,16 @@ Driver driver1 = driverService.selectById(appUser.getInviterId()); //首单积分奖励 AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(driver1.getId()); accountChangeDetail.setType(1); accountChangeDetail.setChangeType(5); - accountChangeDetail.setOldData(driver1.getCouponBalance() + driver1.getCommission()); + accountChangeDetail.setOldData(new BigDecimal(driver1.getCouponBalance()).add(new BigDecimal(driver1.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); accountChangeDetail.setExplain("邀请用户奖励"); accountChangeDetail.setCreateTime(new Date()); - driver1.setCommission(driver1.getCommission() + num1); - accountChangeDetail.setNewData(driver1.getCouponBalance() + driver1.getCommission()); + driver1.setCommission(new BigDecimal(driver1.getCommission()).add(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail.setNewData(new BigDecimal(driver1.getCouponBalance()).add(new BigDecimal(driver1.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); accountChangeDetailService.saveData(accountChangeDetail); driverService.updateById(driver1); @@ -1555,7 +1603,7 @@ if(surplusDividedAmount.compareTo(num1_1) >= 0){ ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num1_1, 3); if(fengzhang.getCode() == 10000){ - rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num1_1); + rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num1_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); rechargeRecordService.updateById(rechargeRecord); } break; @@ -1564,7 +1612,7 @@ if(fengzhang.getCode() == 10000){ rechargeRecord.setSurplusDividedAmount(0d); rechargeRecordService.updateById(rechargeRecord); - num1_1 -= surplusDividedAmount; + num1_1 = new BigDecimal(num1_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); }else{ break; } @@ -1572,7 +1620,8 @@ } } - num3 = (num3 >= num1 ? num3 - num1 : 0); + double v = new BigDecimal(num3).subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + num3 = (num3 >= num1 ? v : 0); } //开始处理层级抽佣 @@ -1597,16 +1646,16 @@ revenueService.insert(revenue); AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(driver1.getId()); accountChangeDetail.setType(1); accountChangeDetail.setChangeType(5); - accountChangeDetail.setOldData(driver1.getCouponBalance() + driver1.getCommission()); + accountChangeDetail.setOldData(new BigDecimal(driver1.getCouponBalance()).add(new BigDecimal(driver1.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); accountChangeDetail.setExplain("订单分佣收入"); accountChangeDetail.setCreateTime(new Date()); - driver1.setCommission(driver1.getCommission() + num5); - accountChangeDetail.setNewData(driver1.getCouponBalance() + driver1.getCommission()); + driver1.setCommission(new BigDecimal(driver1.getCommission()).add(new BigDecimal(num5)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail.setNewData(new BigDecimal(driver1.getCouponBalance()).add(new BigDecimal(driver1.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); driverService.updateById(driver1); accountChangeDetailService.saveData(accountChangeDetail); @@ -1617,7 +1666,7 @@ if(surplusDividedAmount.compareTo(num5_1) >= 0){ ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num5_1, 3); if(fengzhang.getCode() == 10000){ - rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num5_1); + rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num5_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); rechargeRecordService.updateById(rechargeRecord); } break; @@ -1626,14 +1675,14 @@ if(fengzhang.getCode() == 10000){ rechargeRecord.setSurplusDividedAmount(0d); rechargeRecordService.updateById(rechargeRecord); - num5_1 -= surplusDividedAmount; + num5_1 = new BigDecimal(num5_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); }else{ break; } } } - - num3 = (num3 >= num5 ? num3 - num5 : 0); + double v = new BigDecimal(num3).subtract(new BigDecimal(num5)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + num3 = (num3 >= num5 ? v : 0); } num6 = (num3 >= num6 ? num6 : num3); if(num6 > 0){ @@ -1647,16 +1696,16 @@ revenueService.insert(revenue); AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(driver2.getId()); accountChangeDetail.setType(1); accountChangeDetail.setChangeType(5); - accountChangeDetail.setOldData(driver2.getCouponBalance() + driver2.getCommission()); + accountChangeDetail.setOldData(new BigDecimal(driver2.getCouponBalance()).add(new BigDecimal(driver2.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); accountChangeDetail.setExplain("订单分佣收入"); accountChangeDetail.setCreateTime(new Date()); - driver2.setCommission(driver2.getCommission() + num6); - accountChangeDetail.setNewData(driver2.getCouponBalance() + driver2.getCommission()); + driver2.setCommission(new BigDecimal(driver2.getCommission()).add(new BigDecimal(num6)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail.setNewData(new BigDecimal(driver2.getCouponBalance()).add(new BigDecimal(driver2.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); driverService.updateById(driver2); accountChangeDetailService.saveData(accountChangeDetail); @@ -1667,7 +1716,7 @@ if(surplusDividedAmount.compareTo(num6_1) >= 0){ ResultUtil fengzhang = fengzhang(1, driver2.getId(), driver2.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num6_1, 3); if(fengzhang.getCode() == 10000){ - rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num6_1); + rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num6_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); rechargeRecordService.updateById(rechargeRecord); } break; @@ -1676,14 +1725,14 @@ if(fengzhang.getCode() == 10000){ rechargeRecord.setSurplusDividedAmount(0d); rechargeRecordService.updateById(rechargeRecord); - num6_1 -= surplusDividedAmount; + num6_1 = new BigDecimal(num6_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); }else{ break; } } } - - num3 = (num3 >= num6 ? num3 - num6 : 0); + double v = new BigDecimal(num3).subtract(new BigDecimal(num6)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + num3 = (num3 >= num6 ? v : 0); } num7 = (num3 >= num7 ? num7 : num3); if(num7 > 0){ @@ -1697,16 +1746,16 @@ revenueService.insert(revenue); AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(driver3.getId()); accountChangeDetail.setType(1); accountChangeDetail.setChangeType(5); - accountChangeDetail.setOldData(driver3.getCouponBalance() + driver3.getCommission()); + accountChangeDetail.setOldData(new BigDecimal(driver3.getCouponBalance()).add(new BigDecimal(driver3.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); accountChangeDetail.setExplain("订单分佣收入"); accountChangeDetail.setCreateTime(new Date()); - driver3.setCommission(driver3.getCommission() + num7); - accountChangeDetail.setNewData(driver3.getCouponBalance() + driver3.getCommission()); + driver3.setCommission(new BigDecimal(driver3.getCommission()).add(new BigDecimal(num7)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail.setNewData(new BigDecimal(driver3.getCouponBalance()).add(new BigDecimal(driver3.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); driverService.updateById(driver3); accountChangeDetailService.saveData(accountChangeDetail); @@ -1717,7 +1766,7 @@ if(surplusDividedAmount.compareTo(num7_1) >= 0){ ResultUtil fengzhang = fengzhang(1, driver3.getId(), driver3.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num7_1, 3); if(fengzhang.getCode() == 10000){ - rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num7_1); + rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num7_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); rechargeRecordService.updateById(rechargeRecord); } break; @@ -1726,14 +1775,14 @@ if(fengzhang.getCode() == 10000){ rechargeRecord.setSurplusDividedAmount(0d); rechargeRecordService.updateById(rechargeRecord); - num7_1 -= surplusDividedAmount; + num7_1 = new BigDecimal(num7_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); }else{ break; } } } - - num3 = (num3 >= num7 ? num3 - num7 : 0); + double v = new BigDecimal(num3).subtract(new BigDecimal(num7)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + num3 = (num3 >= num7 ? v : 0); } }else{ Double num3_ = jsonObject1.getDouble("num3"); @@ -1750,16 +1799,16 @@ revenueService.insert(revenue); AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(driver1.getId()); accountChangeDetail.setType(1); accountChangeDetail.setChangeType(5); - accountChangeDetail.setOldData(driver1.getCouponBalance() + driver1.getCommission()); + accountChangeDetail.setOldData(new BigDecimal(driver1.getCouponBalance()).add(new BigDecimal(driver1.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); accountChangeDetail.setExplain("订单分佣收入"); accountChangeDetail.setCreateTime(new Date()); - driver1.setCommission(driver1.getCommission() + num3_); - accountChangeDetail.setNewData(driver1.getCouponBalance() + driver1.getCommission()); + driver1.setCommission(new BigDecimal(driver1.getCommission()).add(new BigDecimal(num3_)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail.setNewData(new BigDecimal(driver1.getCouponBalance()).add(new BigDecimal(driver1.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); driverService.updateById(driver1); accountChangeDetailService.saveData(accountChangeDetail); @@ -1770,7 +1819,7 @@ if(surplusDividedAmount.compareTo(num3_1) >= 0){ ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num3_1, 3); if(fengzhang.getCode() == 10000){ - rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num3_1); + rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num3_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); rechargeRecordService.updateById(rechargeRecord); } break; @@ -1779,14 +1828,14 @@ if(fengzhang.getCode() == 10000){ rechargeRecord.setSurplusDividedAmount(0d); rechargeRecordService.updateById(rechargeRecord); - num3_1 -= surplusDividedAmount; + num3_1 = new BigDecimal(num3_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); }else{ break; } } } - - num3 = (num3 >= num3_ ? num3 - num3_ : 0); + double v = new BigDecimal(num3).subtract(new BigDecimal(num3_)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + num3 = (num3 >= num3_ ? v : 0); } num4 = (num3 >= num4 ? num4 : num3); if(num4 > 0){ @@ -1800,16 +1849,16 @@ revenueService.insert(revenue); AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(driver2.getId()); accountChangeDetail.setType(1); accountChangeDetail.setChangeType(5); - accountChangeDetail.setOldData(driver2.getCouponBalance() + driver2.getCommission()); + accountChangeDetail.setOldData(new BigDecimal(driver2.getCouponBalance()).add(new BigDecimal(driver2.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); accountChangeDetail.setExplain("订单分佣收入"); accountChangeDetail.setCreateTime(new Date()); - driver2.setCommission(driver2.getCommission() + num4); - accountChangeDetail.setNewData(driver2.getCouponBalance() + driver2.getCommission()); + driver2.setCommission(new BigDecimal(driver2.getCommission()).add(new BigDecimal(num4)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail.setNewData(new BigDecimal(driver2.getCouponBalance()).add(new BigDecimal(driver2.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); driverService.updateById(driver2); accountChangeDetailService.saveData(accountChangeDetail); @@ -1820,7 +1869,7 @@ if(surplusDividedAmount.compareTo(num4_1) >= 0){ ResultUtil fengzhang = fengzhang(1, driver2.getId(), driver2.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num4_1, 3); if(fengzhang.getCode() == 10000){ - rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num4_1); + rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num4_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); rechargeRecordService.updateById(rechargeRecord); } break; @@ -1829,14 +1878,14 @@ if(fengzhang.getCode() == 10000){ rechargeRecord.setSurplusDividedAmount(0d); rechargeRecordService.updateById(rechargeRecord); - num4_1 -= surplusDividedAmount; + num4_1 = new BigDecimal(num4_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); }else{ break; } } } - - num3 = (num3 >= num4 ? num3 - num4 : 0); + double v = new BigDecimal(num3).subtract(new BigDecimal(num4)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + num3 = (num3 >= num4 ? v : 0); } } }else{ @@ -1853,16 +1902,16 @@ revenueService.insert(revenue); AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(driver1.getId()); accountChangeDetail.setType(1); accountChangeDetail.setChangeType(5); - accountChangeDetail.setOldData(driver1.getCouponBalance() + driver1.getCommission()); + accountChangeDetail.setOldData(new BigDecimal(driver1.getCouponBalance()).add(new BigDecimal(driver1.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); accountChangeDetail.setExplain("订单分佣收入"); accountChangeDetail.setCreateTime(new Date()); - driver1.setCommission(driver1.getCommission() + num2_); - accountChangeDetail.setNewData(driver1.getCouponBalance() + driver1.getCommission()); + driver1.setCommission(new BigDecimal(driver1.getCommission()).add(new BigDecimal(num2_)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail.setNewData(new BigDecimal(driver1.getCouponBalance()).add(new BigDecimal(driver1.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); driverService.updateById(driver1); accountChangeDetailService.saveData(accountChangeDetail); @@ -1873,7 +1922,7 @@ if(surplusDividedAmount.compareTo(num2_1) >= 0){ ResultUtil fengzhang = fengzhang(1, driver1.getId(), driver1.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num2_1, 3); if(fengzhang.getCode() == 10000){ - rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num2_1); + rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num2_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); rechargeRecordService.updateById(rechargeRecord); } break; @@ -1882,13 +1931,14 @@ if(fengzhang.getCode() == 10000){ rechargeRecord.setSurplusDividedAmount(0d); rechargeRecordService.updateById(rechargeRecord); - num2_1 -= surplusDividedAmount; + num2_1 = new BigDecimal(num2_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); }else{ break; } } } - num3 = (num3 >= num2_ ? num3 - num2_ : 0); + double v = new BigDecimal(num3).subtract(new BigDecimal(num2_)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + num3 = (num3 >= num2_ ? v : 0); } } } @@ -1910,7 +1960,7 @@ if(surplusDividedAmount.compareTo(num3) >= 0){ ResultUtil fengzhang = fengzhang(2, agent.getId(), agent.getMerchantNumber(), order.getId(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num3, 3); if(fengzhang.getCode() == 10000){ - rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - num3); + rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num3)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); rechargeRecordService.updateById(rechargeRecord); } break; @@ -1919,7 +1969,7 @@ if(fengzhang.getCode() == 10000){ rechargeRecord.setSurplusDividedAmount(0d); rechargeRecordService.updateById(rechargeRecord); - num3 -= surplusDividedAmount; + num3 = new BigDecimal(num3).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); }else{ break; } @@ -1959,7 +2009,7 @@ List<PamentOrderUser> splitList = new ArrayList<>(); PamentOrderUser pamentOrderUser = new PamentOrderUser(); pamentOrderUser.setSplitUserId(merchantNumber); - pamentOrderUser.setSplitAmount(String.valueOf(Double.valueOf(amount * 100).intValue())); + pamentOrderUser.setSplitAmount(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + ""); pamentOrderUser.setSplitType("1"); splitList.add(pamentOrderUser); complete.setSplitList(splitList); @@ -1970,7 +2020,7 @@ Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败 String merOrderId1 = jsonObject.getString("merOrderId"); if(2 == status){ - System.err.println("订单支付成功后的分账处理异常失败"); + logger.warn("订单支付成功后的分账处理异常失败"); return ResultUtil.error("订单支付成功后的分账处理异常失败"); } if(1 == status){ @@ -1978,20 +2028,21 @@ divisionRecord.setPayTime(new Date()); divisionRecord.setState(2); divisionRecordService.updateById(divisionRecord); - //间隔10秒开始调用确认收货后开始提现 + //间隔1分钟开始调用确认收货后开始提现 new Timer().schedule(new TimerTask() {//确认收货和提现 @Override public void run() { confirmReceipt(merchantNumber, merOrderId, divisionRecord); } - }, 15000); + }, 60000); return ResultUtil.success(); } }else{ - System.err.println("订单支付成功后的分账处理异常 :" + execute.getMsg()); + logger.warn("订单支付成功后的分账处理异常 :" + execute.getMsg()); return ResultUtil.error("订单支付成功后的分账处理异常 :" + execute.getMsg()); } + logger.warn("未知异常"); return ResultUtil.error("未知异常"); } @@ -2006,11 +2057,11 @@ Receive receive = new Receive(); receive.setOriginalMerOrderId(orderNumber); receive.setAsynMerOrderId(divisionRecord.getMerOrderId()); - receive.setRcvAmount(String.valueOf(Double.valueOf(divisionRecord.getAmount() * 100).intValue())); + receive.setRcvAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + ""); List<ReceiveUser> splitList = new ArrayList<>(); ReceiveUser receiveUser = new ReceiveUser(); receiveUser.setSplitUserId(merchantNumber); - receiveUser.setRcvSplitAmount(String.valueOf(Double.valueOf(divisionRecord.getAmount() * 100).intValue())); + receiveUser.setRcvSplitAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + ""); splitList.add(receiveUser); receive.setSplitList(splitList); TrhRequest<Receive> request = new TrhRequest(); @@ -2018,9 +2069,9 @@ if("0000".equals(execute1.getCode())){ JSONObject jsonObject = JSON.parseObject(execute1.getResult()); String merOrderId = jsonObject.getString("merOrderId"); - System.err.println("分账确认收货成功"); + logger.warn("分账确认收货成功"); }else{ - System.err.println("分账确认收货异常" + execute1.getMsg()); + logger.warn("分账确认收货异常" + execute1.getMsg()); } } @@ -2196,106 +2247,88 @@ List<Order> orders = this.selectList(new EntityWrapper<Order>().eq("state", 107).eq("status", 1) .eq("payType", 3).last(" and UNIX_TIMESTAMP(getoffTime) + 600 <= UNIX_TIMESTAMP(now())")); for (Order order : orders) { - order.setState(108); - order.setPayTime(new Date()); - if(null != order.getCouponId()){ - UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId()); - if(userToCoupon.getValidCount() > 0){ - userToCoupon.setValidCount(userToCoupon.getValidCount() - 1); - userToCouponService.updateById(userToCoupon); - Coupon coupon = couponService.selectById(userToCoupon.getCouponId()); - - 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.getCouponBalance() + driver.getCommission()); - accountChangeDetail.setType(1); - accountChangeDetail.setChangeType(7); - accountChangeDetail.setOrderId(order.getId()); - accountChangeDetail.setExplain("优惠券收入"); - driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount()); - accountChangeDetail.setNewData(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.getCouponBalance() + driver.getCommission()); - accountChangeDetail.setType(1); - accountChangeDetail.setChangeType(7); - accountChangeDetail.setOrderId(order.getId()); - accountChangeDetail.setExplain("折扣优惠收入"); - driver.setCommission(driver.getCommission() + order.getDiscountAmount()); - accountChangeDetail.setNewData(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); - + Long orderId = order.getId(); try { - saveRevenue(order); - } catch (Exception e) { + boolean lock = redisUtil.lock(orderId + "",5); + if(!lock){ + int num1 = 1; + while (num1 <= 10){ + Thread.sleep(3000);//等待3秒 + lock = redisUtil.lock(orderId + "",5); + if(lock){ + break; + }else{ + num1++; + } + } + } + if(!lock){ + redisUtil.unlock(orderId + ""); + continue; + } + completeCollection_(order); + }catch (Exception e){ + redisUtil.unlock(orderId + ""); e.printStackTrace(); } } } + + + + + + public void completeCollection_(Order order) throws Exception{ + order.setState(108); + order.setPayTime(new Date()); + if(null != order.getCouponId()){ + UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId()); + Coupon coupon = couponService.selectById(userToCoupon.getCouponId()); + + Driver driver = driverService.selectById(order.getDriverId()); + AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); + accountChangeDetail.setUserType(2); + accountChangeDetail.setUserId(order.getDriverId()); + accountChangeDetail.setCreateTime(new Date()); + accountChangeDetail.setOldData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail.setType(1); + accountChangeDetail.setChangeType(7); + accountChangeDetail.setOrderId(order.getId()); + accountChangeDetail.setExplain("优惠券收入"); + driver.setCommission(new BigDecimal(driver.getCommission()).add(new BigDecimal(coupon.getCouponPreferentialAmount())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + accountChangeDetail.setNewData(new BigDecimal(driver.getCouponBalance()).add(new BigDecimal(driver.getCommission())).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + 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<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), discountedPrice, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + Double remainAmount = zhaunzhang.getData(); + rechargeRecord.setSurplusDividedAmount(remainAmount); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil<Double> zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback"); + if(10000 == zhaunzhang.getCode()){ + Double remainAmount = zhaunzhang.getData(); + rechargeRecord.setSurplusDividedAmount(remainAmount); + rechargeRecordService.updateById(rechargeRecord); + discountedPrice = new BigDecimal(discountedPrice).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + }else{ + break; + } + } + } + } + + this.updateById(order); + saveRevenue(order); + } } -- Gitblit v1.7.1