value
2024-05-22 3af951146aabb69d7857daf11a4bdef21c7ef77e
data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java
@@ -1,18 +1,19 @@
package com.yuanchu.mom.controller;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.resource.ResourceUtil;
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.core.util.StrUtil;
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;
@@ -23,19 +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 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.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@RequestMapping("/dataReporting")
@RestController
@@ -48,6 +52,8 @@
    private FansSubmitService fansSubmitService;
    private FinanceSubmitService financeSubmitService;
    private FansSubmitMapper fansSubmitMapper;
    @ApiOperation(value = "获取数据上报列表")
    @PostMapping("/selectDataReportingList")
@@ -77,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);
@@ -90,10 +96,17 @@
    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())){
        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 = "删除进粉上报列表")
@@ -119,7 +132,7 @@
    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())){
        if (ObjectUtil.isNotEmpty(financeSubmit.getCreateTime())) {
            financeSubmit.setCreateTime(financeSubmit.getCreateTime().plusDays(1));
        }
        return Result.success(financeSubmitService.selectFinanceSubmitList(page, financeSubmit));
@@ -211,9 +224,8 @@
                        break;
                }
            }
            list.add(reporting);
            if (reporting.getAccountConsumption().compareTo(BigDecimal.ZERO) > 0) list.add(reporting);
        }
        deleteAllData(format);
        dataReportingService.addDataReporting(list, format, param);
        return Result.success();
    }
@@ -223,7 +235,7 @@
    public Result<?> addDataReporting(@RequestBody DataReporting dataReporting) {
        ArrayList<DataReporting> list = new ArrayList<>();
        list.add(dataReporting);
        dataReportingService.addDataReporting(list, null,dataReporting.getVxCard());
        dataReportingService.addDataReporting(list, null, dataReporting.getVxCard());
        return Result.success();
    }
@@ -261,8 +273,43 @@
    @ApiOperation(value = "导入进粉上报列表")
    @PostMapping("/inputFansSubmitCsv")
    @Transactional(rollbackFor = Exception.class)
    public Result<?> inputFansSubmitCsv(@RequestParam("file") MultipartFile file) throws IOException {
        CsvReader reader = CsvUtil.getReader();
        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;
@@ -271,7 +318,6 @@
        } 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++) {
@@ -288,13 +334,41 @@
                        fansSubmit.setVx(str);
                        break;
                    case "进粉":
                        fansSubmit.setFansAdd(Integer.parseInt(str));
                        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 = "获取数据对比列表")
@@ -326,7 +400,6 @@
        } 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++) {
@@ -390,6 +463,13 @@
        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
@@ -399,7 +479,7 @@
    @ApiOperation(value = "批量修改微信号")
    @PostMapping("/updateVxCards")
    public Result updateVxCards(String str){
    public Result updateVxCards(String str) {
        List<DataReporting> list = JSON.parseArray(str, DataReporting.class);
        return Result.success(dataReportingService.updateVxCards(list));
    }
@@ -417,4 +497,11 @@
        financeSubmitService.deleteAllFinance(date);
        return Result.success();
    }
    @ApiOperation(value = "数据上报主管权限")
    @GetMapping("/dataReportingPower")
    public Result dataReportingPower() {
        return Result.success();
    }
}