From 3af951146aabb69d7857daf11a4bdef21c7ef77e Mon Sep 17 00:00:00 2001 From: value <z1292839451@163.com> Date: 星期三, 22 五月 2024 09:54:29 +0800 Subject: [PATCH] 功能调整 --- data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java | 406 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 394 insertions(+), 12 deletions(-) diff --git a/data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java b/data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java index 74b4779..d45ce6e 100644 --- a/data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java +++ b/data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java @@ -1,12 +1,19 @@ 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.common.GetLook; -import com.yuanchu.mom.dto.DataReportingPageDto; -import com.yuanchu.mom.dto.ProductCountDto; -import com.yuanchu.mom.dto.RegistrantCountDto; +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; @@ -17,9 +24,22 @@ 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.util.Map; +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 @@ -32,6 +52,8 @@ private FansSubmitService fansSubmitService; private FinanceSubmitService financeSubmitService; + + private FansSubmitMapper fansSubmitMapper; @ApiOperation(value = "鑾峰彇鏁版嵁涓婃姤鍒楄〃") @PostMapping("/selectDataReportingList") @@ -47,6 +69,12 @@ 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<String, Object> data) { @@ -55,7 +83,7 @@ return Result.success(dataReportingService.selectProductCountDtoPageList(page, productCountDto)); } - @ApiOperation(value = "鑾峰彇鐧昏浜烘眹鎬诲垪琛�") + @ApiOperation(value = "鑾峰彇鍛樺伐鏁版嵁缁熻鍒楄〃") @PostMapping("/selectRegistrantCountDtoPageList") public Result selectRegistrantCountDtoPageList(@RequestBody Map<String, Object> data) { Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); @@ -68,12 +96,22 @@ public Result selectFansSubmitList(@RequestBody Map<String, Object> 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){ + public Result delFansSubmit(Integer id) { return Result.success(fansSubmitService.delFansSubmit(id)); } @@ -86,7 +124,7 @@ @ApiOperation(value = "娣诲姞杩涚矇涓婃姤淇℃伅") @PostMapping("/addFansSubmit") public Result<?> addFansSubmit(@RequestBody FansSubmit fansSubmit) { - return Result.success(fansSubmitService.addFansSubmit(fansSubmit)); + return Result.success(fansSubmitService.addFansSubmit(fansSubmit, null)); } @ApiOperation(value = "鑾峰彇璐㈠姟涓婃姤鍒楄〃") @@ -94,12 +132,15 @@ public Result selectFinanceSubmitList(@RequestBody Map<String, Object> 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){ + public Result delFinanceSubmit(Integer id) { return Result.success(financeSubmitService.delFinanceSubmit(id)); } @@ -111,15 +152,356 @@ @ApiOperation(value = "娣诲姞璐㈠姟涓婃姤淇℃伅") @PostMapping("/addFinanceSubmit") - public Result<?> addFinanceSubmit(@RequestBody FinanceSubmit financeSubmit) { - return Result.success(financeSubmitService.addFinanceSubmit(financeSubmit)); + public Result<?> addFinanceSubmit(@RequestBody FinanceSubmit financeSubmit, String date) { + return Result.success(financeSubmitService.addFinanceSubmit(financeSubmit, date, financeSubmit.getParam())); } + @ValueAuth @ApiOperation(value = "鑾峰彇棣栭〉鏁版嵁") @GetMapping("/getDataList") - @ValueAuth 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<CsvRow> rows = data.getRows(); + List<DataReporting> 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<DataReporting> list = new ArrayList<>(); + list.add(dataReporting); + dataReportingService.addDataReporting(list, null, dataReporting.getVxCard()); + return Result.success(); + } + + @ApiOperation(value = "瀵煎嚭鏁版嵁涓婃姤鍒楄〃") + @PostMapping("/downDataReportingFile") + public Result downDataReportingFile(@RequestBody Map<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> 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<FansSubmit> fansSubmitLists = new ArrayList<>(); + List<FansSubmit> fansSubmitList = new ArrayList<>(); + List<String> dates = new ArrayList<>(); + AtomicReference<String> 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.<FansSubmit>lambdaUpdate().in(FansSubmit::getCreateTime, dates)); + fansSubmitService.saveBatch(fansSubmitLists); + /*CsvReader reader = CsvUtil.getReader(); + CsvData data = reader.read(new InputStreamReader(file.getInputStream(), "GB2312")); + List<CsvRow> 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<String, Object> data) { + Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class); + DataComparisonDto dataComparisonDto = JSON.parseObject(JSON.toJSONString(data.get("entity")), DataComparisonDto.class); + Map<String, Object> stringObjectMap = dataReportingService.selectDataComparisonDtoPageList(page, dataComparisonDto); + return Result.success(stringObjectMap); + } + + @ApiOperation(value = "瀵煎嚭璐㈠姟涓婃姤鍒楄〃") + @PostMapping("/downFinanceSubmitFile") + public Result downFinanceSubmitFile(@RequestBody Map<String, Object> 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<CsvRow> 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 "浠g悊鍟�": + financeSubmit.setCompany(str); + break; + case "璐︽埛鍚�": + financeSubmit.setName(str); + break; + case "閲戦": + try { + financeSubmit.setConsumption(new BigDecimal(str)); + } catch (Exception e) { + } + break; + case "浠g悊杩旂偣": + 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<DataReporting> 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(); + } + } -- Gitblit v1.9.3