| | |
| | | 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()); |
| | |
| | | @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()); |
| | |
| | | */ |
| | | @Override |
| | | public ResultUtil setOrderStatus(Integer uid, Long orderId, Integer payType, Integer state) throws Exception { |
| | | if(108 == state){ |
| | | String value = redisUtil.getValue("repeat_" + orderId); |
| | | if(ToolUtil.isEmpty(value)){ |
| | | redisUtil.setStrValue("repeat_" + orderId, System.currentTimeMillis() + "", 600);//10分钟 |
| | | }else{ |
| | | Long s = System.currentTimeMillis() - Long.valueOf(value); |
| | | if(s.compareTo(60000L) < 0){//1分钟 |
| | | return ResultUtil.error("数据处理中"); |
| | | } |
| | | redisUtil.setStrValue("repeat_" + orderId, System.currentTimeMillis() + "", 600);//10分钟 |
| | | } |
| | | } |
| | | |
| | | List<Integer> s = Arrays.asList(107, 108); |
| | | if(!s.contains(state)){ |
| | | return ResultUtil.error("操作失败,请刷新订单"); |
| | | } |
| | | Order order = this.selectById(orderId); |
| | | if(order.getState().compareTo(state) == 0){ |
| | | 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(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); |
| | | } |
| | | 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{ |
| | | 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{ |
| | | num1++; |
| | | } |
| | | } |
| | | } |
| | | if(!lock){ |
| | | redisUtil.unlock(orderId + ""); |
| | | return ResultUtil.error("请稍后重试"); |
| | | } |
| | | |
| | | 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(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); |
| | | |
| | | } |
| | | this.updateById(order); |
| | | if(payType == 2 && state == 108){//计算抽成 |
| | | saveRevenue(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()); |
| | | } |
| | | |
| | | 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(); |
| | | 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); |
| | | }, 60000); |
| | | } |
| | | redisUtil.unlock(orderId + ""); |
| | | return ResultUtil.success(); |
| | | }catch (Exception e){ |
| | | redisUtil.unlock(orderId + ""); |
| | | e.printStackTrace(); |
| | | return ResultUtil.error("系统异常"); |
| | | } |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | | |
| | |
| | | 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) { |
| | | completeCollection_(order); |
| | | Long orderId = order.getId(); |
| | | 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 + ""); |
| | | continue; |
| | | } |
| | | completeCollection_(order); |
| | | }catch (Exception e){ |
| | | redisUtil.unlock(orderId + ""); |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | |
| | | public void completeCollection_(Order order) { |
| | | public void completeCollection_(Order order) throws Exception{ |
| | | order.setState(108); |
| | | order.setPayTime(new Date()); |
| | | if(null != order.getCouponId()){ |
| | |
| | | } |
| | | |
| | | this.updateById(order); |
| | | |
| | | try { |
| | | saveRevenue(order); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | saveRevenue(order); |
| | | } |
| | | } |