Sfoglia il codice sorgente

Merge branch 'master' into master_product

# Conflicts:
#	jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UserAllocationController.java
#	jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
yumeng 4 anni fa
parent
commit
9d10159b1c
44 ha cambiato i file con 803 aggiunte e 376 eliminazioni
  1. 6 1
      jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/entity/ActZprocess.java
  2. 8 8
      jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/Impl/ActZprocessServiceImpl.java
  3. 63 34
      jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/ActBusinessController.java
  4. 17 7
      jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/ActivitiProcessController.java
  5. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  6. 8 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ActCustomFormController.java
  7. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ActFormDataController.java
  8. 0 234
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ActFormFieldController.java
  9. 31 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ActFormPorcessController.java
  10. 1 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialImageInfoController.java
  11. 143 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MusicKuaishouTypeController.java
  12. 0 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectMemberController.java
  13. 7 23
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UserAllocationController.java
  14. 0 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java
  15. 0 17
      jeecg-boot-module-system/src/main/resources/drools/rule.drl
  16. 0 17
      jeecg-boot-module-system/src/main/resources/drools/rule2.drl
  17. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActCustomForm.java
  18. 3 5
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormData.java
  19. 1 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/Project.java
  20. 3 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IProjectService.java
  21. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ProjectServiceImpl.java
  22. 1 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java
  23. 11 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/service/IKuaishouCrawlerService.java
  24. 14 5
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/service/impl/KuaishouCrawlerServiceImpl.java
  25. 106 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/entity/MusicInfoKuaishou.java
  26. 45 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/entity/MusicKuaishouType.java
  27. 14 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/mapper/MusicInfoKuaishouMapper.java
  28. 14 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/mapper/MusicKuaishouTypeMapper.java
  29. 5 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/mapper/xml/MusicInfoKuaishouMapper.xml
  30. 5 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/mapper/xml/MusicKuaishouTypeMapper.xml
  31. 14 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/service/IMusicInfoKuaishouService.java
  32. 14 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/service/IMusicKuaishouTypeService.java
  33. 18 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/service/impl/MusicInfoKuaishouServiceImpl.java
  34. 18 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/service/impl/MusicKuaishouTypeServiceImpl.java
  35. 128 0
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceMonitoringLinksCheckJob.java
  36. 4 4
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/impl/KuaishouWebInterfaceServiceImpl.java
  37. 2 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaiShouDailyAgentMapper.java
  38. 47 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaiShouDailyAgentMapper.xml
  39. 3 4
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportDailyAgentServiceImpl.java
  40. 5 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/entity/ByteDanceAdvertisePlan.java
  41. 2 2
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/IByteDanceAdvertisePlanService.java
  42. 13 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/ByteDanceAdvertisePlanServiceImpl.java
  43. 13 3
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/ByteDanceCreativeServiceImpl.java
  44. 1 5
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/controller/ByteDanceVideoReportDailyController.java

+ 6 - 1
jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/entity/ActZprocess.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.activiti.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;
@@ -26,7 +27,7 @@ import java.util.Date;
 @Accessors(chain = true)
 @ApiModel(value="act_z_process对象", description="流程定义扩展表")
 public class ActZprocess {
-    
+
 	/**id*/
 	@TableId(type = IdType.ID_WORKER_STR)
     @ApiModelProperty(value = "id")
@@ -103,4 +104,8 @@ public class ActZprocess {
 	@Excel(name = "授权的角色", width = 15)
     @ApiModelProperty(value = "授权的角色")
 	private String roles;
+
+	private Long customTableId;
+	@TableField(exist = false)
+	private String customTableName;
 }

+ 8 - 8
jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/Impl/ActZprocessServiceImpl.java

@@ -114,10 +114,8 @@ public class ActZprocessServiceImpl extends ServiceImpl<ActZprocessMapper, ActZp
             throw new JeecgBootException("没有业务表单数据");
         }
         /*表单数据写入*/
-        Map<String, Object> busiData = actBusinessService.getBaseMapper().getBusiData(tableId, tableName);
-        for (String key : busiData.keySet()) {
-            params.put(key,busiData.get(key));
-        }
+        params.put("data",tableName);
+
         ProcessInstance pi = runtimeService.startProcessInstanceById(actBusiness.getProcDefId(), actBusiness.getId(), params);
         // 设置流程实例名称
         runtimeService.setProcessInstanceName(pi.getId(), actBusiness.getTitle());
