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("恶劣天气里程")