Bladeren bron

Merge remote-tracking branch 'origin/master'

syh 4 jaren geleden
bovenliggende
commit
140c614f5f
51 gewijzigde bestanden met toevoegingen van 3267 en 77 verwijderingen
  1. 7 0
      jeecg-boot-module-system/pom.xml
  2. 48 0
      module-alarm/pom.xml
  3. 256 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/controller/AlarmEventMetricController.java
  4. 253 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/controller/AlarmEventRuleController.java
  5. 256 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/controller/AlarmEventSendController.java
  6. 269 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/controller/AlarmMetricValueController.java
  7. 89 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmEventMetric.java
  8. 101 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmEventRule.java
  9. 77 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmEventSend.java
  10. 83 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmMetricValue.java
  11. 18 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/AlarmEventMetricMapper.java
  12. 15 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/AlarmEventRuleMapper.java
  13. 17 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/AlarmEventSendMapper.java
  14. 17 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/AlarmMetricValueMapper.java
  15. 10 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/xml/AlarmEventMetricMapper.xml
  16. 5 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/xml/AlarmEventRuleMapper.xml
  17. 5 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/xml/AlarmEventSendMapper.xml
  18. 5 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/xml/AlarmMetricValueMapper.xml
  19. 14 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/IAlarmEventMetricService.java
  20. 20 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/IAlarmEventRuleService.java
  21. 14 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/IAlarmEventSendService.java
  22. 16 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/IAlarmMetricValueService.java
  23. 19 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/AlarmEventMetricServiceImpl.java
  24. 143 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/AlarmEventRuleServiceImpl.java
  25. 19 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/AlarmEventSendServiceImpl.java
  26. 59 0
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/AlarmMetricValueServiceImpl.java
  27. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ProjectMapper.java
  28. 8 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ProjectMapper.xml
  29. 3 1
      module-common/src/main/java/cn/com/ctop/common/module/service/IProjectService.java
  30. 12 4
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ProjectServiceImpl.java
  31. 159 2
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/taobao/service/impl/TaobaoJhsbybtServiceImpl.java
  32. 54 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/Enums/CampaignTypeEnum.java
  33. 15 8
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/BatchController.java
  34. 276 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/CrossAccountBatchController.java
  35. 1 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/entity/KuaiShouCampaign.java
  36. 6 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IBatchService.java
  37. 6 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaishouInterfaceService.java
  38. 126 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/BatchServiceImpl.java
  39. 1 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouDailyReportTaskServiceImpl.java
  40. 2 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouHistoryReportTaskServiceImpl.java
  41. 198 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java
  42. 256 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/controller/KuaishouCostGroupController.java
  43. 98 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouCostGroup.java
  44. 22 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouCostGroupMapper.java
  45. 84 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouCostGroupMapper.xml
  46. 17 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouCostGroupService.java
  47. 42 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouCostGroupServiceImpl.java
  48. 0 3
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatCheckinDataServiceImpl.java
  49. 1 6
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceAccountReportMapper.xml
  50. 42 47
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/BytedanceAccountReportServiceImpl.java
  51. 1 1
      pom.xml

+ 7 - 0
jeecg-boot-module-system/pom.xml

@@ -113,6 +113,13 @@
         </dependency>
 
         <dependency>
+            <groupId>cn.com.ctop</groupId>
+            <artifactId>module-alarm</artifactId>
+            <version>2.0.2</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
             <groupId>com.aliyun.oss</groupId>
             <artifactId>aliyun-sdk-oss</artifactId>
             <version>3.5.0</version>