@@ -168,10 +166,12 @@ public class ActZprocessServiceImpl extends ServiceImpl<ActZprocessMapper, ActZp
     public void sendActMessage(LoginUser fromUser, LoginUser toUser, ActBusiness act, String taskName, Boolean sendMessage, Boolean sendSms, Boolean sendEmail) {
         String title = String.format("您有一个新的审批任务");
         Map<String, String> msgMap = Maps.newHashMap();
-                        /*流程名称:  ${bpm_name}
-催办任务:  ${bpm_task}
-催办时间 :    ${datetime}
-催办内容 :    ${remark}*/
+        /**
+         * 流程名称:  ${bpm_name}
+         * 催办任务:  ${bpm_task}
+         * 催办时间:  ${datetime}
+         * 催办内容:  ${remark}
+         */
         msgMap.put("bpm_name",act.getTitle());
         msgMap.put("bpm_task",taskName);
         msgMap.put("datetime", DateUtils.now());

+ 63 - 34
jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/ActBusinessController.java

@@ -1,8 +1,9 @@
 package org.jeecg.modules.activiti.web;
 
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.IdUtil;
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.activiti.engine.RuntimeService;
@@ -19,13 +20,11 @@ import org.jeecg.modules.activiti.service.Impl.ActBusinessServiceImpl;
 import org.jeecg.modules.activiti.service.Impl.ActZprocessServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
-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.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -52,27 +51,26 @@ public class ActBusinessController {
     ISysBaseApi sysBaseAPI;
     /*添加申请草稿状态*/
     @RequestMapping(value = "/add", method = RequestMethod.POST)
-    public Result add(HttpServletRequest request){
-        String procDefId = request.getParameter("procDefId");
-        String procDeTitle = request.getParameter("procDeTitle");
-        String tableName = request.getParameter("tableName");
-        /*保存业务表单数据到数据库表*/
-        String tableId = IdUtil.simpleUUID();
-        actBusinessService.saveApplyForm(tableId,request);
+    public Result add(@RequestBody JSONObject data){
+        String procDefId = data.getString("procDefId");
+        String procDeTitle = data.getString("procDeTitle");
+        Long tableId = data.getLong("tableId");
+        String formText = data.getString("formText");
+
         // 保存至我的申请业务
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String username = sysUser.getUsername();
         ActBusiness actBusiness = new ActBusiness();
         actBusiness.setUserId(username);
-        actBusiness.setTableId(tableId);
+        actBusiness.setTableId(tableId+"");
         actBusiness.setProcDefId(procDefId);
-        String title = request.getParameter(ActivitiConstant.titleKey);
+        String title = data.getString(ActivitiConstant.titleKey);
         if (StrUtil.isNotBlank(title)){
             actBusiness.setTitle(title);
         }else {
             actBusiness.setTitle(procDeTitle);
         }
-        actBusiness.setTableName(tableName);
+        actBusiness.setTableName(formText);
         actBusinessService.save(actBusiness);
         return Result.ok();
     }
@@ -99,14 +97,11 @@ public class ActBusinessController {
     /*通过id删除草稿状态申请*/
     @RequestMapping(value = "/delByIds", method = RequestMethod.POST)
     public Result delByIds(String ids){
-
         for(String id : ids.split(",")){
             ActBusiness actBusiness = actBusinessService.getById(id);
-            if(actBusiness.getStatus()!=ActivitiConstant.STATUS_TO_APPLY){
+            if(!actBusiness.getStatus().equals(ActivitiConstant.STATUS_TO_APPLY)){
                 return Result.error("删除失败, 仅能删除草稿状态的申请");
             }
-            // 删除关联业务表
-            actBusinessService.deleteBusiness(actBusiness.getTableName(), actBusiness.getTableId());
             actBusinessService.removeById(id);
         }
         return Result.ok("删除成功");
@@ -120,22 +115,13 @@ public class ActBusinessController {
             return Result.error("actBusiness表中该id不存在");
         }
         String tableId = actBusiness.getTableId();
-        String tableName = actBusiness.getTableName();
         act.setTableId(tableId);
-        Map<String, Object> busiData = actBusinessService.getBaseMapper().getBusiData(tableId, tableName);
-
-        if (MapUtil.isNotEmpty(busiData)&&busiData.get(ActivitiConstant.titleKey)!=null){
-            //如果表单里有 标题  更新一下
-            actBusiness.setTitle(busiData.get(ActivitiConstant.titleKey)+"");
-        }
         String processInstanceId = actZprocessService.startProcess(act);
         actBusiness.setProcInstId(processInstanceId);
         actBusiness.setStatus(ActivitiConstant.STATUS_DEALING);
         actBusiness.setResult(ActivitiConstant.RESULT_DEALING);
         actBusiness.setApplyTime(new Date());
         actBusinessService.updateById(actBusiness);
-        //修改业务表的流程字段
-        actBusinessService.updateBusinessStatus(actBusiness.getTableName(), actBusiness.getTableId(),"启动");
         return Result.ok("操作成功");
     }
     /*撤回申请*/
@@ -161,11 +147,22 @@ public class ActBusinessController {
     public Result listData(ActBusiness param, HttpServletRequest request){
         LambdaQueryWrapper<ActBusiness> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.orderByDesc(ActBusiness::getCreateTime);
-        if (StrUtil.isNotBlank(param.getTitle())) queryWrapper.like(ActBusiness::getTitle,param.getTitle());
-        if (param.getStatus()!=null) queryWrapper.eq(ActBusiness::getStatus,param.getStatus());
-        if (param.getResult()!=null) queryWrapper.eq(ActBusiness::getResult,param.getResult());
-        if (StrUtil.isNotBlank(request.getParameter("createTime_begin"))) queryWrapper.ge(ActBusiness::getTitle,param.getTitle());
-        if (StrUtil.isNotBlank(request.getParameter("createTime_end"))) queryWrapper.le(ActBusiness::getTitle,param.getTitle());
+        if (StrUtil.isNotBlank(param.getTitle())) {
+            queryWrapper.like(ActBusiness::getTitle,param.getTitle());
+        }
+        if (param.getStatus()!=null){
+            queryWrapper.eq(ActBusiness::getStatus,param.getStatus());
+        }
+        if (param.getResult()!=null){
+            queryWrapper.eq(ActBusiness::getResult,param.getResult());
+        }
+        if (StrUtil.isNotBlank(request.getParameter("createTime_begin"))) {
+            queryWrapper.ge(ActBusiness::getTitle,param.getTitle());
+        }
+        if (StrUtil.isNotBlank(request.getParameter("createTime_end"))) {
+            queryWrapper.le(ActBusiness::getTitle,param.getTitle());
+        }
+
 
         LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         queryWrapper.eq(ActBusiness::getUserId,loginUser.getUsername());
@@ -194,4 +191,36 @@ public class ActBusinessController {
         });
         return Result.ok(actBusinessList);
     }
+
+    @PostMapping("update")
+    public Map<String,Object>updateBusiness(@RequestBody JSONObject data){
+        Map<String,Object>result = new HashMap<>();
+        Long id = data.getLong("id");
+        String tableName = data.getString("tableName");
+        ActBusiness business = actBusinessService.getById(id);
+        if(null == business){
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR);
+            return result;
+        }
+        business.setTableName(tableName);
+        actBusinessService.updateById(business);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        return result;
+    }
+
+    @PostMapping("delete")
+    public Map<String,Object>delete(@RequestBody JSONObject data){
+        Map<String,Object>result = new HashMap<>();
+        Long id = data.getLong("id");
+        String tableName = data.getString("tableName");
+        ActBusiness business = actBusinessService.getById(id);
+        if(null == business){
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR);
+            return result;
+        }
+        business.setTableName(tableName);
+        actBusinessService.updateById(business);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        return result;
+    }
 }

+ 17 - 7
jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/ActivitiProcessController.java

@@ -1,5 +1,7 @@
 package org.jeecg.modules.activiti.web;
 
+import cn.com.ctop.common.module.entity.ActCustomForm;
+import cn.com.ctop.common.module.service.IActCustomFormService;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -48,8 +50,6 @@ public class ActivitiProcessController {
     @Autowired
     private RepositoryService repositoryService;
     @Autowired
-    private ObjectMapper objectMapper;
-    @Autowired
     private ActZprocessServiceImpl actZprocessService;
     @Autowired
     private ActNodeServiceImpl actNodeService;
@@ -97,9 +97,22 @@ public class ActivitiProcessController {
             }).collect(Collectors.toList());
 
         }
+        if(null!=list&&!list.isEmpty()){
+            List<ActZprocess> getList = new ArrayList<>();
+            for(ActZprocess zprocess :list){
+                ActCustomForm form = customFormService.getById(zprocess.getCustomTableId());
+                if(null!=form){
+                    zprocess.setCustomTableName(form.getName());
+                }
+                getList.add(zprocess);
+            }
+            return Result.ok(getList);
+        }
         return Result.ok(list);
     }
 
