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.*;
|
import com.stylefeng.guns.modular.system.service.*;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
|
@Service
|
public class IncomeServiceImpl extends ServiceImpl<IncomeMapper, Income> implements IIncomeService {
|
|
@Autowired
|
private ITOrderPrivateCarService orderPrivateCarService;
|
|
@Autowired
|
private ITOrderTaxiService orderTaxiService;
|
|
@Autowired
|
private ITOrderCrossCityService orderCrossCityService;
|
|
@Autowired
|
private ITOrderLogisticsService orderLogisticsService;
|
|
@Autowired
|
private ITOrderCallService orderCallService;
|
|
@Autowired
|
private ITUserService userService;
|
|
@Autowired
|
private ITOrderCharteredCarService orderCharteredCarService;
|
|
@Autowired
|
private ITDriverService driverService;
|
@Autowired
|
private ShiroExtUtil shiroExtUtil;
|
|
@Autowired
|
private ITCompanyService companyService;
|
|
@Autowired
|
private ITLineService lineService;
|
|
|
/**
|
* 添加数据
|
* @param userType
|
* @param objectId
|
* @param type
|
* @param incomeId
|
* @param money
|
* @throws Exception
|
*/
|
@Override
|
public void saveData(Integer userType, Integer objectId, Integer type, Integer incomeId, Integer orderType, Double money) throws Exception {
|
Income income = new Income();
|
income.setUserType(userType);
|
income.setObjectId(objectId);
|
income.setType(type);
|
income.setIncomeId(incomeId);
|
income.setOrderType(orderType);
|
income.setMoney(money);
|
income.setInsertTime(new Date());
|
this.insert(income);
|
}
|
|
|
// @Override
|
// public Map<String, Object> summaryOfIncomeDetailsList(String insertTime, Integer offset, Integer limit) throws Exception {
|
// String startTime = "";
|
// String endTime = "";
|
// if(ToolUtil.isNotEmpty(insertTime)){
|
// String[] split = insertTime.split(" - ");
|
// startTime = split[0];
|
// endTime = split[1];
|
// }
|
// Map<String, Object> maps = new HashMap<>();
|
//
|
// List<Map<String, Object>> list = this.baseMapper.summaryOfIncomeDetailsList(ShiroKit.getUser().getObjectId(), startTime, endTime, offset, limit);
|
// List<Map<String, Object>> datas = new ArrayList<>();
|
// for (Map<String, Object> map : list) {
|
// String insertTime1 = map.get("insertTime").toString();
|
//
|
// List<Map<String, Object>> list2 = this.baseMapper.summaryOfIncomeDetailsListGroupSum(1, ShiroKit.getUser().getObjectId(), insertTime1);
|
// List<Map<String, Object>> list1 = new ArrayList<>();
|
//
|
// for (Map<String, Object> income : list2) {
|
// Double money = Double.valueOf(income.get("money").toString());
|
// Double overtimeDeduction = Double.valueOf(income.get("overtimeDeduction").toString());
|
// Double complaint = Double.valueOf(income.get("complaint").toString());
|
// Double payMoney = Double.valueOf(income.get("payMoney").toString());
|
//
|
// Map<String, Object> row = new HashMap<>();
|
// row.put("orderType", "");//订单类型
|
// row.put("type", "");//收益类型
|
// row.put("userName", null == income.get("nickName") ? "" : income.get("nickName").toString());//用户姓名
|
// row.put("userPhone", null == income.get("phone") ? "" : income.get("phone").toString());//用户电话
|
// row.put("orderPayMoney", payMoney);//订单支付金额
|
// row.put("orderRevenue", money);//订单收益
|
// row.put("taxiCardRevenue", 0);//打车卡收益
|
// row.put("overtimeDeduction", overtimeDeduction);//超时扣款收益
|
// row.put("complaintDeductionProceeds", complaint);//投诉扣款收益
|
// row.put("other", 0);//其他
|
// if(null != income.get("orderType")){
|
// Integer orderType = Integer.valueOf(income.get("orderType").toString());
|
// if(orderType != null){
|
// switch (orderType){
|
// case 1:
|
// row.put("orderType", "快车");
|
// break;
|
// case 2:
|
// row.put("orderType", "出租车");
|
// break;
|
// case 3:
|
// row.put("orderType", "跨城出行");
|
// break;
|
// case 4:
|
// row.put("orderType", "同城小件物流");
|
// break;
|
// case 5:
|
// row.put("orderType", "跨城小件物流");
|
// break;
|
// case 6:
|
// row.put("orderType", "包车");
|
// break;
|
// case 7:
|
// row.put("orderType", "95128");
|
// break;
|
// }
|
// }
|
// }
|
//
|
// Integer type = Integer.valueOf(income.get("type").toString());
|
// switch (type){
|
// case 1:
|
// row.put("type", "活动收入");
|
// break;
|
// case 2:
|
// row.put("type", "跑单收入");
|
// break;
|
// case 3:
|
// row.put("type", "取消订单收入");
|
// break;
|
// case 4:
|
// row.put("type", "改派订单收入");
|
// break;
|
// case 5:
|
// row.put("type", "购买出行卡");
|
// break;
|
// case 6:
|
// row.put("type", "感谢费");
|
// break;
|
// case 7:
|
// row.put("type", "超时扣款");
|
// break;
|
// case 8:
|
// row.put("type", "投诉扣款");
|
// break;
|
// case 9:
|
// row.put("type", "小件物流超时退款");
|
// break;
|
// }
|
// list1.add(row);
|
// }
|
//
|
// Double sumData = this.baseMapper.getSumData(1, ShiroKit.getUser().getObjectId(), insertTime1, Arrays.asList(5));
|
// Map<String, Object> row = new HashMap<>();
|
// row.put("orderType", "");//订单类型
|
// row.put("type", "购买出行卡");//收益类型
|
// row.put("userName", "");//用户姓名
|
// row.put("userPhone", "");//用户电话
|
// row.put("orderPayMoney", 0);//订单支付金额
|
// row.put("orderRevenue", 0);//订单收益
|
// row.put("taxiCardRevenue", null == sumData ? 0 : sumData);//打车卡收益
|
// row.put("overtimeDeduction", 0);//超时扣款收益
|
// row.put("complaintDeductionProceeds", 0);//投诉扣款收益
|
// row.put("other", 0);//其他
|
// list1.add(row);
|
//
|
// sumData = this.baseMapper.getSumData(1, ShiroKit.getUser().getObjectId(), insertTime1, Arrays.asList(1, 3, 4, 6, 9));
|
// row = new HashMap<>();
|
// row.put("orderType", "");//订单类型
|
// row.put("type", "其他");//收益类型
|
// row.put("userName", "");//用户姓名
|
// row.put("userPhone", "");//用户电话
|
// row.put("orderPayMoney", 0);//订单支付金额
|
// row.put("orderRevenue", 0);//订单收益
|
// row.put("taxiCardRevenue", 0);//打车卡收益
|
// row.put("overtimeDeduction", 0);//超时扣款收益
|
// row.put("complaintDeductionProceeds", 0);//投诉扣款收益
|
// row.put("other", sumData);//其他
|
// list1.add(row);
|
//
|
// if(list1.size() > 0){
|
// Map<String, Object> data = new HashMap<>();
|
// data.put("insertTime", insertTime1);
|
// data.put("list", list1);
|
// datas.add(data);
|
// }
|
// }
|
// int count = this.baseMapper.summaryOfIncomeDetailsListCount(ShiroKit.getUser().getObjectId(), startTime, endTime);
|
// Map<String, Object> map = this.baseMapper.summaryOfIncomeDetailsListSum(ShiroKit.getUser().getObjectId(), startTime, endTime);
|
// Map<String, Object> data = new HashMap<>();
|
// data.put("insertTime", "合计");
|
// List<Map<String, Object>> list1 = new ArrayList<>();
|
// list1.add(map);
|
// data.put("list", list1);
|
// datas.add(data);
|
//
|
// maps.put("rows", datas);
|
// maps.put("total", count);
|
// return maps;
|
// }
|
|
|
|
@Override
|
public Map<String, Object> summaryOfIncomeDetailsList(String insertTime, Integer orderType, Integer incomeType, String name, String phone, Integer offset, Integer limit) throws Exception {
|
String startTime = "";
|
String endTime = "";
|
if(ToolUtil.isNotEmpty(insertTime)){
|
String[] split = insertTime.split(" - ");
|
startTime = split[0];
|
endTime = split[1];
|
}
|
Map<String, Object> maps = new HashMap<>();
|
|
List<Map<String, Object>> datas = new ArrayList<>();
|
List<Map<String, Object>> list2 = this.baseMapper.summaryOfIncomeDetailsListGroupSum1(1, shiroExtUtil.getUser().getObjectId(), startTime, endTime, orderType, incomeType, name, phone, offset, limit);
|
for (Map<String, Object> income : list2) {
|
Double orderMoney = Double.valueOf(null != income.get("orderMoney") ? income.get("orderMoney").toString() : "0");
|
Double payMoney = Double.valueOf(income.get("payMoney").toString());
|
Double money = Double.valueOf(income.get("money").toString());
|
money = orderMoney - money;
|
|
Double overtimeDeduction = Double.valueOf(income.get("overtimeDeduction").toString());
|
Double complaint = Double.valueOf(income.get("complaint").toString());
|
String insertTime1 = income.get("insertTime").toString();
|
Double taxiCardRevenue = Double.valueOf(new BigDecimal(income.get("taxiCardRevenue").toString()).setScale(2, RoundingMode.HALF_UP).toString());
|
Double other = Double.valueOf(new BigDecimal(income.get("other").toString()).setScale(2, RoundingMode.HALF_UP).toString());
|
|
Map<String, Object> row = new HashMap<>();
|
row.put("insertTime", insertTime1);
|
row.put("orderType", "");//订单类型
|
row.put("type", "");//收益类型
|
row.put("userName", null == income.get("nickName") ? "" : income.get("nickName").toString());//用户姓名
|
row.put("userPhone", null == income.get("phone") ? "" : income.get("phone").toString());//用户电话
|
row.put("orderPayMoney", payMoney);//订单支付金额
|
row.put("orderRevenue", new BigDecimal(money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//订单收益
|
row.put("taxiCardRevenue", taxiCardRevenue);//打车卡收益
|
row.put("overtimeDeduction", overtimeDeduction);//超时扣款收益
|
row.put("complaintDeductionProceeds", complaint);//投诉扣款收益
|
row.put("other", other);//其他
|
if(null != income.get("orderType")){
|
Integer orderType1 = Integer.valueOf(income.get("orderType").toString());
|
if(orderType1 != null){
|
switch (orderType1){
|
case 1:
|
row.put("orderType", "快车");
|
break;
|
case 2:
|
row.put("orderType", "出租车");
|
break;
|
case 3:
|
row.put("orderType", "跨城出行");
|
break;
|
case 4:
|
row.put("orderType", "同城小件物流");
|
break;
|
case 5:
|
row.put("orderType", "跨城小件物流");
|
break;
|
case 6:
|
row.put("orderType", "包车");
|
break;
|
case 7:
|
row.put("orderType", "95128");
|
break;
|
}
|
}
|
}
|
|
Integer type = Integer.valueOf(income.get("type").toString());
|
switch (type){
|
case 1:
|
row.put("type", "活动收入");
|
break;
|
case 2:
|
row.put("type", "跑单收入");
|
break;
|
case 3:
|
row.put("type", "取消订单收入");
|
break;
|
case 4:
|
row.put("type", "改派订单收入");
|
break;
|
case 5:
|
row.put("type", "购买出行卡");
|
break;
|
case 6:
|
row.put("type", "感谢费");
|
break;
|
case 7:
|
row.put("type", "超时扣款");
|
break;
|
case 8:
|
row.put("type", "投诉扣款");
|
break;
|
case 9:
|
row.put("type", "小件物流超时退款");
|
break;
|
}
|
datas.add(row);
|
}
|
|
List<Map<String, Object>> datas1 = new ArrayList<>();
|
list2 = this.baseMapper.summaryOfIncomeDetailsListGroupSum1(1, shiroExtUtil.getUser().getObjectId(), startTime, endTime, orderType, incomeType, name, phone, null, null);
|
for (Map<String, Object> income : list2) {
|
Double orderMoney = Double.valueOf(null != income.get("orderMoney") ? income.get("orderMoney").toString() : "0");
|
Double payMoney = Double.valueOf(income.get("payMoney").toString());
|
Double money = Double.valueOf(income.get("money").toString());
|
money = orderMoney - money;
|
|
Double overtimeDeduction = Double.valueOf(income.get("overtimeDeduction").toString());
|
Double complaint = Double.valueOf(income.get("complaint").toString());
|
String insertTime1 = income.get("insertTime").toString();
|
Double taxiCardRevenue = Double.valueOf(income.get("taxiCardRevenue").toString());
|
Double other = Double.valueOf(income.get("other").toString());
|
|
Map<String, Object> row = new HashMap<>();
|
row.put("insertTime", insertTime1);
|
row.put("orderType", "");//订单类型
|
row.put("type", "");//收益类型
|
row.put("userName", null == income.get("nickName") ? "" : income.get("nickName").toString());//用户姓名
|
row.put("userPhone", null == income.get("phone") ? "" : income.get("phone").toString());//用户电话
|
row.put("orderPayMoney", payMoney);//订单支付金额
|
row.put("orderRevenue", new BigDecimal(money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//订单收益
|
row.put("taxiCardRevenue", taxiCardRevenue);//打车卡收益
|
row.put("overtimeDeduction", overtimeDeduction);//超时扣款收益
|
row.put("complaintDeductionProceeds", complaint);//投诉扣款收益
|
row.put("other", other);//其他
|
if(null != income.get("orderType")){
|
Integer orderType1 = Integer.valueOf(income.get("orderType").toString());
|
if(orderType1 != null){
|
switch (orderType1){
|
case 1:
|
row.put("orderType", "快车");
|
break;
|
case 2:
|
row.put("orderType", "出租车");
|
break;
|
case 3:
|
row.put("orderType", "跨城出行");
|
break;
|
case 4:
|
row.put("orderType", "同城小件物流");
|
break;
|
case 5:
|
row.put("orderType", "跨城小件物流");
|
break;
|
case 6:
|
row.put("orderType", "包车");
|
break;
|
case 7:
|
row.put("orderType", "95128");
|
break;
|
}
|
}
|
}
|
|
Integer type = Integer.valueOf(income.get("type").toString());
|
switch (type){
|
case 1:
|
row.put("type", "活动收入");
|
break;
|
case 2:
|
row.put("type", "跑单收入");
|
break;
|
case 3:
|
row.put("type", "取消订单收入");
|
break;
|
case 4:
|
row.put("type", "改派订单收入");
|
break;
|
case 5:
|
row.put("type", "购买出行卡");
|
break;
|
case 6:
|
row.put("type", "感谢费");
|
break;
|
case 7:
|
row.put("type", "超时扣款");
|
break;
|
case 8:
|
row.put("type", "投诉扣款");
|
break;
|
case 9:
|
row.put("type", "小件物流超时退款");
|
break;
|
}
|
datas1.add(row);
|
}
|
|
|
BigDecimal orderPayMoney1 = new BigDecimal("0");
|
BigDecimal orderRevenue1 = new BigDecimal("0");
|
BigDecimal taxiCardRevenue1 = new BigDecimal("0");
|
BigDecimal overtimeDeduction1 = new BigDecimal("0");
|
BigDecimal complaintDeductionProceeds1 = new BigDecimal("0");
|
BigDecimal other1 = new BigDecimal("0");
|
|
for (Map<String, Object> income : datas1) {
|
orderPayMoney1 = orderPayMoney1.add(new BigDecimal(null == income.get("orderPayMoney") ? "0" : income.get("orderPayMoney").toString()));
|
orderRevenue1 = orderRevenue1.add(new BigDecimal(null == income.get("orderRevenue") ? "0" : income.get("orderRevenue").toString()));
|
taxiCardRevenue1 = taxiCardRevenue1.add(new BigDecimal(null == income.get("taxiCardRevenue") ? "0" : income.get("taxiCardRevenue").toString()));
|
overtimeDeduction1 = overtimeDeduction1.add(new BigDecimal(null == income.get("overtimeDeduction") ? "0" : income.get("overtimeDeduction").toString()));
|
complaintDeductionProceeds1 = complaintDeductionProceeds1.add(new BigDecimal(null == income.get("complaintDeductionProceeds") ? "0" : income.get("complaintDeductionProceeds").toString()));
|
other1 = other1.add(new BigDecimal(null == income.get("other") ? "0" : income.get("other").toString()));
|
}
|
|
Map<String, Object> map = new HashMap<>();
|
map.put("insertTime", "合计");
|
map.put("orderPayMoney", orderPayMoney1.doubleValue());
|
map.put("orderRevenue", orderRevenue1.doubleValue());
|
map.put("taxiCardRevenue", new BigDecimal(taxiCardRevenue1.doubleValue()).setScale(2,RoundingMode.HALF_UP).doubleValue());
|
map.put("overtimeDeduction", overtimeDeduction1.doubleValue());
|
map.put("complaintDeductionProceeds", complaintDeductionProceeds1.doubleValue());
|
map.put("other", other1.doubleValue());
|
datas.add(map);
|
|
maps.put("rows", datas);
|
maps.put("total", list2.size());
|
return maps;
|
}
|
|
|
@Override
|
public HSSFWorkbook exportSummaryOfIncomeDetails(String insertTime, Integer orderType, Integer incomeType, String name, String phone) throws Exception {
|
String startTime = "";
|
String endTime = "";
|
if (ToolUtil.isNotEmpty(insertTime)) {
|
String[] split = insertTime.split(" - ");
|
startTime = split[0];
|
endTime = split[1];
|
}
|
|
List<Map<String, Object>> list = this.baseMapper.summaryOfIncomeDetailsListGroupSum1(1, shiroExtUtil.getUser().getObjectId(), startTime, endTime, orderType, incomeType, name, phone, null, null);
|
List<Map<String, Object>> datas = new ArrayList<>();
|
Integer num = 0;
|
|
for (Map<String, Object> income : list) {
|
Double orderMoney = Double.valueOf(null != income.get("orderMoney") ? income.get("orderMoney").toString() : "0");
|
Double payMoney = Double.valueOf(income.get("payMoney").toString());
|
Double money = Double.valueOf(income.get("money").toString());
|
Double overtimeDeduction = Double.valueOf(income.get("overtimeDeduction").toString());
|
Double complaint = Double.valueOf(income.get("complaint").toString());
|
String insertTime1 = income.get("insertTime").toString();
|
Double taxiCardRevenue = Double.valueOf(new BigDecimal(income.get("taxiCardRevenue").toString()).setScale(2, RoundingMode.HALF_UP).toString());
|
Double other = Double.valueOf(new BigDecimal(income.get("other").toString()).setScale(2,RoundingMode.HALF_UP).toString());
|
money = orderMoney - money;
|
|
Map<String, Object> row = new HashMap<>();
|
row.put("insertTime", insertTime1);
|
row.put("orderType", "");//订单类型
|
row.put("type", "");//收益类型
|
row.put("userName", null == income.get("nickName") ? "" : income.get("nickName").toString());//用户姓名
|
row.put("userPhone", null == income.get("phone") ? "" : income.get("phone").toString());//用户电话
|
row.put("orderPayMoney", payMoney);//订单支付金额
|
row.put("orderRevenue", new BigDecimal(money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//订单收益
|
row.put("taxiCardRevenue", taxiCardRevenue);//打车卡收益
|
row.put("overtimeDeduction", overtimeDeduction);//超时扣款收益
|
row.put("complaintDeductionProceeds", complaint);//投诉扣款收益
|
row.put("other", other);//其他
|
if (null != income.get("orderType")) {
|
Integer orderType1 = Integer.valueOf(income.get("orderType").toString());
|
if (orderType1 != null) {
|
switch (orderType1) {
|
case 1:
|
row.put("orderType", "快车");
|
break;
|
case 2:
|
row.put("orderType", "出租车");
|
break;
|
case 3:
|
row.put("orderType", "跨城出行");
|
break;
|
case 4:
|
row.put("orderType", "同城小件物流");
|
break;
|
case 5:
|
row.put("orderType", "跨城小件物流");
|
break;
|
case 6:
|
row.put("orderType", "包车");
|
break;
|
case 7:
|
row.put("orderType", "95128");
|
break;
|
}
|
}
|
}
|
|
Integer type = Integer.valueOf(income.get("type").toString());
|
switch (type) {
|
case 1:
|
row.put("type", "活动收入");
|
break;
|
case 2:
|
row.put("type", "跑单收入");
|
break;
|
case 3:
|
row.put("type", "取消订单收入");
|
break;
|
case 4:
|
row.put("type", "改派订单收入");
|
break;
|
case 5:
|
row.put("type", "购买出行卡");
|
break;
|
case 6:
|
row.put("type", "感谢费");
|
break;
|
case 7:
|
row.put("type", "超时扣款");
|
break;
|
case 8:
|
row.put("type", "投诉扣款");
|
break;
|
case 9:
|
row.put("type", "小件物流超时退款");
|
break;
|
}
|
datas.add(row);
|
}
|
|
String[] title = new String[]{"时间", "订单类型", "收益类型", "用户名称", "用户手机号", "乘客实际支付金额", "平台抽佣金额", "购买打车卡收益", "超时扣款收益", "司机投诉扣款平台收益", "其他收入", "收入合计"};
|
String[][] values = new String[list.size()][12];
|
int n = 0;
|
for (int i = 0; i < datas.size(); i++) {
|
Map<String, Object> map = datas.get(i);
|
Object insertTime1 = map.get("insertTime");
|
values[n][0] = insertTime1.toString();
|
values[n][1] = null != map.get("orderType") ? map.get("orderType").toString() : "";
|
values[n][2] = null != map.get("type") ? map.get("type").toString() : "";
|
values[n][3] = null != map.get("userName") ? map.get("userName").toString() : "";
|
values[n][4] = null != map.get("userPhone") ? map.get("userPhone").toString() : "";
|
values[n][5] = null != map.get("orderPayMoney") ? map.get("orderPayMoney").toString() : "";
|
values[n][6] = null != map.get("orderRevenue") ? map.get("orderRevenue").toString() : "";
|
values[n][7] = null != map.get("taxiCardRevenue") ? map.get("taxiCardRevenue").toString() : "";
|
values[n][8] = null != map.get("overtimeDeduction") ? map.get("overtimeDeduction").toString() : "";
|
values[n][9] = null != map.get("complaintDeductionProceeds") ? map.get("complaintDeductionProceeds").toString() : "";
|
values[n][10] = null != map.get("other") ? map.get("other").toString() : "";
|
BigDecimal all = new BigDecimal(ToolUtil.isNotEmpty(map.get("orderRevenue")) ? map.get("orderRevenue").toString() : "0")
|
.add(new BigDecimal(ToolUtil.isNotEmpty(map.get("taxiCardRevenue")) ? map.get("taxiCardRevenue").toString() : "0"))
|
.add(new BigDecimal(ToolUtil.isNotEmpty(map.get("overtimeDeduction")) ? map.get("overtimeDeduction").toString() : "0"))
|
.add(new BigDecimal(ToolUtil.isNotEmpty(map.get("complaintDeductionProceeds")) ? map.get("complaintDeductionProceeds").toString() : "0"))
|
.add(new BigDecimal(ToolUtil.isNotEmpty(map.get("other")) ? map.get("other").toString() : "0"));
|
values[n][11] = all.toPlainString();
|
n++;
|
}
|
return ExcelUtil.getHSSFWorkbookTime("收入明细汇总", title, values, null,insertTime);
|
}
|
|
@Override
|
public Map<String, Object> summaryOfSpendingDetailsList(String insertTime, Integer orderType, Integer incomeType, String name, String phone, Integer offset, Integer limit) throws Exception {
|
String startTime = "";
|
String endTime = "";
|
if (ToolUtil.isNotEmpty(insertTime)) {
|
String[] split = insertTime.split(" - ");
|
startTime = split[0];
|
endTime = split[1];
|
}
|
Map<String, Object> maps = new HashMap<>();
|
|
List<Map<String, Object>> list1 = this.baseMapper.summaryOfSpendingDetailsList1(shiroExtUtil.getUser().getObjectId(), startTime, endTime, orderType, incomeType, name, phone, offset, limit);
|
List<Map<String, Object>> list2 = this.baseMapper.summaryOfSpendingDetailsList1(shiroExtUtil.getUser().getObjectId(), startTime, endTime, orderType, incomeType, name, phone, null, null);
|
BigDecimal orderRevenue = new BigDecimal("0");
|
BigDecimal activityAward = new BigDecimal("0");
|
BigDecimal other = new BigDecimal("0");
|
BigDecimal all = new BigDecimal("0");
|
for (Map<String, Object> map : list2) {
|
orderRevenue = orderRevenue.add(new BigDecimal(null == map.get("orderRevenue") ? "0" : map.get("orderRevenue").toString()));
|
activityAward = activityAward.add(new BigDecimal(null == map.get("activityAward") ? "0" : map.get("activityAward").toString()));
|
other = other.add(new BigDecimal(null == map.get("other") ? "0" : map.get("other").toString()));
|
all = all.add(new BigDecimal(null == map.get("all") ? "0" : map.get("all").toString()));
|
}
|
Map<String, Object> map = new HashMap<>();
|
map.put("insertTime", "合计");
|
map.put("orderRevenue", orderRevenue.toString());
|
map.put("activityAward", activityAward.toString());
|
map.put("other", other.toString());
|
map.put("all", all.toString());
|
list1.add(map);
|
maps.put("rows", list1);
|
System.out.println("支出明细" + list1);
|
|
list1 = this.baseMapper.summaryOfSpendingDetailsList1(shiroExtUtil.getUser().getObjectId(), startTime, endTime, orderType, incomeType, name, phone, null, null);
|
maps.put("total", list1.size());
|
return maps;
|
}
|
|
@Override
|
public HSSFWorkbook exportSummaryOfSpendingDetails(String insertTime, Integer orderType, Integer incomeType, String name, String phone) throws Exception {
|
String startTime = "";
|
String endTime = "";
|
if (ToolUtil.isNotEmpty(insertTime)) {
|
String[] split = insertTime.split(" - ");
|
startTime = split[0];
|
endTime = split[1];
|
}
|
|
List<Map<String, Object>> list1 = this.baseMapper.summaryOfSpendingDetailsList1(shiroExtUtil.getUser().getObjectId(), startTime, endTime, orderType, incomeType, name, phone, null, null);
|
String[] title = new String[]{"时间", "订单类型", "收益类型", "司机名称", "司机手机号", "订单应支付金额", "平台奖励支出", "其他支出", "支出合计"};
|
String[][] values = new String[list1.size()][9];
|
int n = 0;
|
for (int j = 0; j < list1.size(); j++) {
|
Map<String, Object> map1 = list1.get(j);
|
Object insertTime1 = map1.get("insertTime");
|
values[n][0] = insertTime1.toString();
|
values[n][1] = "";
|
if (null != map1.get("orderType")) {
|
switch (Integer.valueOf(map1.get("orderType").toString())) {
|
case 1:
|
values[n][1] = "快车";
|
break;
|
case 2:
|
values[n][1] = "出租车";
|
break;
|
case 3:
|
values[n][1] = "跨城跨城出行小件物流";
|
break;
|
case 4:
|
values[n][1] = "同城小件物流";
|
break;
|
case 5:
|
values[n][1] = "跨城小件物流";
|
break;
|
case 6:
|
values[n][1] = "包车";
|
break;
|
case 7:
|
values[n][1] = "95128";
|
break;
|
}
|
}
|
values[n][2] = null != map1.get("type") ? map1.get("type").toString() : "";
|
values[n][3] = null != map1.get("name") ? map1.get("name").toString() : "";
|
values[n][4] = null != map1.get("phone") ? map1.get("phone").toString() : "";
|
values[n][5] = null != map1.get("orderRevenue") ? map1.get("orderRevenue").toString() : "";
|
values[n][6] = null != map1.get("activityAward") ? map1.get("activityAward").toString() : "";
|
values[n][7] = null != map1.get("other") ? map1.get("other").toString() : "";
|
values[n][8] = null != map1.get("all") ? map1.get("all").toString() : "";
|
n++;
|
}
|
return ExcelUtil.getHSSFWorkbookTime("支出明细汇总", title, values, null,insertTime);
|
}
|
|
@Override
|
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);
|
}
|
|
}
|