puzhibing
2023-06-16 7a9e05846c5e37f7278f242857056d0623532379
修改bug和功能优化
20个文件已修改
436 ■■■■■ 已修改文件
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/TaskUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderPriceWarpper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/PushOrderInfoWarpper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/resources/redis.properties 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/test/java/com/supersavedriving/driver/GunsApplicationTest.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RechargeRecordMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RechargeRecordMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRechargeRecordService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RechargeRecordServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/HtmlController.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderPriceWarpper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java
@@ -166,7 +166,7 @@
     * 等待时长(分钟)
     */
    @TableField("waitTime")
    private Integer waitTime;
    private Double waitTime;
    /**
     * 等待费
     */
@@ -176,7 +176,7 @@
     * 超出等待时长(分钟)
     */
    @TableField("outWaitTime")
    private Integer outWaitTime;
    private Double outWaitTime;
    /**
     * 超出等待时长费
     */
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java
@@ -61,10 +61,10 @@
    @Override
    public ResultUtil withdrawCash(Integer driverId, Integer type, Integer bankId, Double money) throws Exception {
        Driver driver = driverService.selectById(driverId);
        if(type == 1 && null == driver.getBalance() || driver.getBalance() < money){
        if(type == 1 && (null == driver.getBalance() || driver.getBalance().compareTo(money) < 0)){
            return ResultUtil.error("余额不足");
        }
        if(type == 2 && null == driver.getCommission() || driver.getCommission() < money){
        if(type == 2 && (null == driver.getCommission() || driver.getCommission().compareTo(money) < 0)){
            return ResultUtil.error("收入余额不足");
        }
        if(ToolUtil.isEmpty(driver.getMerchantNumber())){
@@ -104,7 +104,30 @@
        if(type == 1){//余额提现,调用分账接口 -->确认收货--->提现
            fenzhang(driver, money, cashWithdrawal, 1);
            List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2)
                    .eq("userId", driver.getId()).eq("payType", 1).eq("payStatus", 2).gt("surplusDividedAmount", 0));
            for (RechargeRecord rechargeRecord : rechargeRecords) {
                Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                if(surplusDividedAmount.compareTo(money) >= 0){//够分账
                    ResultUtil fenzhang = fenzhang(driver, rechargeRecord, cashWithdrawal, 3, money);
                    if(fenzhang.getCode() == 10000){
                        rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - money);
                        rechargeRecordService.updateById(rechargeRecord);
                        break;
                    }else{
                        return fenzhang;
                    }
                }else{
                    ResultUtil fenzhang = fenzhang(driver, rechargeRecord, cashWithdrawal, 3, surplusDividedAmount);
                    if(fenzhang.getCode() == 10000){
                        rechargeRecord.setSurplusDividedAmount(0D);
                        rechargeRecordService.updateById(rechargeRecord);
                        money -= surplusDividedAmount;
                    }else{
                        return fenzhang;
                    }
                }
            }
        }else{//佣金提现,直接提现到银行卡
            Withdraw withdraw = new Withdraw();
            withdraw.setUserId(driver.getMerchantNumber());
@@ -164,11 +187,14 @@
                divisionRecord.setUserId(driver.getId());
                divisionRecord.setOrderId(rechargeRecord.getId().longValue());
                divisionRecord.setSourceType(payType == 1 ? 3 : 2);
                divisionRecord.setAmount(surplusDividedAmount);
                divisionRecord.setAmount(amount);
                divisionRecord.setMerchantNumber(driver.getMerchantNumber());
                divisionRecord.setState(1);
                divisionRecord.setCreateTime(new Date());
                divisionRecordService.insert(divisionRecord);
                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - amount);
                rechargeRecordService.updateById(rechargeRecord);
                Complete complete = new Complete();
                complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
@@ -208,9 +234,9 @@
                        }, 15000);
                    }
                }else{
                    System.err.println("司机提现分账异常:" + execute.getMsg());
                    System.err.println("司机提现分账处理异常 :" + execute.getMsg());
                    return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
                }
                break;
            }else{//不够分账
                DivisionRecord divisionRecord = new DivisionRecord();
                divisionRecord.setUserType(1);
@@ -222,6 +248,9 @@
                divisionRecord.setState(1);
                divisionRecord.setCreateTime(new Date());
                divisionRecordService.insert(divisionRecord);
                rechargeRecord.setSurplusDividedAmount(0D);
                rechargeRecordService.updateById(rechargeRecord);
                Complete complete = new Complete();
                complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
@@ -260,8 +289,8 @@
                        }, 15000);
                    }
                }else{
                    System.err.println("司机提现分账异常:" + execute.getMsg());
                    break;
                    System.err.println("司机提现分账处理异常 :" + execute.getMsg());
                    return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
                }
                amount -= surplusDividedAmount;
            }
