puzhibing
2023-06-27 4f8b61980b0db5995c16139d8eb9542b66da8a9f
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;
@@ -593,19 +597,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 +657,7 @@
        for (Driver driver1 : drivers) {
            String value = redisUtil.getValue("DRIVER" + driver1.getId());
            if (ToolUtil.isEmpty(value)) {
                return;
                continue;
            }
            pushUtil.pushGrabOrderExtras(driver1.getId(), 2);
        }
@@ -960,6 +967,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());
@@ -1245,7 +1263,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 +1285,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());
@@ -1295,70 +1313,14 @@
        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));
@@ -1369,28 +1331,30 @@
                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{
@@ -1399,6 +1363,7 @@
                    }
                }
            }
        }
        this.updateById(order);
@@ -1427,7 +1392,7 @@
     * @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);
@@ -1439,12 +1404,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());
@@ -1505,7 +1471,7 @@
                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());
@@ -1970,7 +1936,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){
@@ -1989,9 +1955,10 @@
                return ResultUtil.success();
            }
        }else{
            System.err.println("订单支付成功后的分账处理异常 :" + execute.getMsg());
            logger.warn("订单支付成功后的分账处理异常 :" + execute.getMsg());
            return ResultUtil.error("订单支付成功后的分账处理异常 :" + execute.getMsg());
        }
        logger.warn("未知异常");
        return ResultUtil.error("未知异常");
    }
@@ -2018,9 +1985,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());
        }
    }
@@ -2200,54 +2167,8 @@
            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));
@@ -2258,28 +2179,30 @@
                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{