package com.stylefeng.guns.modular.system.controller; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.common.constant.factory.PageFactory; import com.stylefeng.guns.core.shiro.ShiroKit; import com.stylefeng.guns.core.util.DateUtil; import com.stylefeng.guns.core.util.ExcelExportUtil; import com.stylefeng.guns.core.util.SinataUtil; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.beans.factory.annotation.Autowired; import com.stylefeng.guns.core.log.LogObjectHolder; import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * 控制器 * * @author fengshuonan * @Date 2021-04-22 10:53:34 */ @Controller @RequestMapping("/tIncome") public class TIncomeController extends BaseController { private String PREFIX = "/system/tIncome/"; @Autowired private IIncomeService tIncomeService; @Autowired private ITOrderPrivateCarService orderPrivateCarService; @Autowired private ITPubTransactionDetailsService pubTransactionDetailsService; @Autowired private ITPubWithdrawalService pubWithdrawalService; @Autowired private ITDriverService driverService; /** * 跳转到首页 */ @RequestMapping("") public String index(Integer id, Model model) { model.addAttribute("id", id); return PREFIX + "tIncome.html"; } @RequestMapping("/balance") public String balance(Integer id, Model model) { model.addAttribute("id", id); return PREFIX + "balance.html"; } @RequestMapping("driverWork") public String driverWork(Model model) { return PREFIX + "driverWork.html"; } @RequestMapping(value = "/driverWorkList") @ResponseBody public Object driverWorkList() { Page> page = new PageFactory>().defaultPage(); List> list = tIncomeService.getList1(page); for (Map map:list){ List> list1 = tIncomeService.getTotal(map.get("times").toString()); map.put("driverNum",list1.get(0).get("driverNum")); map.put("timeNumber",list1.get(0).get("timeNumber")); } page.setRecords(list); return super.packForBT(page); } @RequestMapping("driverWorkDetail") public String driverWorkDetail(String times, Model model) { model.addAttribute("times", times); return PREFIX + "driverWorkDetail.html"; } @RequestMapping(value = "/driverWorkDetailList") @ResponseBody public Object driverWorkDetailList(String times) { Page> page = new PageFactory>().defaultPage(); page.setRecords(tIncomeService.getList2(page,times)); return super.packForBT(page); } /** * 跳转到添加 */ @RequestMapping("/tIncome_add") public String tIncomeAdd() { return PREFIX + "tIncome_add.html"; } /** * 获取列表 */ @RequestMapping(value = "/list") @ResponseBody public Object list(Integer id) { Page> page = new PageFactory>().defaultPage(); page.setRecords(tIncomeService.getList(page,id)); return super.packForBT(page); } /** * 司机余额修改 */ @RequestMapping(value = "/changeMoney") @ResponseBody public Object oneChange(Integer id ,Integer type,String mount,String remark) { TDriver tDriver = driverService.selectById(id); TPubTransactionDetails tPubTransactionDetails = new TPubTransactionDetails(); tPubTransactionDetails.setUserId(tDriver.getId()); tPubTransactionDetails.setInsertTime(new Date()); tPubTransactionDetails.setRemark(remark); tPubTransactionDetails.setMoney(new BigDecimal(mount)); tPubTransactionDetails.setState(type); tPubTransactionDetails.setType(1); tPubTransactionDetails.setUserType(2); switch ( type){ case 1: tPubTransactionDetails.setOrderType(6); break; case 2: tPubTransactionDetails.setOrderType(7); break; } // type=1增加 type=2减少 switch (type){ case 1: BigDecimal bigDecimal = new BigDecimal(mount); BigDecimal add = tDriver.getBalance().add(bigDecimal); tDriver.setBalance(add); BigDecimal laveBusinessMoney = new BigDecimal(tDriver.getLaveBusinessMoney()).add(bigDecimal); tDriver.setLaveBusinessMoney(laveBusinessMoney.doubleValue()); break; case 2: BigDecimal bigDecimal1 = new BigDecimal(mount); BigDecimal subtract = tDriver.getBalance().subtract(bigDecimal1); int comparisonResult = subtract.compareTo(BigDecimal.ZERO); // 小于0 设置为0 不要为负数 if (comparisonResult>0){ tDriver.setBalance(subtract); } BigDecimal laveBusinessMoney1 = new BigDecimal(tDriver.getLaveBusinessMoney()).subtract(bigDecimal1); int comparisonResult1 = laveBusinessMoney1.compareTo(BigDecimal.ZERO); if (comparisonResult1>0){ tDriver.setLaveBusinessMoney(laveBusinessMoney1.doubleValue()); } break; } driverService.updateById(tDriver); tPubTransactionDetails.setDriverBalance(tDriver.getLaveBusinessMoney()); pubTransactionDetailsService.insert(tPubTransactionDetails); return SUCCESS_TIP; } /** * 余额明细列表 */ @RequestMapping(value = "/listBalance") @ResponseBody public Object list(Integer id,String insertTime ,Integer handleType) { String beginTime = null; String endTime = null; if (SinataUtil.isNotEmpty(insertTime)){ String[] timeArray = insertTime.split(" - "); beginTime = timeArray[0]; endTime = timeArray[1]; } List tOrderPrivateCars = orderPrivateCarService.selectList( new EntityWrapper().eq("driverId",id) ); List> res = new ArrayList<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 跑单收入 if (handleType == null || handleType == 1){ Wrapper eq = new EntityWrapper() .eq("objectId", id) .eq("type", 2) .eq("userType", 2); if (beginTime!=null){ eq.ge("insertTime", beginTime); eq.le("insertTime", endTime); } List incomes = tIncomeService.selectList(eq); for (Income income : incomes) { Map temp = new HashMap<>(); String times = simpleDateFormat.format(income.getInsertTime()); if (income.getIncomeId()!=null){ TOrderPrivateCar tOrderPrivateCar = tOrderPrivateCars.stream().filter(e -> e.getId() .equals(income.getIncomeId())).findFirst().orElse(null); temp.put("orderNumber",tOrderPrivateCar==null?null:tOrderPrivateCar.getOrderNum()); temp.put("remark",tOrderPrivateCar.getRemark()); } temp.put("times",times); temp.put("handleType","车费收入"); temp.put("amount",income.getMoney()); temp.put("withType","订单号"); // todo 新增收入明细时 需要存储当前账户余额 temp.put("balance",income.getDriverBalance()); res.add(temp); } } // 司机专车订单ids List orderIds = orderPrivateCarService.selectList(new EntityWrapper() .eq("driverId", id)).stream() .map(TOrderPrivateCar::getId).collect(Collectors.toList()); if (orderIds.isEmpty()){ orderIds.add(-1); } // 车费平台手续费扣除 if (handleType == null || handleType == 2){ Wrapper eq = new EntityWrapper() .eq("type", 2) .in("incomeId",orderIds) .eq("userType", 1); if (beginTime!=null){ eq.ge("insertTime", beginTime); eq.le("insertTime", endTime); } List incomes = tIncomeService.selectList(eq); for (Income income : incomes) { Map temp = new HashMap<>(); String times = simpleDateFormat.format(income.getInsertTime()); if (income.getIncomeId()!=null){ TOrderPrivateCar tOrderPrivateCar = tOrderPrivateCars.stream().filter(e -> e.getId() .equals(income.getIncomeId())).findFirst().orElse(null); temp.put("orderNumber",tOrderPrivateCar==null?null:tOrderPrivateCar.getOrderNum()); temp.put("remark",tOrderPrivateCar==null?"":tOrderPrivateCar.getRemark()); } temp.put("times",times); temp.put("handleType","车费平台手续费扣除"); temp.put("amount",income.getMoney()); temp.put("withType","订单号"); // todo 新增收入明细时 需要存储当前账户余额 temp.put("balance",income.getDriverBalance()); res.add(temp); } } // 充值 if (handleType == null || handleType == 3){ Wrapper eq = new EntityWrapper() .eq("userId", id) .eq("orderType", 5) .eq("userType", 2); if (beginTime!=null){ eq.ge("insertTime", beginTime); eq.le("insertTime", endTime); } List pubTransactionDetails = pubTransactionDetailsService.selectList(eq); for (TPubTransactionDetails details : pubTransactionDetails) { Map temp = new HashMap<>(); String times = simpleDateFormat.format(details.getInsertTime()); temp.put("orderNumber",""); temp.put("remark",""); temp.put("times",times); temp.put("handleType","充值"); temp.put("amount",details.getMoney()); temp.put("withType","交易流水号"); // todo 新增收入明细时 需要存储当前账户余额 temp.put("balance",details.getDriverBalance()); res.add(temp); } } // 提现 if (handleType == null || handleType == 4){ Wrapper eq = new EntityWrapper() .eq("userId", id) .eq("state", 2) .eq("userType", 2); if (beginTime!=null){ eq.ge("insertTime", beginTime); eq.le("insertTime", endTime); } List pubTransactionDetails = pubWithdrawalService.selectList(eq); for (TPubWithdrawal details : pubTransactionDetails) { Map temp = new HashMap<>(); String times = simpleDateFormat.format(details.getInsertTime()); temp.put("orderNumber",details.getOrderNumber()); temp.put("remark",details.getRemark()); temp.put("times",times); temp.put("handleType","提现"); temp.put("amount",details.getMoney()); temp.put("withType","交易流水号"); // todo 新增收入明细时 需要存储当前账户余额 temp.put("balance",details.getDriverBalance()); res.add(temp); } } // 平台充值 if (handleType == null || handleType == 5){ Wrapper eq = new EntityWrapper() .eq("userId", id) .eq("orderType", 6) .eq("userType", 2); if (beginTime!=null){ eq.ge("insertTime", beginTime); eq.le("insertTime", endTime); } List pubTransactionDetails = pubTransactionDetailsService.selectList(eq); for (TPubTransactionDetails details : pubTransactionDetails) { Map temp = new HashMap<>(); String times = simpleDateFormat.format(details.getInsertTime()); temp.put("orderNumber",""); temp.put("remark",""); temp.put("times",times); temp.put("handleType","平台充值"); temp.put("amount",details.getMoney()); temp.put("withType","无"); // todo 新增收入明细时 需要存储当前账户余额 temp.put("balance",details.getDriverBalance()); res.add(temp); } } // 平台扣除 if (handleType == null || handleType == 6){ Wrapper eq = new EntityWrapper() .eq("userId", id) .eq("orderType", 7) .eq("userType", 2); if (beginTime!=null){ eq.ge("insertTime", beginTime); eq.le("insertTime", endTime); } List pubTransactionDetails = pubTransactionDetailsService.selectList(eq); for (TPubTransactionDetails details : pubTransactionDetails) { Map temp = new HashMap<>(); String times = simpleDateFormat.format(details.getInsertTime()); temp.put("orderNumber",""); temp.put("remark",""); temp.put("times",times); temp.put("handleType","平台扣除"); temp.put("amount",details.getMoney()); temp.put("withType","无"); // todo 新增收入明细时 需要存储当前账户余额 temp.put("balance",details.getDriverBalance()); res.add(temp); } } // 取消订单收入 if (handleType == null || handleType == 7){ Wrapper eq = new EntityWrapper() .eq("objectId", id) .eq("type", 3) .eq("userType", 2); if (beginTime!=null){ eq.ge("insertTime", beginTime); eq.le("insertTime", endTime); } List incomes = tIncomeService.selectList(eq); for (Income income : incomes) { Map temp = new HashMap<>(); String times = simpleDateFormat.format(income.getInsertTime()); if (income.getIncomeId()!=null){ TOrderPrivateCar tOrderPrivateCar = tOrderPrivateCars.stream().filter(e -> e.getId() .equals(income.getIncomeId())).findFirst().orElse(null); temp.put("orderNumber",tOrderPrivateCar==null?null:tOrderPrivateCar.getOrderNum()); temp.put("remark",tOrderPrivateCar.getRemark()); } temp.put("times",times); temp.put("handleType","取消订单收入"); temp.put("amount",income.getMoney()); temp.put("withType","订单号"); // todo 新增收入明细时 需要存储当前账户余额 temp.put("balance",income.getDriverBalance()); res.add(temp); } } res.sort((o1, o2) -> { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date1 = format.parse((String) o1.get("times")); Date date2 = format.parse((String) o2.get("times")); return date2.compareTo(date1); // 降序 } catch (Exception e) { e.printStackTrace(); return 0; } }); return res; } @RequestMapping("/getExcel") @ResponseBody public void getExcel( Integer id, HttpServletRequest request, HttpServletResponse response) { String beginTime = null; String endTime = null; List> list = tIncomeService.getExcelList(id); // 表格数据【封装】 List> dataList = new ArrayList<>(); // 表头行 List shellList = new ArrayList(); shellList.add("日期"); shellList.add("活动收入"); shellList.add("业务收入"); dataList.add(shellList); for (Map map : list) { //数据行 shellList = new ArrayList(); //下单时间 if(SinataUtil.isNotEmpty(map.get("times"))){ shellList.add(String.valueOf(map.get("times"))); }else{ shellList.add("-"); } //订单编号 if(SinataUtil.isNotEmpty(map.get("activityMoney"))){ shellList.add(map.get("activityMoney").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(map.get("orderMoney"))){ shellList.add(map.get("orderMoney").toString()); }else{ shellList.add("-"); } dataList.add(shellList); } try { // 调用工具类进行导出 ExcelExportUtil.easySheet("收入明细数据"+ DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "收入明细数据", dataList,request, response); } catch (Exception e) { e.printStackTrace(); } } }