| | |
| | | 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; |
| | |
| | | */ |
| | | @Service |
| | | public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService { |
| | | |
| | | Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class); |
| | | |
| | | @Autowired |
| | | private IDriverWorkService driverWorkService; |
| | |
| | | @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{ |
| | |
| | | for (Driver driver1 : drivers) { |
| | | String value = redisUtil.getValue("DRIVER" + driver1.getId()); |
| | | if (ToolUtil.isEmpty(value)) { |
| | | return; |
| | | continue; |
| | | } |
| | | pushUtil.pushGrabOrderExtras(driver1.getId(), 2); |
| | | } |
| | |
| | | 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()); |
| | |
| | | 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()); |
| | |
| | | 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()); |
| | |
| | | |
| | | 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()); |
| | | } |
| | | } |
| | | |
| | | 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); |
| | | Coupon coupon = couponService.selectById(userToCoupon.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.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.setType(1); |
| | | accountChangeDetail.setChangeType(7); |
| | | accountChangeDetail.setOrderId(order.getId()); |
| | | accountChangeDetail.setExplain("折扣优惠收入"); |
| | | driver.setCommission(driver.getCommission() + order.getDiscountAmount()); |
| | | accountChangeDetail.setExplain("优惠券收入"); |
| | | driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount()); |
| | | accountChangeDetail.setNewData(driver.getCouponBalance() + driver.getCommission()); |
| | | driverService.updateById(driver); |
| | | accountChangeDetailService.insert(accountChangeDetail); |
| | | |
| | | //补贴中分账 |
| | | Double discountedPrice = order.getDiscountAmount(); |
| | | 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"); |
| | | 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; |
| | | }else{ |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | this.updateById(order); |
| | | |
| | |
| | | * @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); |
| | |
| | | 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()); |
| | |
| | | accountChangeDetail1.setChangeType(9); |
| | | accountChangeDetail1.setOrderId(order.getId()); |
| | | accountChangeDetail1.setOldData(driver.getBalance() + driver.getBackgroundBalance()); |
| | | accountChangeDetail1.setExplain("线下收款服务费支出"); |
| | | accountChangeDetail1.setExplain("订单信息费"); |
| | | accountChangeDetail1.setCreateTime(new Date()); |
| | | driver.setBalance(driver.getBalance() - num3); |
| | | accountChangeDetail1.setNewData(driver.getBalance() + driver.getBackgroundBalance()); |
| | |
| | | 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){ |
| | |
| | | return ResultUtil.success(); |
| | | } |
| | | }else{ |
| | | System.err.println("订单支付成功后的分账处理异常 :" + execute.getMsg()); |
| | | logger.warn("订单支付成功后的分账处理异常 :" + execute.getMsg()); |
| | | return ResultUtil.error("订单支付成功后的分账处理异常 :" + execute.getMsg()); |
| | | } |
| | | logger.warn("未知异常"); |
| | | return ResultUtil.error("未知异常"); |
| | | } |
| | | |
| | |
| | | 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()); |
| | | } |
| | | } |
| | | |
| | |
| | | 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()); |
| | | 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.setType(1); |
| | | accountChangeDetail.setChangeType(7); |
| | | accountChangeDetail.setOrderId(order.getId()); |
| | | accountChangeDetail.setExplain("折扣优惠收入"); |
| | | driver.setCommission(driver.getCommission() + order.getDiscountAmount()); |
| | | accountChangeDetail.setExplain("优惠券收入"); |
| | | driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount()); |
| | | accountChangeDetail.setNewData(driver.getCouponBalance() + driver.getCommission()); |
| | | driverService.updateById(driver); |
| | | accountChangeDetailService.insert(accountChangeDetail); |
| | | |
| | | //补贴中分账 |
| | | Double discountedPrice = order.getDiscountAmount(); |
| | | 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"); |
| | | 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; |
| | | }else{ |