浏览代码

Merge branch 'master_material' into master_product

# Conflicts:
#	jeecg-boot-module-system/src/main/resources/application-dev.yml
#	jeecg-boot-module-system/src/main/resources/jeecg/jeecg_database.properties
yumeng 4 年之前
父节点
当前提交
165af90ac1
共有 35 个文件被更改,包括 2044 次插入27 次删除
  1. 13 0
      jeecg-boot-module-system/pom.xml
  2. 236 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/JhsBakendDataController.java
  3. 45 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/KuaishouChannelRegInfoController.java
  4. 6 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UserAllocationController.java
  5. 55 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/JhsBakendData.java
  6. 21 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/JhsBakendDataMapper.java
  7. 60 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/JhsBakendDataMapper.xml
  8. 21 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IJhsBakendDataService.java
  9. 58 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/JhsBakendDataServiceImpl.java
  10. 70 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/excelutil/JhsBakendDataExcelListener.java
  11. 132 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/excelutil/entity/JhsBakendDataEntity.java
  12. 47 18
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  13. 0 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/BatchController.java
  14. 24 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouReportDailyMaterialMapper.java
  15. 132 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouReportDailyMaterialMapper.xml
  16. 14 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaiShouReportDailyMaterialService.java
  17. 27 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouDailyReportTaskServiceImpl.java
  18. 37 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouHistoryReportTaskServiceImpl.java
  19. 19 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouReportDailyMaterialServiceImpl.java
  20. 419 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaiShouReportDailyMaterial.java
  21. 34 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaiShouReportDailyMaterialVo.java
  22. 13 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/VideoGetvo.java
  23. 50 0
      module-oa/pom.xml
  24. 15 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/constant/QYWxConstant.java
  25. 248 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatDepartmentController.java
  26. 69 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatDepartment.java
  27. 15 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatDepartmentMapper.java
  28. 5 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatDepartmentMapper.xml
  29. 14 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatDepartmentService.java
  30. 7 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatTokenService.java
  31. 4 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatUserInfoService.java
  32. 82 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatDepartmentServiceImpl.java
  33. 43 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatTokenServiceImpl.java
  34. 8 0
      module-oa/src/main/java/cn/com/ctop/oa/modules/service/impl/WechatUserInfoServiceImpl.java
  35. 1 0
      pom.xml

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

@@ -99,6 +99,13 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
+            <groupId>cn.com.ctop</groupId>
+            <artifactId>module-oa</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>
@@ -176,6 +183,12 @@
             <artifactId>pagehelper</artifactId>
             <version>5.1.11</version>
         </dependency>
+        <dependency>
+            <groupId>org.jeecgframework.boot</groupId>
+            <artifactId>module-oa</artifactId>
+            <version>2.0.2</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>

+ 236 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/JhsBakendDataController.java

