| | |
| | | package com.stylefeng.guns.modular.system.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.stylefeng.guns.core.beetl.ShiroExtUtil; |
| | | import com.stylefeng.guns.core.util.ExcelUtil; |
| | | import com.stylefeng.guns.core.util.ToolUtil; |
| | | import com.stylefeng.guns.modular.system.dao.IncomeMapper; |
| | | import com.stylefeng.guns.modular.system.model.Income; |
| | | import com.stylefeng.guns.modular.system.model.*; |
| | | import com.stylefeng.guns.modular.system.service.*; |
| | | import org.apache.poi.hssf.usermodel.HSSFWorkbook; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | | |
| | |
| | | |
| | | @Autowired |
| | | private ITDriverService driverService; |
| | | @Resource |
| | | @Autowired |
| | | private ShiroExtUtil shiroExtUtil; |
| | | |
| | | @Autowired |
| | | private ITCompanyService companyService; |
| | | |
| | | @Autowired |
| | | private ITLineService lineService; |
| | | |
| | | |
| | | /** |
| | |
| | | public void updateState(String s) { |
| | | this.baseMapper.updateState(s); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> saveIncome(Integer orderId, Integer orderType, Double payMoney) throws Exception { |
| | | TCompany company = null; |
| | | Integer orderNumber = 0; |
| | | Integer driverId = null; |
| | | JSONObject jsonObject = null; |
| | | JSONArray rules = null; |
| | | JSONArray time_rules = null; |
| | | SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); |
| | | String startTime = sdf1.format(new Date()) + " 00:00:00"; |
| | | String endTime = sdf1.format(new Date()) + " 23:59:59"; |
| | | Map<String, Object> map = new HashMap<>(); |
| | | switch (orderType){ |
| | | case 1: |
| | | TOrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); |
| | | driverId = orderPrivateCar.getDriverId(); |
| | | company = companyService.selectById(orderPrivateCar.getCompanyId()); |
| | | jsonObject = JSON.parseObject(company.getSpe()); |
| | | rules = jsonObject.getJSONArray("rules"); |
| | | time_rules = jsonObject.getJSONArray("time_rules"); |
| | | //按天查询当天的订单量 |
| | | //按时间段 |
| | | if(time_rules.size() > 0){ |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | for (int i = 0; i < time_rules.size(); i++) { |
| | | JSONArray jsonArray = time_rules.getJSONArray(i); |
| | | JSONObject jsonObject2 = jsonArray.getJSONObject(0); |
| | | String time = jsonObject2.getString("time"); |
| | | if( ToolUtil.isNotEmpty(time)){ |
| | | String[] split = time.split(" - "); |
| | | Date start = sdf.parse(split[0] + " 00:00:00"); |
| | | Date end = sdf.parse(split[1] + " 23:59:59"); |
| | | if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){ |
| | | startTime = split[0] + " 00:00:00"; |
| | | endTime = split[1] + " 23:59:59"; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | orderNumber = orderPrivateCarService.selectCount(new EntityWrapper<TOrderPrivateCar>() |
| | | .eq("driverId", orderPrivateCar.getDriverId()) |
| | | .eq("isDelete", 1) |
| | | .in("state", Arrays.asList(7, 8, 9)) |
| | | .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'") |
| | | ); |
| | | map.put("orderNumber", orderNumber); |
| | | map.put("disposition", company.getSpe()); |
| | | break; |
| | | case 2: |
| | | TOrderTaxi orderTaxi = orderTaxiService.selectById(orderId); |
| | | driverId = orderTaxi.getDriverId(); |
| | | company = companyService.selectById(orderTaxi.getCompanyId()); |
| | | jsonObject = JSON.parseObject(company.getTaxi()); |
| | | rules = jsonObject.getJSONArray("rules"); |
| | | time_rules = jsonObject.getJSONArray("time_rules"); |
| | | //按天查询当天的订单量 |
| | | //按时间段 |
| | | if(time_rules.size() > 0){ |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | for (int i = 0; i < time_rules.size(); i++) { |
| | | JSONArray jsonArray = time_rules.getJSONArray(i); |
| | | JSONObject jsonObject2 = jsonArray.getJSONObject(0); |
| | | String time = jsonObject2.getString("time"); |
| | | if(ToolUtil.isNotEmpty(time)){ |
| | | String[] split = time.split(" - "); |
| | | Date start = sdf.parse(split[0] + " 00:00:00"); |
| | | Date end = sdf.parse(split[1] + " 23:59:59"); |
| | | if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){ |
| | | startTime = split[0] + " 00:00:00"; |
| | | endTime = split[1] + " 23:59:59"; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | orderNumber = orderTaxiService.selectCount(new EntityWrapper<TOrderTaxi>() |
| | | .eq("driverId", orderTaxi.getDriverId()) |
| | | .eq("isDelete", 1) |
| | | .in("state", Arrays.asList(7, 8, 9)) |
| | | .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'") |
| | | ); |
| | | map.put("orderNumber", orderNumber); |
| | | map.put("disposition", company.getTaxi()); |
| | | break; |
| | | case 3: |
| | | TOrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId); |
| | | TLine line = lineService.selectById(orderCrossCity.getLineId()); |
| | | driverId = orderCrossCity.getDriverId(); |
| | | jsonObject = JSON.parseObject(line.getOutSetting()); |
| | | rules = jsonObject.getJSONArray("rules"); |
| | | time_rules = jsonObject.getJSONArray("time_rules"); |
| | | //按天查询当天的订单量 |
| | | //按时间段 |
| | | if(time_rules.size() > 0){ |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | for (int i = 0; i < time_rules.size(); i++) { |
| | | JSONArray jsonArray = time_rules.getJSONArray(i); |
| | | JSONObject jsonObject2 = jsonArray.getJSONObject(0); |
| | | String time = jsonObject2.getString("time"); |
| | | if(ToolUtil.isNotEmpty(time)){ |
| | | String[] split = time.split(" - "); |
| | | Date start = sdf.parse(split[0] + " 00:00:00"); |
| | | Date end = sdf.parse(split[1] + " 23:59:59"); |
| | | if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){ |
| | | startTime = split[0] + " 00:00:00"; |
| | | endTime = split[1] + " 23:59:59"; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | orderNumber = orderCrossCityService.selectCount(new EntityWrapper<TOrderCrossCity>() |
| | | .eq("driverId", orderCrossCity.getDriverId()) |
| | | .eq("isDelete", 1) |
| | | .in("state", Arrays.asList(8, 9)) |
| | | .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'") |
| | | ); |
| | | map.put("orderNumber", orderNumber); |
| | | map.put("disposition", line.getOutSetting()); |
| | | break; |
| | | case 4: |
| | | TOrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); |
| | | driverId = orderLogistics.getDriverId(); |
| | | company = companyService.selectById(orderLogistics.getCompanyId()); |
| | | jsonObject = JSON.parseObject(company.getSameLogistics()); |
| | | rules = jsonObject.getJSONArray("rules"); |
| | | time_rules = jsonObject.getJSONArray("time_rules"); |
| | | //按天查询当天的订单量 |
| | | //按时间段 |
| | | if(time_rules.size() > 0){ |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | for (int i = 0; i < time_rules.size(); i++) { |
| | | JSONArray jsonArray = time_rules.getJSONArray(i); |
| | | JSONObject jsonObject2 = jsonArray.getJSONObject(0); |
| | | String time = jsonObject2.getString("time"); |
| | | if(ToolUtil.isNotEmpty(time)){ |
| | | String[] split = time.split(" - "); |
| | | Date start = sdf.parse(split[0] + " 00:00:00"); |
| | | Date end = sdf.parse(split[1] + " 23:59:59"); |
| | | if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){ |
| | | startTime = split[0] + " 00:00:00"; |
| | | endTime = split[1] + " 23:59:59"; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | orderNumber = orderLogisticsService.selectCount(new EntityWrapper<TOrderLogistics>() |
| | | .eq("driverId", orderLogistics.getDriverId()) |
| | | .eq("type", 4) |
| | | .eq("isDelete", 1) |
| | | .in("state", Arrays.asList(6, 9)) |
| | | .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'") |
| | | ); |
| | | map.put("orderNumber", orderNumber); |
| | | map.put("disposition", company.getSameLogistics()); |
| | | break; |
| | | case 5: |
| | | TOrderLogistics orderLogistics1 = orderLogisticsService.selectById(orderId); |
| | | driverId = orderLogistics1.getDriverId(); |
| | | company = companyService.selectById(orderLogistics1.getCompanyId()); |
| | | jsonObject = JSON.parseObject(company.getCrossLogistics()); |
| | | rules = jsonObject.getJSONArray("rules"); |
| | | time_rules = jsonObject.getJSONArray("time_rules"); |
| | | //按天查询当天的订单量 |
| | | //按时间段 |
| | | if(time_rules.size() > 0){ |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | for (int i = 0; i < time_rules.size(); i++) { |
| | | JSONArray jsonArray = time_rules.getJSONArray(i); |
| | | JSONObject jsonObject2 = jsonArray.getJSONObject(0); |
| | | String time = jsonObject2.getString("time"); |
| | | if(ToolUtil.isNotEmpty(time)){ |
| | | String[] split = time.split(" - "); |
| | | Date start = sdf.parse(split[0] + " 00:00:00"); |
| | | Date end = sdf.parse(split[1] + " 23:59:59"); |
| | | if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){ |
| | | startTime = split[0] + " 00:00:00"; |
| | | endTime = split[1] + " 23:59:59"; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | orderNumber = orderLogisticsService.selectCount(new EntityWrapper<TOrderLogistics>() |
| | | .eq("driverId", orderLogistics1.getDriverId()) |
| | | .eq("type", 5) |
| | | .eq("isDelete", 1) |
| | | .in("state", Arrays.asList(6, 9)) |
| | | .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'") |
| | | ); |
| | | map.put("orderNumber", orderNumber); |
| | | map.put("disposition", company.getCrossLogistics()); |
| | | break; |
| | | case 7: |
| | | TOrderCall orderCall = orderCallService.selectById(orderId); |
| | | driverId = orderCall.getDriverId(); |
| | | company = companyService.selectById(orderCall.getCompanyId()); |
| | | jsonObject = JSON.parseObject(company.getOnCall()); |
| | | rules = jsonObject.getJSONArray("rules"); |
| | | time_rules = jsonObject.getJSONArray("time_rules"); |
| | | //按天查询当天的订单量 |
| | | //按时间段 |
| | | if(time_rules.size() > 0){ |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | for (int i = 0; i < time_rules.size(); i++) { |
| | | JSONArray jsonArray = time_rules.getJSONArray(i); |
| | | JSONObject jsonObject2 = jsonArray.getJSONObject(0); |
| | | String time = jsonObject2.getString("time"); |
| | | if(ToolUtil.isNotEmpty(time)){ |
| | | String[] split = time.split(" - "); |
| | | Date start = sdf.parse(split[0] + " 00:00:00"); |
| | | Date end = sdf.parse(split[1] + " 23:59:59"); |
| | | if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){ |
| | | startTime = split[0] + " 00:00:00"; |
| | | endTime = split[1] + " 23:59:59"; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | orderNumber = orderCallService.selectCount(new EntityWrapper<TOrderCall>() |
| | | .eq("driverId", orderCall.getDriverId()) |
| | | .eq("isDelete", 1) |
| | | .in("state", Arrays.asList(7, 8, 9)) |
| | | .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'") |
| | | ); |
| | | map.put("orderNumber", orderNumber); |
| | | map.put("disposition", company.getOnCall()); |
| | | break; |
| | | } |
| | | |
| | | BigDecimal money = BigDecimal.ZERO; |
| | | //{"rules":[],"time_rules":[[{"order":"1,3","percent":"20","MemberCoins":"1.1,2"},{"order":"3,10","percent":"40","MemberCoins":"2,5"}]]} |
| | | //按天 |
| | | if(rules.size() > 0){ |
| | | for (int i = 0; i < rules.size(); i++) { |
| | | JSONObject jsonObject1 = rules.getJSONObject(i); |
| | | money = getDriverMoney(orderNumber, payMoney, driverId, orderId, orderType, jsonObject1); |
| | | if(money.compareTo(BigDecimal.ZERO) >= 0){ |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | //按时间段 |
| | | if(time_rules.size() > 0){ |
| | | boolean b = false; |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | for (int i = 0; i < time_rules.size(); i++) { |
| | | JSONArray jsonArray = time_rules.getJSONArray(i); |
| | | JSONObject jsonObject2 = jsonArray.getJSONObject(0); |
| | | String time = jsonObject2.getString("time"); |
| | | if(!b && ToolUtil.isNotEmpty(time)){ |
| | | String[] split = time.split(" - "); |
| | | Date start = sdf.parse(split[0] + " 00:00:00"); |
| | | Date end = sdf.parse(split[1] + " 23:59:59"); |
| | | if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){ |
| | | for (int j = 0; j < jsonArray.size(); j++) { |
| | | JSONObject jsonObject1 = jsonArray.getJSONObject(j); |
| | | money = getDriverMoney(orderNumber, payMoney, driverId, orderId, orderType, jsonObject1); |
| | | if(money.compareTo(BigDecimal.ZERO) < 0){ |
| | | continue; |
| | | } |
| | | b = true; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if(b){ |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if(!b){ |
| | | JSONArray jsonArray = time_rules.getJSONArray(0); |
| | | for (int j = 0; j < jsonArray.size(); j++) { |
| | | JSONObject jsonObject1 = jsonArray.getJSONObject(j); |
| | | money = getDriverMoney(orderNumber, payMoney, driverId, orderId, orderType, jsonObject1); |
| | | if(money.compareTo(BigDecimal.ZERO) < 0){ |
| | | continue; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if(money.compareTo(BigDecimal.ZERO) > 0){ |
| | | TDriver driver = driverService.selectById(driverId); |
| | | driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setBalance((null != driver.getBalance() ? driver.getBalance() : BigDecimal.ZERO).add(money).setScale(2, BigDecimal.ROUND_HALF_EVEN)); |
| | | driverService.updateById(driver); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | public BigDecimal getDriverMoney(Integer orderNumber, Double payMoney, Integer driverId, Integer orderId, Integer orderType, JSONObject jsonObject1) throws Exception{ |
| | | String order = jsonObject1.getString("order"); |
| | | Double percent = jsonObject1.getDouble("percent"); |
| | | String MemberCoins = jsonObject1.getString("MemberCoins"); |
| | | String[] split = order.split(","); |
| | | if(Integer.valueOf(split[0]).compareTo(orderNumber) <= 0 && Integer.valueOf(split[1]).compareTo(orderNumber) > 0){ |
| | | String[] split1 = MemberCoins.split(","); |
| | | Double d = Double.valueOf(split1[0]); |
| | | Double g = Double.valueOf(split1[1]); |
| | | |
| | | //平台抽成金额 |
| | | BigDecimal multiply1 = new BigDecimal(payMoney).multiply(new BigDecimal(percent / 100)); |
| | | //抽成金额小于最低金额,司机收入为0 |
| | | if(multiply1.compareTo(new BigDecimal(d)) < 0){ |
| | | saveData(1, 1, 2, orderId, orderType, d); |
| | | //司机收入 |
| | | BigDecimal subtract = new BigDecimal(payMoney).subtract(new BigDecimal(d)); |
| | | if(subtract.compareTo(BigDecimal.ZERO) > 0){ |
| | | saveData(2, driverId, 2, orderId, orderType, subtract.doubleValue()); |
| | | return subtract; |
| | | } |
| | | return new BigDecimal(0); |
| | | } |
| | | if(multiply1.compareTo(new BigDecimal(d)) >= 0 && multiply1.compareTo(new BigDecimal(g)) < 0){ |
| | | //司机收入 |
| | | BigDecimal subtract = new BigDecimal(payMoney).subtract(multiply1); |
| | | saveData(2, driverId, 2, orderId, orderType, subtract.doubleValue()); |
| | | saveData(1, 1, 2, orderId, orderType, multiply1.doubleValue()); |
| | | return subtract; |
| | | } |
| | | if(multiply1.compareTo(new BigDecimal(g)) >= 0){ |
| | | //司机收入 |
| | | BigDecimal subtract = new BigDecimal(payMoney).subtract(new BigDecimal(g)); |
| | | saveData(2, driverId, 2, orderId, orderType, subtract.doubleValue()); |
| | | saveData(1, 1, 2, orderId, orderType, g); |
| | | return subtract; |
| | | } |
| | | } |
| | | return new BigDecimal(-1); |
| | | } |
| | | |
| | | } |