@@ -270,6 +299,65 @@
    }
    public ResultUtil fenzhang(Driver driver, RechargeRecord rechargeRecord, CashWithdrawal cashWithdrawal, Integer sourceType, Double amount){
        DivisionRecord divisionRecord = new DivisionRecord();
        divisionRecord.setUserType(1);
        divisionRecord.setUserId(driver.getId());
        divisionRecord.setOrderId(rechargeRecord.getId().longValue());
        divisionRecord.setSourceType(sourceType);
        divisionRecord.setAmount(amount);
        divisionRecord.setMerchantNumber(driver.getMerchantNumber());
        divisionRecord.setState(1);
        divisionRecord.setCreateTime(new Date());
        divisionRecordService.insert(divisionRecord);
        Complete complete = new Complete();
        complete.setOriginalMerOrderId(rechargeRecord.getOrderNumber());
        complete.setNotifyUrl(callbackPath + "/base/driver/withdrawCashFZCallback");
        complete.setParameter1(divisionRecord.getId().toString());
        //分账方列表
        List<PamentOrderUser> splitList = new ArrayList<>();
        PamentOrderUser pamentOrderUser = new PamentOrderUser();
        pamentOrderUser.setSplitUserId(driver.getMerchantNumber());
        pamentOrderUser.setSplitAmount(String.valueOf(Double.valueOf(amount * 100).intValue()));
        pamentOrderUser.setSplitType("1");
        splitList.add(pamentOrderUser);
        complete.setSplitList(splitList);
        TrhRequest<Complete> request = new TrhRequest();
        InterfaceResponse execute = request.execute(complete, Complete.SERVICE_CODE);//分账操作
        if("0000".equals(execute.getCode())){
            JSONObject jsonObject = JSON.parseObject(execute.getResult());
            Integer status = jsonObject.getInteger("status");//0:待处理 1:成功 2:失败
            String merOrderId = jsonObject.getString("merOrderId");
            if(2 == status){
                System.err.println("司机提现分账失败:" + execute.getMsg());
                return ResultUtil.error("司机提现分账失败 :" + execute.getMsg());
            }
            if(1 == status){
                divisionRecord.setMerOrderId(merOrderId);
                divisionRecord.setPayTime(new Date());
                divisionRecord.setState(2);
                divisionRecordService.updateById(divisionRecord);
                //间隔10秒开始调用确认收货后开始提现
                new Timer().schedule(new TimerTask() {//确认收货和提现
                    @Override
                    public void run() {
                        confirmReceipt(driver, rechargeRecord, divisionRecord, cashWithdrawal);
                    }
                }, 15000);
            }
        }else{
            System.err.println("司机提现分账处理异常 :" + execute.getMsg());
            return ResultUtil.error("司机提现分账处理异常 :" + execute.getMsg());
        }
        return ResultUtil.success();
    }
    /**
     * 分账后的确认收货和提现操作
     * @param driver
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -196,10 +196,10 @@
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        order = getOrderPrice(1, d, 0, order, city);
        order.setCreateTime(new Date());
        order = getOrderPrice(1, d, 0D, order, city);
        order.setState(null == order.getDriverId() ? 101 : 102);
        order.setStatus(1);
        order.setCreateTime(new Date());
        this.insert(order);
        driverService.updateById(driver);
        //推送状态
@@ -228,8 +228,9 @@
     * @param city          查询天气的城市
     * @return
     */
    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){
    public Order getOrderPrice(Integer type, Double distance, Double waitTime, Order order, String city){
        distance = new BigDecimal(distance).setScale(0, BigDecimal.ROUND_UP).doubleValue();
        waitTime = new BigDecimal(waitTime).setScale(0, BigDecimal.ROUND_UP).doubleValue();
        order = getOrderInitialPrice(order);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
        if(null == systemConfig){
@@ -244,7 +245,7 @@
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
        JSONObject extraCost = jsonObject.getJSONObject("ExtraCost");
        Date date = new Date();
        Date date = order.getCreateTime();
        for (int i = 0; i < chargeStandard.size(); i++) {
            JSONObject jsonObject1 = chargeStandard.getJSONObject(i);
            String num1 = jsonObject1.getString("num1");
@@ -321,9 +322,9 @@
        }
        //计算额外费用
        Integer num1 = extraCost.getInteger("num1");//等待时长
        Double num1 = extraCost.getDouble("num1");//等待时长
        Double num2 = extraCost.getDouble("num2");//等待费
        Integer num3 = extraCost.getInteger("num3");//等待超出时长
        Double num3 = extraCost.getDouble("num3");//等待超出时长
        Double num4 = extraCost.getDouble("num4");//等到超出时长费用单价 X/分钟
        Double num5 = extraCost.getDouble("num5");//恶劣天气公里
        Double num6 = extraCost.getDouble("num6");//恶劣天气费
@@ -336,7 +337,7 @@
            order.setWaitTime(num1);//等待时长
            order.setWaitTimePrice(num2);//等待费用
            Integer w = waitTime - num3;
            Double w = waitTime - num1 - num3;
            BigDecimal multiply = new BigDecimal(w).multiply(new BigDecimal(num4));
            order.setOutWaitTime(w);//等待时长超出分钟
            order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用
@@ -409,7 +410,7 @@
        order.setOverLongDistancePrice(0d);//超出长途里程费
//        order.setWaitTime(0);//等待时长
        order.setWaitTimePrice(0D);//等待费
        order.setOutWaitTime(0);//超出等待时长
        order.setOutWaitTime(0D);//超出等待时长
        order.setOutWaitTimePrice(0D);//超出等待时长费
        order.setBadWeatherDistance(0D);//恶劣天气里程
        order.setBadWeatherPrice(0D);//恶劣天气里程费
@@ -429,6 +430,13 @@
     */
    public void pushOrder(Order order){
        try {
            /**
             * 1.先找最大推单范围内的优推司机 -》 距离最近
             * 没有1 - 》
             *      2.按照后台推送配置在范围内查找合适司机
             *        合适司:积分 > 评分 > 距离
             *      3.司机没有接单直接将订单置入大厅
             */
            boolean lock = redisUtil.lock(5);
            if(!lock){
                int num1 = 1;
@@ -442,13 +450,13 @@
                    }
                }
            }
            /**
             * 1.先找最大推单范围内的优推司机 -》 距离最近
             * 没有1 - 》
             *      2.按照后台推送配置在范围内查找合适司机
             *        合适司:积分 > 评分 > 距离
             *      3.司机没有接单直接将订单置入大厅
             */
            if(!lock){
                redisUtil.unlock();
                order.setHallOrder(1);
                this.updateById(order);
                ExtraPushOrder(order);
                return;
            }
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
            if(null == systemConfig){
                redisUtil.unlock();
@@ -577,13 +585,13 @@
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        driver1.setServerStatus(1);
                        driverService.updateById(driver1);
                        Order order1 = OrderServiceImpl.this.selectById(order.getId());
                        if(order1.getState() == 101 || order1.getState() == 201){
                            order1.setHallOrder(1);
                            OrderServiceImpl.this.updateById(order1);
                            driver1.setServerStatus(1);
                            driverService.updateById(driver1);
                            ExtraPushOrder(order);
                        }
                    }
@@ -694,6 +702,9 @@
        orderRefusalService.insert(orderRefusal);
        Driver driver = driverService.selectById(uid);
        driver.setServerStatus(1);
        driverService.updateById(driver);
        //扣除积分
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
        if(null != systemConfig) {
@@ -751,6 +762,9 @@
                        num1++;
                    }
                }
            }
            if(!lock){
                return ResultUtil.error("请重试");
            }
            Order order = this.selectById(orderId);
            Integer state = order.getState();
@@ -904,7 +918,7 @@
                    order.setStartTime(new Date());
                }
                //计算等待用户时长
                Integer w = new BigDecimal((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000).setScale(0, BigDecimal.ROUND_UP).intValue();
                Double w = new BigDecimal(Double.valueOf(System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
                order.setWaitTime(order.getWaitTime() + w);
                order.setStartWaitTime(null);
                break;
@@ -944,6 +958,9 @@
        }
        return ResultUtil.success();
    }
    /**
@@ -1029,9 +1046,9 @@
                    pushOrderInfoWarpper.setDriverLat(split[1]);
                    pushOrderInfoWarpper.setDriverLng(split[0]);
                }
                int w = 0;
                Double w = 0D;
                if(null != order.getStartWaitTime()){
                    w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000).intValue();
                    w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 60000);
                }
                pushOrderInfoWarpper.setWaitTime(order.getWaitTime() + w);
                pushOrderInfoWarpper.setState(order.getState());
@@ -1125,7 +1142,7 @@
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        order = getOrderPrice(1, d, 0, order, city);
        order = getOrderPrice(1, d, 0D, order, city);
        this.updateById(order);
        return ResultUtil.success();
    }
@@ -1249,6 +1266,12 @@
            return ResultUtil.error("操作失败");
        }
        Order order = this.selectById(orderId);
        if(state == 107 && order.getState() != 106){
            return ResultUtil.error("操作失败");
        }
        if(state == 108 && order.getState() != 107){
            return ResultUtil.error("操作失败");
        }
        order.setState(state);
        if(payType == 2 && state == 107){
@@ -1256,7 +1279,7 @@
            Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney());
            if(null != coupon){
                order.setCouponId(coupon.getId());
                order.setDiscountAmount(coupon.getCouponPreferentialAmount());
                order.setDiscountedPrice(coupon.getCouponPreferentialAmount());
                order.setPayMoney(order.getOrderMoney() - coupon.getCouponPreferentialAmount());
            }else{
                order.setPayMoney(order.getOrderMoney());
@@ -1459,8 +1482,8 @@
                SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 2));
                if(null != systemConfig1){
                    JSONObject jsonObject1 = JSON.parseObject(systemConfig1.getContent());
                    //司机推荐首单收入
                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
                    //司机推荐用户收入
                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2){
                        Double num1 = jsonObject1.getDouble("num1");
                        num1 = (num3 >= num1 ? num1 : num3);
@@ -1474,7 +1497,7 @@
                            accountChangeDetail.setType(1);
                            accountChangeDetail.setChangeType(5);
                            accountChangeDetail.setOldData(driver1.getCouponBalance() + driver1.getCommission());
                            accountChangeDetail.setExplain("邀请用户首单奖励");
                            accountChangeDetail.setExplain("邀请用户奖励");
                            accountChangeDetail.setCreateTime(new Date());
                            driver1.setCommission(driver1.getCommission() + num1);
                            accountChangeDetail.setNewData(driver1.getCouponBalance() + driver1.getCommission());
@@ -1872,7 +1895,7 @@
            }
        }
        //司机余额扣减抽佣金额,将金额先分账给平台
        if(order.getPayMoney() > payMoney){
        if(order.getPayMoney().compareTo(payMoney) > 0){
            driver = driverService.selectById(order.getDriverId());
            Double m = order.getPayMoney() - payMoney;
            AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
@@ -2176,8 +2199,9 @@
    @Override
    public void completeCollection() {
        List<Order> orders = this.selectList(new EntityWrapper<Order>().eq("state", 107).eq("status", 1)
                .eq("payType", 3).last(" and UNIX_TIMESTAMP(getoffTime) + 120 <= UNIX_TIMESTAMP(now())"));
                .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());
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/TaskUtil.java
@@ -37,7 +37,6 @@
    @Scheduled(fixedRate = 1000 * 60)
    public void taskMinute(){
        try {
            orderService.completeCollection();
            youTuiDriverService.editState();
        } catch (Exception e) {
            e.printStackTrace();
@@ -51,6 +50,7 @@
    @Scheduled(cron = "0 0 0 * * *")
    public void taskDay(){
        try {
            orderService.completeCollection();
            accountChangeDetailService.deductionInsurance();
        }catch (Exception e){
            e.printStackTrace();
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderPriceWarpper.java
@@ -35,11 +35,11 @@
    @ApiModelProperty("超过长途里程费")
    private Double overLongDistancePrice;
    @ApiModelProperty("等待时长")
    private Integer waitTime;
    private Double waitTime;
    @ApiModelProperty("等待费")
    private Double waitTimePrice;
    @ApiModelProperty("超出等待时长")
    private Integer outWaitTime;
    private Double outWaitTime;
    @ApiModelProperty("超出等待费")
    private Double outWaitTimePrice;
    @ApiModelProperty("恶劣天气里程")
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/PushOrderInfoWarpper.java
@@ -14,7 +14,7 @@
    @ApiModelProperty("司机经度")
    private String driverLng;
    @ApiModelProperty("等待时长(分钟)")
    private Integer waitTime;
    private Double waitTime;
    @ApiModelProperty("行驶里程(公里)")
    private Double actualMileage;
    @ApiModelProperty("行驶时间(分钟)")
driver/guns-admin/src/main/resources/redis.properties
@@ -2,14 +2,14 @@
# RedisÊý¾Ý¿âË÷Òý£¨Ä¬ÈÏΪ0£©
spring.redis.database=0
 Redis·þÎñÆ÷µØÖ·
# Redis·þÎñÆ÷µØÖ·
spring.redis.host=127.0.0.1
# Redis·þÎñÆ÷Á¬½Ó¶Ë¿Ú
spring.redis.port=16379
# Redis·þÎñÆ÷Á¬½ÓÃÜÂ루ĬÈÏΪ¿Õ£©
spring.redis.password=cKsEeyffDXG5PzNg8CIbrWxFluXrCprZ
### Redis·þÎñÆ÷µØÖ·
## Redis·þÎñÆ÷µØÖ·
#spring.redis.host=127.0.0.1
## Redis·þÎñÆ÷Á¬½Ó¶Ë¿Ú
#spring.redis.port=6379
driver/guns-admin/src/test/java/com/supersavedriving/driver/GunsApplicationTest.java
@@ -17,6 +17,10 @@
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.test.context.junit4.SpringRunner;
//
//import java.text.SimpleDateFormat;
//import java.util.Calendar;
//import java.util.Date;
//
//
//@RunWith(SpringRunner.class)
//@SpringBootTest
@@ -34,27 +38,29 @@
//
//    @Test
//    public void test() throws Exception {
////        ResultUtil resultUtil = driverService.microenterprise(1, "蒲芝兵", "510823198911154858"
////                , "15828353127", "https://10pz685243.zicp.fun/supersavedriving/base/driver/microenterpriseCallback");
////        System.err.println(JSON.toJSONString(resultUtil));
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        Date date = sdf.parse("2023-06-15 01:00:00");
//        Integer hour1 = 22;
//        Integer hour2 = 6;
//
//        Calendar s = Calendar.getInstance();
//        s.setTime(date);
//        s.set(Calendar.HOUR_OF_DAY, hour1);
//        s.set(Calendar.SECOND, 0);
//
////        DriverBank driverId = driverBankService.selectOne(new EntityWrapper<DriverBank>().eq("driverId", 1));
////        System.err.println(JSON.toJSONString(driverId));
//        Calendar e = Calendar.getInstance();
//        e.setTime(date);
//        e.set(Calendar.HOUR_OF_DAY, hour2);
//        e.set(Calendar.SECOND, 0);
//
//
////        ResultUtil resultUtil = driverBankService.addDriverBank(1, "蒲芝兵", "15828353127"
////                , "510823198911154858", "6212264402094114687");
////        System.err.println(JSON.toJSONString(resultUtil));
//
//
////        ResultUtil resultUtil1 = driverBankService.delDriverBank(1, 1);
////        System.err.println(JSON.toJSONString(resultUtil1));
//
////        ResultUtil resultUtil = driverService.balanceRecharge(1, 1D);
////        System.err.println(JSON.toJSONString(resultUtil));
//
//        Order order = orderService.selectById(2019);
//        orderService.saveRevenue(order);
//        if(hour1 > hour2){
//            if(s.getTimeInMillis() > date.getTime()){
//                s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
//            }else{
//                e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
//            }
//        }
//        System.err.println(sdf.format(s.getTime()));
//        System.err.println(sdf.format(e.getTime()));
//    }
//}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java
@@ -89,6 +89,9 @@
    @Autowired
    private IRechargeRecordService rechargeRecordService;
    @Autowired
    private ITSystemConfigService systemConfigService;
    @Value("${callbackPath}")
    private String callbackPath;
@@ -782,7 +785,8 @@
            JSONObject jsonObject = JSON.parseObject(execute.getResult());
            model.addAttribute("balance", jsonObject.getDoubleValue("settledAmount") / 100);
            if(roleType == 1){
                model.addAttribute("marketingAmount", jsonObject.getDoubleValue("marketingAmount") / 100);
                Double amount = rechargeRecordService.querSumSurplusDividedAmount(4);
                model.addAttribute("marketingAmount", amount);
            }
        }
        return PREFIX + "enterprisePage.html";
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
@@ -251,11 +251,9 @@
        user.setCreatetime(new Date());
        User objectUser = UserFactory.createUser(user);
        //查找平台所属公司
        TCompany company = itCompanyService.selectOne(new EntityWrapper<TCompany>().eq("type", 1).orderBy("id", true).last(" limit 1"));
        if (SinataUtil.isNotEmpty(company)){
            objectUser.setObjectId(company.getId());
        }
        ShiroUser user1 = ShiroKit.getUser();
        objectUser.setRoleType(user1.getRoleType());
        objectUser.setObjectId(user1.getObjectId());
        objectUser.setPassWordUpdate(new Date());
        this.userService.insert(objectUser);
@@ -347,9 +345,6 @@
        return SUCCESS_TIP;
    }
    @Autowired
    private ITCompanyService itCompanyService;
    /**
     * 冻结用户
     */
@@ -366,26 +361,6 @@
        }
        assertAuth(userId);
        this.userService.setStatus(userId, ManagerStatus.FREEZED.getCode());
        User user = userService.selectById(userId);
        if (user.getRoleType() == 2){
            //查询分公司
            TCompany company = itCompanyService.selectById(user.getObjectId());
            company.setState(1);
            itCompanyService.updateById(company);
            //设置该分公司下的所有司机状态
//            itDriverService.updateCompanyDriverState(3,company.getId());
        }else if (user.getRoleType() == 3){
            //查询加盟商
            TCompany franchisee = itCompanyService.selectById(user.getObjectId());
            franchisee.setState(1);
            itCompanyService.updateById(franchisee);
            //设置该加盟商下的所有司机状态
//            itDriverService.updateFranchiseeDriverState(3,franchisee.getId());
        }
        return SUCCESS_TIP;
    }