+    @Autowired
+    private IActCustomFormService customFormService;
     /*激活或挂起流程定义*/
     @RequestMapping(value = "/updateStatus")
     public Result updateStatus( String id, Integer status){
@@ -107,12 +120,10 @@ public class ActivitiProcessController {
         ActZprocess actProcess = actZprocessService.getById(id);
         if(status==1){
             //启动前检查一下 路由等信息是否齐全
-            String routeName = actProcess.getRouteName();
-            String businessTable = actProcess.getBusinessTable();
-            if (StrUtil.isBlank(routeName)||StrUtil.isBlank(businessTable)){
+            Long tableId = actProcess.getCustomTableId();
+            if (null == tableId||tableId == 0){
                 return Result.error("未设置关联表单,点击编辑设置。");
             }
-
             repositoryService.activateProcessDefinitionById(id, true, new Date());
         }else {
             repositoryService.suspendProcessDefinitionById(id, true, new Date());
@@ -193,7 +204,6 @@ public class ActivitiProcessController {
     }
     @RequestMapping(value = "/updateInfo", method = RequestMethod.POST)
     public Result<Object> updateInfo(ActZprocess actProcess){
-
         ProcessDefinition pd = repositoryService.getProcessDefinition(actProcess.getId());
         if(pd==null){
             return Result.error("流程定义不存在");

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java

@@ -171,6 +171,7 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/ctop/kuaishou/dailyPage/**", "anon");
         filterChainDefinitionMap.put("/rest/script/*", "anon");
         filterChainDefinitionMap.put("/ctop/checkTaskList/*", "anon");
+        filterChainDefinitionMap.put("/ctop/report/bytedance/*", "anon");
 
         // 添加自己的过滤器并且取名为jwt
         Map<String, Filter> filterMap = new HashMap<>(1);

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

@@ -9,8 +9,10 @@ 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.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@@ -29,6 +31,7 @@ import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -79,6 +82,11 @@ public class ActCustomFormController {
 	public Result<ActCustomForm> add(@RequestBody ActCustomForm actCustomForm) {
 		Result<ActCustomForm> result = new Result<>();
 		try {
+			LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+			actCustomForm.setUserId(user.getId());
+			actCustomForm.setStatus(1);
+			actCustomForm.setCreateTime(new Date());
+			actCustomForm.setUpdateTime(new Date());
 			actCustomFormService.save(actCustomForm);
 			result.success("添加成功!");
 		} catch (Exception e) {

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

@@ -79,6 +79,7 @@ public class ActFormDataController {
 	public Result<ActFormData> add(@RequestBody ActFormData actFormData) {
 		Result<ActFormData> result = new Result<>();
 		try {
+			actFormData.setStatus(1);
 			actFormDataService.save(actFormData);
 			result.success("添加成功!");
 		} catch (Exception e) {

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

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

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

@@ -1,7 +1,11 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.common.module.entity.ActCustomForm;
 import cn.com.ctop.common.module.entity.ActFormPorcess;
+import cn.com.ctop.common.module.service.IActCustomFormService;
 import cn.com.ctop.common.module.service.IActFormPorcessService;
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -12,6 +16,8 @@ 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.activiti.entity.ActZprocess;
+import org.jeecg.modules.activiti.service.IActZprocessService;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -29,6 +35,7 @@ import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -44,8 +51,32 @@ import java.util.Map;
 @RequestMapping("/ctop/actFormPorcess")
 public class ActFormPorcessController {
 	@Autowired
+	private IActZprocessService actZprocessService;
+	@Autowired
 	private IActFormPorcessService actFormPorcessService;
+	@Autowired
+	private IActCustomFormService customFormService;
+	@PostMapping("bindProcess")
+	public Map<String,Object>bindProcess(Long formId,String processId){
+		Map<String,Object>result = new HashMap<>();
+		if(null == formId||formId == 0||null == processId||processId.trim().equals("")){
+			ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR);
+			return result;
+		}
+		ActZprocess actZprocess = actZprocessService.getById(processId);
+		ActCustomForm customForm = customFormService.getById(formId);
+		if(null == actZprocess||null == customForm){
+			ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR);
+			return result;
+		}
 
+		ActFormPorcess actFormPorcess = new ActFormPorcess();
+		actFormPorcess.setFormId(formId);
+		actFormPorcess.setProcessId(processId);
+		actFormPorcess.setStatus(1);
+		actFormPorcessService.save(actFormPorcess);
+		return result;
+	}
 	/**
 	  * 分页列表查询
 	 * @param actFormPorcess

+ 1 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialImageInfoController.java

@@ -233,8 +233,7 @@ public class MaterialImageInfoController {
         Result<MaterialImageInfo> result = new Result<MaterialImageInfo>();
         try {
             if (!Check.isNull(updateArr)) {
-                LoginUser user = (LoginUser) SecurityUtils.getSubject()
-                        .getPrincipal();
+                LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
                 for (int i = 0; i < updateArr.size(); i++) {
                     JSONObject updateJson = updateArr.getJSONObject(i);
                     if (!Check.isNull(updateJson)) {

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

@@ -0,0 +1,143 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.crawler.modules.music.entity.MusicKuaishouType;
+import cn.com.ctop.crawler.modules.music.service.IMusicKuaishouTypeService;
+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 lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+
+ /**
+ * 快手音乐类别
+ * @author jeecg-boot
+ * @date   2020-09-11
+ * @version V1.0
+ */
+@Slf4j
+@Api(tags="快手音乐类别")
+@RestController
+@RequestMapping("/ctop/musicKuaishouType")
+public class MusicKuaishouTypeController {
+	@Autowired
+	private IMusicKuaishouTypeService musicKuaishouTypeService;
+
+	/**
+	  * 分页列表查询
+	 * @param musicKuaishouType
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<MusicKuaishouType>> queryPageList(MusicKuaishouType musicKuaishouType,
+														  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+														  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+														  HttpServletRequest req) {
+		Result<IPage<MusicKuaishouType>> result = new Result<>();
+		QueryWrapper<MusicKuaishouType> queryWrapper = QueryGenerator.initQueryWrapper(musicKuaishouType, req.getParameterMap());
+		Page<MusicKuaishouType> page = new Page<>(pageNo, pageSize);
+		IPage<MusicKuaishouType> pageList = musicKuaishouTypeService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	  *   添加
+	 * @param musicKuaishouType
+	 * @return
+	 */
+	@PostMapping(value = "/add")
+	public Result<MusicKuaishouType> add(@RequestBody MusicKuaishouType musicKuaishouType) {
+		Result<MusicKuaishouType> result = new Result<>();
+		try {
+			musicKuaishouTypeService.save(musicKuaishouType);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 * @param musicKuaishouType
+	 * @return
+	 */
+	@PutMapping(value = "/edit")
+	public Result<MusicKuaishouType> edit(@RequestBody MusicKuaishouType musicKuaishouType) {
+		Result<MusicKuaishouType> result = new Result<>();
+		MusicKuaishouType musicKuaishouTypeEntity = musicKuaishouTypeService.getById(musicKuaishouType.getId());
+		if(musicKuaishouTypeEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = musicKuaishouTypeService.updateById(musicKuaishouType);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			musicKuaishouTypeService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<MusicKuaishouType> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<MusicKuaishouType> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.musicKuaishouTypeService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<MusicKuaishouType> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<MusicKuaishouType> result = new Result<>();
+		MusicKuaishouType musicKuaishouType = musicKuaishouTypeService.getById(id);
+		if(musicKuaishouType==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(musicKuaishouType);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+}

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

@@ -172,7 +172,6 @@ public class ProjectMemberController {
             result.setSuccess(false);
             result.setMessage("未获取到用户信息");
             return result;
-
         }
         String projectName = projectMember.getProjectName();
         projectMember.setUserId(null);

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

@@ -22,7 +22,6 @@ import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.ctop.entity.ProjectMember;
 import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
-import org.jeecg.modules.ctop.service.IAdvertiserService;
 import org.jeecg.modules.ctop.service.IProjectMemberService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -225,20 +224,6 @@ public class UserAllocationController {
         }
         Page<UserAllocation> page = new Page<>(pageNo, pageSize);
         IPage<UserAllocation> pageList = userAllocationService.page(page, queryWrapper);
-       /* List<UserAllocation> records = pageList.getRecords();
-        if (!Check.isNull(records)) {
-            for (UserAllocation allocation : records) {
-                Advertiser advertiser = advertiserService.getById(allocation.getAdvertiserId());
-                if (!Check.isNull(advertiser)) {
-                    allocation.setAdvertiserName(advertiser.getName());
-                }
-                Project project = projectService.getById(allocation.getProjectId());
-                if (!Check.isNull(project)) {
-                    allocation.setProjectName(project.getProjectName());
-                }
-            }
-
-        }*/
         result.setSuccess(true);
         result.setResult(pageList);
         return result;
@@ -283,18 +268,17 @@ public class UserAllocationController {
             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());
+            memberQueryWrapper.eq("user_id", update.getUserId());
+            memberQueryWrapper.eq("project_id", update.getProjectId());
             memberQueryWrapper.last("limit 1");
             ProjectMember member = memberMapper.selectOne(memberQueryWrapper);
             if (Check.isNull(member)) {
                 ProjectMember addMember = new ProjectMember();
-                addMember.setProjectId(update.getProjectId());
-                Project project = projectService.getById(update.getProjectId());
-                addMember.setProjectName(project.getProjectName());
-                addMember.setUserId(update.getUserId());
-                addMember.setUserName(update.getUserName());
-                String roleCode = sysRoleService.getRoleCodeByUserId(update.getUserId());
+                addMember.setProjectId(userAllocation.getProjectId());
+                addMember.setProjectName(userAllocation.getProjectName());
+                addMember.setUserId(userAllocation.getUserId());
+                addMember.setUserName(userAllocation.getUserName());
+                String roleCode = sysRoleService.getRoleCodeByUserId(userAllocation.getUserId());
                 if (!Check.isNull(roleCode)) {
                     addMember.setRoleCode(roleCode);
                 }

+ 0 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java

@@ -47,7 +47,6 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 	 */
 	@Override
 	public List<DictModel> queryDictItemsByCode(String code) {
-		log.info("无缓存dictCache的时候调用这里!");
 		return sysDictMapper.queryDictItemsByCode(code);
 	}
 
@@ -82,7 +81,6 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 
 	@Override
 	public String queryDictTextByKey(String code, String key,String extendsKey,String extendsValue) {
-		log.info("无缓存dictText的时候调用这里!");
 		return sysDictMapper.queryDictTextByKey(code, key,extendsKey,extendsValue);
 	}
 
@@ -101,7 +99,6 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 
 	@Override
 	public List<DictModel> queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql) {
-		log.info("无缓存dictTableList的时候调用这里!");
 		return sysDictMapper.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql);
 	}
 

+ 0 - 17
jeecg-boot-module-system/src/main/resources/drools/rule.drl

@@ -1,17 +0,0 @@
-import org.jeecg.modules.ctop.service.impl.RuleEngineServiceImpl
-import org.slf4j.LoggerFactory
-import org.slf4j.Logger
-import org.jeecg.modules.ctop.vo.QueryParam;
-import org.jeecg.modules.ctop.vo.RuleResult;
-dialect  "java"
-rule "paramcheck1"
-    salience 99
-    when queryParam : QueryParam(paramId != null && paramSign.equals("+"))
-        resultParam : RuleResult()
-    then
-        final Logger LOGGER = LoggerFactory.getLogger("param-check-one 规则引擎") ;
-        LOGGER.info("参数:getParamId="+queryParam.getParamId()+";getParamSign="+queryParam.getParamSign());
-        RuleEngineServiceImpl ruleEngineService = new RuleEngineServiceImpl() ;
-        ruleEngineService.executeAddRule(queryParam);
-        resultParam.setPostCodeResult(true);
-end

+ 0 - 17
jeecg-boot-module-system/src/main/resources/drools/rule2.drl

@@ -1,17 +0,0 @@
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-import org.jeecg.modules.ctop.service.impl.RuleEngineServiceImpl
-import org.jeecg.modules.ctop.vo.QueryParam;
-import org.jeecg.modules.ctop.vo.RuleResult;
-dialect  "java"
-rule "paramcheck2"
-    salience 88
-    when queryParam : QueryParam(paramId != null && paramSign.equals("-"))
-        resultParam : RuleResult()
-    then
-        final Logger LOGGER = LoggerFactory.getLogger("param-check-two 规则引擎") ;
-        LOGGER.info("参数:getParamId="+queryParam.getParamId()+";getParamSign="+queryParam.getParamSign());
-        RuleEngineServiceImpl ruleEngineService = new RuleEngineServiceImpl() ;
-        ruleEngineService.executeRemoveRule(queryParam);
-        resultParam.setPostCodeResult(true);
-end

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/ActCustomForm.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.common.module.entity;
 
+import cn.com.ctop.common.module.annotation.Dict;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -27,6 +28,7 @@ public class ActCustomForm {
 	private Long id;
 	private String name;
 	private String text;
+	@Dict(dicCode = "id",dictTable="sys_user",dicText="realname")
 	private String userId;
 	private Integer status;
 	private Date createTime;

+ 3 - 5
module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormData.java

@@ -3,7 +3,6 @@ package cn.com.ctop.common.module.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 lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -20,15 +19,14 @@ import java.util.Date;
 @TableName("ctop_act_form_data")
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@ApiModel(value="ctop_act_form_data对象", description="自定义表单存储数据")
 public class ActFormData {
 
 	@TableId(type = IdType.AUTO)
 	private Long id;
 	private Long formId;
-	private String processId;
-	private String key;
-	private String value;
+	private String userId;
+	private String bussinessId;
+	private String content;
 	private Integer status;
 	private Date createTime;
 	private Date updateTime;

+ 1 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/Project.java

@@ -107,6 +107,7 @@ public class Project {
      * 最高深度转化出价
      */
     private BigDecimal maxDeepCpaBid;
+    private Integer checkLink;
     /**
      * 创建时间
      */

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

@@ -3,6 +3,8 @@ package cn.com.ctop.common.module.service;
 import cn.com.ctop.common.module.entity.Project;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * 项目
  *
@@ -12,4 +14,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IProjectService extends IService<Project> {
 
+    List<Project> listByMediaType(int projectType,int checkLink);
 }

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/ProjectServiceImpl.java

@@ -3,9 +3,12 @@ package cn.com.ctop.common.module.service.impl;
 import cn.com.ctop.common.module.entity.Project;
 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.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 项目
  *
@@ -16,4 +19,12 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> implements IProjectService {
 
+    @Override
+    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);
+    }
 }

+ 1 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java

@@ -21,6 +21,7 @@ public enum StatusCode {
     COMMON_SUCCESS("操作成功", 0, true),
     COMMON_PARAM_ERROR("参数异常", -1, false),
     COMMON_ACCOUNT_ERROR("参数异常", -2, false),
+    COMMON_INTERNET_ERROR("网络请求异常", -3, false),
     COMMON_DATA_NOT_EXIST("数据不存在或者已经被删除", -101, false),
     BYTEDANCE_PLAN_DATA_NOT_EXIST("此计划不存在或者已经被删除", -101, false),
     BYTEDANCE_ACCOUNT_DATA_NOT_EXIST("此账户尚未绑定或已停投", -101, false),

+ 11 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/service/IKuaishouCrawlerService.java

@@ -4,10 +4,21 @@ import cn.com.ctop.crawler.modules.account.entity.KuaishouAdAccount;
 import cn.com.ctop.crawler.modules.account.entity.KuaishouAppAccount;
 import cn.com.ctop.crawler.modules.account.entity.KuaishouIosAccount;
 
+import java.io.UnsupportedEncodingException;
+
 public interface IKuaishouCrawlerService {
     String getVideoFeeds(KuaishouAppAccount kuaishouAppAccount,Integer page);
     String getVideoFeeds(KuaishouIosAccount kuaishouIosAccount);
     String getAdAccountVideoFeeds(KuaishouAdAccount kuaishouAdAccount,String pcursor);
+
+    String getMusicTypeList(String llsid);
+
+    String musicSearchSuggest(String keyword) throws UnsupportedEncodingException;
+
+    String musicSearchList(String keyword) throws UnsupportedEncodingException;
+
+    String getMusicList(String channel, String llsid);
+
     String getAdFeeds();
     String getUserProfile(Long userId);
 }

+ 14 - 5
module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/service/impl/KuaishouCrawlerServiceImpl.java

@@ -77,6 +77,7 @@ public class KuaishouCrawlerServiceImpl implements IKuaishouCrawlerService {
         return null;
     }
 
+    @Override
     public String getMusicTypeList(String llsid){
 //        IpPool ipPool = iIpPoolService.getAvaliableIp();
         String token = "a7805c554d6a453ea3350b629b28fed9-1144829703";
@@ -86,9 +87,14 @@ public class KuaishouCrawlerServiceImpl implements IKuaishouCrawlerService {
         String url = "http://apihb6.gifshow.com";
         String path = "/rest/n/music/channel/music";
         CrawlerLog crawlerLog = KuaishouUtil.kuaishouAppDataFeatch(url, path, staticStr, paramStr, headerStr, token, null);
-        return crawlerLog.getRequestBody();
+        return crawlerLog.getResponseBody();
+    }
+
+    public static void main(String[] args) {
+
     }
 
+    @Override
     public String musicSearchSuggest(String keyword) throws UnsupportedEncodingException {
 //        IpPool ipPool = iIpPoolService.getAvaliableIp();
         String token = "a7805c554d6a453ea3350b629b28fed9-1144829703";
@@ -98,9 +104,10 @@ public class KuaishouCrawlerServiceImpl implements IKuaishouCrawlerService {
         String url = "http://apihb6.gifshow.com";
         String path = "/rest/n/music/search/suggest";
         CrawlerLog crawlerLog = KuaishouUtil.kuaishouAppDataFeatch(url, path, staticStr, paramStr, headerStr, token, null);
-        return crawlerLog.getRequestBody();
+        return crawlerLog.getResponseBody();
     }
 
+    @Override
     public String musicSearchList(String keyword) throws UnsupportedEncodingException {
 //        IpPool ipPool = iIpPoolService.getAvaliableIp();
         String token = "a7805c554d6a453ea3350b629b28fed9-1144829703";
@@ -110,10 +117,11 @@ public class KuaishouCrawlerServiceImpl implements IKuaishouCrawlerService {
         String url = "http://apihb6.gifshow.com";
         String path = "/rest/n/music/search/v3";
         CrawlerLog crawlerLog = KuaishouUtil.kuaishouAppDataFeatch(url, path, staticStr, paramStr, headerStr, token, null);
-        return crawlerLog.getRequestBody();
+        return crawlerLog.getResponseBody();
     }
 
-    public String getMusicList(String channel,String llsid){
+    @Override
+    public String getMusicList(String channel, String llsid){
 //        IpPool ipPool = iIpPoolService.getAvaliableIp();
         String token = "a7805c554d6a453ea3350b629b28fed9-1144829703";
         String staticStr = String.format("app=0&kpf=ANDROID_PHONE&ver=6.5&c=HUAWEI&mod=HUAWEI(VOG-AL10)&appver=6.5.5.9591&ftt=&isp=CUCC&kpn=KUAISHOU&lon=0&language=zh-cn&sys=ANDROID_9&max_memory=384&ud=1144829703&country_code=cn&pm_tag=&oc=HUAWEI&hotfix_ver=&did_gt=%s&iuid=&extId=4db221a192e4d1d713c5dafb204400a8&net=WIFI&did=ANDROID_07264410e70db2ca&lat=0", String.valueOf(System.currentTimeMillis()));
@@ -122,9 +130,10 @@ public class KuaishouCrawlerServiceImpl implements IKuaishouCrawlerService {
         String url = "http://apihb6.gifshow.com";
         String path = "/rest/n/music/channel/music";
         CrawlerLog crawlerLog = KuaishouUtil.kuaishouAppDataFeatch(url, path, staticStr, paramStr, headerStr, token, null);
-        return crawlerLog.getRequestBody();
+        return crawlerLog.getResponseBody();
     }
 
+
     @Override
     public String getAdFeeds(){
         IpPool ipPool = iIpPoolService.getAvaliableIp();

+ 106 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/entity/MusicInfoKuaishou.java

@@ -0,0 +1,106 @@
+package cn.com.ctop.crawler.modules.music.entity;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * 快手音乐信息
+ * @author jeecg-boot
+ * @date   2020-09-15
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_music_info_kuaishou")
+@Accessors(chain = true)
+public class MusicInfoKuaishou {
+
+	/**id*/
+	@TableId
+    private String id;
+	private Long musicianUid;
+	private String image;
+	private Long chorus;
+	private Long duration;
+	private Long begin;
+	private Long end;
+	private String name;
+	private Integer type;
+	private String lrcUrl;
+	private String audioUrl;
+	private String avatarUrl;
+	private String snippetUrl;
+	private Long snippetDuration;
+	private Long singingCount;
+	private String url;
+	private String expTag;
+	private String imageUrl;
+	private Long photoCount;
+	private Long usageCount;
+	private String artist;
+	private Integer genreId;
+	private String lrc;
+	private Integer audioType;
+	private String isOriginal;
+	private Date createTime;
+	private Date updateTime;
+	private Long musicChannel;
+
+	public MusicInfoKuaishou(JSONObject music,Long channelType) {
+		this.musicianUid = music.getLong("musicianUid");
+		this.image = music.getString("image");
+		this.chorus = music.getLong("chorus");
+		this.duration = music.getLong("duration");
+		this.begin = music.getLong("begin");
+		this.end = music.getLong("end");
+		this.name = music.getString("name");
+		this.id = music.getString("id");
+		this.type = music.getInteger("type");
+		JSONArray lrcUrls = music.getJSONArray("lrcUrls");
+		if(null!=lrcUrls&&!lrcUrls.isEmpty()){
+			this.lrcUrl = lrcUrls.getJSONObject(0).getString("url");
+		}
+		JSONArray audioUrls = music.getJSONArray("audioUrls");
+		if(null!=audioUrls&&!audioUrls.isEmpty()){
+			this.audioUrl = audioUrls.getJSONObject(0).getString("url");
+		}
+		this.avatarUrl = music.getString("avatarUrl");
+		this.snippetUrl = music.getString("snippetUrls");
+		this.singingCount = music.getLong("singingCount");
+		this.snippetDuration = music.getLong("snippetDuration");
+		this.url = music.getString("url");
+		this.expTag = music.getString("expTag");
+		JSONArray imageUrls = music.getJSONArray("imageUrls");
+		if(null!=imageUrls&&!imageUrls.isEmpty()){
+			this.imageUrl = imageUrls.getJSONObject(0).getString("url");
+		}
+		this.photoCount = music.getLong("photoCount");
+		this.usageCount = music.getLong("usageCount");
+		this.artist = music.getString("artist");
+		this.genreId = music.getInteger("genreId");
+		this.lrc = music.getString("lrc");
+		this.audioType = music.getInteger("audioType");
+
+		Boolean isOriginal = music.getBoolean("isOriginal");
+		if(null == isOriginal){
+			isOriginal = false;
+		}
+		if(isOriginal){
+			this.isOriginal = "true";
+		}else{
+			this.isOriginal = "false";
+		}
+		this.createTime = new Date();
+		this.updateTime = new Date();
+		this.musicChannel = channelType;
+	}
+
+	public MusicInfoKuaishou() {
+
+	}
+}

+ 45 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/entity/MusicKuaishouType.java

@@ -0,0 +1,45 @@
+package cn.com.ctop.crawler.modules.music.entity;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * 快手音乐类别
+ * @author jeecg-boot
+ * @date   2020-09-11
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_music_kuaishou_type")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_music_kuaishou_type对象", description="快手音乐类别")
+public class MusicKuaishouType {
+
+	@TableId
+    private Long id;
+	private String type;
+	private String name;
+	private String icon;
+	private Date createTime;
+	private Date updateTime;
+
+	public MusicKuaishouType(JSONObject data) {
+		this.setIcon(data.getString("icon"));
+		this.setName(data.getString("name"));
+		this.setType(data.getString("type"));
+		this.setId(data.getLong("id"));
+	}
+
+	public MusicKuaishouType() {
+
+	}
+
+}

+ 14 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/mapper/MusicInfoKuaishouMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.crawler.modules.music.mapper;
+
+import cn.com.ctop.crawler.modules.music.entity.MusicInfoKuaishou;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 快手音乐信息
+ * @author: jeecg-boot
+ * @date:   2020-09-15
+ * @cersion: V1.0
+ */
+public interface MusicInfoKuaishouMapper extends BaseMapper<MusicInfoKuaishou> {
+
+}

+ 14 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/mapper/MusicKuaishouTypeMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.crawler.modules.music.mapper;
+
+import cn.com.ctop.crawler.modules.music.entity.MusicKuaishouType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 快手音乐类别
+ * @author: jeecg-boot
+ * @date:   2020-09-11
+ * @cersion: V1.0
+ */
+public interface MusicKuaishouTypeMapper extends BaseMapper<MusicKuaishouType> {
+
+}

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

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

+ 14 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/service/IMusicInfoKuaishouService.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.crawler.modules.music.service;
+
+import cn.com.ctop.crawler.modules.music.entity.MusicInfoKuaishou;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手音乐信息
+ * @Author: jeecg-boot
+ * @Date:   2020-09-15
+ * @Version: V1.0
+ */
+public interface IMusicInfoKuaishouService extends IService<MusicInfoKuaishou> {
+
+}

+ 14 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/service/IMusicKuaishouTypeService.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.crawler.modules.music.service;
+
+import cn.com.ctop.crawler.modules.music.entity.MusicKuaishouType;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手音乐类别
+ * @Author: jeecg-boot
+ * @Date:   2020-09-11
+ * @Version: V1.0
+ */
+public interface IMusicKuaishouTypeService extends IService<MusicKuaishouType> {
+
+}

+ 18 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/service/impl/MusicInfoKuaishouServiceImpl.java

@@ -0,0 +1,18 @@
+package cn.com.ctop.crawler.modules.music.service.impl;
+
+import cn.com.ctop.crawler.modules.music.entity.MusicInfoKuaishou;
+import cn.com.ctop.crawler.modules.music.mapper.MusicInfoKuaishouMapper;
+import cn.com.ctop.crawler.modules.music.service.IMusicInfoKuaishouService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 快手音乐信息
+ * @author jeecg-boot
+ * @date   2020-09-15
+ * @version V1.0
+ */
+@Service
+public class MusicInfoKuaishouServiceImpl extends ServiceImpl<MusicInfoKuaishouMapper, MusicInfoKuaishou> implements IMusicInfoKuaishouService {
+
+}

+ 18 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/music/service/impl/MusicKuaishouTypeServiceImpl.java

@@ -0,0 +1,18 @@
+package cn.com.ctop.crawler.modules.music.service.impl;
+
+import cn.com.ctop.crawler.modules.music.entity.MusicKuaishouType;
+import cn.com.ctop.crawler.modules.music.mapper.MusicKuaishouTypeMapper;
+import cn.com.ctop.crawler.modules.music.service.IMusicKuaishouTypeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 快手音乐类别
+ * @author jeecg-boot
+ * @date   2020-09-11
+ * @version V1.0
+ */
+@Service
+public class MusicKuaishouTypeServiceImpl extends ServiceImpl<MusicKuaishouTypeMapper, MusicKuaishouType> implements IMusicKuaishouTypeService {
+
+}

+ 128 - 0
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceMonitoringLinksCheckJob.java

@@ -0,0 +1,128 @@
+package cn.com.ctop.job.bytedance.handler;
+
+import cn.com.ctop.common.module.entity.Project;
+import cn.com.ctop.common.module.entity.UserAllocation;
+import cn.com.ctop.common.module.service.IProjectService;
+import cn.com.ctop.common.module.service.ISendMessageService;
+import cn.com.ctop.common.module.service.IUserAllocationService;
+import cn.com.ctop.toutiao.modules.material.entity.ByteDanceAdvertisePlan;
+import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertisePlanService;
+import cn.com.ctop.toutiao.modules.material.service.IByteDanceCreativeService;
+import com.alibaba.fastjson.JSONObject;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+import org.jeecg.common.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class BytedanceMonitoringLinksCheckJob {
+    @Autowired
+    private IUserAllocationService allocationService;
+    @Autowired
+    private IByteDanceAdvertisePlanService advertisePlanService;
+    @Autowired
+    private IByteDanceCreativeService creativeService;
+    @Autowired
+    private ISendMessageService sendMessageService;
+    @Autowired
+    private IProjectService projectService;
+
+    @XxlJob("bytedanceMonitoringLinksCheckJob")
+    public ReturnT<String> execute(String param) throws Exception{
+        List<Project> projects = projectService.listByMediaType(3,1);
+        if(null==projects||projects.isEmpty()){
+            return ReturnT.SUCCESS;
+        }
+        for (Project project:projects) {
+            List<UserAllocation>allocations = allocationService.getByParams(project.getId(),null,0);
+            if(null==allocations||allocations.isEmpty()){
+                continue;
+            }
+            for(UserAllocation allocation:allocations){
+                List<ByteDanceAdvertisePlan> plans = advertisePlanService.getAllPlans(allocation.getAccountId(), DateUtils.formatDate(new Date()));
+                if(null!=plans&&!plans.isEmpty()){
+                    for (ByteDanceAdvertisePlan plan:plans) {
+                        Map<String, Object> creativeDetail = creativeService.getCreativeDetail(allocation.getAccountId(), plan.getId());
+                        if(null!=creativeDetail.get("data")){
+                            JSONObject data = (JSONObject) creativeDetail.get("data");
+                            checkMonitorLink(data,plan,allocation);
+                        }
+                    }
+                }
+            }
+        }
+        XxlJobLogger.log("监测链接检查完成");
+        return ReturnT.SUCCESS;
+    }
+
+    private void checkMonitorLink(JSONObject data, ByteDanceAdvertisePlan plan, UserAllocation allocation) {
+        String downloadUrl = plan.getDownloadUrl();
+        boolean errorflag = false;
+        String errorMsg = "";
+        String token = plan.getName().split("-")[0];
+        if(null!=token&&token.equals("衍生计划")){
+            token = plan.getName().split("-")[1];
+        }
+        String tokenInfo = "surl_token="+token;
+        String appType = plan.getAppType();
+
+        if(null!=downloadUrl){
+            if(null!=appType&&appType.equals("APP_IOS")){
+                if(!downloadUrl.equals("https://apps.apple.com/cn/app/id1468454200")){
+                    errorMsg+= "应用下载链接填写异常;";
+                    errorflag = true;
+                }
+            }
+            if(null!=appType&&appType.equals("APP_ANDROID")){
+                if(!downloadUrl.contains(token)){
+                    errorMsg+= "应用下载链接填写异常;";
+                    errorflag = true;
+                }
+            }
+        }
+        //展示监测链接
+        String trackUrl = data.getString("trackUrl");
+        if(null!=trackUrl&&!trackUrl.trim().equals("")){
+            if(!trackUrl.contains(tokenInfo)){
+                errorMsg+= "展示监测链接填写异常;";
+                errorflag = true;
+            }
+        }
+        //点击监测链接
+        String actionTrackUrl = data.getString("actionTrackUrl");
+        if(null!=actionTrackUrl&&!actionTrackUrl.trim().equals("")){
+            if(null!=appType&&appType.equals("APP_IOS")){
+                if(!actionTrackUrl.contains(tokenInfo)||!actionTrackUrl.contains("app_platform=ios")){
+                    errorMsg+= "点击监测链接填写异常;";
+                    errorflag = true;
+                }
+            }
+            if(null!=appType&&appType.equals("APP_ANDROID")){
+                if(!actionTrackUrl.contains(tokenInfo)||!actionTrackUrl.contains("tt/")){
+                    errorMsg+= "点击监测链接填写异常;";
+                    errorflag = true;
+                }
+            }
+        }
+        //视频有效播放监测链接
+        String videoPlayEffectiveTrackUrl = data.getString("videoPlayEffectiveTrackUrl");
+        if(null!=videoPlayEffectiveTrackUrl&&!videoPlayEffectiveTrackUrl.trim().equals("")){
+            if(!videoPlayEffectiveTrackUrl.contains(tokenInfo)){
+                errorMsg+= "视频有效播放监测链接填写异常;";
+                errorflag = true;
+            }
+        }
+        if(errorflag){
+            sendMessage(allocation,"警告:账户:"+allocation.getAuthName()+"(id:"+allocation.getAccountId()+")下的广告计划:"+plan.getName()+"(id:"+plan.getId()+")"+"监测链接异常>>"+errorMsg);
+        }
+    }
+    private void sendMessage(UserAllocation allocation, String errorMsg) {
+        sendMessageService.sendMessage(allocation.getUserId(),errorMsg);
+    }
+}

+ 4 - 4
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/impl/KuaishouWebInterfaceServiceImpl.java

@@ -674,10 +674,10 @@ public class KuaishouWebInterfaceServiceImpl implements IKuaishouWebInterfaceSer
             e.printStackTrace();
         }
         ChromeOptions chromeOptions = new ChromeOptions();
-//        chromeOptions.addArguments("--headless");
-//        chromeOptions.addArguments("--no-sandbox");
-//        chromeOptions.addArguments("--disable-dev-shm-usage");
-//        chromeOptions.addArguments("--disable-gpu");
+        chromeOptions.addArguments("--headless");
+        chromeOptions.addArguments("--no-sandbox");
+        chromeOptions.addArguments("--disable-dev-shm-usage");
+        chromeOptions.addArguments("--disable-gpu");
         chromeOptions.addArguments("--window-size=1920,1080");
         chromeOptions.addArguments("--user-agent=" + HttpUtils2.USER_AGENT);
         chromeOptions.setAcceptInsecureCerts(true);

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

@@ -23,4 +23,6 @@ public interface KuaiShouDailyAgentMapper extends BaseMapper<KuaiShouDailyAgent>
     KuaishouReportDailyAgentSum companyReportSum(@Param("startDate") String startDate, @Param("endDate") String endDate);
 
     List<KuaishouReportDailyAgent> companyReportAccountDetailList(@Param("date") String date, @Param("advertiserName") String advertiserName, @Param("isExportNullData") Integer o);
+
+    void replaceBatch(@Param(value = "list") List<KuaiShouDailyAgent> list);
 }

+ 47 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaiShouDailyAgentMapper.xml

@@ -297,5 +297,51 @@
             </if>
         </trim>
     </insert>
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_daily_agent(
+        `date`,
+        `account_id`,
+        `kid`,
+        `advertiser_name`,
+        `advertiser_create_time`,
+        `cost_campaign_count`,
+        `balance`,
+        `cost`,
+        `xianjin_cost`,
+        `fandian_cost`,
+        `kuangfan_cost`,
+        `jili_cost`,
+        `xinyong_cost`,
+        `fengmian_show_count`,
+        `fengmian_click_count`,
+        `sucai_show_count`,
+        `convert_count`,
+        `fengmian_click_rate`,
+        `convert_click_rate`
+        )
+        values
+        <foreach collection="list" item="agent" separator=",">
+            (#{agent.date},
+            #{agent.accountId},
+            #{agent.kid},
+            #{agent.advertiserName},
+            #{agent.advertiserCreateTime},
+            #{agent.costCampaignCount},
+            #{agent.balance},
+            #{agent.cost},
+            #{agent.xianjinCost},
+            #{agent.fandianCost},
+            #{agent.kuangfanCost},
+            #{agent.jiliCost},
+            #{agent.xinyongCost},
+            #{agent.fengmianShowCount},
+            #{agent.fengmianClickCount},
+            #{agent.sucaiShowCount},
+            #{agent.convertCount},
+            #{agent.fengmianClickRate},
+            #{agent.convertClickRate})
+        </foreach>
 
-</mapper>
+    </insert>
+
+</mapper>

+ 3 - 4
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportDailyAgentServiceImpl.java

@@ -54,6 +54,8 @@ public class KuaishouReportDailyAgentServiceImpl extends ServiceImpl<KuaishouRep
     @Autowired
     private KuaishouReportDailyAgentSumMapper kuaishouReportDailyAgentSumMapper;
     @Autowired
+    private KuaishouReportDailyAgentMapper kuaishouReportDailyAgentMapper;
+    @Autowired
     private KuaishouAgentAccountMapper kuaishouAgentAccountMapper;
     @Value("${jeecg.path.chrome-driver}")
     private String chromeDriver;
@@ -62,7 +64,7 @@ public class KuaishouReportDailyAgentServiceImpl extends ServiceImpl<KuaishouRep
 
     @Override
     public void replaceBatch(List<KuaiShouDailyAgent> list) {
-        for(KuaiShouDailyAgent agent:list){
+        for (KuaiShouDailyAgent agent:list) {
             kuaiShouDailyAgentMapper.insert(agent);
         }
     }
@@ -240,9 +242,6 @@ public class KuaishouReportDailyAgentServiceImpl extends ServiceImpl<KuaishouRep
     @Override
     public void getReport(String startDate, String endDate) {
         try {
-            if (!loginAgent()) {
-                return;
-            }
             String currentDate = startDate;
             Map<String, String> headerMap = new HashMap<>();
             headerMap.put("Accept", "application/json");

+ 5 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/entity/ByteDanceAdvertisePlan.java

@@ -380,6 +380,11 @@ public class ByteDanceAdvertisePlan {
             this.downloadType = downloadType;
         }
 
+        String downloadUrl = dataObject.getString("download_url");
+        if (null != downloadUrl && !"".equals(downloadUrl.trim())) {
+            this.downloadUrl = downloadUrl;
+        }
+
         String externalUrl = dataObject.getString("external_url");
         if (null != externalUrl && !"".equals(externalUrl.trim())) {
             this.externalUrl = externalUrl;

+ 2 - 2
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/IByteDanceAdvertisePlanService.java

@@ -3,9 +3,7 @@ package cn.com.ctop.toutiao.modules.material.service;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.toutiao.modules.material.entity.ByteDanceAdvertisePlan;
 import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
-import jdk.nashorn.internal.scripts.JS;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -45,4 +43,6 @@ public interface IByteDanceAdvertisePlanService extends IService<ByteDanceAdvert
 
     //查询需要预警的深度转化出价
     List<String> selectWarningCpaBid(Long accountId, BigDecimal maxCapBid);
+
+    List<ByteDanceAdvertisePlan> getAllPlans(Long accountId,String createDate);
 }

+ 13 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/ByteDanceAdvertisePlanServiceImpl.java

@@ -9,6 +9,7 @@ import cn.com.ctop.toutiao.modules.material.mapper.ByteDanceAdvertisePlanMapper;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertisePlanService;
 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 lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -408,6 +409,18 @@ public class ByteDanceAdvertisePlanServiceImpl extends ServiceImpl<ByteDanceAdve
         return byteDanceAdvertisePlanMapper.selectWarningCpaBid(accountId, maxCapBid);
     }
 
+    @Override
+    public List<ByteDanceAdvertisePlan> getAllPlans(Long accountId,String createDate) {
+        QueryWrapper<ByteDanceAdvertisePlan>queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account_id",accountId+"");
+        if(null!=createDate&&!createDate.trim().equals("")){
+            queryWrapper.ge("ad_create_time",createDate+" 00:00:00");
+        }
+        queryWrapper.ne("opt_status","AD_STATUS_DELETE");
+        queryWrapper.orderByDesc("ad_create_time");
+        return this.list(queryWrapper);
+    }
+
     private Map<String, Object> queryAdByAdId(CtopOauthToken token, Long accountId, List adId){
 
         Map<String, String> headers = new HashMap<>();

+ 13 - 3
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/ByteDanceCreativeServiceImpl.java

@@ -207,16 +207,19 @@ public class ByteDanceCreativeServiceImpl extends ServiceImpl<ByteDanceCreativeM
         Map<String,Object>resultMap = new HashMap<>();
         if(null == planId||planId == 0||null == accountId||accountId == 0){
             ResultMapUtils.setResultMap(resultMap,StatusCode.COMMON_PARAM_ERROR);
+            resultMap.put("data",null);
             return resultMap;
         }
         UserAllocation allocation = userAllocationService.getByAccountId(accountId);
         if(null == allocation||allocation.getAccountStatus()!=0){
             ResultMapUtils.setResultMap(resultMap,StatusCode.BYTEDANCE_PLAN_DATA_NOT_EXIST);
+            resultMap.put("data",null);
             return resultMap;
         }
         ByteDanceAdvertisePlan plan = byteDanceAdvertisePlanService.getById(planId);
         if(null == plan||plan.getOptStatus().equals("AD_STATUS_DELETE")){
             ResultMapUtils.setResultMap(resultMap,StatusCode.BYTEDANCE_ACCOUNT_DATA_NOT_EXIST);
+            resultMap.put("data",null);
             return resultMap;
         }
         CtopOauthToken token = tokenService.getTokenByAccountId(accountId);
@@ -227,12 +230,18 @@ public class ByteDanceCreativeServiceImpl extends ServiceImpl<ByteDanceCreativeM
         data.put("advertiser_id", token.getAccountId());
         data.put("ad_id",planId);
         JSONObject result = HttpUtils.bytedanceGetRequest(token.getAccessToken(),url,data);
+        if(null == result){
+            ResultMapUtils.setResultMap(resultMap,StatusCode.COMMON_INTERNET_ERROR);
+            resultMap.put("data",null);
+            return resultMap;
+        }
         Integer code = result.getInteger("code");
         String message = result.getString("message");
         if (null ==  code) {
             log.info("广告创意获取详情失败,accountId:{},message:{}", accountId, message);
             resultMap.put("success", false);
             resultMap.put("code", -1);
+            result.put("data",null);
             resultMap.put("message", message);
             return resultMap;
         }
@@ -240,7 +249,7 @@ public class ByteDanceCreativeServiceImpl extends ServiceImpl<ByteDanceCreativeM
             //尚未创建创意
             resultMap.put("success", true);
             resultMap.put("code", 0);
-            result.put("data","");
+            result.put("data",null);
             resultMap.put("message", message);
             return resultMap;
         }
@@ -248,6 +257,7 @@ public class ByteDanceCreativeServiceImpl extends ServiceImpl<ByteDanceCreativeM
             log.info("广告创意获取详情失败,accountId:{},message:{}", accountId, message);
             resultMap.put("success", false);
             resultMap.put("code", -1);
+            result.put("data",null);
             resultMap.put("message", message);
             return resultMap;
         }
@@ -281,11 +291,11 @@ public class ByteDanceCreativeServiceImpl extends ServiceImpl<ByteDanceCreativeM
         }
         String videoPlayEffectiveTrackUrl = getData.getString("video_play_effective_track_url");
         if(null!=videoPlayEffectiveTrackUrl&&!videoPlayEffectiveTrackUrl.trim().equals("")){
-            data.put("video_play_effective_track_url",videoPlayEffectiveTrackUrl);
+            data.put("videoPlayEffectiveTrackUrl",videoPlayEffectiveTrackUrl);
         }
         String videoPlayDoneTrackUrl = getData.getString("video_play_done_track_url");
         if(null!=videoPlayDoneTrackUrl&&!videoPlayDoneTrackUrl.trim().equals("")){
-            data.put("video_play_done_track_url",videoPlayDoneTrackUrl);
+            data.put("videoPlayDoneTrackUrl",videoPlayDoneTrackUrl);
         }
         String videoPlayTrackUrl = getData.getString("video_play_track_url");
         if(null!=videoPlayTrackUrl&&!videoPlayTrackUrl.trim().equals("")){

+ 1 - 5
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/controller/ByteDanceVideoReportDailyController.java

@@ -124,10 +124,8 @@ public class ByteDanceVideoReportDailyController {
 	 @AutoLog(value = "头条视频按天汇总")
 	 @ApiOperation(value = "头条视频按天汇总", notes = "头条视频按天汇总")
 	 @PostMapping(value = "/bytedanceVideoInfoListDaily")
-	 public Result<PageInfo<ByteDanceVideoReportDaily>> bytedanceVideoInfoList(@RequestBody DateDTO dateDTO,
-																		   HttpServletRequest req){
+	 public Result<PageInfo<ByteDanceVideoReportDaily>> bytedanceVideoInfoList(@RequestBody DateDTO dateDTO){
 		 Result<PageInfo<ByteDanceVideoReportDaily>> result = new Result();
-
 		 Integer pageNo = dateDTO.getPageNo();
 		 Integer pageSize = dateDTO.getPageSize();
 		 if(pageNo == null){
@@ -136,9 +134,7 @@ public class ByteDanceVideoReportDailyController {
 		 if(pageSize == null){
 			 pageSize = 10;
 		 }
-
 		 PageInfo<ByteDanceVideoReportDaily> list = videoReportDailyService.videoInfoListDaily(dateDTO.getStartDate(), dateDTO.getEndDate(), dateDTO.getSignature(), dateDTO.getCost(), pageNo, pageSize, dateDTO.getProjectIds(), dateDTO.getAccountIds(), dateDTO.getSort());
-
 		 result.setResult(list);
 		 result.setSuccess(true);
 		 return result;