+ 48 - 0
module-alarm/pom.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>jeecg-boot-parent</artifactId>
+        <groupId>org.jeecgframework.boot</groupId>
+        <version>2.0.2</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>cn.com.ctop</groupId>
+    <artifactId>module-alarm</artifactId>
+    <version>2.0.2</version>
+    <name>module-alarm</name>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.7</maven.compiler.source>
+        <maven.compiler.target>1.7</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>cn.com.ctop</groupId>
+            <artifactId>module-common</artifactId>
+            <version>2.0.2</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <resources>
+            <!-- 解决MyBatis配置文件引入问题 -->
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.properties</include>
+                    <include>**/*.xml</include>
+                </includes>
+                <!-- 是否替换资源中的属性-->
+                <filtering>false</filtering>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+        </resources>
+    </build>
+
+</project>

+ 256 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/controller/AlarmEventMetricController.java

@@ -0,0 +1,256 @@
+package cn.com.ctop.alarm.modules.controller;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventMetric;
+import cn.com.ctop.alarm.modules.service.IAlarmEventMetricService;
+import cn.com.ctop.common.module.annotation.AutoLog;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 制定详细规则表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Slf4j
+@Api(tags = "制定详细规则表")
+@RestController
+@RequestMapping("/alarm/alarmEventMetric")
+public class AlarmEventMetricController {
+    @Autowired
+    private IAlarmEventMetricService alarmEventMetricService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param alarmEventMetric
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "制定详细规则表-分页列表查询")
+    @ApiOperation(value = "制定详细规则表-分页列表查询", notes = "制定详细规则表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<AlarmEventMetric>> queryPageList(AlarmEventMetric alarmEventMetric,
+                                                         @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                         @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                         HttpServletRequest req) {
+        Result<IPage<AlarmEventMetric>> result = new Result<>();
+        QueryWrapper<AlarmEventMetric> queryWrapper = QueryGenerator.initQueryWrapper(alarmEventMetric, req.getParameterMap());
+        Page<AlarmEventMetric> page = new Page<AlarmEventMetric>(pageNo, pageSize);
+        IPage<AlarmEventMetric> pageList = alarmEventMetricService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param alarmEventMetric
+     * @return
+     */
+    @AutoLog(value = "制定详细规则表-添加")
+    @ApiOperation(value = "制定详细规则表-添加", notes = "制定详细规则表-添加")
+    @PostMapping(value = "/add")
+    public Result<AlarmEventMetric> add(@RequestBody AlarmEventMetric alarmEventMetric) {
+        Result<AlarmEventMetric> result = new Result<>();
+        try {
+            alarmEventMetricService.save(alarmEventMetric);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param alarmEventMetric
+     * @return
+     */
+    @AutoLog(value = "制定详细规则表-编辑")
+    @ApiOperation(value = "制定详细规则表-编辑", notes = "制定详细规则表-编辑")
+    @PutMapping(value = "/edit")
+    public Result<AlarmEventMetric> edit(@RequestBody AlarmEventMetric alarmEventMetric) {
+        Result<AlarmEventMetric> result = new Result<AlarmEventMetric>();
+        AlarmEventMetric alarmEventMetricEntity = alarmEventMetricService.getById(alarmEventMetric.getEventMetricId());
+        if (alarmEventMetricEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = alarmEventMetricService.updateById(alarmEventMetric);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "制定详细规则表-通过id删除")
+    @ApiOperation(value = "制定详细规则表-通过id删除", notes = "制定详细规则表-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            alarmEventMetricService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "制定详细规则表-批量删除")
+    @ApiOperation(value = "制定详细规则表-批量删除", notes = "制定详细规则表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<AlarmEventMetric> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<AlarmEventMetric> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.alarmEventMetricService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "制定详细规则表-通过id查询")
+    @ApiOperation(value = "制定详细规则表-通过id查询", notes = "制定详细规则表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<AlarmEventMetric> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<AlarmEventMetric> result = new Result<>();
+        AlarmEventMetric alarmEventMetric = alarmEventMetricService.getById(id);
+        if (alarmEventMetric == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(alarmEventMetric);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<AlarmEventMetric> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                AlarmEventMetric alarmEventMetric = JSON.parseObject(deString, AlarmEventMetric.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(alarmEventMetric, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<AlarmEventMetric> pageList = alarmEventMetricService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "制定详细规则表列表");
+        mv.addObject(NormalExcelConstants.CLASS, AlarmEventMetric.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("制定详细规则表列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<AlarmEventMetric> listAlarmEventMetrics = ExcelImportUtil.importExcel(file.getInputStream(), AlarmEventMetric.class, params);
+                alarmEventMetricService.saveBatch(listAlarmEventMetrics);
+                return Result.ok("文件导入成功!数据行数:" + listAlarmEventMetrics.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
+}

+ 253 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/controller/AlarmEventRuleController.java

@@ -0,0 +1,253 @@
+package cn.com.ctop.alarm.modules.controller;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventRule;
+import cn.com.ctop.alarm.modules.service.IAlarmEventRuleService;
+import cn.com.ctop.common.module.annotation.AutoLog;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 预警事件规则表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Slf4j
+@Api(tags = "预警事件规则表")
+@RestController
+@RequestMapping("/alarm/alarmEventRule")
+public class AlarmEventRuleController {
+    @Autowired
+    private IAlarmEventRuleService alarmEventRuleService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param alarmEventRule
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "预警事件规则表-分页列表查询")
+    @ApiOperation(value = "预警事件规则表-分页列表查询", notes = "预警事件规则表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<AlarmEventRule>> queryPageList(AlarmEventRule alarmEventRule,
+                                                       @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                       @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                       HttpServletRequest req) {
+        Result<IPage<AlarmEventRule>> result = new Result<>();
+        QueryWrapper<AlarmEventRule> queryWrapper = QueryGenerator.initQueryWrapper(alarmEventRule, req.getParameterMap());
+        Page<AlarmEventRule> page = new Page<AlarmEventRule>(pageNo, pageSize);
+        IPage<AlarmEventRule> pageList = alarmEventRuleService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param alarmEventRule
+     * @return
+     */
+    @AutoLog(value = "预警事件规则表-添加")
+    @ApiOperation(value = "预警事件规则表-添加", notes = "预警事件规则表-添加")
+    @PostMapping(value = "/add")
+    public Result<AlarmEventRule> addAlarmEventRule(@RequestBody JSONObject obj) {
+        Result<AlarmEventRule> result = new Result<>();
+        try {
+            alarmEventRuleService.addAlarmEventRule(obj);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param alarmEventRule
+     * @return
+     */
+    @AutoLog(value = "预警事件规则表-编辑")
+    @ApiOperation(value = "预警事件规则表-编辑", notes = "预警事件规则表-编辑")
+    @PostMapping(value = "/edit")
+    public Result<AlarmEventRule> editAlarmEventRule(@RequestBody JSONObject obj) {
+        Result<AlarmEventRule> result = new Result<>();
+        try {
+            alarmEventRuleService.editAlarmEventRule(obj);
+            result.success("修改成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "预警事件规则表-通过id删除")
+    @ApiOperation(value = "预警事件规则表-通过id删除", notes = "预警事件规则表-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            alarmEventRuleService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "预警事件规则表-批量删除")
+    @ApiOperation(value = "预警事件规则表-批量删除", notes = "预警事件规则表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<AlarmEventRule> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<AlarmEventRule> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.alarmEventRuleService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "预警事件规则表-通过id查询")
+    @ApiOperation(value = "预警事件规则表-通过id查询", notes = "预警事件规则表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<AlarmEventRule> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<AlarmEventRule> result = new Result<>();
+        AlarmEventRule alarmEventRule = alarmEventRuleService.selectById(id);
+        if (alarmEventRule == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(alarmEventRule);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<AlarmEventRule> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                AlarmEventRule alarmEventRule = JSON.parseObject(deString, AlarmEventRule.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(alarmEventRule, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<AlarmEventRule> pageList = alarmEventRuleService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "预警事件规则表列表");
+        mv.addObject(NormalExcelConstants.CLASS, AlarmEventRule.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("预警事件规则表列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<AlarmEventRule> listAlarmEventRules = ExcelImportUtil.importExcel(file.getInputStream(), AlarmEventRule.class, params);
+                alarmEventRuleService.saveBatch(listAlarmEventRules);
+                return Result.ok("文件导入成功!数据行数:" + listAlarmEventRules.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
+}

+ 256 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/controller/AlarmEventSendController.java

@@ -0,0 +1,256 @@
+package cn.com.ctop.alarm.modules.controller;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventSend;
+import cn.com.ctop.alarm.modules.service.IAlarmEventSendService;
+import cn.com.ctop.common.module.annotation.AutoLog;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 预警事件发送表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Slf4j
+@Api(tags = "预警事件发送表")
+@RestController
+@RequestMapping("/alarm/alarmEventSend")
+public class AlarmEventSendController {
+    @Autowired
+    private IAlarmEventSendService alarmEventSendService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param alarmEventSend
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "预警事件发送表-分页列表查询")
+    @ApiOperation(value = "预警事件发送表-分页列表查询", notes = "预警事件发送表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<AlarmEventSend>> queryPageList(AlarmEventSend alarmEventSend,
+                                                       @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                       @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                       HttpServletRequest req) {
+        Result<IPage<AlarmEventSend>> result = new Result<>();
+        QueryWrapper<AlarmEventSend> queryWrapper = QueryGenerator.initQueryWrapper(alarmEventSend, req.getParameterMap());
+        Page<AlarmEventSend> page = new Page<AlarmEventSend>(pageNo, pageSize);
+        IPage<AlarmEventSend> pageList = alarmEventSendService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param alarmEventSend
+     * @return
+     */
+    @AutoLog(value = "预警事件发送表-添加")
+    @ApiOperation(value = "预警事件发送表-添加", notes = "预警事件发送表-添加")
+    @PostMapping(value = "/add")
+    public Result<AlarmEventSend> add(@RequestBody AlarmEventSend alarmEventSend) {
+        Result<AlarmEventSend> result = new Result<>();
+        try {
+            alarmEventSendService.save(alarmEventSend);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param alarmEventSend
+     * @return
+     */
+    @AutoLog(value = "预警事件发送表-编辑")
+    @ApiOperation(value = "预警事件发送表-编辑", notes = "预警事件发送表-编辑")
+    @PutMapping(value = "/edit")
+    public Result<AlarmEventSend> edit(@RequestBody AlarmEventSend alarmEventSend) {
+        Result<AlarmEventSend> result = new Result<AlarmEventSend>();
+        AlarmEventSend alarmEventSendEntity = alarmEventSendService.getById(alarmEventSend.getAlarmSendId());
+        if (alarmEventSendEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = alarmEventSendService.updateById(alarmEventSend);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "预警事件发送表-通过id删除")
+    @ApiOperation(value = "预警事件发送表-通过id删除", notes = "预警事件发送表-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            alarmEventSendService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "预警事件发送表-批量删除")
+    @ApiOperation(value = "预警事件发送表-批量删除", notes = "预警事件发送表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<AlarmEventSend> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<AlarmEventSend> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.alarmEventSendService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "预警事件发送表-通过id查询")
+    @ApiOperation(value = "预警事件发送表-通过id查询", notes = "预警事件发送表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<AlarmEventSend> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<AlarmEventSend> result = new Result<>();
+        AlarmEventSend alarmEventSend = alarmEventSendService.getById(id);
+        if (alarmEventSend == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(alarmEventSend);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<AlarmEventSend> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                AlarmEventSend alarmEventSend = JSON.parseObject(deString, AlarmEventSend.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(alarmEventSend, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<AlarmEventSend> pageList = alarmEventSendService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "预警事件发送表列表");
+        mv.addObject(NormalExcelConstants.CLASS, AlarmEventSend.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("预警事件发送表列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<AlarmEventSend> listAlarmEventSends = ExcelImportUtil.importExcel(file.getInputStream(), AlarmEventSend.class, params);
+                alarmEventSendService.saveBatch(listAlarmEventSends);
+                return Result.ok("文件导入成功!数据行数:" + listAlarmEventSends.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
+}

+ 269 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/controller/AlarmMetricValueController.java

@@ -0,0 +1,269 @@
+package cn.com.ctop.alarm.modules.controller;
+
+import cn.com.ctop.alarm.modules.entity.AlarmMetricValue;
+import cn.com.ctop.alarm.modules.service.IAlarmMetricValueService;
+import cn.com.ctop.common.module.annotation.AutoLog;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 指标字段记录表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Slf4j
+@Api(tags = "指标字段记录表")
+@RestController
+@RequestMapping("/alarm/alarmMetricValue")
+public class AlarmMetricValueController {
+    @Autowired
+    private IAlarmMetricValueService alarmMetricValueService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param alarmMetricValue
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "指标字段记录表-分页列表查询")
+    @ApiOperation(value = "指标字段记录表-分页列表查询", notes = "指标字段记录表-分页列表查询")
+    @GetMapping(value = "/queryPageList")
+    public Result<IPage<AlarmMetricValue>> queryPageList(AlarmMetricValue alarmMetricValue,
+                                                         @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                         @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                         HttpServletRequest req) {
+        Result<IPage<AlarmMetricValue>> result = new Result<>();
+        QueryWrapper<AlarmMetricValue> queryWrapper = QueryGenerator.initQueryWrapper(alarmMetricValue, req.getParameterMap());
+        Page<AlarmMetricValue> page = new Page<AlarmMetricValue>(pageNo, pageSize);
+        IPage<AlarmMetricValue> pageList = alarmMetricValueService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    @AutoLog(value = "指标字段记录表-分页列表查询")
+    @ApiOperation(value = "指标字段记录表-分页列表查询", notes = "指标字段记录表-分页列表查询")
+    @GetMapping(value = "/queryParentChildList")
+    public Result<Object> queryParentChildList(AlarmMetricValue alarmMetricValue, HttpServletRequest req) {
+        Result<Object> result = null;
+        try {
+            result = alarmMetricValueService.queryParentChildList(alarmMetricValue);
+        } catch (Exception e) {
+            log.error("查询指标数据异常:", e);
+            result = Result.error("查询失败");
+        }
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param alarmMetricValue
+     * @return
+     */
+    @AutoLog(value = "指标字段记录表-添加")
+    @ApiOperation(value = "指标字段记录表-添加", notes = "指标字段记录表-添加")
+    @PostMapping(value = "/add")
+    public Result<AlarmMetricValue> add(@RequestBody AlarmMetricValue alarmMetricValue) {
+        Result<AlarmMetricValue> result = new Result<>();
+        try {
+            alarmMetricValueService.save(alarmMetricValue);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param alarmMetricValue
+     * @return
+     */
+    @AutoLog(value = "指标字段记录表-编辑")
+    @ApiOperation(value = "指标字段记录表-编辑", notes = "指标字段记录表-编辑")
+    @GetMapping(value = "/edit")
+    public Result<AlarmMetricValue> edit(@RequestBody AlarmMetricValue alarmMetricValue) {
+        Result<AlarmMetricValue> result = new Result<AlarmMetricValue>();
+        AlarmMetricValue alarmMetricValueEntity = alarmMetricValueService.getById(alarmMetricValue.getMetricValueId());
+        if (alarmMetricValueEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = alarmMetricValueService.updateById(alarmMetricValue);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "指标字段记录表-通过id删除")
+    @ApiOperation(value = "指标字段记录表-通过id删除", notes = "指标字段记录表-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            alarmMetricValueService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "指标字段记录表-批量删除")
+    @ApiOperation(value = "指标字段记录表-批量删除", notes = "指标字段记录表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<AlarmMetricValue> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<AlarmMetricValue> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.alarmMetricValueService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "指标字段记录表-通过id查询")
+    @ApiOperation(value = "指标字段记录表-通过id查询", notes = "指标字段记录表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<AlarmMetricValue> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<AlarmMetricValue> result = new Result<>();
+        AlarmMetricValue alarmMetricValue = alarmMetricValueService.getById(id);
+        if (alarmMetricValue == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(alarmMetricValue);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<AlarmMetricValue> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                AlarmMetricValue alarmMetricValue = JSON.parseObject(deString, AlarmMetricValue.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(alarmMetricValue, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<AlarmMetricValue> pageList = alarmMetricValueService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "指标字段记录表列表");
+        mv.addObject(NormalExcelConstants.CLASS, AlarmMetricValue.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("指标字段记录表列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<AlarmMetricValue> listAlarmMetricValues = ExcelImportUtil.importExcel(file.getInputStream(), AlarmMetricValue.class, params);
+                alarmMetricValueService.saveBatch(listAlarmMetricValues);
+                return Result.ok("文件导入成功!数据行数:" + listAlarmMetricValues.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
+}

+ 89 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmEventMetric.java

@@ -0,0 +1,89 @@
+package cn.com.ctop.alarm.modules.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 制定详细规则表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Data
+@TableName("ctop_alarm_event_metric")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_alarm_event_metric对象", description = "制定详细规则表")
+public class AlarmEventMetric {
+
+    /**
+     * 主键id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "主键id")
+    private Long eventMetricId;
+    /**
+     * 规则id
+     */
+    @Excel(name = "规则id", width = 15)
+    @ApiModelProperty(value = "规则id")
+    private Long eventRuleId;
+    /**
+     * 指标标识
+     */
+    @Excel(name = "指标标识", width = 15)
+    @ApiModelProperty(value = "指标标识")
+    private String metricValueCode;
+    /**
+     * 判断方式 > >= < <= =
+     */
+    @Excel(name = "判断方式 > >= < <= =", width = 15)
+    @ApiModelProperty(value = "判断方式 > >= < <= =")
+    private String judgeMethod;
+    /**
+     * 判断类型 1-金额
+     */
+    private String judgeType;
+    /**
+     * 阈值
+     */
+    @Excel(name = "阈值", width = 15)
+    @ApiModelProperty(value = "阈值")
+    private String threshold;
+    /**
+     * 下限阈值
+     */
+    private String minThreshold;
+    /**
+     * createTime
+     */
+    @Excel(name = "createTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @Excel(name = "updateTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+    /**
+     * 数据范围:TODAY_DATA-当天数据
+     */
+    private String dataRange;
+}

+ 101 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmEventRule.java

@@ -0,0 +1,101 @@
+package cn.com.ctop.alarm.modules.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 预警事件规则表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Data
+@TableName("ctop_alarm_event_rule")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_alarm_event_rule对象", description = "预警事件规则表")
+public class AlarmEventRule {
+
+    /**
+     * 规则id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "规则id")
+    private Long eventRuleId;
+    /**
+     * 账户编号
+     */
+    @Excel(name = "账户编号", width = 15)
+    @ApiModelProperty(value = "账户编号")
+    private Long accountId;
+    /**
+     * 组编号
+     */
+    @Excel(name = "组编号", width = 15)
+    @ApiModelProperty(value = "组编号")
+    private Long unitId;
+    /**
+     * 规则名称
+     */
+    @Excel(name = "规则名称", width = 15)
+    @ApiModelProperty(value = "规则名称")
+    private String eventRuleName;
+    /**
+     * 预警事件规则级别 1-普通预警 2-严重预警
+     */
+    @Excel(name = "预警事件规则级别 1-普通预警 2-严重预警", width = 15)
+    @ApiModelProperty(value = "预警事件规则级别 1-普通预警 2-严重预警")
+    private String eventRuleLevel;
+    /**
+     * 检查频率 1每小时,2每半小时
+     */
+    @Excel(name = "检查频率 1每小时,2每半小时", width = 15)
+    @ApiModelProperty(value = "检查频率 1每小时,2每半小时")
+    private String checkFrequency;
+    /**
+     * 预警达标处理方式1发送,2关停并发送
+     */
+    @Excel(name = "预警达标处理方式1发送,2关停并发送", width = 15)
+    @ApiModelProperty(value = "预警达标处理方式1发送,2关停并发送")
+    private String processMethod;
+    /**
+     * 规则状态
+     */
+    @Excel(name = "规则状态", width = 15)
+    @ApiModelProperty(value = "规则状态")
+    private String eventRuleStatus;
+    /**
+     * createTime
+     */
+    @Excel(name = "createTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @Excel(name = "updateTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+
+    @TableField(exist = false)
+    private List<AlarmEventMetric> alarmEventMetrics;
+
+}

+ 77 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmEventSend.java

@@ -0,0 +1,77 @@
+package cn.com.ctop.alarm.modules.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 预警事件发送表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Data
+@TableName("ctop_alarm_event_send")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_alarm_event_send对象", description = "预警事件发送表")
+public class AlarmEventSend {
+
+    /**
+     * 主键id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "主键id")
+    private Integer alarmSendId;
+    /**
+     * 规则id
+     */
+    @Excel(name = "规则id", width = 15)
+    @ApiModelProperty(value = "规则id")
+    private Integer eventRuleId;
+    /**
+     * 预警指标
+     */
+    @Excel(name = "预警指标", width = 15)
+    @ApiModelProperty(value = "预警指标")
+    private String metricValueCode;
+    /**
+     * 预警发送内容
+     */
+    @Excel(name = "预警发送内容", width = 15)
+    @ApiModelProperty(value = "预警发送内容")
+    private String alarmDetail;
+    /**
+     * 预警发送状态 0未发送,1已发送
+     */
+    @Excel(name = "预警发送状态 0未发送,1已发送", width = 15)
+    @ApiModelProperty(value = "预警发送状态 0未发送,1已发送")
+    private String alarmStatus;
+    /**
+     * createTime
+     */
+    @Excel(name = "createTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @Excel(name = "updateTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 83 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/entity/AlarmMetricValue.java

@@ -0,0 +1,83 @@
+package cn.com.ctop.alarm.modules.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 指标字段记录表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Data
+@TableName("ctop_alarm_metric_value")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_alarm_metric_value对象", description = "指标字段记录表")
+public class AlarmMetricValue {
+
+    /**
+     * 指标值编号
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "指标值编号")
+    private Integer metricValueId;
+    /**
+     * 父级编码
+     */
+    @Excel(name = "父级编码", width = 15)
+    @ApiModelProperty(value = "父级编码")
+    private Integer metricParentId;
+    /**
+     * 指标值名称
+     */
+    @Excel(name = "指标值名称", width = 15)
+    @ApiModelProperty(value = "指标值名称")
+    private String metricValueName;
+    /**
+     * 指标值编码
+     */
+    @Excel(name = "指标值编码", width = 15)
+    @ApiModelProperty(value = "指标值编码")
+    private String metricValueCode;
+    /**
+     * metricValueType
+     */
+    @Excel(name = "metricValueType", width = 15)
+    @ApiModelProperty(value = "metricValueType")
+    private String metricValueType;
+    /**
+     * createTime
+     */
+    @Excel(name = "createTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @Excel(name = "updateTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+
+    @TableField(exist = false)
+    private List<AlarmMetricValue> childs;
+
+}

+ 18 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/AlarmEventMetricMapper.java

@@ -0,0 +1,18 @@
+package cn.com.ctop.alarm.modules.mapper;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventMetric;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * 制定详细规则表
+ *
+ * @author: jeecg-boot
+ * @date: 2020-10-29
+ * @cersion: V1.0
+ */
+public interface AlarmEventMetricMapper extends BaseMapper<AlarmEventMetric> {
+
+    List<AlarmEventMetric> selectByEventRuleId(String id);
+}

+ 15 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/AlarmEventRuleMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.alarm.modules.mapper;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventRule;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 预警事件规则表
+ *
+ * @author: jeecg-boot
+ * @date: 2020-10-29
+ * @cersion: V1.0
+ */
+public interface AlarmEventRuleMapper extends BaseMapper<AlarmEventRule> {
+
+}

+ 17 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/AlarmEventSendMapper.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.alarm.modules.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import cn.com.ctop.alarm.modules.entity.AlarmEventSend;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 预警事件发送表
+ * @author: jeecg-boot
+ * @date:   2020-10-29
+ * @cersion: V1.0
+ */
+public interface AlarmEventSendMapper extends BaseMapper<AlarmEventSend> {
+
+}

+ 17 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/AlarmMetricValueMapper.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.alarm.modules.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import cn.com.ctop.alarm.modules.entity.AlarmMetricValue;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 指标字段记录表
+ * @author: jeecg-boot
+ * @date:   2020-10-29
+ * @cersion: V1.0
+ */
+public interface AlarmMetricValueMapper extends BaseMapper<AlarmMetricValue> {
+
+}

+ 10 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/xml/AlarmEventMetricMapper.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.ctop.alarm.modules.mapper.AlarmEventMetricMapper">
+
+    <select id="selectByEventRuleId" resultType="cn.com.ctop.alarm.modules.entity.AlarmEventMetric">
+        SELECT *
+        FROM ctop_alarm_event_metric
+        WHERE event_metric_id = #{id}
+    </select>
+</mapper>

+ 5 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/xml/AlarmEventRuleMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.ctop.AlarmEventRule.mapper.AlarmEventRuleMapper">
+
+</mapper>

+ 5 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/xml/AlarmEventSendMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.ctop.alarm.modules.mapper.AlarmEventSendMapper">
+
+</mapper>

+ 5 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/mapper/xml/AlarmMetricValueMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.ctop.alarm.modules.mapper.AlarmMetricValueMapper">
+
+</mapper>

+ 14 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/IAlarmEventMetricService.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.alarm.modules.service;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventMetric;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 制定详细规则表
+ * @Author: jeecg-boot
+ * @Date: 2020-10-29
+ * @Version: V1.0
+ */
+public interface IAlarmEventMetricService extends IService<AlarmEventMetric> {
+
+}

+ 20 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/IAlarmEventRuleService.java

@@ -0,0 +1,20 @@
+package cn.com.ctop.alarm.modules.service;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventRule;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 预警事件规则表
+ * @Author: jeecg-boot
+ * @Date: 2020-10-29
+ * @Version: V1.0
+ */
+public interface IAlarmEventRuleService extends IService<AlarmEventRule> {
+
+    void addAlarmEventRule(JSONObject obj);
+
+    void editAlarmEventRule(JSONObject obj);
+
+    AlarmEventRule selectById(String id);
+}

+ 14 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/IAlarmEventSendService.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.alarm.modules.service;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventSend;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 预警事件发送表
+ * @Author: jeecg-boot
+ * @Date:   2020-10-29
+ * @Version: V1.0
+ */
+public interface IAlarmEventSendService extends IService<AlarmEventSend> {
+
+}

+ 16 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/IAlarmMetricValueService.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.alarm.modules.service;
+
+import cn.com.ctop.alarm.modules.entity.AlarmMetricValue;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
+
+/**
+ * @Description: 指标字段记录表
+ * @Author: jeecg-boot
+ * @Date:   2020-10-29
+ * @Version: V1.0
+ */
+public interface IAlarmMetricValueService extends IService<AlarmMetricValue> {
+
+    Result<Object> queryParentChildList(AlarmMetricValue alarmMetricValue);
+}

+ 19 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/AlarmEventMetricServiceImpl.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.alarm.modules.service.impl;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventMetric;
+import cn.com.ctop.alarm.modules.mapper.AlarmEventMetricMapper;
+import cn.com.ctop.alarm.modules.service.IAlarmEventMetricService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 制定详细规则表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Service
+public class AlarmEventMetricServiceImpl extends ServiceImpl<AlarmEventMetricMapper, AlarmEventMetric> implements IAlarmEventMetricService {
+
+}

+ 143 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/AlarmEventRuleServiceImpl.java

@@ -0,0 +1,143 @@
+package cn.com.ctop.alarm.modules.service.impl;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventMetric;
+import cn.com.ctop.alarm.modules.entity.AlarmEventRule;
+import cn.com.ctop.alarm.modules.mapper.AlarmEventMetricMapper;
+import cn.com.ctop.alarm.modules.mapper.AlarmEventRuleMapper;
+import cn.com.ctop.alarm.modules.service.IAlarmEventRuleService;
+import cn.com.ctop.common.module.utils.Check;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 预警事件规则表
+ * 完成Condition
+ * CURRENT_TODAY_DATA
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Service
+public class AlarmEventRuleServiceImpl extends ServiceImpl<AlarmEventRuleMapper, AlarmEventRule> implements IAlarmEventRuleService {
+
+    @Autowired
+    private AlarmEventRuleMapper alarmEventRuleMapper;
+
+    @Autowired
+    private AlarmEventMetricMapper alarmEventMetricMapper;
+
+    @Override
+    public void addAlarmEventRule(JSONObject obj) {
+        AlarmEventRule rule = new AlarmEventRule();
+        rule.setAccountId(obj.getLong("accountId"));
+        rule.setUnitId(obj.getLong("unitId"));
+        rule.setEventRuleName(obj.getString("eventRuleName"));
+        rule.setEventRuleLevel(obj.getString("eventRuleLevel"));
+        rule.setCheckFrequency(obj.getString("checkFrequency"));
+        rule.setProcessMethod(obj.getString("processMethod"));
+        rule.setEventRuleStatus(obj.getString("eventRuleStatus"));
+        alarmEventRuleMapper.insert(rule);
+        JSONArray metrics = obj.getJSONArray("alarmEventMetric");
+        for (int i = 0; i < metrics.size(); i++) {
+            JSONObject mo = metrics.getJSONObject(i);
+            AlarmEventMetric metric = new AlarmEventMetric();
+            metric.setEventRuleId(rule.getEventRuleId());
+            metric.setMetricValueCode(mo.getString("metricValueCode"));
+            metric.setJudgeType(mo.getString("judgeType"));
+            metric.setJudgeMethod(mo.getString("judgeMethod"));
+            metric.setThreshold(mo.getString("threshold"));
+            metric.setMinThreshold(mo.getString("minThreshold"));
+            metric.setDataRange(mo.getString("dataRange"));
+            alarmEventMetricMapper.insert(metric);
+        }
+    }
+
+    @Override
+    public void editAlarmEventRule(JSONObject obj) {
+        AlarmEventRule rule = new AlarmEventRule();
+        Long accountId = obj.getLong("accountId");
+        if (!Check.isNull(accountId)) {
+            rule.setAccountId(accountId);
+        }
+        Long unitId = obj.getLong("unitId");
+        if (!Check.isNull(unitId)) {
+            rule.setUnitId(unitId);
+        }
+        String eventRuleName = obj.getString("eventRuleName");
+        if (!Check.isNull(eventRuleName)) {
+            rule.setEventRuleName(eventRuleName);
+        }
+        String eventRuleLevel = obj.getString("eventRuleLevel");
+        if (!Check.isNull(eventRuleLevel)) {
+            rule.setEventRuleLevel(eventRuleLevel);
+        }
+        String checkFrequency = obj.getString("checkFrequency");
+        if (!Check.isNull(checkFrequency)) {
+            rule.setCheckFrequency(checkFrequency);
+        }
+        String processMethod = obj.getString("processMethod");
+        if (!Check.isNull(processMethod)) {
+            rule.setProcessMethod(processMethod);
+
+        }
+        String eventRuleStatus = obj.getString("eventRuleStatus");
+        if (!Check.isNull(eventRuleStatus)) {
+            rule.setEventRuleStatus(eventRuleStatus);
+        }
+        QueryWrapper<AlarmEventRule> ruleWrapper = new QueryWrapper<>();
+        ruleWrapper.eq("event_rule_id", obj.getLong("eventRuleId"));
+        alarmEventRuleMapper.update(rule, ruleWrapper);
+        JSONArray metrics = obj.getJSONArray("alarmEventMetric");
+        for (int i = 0; i < metrics.size(); i++) {
+            JSONObject mo = metrics.getJSONObject(i);
+            AlarmEventMetric metric = new AlarmEventMetric();
+            Long eventRuleId = rule.getEventRuleId();
+            if (!Check.isNull(eventRuleId)) {
+                metric.setEventRuleId(eventRuleId);
+            }
+            String metricValueCode = mo.getString("metricValueCode");
+            if (!Check.isNull(metricValueCode)) {
+                metric.setMetricValueCode(metricValueCode);
+            }
+            String judgeType = mo.getString("judgeType");
+            if (!Check.isNull(judgeType)) {
+                metric.setJudgeType(judgeType);
+            }
+            String judgeMethod = mo.getString("judgeMethod");
+            if (!Check.isNull(judgeMethod)) {
+                metric.setJudgeMethod(judgeMethod);
+            }
+            String threshold = mo.getString("threshold");
+            if (!Check.isNull(threshold)) {
+                metric.setThreshold(threshold);
+            }
+            String minThreshold = mo.getString("minThreshold");
+            if (!Check.isNull(minThreshold)) {
+                metric.setMinThreshold(minThreshold);
+            }
+            String dataRange = mo.getString("dataRange");
+            if (!Check.isNull(dataRange)) {
+                metric.setDataRange(dataRange);
+            }
+            QueryWrapper<AlarmEventMetric> metricWrapper = new QueryWrapper<>();
+            metricWrapper.eq("event_metric_id", mo.getLong("eventMetricId"));
+            metricWrapper.eq("event_rule_id", obj.getLong("eventRuleId"));
+            alarmEventMetricMapper.update(metric, metricWrapper);
+        }
+    }
+
+    @Override
+    public AlarmEventRule selectById(String id) {
+        AlarmEventRule alarmEventRule = alarmEventRuleMapper.selectById(id);
+        List<AlarmEventMetric> alarmEventMetricList = alarmEventMetricMapper.selectByEventRuleId(id);
+        return alarmEventRule.setAlarmEventMetrics(alarmEventMetricList);
+
+    }
+}

+ 19 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/AlarmEventSendServiceImpl.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.alarm.modules.service.impl;
+
+import cn.com.ctop.alarm.modules.entity.AlarmEventSend;
+import cn.com.ctop.alarm.modules.mapper.AlarmEventSendMapper;
+import cn.com.ctop.alarm.modules.service.IAlarmEventSendService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * 预警事件发送表
+ * @author jeecg-boot
+ * @date   2020-10-29
+ * @version V1.0
+ */
+@Service
+public class AlarmEventSendServiceImpl extends ServiceImpl<AlarmEventSendMapper, AlarmEventSend> implements IAlarmEventSendService {
+
+}

+ 59 - 0
module-alarm/src/main/java/cn/com/ctop/alarm/modules/service/impl/AlarmMetricValueServiceImpl.java

@@ -0,0 +1,59 @@
+package cn.com.ctop.alarm.modules.service.impl;
+
+import cn.com.ctop.alarm.modules.entity.AlarmMetricValue;
+import cn.com.ctop.alarm.modules.mapper.AlarmMetricValueMapper;
+import cn.com.ctop.alarm.modules.service.IAlarmMetricValueService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 指标字段记录表
+ * depletion
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-29
+ */
+@Service
+public class AlarmMetricValueServiceImpl extends ServiceImpl<AlarmMetricValueMapper, AlarmMetricValue> implements IAlarmMetricValueService {
+
+    @Autowired
+    private AlarmMetricValueMapper alarmMetricValueMapper;
+
+    @Override
+    public Result<Object> queryParentChildList(AlarmMetricValue alarmMetricValue) {
+        Result<Object> result = new Result<>();
+        List<AlarmMetricValue> list = alarmMetricValueMapper.selectList(null);
+        List<AlarmMetricValue> resultList = new ArrayList<>();
+        Map<Integer, List<AlarmMetricValue>> map = new HashMap<>();
+        List<Integer> parents = new ArrayList<>();
+        for (AlarmMetricValue metricValue : list) {
+            if (0 == metricValue.getMetricParentId()) {
+                parents.add(metricValue.getMetricValueId());
+                resultList.add(metricValue);
+            }
+        }
+        for (Integer id : parents) {
+            List<AlarmMetricValue> childs = new ArrayList<>();
+            for (AlarmMetricValue metricValue : list) {
+                if (0 != metricValue.getMetricParentId()) {
+                    if (id == metricValue.getMetricParentId()) {
+                        childs.add(metricValue);
+                    }
+                }
+                map.put(id, childs);
+            }
+        }
+        for (AlarmMetricValue metricValue : resultList) {
+            metricValue.setChilds(map.get(metricValue.getMetricValueId()));
+        }
+        return Result.ok(resultList);
+    }
+}

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/ProjectMapper.java

@@ -2,6 +2,7 @@ package cn.com.ctop.common.module.mapper;
 
 import cn.com.ctop.common.module.entity.Project;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 项目
@@ -12,4 +13,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ProjectMapper extends BaseMapper<Project> {
 
+    String getNameByAccountId(@Param("accountId") Long accountId);
 }

+ 8 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ProjectMapper.xml

@@ -2,4 +2,12 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.com.ctop.common.module.mapper.ProjectMapper">
 
+    <select id="getNameByAccountId" resultType="java.lang.String">
+     select project_name  from ctop_project
+     where id = (
+     select project_id from ctop_user_allocation
+     where account_id = #{accountId}
+     )
+    </select>
+
 </mapper>

+ 3 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/IProjectService.java

@@ -14,5 +14,7 @@ import java.util.List;
  */
 public interface IProjectService extends IService<Project> {
 
-    List<Project> listByMediaType(int projectType,int checkLink);
+    List<Project> listByMediaType(int projectType, int checkLink);
+
+    String getNameByAccountId(Long accountId);
 }

+ 12 - 4
module-common/src/main/java/cn/com/ctop/common/module/service/impl/ProjectServiceImpl.java

@@ -5,6 +5,7 @@ import cn.com.ctop.common.module.mapper.ProjectMapper;
 import cn.com.ctop.common.module.service.IProjectService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -18,13 +19,20 @@ import java.util.List;
  */
 @Service
 public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> implements IProjectService {
+    @Autowired
+    private ProjectMapper projectMapper;
 
     @Override
-    public List<Project> listByMediaType(int projectType,int checkLink) {
-        QueryWrapper<Project>queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("media_id",projectType);
-        queryWrapper.eq("check_link",checkLink);
+    public List<Project> listByMediaType(int projectType, int checkLink) {
+        QueryWrapper<Project> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("media_id", projectType);
+        queryWrapper.eq("check_link", checkLink);
         queryWrapper.orderByDesc("id");
         return this.list(queryWrapper);
     }
+
+    @Override
+    public String getNameByAccountId(Long accountId) {
+        return projectMapper.getNameByAccountId(accountId);
+    }
 }

File diff suppressed because it is too large
+ 159 - 2
module-crawler/src/main/java/cn/com/ctop/crawler/modules/taobao/service/impl/TaobaoJhsbybtServiceImpl.java


+ 54 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/Enums/CampaignTypeEnum.java

@@ -0,0 +1,54 @@
+package cn.com.ctop.kuaishou.modules.batch.Enums;
+
+public enum CampaignTypeEnum {
+
+    TYPE2(2, "提升应用安装"),
+    TYPE3(3, "获取电商下单"),
+    TYPE4(4, "推广品牌活动"),
+    TYPE5(5, "收集销售线索"),
+    TYPE7(7, "提高应用活跃");
+
+
+    private Integer type;
+    private String value;
+
+    CampaignTypeEnum(Integer type, String value) {
+        this.type = type;
+        this.value = value;
+    }
+
+    public static String getNameByType(Integer type) {
+        for (CampaignTypeEnum campaignType : CampaignTypeEnum.values()) {
+
+            if (campaignType.getType() == type) {
+                return campaignType.getValue();
+            }
+        }
+        return "";
+    }
+
+
+    public Integer getType() {
+        return type;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return "CampaignTypeEnum{" +
+                "type=" + type +
+                ", value='" + value + '\'' +
+                '}';
+    }
+}

+ 15 - 8
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/BatchController.java

@@ -1208,15 +1208,23 @@ public class BatchController {
      * @return
      */
     @PostMapping(value = "/createCreative")
-    public Result<JSONObject> createCreative(@RequestBody JSONObject requestJson) {
-        Result<JSONObject> result = new Result<>();
+    public Result createCreative(@RequestBody JSONObject requestJson) {
+        Result result = new Result<>();
         try {
-            JSONObject creativeJson = batchService.createCreative(requestJson);
-            result.setResult(creativeJson);
-            result.setSuccess(true);
+            Map<String, Object> map = batchService.batchCreateCreative(requestJson);
+            Integer code = (Integer) map.get("code");
+            if (code == 0) {
+                result.setSuccess(true);
+                result.setMessage("创建成功");
+            } else {
+                result.setSuccess(false);
+                result.setMessage((String) map.get("message"));
+            }
+
         } catch (Exception e) {
             e.printStackTrace();
             result.setSuccess(false);
+            result.setMessage("系统错误");
         }
         return result;
     }
@@ -2327,6 +2335,7 @@ public class BatchController {
 
     /**
      * 贴纸类型
+     *
      * @param accountId
      * @return
      */
@@ -2357,6 +2366,7 @@ public class BatchController {
 
     /**
      * 创意分类
+     *
      * @param accountId
      * @return
      */
@@ -2386,7 +2396,4 @@ public class BatchController {
     }
 
 
-
-
-
 }

+ 276 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/CrossAccountBatchController.java

@@ -0,0 +1,276 @@
+package cn.com.ctop.kuaishou.modules.batch.controller;
+
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.entity.UserAllocation;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.service.IProjectService;
+import cn.com.ctop.common.module.service.IUserAllocationService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.kuaishou.modules.batch.Enums.CampaignTypeEnum;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@Slf4j
+@Api(tags = "快手-批量工具")
+@RestController
+@RequestMapping("/kuaishou/crossAccount")
+public class CrossAccountBatchController {
+    @Autowired
+    private IProjectService projectService;
+
+    @Autowired
+    private ICtopOauthTokenService oauthTokenService;
+
+    @Autowired
+    private IKuaishouInterfaceService kuaishouInterfaceService;
+    @Autowired
+    private IUserAllocationService userAllocationService;
+
+
+    /**
+     * 批量创建广告计划
+     *
+     * @param requestJson
+     * @return
+     */
+    @PostMapping(value = "/batchCampaignCreate")
+    public Result<JSONArray> campaignCreate(@RequestBody JSONObject requestJson) {
+        Result<JSONArray> result = new Result<>();
+        try {
+            System.err.println(requestJson);
+            JSONArray accountArr = requestJson.getJSONArray("accountArr");
+            if (Check.isNull(accountArr)) {
+                throw new Exception("请选择需要创建的账户");
+            }
+            JSONArray returnArr = new JSONArray();
+
+            for (int i = 0; i < accountArr.size(); i++) {
+                Long accountId = accountArr.getLong(i);
+                CtopOauthToken oauthToken = oauthTokenService.getTokenByAccountId(accountId);
+                if (Check.isNull(oauthToken)) {
+                    throw new Exception("未获取到账户信息");
+                }
+
+                JSONObject returnJson = new JSONObject();
+                returnJson.put("accountId", accountId);
+                JSONObject campaignJson = new JSONObject();
+                campaignJson.put("day_budget", requestJson.getLong("dayBudget"));
+                Integer nameType = requestJson.getInteger("nameType");
+                Integer type = requestJson.getInteger("type");
+                campaignJson.put("type", type);
+                if (!Check.isNull(requestJson.getLong("dayBudget"))) {
+                    campaignJson.put("day_budget", requestJson.getLong("dayBudget"));
+                }
+
+                if (!Check.isNull(requestJson.getJSONArray("dayBudgetSchedule"))) {
+                    campaignJson.put("day_budget_schedule", requestJson.getJSONArray("dayBudgetSchedule"));
+                }
+
+                JSONArray campaignNames = new JSONArray();
+                if (nameType == 0) { // 0 为统一命名  1 为分别命名
+                    //    Integer startNum = requestJson.getInteger("startNum");
+                    Integer createTotal = requestJson.getInteger("createTotal");
+                    String campaignName = requestJson.getString("campaignName");
+                    for (int j = 0; j < createTotal; j++) {
+                        if (campaignName.contains("{{数值}}")) {
+                            String name = getName(campaignName, accountId, j, type);
+                            campaignNames.add(name);
+                        } else {
+                            String name = null;
+                            if (createTotal == 1) {
+                                name = getName(campaignName, accountId, null, type);
+                            } else {
+                                name = getName(campaignName + "_" + j, accountId, null, type);
+                            }
+                            campaignNames.add(name);
+                        }
+                    }
+                } else if (nameType == 1) { // "分别命名"
+                    JSONArray nameArr = requestJson.getJSONArray("nameArr");
+                    for (int j = 0; j < nameArr.size(); j++) {
+                        JSONObject nameJson = nameArr.getJSONObject(j);
+                        if (nameJson.getLong("accountId").equals(accountId)) {
+                            campaignNames = nameJson.getJSONArray("campaignNames");
+                        }
+                    }
+                }
+                if (!Check.isNull(campaignNames)) {
+                    JSONArray returnCampaigns = new JSONArray();
+                    for (int j = 0; j < campaignNames.size(); j++) {
+                        JSONObject returnCampaignJson = new JSONObject();
+                        String campaignName = (String) campaignNames.get(j);
+                        campaignJson.put("campaign_name", campaignName);
+                        Map<String, Object> campaignMap = kuaishouInterfaceService.campaignCreate(oauthToken.getAccessToken(), accountId, campaignJson);
+                        if ((Integer) campaignMap.get("code") == 0) {
+                            returnCampaignJson.put("code", 0);
+                            returnCampaignJson.put("campaignId", campaignMap.get("campaignId"));
+                            returnCampaignJson.put("campaignName", campaignName);
+                            returnCampaignJson.put("type", type);
+                            returnCampaignJson.put("message", campaignMap.get("message"));
+                        } else {
+                            returnCampaignJson.put("code", -1);
+                            returnCampaignJson.put("campaignName", campaignName);
+                            returnCampaignJson.put("message", campaignMap.get("message"));
+                        }
+                        returnCampaigns.add(returnCampaignJson);
+
+                    }
+                    returnJson.put("createDetail", returnCampaigns);
+
+                }
+                returnArr.add(returnJson);
+            }
+            result.setSuccess(true);
+            System.err.println(returnArr);
+            result.setResult(returnArr);
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+            result.setMessage(e.getMessage());
+
+        }
+        return result;
+
+    }
+
+
+    /**
+     * 获取账户授权名称
+     *
+     * @param requestJson
+     * @return
+     */
+    @PostMapping(value = "/getAuthName")
+    public Result<JSONArray> getAuthName(@RequestBody JSONObject requestJson) {
+        Result<JSONArray> result = new Result<>();
+        try {
+            JSONArray accountArr = requestJson.getJSONArray("accountArr");
+            if (Check.isNull(accountArr)) {
+                throw new Exception("请传入账户id");
+            }
+            JSONArray returnArr = new JSONArray();
+            for (int i = 0; i < accountArr.size(); i++) {
+                Long accountId = accountArr.getLong(i);
+                UserAllocation userAllocation = userAllocationService.getByAccountId(accountId);
+                if (!Check.isNull(userAllocation)) {
+                    JSONObject returnJson = new JSONObject();
+                    returnJson.put("accountId", accountId);
+                    returnJson.put("authName", userAllocation.getAuthName());
+                    returnArr.add(returnJson);
+                }
+            }
+            result.setSuccess(true);
+            result.setResult(returnArr);
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+            result.setMessage(e.getMessage());
+
+        }
+        return result;
+
+    }
+
+
+    /**
+     * @param content   计划名称
+     * @param accountId 账户id
+     * @param num       数值数
+     * @param type      计划类型
+     * @return
+     */
+    private String getName(String content, Long accountId, Integer num, Integer type) {
+        String reg = "\\{\\{(.+?)\\}\\}";
+        List<String> params = getParams(reg, content);
+        if (Check.isNull(params)) {
+            return content;
+        }
+
+
+        Map<String, String> data = new HashMap<>();
+        for (int i = 0; i < params.size(); i++) {
+            String regName = params.get(i);
+            if ("项目名称".equals(regName)) {
+                String projectName = projectService.getNameByAccountId(accountId);
+                data.put(regName, projectName);
+            }
+
+            if ("日期".equals(regName)) {
+                data.put(regName, DateUtils.getNowDate("yyyy-MM-dd"));
+            }
+
+            if ("计划类型".equals(regName)) {
+                data.put(regName, CampaignTypeEnum.getNameByType(type));
+            }
+
+            if ("数值".equals(regName)) {
+                data.put(regName, String.valueOf(num));
+            }
+
+        }
+        String text = parse(reg, content, data);
+        return text;
+    }
+
+
+    public static String parse(String pattern, String content, Map<String, String> data) {
+        Pattern p = Pattern.compile(pattern);
+        Matcher m = p.matcher(content);
+
+        StringBuffer sb = new StringBuffer();
+        while (m.find()) {
+            String key = m.group(1);
+            String value = data.get(key);
+            m.appendReplacement(sb, value == null ? "" : value);
+        }
+        m.appendTail(sb);
+        return sb.toString();
+    }
+
+    /**
+     * 根据正则表达式获取文本中的变量名列表
+     *
+     * @param pattern
+     * @param content
+     * @return
+     */
+    public static List<String> getParams(String pattern, String content) {
+        Pattern p = Pattern.compile(pattern);
+        Matcher m = p.matcher(content);
+
+        List<String> result = new ArrayList<String>();
+        while (m.find()) {
+            result.add(m.group(1));
+        }
+        return result;
+    }
+
+    /**
+     * 根据正则表达式将文本中的变量使用实际的数据替换成无变量的文本
+     *
+     * @param pattern
+     * @param content
+     * @param data
+     * @return
+     */
+
+
+}

+ 1 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/entity/KuaiShouCampaign.java

@@ -86,6 +86,7 @@ public class KuaiShouCampaign {
     @Excel(name = "每日预算", width = 15)
     @ApiModelProperty(value = "每日预算")
     private Long dayBudget;
+    private String dayBudgetSchedule;
 
 
     @Excel(name = "广告投放时间", width = 15)

+ 6 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IBatchService.java

@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 
 import java.math.BigDecimal;
+import java.util.Map;
 
 public interface IBatchService {
     /**
@@ -161,9 +162,14 @@ public interface IBatchService {
 
     /**
      * 获取创意分类
+     *
      * @param accountId
      * @param accessToken
      * @return
      */
     JSONArray getCreativeCategory(Long accountId, String accessToken);
+
+
+    Map<String, Object> batchCreateCreative(JSONObject requestJson) throws Exception;
+
 }

+ 6 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaishouInterfaceService.java

@@ -501,6 +501,12 @@ public interface IKuaishouInterfaceService {
      * @return
      */
     JSONArray getPageList(Long accountId, String token, Long appId, String viewComp);
+
+
+    Map<String, Object> batchCreativeCreate(String accessToken, Long advertiserId, JSONObject requestJson, Integer count);
+
+    void getCreativeByCreativeIds(String accessToken, Long advertiserId, JSONArray creativeIds);
+
 }
 
 

+ 126 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/BatchServiceImpl.java

@@ -1398,6 +1398,132 @@ public class BatchServiceImpl implements IBatchService {
     }
 
 
+    @Override
+    public Map<String, Object> batchCreateCreative(JSONObject requestJson) throws Exception {
+        if (Check.isNull(requestJson)) {
+            throw new Exception("入参为空");
+        }
+
+        Long accountId = requestJson.getLong("accountId");
+        if (Check.isNull(accountId)) {
+            throw new Exception("请输入需创建账号");
+        }
+
+        CtopOauthToken oauthToken = oauthTokenService.getTokenByAccountId(accountId);
+        if (Check.isNull(oauthToken)) {
+            throw new Exception("未获取到账户信息");
+        }
+
+        Long unitId = requestJson.getLong("unitId");
+        if (Check.isNull(unitId)) {
+            throw new Exception("请选择广告组");
+        }
+
+        JSONObject creativeJson = new JSONObject();
+        creativeJson.put("advertiser_id", accountId);
+        creativeJson.put("unit_id", unitId);
+        String click_track_url = requestJson.getString("clickTrackUrl");
+
+
+        // 素材类型
+
+        String action_bar_text = requestJson.getString("actionBarText");
+        String site_id = requestJson.getString("siteId");
+        Integer creativeCategory = requestJson.getInteger("creativeCategory");// 创意分类
+        JSONArray creativeTag = requestJson.getJSONArray("creativeTag");
+
+
+        JSONArray dataJsons = requestJson.getJSONArray("dataJson");
+        Integer content = requestJson.getInteger("content");
+
+        if (!Check.isNull(dataJsons)) {
+            JSONArray creatives = new JSONArray();
+            for (int i = 0; i < dataJsons.size(); i++) {
+                JSONObject dataJson = dataJsons.getJSONObject(i);
+                String creativeMaterialType = dataJson.getString("creativeMaterialType");
+                String shortSlogan = dataJson.getString("shortSlogan");
+                String overlayType = dataJson.getString("overlayType");
+                String stickerTitle = dataJson.getString("stickerTitle");
+                String description = dataJson.getString("description");
+                String photo_id = dataJson.getString("photoId");
+                JSONArray imageArr = dataJson.getJSONArray("imageArr");
+                if (!Check.isNull(imageArr)) {
+                    for (int j = 0; j < imageArr.size(); j++) {
+                        JSONObject imageJson = imageArr.getJSONObject(j);
+                        if (!Check.isNull(imageJson)) {
+                            JSONObject creative = new JSONObject();
+                            content += 1;
+                            String name = imageJson.getString("name") + content;
+                            creative.put("action_bar_text", action_bar_text);
+                            creative.put("description", description.trim());
+                            creative.put("creative_name", name);
+                            creative.put("photo_id", photo_id);
+                            if (!Check.isNull(site_id)) {
+                                creative.put("site_id", site_id);
+                            }
+                            if (!Check.isNull(creativeMaterialType)) {
+                                creative.put("creative_material_type", creativeMaterialType);
+                            }
+                            if (!Check.isNull(overlayType)) {
+                                creative.put("overlay_type", overlayType);
+                            }
+                            if (!Check.isNull(stickerTitle)) {
+                                creative.put("sticker_title", stickerTitle);
+                            }
+                            if (!Check.isNull(creativeCategory) && !Check.isNull(creativeTag)) {
+                                creativeJson.put("creative_category", creativeCategory);
+                                creativeJson.put("creative_tag", creativeTag);
+                            }
+                            if (creativeMaterialType.equals("4")) {
+                                if (!Check.isNull("shortSlogan")) {
+                                    creative.put("short_slogan", shortSlogan);
+                                }
+                            }
+                            String imageToken = null;
+                            String signature = imageJson.getString("signature");
+                            if (!Check.isNull(signature)) {
+                                QueryWrapper<KuaiShouImageGet> queryWrapper = new QueryWrapper<>();
+                                queryWrapper.eq("account_id", accountId);
+                                queryWrapper.eq("signature", signature);
+                                queryWrapper.last("limit 1");
+                                KuaiShouImageGet imageGet = imageGetService.getOne(queryWrapper);
+                                if (!Check.isNull(imageGet)) {
+                                    imageToken = imageGet.getImageToken();
+                                } else {
+                                    String url = imageGetService.getUrlByCode(signature);
+                                    imageToken = uploadService.kuauiShouImageUpload(url, signature, accountId, oauthToken.getAccessToken());
+                                }
+                                if (Check.isNull(imageToken)) {
+                                    continue;
+                                }
+                            }
+                            if (creativeMaterialType.equals("4")) {
+                                JSONArray tokenArr = new JSONArray();
+                                tokenArr.add(imageToken);
+                                creative.put("image_tokens", tokenArr);
+                                creativeJson.put("click_track_url", click_track_url);
+                                creativeJson.put("impression_url", click_track_url);
+                            } else {
+                                creative.put("image_token", imageToken);
+                                creativeJson.put("click_track_url", click_track_url);
+                            }
+
+                            creatives.add(creative);
+                        }
+                    }
+                }
+
+
+            }
+
+            creativeJson.put("creatives", creatives);
+        }
+
+        Map<String, Object> returnUnitMap = kuaishouInterfaceService.batchCreativeCreate(oauthToken.getAccessToken(), accountId, creativeJson, 1);
+        return returnUnitMap;
+    }
+
+
     /**
      * 获取创意信息
      *

+ 1 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouDailyReportTaskServiceImpl.java

@@ -68,7 +68,7 @@ public class KuaiShouDailyReportTaskServiceImpl extends ServiceImpl<KuaiShouDail
         taskQueryWrapper.eq("task_status", 0);
         taskQueryWrapper.eq("account_id", accountId);
         taskQueryWrapper.eq("stat_date", statDate);
-        taskQueryWrapper.eq("view_type", 7);
+       // taskQueryWrapper.eq("view_type", 7);
         taskQueryWrapper.orderByDesc("create_time");
         List<KuaiShouDailyReportTask> dailyTaskList = this.list(taskQueryWrapper);
         if (!Check.isNull(dailyTaskList)) {

+ 2 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouHistoryReportTaskServiceImpl.java

@@ -277,12 +277,12 @@ public class KuaiShouHistoryReportTaskServiceImpl extends ServiceImpl<KuaiShouHi
 
         historyTypeList = new ArrayList<>();
         historyTypeList.add(1);
-        historyTypeList.add(2);
+       /* historyTypeList.add(2);
         historyTypeList.add(3);
         historyTypeList.add(4);
         historyTypeList.add(5);
         historyTypeList.add(7);
-        historyTypeList.add(10);
+        historyTypeList.add(10);*/
 
 
     }

+ 198 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java

@@ -972,7 +972,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                     returnMap.put("campaignId", campaignId);
                     returnMap.put("success", true);
                     // 创建成功 拉取广告组信息
-                    Thread.sleep(1 * 1000L);
+                    Thread.sleep(500);
                     getCampaign(accessToken, advertiserId, campaignId);
                 } else {
                     log.error("创建广告计划失败,advertiser_id:{},返回信息:{}", advertiserId, resultJson);
@@ -1174,8 +1174,10 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                 campaign.setCampaignId(detail.getLong("campaign_id"));
                 campaign.setCampaignName(detail.getString("campaign_name"));
                 campaign.setDayBudget(detail.getLong("day_budget"));
+                if (!Check.isNull(detail.getJSONArray("day_budget_schedule"))) {
+                    campaign.setDayBudgetSchedule(detail.getJSONArray("day_budget_schedule").toJSONString());
+                }
                 campaign.setStatus(detail.getInteger("status"));
-
                 campaign.setPutStatus(detail.getInteger("put_status"));
                 campaign.setCampaignType(detail.getInteger("campaign_type"));
                 campaign.setCreateChannel(detail.getInteger("create_channel"));
@@ -1604,6 +1606,121 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
     }
 
 
+    @Override
+    public void getCreativeByCreativeIds(String accessToken, Long advertiserId, JSONArray creativeIds) {
+        String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.CREATIVE_LIST;
+        Map<String, String> headers = new HashMap<String, String>();
+        headers.put("Content-Type", " application/json");
+        headers.put("Access-Token", accessToken);
+        JSONObject param = new JSONObject();
+        param.put("advertiser_id", advertiserId);
+        //  param.put("creative_id", creativeId);
+        if (!Check.isNull(creativeIds)) {
+            param.put("creative_ids", creativeIds);
+        }
+        param.put("page_size", 200);
+        param.put("page", 1);
+        try {
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, param.toJSONString(), headers);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    JSONObject dataJson = resultJson.getJSONObject("data");
+                    if (!Check.isNull(dataJson)) {
+                        JSONArray details = dataJson.getJSONArray("details");
+                        if (!Check.isNull(details)) {
+                            for (int i = 0; i < details.size(); i++) {
+                                JSONObject detailJson = JSONObject.parseObject(details.get(i).toString());
+                                if (!Check.isNull(detailJson)) {
+                                    KuaiShouCreative creative = new KuaiShouCreative();
+                                    creative.setId("" + advertiserId + detailJson.getLong("creative_id"));
+                                    creative.setAccountId(advertiserId);
+                                    creative.setCampaignId(detailJson.getLong("campaign_id"));
+                                    creative.setUnitId(detailJson.getLong("unit_id"));
+                                    creative.setCreativeId(detailJson.getLong("creative_id"));
+                                    creative.setCreativeName(detailJson.getString("creative_name"));
+                                    creative.setCreativeMaterialType(detailJson.getInteger("creative_material_type"));
+                                    if (!Check.isNull(detailJson.getJSONArray("material_url"))) {
+                                        creative.setMaterialUrl(detailJson.getJSONArray("material_url").toJSONString());
+                                    }
+
+                                    if (!Check.isNull(detailJson.getJSONArray("image_tokens"))) {
+                                        creative.setImageTokens(detailJson.getJSONArray("image_tokens").toJSONString());
+                                    }
+                                    creative.setStatus(detailJson.getInteger("status"));
+                                    creative.setPutStatus(detailJson.getInteger("put_status"));
+                                    creative.setCreateChannel(detailJson.getInteger("create_channel"));
+                                    creative.setReviewDetail(detailJson.getString("review_detail"));
+                                    creative.setCoverUrl(detailJson.getString("cover_url"));
+                                    creative.setImageToken(detailJson.getString("image_token"));
+                                    creative.setCoverWidth(detailJson.getString("cover_width"));
+                                    creative.setCoverHeight(detailJson.getString("cover_height"));
+                                    creative.setOverlayBgUrl(detailJson.getString("overlay_bg_url"));
+                                    creative.setOverlayBgImageToken(detailJson.getString("overlay_bg_image_token"));
+                                    creative.setStickerTitle(detailJson.getString("sticker_title"));
+                                    creative.setOverlayType(detailJson.getString("overlay_type"));
+                                    creative.setClickTrackUrl(detailJson.getString("click_track_url"));
+                                    creative.setImpressionUrl(detailJson.getString("impression_url"));
+                                    creative.setAdPhotoPlayedT3sUrl(detailJson.getString("ad_photo_played_t3s_url"));
+                                    creative.setCreativeCreateTime(detailJson.getDate("create_time"));
+                                    creative.setCreativeUpdateTime(detailJson.getDate("update_time"));
+                                    creative.setFirstFrameType(detailJson.getInteger("first_frame_type"));
+                                    creative.setShortSlogan(detailJson.getString("short_slogan"));
+                                    creative.setActionbarClickUrl(detailJson.getString("actionbar_click_url"));
+                                    JSONObject displayInfoJson = detailJson.getJSONObject("display_info");
+
+                                    creative.setCreativeCategory(detailJson.getInteger("creative_category"));
+                                    if (!Check.isNull(detailJson.getJSONArray("creative_tag"))) {
+                                        creative.setCreativeTag(detailJson.getJSONArray("creative_tag").toJSONString());
+                                    }
+
+                                    if (!Check.isNull(displayInfoJson)) {
+                                        creative.setDescription(displayInfoJson.getString("description"));
+                                        creative.setActionBarText(displayInfoJson.getString("action_bar_text"));
+                                    }
+                                    creative.setCreateTime(new Date());
+                                    creative.setUpdateTime(new Date());
+                                    creative.setSiteId(detailJson.getLong("site_id"));
+                                    creative.setPhotoId(detailJson.getString("photo_id"));
+                                    if (detailJson.getLong("photo_id") == 0) {
+                                        JSONArray photoIds = new JSONArray();
+                                        JSONObject programmed_creative_material = detailJson.getJSONObject("programmed_creative_material");
+                                        if (!Check.isNull(programmed_creative_material)) {
+                                            creative.setProgrammedCreativeMaterial(programmed_creative_material.toJSONString());
+                                            JSONArray materials = programmed_creative_material.getJSONArray("materials");
+                                            if (!Check.isNull(materials)) {
+                                                for (int j = 0; j < materials.size(); j++) {
+                                                    JSONObject materialJson = materials.getJSONObject(j);
+                                                    if (!Check.isNull(materialJson)) {
+                                                        Long photo_id = materialJson.getLong("photo_id");
+                                                        photoIds.add(String.valueOf(photo_id));
+                                                    }
+                                                }
+                                                creative.setPhotoIds(photoIds.toJSONString());
+                                            }
+                                        }
+                                    }
+                                    creativeService.saveOrUpdate(creative);
+                                }
+
+                            }
+
+                        }
+                    }
+                } else {
+                    log.error("获取广告创意组返回结果异常,advertiserId:{},异常信息:{}", advertiserId, resultJson);
+                }
+
+            } else {
+                log.error("获取广告创意返回结果异常,advertiserId:{},异常信息:{}", advertiserId, resultJson);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
     /**
      * 获取token
      *
@@ -1863,6 +1980,85 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
 
 
     @Override
+    public Map<String, Object> batchCreativeCreate(String accessToken, Long advertiserId, JSONObject requestJson, Integer count) {
+        Map<String, Object> returnMap = new HashMap<>();
+        try {
+            String url = "https://ad.e.kuaishou.com/rest/openapi/v2/creative/batch/update";
+            requestJson.put("advertiser_id", advertiserId);
+            Map<String, String> header = new HashMap<String, String>();
+            header.put("Content-Type", " application/json");
+            header.put("Access-Token", accessToken);
+
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), header);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            log.info("快手创建创意返回:accountId:{},返回结果{}", advertiserId, resultJson);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    JSONObject dataJson = resultJson.getJSONObject("data");
+                    if (!Check.isNull(dataJson)) {
+                        JSONArray add_creative_ids = dataJson.getJSONArray("add_creative_ids");
+                        if (!Check.isNull(add_creative_ids)) {
+                            Thread thread = new Thread() {
+                                @Override
+                                public void run() {
+                                    try {
+                                        Thread.sleep(100);
+                                        getCreativeByCreativeIds(accessToken, advertiserId, add_creative_ids);
+                                    } catch (InterruptedException e) {
+                                        e.printStackTrace();
+                                    }
+
+                                }
+
+                            };
+                            thread.start();
+                        }
+
+                        returnMap.put("code", 0);
+                        returnMap.put("message", "success");
+                        returnMap.put("success", true);
+                    }
+                } else {
+                    if (code == 500000 && count <= 4) {
+                        creativeCreate(accessToken, advertiserId, requestJson, count + 1);
+                    }
+
+                    if (code == 400001 && resultJson.getString("message").equals("/rest/openapi/v2/creative/create已超日限")) {
+                        overRunSendMessageService.creativeOverRunSendMessage(advertiserId);
+                    }
+                    log.error("创建广告创意失败,advertiser_id:{},返回信息:{},入参:{}", advertiserId, resultJson, requestJson, count + 1);
+                    returnMap.put("code", -1);
+                    returnMap.put("message", resultJson.getString("message"));
+                    returnMap.put("desc", "创意创建失败");
+                    returnMap.put("success", false);
+                }
+            } else {
+                if (count <= 4) {
+                    batchCreativeCreate(accessToken, advertiserId, requestJson, count + 1);
+                }
+
+                log.error("快手创建广告创意返回内容为空,advertiser_id:{},入参:{}", advertiserId, requestJson);
+                returnMap.put("code", -1);
+                returnMap.put("message", "系统异常");
+                returnMap.put("desc", "result is null");
+                returnMap.put("success", false);
+            }
+
+        } catch (Exception e) {
+            log.error("创建广告创意失败,advertiser_id:{}", advertiserId);
+            returnMap.put("code", -1);
+            returnMap.put("message", "error");
+            returnMap.put("desc", "Interface exception");
+            returnMap.put("success", false);
+            e.printStackTrace();
+        }
+        return returnMap;
+
+    }
+
+
+    @Override
     public Map<String, Object> videoUpload(Long advertiserId, String accessToken, String videoUrl) {
         Map<String, Object> returnMap = new HashMap<>();
         try {

+ 256 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/controller/KuaishouCostGroupController.java

@@ -0,0 +1,256 @@
+package cn.com.ctop.kuaishou.modules.report.controller;
+
+import cn.com.ctop.common.module.annotation.AutoLog;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouCostGroup;
+import cn.com.ctop.kuaishou.modules.report.service.IKuaishouCostGroupService;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 快手组级时报统计
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-30
+ */
+@Slf4j
+@Api(tags = "快手组级时报统计")
+@RestController
+@RequestMapping("/cost/kuaishouCostGroup")
+public class KuaishouCostGroupController {
+    @Autowired
+    private IKuaishouCostGroupService kuaishouCostGroupService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param kuaishouCostGroup
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "快手组级时报统计-分页列表查询")
+    @ApiOperation(value = "快手组级时报统计-分页列表查询", notes = "快手组级时报统计-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<KuaishouCostGroup>> queryPageList(KuaishouCostGroup kuaishouCostGroup,
+                                                          @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                          @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                          HttpServletRequest req) {
+        Result<IPage<KuaishouCostGroup>> result = new Result<>();
+        QueryWrapper<KuaishouCostGroup> queryWrapper = QueryGenerator.initQueryWrapper(kuaishouCostGroup, req.getParameterMap());
+        Page<KuaishouCostGroup> page = new Page<KuaishouCostGroup>(pageNo, pageSize);
+        IPage<KuaishouCostGroup> pageList = kuaishouCostGroupService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param kuaishouCostGroup
+     * @return
+     */
+    @AutoLog(value = "快手组级时报统计-添加")
+    @ApiOperation(value = "快手组级时报统计-添加", notes = "快手组级时报统计-添加")
+    @PostMapping(value = "/add")
+    public Result<KuaishouCostGroup> add(@RequestBody KuaishouCostGroup kuaishouCostGroup) {
+        Result<KuaishouCostGroup> result = new Result<>();
+        try {
+            kuaishouCostGroupService.save(kuaishouCostGroup);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param kuaishouCostGroup
+     * @return
+     */
+    @AutoLog(value = "快手组级时报统计-编辑")
+    @ApiOperation(value = "快手组级时报统计-编辑", notes = "快手组级时报统计-编辑")
+    @PutMapping(value = "/edit")
+    public Result<KuaishouCostGroup> edit(@RequestBody KuaishouCostGroup kuaishouCostGroup) {
+        Result<KuaishouCostGroup> result = new Result<KuaishouCostGroup>();
+        KuaishouCostGroup kuaishouCostGroupEntity = kuaishouCostGroupService.getById(kuaishouCostGroup.getId());
+        if (kuaishouCostGroupEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = kuaishouCostGroupService.updateById(kuaishouCostGroup);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "快手组级时报统计-通过id删除")
+    @ApiOperation(value = "快手组级时报统计-通过id删除", notes = "快手组级时报统计-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            kuaishouCostGroupService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "快手组级时报统计-批量删除")
+    @ApiOperation(value = "快手组级时报统计-批量删除", notes = "快手组级时报统计-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<KuaishouCostGroup> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<KuaishouCostGroup> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.kuaishouCostGroupService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "快手组级时报统计-通过id查询")
+    @ApiOperation(value = "快手组级时报统计-通过id查询", notes = "快手组级时报统计-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<KuaishouCostGroup> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<KuaishouCostGroup> result = new Result<>();
+        KuaishouCostGroup kuaishouCostGroup = kuaishouCostGroupService.getById(id);
+        if (kuaishouCostGroup == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(kuaishouCostGroup);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<KuaishouCostGroup> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                KuaishouCostGroup kuaishouCostGroup = JSON.parseObject(deString, KuaishouCostGroup.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(kuaishouCostGroup, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<KuaishouCostGroup> pageList = kuaishouCostGroupService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "快手组级时报统计列表");
+        mv.addObject(NormalExcelConstants.CLASS, KuaishouCostGroup.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("快手组级时报统计列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<KuaishouCostGroup> listKuaishouCostGroups = ExcelImportUtil.importExcel(file.getInputStream(), KuaishouCostGroup.class, params);
+                kuaishouCostGroupService.saveBatch(listKuaishouCostGroups);
+                return Result.ok("文件导入成功!数据行数:" + listKuaishouCostGroups.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
+}

+ 98 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouCostGroup.java

@@ -0,0 +1,98 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * 快手组级时报统计
+ * @author jeecg-boot
+ * @date   2020-10-30
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_kuaishou_cost_group")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_kuaishou_cost_group对象", description="快手组级时报统计")
+public class KuaishouCostGroup {
+    
+	/**id*/
+	@TableId(type = IdType.INPUT)
+    @ApiModelProperty(value = "id")
+	private Long id;
+	/**账户ID*/
+	@Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+	private Long accountId;
+	/**广告组ID*/
+	@Excel(name = "广告组ID", width = 15)
+    @ApiModelProperty(value = "广告组ID")
+	private Long unitId;
+	/**统计日期*/
+	@Excel(name = "统计日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "统计日期")
+	private Date statDate;
+	/**行为成本*/
+	@Excel(name = "行为成本", width = 15)
+    @ApiModelProperty(value = "行为成本")
+	private java.math.BigDecimal actionCost;
+	/**激活成本*/
+	@Excel(name = "激活成本", width = 15)
+    @ApiModelProperty(value = "激活成本")
+	private java.math.BigDecimal activationCost;
+	/**注册成本*/
+	@Excel(name = "注册成本", width = 15)
+    @ApiModelProperty(value = "注册成本")
+	private java.math.BigDecimal registerCost;
+	/**付费成本*/
+	@Excel(name = "付费成本", width = 15)
+    @ApiModelProperty(value = "付费成本")
+	private java.math.BigDecimal payCost;
+	/**表单提交成本*/
+	@Excel(name = "表单提交成本", width = 15)
+    @ApiModelProperty(value = "表单提交成本")
+	private java.math.BigDecimal formCost;
+	/**完件成本*/
+	@Excel(name = "完件成本", width = 15)
+    @ApiModelProperty(value = "完件成本")
+	private java.math.BigDecimal finishedCost;
+	/**授信成本*/
+	@Excel(name = "授信成本", width = 15)
+    @ApiModelProperty(value = "授信成本")
+	private java.math.BigDecimal approvalCost;
+	/**首日ROI*/
+	@Excel(name = "首日ROI", width = 15)
+    @ApiModelProperty(value = "首日ROI")
+	private Double firstDayRoi;
+	/**ROI*/
+	@Excel(name = "ROI", width = 15)
+    @ApiModelProperty(value = "ROI")
+	private Double roi;
+	/**createTime*/
+	@Excel(name = "createTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "createTime")
+	private Date createTime;
+	/**updateTime*/
+	@Excel(name = "updateTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "updateTime")
+	private Date updateTime;
+	private String type;
+}

+ 22 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouCostGroupMapper.java

@@ -0,0 +1,22 @@
+package cn.com.ctop.kuaishou.modules.report.mapper;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouCostGroup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * 快手组级时报统计
+ *
+ * @author: jeecg-boot
+ * @date: 2020-10-30
+ * @cersion: V1.0
+ */
+public interface KuaishouCostGroupMapper extends BaseMapper<KuaishouCostGroup> {
+
+    List<KuaishouCostGroup> queryGroupCostInfo(String date);
+
+    int bulkInsert(List<KuaishouCostGroup> list);
+
+    List<KuaishouCostGroup> queryAccountCostInfo(String nowDate);
+}

+ 84 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouCostGroupMapper.xml

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.ctop.kuaishou.modules.report.mapper.KuaishouCostGroupMapper">
+    <select id="queryGroupCostInfo" resultType="cn.com.ctop.kuaishou.modules.report.entity.KuaishouCostGroup">
+        SELECT stat_date,account_id,unit_id,
+        CASE WHEN SUM(bclick) != 0 THEN
+        ROUND(SUM(charge)/SUM(bclick),4) ELSE 0 END AS 'actionCost',
+        CASE WHEN SUM(activation) != 0 THEN
+        ROUND(SUM(charge)/SUM(activation),4) ELSE 0 END AS activationCost,
+        CASE WHEN SUM(event_register) != 0 THEN
+        ROUND(SUM(charge)/SUM(event_register),4)  ELSE 0 END AS  registerCost,
+        CASE WHEN SUM(event_pay) != 0 THEN
+         ROUND(SUM(charge) / SUM(event_pay), 4) ELSE 0 END AS  payCost,
+        CASE WHEN SUM(form_count) != 0 THEN
+         ROUND(SUM(charge) / SUM(form_count),4) ELSE 0 END AS  formCost,
+        CASE WHEN SUM(event_jin_jian_app) != 0 THEN
+        ROUND(SUM(charge)/SUM(event_jin_jian_app) ,4) ELSE 0 END AS finishedCost,
+        CASE WHEN SUM(event_credit_grant_app) != 0 THEN
+        ROUND(SUM(charge)/SUM(event_credit_grant_app) ,4)ELSE 0 END AS approvalCost,
+        CASE WHEN SUM(charge) != 0 THEN
+        ROUND(SUM(event_pay_purchase_amount_first_day)/SUM(charge) ,4) ELSE 0 END AS firstDayRoi,
+        CASE WHEN SUM(charge) != 0 THEN
+        ROUND(SUM(event_pay_purchase_amount)/SUM(charge) ,4) ELSE 0 END AS roi,
+        "unit" AS type,
+        sysdate() AS createTime
+         FROM ctop_kuaishou_report_hourly_group
+        WHERE stat_date = #{date}
+        GROUP BY unit_id
+    </select>
+    <select id="queryAccountCostInfo" resultType="cn.com.ctop.kuaishou.modules.report.entity.KuaishouCostGroup">
+        SELECT stat_date,account_id,
+        CASE WHEN SUM(bclick) != 0 THEN
+        ROUND(SUM(charge)/SUM(bclick),4) ELSE 0 END AS 'actionCost',
+        CASE WHEN SUM(activation) != 0 THEN
+        ROUND(SUM(charge)/SUM(activation),4) ELSE 0 END AS activationCost,
+        CASE WHEN SUM(event_register) != 0 THEN
+        ROUND(SUM(charge)/SUM(event_register),4)  ELSE 0 END AS  registerCost,
+        CASE WHEN SUM(event_pay) != 0 THEN
+         ROUND(SUM(charge) / SUM(event_pay), 4) ELSE 0 END AS  payCost,
+        CASE WHEN SUM(form_count) != 0 THEN
+         ROUND(SUM(charge) / SUM(form_count),4) ELSE 0 END AS  formCost,
+        CASE WHEN SUM(event_jin_jian_app) != 0 THEN
+        ROUND(SUM(charge)/SUM(event_jin_jian_app) ,4) ELSE 0 END AS finishedCost,
+        CASE WHEN SUM(event_credit_grant_app) != 0 THEN
+        ROUND(SUM(charge)/SUM(event_credit_grant_app) ,4)ELSE 0 END AS approvalCost,
+        CASE WHEN SUM(charge) != 0 THEN
+        ROUND(SUM(event_pay_purchase_amount_first_day)/SUM(charge) ,4) ELSE 0 END AS firstDayRoi,
+        CASE WHEN SUM(charge) != 0 THEN
+        ROUND(SUM(event_pay_purchase_amount)/SUM(charge) ,4) ELSE 0 END AS roi,
+        "account" AS type,
+        sysdate() AS createTime
+         FROM ctop_kuaishou_report_hourly_group
+        WHERE stat_date = #{date}
+        GROUP BY account_id
+    </select>
+
+    <insert id="bulkInsert" parameterType="cn.com.ctop.kuaishou.modules.report.entity.KuaishouCostGroup">
+        insert into ctop_kuaishou_cost_group (
+        account_id, unit_id, type,stat_date, action_cost, activation_cost,
+        register_cost, pay_cost, form_cost,finished_cost,approval_cost,first_day_roi,roi,create_time
+        )
+        values
+        <foreach collection="list" item="it" separator=",">
+            (
+            #{it.accountId},
+            #{it.unitId},
+            #{it.type},
+            #{it.statDate},
+            #{it.actionCost},
+            #{it.activationCost},
+            #{it.registerCost},
+            #{it.payCost},
+            #{it.formCost},
+            #{it.finishedCost},
+            #{it.approvalCost},
+            #{it.firstDayRoi},
+            #{it.roi},
+            #{it.createTime}
+            )
+        </foreach>
+    </insert>
+
+
+</mapper>

+ 17 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouCostGroupService.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.kuaishou.modules.report.service;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouCostGroup;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手组级时报统计
+ * @Author: jeecg-boot
+ * @Date:   2020-10-30
+ * @Version: V1.0
+ */
+public interface IKuaishouCostGroupService extends IService<KuaishouCostGroup> {
+
+
+    void saveInfo();
+
+}

+ 42 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouCostGroupServiceImpl.java

@@ -0,0 +1,42 @@
+package cn.com.ctop.kuaishou.modules.report.service.impl;
+
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaishouCostGroup;
+import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouCostGroupMapper;
+import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyGroupMapper;
+import cn.com.ctop.kuaishou.modules.report.service.IKuaishouCostGroupService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.common.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 快手组级时报统计
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-10-30
+ */
+@Service
+public class KuaishouCostGroupServiceImpl extends ServiceImpl<KuaishouCostGroupMapper, KuaishouCostGroup> implements IKuaishouCostGroupService {
+
+    @Autowired
+    private KuaishouCostGroupMapper kuaishouCostGroupMapper;
+
+    @Autowired
+    private KuaishouReportHourlyGroupMapper kuaishouReportHourlyGroupMapper;
+
+    @Override
+    public void saveInfo() {
+        List<KuaishouCostGroup> grouplist = kuaishouCostGroupMapper.queryGroupCostInfo(DateUtils.getNowDate(DateUtils.WEB_FORMAT));
+        if (!Check.isNull(grouplist)) {
+            kuaishouCostGroupMapper.bulkInsert(grouplist);
+        }
+        List<KuaishouCostGroup> accountList = kuaishouCostGroupMapper.queryAccountCostInfo(DateUtils.getNowDate(DateUtils.WEB_FORMAT));
+        if (!Check.isNull(accountList)) {
+            kuaishouCostGroupMapper.bulkInsert(accountList);
+        }
+    }
+}

+ 0 - 3
module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatCheckinDataServiceImpl.java

@@ -76,9 +76,6 @@ public class WechatCheckinDataServiceImpl extends ServiceImpl<WechatCheckinDataM
                         String checkinTypeCode = "";
                         for (int i = 0; i < checkindata.size(); i++) {
                             JSONObject jsonObject = checkindata.getJSONObject(i);
-                            if ("JiLei".equals(userId)) {
-                                System.out.println(jsonObject);
-                            }
                             if (!Check.isNull(jsonObject)) {
                                 WechatCheckinData checkinData = new WechatCheckinData();
                                 checkinType = jsonObject.getString("checkin_type");

+ 1 - 6
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceAccountReportMapper.xml

@@ -355,7 +355,7 @@
 
     <select id="getBytedanceProjectInfo"
             resultType="cn.com.ctop.toutiao.modules.report.DTO.ByteDanceReportAccountDailyDTO">
-        select * from (
+
         select
         concat(#{startDate},'~',#{endDate}) as statDate,
         a.advertiser_id as 'accountId',
@@ -397,11 +397,6 @@
             #{item}
         </foreach>
         group by b.project_id
-        )m
-        <if test="yn = 1">
-            where
-            m.cost != 0
-        </if>
     </select>
 
     <select id="getRoleCodeByUserId" resultType="string">

+ 42 - 47
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/BytedanceAccountReportServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.toutiao.modules.report.service.impl;
 
+import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.common.module.vo.ByteDanceReportAccountDailyDTOEntity;
 import cn.com.ctop.common.module.vo.SheetInfoVo;
@@ -38,7 +39,7 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
     @Autowired
     BytedanceAccountReportMapper bytedanceAccountReportMapper;
 
-    private static final BigDecimal zero=BigDecimal.ZERO;
+    private static final BigDecimal zero = BigDecimal.ZERO;
 
     @Override
     public Map<String, Object> getSumDataBy(String mediaId, BigDecimal discount, JSONArray accounts, String startDate, String endDate) {
@@ -51,12 +52,12 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
                 return result;
             }
             before = bytedanceAccountReportMapper.queryTodaySumByHour(DateUtils.getAnotherDay(SystemDateConstant.yyyy_MM_dd, startDate, -1), after.getInteger("maxHour"), accounts);
-            if(before==null){
+            if (before == null) {
                 before = after;
             }
         } else {
             after = bytedanceAccountReportMapper.querySumByStartEndDate(endDate, startDate, accounts);
-            if(after==null){
+            if (after == null) {
                 return result;
             }
             before = after;
@@ -67,16 +68,16 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
 
     @Override
     public List<JSONObject> getChartDataBy(String mediaId, BigDecimal discount, JSONArray accounts, String startDate, String endDate) throws ParseException {
-        List<JSONObject> result=new ArrayList<>();
+        List<JSONObject> result = new ArrayList<>();
         String filedAll = JsonResourceUtil.joinAllFiled(AccountReportConstants.dicMapBy);
         if (startDate.equals(endDate)) {
             List<JSONObject> after = bytedanceAccountReportMapper.queryTodayDetailReportBy(filedAll, startDate, accounts);
             List<JSONObject> before = bytedanceAccountReportMapper.queryTodayDetailReportBy(filedAll, DateUtils.getAnotherDay(SystemDateConstant.yyyy_MM_dd, startDate, -1), accounts);
-            if(after.size()==0){
+            if (after.size() == 0) {
                 return result;
             }
-            if(before.size()==0){
-                before=nullDataHandle();
+            if (before.size() == 0) {
+                before = nullDataHandle();
             }
             List<JSONObject> afterDis = this.countDiscountCost(mediaId, discount, after);
             List<JSONObject> beforeDis = this.countDiscountCost(mediaId, discount, before);
@@ -84,13 +85,12 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
         } else {
             List<JSONObject> after;
             //判断是不是日期间隔大于半年
-            if(DateUtils.isMoreSixMonth(startDate,endDate)){
+            if (DateUtils.isMoreSixMonth(startDate, endDate)) {
                 after = bytedanceAccountReportMapper.queryDetailGroupMonthByDate(endDate, startDate, accounts);
-            }
-            else {
+            } else {
                 after = bytedanceAccountReportMapper.queryDetailByStartEndDate(endDate, startDate, accounts);
             }
-            if(after==null){
+            if (after == null) {
                 return result;
             }
             result = this.countDiscountCost(mediaId, discount, after);
@@ -110,9 +110,9 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
             result.add(beforeSum);
             result.add(countTotal(afterSum, beforeSum));
         } else {
-            if(accounts.size()>1){
+            if (accounts.size() > 1) {
                 result = bytedanceAccountReportMapper.querySumByDateGroupAccount(filedAll, endDate, startDate, accounts, target, order);
-            }else{
+            } else {
                 result = bytedanceAccountReportMapper.querySumByDateGroupAccountAndDate(filedAll, endDate, startDate, accounts, target, order);
             }
             result.add(bytedanceAccountReportMapper.queryAllSumByStartEndDate(filedAll, endDate, startDate, accounts));
@@ -187,45 +187,40 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
         JSONObject jsonObject = new JSONObject();
         after.forEach((k, v) -> {
             //去除没法计算的字段
-            if (k.equals("accountId") || k.equals("authName") || v.toString().contains("%")||before.getString(k).contains("%")) {
+            if (k.equals("accountId") || k.equals("authName") || v.toString().contains("%") || before.getString(k).contains("%")) {
                 jsonObject.put(k, "-");
             } else {
-                jsonObject.put(k, LinkUtils.countLink(after.getBigDecimal(k)==null?zero:after.getBigDecimal(k), before.getBigDecimal(k)==null?zero:before.getBigDecimal(k)));
+                jsonObject.put(k, LinkUtils.countLink(after.getBigDecimal(k) == null ? zero : after.getBigDecimal(k), before.getBigDecimal(k) == null ? zero : before.getBigDecimal(k)));
             }
         });
         return jsonObject;
     }
 
     @Override
-    public PageInfo<ByteDanceReportAccountDailyDTO> getBytedanceSaleProjectInfo(String startDate, String endDate, List<Long> projectList, Integer pageNum, Integer pageSize, String sort, Integer yn){
+    public PageInfo<ByteDanceReportAccountDailyDTO> getBytedanceSaleProjectInfo(String startDate, String endDate, List<Long> projectList, Integer pageNum, Integer pageSize, String sort, Integer yn) {
 
-        if(projectList==null || projectList.size()==0){
+        if (Check.isNull(projectList)) {
             LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
             String userId = sysUser.getId();
-            //String userId = "388e787edd294ecfb9243fe176a3ae56";
             String roleCode = bytedanceAccountReportMapper.getRoleCodeByUserId(userId);
-
             List<Long> mediaIds = new ArrayList<>();
             mediaIds.add(1L);
             mediaIds.add(3L);
-
-            if("admin".equals(roleCode)){
+            if ("admin".equals(roleCode)) {
                 projectList = bytedanceAccountReportMapper.queryProjectInfoByAdmin(mediaIds);
-            }else{
-                projectList = bytedanceAccountReportMapper.getSaleProjects(userId,mediaIds);
+            } else {
+                projectList = bytedanceAccountReportMapper.getSaleProjects(userId, mediaIds);
             }
         }
-
-        PageHelper.startPage(pageNum,pageSize);
+        PageHelper.startPage(pageNum, pageSize);
         List<ByteDanceReportAccountDailyDTO> p = bytedanceAccountReportMapper.getBytedanceProjectInfo(startDate, endDate, projectList, yn);
-
         return new PageInfo<>(p);
     }
 
     @Override
     public SheetInfoVo getBytedanceSaleProjectInfoSheetVO(String startDate, String endDate, List<Long> projectList, Integer pageNum, Integer pageSize, String sort, Integer yn) {
         SheetInfoVo vo = new SheetInfoVo<ByteDanceReportAccountDailyDTOEntity>();
-        if(projectList==null || projectList.size()==0){
+        if (Check.isNull(projectList)) {
             LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
             String userId = sysUser.getId();
             String roleCode = bytedanceAccountReportMapper.getRoleCodeByUserId(userId);
@@ -234,14 +229,14 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
             mediaIds.add(1L);
             mediaIds.add(3L);
 
-            if("admin".equals(roleCode)){
+            if ("admin".equals(roleCode)) {
                 projectList = bytedanceAccountReportMapper.queryProjectInfoByAdmin(mediaIds);
-            }else{
-                projectList = bytedanceAccountReportMapper.getSaleProjects(userId,mediaIds);
+            } else {
+                projectList = bytedanceAccountReportMapper.getSaleProjects(userId, mediaIds);
             }
         }
 
-        PageHelper.startPage(pageNum,pageSize);
+        PageHelper.startPage(pageNum, pageSize);
         List<ByteDanceReportAccountDailyDTOEntity> dtos = bytedanceAccountReportMapper.getBytedanceProjectInfoEntity(startDate, endDate, projectList, yn);
         vo.setSheetName("头条销售报表");
         vo.setDetails(dtos);
@@ -249,7 +244,7 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
     }
 
     @Override
-    public PageInfo<ByteDanceReportAccountDailyDTO> getBytedanceAccountInfoByProjectId(String startDate, String endDate, Long projectId, Integer pageNo, Integer pageSize, String sort, Integer yn){
+    public PageInfo<ByteDanceReportAccountDailyDTO> getBytedanceAccountInfoByProjectId(String startDate, String endDate, Long projectId, Integer pageNo, Integer pageSize, String sort, Integer yn) {
 
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         //String userId = "e9ca23d68d884d4ebb19d07889727dae";
@@ -257,33 +252,33 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
         String roleCode = bytedanceAccountReportMapper.getRoleCodeByUserId(userId);
 
         List<Long> accountIds = null;
-        if(projectId == null){
-            if("admin".equals(roleCode)){
+        if (projectId == null) {
+            if ("admin".equals(roleCode)) {
                 accountIds = bytedanceAccountReportMapper.getUserProjectAccountIdsByAdmin();
-            }else {
+            } else {
                 accountIds = bytedanceAccountReportMapper.getSaleProjectAccountIds(userId);
             }
         }
 
-        if(StringUtils.isBlank(sort)){
+        if (StringUtils.isBlank(sort)) {
             sort = "cost-";
         }
         sort = sort.replace("-", " desc,").replace("+", " asc,");  //sort=id-name+age+
         sort = sort.substring(0, sort.length() - 1);
-        PageHelper.startPage(pageNo,pageSize,sort);
-        return new PageInfo<>(bytedanceAccountReportMapper.getBytedanceAccountInfoByProjectId(startDate,endDate,projectId,accountIds,yn));
+        PageHelper.startPage(pageNo, pageSize, sort);
+        return new PageInfo<>(bytedanceAccountReportMapper.getBytedanceAccountInfoByProjectId(startDate, endDate, projectId, accountIds, yn));
     }
 
-    private List<JSONObject> nullDataHandle(){
-        List<JSONObject> objectList= new ArrayList<>();
+    private List<JSONObject> nullDataHandle() {
+        List<JSONObject> objectList = new ArrayList<>();
         JSONObject jsonObject;
-        for(int i=0;i<24;i++){
-            jsonObject=new JSONObject();
-            jsonObject.put("cost",0);
-            jsonObject.put("showNum",0);
-            jsonObject.put("click",0);
-            jsonObject.put("convertNum",0);
-            jsonObject.put("statHour",i);
+        for (int i = 0; i < 24; i++) {
+            jsonObject = new JSONObject();
+            jsonObject.put("cost", 0);
+            jsonObject.put("showNum", 0);
+            jsonObject.put("click", 0);
+            jsonObject.put("convertNum", 0);
+            jsonObject.put("statHour", i);
             objectList.add(jsonObject);
         }
         return objectList;

+ 1 - 1
pom.xml

@@ -13,7 +13,6 @@
         <relativePath/>
     </parent>
 
-
     <modules>
         <module>jeecg-boot-base-common</module>
         <module>module-common</module>
@@ -22,6 +21,7 @@
         <module>module-kuaishou</module>
         <module>module-toutiao</module>
         <module>module-shiwan</module>
+        <module>module-alarm</module>
         <module>module-media</module>
         <module>module-ctop</module>
         <module>performance-appraisal</module>