@@ -403,24 +378,6 @@
        this.userService.setStatus(userId, ManagerStatus.OK.getCode());
        User user = userService.selectById(userId);
        if (user.getRoleType() == 2){
            //查询分公司
            TCompany company = itCompanyService.selectById(user.getObjectId());
            company.setState(0);
            itCompanyService.updateById(company);
            //设置该分公司下的所有司机状态
//            itDriverService.updateCompanyDriverState(2,company.getId());
        }else if (user.getRoleType() == 3){
            //查询加盟商
            TCompany franchisee = itCompanyService.selectById(user.getObjectId());
            franchisee.setState(0);
            itCompanyService.updateById(franchisee);
            //设置该加盟商下的所有司机状态
//            itDriverService.updateFranchiseeDriverState(2,franchisee.getId());
        }
        return SUCCESS_TIP;
    }
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RechargeRecordMapper.java
@@ -2,10 +2,16 @@
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.RechargeRecord;
import org.apache.ibatis.annotations.Param;
/**
 * @author zhibing.pu
 * @date 2023/6/2 14:25
 */
public interface RechargeRecordMapper extends BaseMapper<RechargeRecord> {
    Double querSumSurplusDividedAmount(@Param("type") Integer type);
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RechargeRecordMapper.xml
@@ -17,4 +17,13 @@
        <result column="agentId" property="agentId" />
        <result column="surplusDividedAmount" property="surplusDividedAmount"/>
    </resultMap>
    <select id="querSumSurplusDividedAmount" resultType="double">
        select ifnull(sum(surplusDividedAmount), 0) from t_recharge_record where payStatus = 2
        <if test="null != type">
            and `type` = #{type}
        </if>
    </select>
</mapper>
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRechargeRecordService.java
@@ -8,4 +8,13 @@
 * @date 2023/6/2 14:26
 */
public interface IRechargeRecordService extends IService<RechargeRecord> {
    /**
     *
     * @param type
     * @return
     * @throws Exception
     */
    Double querSumSurplusDividedAmount(Integer type);
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RechargeRecordServiceImpl.java
@@ -12,4 +12,9 @@
 */
@Service
public class RechargeRecordServiceImpl extends ServiceImpl<RechargeRecordMapper, RechargeRecord> implements IRechargeRecordService {
    @Override
    public Double querSumSurplusDividedAmount(Integer type) {
        return this.baseMapper.querSumSurplusDividedAmount(type);
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java
@@ -294,7 +294,7 @@
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 6));
            if(null != systemConfig){
                JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
                return ResponseWarpper.success("充值满" + jsonObject.getDouble("num2") + "元,下单享9折优惠!");
                return ResponseWarpper.success("充值满" + jsonObject.getDouble("num2") + "元,下单享9.5折优惠!");
            }
            return ResponseWarpper.success();
        }catch (Exception e){
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/HtmlController.java
@@ -22,6 +22,7 @@
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
@@ -75,20 +76,41 @@
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
            JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
            JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
            SimpleDateFormat sdf = new SimpleDateFormat("HHmm");
            Integer integer = Integer.valueOf(sdf.format(new Date()));
            Date date = new Date();
            for (int i = 0; i < chargeStandard.size(); i++) {
                JSONObject jsonObject1 = chargeStandard.getJSONObject(i);
                String num1 = jsonObject1.getString("num1");
                String num2 = jsonObject1.getString("num2");
                num1 = num1.replaceAll(":", "");
                num2 = num2.replaceAll(":", "");
                Double num3 = jsonObject1.getDouble("num3");
                Double num4 = jsonObject1.getDouble("num4");
                Double num5 = jsonObject1.getDouble("num5");
                Double num6 = jsonObject1.getDouble("num6");
                if(integer >= Integer.valueOf(num1) && integer < Integer.valueOf(num2)){
                String[] split = num1.split(":");
                Integer hour1 = Integer.valueOf(split[0]);
                String[] split1 = num2.split(":");
                Integer hour2 = Integer.valueOf(split1[0]);
                Calendar s = Calendar.getInstance();
                s.setTime(date);
                s.set(Calendar.HOUR_OF_DAY, hour1);
                s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                s.set(Calendar.SECOND, 0);
                Calendar e = Calendar.getInstance();
                e.setTime(date);
                e.set(Calendar.HOUR_OF_DAY, hour2);
                e.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                e.set(Calendar.SECOND, 0);
                if(hour1 > hour2){
                    if(s.getTimeInMillis() > date.getTime()){
                        s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
                    }else{
                        e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
                    }
                }
                if(date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
                    startPriceWarpper.setStartPrice(num4);
                    startPriceWarpper.setStartDistance(num3);
                    startPriceWarpper.setExcessMileageUnitPrice(num6);
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java
@@ -166,7 +166,7 @@
     * 等待时长(分钟)
     */
    @TableField("waitTime")
    private Integer waitTime;
    private Double waitTime;
    /**
     * 等待费
     */
@@ -176,7 +176,7 @@
     * 超出等待时长(分钟)
     */
    @TableField("outWaitTime")
    private Integer outWaitTime;
    private Double outWaitTime;
    /**
     * 超出等待时长费
     */
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java
@@ -204,9 +204,11 @@
                        }
                    }
                }
                List<CouponWarpper> list = pushCoupon(appUser.getId());
                redisUtil.unlock();
                warpper.setCoupons(list);
                if(lock){
                    List<CouponWarpper> list = pushCoupon(appUser.getId());
                    redisUtil.unlock();
                    warpper.setCoupons(list);
                }
            }
            if(appUser.getStatus() == 2){
                return ResultUtil.error("账号被冻结");
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -145,7 +145,9 @@
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        Order order = getOrderPrice(1, d, 0, new Order(), city);
        Order order1 = new Order();
        order1.setCreateTime(new Date());
        Order order = getOrderPrice(1, d, 0D, order1, city);
        Double estimatedPrice = order.getEstimatedPrice();
        Coupon coupon = userToCouponService.queryCoupon(uid, estimatedPrice);
        if(null != coupon){
@@ -198,8 +200,9 @@
     * @param city          查询天气的城市
     * @return
     */
    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){
    public Order getOrderPrice(Integer type, Double distance, Double waitTime, Order order, String city){
        distance = new BigDecimal(distance).setScale(0, BigDecimal.ROUND_UP).doubleValue();
        waitTime = new BigDecimal(waitTime).setScale(0, BigDecimal.ROUND_UP).doubleValue();
        order = getOrderInitialPrice(order);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
        if(null == systemConfig){
@@ -214,7 +217,7 @@
        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
        JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
        JSONObject extraCost = jsonObject.getJSONObject("ExtraCost");
        Date date = new Date();
        Date date = order.getCreateTime();
        for (int i = 0; i < chargeStandard.size(); i++) {//计算各个时段
            JSONObject jsonObject1 = chargeStandard.getJSONObject(i);
            String num1 = jsonObject1.getString("num1");
@@ -291,9 +294,9 @@
        }
        //计算额外费用
        Integer num1 = extraCost.getInteger("num1");//等待时长
        Double num1 = extraCost.getDouble("num1");//等待时长
        Double num2 = extraCost.getDouble("num2");//等待费
        Integer num3 = extraCost.getInteger("num3");//等待超出时长
        Double num3 = extraCost.getDouble("num3");//等待超出时长
        Double num4 = extraCost.getDouble("num4");//等到超出时长费用单价 X/分钟
        Double num5 = extraCost.getDouble("num5");//恶劣天气公里
        Double num6 = extraCost.getDouble("num6");//恶劣天气费
@@ -306,7 +309,7 @@
            order.setWaitTime(num1);//等待时长
            order.setWaitTimePrice(num2);//等待费用
            Integer w = waitTime - num3;
            Double w = waitTime - num3;
            BigDecimal multiply = new BigDecimal(w).multiply(new BigDecimal(num4));
            order.setOutWaitTime(w);//等待时长超出分钟
            order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用
@@ -375,7 +378,7 @@
        order.setOverLongDistancePrice(0d);//超出长途里程费
//        order.setWaitTime(0);//等待时长
        order.setWaitTimePrice(0D);//等待费
        order.setOutWaitTime(0);//超出等待时长
        order.setOutWaitTime(0D);//超出等待时长
        order.setOutWaitTimePrice(0D);//超出等待时长费
        order.setBadWeatherDistance(0D);//恶劣天气里程
        order.setBadWeatherPrice(0D);//恶劣天气里程费
@@ -449,7 +452,8 @@
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        order = getOrderPrice(1, d, 0, order, city);
        order.setCreateTime(new Date());
        order = getOrderPrice(1, d, 0D, order, city);
        if(null != travelOrder.getDriverId()){
            DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", travelOrder.getDriverId()).eq("status", 1));
            if(null == driverWork){
@@ -500,6 +504,14 @@
     */
    public void pushOrder(Long orderId){
        try {
            Order order = this.selectById(orderId);
            /**
             * 1.先找最大推单范围内的优推司机 -》 距离最近
             * 没有1 - 》
             *      2.按照后台推送配置在范围内查找合适司机
             *        合适司:积分 > 评分 > 距离
             *      3.司机没有接单直接将订单置入大厅
             */
            boolean lock = redisUtil.lock(5);
            if(!lock){
                int num1 = 1;
@@ -513,14 +525,12 @@
                    }
                }
            }
            Order order = this.selectById(orderId);
            /**
             * 1.先找最大推单范围内的优推司机 -》 距离最近
             * 没有1 - 》
             *      2.按照后台推送配置在范围内查找合适司机
             *        合适司:积分 > 评分 > 距离
             *      3.司机没有接单直接将订单置入大厅
             */
            if(!lock){
                order.setHallOrder(1);
                this.updateById(order);
                ExtraPushOrder(order);
                redisUtil.unlock();
            }
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
            if(null == systemConfig){
                redisUtil.unlock();
@@ -658,13 +668,13 @@
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        driver1.setServerStatus(1);
                        driverService.updateById(driver1);
                        Order order1 = OrderServiceImpl.this.selectById(order.getId());
                        if(order1.getState() == 101 || order1.getState() == 201){
                            order1.setHallOrder(1);
                            OrderServiceImpl.this.updateById(order1);
                            driver1.setServerStatus(1);
                            driverService.updateById(driver1);
                            ExtraPushOrder(order);
                        }
                    }
@@ -825,7 +835,7 @@
        }
        Order order1 = new Order();
        BeanUtils.copyProperties(order, order1);
        Order orderPrice = getOrderPrice(1, d, 0, order1, city);
        Order orderPrice = getOrderPrice(1, d, 0D, order1, city);
        order.setEstimatedPrice(orderPrice.getEstimatedPrice());
        this.updateById(order);
@@ -1478,8 +1488,8 @@
                SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 2));
                if(null != systemConfig1){
                    JSONObject jsonObject1 = JSON.parseObject(systemConfig1.getContent());
                    //司机推荐首单收入
                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
                    //司机推荐用户收入
                    if(null != appUser.getInviterType() && appUser.getInviterType() == 2){
                        Double num1 = jsonObject1.getDouble("num1");
                        num1 = (num3 >= num1 ? num1 : num3);
@@ -1492,7 +1502,7 @@
                            accountChangeDetail.setType(1);
                            accountChangeDetail.setChangeType(5);
                            accountChangeDetail.setOldData(driver1.getCouponBalance() + driver1.getCommission());
                            accountChangeDetail.setExplain("邀请用户首单奖励");
                            accountChangeDetail.setExplain("邀请用户奖励");
                            accountChangeDetail.setCreateTime(new Date());
                            driver1.setCommission(driver1.getCommission() + num1);
                            accountChangeDetail.setNewData(driver1.getCouponBalance() + driver1.getCommission());
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderPriceWarpper.java
@@ -34,11 +34,11 @@
    @ApiModelProperty("超过长途里程费")
    private Double overLongDistancePrice;
    @ApiModelProperty("等待时长")
    private Integer waitTime;
    private Double waitTime;
    @ApiModelProperty("等待费")
    private Double waitTimePrice;
    @ApiModelProperty("超出等待时长")
    private Integer outWaitTime;
    private Double outWaitTime;
    @ApiModelProperty("超出等待费")
    private Double outWaitTimePrice;
    @ApiModelProperty("恶劣天气里程")