package com.yuanchu.mom.controller; import cn.hutool.core.lang.Console; import cn.hutool.core.text.csv.CsvData; import cn.hutool.core.text.csv.CsvReader; import cn.hutool.core.text.csv.CsvRow; import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.poi.excel.ExcelUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yuanchu.mom.annotation.ValueAuth; import com.yuanchu.mom.dto.*; import com.yuanchu.mom.exception.ErrorException; import com.yuanchu.mom.mapper.FansSubmitMapper; import com.yuanchu.mom.pojo.DataReporting; import com.yuanchu.mom.pojo.FansSubmit; import com.yuanchu.mom.pojo.FinanceSubmit; import com.yuanchu.mom.service.DataReportingService; import com.yuanchu.mom.service.FansSubmitService; import com.yuanchu.mom.service.FinanceSubmitService; import com.yuanchu.mom.vo.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @RequestMapping("/dataReporting") @RestController @Api(tags = "数据上报模块") @AllArgsConstructor public class DataReportingController { private DataReportingService dataReportingService; private FansSubmitService fansSubmitService; private FinanceSubmitService financeSubmitService; private FansSubmitMapper fansSubmitMapper; @ApiOperation(value = "获取数据上报列表") @PostMapping("/selectDataReportingList") public Result selectDataReportingList(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); DataReportingPageDto dataReportingPageDto = JSON.parseObject(JSON.toJSONString(data.get("entity")), DataReportingPageDto.class); return Result.success(dataReportingService.selectDataReportingList(page, dataReportingPageDto)); } @ApiOperation(value = "修改数据上报") @PostMapping("/upDataReporting") public Result upDataReporting(@RequestBody DataReporting dataReporting) { return Result.success(dataReportingService.updateDataReporting(dataReporting)); } @ApiOperation(value = "删除数据上报信息") @PostMapping("/delDataReporting") public Result delDataReporting(Integer id) { return Result.success(dataReportingService.delDataReporting(id)); } @ApiOperation(value = "获取项目汇总列表") @PostMapping("/selectProductCountDtoPageList") public Result selectProductCountDtoPageList(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); ProductCountDto productCountDto = JSON.parseObject(JSON.toJSONString(data.get("entity")), ProductCountDto.class); return Result.success(dataReportingService.selectProductCountDtoPageList(page, productCountDto)); } @ApiOperation(value = "获取员工数据统计列表") @PostMapping("/selectRegistrantCountDtoPageList") public Result selectRegistrantCountDtoPageList(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); RegistrantCountDto registrantCountDto = JSON.parseObject(JSON.toJSONString(data.get("entity")), RegistrantCountDto.class); return Result.success(dataReportingService.selectRegistrantCountDtoPageList(page, registrantCountDto)); } @ApiOperation(value = "获取进粉上报列表") @PostMapping("/selectFansSubmitList") public Result selectFansSubmitList(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); FansSubmit fansSubmit = JSON.parseObject(JSON.toJSONString(data.get("entity")), FansSubmit.class); if (ObjectUtil.isNotEmpty(fansSubmit.getCreateTime())) { fansSubmit.setCreateTime(fansSubmit.getCreateTime().plusDays(1)); } return Result.success(fansSubmitService.selectFansSubmitList(page, fansSubmit)); } @ApiOperation(value = "获取进粉上报总数") @PostMapping("/countFansSubmitList") @ValueAuth public Result countFansSubmitList(@RequestBody FansSubmit fansSubmit) { return Result.success(fansSubmitService.countFansSubmitList(fansSubmit)); } @ApiOperation(value = "删除进粉上报列表") @PostMapping("/delFansSubmit") public Result delFansSubmit(Integer id) { return Result.success(fansSubmitService.delFansSubmit(id)); } @ApiOperation(value = "修改进粉上报信息") @PostMapping("/updateFansSubmit") public Result updateFansSubmit(@RequestBody FansSubmit fansSubmit) { return Result.success(fansSubmitService.updateFansSubmit(fansSubmit)); } @ApiOperation(value = "添加进粉上报信息") @PostMapping("/addFansSubmit") public Result addFansSubmit(@RequestBody FansSubmit fansSubmit) { return Result.success(fansSubmitService.addFansSubmit(fansSubmit, null)); } @ApiOperation(value = "获取财务上报列表") @PostMapping("/selectFinanceSubmitList") public Result selectFinanceSubmitList(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); FinanceSubmit financeSubmit = JSON.parseObject(JSON.toJSONString(data.get("entity")), FinanceSubmit.class); if (ObjectUtil.isNotEmpty(financeSubmit.getCreateTime())) { financeSubmit.setCreateTime(financeSubmit.getCreateTime().plusDays(1)); } return Result.success(financeSubmitService.selectFinanceSubmitList(page, financeSubmit)); } @ApiOperation(value = "删除财务上报列表") @PostMapping("/delFinanceSubmit") public Result delFinanceSubmit(Integer id) { return Result.success(financeSubmitService.delFinanceSubmit(id)); } @ApiOperation(value = "修改财务上报信息") @PostMapping("/updateFinanceSubmit") public Result updateFinanceSubmit(@RequestBody FinanceSubmit financeSubmit) { return Result.success(financeSubmitService.updateFinanceSubmit(financeSubmit)); } @ApiOperation(value = "添加财务上报信息") @PostMapping("/addFinanceSubmit") public Result addFinanceSubmit(@RequestBody FinanceSubmit financeSubmit, String date) { return Result.success(financeSubmitService.addFinanceSubmit(financeSubmit, date, financeSubmit.getParam())); } @ValueAuth @ApiOperation(value = "获取首页数据") @GetMapping("/getDataList") public Result getDataList() { return Result.success(dataReportingService.getDataList()); } @ApiOperation(value = "导入数据上报列表") @PostMapping("/inputCsv") public Result inputCsv(@RequestParam("file") MultipartFile file, String param) throws IOException { CsvReader reader = CsvUtil.getReader(); CsvData data = reader.read(new InputStreamReader(file.getInputStream(), "GB2312")); List rows = data.getRows(); List list = new ArrayList<>(); String format; try { format = new SimpleDateFormat("yyyy-MM-dd").format(new SimpleDateFormat("yyyyMMdd").parse(rows.get(2).get(0).split(":")[1])); } catch (ParseException e) { e.printStackTrace(); throw new ErrorException("文件中日期在转换时出现错误"); } int fieldIndex = 5; for (int i = 0; i < rows.size(); i++) { if (JSON.toJSONString(rows.get(i)).contains("账户ID")) { fieldIndex = i; break; } } for (int i = fieldIndex + 1; i < rows.size(); i++) { DataReporting reporting = new DataReporting(); for (int i1 = 0; i1 < rows.get(fieldIndex).size(); i1++) { String str = rows.get(i).get(i1); if (str == null) continue; switch (rows.get(fieldIndex).get(i1)) { case "账户": reporting.setName(str); break; case "备注": String[] split = str.split("-"); if (split.length > 3) { reporting.setName2(split[0]); reporting.setChannel(split[2]); reporting.setAgent(split[3]); reporting.setProduct(split[1]); break; } reporting.setProduct(str); break; case "展现量": try { reporting.setShowNum(Integer.parseInt(str)); } catch (Exception e) { } break; case "点击量": try { reporting.setClick(Integer.parseInt(str)); } catch (Exception e) { } break; case "消费": try { reporting.setAccountConsumption(new BigDecimal(str)); } catch (Exception e) { } break; } } if (reporting.getAccountConsumption().compareTo(BigDecimal.ZERO) > 0) list.add(reporting); } dataReportingService.addDataReporting(list, format, param); return Result.success(); } @ApiOperation(value = "新增数据上报") @PostMapping("/addDataReporting") public Result addDataReporting(@RequestBody DataReporting dataReporting) { ArrayList list = new ArrayList<>(); list.add(dataReporting); dataReportingService.addDataReporting(list, null, dataReporting.getVxCard()); return Result.success(); } @ApiOperation(value = "导出数据上报列表") @PostMapping("/downDataReportingFile") public Result downDataReportingFile(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); DataReportingPageDto dataReportingPageDto = JSON.parseObject(JSON.toJSONString(data.get("entity")), DataReportingPageDto.class); return Result.success("导出成功", dataReportingService.downDataReportingFile(page, dataReportingPageDto)); } @ApiOperation(value = "导出项目数据统计列表") @PostMapping("/downProductCountFile") public Result downProductCountFile(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); ProductCountDto productCountDto = JSON.parseObject(JSON.toJSONString(data.get("entity")), ProductCountDto.class); return Result.success("导出成功", dataReportingService.downProductCountFile(page, productCountDto)); } @ApiOperation(value = "导出员工数据统计列表") @PostMapping("/downRegistrantCountFile") public Result downRegistrantCountFile(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); RegistrantCountDto registrantCountDto = JSON.parseObject(JSON.toJSONString(data.get("entity")), RegistrantCountDto.class); return Result.success("导出成功", dataReportingService.downRegistrantCountFile(page, registrantCountDto)); } @ApiOperation(value = "导出进粉上报列表") @PostMapping("/downFansSubmitFile") public Result downFansSubmitFile(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); FansSubmit fansSubmit = JSON.parseObject(JSON.toJSONString(data.get("entity")), FansSubmit.class); return Result.success("导出成功", dataReportingService.downFansSubmitFile(page, fansSubmit)); } @ApiOperation(value = "导入进粉上报列表") @PostMapping("/inputFansSubmitCsv") @Transactional(rollbackFor = Exception.class) public Result inputFansSubmitCsv(@RequestParam("file") MultipartFile file) throws IOException { List fansSubmitLists = new ArrayList<>(); List fansSubmitList = new ArrayList<>(); List dates = new ArrayList<>(); AtomicReference product = new AtomicReference<>(); ExcelUtil.readBySax(file.getInputStream(), 0, (i, l, list) -> { LocalDateTime date = null; try { date = LocalDateTime.parse((list.get(0) + "").replace(" ", "T")).plusDays(1); dates.add(date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))+" 00:00:00"); } catch (Exception e) { if(!(l == 0 || l == 1 || l == 2)){ return; } } if (l == 0 || l == 1 || l == 2 || date.compareTo(LocalDateTime.now()) < 1) { for (int i1 = 1; i1 < list.size(); i1++) { try { FansSubmit fansSubmit = fansSubmitList.get(i1 - 1); fansSubmit.setId(null); product.set(getFansSubmit(l, list.get(i1), date, fansSubmit, product.get())); } catch (IndexOutOfBoundsException e) { FansSubmit fansSubmit = new FansSubmit(); product.set(getFansSubmit(l, list.get(i1), date, fansSubmit, product.get())); fansSubmitList.add(fansSubmit); } } if(l>2){ fansSubmitLists.addAll(JSON.parseArray(JSON.toJSONString(fansSubmitList.stream().filter(a -> !Objects.equals(a.getCustom(), "合计")).collect(Collectors.toList())), FansSubmit.class)); } } }); fansSubmitMapper.delete(Wrappers.lambdaUpdate().in(FansSubmit::getCreateTime, dates)); fansSubmitService.saveBatch(fansSubmitLists); /*CsvReader reader = CsvUtil.getReader(); CsvData data = reader.read(new InputStreamReader(file.getInputStream(), "GB2312")); List rows = data.getRows(); String format; try { format = new SimpleDateFormat("yyyy-MM-dd").format(new SimpleDateFormat("yyyyMMdd").parse(rows.get(2).get(0).split(":")[1])); } catch (ParseException e) { throw new ErrorException("文件中日期在转换时出现错误"); } for (int i = 6; i < rows.size(); i++) { FansSubmit fansSubmit = new FansSubmit(); for (int i1 = 0; i1 < rows.get(5).size(); i1++) { String str = rows.get(i).get(i1); if (str == null) continue; switch (rows.get(5).get(i1)) { case "客户": fansSubmit.setCustom(str); break; case "项目": fansSubmit.setProduct(str); break; case "微信号": fansSubmit.setVx(str); break; case "进粉": try { fansSubmit.setFansAdd(Integer.parseInt(str)); }catch (Exception e){ fansSubmit.setFansAdd(0); } break; } } fansSubmitService.addFansSubmit(fansSubmit, format); }*/ return Result.success(); } public String getFansSubmit(long l, Object thing, LocalDateTime date, FansSubmit fansSubmit, String product) { String str = (thing == null ? null : thing + ""); if(l==0){ if (str != null) product = str; fansSubmit.setProduct(product); }else if(l==1){ Pattern pattern = Pattern.compile("[\u4E00-\u9FA5]"); Matcher matcher = pattern.matcher(str == null ? "" : str); if (matcher.find()) { fansSubmit.setCustom(str); } else { fansSubmit.setVx(str); } }else if(l==2){ if (fansSubmit.getVx() == null) { fansSubmit.setVx(str); } }else{ fansSubmit.setCreateTime(date); fansSubmit.setFansAdd((str == null || str.equals("")) ? 0 : Integer.parseInt(str)); } return product; } @ApiOperation(value = "获取数据对比列表") @PostMapping("/selectDataComparisonDtoPageList") public Result selectDataComparisonDtoPageList(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); DataComparisonDto dataComparisonDto = JSON.parseObject(JSON.toJSONString(data.get("entity")), DataComparisonDto.class); Map stringObjectMap = dataReportingService.selectDataComparisonDtoPageList(page, dataComparisonDto); return Result.success(stringObjectMap); } @ApiOperation(value = "导出财务上报列表") @PostMapping("/downFinanceSubmitFile") public Result downFinanceSubmitFile(@RequestBody Map data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); FinanceSubmit financeSubmit = JSON.parseObject(JSON.toJSONString(data.get("entity")), FinanceSubmit.class); return Result.success("导出成功", dataReportingService.downFinanceSubmitFile(page, financeSubmit)); } @ApiOperation(value = "导入财务上报列表") @PostMapping("/inputFinanceSubmitCsv") public Result inputFinanceSubmitCsv(@RequestParam("file") MultipartFile file, String param) throws IOException { CsvReader reader = CsvUtil.getReader(); CsvData data = reader.read(new InputStreamReader(file.getInputStream(), "GB2312")); List rows = data.getRows(); String format; try { format = new SimpleDateFormat("yyyy-MM-dd").format(new SimpleDateFormat("yyyyMMdd").parse(rows.get(2).get(0).split(":")[1])); } catch (ParseException e) { throw new ErrorException("文件中日期在转换时出现错误"); } for (int i = 6; i < rows.size(); i++) { FinanceSubmit financeSubmit = new FinanceSubmit(); for (int i1 = 0; i1 < rows.get(5).size(); i1++) { String str = rows.get(i).get(i1); if (str == null) continue; switch (rows.get(5).get(i1)) { case "代理商": financeSubmit.setCompany(str); break; case "账户名": financeSubmit.setName(str); break; case "金额": try { financeSubmit.setConsumption(new BigDecimal(str)); } catch (Exception e) { } break; case "代理返点": try { financeSubmit.setAgentRebate(new BigDecimal(str)); } catch (Exception e) { } break; case "打款人民币": try { financeSubmit.setMoney(new BigDecimal(str)); } catch (Exception e) { } break; case "员工返点": try { financeSubmit.setEmployeeRebate(new BigDecimal(str)); } catch (Exception e) { } break; case "员工返点人民币": try { financeSubmit.setEmployeeRebateMoney(new BigDecimal(str)); } catch (Exception e) { } break; } } financeSubmitService.addFinanceSubmit(financeSubmit, format, param); } return Result.success(); } @ApiOperation(value = "一键删除所有数据上报的数据") @PostMapping("/deleteAllData") public Result deleteAllData(String date) { dataReportingService.deleteAllData(date); return Result.success(); } @ApiOperation(value = "获取数据上报的登记人筛选项") @PostMapping("/selectDataReportingForCreateUserNames") @ValueAuth public Result selectDataReportingForCreateUserNames(String time) { return Result.success(dataReportingService.selectDataReportingForCreateUserNames(time)); } @ApiOperation(value = "获取项目数据统计的项目筛选项") @PostMapping("/selectDataReportingForProduct") @ValueAuth public Result selectDataReportingForProduct(String time) { return Result.success(dataReportingService.selectDataReportingForProduct(time)); } @ApiOperation(value = "获取微信号列表") @GetMapping("/selectVxs") @ValueAuth public Result selectVxs(String time) { return Result.success(fansSubmitService.vxs(time)); } @ApiOperation(value = "批量修改微信号") @PostMapping("/updateVxCards") public Result updateVxCards(String str) { List list = JSON.parseArray(str, DataReporting.class); return Result.success(dataReportingService.updateVxCards(list)); } @ApiOperation(value = "一键删除所有进粉上报的数据") @PostMapping("/deleteAllFans") public Result deleteAllFans(String date) { fansSubmitService.deleteAllFans(date); return Result.success(); } @ApiOperation(value = "一键删除所有财务上报的数据") @PostMapping("/deleteAllFinance") public Result deleteAllFinance(String date) { financeSubmitService.deleteAllFinance(date); return Result.success(); } @ApiOperation(value = "数据上报主管权限") @GetMapping("/dataReportingPower") public Result dataReportingPower() { return Result.success(); } }