@@ -0,0 +1,236 @@
+package org.jeecg.modules.ctop.controller;
+
+import com.alibaba.excel.event.AnalysisEventListener;
+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.jeecg.modules.ctop.entity.JhsBakendData;
+import org.jeecg.modules.ctop.service.IJhsBakendDataService;
+import org.jeecg.modules.excelutil.ExcelUtils;
+import org.jeecg.modules.excelutil.JhsBakendDataExcelListener;
+import org.jeecg.modules.excelutil.entity.JhsBakendDataEntity;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+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.FileInputStream;
+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
+ * @date   2020-09-07
+ * @version V1.0
+ */
+@Slf4j
+@Api(tags="聚划算后端数据")
+@RestController
+@RequestMapping("/okr/jhsBakendData")
+public class JhsBakendDataController {
+	@Autowired
+	private IJhsBakendDataService jhsBakendDataService;
+
+	/**
+	  * 分页列表查询
+	 * @param jhsBakendData
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<JhsBakendData>> queryPageList(JhsBakendData jhsBakendData,
+													  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+													  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+													  HttpServletRequest req) {
+		Result<IPage<JhsBakendData>> result = new Result<>();
+		QueryWrapper<JhsBakendData> queryWrapper = QueryGenerator.initQueryWrapper(jhsBakendData, req.getParameterMap());
+		Page<JhsBakendData> page = new Page<JhsBakendData>(pageNo, pageSize);
+		IPage<JhsBakendData> pageList = jhsBakendDataService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	  *   添加
+	 * @param jhsBakendData
+	 * @return
+	 */
+	@ApiOperation(value="聚划算后端数据-添加", notes="聚划算后端数据-添加")
+	@PostMapping(value = "/add")
+	public Result<JhsBakendData> add(@RequestBody JhsBakendData jhsBakendData) {
+		Result<JhsBakendData> result = new Result<>();
+		try {
+			jhsBakendDataService.save(jhsBakendData);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 * @param jhsBakendData
+	 * @return
+	 */
+	@ApiOperation(value="聚划算后端数据-编辑", notes="聚划算后端数据-编辑")
+	@PutMapping(value = "/edit")
+	public Result<JhsBakendData> edit(@RequestBody JhsBakendData jhsBakendData) {
+		Result<JhsBakendData> result = new Result<JhsBakendData>();
+		JhsBakendData jhsBakendDataEntity = jhsBakendDataService.getById(jhsBakendData.getId());
+		if(jhsBakendDataEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = jhsBakendDataService.updateById(jhsBakendData);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="聚划算后端数据-通过id删除", notes="聚划算后端数据-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			jhsBakendDataService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@ApiOperation(value="聚划算后端数据-批量删除", notes="聚划算后端数据-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<JhsBakendData> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<JhsBakendData> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.jhsBakendDataService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="聚划算后端数据-通过id查询", notes="聚划算后端数据-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<JhsBakendData> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<JhsBakendData> result = new Result<>();
+		JhsBakendData jhsBakendData = jhsBakendDataService.getById(id);
+		if(jhsBakendData==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(jhsBakendData);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<JhsBakendData> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              JhsBakendData jhsBakendData = JSON.parseObject(deString, JhsBakendData.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(jhsBakendData, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<JhsBakendData> pageList = jhsBakendDataService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "聚划算后端数据列表");
+      mv.addObject(NormalExcelConstants.CLASS, JhsBakendData.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) {
+	  //1.读Excel
+	  MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+	  Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+	  for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+		  FileInputStream fis = null;
+		  try {
+			  MultipartFile file = entity.getValue();
+			  fis = (FileInputStream) file.getInputStream();
+			  AnalysisEventListener listener = new JhsBakendDataExcelListener();
+			  Boolean flag = ExcelUtils.readExcel(fis, JhsBakendDataEntity.class, listener);
+			  System.out.println("导入是否成功:" + flag);
+		  } catch (Exception e) {
+			  e.printStackTrace();
+		  } finally {
+			  if (fis != null) {
+				  try {
+					  fis.close();
+				  } catch (IOException e) {
+					  e.printStackTrace();
+				  }
+			  }
+		  }
+	  }
+	  return Result.ok("文件导入成功!");
+  }
+
+}

+ 45 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/KuaishouChannelRegInfoController.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.ctop.controller;
 
 import cn.com.ctop.common.module.annotation.AutoLog;
+import com.alibaba.excel.event.AnalysisEventListener;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -11,11 +12,20 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.modules.ctop.entity.KuaishouChannelRegInfo;
 import org.jeecg.modules.ctop.service.IKuaishouChannelRegInfoService;
+import org.jeecg.modules.excelutil.ExcelUtils;
+import org.jeecg.modules.excelutil.KuaishouChannelRegInfoExcelListener;
+import org.jeecg.modules.excelutil.entity.KuaishouChannelRegInfoEntity;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileInputStream;
+import java.io.IOException;
 import java.util.Arrays;
+import java.util.Map;
 
 /**
  * 快手渠道注册信息表
@@ -161,4 +171,39 @@ public class KuaishouChannelRegInfoController {
         }
         return result;
     }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        //1.读Excel
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            FileInputStream fis = null;
+            try {
+                MultipartFile file = entity.getValue();
+                fis = (FileInputStream) file.getInputStream();
+                AnalysisEventListener listener = new KuaishouChannelRegInfoExcelListener();
+                Boolean flag = ExcelUtils.readExcel(fis, KuaishouChannelRegInfoEntity.class, listener);
+                System.out.println("导入是否成功:" + flag);
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                if (fis != null) {
+                    try {
+                        fis.close();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+        return Result.ok("文件导入成功!");
+    }
 }

+ 6 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UserAllocationController.java

@@ -271,6 +271,7 @@ public class UserAllocationController {
             result.error500("未找到对应实体");
         } else {
             boolean ok = userAllocationService.updateById(userAllocation);
+            UserAllocation update = userAllocationService.getById(userAllocation.getId());
             QueryWrapper<ProjectMember> memberQueryWrapper = new QueryWrapper<>();
             memberQueryWrapper.eq("user_id", userAllocation.getUserId());
             memberQueryWrapper.eq("project_id", userAllocation.getProjectId());
@@ -278,18 +279,17 @@ public class UserAllocationController {
             ProjectMember member = memberMapper.selectOne(memberQueryWrapper);
             if (Check.isNull(member)) {
                 ProjectMember addMember = new ProjectMember();
-                addMember.setProjectId(userAllocation.getProjectId());
-                addMember.setProjectName(userAllocation.getProjectName());
-                addMember.setUserId(userAllocation.getUserId());
-                addMember.setUserName(userAllocation.getUserName());
-                String roleCode = sysRoleService.getRoleCodeByUserId(userAllocation.getUserId());
+                addMember.setProjectId(update.getProjectId());
+                addMember.setProjectName(update.getProjectName());
+                addMember.setUserId(update.getUserId());
+                addMember.setUserName(update.getUserName());
+                String roleCode = sysRoleService.getRoleCodeByUserId(update.getUserId());
                 if (!Check.isNull(roleCode)) {
                     addMember.setRoleCode(roleCode);
                 }
                 projectMemberService.save(addMember);
             }
 
-
             if (ok) {
                 result.success("修改成功!");
             }

+ 55 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/JhsBakendData.java

@@ -0,0 +1,55 @@
+package org.jeecg.modules.ctop.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.excelutil.entity.JhsBakendDataEntity;
+
+import java.util.Date;
+
+/**
+ * 聚划算后端数据
+ * @author jeecg-boot
+ * @date   2020-09-07
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_jhs_bakend_data")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class JhsBakendData {
+
+	@TableId
+	private String id;
+	private String stateDate;
+	private String productLine;
+	private String taskName;
+	private String clientName;
+	private String channelId;
+	private String channelName;
+	private String adId;
+	private Long pageView;
+	private Long dealNumber;
+	private Date createTime;
+	private Date updateTime;
+
+	public JhsBakendData(JhsBakendDataEntity dataEntity) {
+		this.adId = dataEntity.getAdId();
+		this.stateDate = dataEntity.getStateDate();
+		this.productLine = dataEntity.getProductLine();
+		this.taskName = dataEntity.getTaskName();
+		this.clientName = dataEntity.getClientName();
+		this.channelId = dataEntity.getChannelId();
+		this.channelName = dataEntity.getChannelName();
+		this.pageView = dataEntity.getPageView();
+		this.dealNumber = dataEntity.getDealNumber();
+		this.updateTime = new Date();
+		this.createTime = new Date();
+		this.id = adId+stateDate;
+	}
+
+	public JhsBakendData() {
+	}
+}

+ 21 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/JhsBakendDataMapper.java

@@ -0,0 +1,21 @@
+package org.jeecg.modules.ctop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.ctop.entity.JhsBakendData;
+import org.jeecg.modules.excelutil.entity.JhsBakendDataEntity;
+
+import java.util.List;
+
+/**
+ * 聚划算后端数据
+ * @author: jeecg-boot
+ * @date:   2020-09-07
+ * @cersion: V1.0
+ */
+public interface JhsBakendDataMapper extends BaseMapper<JhsBakendData> {
+
+    void replaceData(@Param(value = "bakendData") JhsBakendData getData);
+
+    void replaceBatch(@Param(value = "datas")List<JhsBakendDataEntity> datas);
+}

+ 60 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/JhsBakendDataMapper.xml

@@ -0,0 +1,60 @@
+<?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="org.jeecg.modules.ctop.mapper.JhsBakendDataMapper">
+
+    <insert id="replaceData">
+        REPLACE INTO
+            ctop_jhs_bakend_data
+            (id,state_date,
+            product_line,
+            task_name,
+            client_name,
+            channel_id,
+            channel_name,
+            ad_id,
+            page_view,
+            deal_number)
+            VALUES(
+                #{bakendData.id},
+                #{bakendData.stateDate},
+                #{bakendData.productLine},
+                #{bakendData.taskName},
+                #{bakendData.clientName},
+                #{bakendData.channelId},
+                #{bakendData.channelName},
+                #{bakendData.adId},
+                #{bakendData.pageView},
+                #{bakendData.dealNumber}
+                )
+    </insert>
+    <insert id="replaceBatch">
+        REPLACE INTO
+        ctop_jhs_bakend_data
+        (id,state_date,
+        product_line,
+        task_name,
+        client_name,
+        channel_id,
+        channel_name,
+        ad_id,
+        page_view,
+        vistor,
+        deal_number)
+            values
+            <foreach collection="datas" item="bakendData" separator=",">
+                (
+                '${bakendData.adId}${bakendData.stateDate}${bakendData.clientName}${bakendData.channelId}',
+                #{bakendData.stateDate},
+                #{bakendData.productLine},
+                #{bakendData.taskName},
+                #{bakendData.clientName},
+                #{bakendData.channelId},
+                #{bakendData.channelName},
+                #{bakendData.adId},
+                #{bakendData.pageView},
+                #{bakendData.vistor},
+                #{bakendData.dealNumber}
+                )
+            </foreach>
+    </insert>
+</mapper>

+ 21 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IJhsBakendDataService.java

@@ -0,0 +1,21 @@
+package org.jeecg.modules.ctop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.ctop.entity.JhsBakendData;
+import org.jeecg.modules.excelutil.entity.JhsBakendDataEntity;
+
+import java.util.List;
+
+/**
+ * @Description: 聚划算后端数据
+ * @Author: jeecg-boot
+ * @Date:   2020-09-07
+ * @Version: V1.0
+ */
+public interface IJhsBakendDataService extends IService<JhsBakendData> {
+    public void saveOrUpdateEntity(JhsBakendDataEntity dataEntity);
+
+    void replaceEntity(JhsBakendDataEntity dataEntity);
+
+    void replaceEntityList(List<JhsBakendDataEntity> datas);
+}

+ 58 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/JhsBakendDataServiceImpl.java

@@ -0,0 +1,58 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.ctop.entity.JhsBakendData;
+import org.jeecg.modules.ctop.mapper.JhsBakendDataMapper;
+import org.jeecg.modules.ctop.service.IJhsBakendDataService;
+import org.jeecg.modules.excelutil.entity.JhsBakendDataEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 聚划算后端数据
+ * @author jeecg-boot
+ * @date   2020-09-07
+ * @version V1.0
+ */
+@Service
+public class JhsBakendDataServiceImpl extends ServiceImpl<JhsBakendDataMapper, JhsBakendData> implements IJhsBakendDataService {
+    @Autowired
+    private JhsBakendDataMapper bakendDataMapper;
+    @Override
+    public void saveOrUpdateEntity(JhsBakendDataEntity dataEntity) {
+        QueryWrapper<JhsBakendData> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("state_date", dataEntity.getStateDate());
+        queryWrapper.eq("ad_id", dataEntity.getAdId());
+        JhsBakendData getData = this.getOne(queryWrapper);
+        if (null == getData) {
+            getData = new JhsBakendData(dataEntity);
+            this.save(getData);
+        } else {
+            getData.setStateDate(dataEntity.getStateDate());
+            getData.setProductLine(dataEntity.getProductLine());
+            getData.setTaskName(dataEntity.getTaskName());
+            getData.setClientName(dataEntity.getClientName());
+            getData.setChannelId(dataEntity.getChannelId());
+            getData.setChannelName(dataEntity.getChannelName());
+            getData.setPageView(dataEntity.getPageView());
+            getData.setDealNumber(dataEntity.getDealNumber());
+            getData.setUpdateTime(new Date());
+            this.updateById(getData);
+        }
+    }
+
+    @Override
+    public void replaceEntity(JhsBakendDataEntity dataEntity) {
+        JhsBakendData getData = new JhsBakendData(dataEntity);
+        bakendDataMapper.replaceData(getData);
+    }
+
+    @Override
+    public void replaceEntityList(List<JhsBakendDataEntity> datas) {
+        bakendDataMapper.replaceBatch(datas);
+    }
+}

+ 70 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/excelutil/JhsBakendDataExcelListener.java

@@ -0,0 +1,70 @@
+package org.jeecg.modules.excelutil;
+
+import cn.com.ctop.common.module.utils.SpringUtils;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.ctop.service.impl.JhsBakendDataServiceImpl;
+import org.jeecg.modules.excelutil.entity.JhsBakendDataEntity;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class JhsBakendDataExcelListener extends AnalysisEventListener<JhsBakendDataEntity> {
+    //自定义用于暂时存储data。
+    //可以通过实例获取该值
+    private List<JhsBakendDataEntity> datas = new ArrayList<>();
+    private static final int BATCH_COUNT = 200;
+
+    @Override
+    public void invoke(JhsBakendDataEntity object, AnalysisContext context) {
+        //数据存储到list,供批量处理,或后续自己业务逻辑处理。
+        String date = object.getStateDate();
+        String formatDate = date.substring(0,4)+"-"+date.substring(4,6)+"-"+date.substring(6,8);
+        object.setStateDate(formatDate);
+        object.setVistor(object.getTaskName().split("-")[1]);
+        datas.add(object);
+        if(null!=datas&&datas.size()>=BATCH_COUNT){
+            saveDate();
+            datas.clear();
+        }
+    }
+
+    private void saveDate() {
+        JhsBakendDataServiceImpl dataService = SpringUtils.getApplicationContext().getBean(JhsBakendDataServiceImpl.class);
+        dataService.replaceEntityList(datas);
+    }
+
+    private void doSomething(Object object) {
+        //入库调用接口
+        JhsBakendDataEntity dataEntity = (JhsBakendDataEntity) object;
+        dataEntity.setCreateTime(new Date());
+        dataEntity.setUpdateTime(new Date());
+        String date = dataEntity.getStateDate();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+        try {
+            date = DateUtils.formatDate(dateFormat.parse(date));
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        dataEntity.setStateDate(date);
+        JhsBakendDataServiceImpl dataService = SpringUtils.getApplicationContext().getBean(JhsBakendDataServiceImpl.class);
+        dataService.replaceEntity(dataEntity);
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        // datas.clear();//解析结束销毁不用的资源
+    }
+
+    public List<JhsBakendDataEntity> getDatas() {
+        return datas;
+    }
+
+    public void setDatas(List<JhsBakendDataEntity> datas) {
+        this.datas = datas;
+    }
+}

+ 132 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/excelutil/entity/JhsBakendDataEntity.java

@@ -0,0 +1,132 @@
+package org.jeecg.modules.excelutil.entity;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.metadata.BaseRowModel;
+
+import java.util.Date;
+
+/**
+ * 聚划算后端数据
+ */
+public class JhsBakendDataEntity extends BaseRowModel {
+    @ExcelProperty(index = 0, value = "日期")
+    private String stateDate;
+    @ExcelProperty(index = 1, value = "业务线")
+    private String productLine;
+    @ExcelProperty(index = 2, value = "任务名称")
+    private String taskName;
+    @ExcelProperty(index = 3, value = "客户端")
+    private String clientName;
+    @ExcelProperty(index = 4, value = "渠道id")
+    private String channelId;
+    @ExcelProperty(index = 5, value = "渠道名称")
+    private String channelName;
+    @ExcelProperty(index = 6, value = "adid")
+    private String adId;
+    @ExcelProperty(index = 7, value = "页面访问UV x")
+    private Long pageView;
+    @ExcelProperty(index = 8, value = "成交笔数 y")
+    private Long dealNumber;
+    private String vistor;
+    private Date createTime;
+    private Date updateTime;
+
+    public JhsBakendDataEntity() {
+    }
+
+    public String getStateDate() {
+        return stateDate;
+    }
+
+    public void setStateDate(String stateDate) {
+        this.stateDate = stateDate;
+    }
+
+    public String getProductLine() {
+        return productLine;
+    }
+
+    public void setProductLine(String productLine) {
+        this.productLine = productLine;
+    }
+
+    public String getTaskName() {
+        return taskName;
+    }
+
+    public void setTaskName(String taskName) {
+        this.taskName = taskName;
+    }
+
+    public String getClientName() {
+        return clientName;
+    }
+
+    public void setClientName(String clientName) {
+        this.clientName = clientName;
+    }
+
+    public String getChannelId() {
+        return channelId;
+    }
+
+    public void setChannelId(String channelId) {
+        this.channelId = channelId;
+    }
+
+    public String getChannelName() {
+        return channelName;
+    }
+
+    public void setChannelName(String channelName) {
+        this.channelName = channelName;
+    }
+
+    public String getAdId() {
+        return adId;
+    }
+
+    public void setAdId(String adId) {
+        this.adId = adId;
+    }
+
+    public Long getPageView() {
+        return pageView;
+    }
+
+    public void setPageView(Long pageView) {
+        this.pageView = pageView;
+    }
+
+    public Long getDealNumber() {
+        return dealNumber;
+    }
+
+    public void setDealNumber(Long dealNumber) {
+        this.dealNumber = dealNumber;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getVistor() {
+        return vistor;
+    }
+
+    public void setVistor(String vistor) {
+        this.vistor = vistor;
+    }
+}

+ 47 - 18
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -10,11 +10,14 @@ import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.message.handle.impl.EmailSendMsgHandle;
 import cn.com.ctop.common.module.service.*;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouDailyReportTaskService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouHistoryReportTaskService;
 import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
-import cn.com.ctop.kuaishou.modules.report.service.IKuaiShouDailyAgentService;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportDailyAgentService;
+import cn.com.ctop.oa.modules.service.IWechatDepartmentService;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
 import cn.com.ctop.toutiao.modules.report.service.IReportService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
 import org.junit.Test;
@@ -42,17 +45,45 @@ public class SampleTest {
     @Autowired
     private IKuaishouReportDailyAgentService kuaishouReportDailyAgentService;
     @Autowired
-    private IKuaiShouDailyAgentService kuaiShouDailyAgentService;
-    @Autowired
     private IReportService reportService;
     @Autowired
-    private IByteDanceAdvertiserDataService byteDanceAdvertiserDataService;
+    private IUserAllocationService userAllocationService;
+    @Autowired
+    private IByteDanceAdvertiserDataService advertiserDataService;
+    @Autowired
+    private IKuaiShouHistoryReportTaskService kuaiShouHistoryReportTaskService;
+    @Autowired
+    private IKuaiShouDailyReportTaskService dailyReportTaskService;
+
+    @Autowired
+    private IWechatDepartmentService wechatDepartment;
+
+
+    @Test
+    public void getDepartment() {
+        wechatDepartment.getDepartment();
+
+    }
+
 
     @Test
     public void loadBytedanceCreativeData() {
-        byteDanceAdvertiserDataService.advertiserList("2093115cd521740b024a5811d361712e0b5c3303");
+        QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("media_id", 2);
+        List<CtopOauthToken> list = oauthTokenService.list(queryWrapper);
+        for (CtopOauthToken token : list) {
+            kuaiShouHistoryReportTaskService.createTask(token.getAccountId(), token.getAccessToken(), "2020-03-09", "2020-09-08", "history");
+
+        }
+
+    }
+
+    @Test
+    public void getTaskList() {
+        kuaiShouHistoryReportTaskService.getTaskList();
     }
 
+
     @Autowired
     private IBindAccountLoginService bindAccountLoginService;
     @Autowired
@@ -122,21 +153,19 @@ public class SampleTest {
 
     @Test
     public void loadKuaishouAgentData() {
-//        for(int i=0;i<20;i++){
-//            String currentDate = DateUtils.formatDate(DateUtils.addDay(new Date(),-i));
-//            kuaishouReportDailyAgentService.getReport(currentDate,DateUtils.getNowDate("yyyy-MM-dd"));
-//        }
-//
         kuaishouReportDailyAgentService.loginAgent();
-        try {
-            for (int i = 1; i < 30; i++) {
-                kuaishouReportDailyAgentService.getAccount(i);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
+        for (int i = 0; i < 20; i++) {
+            String currentDate = DateUtils.formatDate(DateUtils.addDay(new Date(), -i));
+            kuaishouReportDailyAgentService.getReport(currentDate, DateUtils.getNowDate("yyyy-MM-dd"));
         }
-//        String currentDate = D  ateUtils.formatDate(DateUtils.addDay(new Date(),-1));
-//        kuaishouReportDailyAgentService.getReport(currentDate,DateUtils.getNowDate("yyyy-MM-dd"));
+//
+//        try {
+//            for (int i = 1; i < 30; i++) {
+//                kuaishouReportDailyAgentService.getAccount(i);
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
     }
 
     @Autowired

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

@@ -1131,7 +1131,6 @@ public class BatchController {
                 queryWrapper.between("stat_date", startDate, endDate);
             }
             queryWrapper.orderByDesc("stat_date");
-            queryWrapper.orderByDesc("photo_id");
             queryWrapper.groupBy("signature");
             Page<KuaiShouVideoGet> page = new Page<>(pageNo, pageSize);
             IPage<KuaiShouVideoGet> pageList = kuaiShouVideoGetService.page(page, queryWrapper);

+ 24 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouReportDailyMaterialMapper.java

@@ -0,0 +1,24 @@
+package cn.com.ctop.kuaishou.modules.batch.mapper;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaiShouReportDailyMaterial;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaiShouReportDailyMaterialVo;
+import cn.com.ctop.kuaishou.modules.report.entity.VideoGetvo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 素材
+ *
+ * @author: jeecg-boot
+ * @date: 2020-09-09
+ * @cersion: V1.0
+ */
+public interface KuaiShouReportDailyMaterialMapper extends BaseMapper<KuaiShouReportDailyMaterial> {
+    void loadMaterialDailyReport(@Param("accountId") Long accountId, @Param("localPath") String localPath);
+
+    List<KuaiShouReportDailyMaterialVo> getPhotoList(@Param("accountId") Long accountId, @Param("statDate") String statDate);
+
+    VideoGetvo getVideoGetByPhotoId(Long photoId);
+}

+ 132 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouReportDailyMaterialMapper.xml

@@ -0,0 +1,132 @@
+<?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.batch.mapper.KuaiShouReportDailyMaterialMapper">
+
+    <insert id="loadMaterialDailyReport">
+		LOAD DATA local INFILE  #{localPath}
+	    REPLACE INTO TABLE ctop_kuaishou_report_daily_material CHARACTER SET utf8mb4
+		FIELDS TERMINATED BY ',' enclosed by '"' LINES TERMINATED BY '\n'
+		IGNORE 1 LINES
+		(photo_id,
+		image_token,
+		cover_url,
+		photo_url,
+		@photo_caption,
+		creative_material_type_string,
+        ad_scene,
+        charge,
+        photo_show,
+        aclick,
+        bclick,
+        photo_share,
+        photo_comment,
+        photo_like,
+        follow,
+        cancel_follow,
+        report,
+        block,
+        negative,
+        download_started,
+        download_completed,
+        activation,
+        submit,
+        stat_date,
+        @stat_hour,
+        photo_click,
+        photo_click_ratio,
+        action_ratio,
+        impression_1k_cost,
+        photo_click_cost,
+        @click_1k_cost,
+        action_cost,
+        event_pay_first_day,
+        event_pay_purchase_amount_first_day,
+        event_pay_first_day_roi,
+        event_pay,
+        event_pay_purchase_amount,
+        event_pay_roi,
+        event_register,
+        event_register_cost,
+        event_register_ratio,
+        event_jin_jian_app,
+        event_jin_jian_app_cost,
+        event_credit_grant_app,
+        event_credit_grant_app_cost,
+        event_credit_grant_app_ratio,
+        event_order_paid,
+        event_order_paid_purchase_amount,
+        event_order_paid_cost,
+        form_count,
+        form_cost,
+        form_action_ratio,
+        event_jin_jian_landing_page,
+        event_jin_jian_landing_page_cost,
+        event_credit_grant_landing_page,
+        event_credit_grant_landing_page_cost,
+        event_credit_grant_landing_ratio,
+        event_next_day_stay_cost,
+        event_next_day_stay_ratio,
+        event_next_day_stay,
+        play_3s_ratio,
+        @event_valid_clues,
+        @event_valid_clues_cost,
+        @ad_product_cnt,
+        @event_goods_view,
+        @merchant_reco_fans,
+        @event_order_amount_roi,
+        @event_goods_view_cost,
+        @merchant_reco_fans_cost,
+        @event_new_user_pay,
+        @event_new_user_pay_cost,
+        @event_new_user_pay_ratio,
+        @event_button_click,
+        @event_button_click_cost,
+        @event_button_click_ratio,
+        @play_5s_ratio,
+        @play_end_ratio,
+        @event_order_paid_roi,
+        @event_new_user_jinjian_app,
+        @event_new_user_jinjian_app_cost,
+        @event_new_user_jinjian_app_roi,
+        @event_new_user_credit_grant_app,
+        @event_new_user_credit_grant_app_cost,
+        @event_new_user_credit_grant_app_roi,
+        @event_new_user_jinjian_page,
+        @event_new_user_jinjian_page_cost,
+        @event_new_user_jinjian_page_roi,
+        @event_new_user_credit_grant_page,
+        @event_new_user_credit_grant_page_cost,
+        @event_new_user_credit_grant_page_roi,
+        @event_appoint_form,
+        @event_appoint_form_cost,
+        @event_appoint_form_ratio,
+        @event_appoint_jump_click,
+        @event_appoint_jump_click_cost,
+        @event_appoint_jump_click_ratio
+        )
+          set account_id = #{accountId}
+    </insert>
+
+    <select id="getPhotoList" resultType="cn.com.ctop.kuaishou.modules.report.entity.KuaiShouReportDailyMaterialVo">
+        select
+        id as id,
+        photo_id as photoId
+        from
+        ctop_kuaishou_report_daily_material
+        where account_id = #{accountId}
+        <if test="statDate != null and statDate != '' ">
+            and stat_date = #{statDate}
+        </if>
+    </select>
+
+    <select id="getVideoGetByPhotoId" resultType="cn.com.ctop.kuaishou.modules.report.entity.VideoGetvo">
+      select
+      signature as 'signature',
+      channel_type as 'channelType'
+      from ctop_kuaishou_video_get
+      where photo_id = #{photoId}
+      limit 1
+    </select>
+
+
+</mapper>

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

@@ -0,0 +1,14 @@
+package cn.com.ctop.kuaishou.modules.batch.service;
+
+import cn.com.ctop.kuaishou.modules.report.entity.KuaiShouReportDailyMaterial;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 素材
+ * @Author: jeecg-boot
+ * @Date: 2020-09-09
+ * @Version: V1.0
+ */
+public interface IKuaiShouReportDailyMaterialService extends IService<KuaiShouReportDailyMaterial> {
+
+}

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

@@ -3,7 +3,11 @@ package cn.com.ctop.kuaishou.modules.batch.service.impl;
 import cn.com.ctop.common.module.utils.*;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouDailyReportTask;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouDailyReportTaskMapper;
+import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouReportDailyMaterialMapper;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouDailyReportTaskService;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaiShouReportDailyMaterial;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaiShouReportDailyMaterialVo;
+import cn.com.ctop.kuaishou.modules.report.entity.VideoGetvo;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportDailyCampaignMapper;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportDailyCreativeMapper;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportDailyGroupMapper;
@@ -44,6 +48,8 @@ public class KuaiShouDailyReportTaskServiceImpl extends ServiceImpl<KuaiShouDail
 
     @Autowired
     private KuaishouReportDailyCreativeMapper reportDailyCreativeMapper;
+    @Autowired
+    private KuaiShouReportDailyMaterialMapper kuaishouReportDailyMaterialMapper;
 
     @Override
     public void formatCreativeDailyReportData(Long accountId, String statDate) {
@@ -132,6 +138,27 @@ public class KuaiShouDailyReportTaskServiceImpl extends ServiceImpl<KuaiShouDail
                     XxlJobLogger.log("下载文件,accountId:{}", task.getAccountId());
                     reportDailyCreativeMapper.loadProgramCreativeDailyReport(task.getAccountId(), localPath);
                     XxlJobLogger.log("下载结束,accountId:{}", task.getAccountId());
+                } else if (task.getViewType() == 5) {
+                    kuaishouReportDailyMaterialMapper.loadMaterialDailyReport(task.getAccountId(), localPath);
+
+                    List<KuaiShouReportDailyMaterialVo> list = kuaishouReportDailyMaterialMapper.getPhotoList(task.getAccountId(), task.getStatDate());
+                    if (!Check.isNull(list)) {
+                        for (KuaiShouReportDailyMaterialVo materialVo : list) {
+                            Long id = materialVo.getId();
+                            Long photoId = materialVo.getPhotoId();
+                            VideoGetvo videoGetvo = kuaishouReportDailyMaterialMapper.getVideoGetByPhotoId(photoId);
+                            if (!Check.isNull(videoGetvo)) {
+                                KuaiShouReportDailyMaterial material = new KuaiShouReportDailyMaterial();
+                                material.setId(id);
+                                material.setSignature(videoGetvo.getSignature());
+                                material.setChannelType(videoGetvo.getChannelType());
+                                kuaishouReportDailyMaterialMapper.updateById(material);
+                            }
+                        }
+
+                    }
+
+
                 }
             }
 

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

@@ -6,8 +6,12 @@ import cn.com.ctop.common.module.utils.*;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouDailyReportTask;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouHistoryReportTask;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouHistoryReportTaskMapper;
+import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouReportDailyMaterialMapper;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouDailyReportTaskService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouHistoryReportTaskService;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaiShouReportDailyMaterial;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaiShouReportDailyMaterialVo;
+import cn.com.ctop.kuaishou.modules.report.entity.VideoGetvo;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportDailyAccountMapper;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportDailyCampaignMapper;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportDailyCreativeMapper;
@@ -58,6 +62,9 @@ public class KuaiShouHistoryReportTaskServiceImpl extends ServiceImpl<KuaiShouHi
     @Autowired
     private IKuaiShouDailyReportTaskService dailyReportTaskService;
 
+    @Autowired
+    private KuaiShouReportDailyMaterialMapper kuaishouReportDailyMaterialMapper;
+
     @Override
     public void createTask(Long accountId, String token, String startDate, String endDate, String taskType) {
         if (Check.isNull(accountId) || Check.isNull(token)) {
@@ -74,6 +81,7 @@ public class KuaiShouHistoryReportTaskServiceImpl extends ServiceImpl<KuaiShouHi
             JSONObject taskParams = new JSONObject();
             taskParams.put("start_date", startDate);
             taskParams.put("end_date", endDate);
+
             if (null != taskType && taskType.equals(CtopAdConstant.KUAISHOU_LOAD_JOB_TYPE_DAILY)) {
                 if (Check.isNull(dailyTypeList)) {
                     getDailyTypeList();
@@ -84,6 +92,8 @@ public class KuaiShouHistoryReportTaskServiceImpl extends ServiceImpl<KuaiShouHi
                     param.put("task_name", taskName);
                     taskParams.put("view_type", type);
                     param.put("task_params", taskParams);
+                    System.err.println("入参:" + param.toJSONString());
+
                     String result = HttpUtils.kuaiShouhttpPostRequest(url, param.toJSONString(), headers);
                     JSONObject resultJson = JSONObject.parseObject(result);
                     if (!Check.isNull(resultJson)) {
@@ -113,6 +123,7 @@ public class KuaiShouHistoryReportTaskServiceImpl extends ServiceImpl<KuaiShouHi
                     param.put("task_name", taskName);
                     taskParams.put("view_type", type);
                     param.put("task_params", taskParams);
+                    System.err.println("入参:" + param.toJSONString());
                     String result = HttpUtils.kuaiShouhttpPostRequest(url, param.toJSONString(), headers);
                     JSONObject resultJson = JSONObject.parseObject(result);
                     log.info("请求状态返回数据:{}", resultJson);
@@ -223,7 +234,28 @@ public class KuaiShouHistoryReportTaskServiceImpl extends ServiceImpl<KuaiShouHi
                     reportDailyCreativeMapper.loadProgramCreativeDailyReport(task.getAccountId(), localPath);
                     XxlJobLogger.log("下载结束,accountId:{}", task.getAccountId());
                     // 程序化报表
+                } else if (task.getViewType() == 5) {
+                    kuaishouReportDailyMaterialMapper.loadMaterialDailyReport(task.getAccountId(), localPath);
+
+                    List<KuaiShouReportDailyMaterialVo> list = kuaishouReportDailyMaterialMapper.getPhotoList(task.getAccountId(), null);
+                    if (!Check.isNull(list)) {
+                        for (KuaiShouReportDailyMaterialVo materialVo : list) {
+                            Long id = materialVo.getId();
+                            Long photoId = materialVo.getPhotoId();
+                            VideoGetvo videoGetvo = kuaishouReportDailyMaterialMapper.getVideoGetByPhotoId(photoId);
+                            if (!Check.isNull(videoGetvo)) {
+                                KuaiShouReportDailyMaterial material = new KuaiShouReportDailyMaterial();
+                                material.setId(id);
+                                material.setSignature(videoGetvo.getSignature());
+                                material.setChannelType(videoGetvo.getChannelType());
+                                kuaishouReportDailyMaterialMapper.updateById(material);
+                            }
+                        }
+
+                    }
                 }
+
+
             }
             task.setTaskStatus(4);
 
@@ -238,11 +270,13 @@ public class KuaiShouHistoryReportTaskServiceImpl extends ServiceImpl<KuaiShouHi
 
     private void getHistoryTypeList() {
         historyTypeList = new ArrayList<>();
-        historyTypeList.add(1);
+        historyTypeList.add(5);
+       /* historyTypeList.add(1);
         historyTypeList.add(2);
         historyTypeList.add(3);
         historyTypeList.add(4);
-        historyTypeList.add(10);
+        historyTypeList.add(5);
+        historyTypeList.add(10);*/
     }
 
     private void getDailyTypeList() {
@@ -250,6 +284,7 @@ public class KuaiShouHistoryReportTaskServiceImpl extends ServiceImpl<KuaiShouHi
         dailyTypeList.add(2);
         dailyTypeList.add(3);
         dailyTypeList.add(4);
+        dailyTypeList.add(5);
         dailyTypeList.add(10);
     }
 

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

@@ -0,0 +1,19 @@
+package cn.com.ctop.kuaishou.modules.batch.service.impl;
+
+import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouReportDailyMaterialMapper;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouReportDailyMaterialService;
+import cn.com.ctop.kuaishou.modules.report.entity.KuaiShouReportDailyMaterial;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 素材
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-09-09
+ */
+@Service
+public class KuaiShouReportDailyMaterialServiceImpl extends ServiceImpl<KuaiShouReportDailyMaterialMapper, KuaiShouReportDailyMaterial> implements IKuaiShouReportDailyMaterialService {
+
+}

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

@@ -0,0 +1,419 @@
+package cn.com.ctop.kuaishou.modules.report.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-09-09
+ */
+@Data
+@TableName("ctop_kuaishou_report_daily_material")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_report_daily_material对象", description = "素材")
+public class KuaiShouReportDailyMaterial {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @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 photoId;
+    /**
+     * channelType
+     */
+    @Excel(name = "channelType", width = 15)
+    @ApiModelProperty(value = "channelType")
+    private Integer channelType;
+    /**
+     * signature
+     */
+    @Excel(name = "signature", width = 15)
+    @ApiModelProperty(value = "signature")
+    private String signature;
+    /**
+     * 封面token
+     */
+    @Excel(name = "封面token", width = 15)
+    @ApiModelProperty(value = "封面token")
+    private String imageToken;
+    /**
+     * 封面url
+     */
+    @Excel(name = "封面url", width = 15)
+    @ApiModelProperty(value = "封面url")
+    private String coverUrl;
+    /**
+     * 视频uel
+     */
+    @Excel(name = "视频uel", width = 15)
+    @ApiModelProperty(value = "视频uel")
+    private String photoUrl;
+    /**
+     * 素材类型
+     */
+    @Excel(name = "素材类型", width = 15)
+    @ApiModelProperty(value = "素材类型")
+    private String creativeMaterialTypeString;
+    /**
+     * 场景
+     */
+    @Excel(name = "场景", width = 15)
+    @ApiModelProperty(value = "场景")
+    private String adScene;
+    /**
+     * 花费(元)
+     */
+    @Excel(name = "花费(元)", width = 15)
+    @ApiModelProperty(value = "花费(元)")
+    private java.math.BigDecimal charge;
+    /**
+     * 曝光数
+     */
+    @Excel(name = "曝光数", width = 15)
+    @ApiModelProperty(value = "曝光数")
+    private Integer photoShow;
+    /**
+     * 素材曝光数
+     */
+    @Excel(name = "素材曝光数", width = 15)
+    @ApiModelProperty(value = "素材曝光数")
+    private Integer aclick;
+    /**
+     * 行为数
+     */
+    @Excel(name = "行为数", width = 15)
+    @ApiModelProperty(value = "行为数")
+    private Integer bclick;
+    /**
+     * 分享数
+     */
+    @Excel(name = "分享数", width = 15)
+    @ApiModelProperty(value = "分享数")
+    private Integer photoShare;
+    /**
+     * 评论数
+     */
+    @Excel(name = "评论数", width = 15)
+    @ApiModelProperty(value = "评论数")
+    private Integer photoComment;
+    /**
+     * 点赞数
+     */
+    @Excel(name = "点赞数", width = 15)
+    @ApiModelProperty(value = "点赞数")
+    private Integer photoLike;
+    /**
+     * 新增关注数
+     */
+    @Excel(name = "新增关注数", width = 15)
+    @ApiModelProperty(value = "新增关注数")
+    private Integer follow;
+    /**
+     * 取消关注数
+     */
+    @Excel(name = "取消关注数", width = 15)
+    @ApiModelProperty(value = "取消关注数")
+    private Integer cancelFollow;
+    /**
+     * 举报数
+     */
+    @Excel(name = "举报数", width = 15)
+    @ApiModelProperty(value = "举报数")
+    private Integer report;
+    /**
+     * 拉黑数
+     */
+    @Excel(name = "拉黑数", width = 15)
+    @ApiModelProperty(value = "拉黑数")
+    private Integer block;
+    /**
+     * 减少此类作品数
+     */
+    @Excel(name = "减少此类作品数", width = 15)
+    @ApiModelProperty(value = "减少此类作品数")
+    private Integer negative;
+    /**
+     * 应用下载数据-安卓下载开始数
+     */
+    @Excel(name = "应用下载数据-安卓下载开始数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-安卓下载开始数")
+    private Integer downloadStarted;
+    /**
+     * 应用下载数据-安卓下载完成数
+     */
+    @Excel(name = "应用下载数据-安卓下载完成数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-安卓下载完成数")
+    private Integer downloadCompleted;
+    /**
+     * 应用下载数据-激活数
+     */
+    @Excel(name = "应用下载数据-激活数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-激活数")
+    private Integer activation;
+    /**
+     * 提交按钮点击数
+     */
+    @Excel(name = "提交按钮点击数", width = 15)
+    @ApiModelProperty(value = "提交按钮点击数")
+    private Integer submit;
+    /**
+     * 日期
+     */
+    @Excel(name = "日期", width = 15)
+    @ApiModelProperty(value = "日期")
+    private String statDate;
+    /**
+     * 封面点击数
+     */
+    @Excel(name = "封面点击数", width = 15)
+    @ApiModelProperty(value = "封面点击数")
+    private Integer photoClick;
+    /**
+     * 封面点击率
+     */
+    @Excel(name = "封面点击率", width = 15)
+    @ApiModelProperty(value = "封面点击率")
+    private Double photoClickRatio;
+    /**
+     * 行为率
+     */
+    @Excel(name = "行为率", width = 15)
+    @ApiModelProperty(value = "行为率")
+    private Double actionRatio;
+    /**
+     * 平均千次曝光花费(元)
+     */
+    @Excel(name = "平均千次曝光花费(元)", width = 15)
+    @ApiModelProperty(value = "平均千次曝光花费(元)")
+    private java.math.BigDecimal impression1kCost;
+    /**
+     * 平均点击单价(元)
+     */
+    @Excel(name = "平均点击单价(元)", width = 15)
+    @ApiModelProperty(value = "平均点击单价(元)")
+    private java.math.BigDecimal photoClickCost;
+    /**
+     * 平均行为单价(元)
+     */
+    @Excel(name = "平均行为单价(元)", width = 15)
+    @ApiModelProperty(value = "平均行为单价(元)")
+    private java.math.BigDecimal actionCost;
+    /**
+     * 应用下载数据-首日付费次数
+     */
+    @Excel(name = "应用下载数据-首日付费次数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-首日付费次数")
+    private Integer eventPayFirstDay;
+    /**
+     * 应用下载数据-首日付费金额
+     */
+    @Excel(name = "应用下载数据-首日付费金额", width = 15)
+    @ApiModelProperty(value = "应用下载数据-首日付费金额")
+    private java.math.BigDecimal eventPayPurchaseAmountFirstDay;
+    /**
+     * 应用下载数据-首日ROI
+     */
+    @Excel(name = "应用下载数据-首日ROI", width = 15)
+    @ApiModelProperty(value = "应用下载数据-首日ROI")
+    private Double eventPayFirstDayRoi;
+    /**
+     * 应用下载数据-付费次数
+     */
+    @Excel(name = "应用下载数据-付费次数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付费次数")
+    private Integer eventPay;
+    /**
+     * 应用下载数据-付费金额
+     */
+    @Excel(name = "应用下载数据-付费金额", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付费金额")
+    private java.math.BigDecimal eventPayPurchaseAmount;
+    /**
+     * 应用下载数据-ROI
+     */
+    @Excel(name = "应用下载数据-ROI", width = 15)
+    @ApiModelProperty(value = "应用下载数据-ROI")
+    private Double eventPayRoi;
+    /**
+     * 应用下载数据-注册数
+     */
+    @Excel(name = "应用下载数据-注册数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-注册数")
+    private Integer eventRegister;
+    /**
+     * 应用下载数据-注册成本
+     */
+    @Excel(name = "应用下载数据-注册成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-注册成本")
+    private java.math.BigDecimal eventRegisterCost;
+    /**
+     * 应用下载数据-注册率
+     */
+    @Excel(name = "应用下载数据-注册率", width = 15)
+    @ApiModelProperty(value = "应用下载数据-注册率")
+    private Double eventRegisterRatio;
+    /**
+     * 应用下载数据-完件数
+     */
+    @Excel(name = "应用下载数据-完件数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-完件数")
+    private Integer eventJinJianApp;
+    /**
+     * 应用下载数据-完件成本
+     */
+    @Excel(name = "应用下载数据-完件成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-完件成本")
+    private java.math.BigDecimal eventJinJianAppCost;
+    /**
+     * 应用下载数据-授信数
+     */
+    @Excel(name = "应用下载数据-授信数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-授信数")
+    private Integer eventCreditGrantApp;
+    /**
+     * 应用下载数据-授信成本
+     */
+    @Excel(name = "应用下载数据-授信成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-授信成本")
+    private java.math.BigDecimal eventCreditGrantAppCost;
+    /**
+     * 应用下载数据-授信率
+     */
+    @Excel(name = "应用下载数据-授信率", width = 15)
+    @ApiModelProperty(value = "应用下载数据-授信率")
+    private Double eventCreditGrantAppRatio;
+    /**
+     * 应用下载数据-付款成功数
+     */
+    @Excel(name = "应用下载数据-付款成功数", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付款成功数")
+    private Integer eventOrderPaid;
+    /**
+     * 应用下载数据-付款成功金额
+     */
+    @Excel(name = "应用下载数据-付款成功金额", width = 15)
+    @ApiModelProperty(value = "应用下载数据-付款成功金额")
+    private java.math.BigDecimal eventOrderPaidPurchaseAmount;
+    /**
+     * 落地页数据-落地页完件数
+     */
+    @Excel(name = "落地页数据-落地页完件数", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页完件数")
+    private Integer eventJinJianLandingPage;
+    /**
+     * 落地页数据-落地页完件成本
+     */
+    @Excel(name = "落地页数据-落地页完件成本", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页完件成本")
+    private java.math.BigDecimal eventJinJianLandingPageCost;
+    /**
+     * 落地页数据-落地页授信数
+     */
+    @Excel(name = "落地页数据-落地页授信数", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页授信数")
+    private Integer eventCreditGrantLandingPage;
+    /**
+     * 落地页数据-落地页授信成本
+     */
+    @Excel(name = "落地页数据-落地页授信成本", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页授信成本")
+    private java.math.BigDecimal eventCreditGrantLandingPageCost;
+    /**
+     * 落地页数据-落地页授信率
+     */
+    @Excel(name = "落地页数据-落地页授信率", width = 15)
+    @ApiModelProperty(value = "落地页数据-落地页授信率")
+    private Double eventCreditGrantLandingRatio;
+    /**
+     * 应用下载数据-次留成本(仅支持分日查询)
+     */
+    @Excel(name = "应用下载数据-次留成本(仅支持分日查询)", width = 15)
+    @ApiModelProperty(value = "应用下载数据-次留成本(仅支持分日查询)")
+    private java.math.BigDecimal eventNextDayStayCost;
+    /**
+     * 应用下载数据-次留率(仅支持分日查询)
+     */
+    @Excel(name = "应用下载数据-次留率(仅支持分日查询)", width = 15)
+    @ApiModelProperty(value = "应用下载数据-次留率(仅支持分日查询)")
+    private Integer eventNextDayStayRatio;
+    /**
+     * 落地页数据-表单提交点击率
+     */
+    @Excel(name = "落地页数据-表单提交点击率", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交点击率")
+    private Double formActionRatio;
+    /**
+     * 应用下载数据-单次付款成本
+     */
+    @Excel(name = "应用下载数据-单次付款成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-单次付款成本")
+    private java.math.BigDecimal eventOrderPaidCost;
+    /**
+     * 应用下载数据-次留数(仅支持分日查询)
+     */
+    @Excel(name = "应用下载数据-次留数(仅支持分日查询)", width = 15)
+    @ApiModelProperty(value = "应用下载数据-次留数(仅支持分日查询)")
+    private Integer eventNextDayStay;
+    /**
+     * 落地页数据-表单提交单价
+     */
+    @Excel(name = "落地页数据-表单提交单价", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交单价")
+    private java.math.BigDecimal formCost;
+    /**
+     * 落地页数据-表单提交数
+     */
+    @Excel(name = "落地页数据-表单提交数", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交数")
+    private Integer formCount;
+    /**
+     * 3s播放率
+     */
+    @Excel(name = "3s播放率", width = 15)
+    @ApiModelProperty(value = "3s播放率")
+    private Double play3sRatio;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", 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 = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", 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 = "修改时间")
+    private Date updateTime;
+}

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

@@ -0,0 +1,34 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * 素材
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-09-09
+ */
+@Data
+
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class KuaiShouReportDailyMaterialVo {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @Excel(name = "计划ID", width = 15)
+    @ApiModelProperty(value = "计划ID")
+    private Long photoId;
+}

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

@@ -0,0 +1,13 @@
+package cn.com.ctop.kuaishou.modules.report.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+@Data
+public class VideoGetvo implements Serializable {
+    private String signature;
+    private Integer channelType;
+
+}

+ 50 - 0
module-oa/pom.xml

@@ -0,0 +1,50 @@
+<?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 http://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-oa</artifactId>
+    <name>module-oa</name>
+    <!-- FIXME change it to the project's website -->
+    <url>http://www.example.com</url>
+
+    <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>

+ 15 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/constant/QYWxConstant.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.oa.modules.constant;
+
+public class QYWxConstant {
+    public static final String QYWX_CORP_ID = "ww24b8a47826f5875f";
+    public static final Integer QYWX_AGENT_ID = 1000004;
+    public static final String QYWX_CORP_SECRET = "1YWGDtuZWrQDl6US3OPHG8_pvuNgP1TeUsOmfRk6GmQ";
+    public static final String QYWX_API_URL = "https://qyapi.weixin.qq.com";  //企业微信api域名
+    public static final String QYWX_DEPART_LIST = "https://qyapi.weixin.qq.com/cgi-bin/department/list";  //获取部门列表
+    public static final String QYWX_GET_TOKEN = "/cgi-bin/gettoken";  //获取token
+    public static final String QYWX_USER_SIMPLELIST = "/cgi-bin/user/simplelist";  //获取部门下员工简单信息
+    public static final String QYWX_USER_LIST = "/cgi-bin/user/list";  //获取部门下员工详细信息
+    public static final String QYWX_CONVERT_TO_OPENID = "/cgi-bin/user/convert_to_openid";  //获取部门下员工详细信息
+    public static final String QYWX_GET_LOGIN_USERINFO = "/cgi-bin/user/getuserinfo";  //获取当前登录员工USERID
+
+}

+ 248 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/controller/WechatDepartmentController.java

@@ -0,0 +1,248 @@
+package cn.com.ctop.oa.modules.controller;
+
+import cn.com.ctop.common.module.annotation.AutoLog;
+import cn.com.ctop.oa.modules.entity.WechatDepartment;
+import cn.com.ctop.oa.modules.service.IWechatDepartmentService;
+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.*;
+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-09-10
+ */
+@Slf4j
+@Api(tags = "部门列表")
+@RestController
+@RequestMapping("/oa/wechatDepartment")
+public class WechatDepartmentController {
+    @Autowired
+    private IWechatDepartmentService wechatDepartmentService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param wechatDepartment
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "部门列表-分页列表查询")
+    @ApiOperation(value = "部门列表-分页列表查询", notes = "部门列表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<WechatDepartment>> queryPageList(WechatDepartment wechatDepartment,
+                                                         @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                         @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                         HttpServletRequest req) {
+        Result<IPage<WechatDepartment>> result = new Result<>();
+        QueryWrapper<WechatDepartment> queryWrapper = QueryGenerator.initQueryWrapper(wechatDepartment, req.getParameterMap());
+        Page<WechatDepartment> page = new Page<WechatDepartment>(pageNo, pageSize);
+        IPage<WechatDepartment> pageList = wechatDepartmentService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param wechatDepartment
+     * @return
+     */
+    @AutoLog(value = "部门列表-添加")
+    @ApiOperation(value = "部门列表-添加", notes = "部门列表-添加")
+    @PostMapping(value = "/add")
+    public Result<WechatDepartment> add(@RequestBody WechatDepartment wechatDepartment) {
+        Result<WechatDepartment> result = new Result<>();
+        try {
+            wechatDepartmentService.save(wechatDepartment);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param wechatDepartment
+     * @return
+     */
+    @AutoLog(value = "部门列表-编辑")
+    @ApiOperation(value = "部门列表-编辑", notes = "部门列表-编辑")
+    @PutMapping(value = "/edit")
+    public Result<WechatDepartment> edit(@RequestBody WechatDepartment wechatDepartment) {
+        Result<WechatDepartment> result = new Result<WechatDepartment>();
+        WechatDepartment wechatDepartmentEntity = wechatDepartmentService.getById(wechatDepartment.getId());
+        if (wechatDepartmentEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = wechatDepartmentService.updateById(wechatDepartment);
+            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 {
+            wechatDepartmentService.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<WechatDepartment> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<WechatDepartment> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.wechatDepartmentService.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<WechatDepartment> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<WechatDepartment> result = new Result<>();
+        WechatDepartment wechatDepartment = wechatDepartmentService.getById(id);
+        if (wechatDepartment == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(wechatDepartment);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<WechatDepartment> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                WechatDepartment wechatDepartment = JSON.parseObject(deString, WechatDepartment.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(wechatDepartment, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<WechatDepartment> pageList = wechatDepartmentService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "部门列表列表");
+        mv.addObject(NormalExcelConstants.CLASS, WechatDepartment.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<WechatDepartment> listWechatDepartments = ExcelImportUtil.importExcel(file.getInputStream(), WechatDepartment.class, params);
+                wechatDepartmentService.saveBatch(listWechatDepartments);
+                return Result.ok("文件导入成功!数据行数:" + listWechatDepartments.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("文件导入失败!");
+    }
+
+}

+ 69 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/entity/WechatDepartment.java

@@ -0,0 +1,69 @@
+package cn.com.ctop.oa.modules.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+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 java.util.Date;
+
+/**
+ * 部门列表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-09-10
+ */
+@Data
+@TableName("ctop_wechat_department")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_wechat_department对象", description = "部门列表")
+public class WechatDepartment {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 部门名称
+     */
+    @Excel(name = "部门名称", width = 15)
+    @ApiModelProperty(value = "部门名称")
+    private String departName;
+    /**
+     * 部门id
+     */
+    @Excel(name = "部门id", width = 15)
+    @ApiModelProperty(value = "部门id")
+    private String departId;
+    /**
+     * 父部门id
+     */
+    @Excel(name = "父部门id", width = 15)
+    @ApiModelProperty(value = "父部门id")
+    private String parentId;
+    /**
+     * 排序
+     */
+    @Excel(name = "排序", width = 15)
+    @ApiModelProperty(value = "排序")
+    private String departOrder;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 15 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/WechatDepartmentMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.oa.modules.mapper;
+
+import cn.com.ctop.oa.modules.entity.WechatDepartment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 部门列表
+ *
+ * @author: jeecg-boot
+ * @date: 2020-09-10
+ * @cersion: V1.0
+ */
+public interface WechatDepartmentMapper extends BaseMapper<WechatDepartment> {
+
+}

+ 5 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/mapper/xml/WechatDepartmentMapper.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.oa.modules.mapper.WechatDepartmentMapper">
+
+</mapper>

+ 14 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatDepartmentService.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.oa.modules.service;
+
+import cn.com.ctop.oa.modules.entity.WechatDepartment;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 部门列表
+ * @Author: jeecg-boot
+ * @Date: 2020-09-10
+ * @Version: V1.0
+ */
+public interface IWechatDepartmentService extends IService<WechatDepartment> {
+    void getDepartment();
+}

+ 7 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatTokenService.java

@@ -0,0 +1,7 @@
+package cn.com.ctop.oa.modules.service;
+
+import java.util.Map;
+
+public interface IWechatTokenService {
+    Map<String, Object> getQYWXAccessToken();
+}

+ 4 - 0
module-oa/src/main/java/cn/com/ctop/oa/modules/service/IWechatUserInfoService.java

@@ -0,0 +1,4 @@
+package cn.com.ctop.oa.modules.service;
+
+public interface IWechatUserInfoService {
+}

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

@@ -0,0 +1,82 @@
+package cn.com.ctop.oa.modules.service.impl;
+
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.oa.modules.constant.QYWxConstant;
+import cn.com.ctop.oa.modules.entity.WechatDepartment;
+import cn.com.ctop.oa.modules.mapper.WechatDepartmentMapper;
+import cn.com.ctop.oa.modules.service.IWechatDepartmentService;
+import cn.com.ctop.oa.modules.service.IWechatTokenService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * 部门列表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-09-10
+ */
+@Service
+@Slf4j
+public class WechatDepartmentServiceImpl extends ServiceImpl<WechatDepartmentMapper, WechatDepartment> implements IWechatDepartmentService {
+    @Autowired
+    private IWechatTokenService tokenService;
+    @Autowired
+    private WechatDepartmentMapper wechatDepartmentMapper;
+
+
+    @Override
+    public void getDepartment() {
+        try {
+            Map<String, Object> qywxAccessToken = tokenService.getQYWXAccessToken();
+            if ((Integer) qywxAccessToken.get("code") != 0) {
+                log.error("企业微信获取token失败,返回信息:{}", qywxAccessToken.get("message"));
+                throw new Exception("企业微信获取token失败");
+            }
+
+
+            TreeMap<String, Object> params = new TreeMap<>();
+            params.put("access_token", qywxAccessToken.get("accessToken"));
+
+            String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_DEPART_LIST, null, params);
+            JSONObject resultJson = JSONObject.parseObject(resultStr);
+            System.err.println(resultJson);
+            Integer errcode = resultJson.getInteger("errcode");
+            if (errcode == 0) {
+                JSONArray department = resultJson.getJSONArray("department");
+                if (!Check.isNull(department)) {
+                    for (int i = 0; i < department.size(); i++) {
+                        JSONObject departJson = department.getJSONObject(i);
+                        if (!Check.isNull(departJson)) {
+                            WechatDepartment depart = new WechatDepartment();
+                            depart.setDepartId(departJson.getString("id"));
+                            depart.setDepartName(departJson.getString("name"));
+                            depart.setParentId(departJson.getString("parentid"));
+                            depart.setDepartOrder(departJson.getString("order"));
+                            wechatDepartmentMapper.insert(depart);
+                        }
+
+                    }
+
+                }
+
+
+            } else {
+                throw new Exception("企业微信获取部门列表");
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+    }
+}

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

@@ -0,0 +1,43 @@
+package cn.com.ctop.oa.modules.service.impl;
+
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.oa.modules.constant.QYWxConstant;
+import cn.com.ctop.oa.modules.service.IWechatTokenService;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+@Service
+public class WechatTokenServiceImpl implements IWechatTokenService {
+    public Map<String, Object> getQYWXAccessToken() {
+        Map<String, Object> returnMap = new HashMap<>();
+
+        try {
+            TreeMap<String, Object> params = new TreeMap<>();
+            params.put("corpid", QYWxConstant.QYWX_CORP_ID);
+            params.put("corpsecret", QYWxConstant.QYWX_CORP_SECRET);
+            String resultStr = HttpUtils.httpGetRequest(QYWxConstant.QYWX_API_URL + QYWxConstant.QYWX_GET_TOKEN, null, params);
+            //System.out.println(resultStr);
+            JSONObject resultJson = JSONObject.parseObject(resultStr);
+            Integer errcode = resultJson.getInteger("errcode");
+            if (errcode == 0) {
+                returnMap.put("code", 0);
+                returnMap.put("accessToken", resultJson.getString("access_token"));
+
+
+            } else {
+                returnMap.put("code", errcode);
+                returnMap.put("message", resultJson.getString("errmsg"));
+            }
+        } catch (Exception e) {
+            returnMap.put("code", -1);
+            returnMap.put("message", "系统错误");
+        }
+
+        return returnMap;
+    }
+
+}

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

@@ -0,0 +1,8 @@
+package cn.com.ctop.oa.modules.service.impl;
+
+import cn.com.ctop.oa.modules.service.IWechatUserInfoService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class WechatUserInfoServiceImpl implements IWechatUserInfoService {
+}

+ 1 - 0
pom.xml

@@ -29,6 +29,7 @@
         <module>module-job-bytedance</module>
         <module>module-job-kuaishou</module>
         <module>module-callback</module>
+        <module>module-oa</module>
     </modules>
 
     <distributionManagement>