package com.yuanchu.mom.controller; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; 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 com.alibaba.fastjson.JSON; 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.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.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.validation.constraints.NotBlank; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @RequestMapping("/dataReporting") @RestController @Api(tags = "数据上报模块") @AllArgsConstructor public class DataReportingController { private DataReportingService dataReportingService; private FansSubmitService fansSubmitService; private FinanceSubmitService financeSubmitService; @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); return Result.success(fansSubmitService.selectFansSubmitList(page, 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); 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; } } list.add(reporting); } deleteAllData(format); 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") public Result inputFansSubmitCsv(@RequestParam("file") MultipartFile file) 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("文件中日期在转换时出现错误"); } deleteAllFans(LocalDate.parse(format).plusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); 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 "进粉": fansSubmit.setFansAdd(Integer.parseInt(str)); break; } } fansSubmitService.addFansSubmit(fansSubmit, format); } return Result.success(); } @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("文件中日期在转换时出现错误"); } deleteAllFinance(LocalDate.parse(format).plusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); 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 = "获取微信号列表") @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(); } }