yumeng 5 лет назад
Родитель
Сommit
99db5bd0a5
84 измененных файлов с 4524 добавлено и 871 удалено
  1. 0 1
      .gitignore
  2. 25 0
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java
  3. 12 0
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java
  4. 7 7
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgOneToMainUtil.java
  5. 6 0
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  6. 50 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/AdvertiserController.java
  7. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/BindAccountAuthController.java
  8. 7 11
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/BindAccountLoginController.java
  9. 48 40
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java
  10. 248 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialAscriptionController.java
  11. 64 6
      module-ctop/src/main/java/cn/com/ctop/manage/modules/material/controller/MaterialInfoController.java
  12. 248 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialParameterController.java
  13. 248 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialTagController.java
  14. 75 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialUploadController.java
  15. 332 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectController.java
  16. 382 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectMemberController.java
  17. 62 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UserAllocationController.java
  18. 65 36
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/Advertiser.java
  19. 96 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/Project.java
  20. 91 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ProjectMember.java
  21. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouMaterialsLoadJob.java
  22. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ProjectMapper.java
  23. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ProjectMemberMapper.java
  24. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMapper.xml
  25. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMemberMapper.xml
  26. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectMemberService.java
  27. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectService.java
  28. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectMemberServiceImpl.java
  29. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectServiceImpl.java
  30. 8 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/fileupload/controller/FileController.java
  31. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java
  32. 387 401
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
  33. 295 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/UserCompanyController.java
  34. 65 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/UserCompany.java
  35. 3 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java
  36. 5 5
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java
  37. 59 45
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
  38. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/UserCompanyMapper.java
  39. 8 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml
  40. 9 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserDepartMapper.xml
  41. 28 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
  42. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/UserCompanyMapper.xml
  43. 3 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
  44. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IUserCompanyService.java
  45. 203 214
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
  46. 98 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/UserCompanyServiceImpl.java
  47. BIN
      module-common/lib/jave-1.0.2.jar
  48. 41 6
      module-common/pom.xml
  49. 76 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/MaterialAscription.java
  50. 49 1
      module-common/src/main/java/cn/com/ctop/common/module/entity/MaterialInfo.java
  51. 81 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/MaterialParameter.java
  52. 57 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/MaterialTag.java
  53. 14 32
      module-common/src/main/java/cn/com/ctop/common/module/entity/UserAllocation.java
  54. 18 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/MaterialAscriptionMapper.java
  55. 8 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/MaterialInfoMapper.java
  56. 15 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/MaterialParameterMapper.java
  57. 19 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/MaterialTagMapper.java
  58. 48 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/MaterialAscriptionMapper.xml
  59. 39 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/MaterialInfoMapper.xml
  60. 5 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/MaterialParameterMapper.xml
  61. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/MaterialTagMapper.xml
  62. 15 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialAscriptionService.java
  63. 8 2
      module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialInfoService.java
  64. 15 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialParameterService.java
  65. 15 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialTagService.java
  66. 1 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/FileInfoServiceImpl.java
  67. 19 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialAscriptionServiceImpl.java
  68. 243 17
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java
  69. 19 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialParameterServiceImpl.java
  70. 19 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialTagServiceImpl.java
  71. 1 1
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/encryption/AesEncryptUtil.java
  72. 1 1
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/encryption/EncryptedString.java
  73. 1 1
      module-common/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java
  74. 5 2
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/LoadFileUtil.java
  75. 1 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java
  76. 17 0
      module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/IMaterialUploadService.java
  77. 239 0
      module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadServiceImpl.java
  78. 5 13
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouController.java
  79. 1 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/MaterialRefuseController.java
  80. 4 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/entity/KuaiShouImageGet.java
  81. 1 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaishouInterfaceService.java
  82. 3 3
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouImageServiceImpl.java
  83. 3 3
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouVideoServiceImpl.java
  84. 18 6
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java

+ 0 - 1
.gitignore

@@ -21,7 +21,6 @@ gen
 .mtj.tmp/
 
 # Package Files #
-*.jar
 *.war
 *.nar
 *.ear

+ 25 - 0
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -534,6 +534,31 @@ public class DateUtils extends PropertyEditorSupport {
         return 0;
     }
 
+
+    public static void main(String[] args) throws ParseException {
+        getStartEndTime("2019-11-25 00:00:00");
+    }
+
+    public static Map<String, Object> getStartEndTime(String createTime) throws ParseException {
+
+        SimpleDateFormat smf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date parse = smf.parse(createTime);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(parse);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Date start = calendar.getTime();
+        calendar.add(Calendar.DAY_OF_MONTH, 1);
+        calendar.add(Calendar.SECOND, -1);
+        Date end = calendar.getTime();
+        Map<String, Object> map = new HashMap<>();
+        map.put("start", smf.format(start));
+        map.put("end", smf.format(end));
+        return map;
+    }
+
+
     /**
      * String类型 转换为Date, 如果参数长度为10 转换格式”yyyy-MM-dd“ 如果参数长度为19 转换格式”yyyy-MM-dd
      * HH:mm:ss“ * @param text String类型的时间值

+ 12 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java

@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.MultipartConfigFactory;
 import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
@@ -12,6 +13,7 @@ import org.springframework.core.env.Environment;
 import org.springframework.web.client.RestTemplate;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
+import javax.servlet.MultipartConfigElement;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 
@@ -45,4 +47,14 @@ public class JeecgApplication {
         return new RestTemplate();
     }
 
+    @Bean
+    public MultipartConfigElement multipartConfigElement() {
+        MultipartConfigFactory factory = new MultipartConfigFactory();
+        //  单个数据大小
+        factory.setMaxFileSize("10240KB"); // KB,MB
+        /// 总上传数据大小
+        factory.setMaxRequestSize("102400KB");
+        return factory.createMultipartConfig();
+    }
+
 }

+ 7 - 7
jeecg-boot-module-system/src/main/java/org/jeecg/JeecgOneToMainUtil.java

@@ -23,33 +23,33 @@ public class JeecgOneToMainUtil {
 		//第一步:设置主表配置
 		MainTableVo mainTable = new MainTableVo();
         //表名
-        mainTable.setTableName("sys_category");
+        mainTable.setTableName("ctop_material_info");
         //实体名
-        mainTable.setEntityName("Category");
+        mainTable.setEntityName("MaterialInfo");
         //包名
         mainTable.setEntityPackage("ctop");
         //描述
-        mainTable.setFtlDescription("主分类信息");
+        mainTable.setFtlDescription("素材库");
 		
 		//第二步:设置子表集合配置
 		List<SubTableVo> subTables = new ArrayList<SubTableVo>();
 		//[1].子表一
 		SubTableVo po = new SubTableVo();
         //表名
-        po.setTableName("sys_category");
+        po.setTableName("ctop_material_ascription");
         //实体名
-        po.setEntityName("Category");
+        po.setEntityName("MaterialAscription");
         //包名
         po.setEntityPackage("ctop");
         //描述
-        po.setFtlDescription("子分类信息");
+        po.setFtlDescription("素材归属");
 		//子表外键参数配置
 		/*说明: 
 		 * a) 子表引用主表主键ID作为外键,外键字段必须以_ID结尾;
 		 * b) 主表和子表的外键字段名字,必须相同(除主键ID外);
 		 * c) 多个外键字段,采用逗号分隔;
 		*/
-        po.setForeignKeys(new String[]{"pid"});
+        po.setForeignKeys(new String[]{"material_id"});
 		subTables.add(po);
 		mainTable.setSubTables(subTables);
 		

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

@@ -121,6 +121,12 @@ public class ShiroConfig {
         //文件上传接口
 		filterChainDefinitionMap.put("/upload/**", "anon");
         filterChainDefinitionMap.put("/appium/appiumTask/run", "anon");
+
+
+        filterChainDefinitionMap.put("/system/userCompany/**", "anon");
+
+
+
 		filterChainDefinitionMap.put("/appium/appiumTask/run/login", "anon");
 		//爬虫接口
 		filterChainDefinitionMap.put("/graphql/video", "anon");

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

@@ -1,5 +1,7 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.bytedance.mapper.MaterialReportMapper;
+import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -13,8 +15,13 @@ import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.ctop.entity.Advertiser;
+import org.jeecg.modules.ctop.entity.Project;
+import org.jeecg.modules.ctop.mapper.ProjectMapper;
+import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
 import org.jeecg.modules.ctop.service.IAdvertiserService;
 import org.jeecg.modules.system.entity.SysCategory;
+import org.jeecg.modules.system.entity.UserCompany;
+import org.jeecg.modules.system.mapper.UserCompanyMapper;
 import org.jeecg.modules.system.service.ISysCategoryService;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@@ -32,10 +39,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @Description: 广告主信息表
@@ -52,6 +56,14 @@ public class AdvertiserController {
     private IAdvertiserService advertiserService;
     @Autowired
     private ISysCategoryService sysCategoryService;
+    @Autowired
+    private UserCompanyMapper userCompanyMapper;
+    @Autowired
+    private MaterialReportMapper materialReportMapper;
+    @Autowired
+    private ProjectMapper projectMapper;
+    @Autowired
+    private ProjectMemberMapper projectMemberMapper;
 
     /**
      * 分页列表查询
@@ -67,10 +79,20 @@ public class AdvertiserController {
     @GetMapping(value = "/list")
     public Result<IPage<Advertiser>> queryPageList(Advertiser advertiser,
                                                    @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-                                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                   @RequestParam(name = "pageSize", defaultValue = "1000") Integer pageSize,
                                                    HttpServletRequest req) {
+
         Result<IPage<Advertiser>> result = new Result<IPage<Advertiser>>();
+        String roleCode = materialReportMapper.getRoleCodeByUserId(advertiser.getUserId());
         QueryWrapper<Advertiser> queryWrapper = QueryGenerator.initQueryWrapper(advertiser, req.getParameterMap());
+        if (!"admin".equals(roleCode) && !Check.isNull(roleCode)) {
+            QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
+            userCompanyQueryWrapper.eq("user_id", advertiser.getUserId());
+            userCompanyQueryWrapper.orderByDesc("create_time");
+            userCompanyQueryWrapper.last("limit 1");
+            UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
+            queryWrapper.eq("company_id", userCompany.getCompanyId());
+        }
         Page<Advertiser> page = new Page<Advertiser>(pageNo, pageSize);
         IPage<Advertiser> pageList = advertiserService.page(page, queryWrapper);
         if (pageList != null && pageList.getRecords() != null && pageList.getRecords().size() > 0) {
@@ -78,7 +100,6 @@ public class AdvertiserController {
             for (int i = 0; i < pageList.getRecords().size(); i++) {
                 Advertiser advertiserRecord = pageList.getRecords().get(i);
                 SysCategory sysCategory = sysCategoryService.getById(advertiserRecord.getIndustryId());
-
                 if (sysCategory != null) {
                     advertiserRecord.setIndustryId(sysCategory.getName());
                 }
@@ -103,6 +124,17 @@ public class AdvertiserController {
     public Result<Advertiser> add(@RequestBody Advertiser advertiser) {
         Result<Advertiser> result = new Result<Advertiser>();
         try {
+            String userId = advertiser.getUserId();
+            if (!Check.isNull(userId)) {
+                QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
+                userCompanyQueryWrapper.eq("user_id", userId);
+                userCompanyQueryWrapper.orderByDesc("create_time");
+                userCompanyQueryWrapper.last("limit 1");
+                UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
+                if (!Check.isNull(userCompany)) {
+                    advertiser.setCompanyId(userCompany.getCompanyId());
+                }
+            }
             advertiserService.save(advertiser);
             result.success("添加成功!");
         } catch (Exception e) {
@@ -152,6 +184,18 @@ public class AdvertiserController {
         if (advertiser == null) {
             result.error500("未找到对应实体");
         } else {
+            QueryWrapper<Project> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("advertiser_id", id);
+            List<Project> projects = projectMapper.selectList(queryWrapper);
+            if (!Check.isNull(projects)) {
+                for (Project project : projects) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("project_id", project.getId());
+                    projectMemberMapper.deleteByMap(map);
+                }
+
+            }
+            projectMapper.delete(queryWrapper);
             boolean ok = advertiserService.removeById(id);
             if (ok) {
                 result.success("删除成功!");

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

@@ -1,8 +1,8 @@
 package org.jeecg.modules.ctop.controller;
 
-import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.entity.BindAccountAuth;
 import cn.com.ctop.common.module.service.IBindAccountAuthService;
+import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -58,6 +58,7 @@ public class BindAccountAuthController {
      */
     @PostMapping(value = "/authorization")
     public Result<IPage<BindAccountAuth>> authorization(@RequestBody JSONObject json) {
+        log.info("授权入参:{}", json);
         Result<IPage<BindAccountAuth>> result = new Result<IPage<BindAccountAuth>>();
         String codeUrl = null;
         try {

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

@@ -70,6 +70,7 @@ public class BindAccountLoginController {
      */
     @PostMapping(value = "/login")
     public Result<IPage<BindAccountLogin>> login(@RequestBody JSONObject json) {
+        log.info("登录入参:{}", json);
         Result<IPage<BindAccountLogin>> result = new Result<>();
         String advertiserId = json.getString("advertiserId");
         if (Check.isNull(advertiserId)) {
@@ -93,32 +94,27 @@ public class BindAccountLoginController {
             deleteMap.put("user_id", userId);
             deleteMap.put("advertiser_id", advertiserId);
             userAllocationMapper.deleteByMap(deleteMap);
-
             Long accountId = (Long) stringObjectMap.get("accountId");
-
-            String realName = json.getString("realName");
-            //部门id
-            String departmentId = json.getString("departmentId");
-            //指定分配人姓名
-            String distributionName = json.getString("distributionName");
+            String userName = json.getString("userName");
             // 媒体类型: 1 头条 2 快手
             String mediaId = json.getString("mediaId");
+            Long projectId = json.getLong("projectId");
+            String projectName = json.getString("projectName");
             UserAllocation userAllocation = new UserAllocation();
-            userAllocation.setDistributionName(distributionName);
+            userAllocation.setUserName(userName);
             userAllocation.setUserId(userId);
             userAllocation.setAdvertiserId(advertiserId);
             userAllocation.setAccountId(accountId);
-            userAllocation.setDepartmentId(departmentId);
             userAllocation.setAdvertiserName(advertiserName);
             userAllocation.setAccountName(accountName);
+            userAllocation.setProjectId(projectId);
+            userAllocation.setProjectName(projectName);
             userAllocation.setMediaId(mediaId);
-            userAllocation.setOperationName(realName);
             int i = userAllocationMapper.insert(userAllocation);
             if (i > 0) {
                 logger.info("用户分配入库完成,advertiserId:{}", advertiserId);
             }
         }
-
         result.setSuccess(trueOrFalse);
         result.setMessage((String) stringObjectMap.get("message"));
         return result;

+ 48 - 40
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java

@@ -13,6 +13,7 @@ import cn.com.ctop.kuaishou.modules.material.entity.KuaishouResultToken;
 import cn.com.ctop.toutiao.entity.ByteDanceAdvertiser;
 import cn.com.ctop.toutiao.service.IByteDanceAdvertiserDataService;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,8 +38,6 @@ public class CallbackController {
     private IKuaishouInterfaceService kuaishouInterfaceService;
 
     @Autowired
-    private CtopOauthTokenMapper cTopOauthTokenMapper;
-    @Autowired
     private IBindAccountAuthService bindAccountAuthService;
 
     @Autowired
@@ -76,34 +75,38 @@ public class CallbackController {
                 KuaishouAccessToken token = accessToken.getData();
                 if (token != null) {
                     Long accountId = token.getAccountId();
-                    //指定分配人姓名
+                    if (Check.isNull(accountId)) {
+                        return "授权绑定失败!";
+                    }
+                    QueryWrapper<UserAllocation> userAllocationQueryWrapper = new QueryWrapper<>();
+                    userAllocationQueryWrapper.eq("account_id", accountId);
+                    userAllocationQueryWrapper.eq("media_id", 2);
+                    userAllocationQueryWrapper.orderByDesc("create_time");
+                    userAllocationQueryWrapper.last("limit 1");
+                    UserAllocation checkUserAllocation = allocationMapper.selectOne(userAllocationQueryWrapper);
+                    if (Check.isNull(checkUserAllocation)) {
+                        return "授权失败,该账号已被:" + checkUserAllocation.getAuthName() + "绑定!";
+                    }
                     String advertiserId = json.getString("advertiserId");
-                    String distributionName = json.getString("distributionName");
-                    // 广告主名称
-                    String advertiserName = json.getString("advertiser_name");
-                    // 媒体类型: 1 头条 2 快手
-                    String mediaId = json.getString("mediaId");
-                    String realName = json.getString("realName");
-                    //部门id
-                    String departmentId = json.getString("departmentId");
-                    //创建人
-                    String userId = json.getString("userId");
+                    String userName = json.getString("userName");//指定分配人姓名
+                    String advertiserName = json.getString("advertiser_name"); // 广告主名称
+                    String mediaId = json.getString("mediaId"); // 媒体类型: 1 头条 2 快手
+                    String userId = json.getString("userId"); //创建人
+                    Long projectId = json.getLong("projectId");
+                    String projectName = json.getString("projectName");
                     UserAllocation userAllocation = new UserAllocation();
-                    userAllocation.setDistributionName(distributionName);
+                    userAllocation.setUserName(userName);
                     userAllocation.setUserId(userId);
                     userAllocation.setAdvertiserId(advertiserId);
-
-
-                    // 获取快手昵称
-                    Map<String, Object> advertiseBaseInfoMap = kuaishouInterfaceService.advertiserInfo(accountId, token.getAccessToken());
+                    Map<String, Object> advertiseBaseInfoMap = kuaishouInterfaceService.advertiserInfo(accountId, token.getAccessToken());// 获取快手昵称
                     if ((Integer) advertiseBaseInfoMap.get("code") == 0) {
                         userAllocation.setAuthName((String) advertiseBaseInfoMap.get("userName"));
                     }
                     userAllocation.setAdvertiserName(advertiserName);
                     userAllocation.setMediaId(mediaId);
-                    userAllocation.setDepartmentId(departmentId);
-                    userAllocation.setOperationName(realName);
                     userAllocation.setAccountId(accountId);
+                    userAllocation.setProjectId(projectId);
+                    userAllocation.setProjectName(projectName);
                     userAllocation.setCreateTime(new Date());
                     userAllocation.setUpdateTime(new Date());
                     allocationMapper.deleteById(userAllocation.getId());
@@ -131,8 +134,7 @@ public class CallbackController {
                     topOauthToken.setRefreshTokenExpiresIn(refreshTokenExpireInDate);
                     topOauthToken.setUpdateTime(new Date());
                     ctopOauthTokenService.saveOrUpdate(topOauthToken);
-                    //账号绑定
-                    bindAccountAuthService.addBindAccount(accountId, KuaishouInterfaceConstant.LOGIN_TYPE_KUAISHOU, advertiserId);
+                    bindAccountAuthService.addBindAccount(accountId, KuaishouInterfaceConstant.LOGIN_TYPE_KUAISHOU, advertiserId); //账号绑定
                     Thread t = new Thread() {
                         @Override
                         public void run() {
@@ -190,19 +192,14 @@ public class CallbackController {
                 logger.error("获取token失败,state:{},message:{}", state, message);
                 throw new Exception("token返回码异常");
             }
-            //广告主id
-            String advertiserId = json.getString("advertiserId");
-            // 媒体类型: 1 头条 2 快手
-            String mediaId = json.getString("mediaId");
-            String realName = json.getString("realName");
-            //部门id
-            String departmentId = json.getString("departmentId");
-            //指定分配人姓名
-            String distributionName = json.getString("distributionName");
-            // 广告主名称
-            String advertiserName = json.getString("advertiser_name");
-            //创建人
-            String userId = json.getString("userId");
+            String advertiserId = json.getString("advertiserId");//广告主id
+            String mediaId = json.getString("mediaId"); // 媒体类型: 1 头条 2 快手
+
+            String advertiserName = json.getString("advertiser_name"); // 广告主名称
+            String userId = json.getString("userId"); //创建人
+            String userName = json.getString("userName"); //创建人
+            Long projectId = json.getLong("projectId");
+            String projectName = json.getString("projectName");
 
             JSONObject data = resultObject.getJSONObject("data");
             CtopOauthToken token = new CtopOauthToken(advertiserId, data);
@@ -215,14 +212,26 @@ public class CallbackController {
                 throw new Exception("获取广告主信息失败");
             }
             ByteDanceAdvertiser advertiserData = (ByteDanceAdvertiser) advertiserDataMap.get("data");
+            Long accountId = token.getAccountId();
+            QueryWrapper<UserAllocation> userAllocationQueryWrapper = new QueryWrapper<>();
+            userAllocationQueryWrapper.eq("account_id", accountId);
+            userAllocationQueryWrapper.eq("media_id", 1);
+            userAllocationQueryWrapper.orderByDesc("create_time");
+            userAllocationQueryWrapper.last("limit 1");
+            UserAllocation checkUserAllocation = allocationMapper.selectOne(userAllocationQueryWrapper);
+            if (Check.isNull(checkUserAllocation)) {
+                returnMap.put("code", -1);
+                returnMap.put("desc", "授权失败,账号已被:" + checkUserAllocation.getUserName() + "绑定");
+            }
+
             UserAllocation userAllocation = new UserAllocation();
-            userAllocation.setDistributionName(distributionName);
             userAllocation.setUserId(userId);
-            userAllocation.setDepartmentId(departmentId);
-            userAllocation.setOperationName(realName);
+            userAllocation.setUserName(userName);
             userAllocation.setAccountId(token.getAccountId());
             userAllocation.setAdvertiserName(advertiserName);
             userAllocation.setMediaId(mediaId);
+            userAllocation.setProjectId(projectId);
+            userAllocation.setProjectName(projectName);
             userAllocation.setAuthName(advertiserData.getName());
             userAllocation.setAdvertiserId(advertiserId);
             userAllocation.setCreateTime(new Date());
@@ -237,8 +246,7 @@ public class CallbackController {
                 logger.info("同步分配用户表完成,task_id:{},accountId:{}", state, token.getAccountId());
 
             }
-            //账号绑定
-            bindAccountAuthService.addBindAccount(token.getAccountId(), KuaishouInterfaceConstant.LOGIN_TYPE_BYTEDANCE, advertiserId);
+            bindAccountAuthService.addBindAccount(token.getAccountId(), KuaishouInterfaceConstant.LOGIN_TYPE_BYTEDANCE, advertiserId); //账号绑定
             returnMap.put("code", 0);
             returnMap.put("desc", "success");
         } catch (Exception e) {

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

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

+ 64 - 6
module-ctop/src/main/java/cn/com/ctop/manage/modules/material/controller/MaterialInfoController.java

@@ -1,20 +1,24 @@
-package cn.com.ctop.manage.modules.material.controller;
+package org.jeecg.modules.ctop.controller;
 
 
 import cn.com.ctop.common.module.entity.MaterialInfo;
 import cn.com.ctop.common.module.service.IMaterialInfoService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.FileEntity;
+import cn.com.ctop.common.module.utils.FileUploadTool;
+import cn.com.ctop.common.module.utils.LoadFileUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.DateUtils;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@@ -32,7 +36,9 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
+import java.text.ParseException;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -51,6 +57,41 @@ public class MaterialInfoController {
     @Autowired
     private IMaterialInfoService materialInfoService;
 
+    @GetMapping(value = "/report")
+    public JSONObject report(String userId) {
+        return materialInfoService.report(userId);
+
+    }
+
+
+    @RequestMapping(value = "/getMd5", consumes = "multipart/form-data;charset=utf-8")
+    public String getMd5(@RequestParam("multipartFile") MultipartFile multipartFile, HttpServletRequest request) throws IOException {
+
+        Map<String, Object> returnMap = new HashMap<>();
+        try {
+            String savaPath = "D:\\tets1\\image";
+            FileUploadTool fileUploadTool = new FileUploadTool();
+            FileEntity entity;
+            entity = fileUploadTool.createFile(multipartFile, request, savaPath);
+
+            String path = entity.getPath();
+            String md5 = LoadFileUtil.getMD5(path);
+            return md5;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    @GetMapping(value = "/getDetail")
+    public JSONObject getDetail(String materialId) {
+
+        return materialInfoService.getDetail(materialId);
+
+    }
+
+
     /**
      * 分页列表查询
      *
@@ -60,6 +101,8 @@ public class MaterialInfoController {
      * @param req
      * @return
      */
+
+
     @AutoLog(value = "素材信息-分页列表查询")
     @ApiOperation(value = "素材信息-分页列表查询", notes = "素材信息-分页列表查询")
     @GetMapping(value = "/list")
@@ -67,11 +110,25 @@ public class MaterialInfoController {
                                                      @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                      @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                      HttpServletRequest req) {
+
         Result<IPage<MaterialInfo>> result = new Result<>();
+        Object createTime = materialInfo.getCreateTime();
+        materialInfo.setCreateTime(null);
+        if (!Check.isNull(materialInfo.getUserId())) {
+            String roleCode = materialInfoService.getRoleCodeByUserId(materialInfo.getUserId());
+            if ("admin".equals(roleCode) || "operator".equals(roleCode) || "kuaishouOperationManager".equals(roleCode)) {
+                materialInfo.setUserId(null);
+            }
+        }
         QueryWrapper<MaterialInfo> queryWrapper = QueryGenerator.initQueryWrapper(materialInfo, req.getParameterMap());
-        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        if (null != user.getUsername() && !user.getUsername().contains("admin")) {
-            queryWrapper.eq("user_id", user.getId());
+        if (!Check.isNull(createTime)) {
+            try {
+                Map<String, Object> map = DateUtils.getStartEndTime(createTime.toString());
+                queryWrapper.ge("create_time", map.get("start"));
+                queryWrapper.lt("create_time", map.get("end"));
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
         }
         Page<MaterialInfo> page = new Page<>(pageNo, pageSize);
         IPage<MaterialInfo> pageList = materialInfoService.page(page, queryWrapper);
@@ -123,6 +180,7 @@ public class MaterialInfoController {
         }
 
         return result;
+
     }
 
     /**

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

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

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

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

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

@@ -0,0 +1,75 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.manage.modules.material.service.IMaterialUploadService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 素材归属标
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-23
+ */
+@Slf4j
+@Api(tags = "素材归属标")
+@RestController
+@RequestMapping("/ctop/materialUpload")
+public class MaterialUploadController {
+
+    @Autowired
+    private IMaterialUploadService materialUploadService;
+
+    @PostMapping(value = "/uploadAccount")
+    public Map<String, Object> uploadAccount(@RequestBody JSONObject json) {
+        Map<String, Object> returnMap = new HashMap<>();
+        String mediaId = json.getString("mediaId");
+        JSONArray materialArray = json.getJSONArray("materialArray");
+        JSONArray accountArray = json.getJSONArray("accountArray");
+        try {
+            if (Check.isNull(mediaId)) {
+                throw new Exception("请选择项目媒体类型");
+            }
+            if (Check.isNull(materialArray) || Check.isNull(accountArray)) {
+                throw new Exception("请选择账号或素材");
+            }
+            Thread thread = new Thread() {
+                @Override
+                public void run() {
+                    try {
+                        materialUploadService.uploadAccount(mediaId, materialArray, accountArray);
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            };
+            thread.start();
+
+            returnMap.put("success", true);
+            returnMap.put("message", "开始上传文件");
+            returnMap.put("code", 0);
+
+        } catch (Exception e) {
+            returnMap.put("success", false);
+            returnMap.put("message", e.getMessage());
+        }
+
+
+        return returnMap;
+
+    }
+
+
+}

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

@@ -0,0 +1,332 @@
+package org.jeecg.modules.ctop.controller;
+
+
+import cn.com.ctop.common.module.utils.Check;
+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.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.ctop.entity.Advertiser;
+import org.jeecg.modules.ctop.entity.Project;
+import org.jeecg.modules.ctop.entity.ProjectMember;
+import org.jeecg.modules.ctop.mapper.ProjectMapper;
+import org.jeecg.modules.ctop.service.IAdvertiserService;
+import org.jeecg.modules.ctop.service.IProjectMemberService;
+import org.jeecg.modules.ctop.service.IProjectService;
+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.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 项目
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-19
+ */
+@Slf4j
+@Api(tags = "项目")
+@RestController
+@RequestMapping("/ctop/project")
+public class ProjectController {
+    @Autowired
+    private IProjectService projectService;
+
+    @Autowired
+    private IProjectMemberService projectMemberService;
+
+
+    @Autowired
+    private IAdvertiserService advertiserService;
+
+
+    @Autowired
+    private ProjectMapper projectMapper;
+
+
+    /**
+     * 我管理的
+     *
+     * @param userId
+     * @return
+     */
+    @AutoLog(value = "项目成员-分页列表查询")
+    @ApiOperation(value = "项目成员-分页列表查询", notes = "项目成员-分页列表查询")
+    @GetMapping(value = "/responsibleList")
+    public Map<String, Object> responsibleList(String userId) {
+        Map<String, Object> map = new HashMap<>();
+
+      /*  String roleCode = materialReportMapper.getRoleCodeByUserId(userId);
+        if (Check.isNull(roleCode)) {
+            map.put("code", -1);
+            return map;
+        }
+        QueryWrapper<Project> queryWrapper = new QueryWrapper<>();
+        if (!"admin".equals(roleCode)) {
+            QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
+            userCompanyQueryWrapper.eq("user_id", userId);
+            userCompanyQueryWrapper.orderByDesc("create_time");
+            userCompanyQueryWrapper.last("limit 1");
+            UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
+            queryWrapper.eq("company_id", userCompany.getCompanyId());
+            if ("kuaishouOperationManager".equals(roleCode)) {
+
+                queryWrapper.eq("media_id", "2");
+            } else if ("toutiaoOperationManager".equals(roleCode)) {
+                queryWrapper.eq("media_id", "1");
+            }
+        }*/
+        QueryWrapper<Project> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("responsible_id", userId);
+        queryWrapper.orderByDesc("create_time");
+        List<Project> projects = projectMapper.selectList(queryWrapper);
+        map.put("success", true);
+        map.put("code", 0);
+        map.put("result", projects);
+
+
+        return map;
+    }
+
+
+    /**
+     * 分页列表查询
+     *
+     * @param project
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "项目-分页列表查询")
+    @ApiOperation(value = "项目-分页列表查询", notes = "项目-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<Project>> queryPageList(Project project,
+                                                @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                HttpServletRequest req) {
+        Result<IPage<Project>> result = new Result<IPage<Project>>();
+        QueryWrapper<Project> queryWrapper = QueryGenerator.initQueryWrapper(project, req.getParameterMap());
+        Page<Project> page = new Page<Project>(pageNo, pageSize);
+        IPage<Project> pageList = projectService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param project
+     * @return
+     */
+    @AutoLog(value = "项目-添加")
+    @ApiOperation(value = "项目-添加", notes = "项目-添加")
+    @PostMapping(value = "/add")
+    public Result<Project> add(@RequestBody Project project) {
+        Result<Project> result = new Result<Project>();
+        try {
+            String advertiserId = project.getAdvertiserId();
+            Advertiser advertiser = advertiserService.getById(advertiserId);
+            if (!Check.isNull(advertiser)) {
+                project.setCompanyId(advertiser.getCompanyId());
+            }
+            projectService.save(project);
+            Long id = project.getId();
+            Map<String, Object> map = new HashMap<>();
+            map.put("project_id", id);
+            map.put("user_id", project.getResponsibleId());
+            projectMemberService.removeByMap(map);
+            ProjectMember member = new ProjectMember();
+            member.setProjectId(id);
+            member.setProjectName(project.getProjectName());
+            member.setUserId(project.getResponsibleId());
+            member.setUserName(project.getResponsibleName());
+            projectMemberService.save(member);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param project
+     * @return
+     */
+    @AutoLog(value = "项目-编辑")
+    @ApiOperation(value = "项目-编辑", notes = "项目-编辑")
+    @PutMapping(value = "/edit")
+    public Result<Project> edit(@RequestBody Project project) {
+        Result<Project> result = new Result<Project>();
+        Project projectEntity = projectService.getById(project.getId());
+        if (projectEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = projectService.updateById(project);
+            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 {
+            projectService.removeById(id);
+            Map<String, Object> deleteMap = new HashMap<>();
+            deleteMap.put("project_id", id);
+            projectMemberService.removeByMap(deleteMap);
+        } 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<Project> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<Project> result = new Result<Project>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.projectService.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<Project> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<Project> result = new Result<Project>();
+        Project project = projectService.getById(id);
+        if (project == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(project);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<Project> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                Project project = JSON.parseObject(deString, Project.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(project, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<Project> pageList = projectService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "项目列表");
+        mv.addObject(NormalExcelConstants.CLASS, Project.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<Project> listProjects = ExcelImportUtil.importExcel(file.getInputStream(), Project.class, params);
+                projectService.saveBatch(listProjects);
+                return Result.ok("文件导入成功!数据行数:" + listProjects.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("文件导入失败!");
+    }
+
+}

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

@@ -0,0 +1,382 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.bytedance.mapper.MaterialReportMapper;
+import cn.com.ctop.common.module.utils.Check;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.ctop.entity.Project;
+import org.jeecg.modules.ctop.entity.ProjectMember;
+import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
+import org.jeecg.modules.ctop.service.IProjectMemberService;
+import org.jeecg.modules.ctop.service.IProjectService;
+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.*;
+
+/**
+ * 项目成员
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-19
+ */
+@Slf4j
+@Api(tags = "项目成员")
+@RestController
+@RequestMapping("/ctop/projectMember")
+public class ProjectMemberController {
+    @Autowired
+    private IProjectMemberService projectMemberService;
+    @Autowired
+    private ProjectMemberMapper projectMemberMapper;
+    @Autowired
+    private IProjectService projectService;
+    @Autowired
+    private MaterialReportMapper materialReportMapper;
+
+
+    /**
+     * 我参与项目
+     *
+     * @param projectId
+     * @return
+     */
+    @AutoLog(value = "项目成员-分页列表查询")
+    @ApiOperation(value = "项目成员-分页列表查询", notes = "项目成员-分页列表查询")
+    @GetMapping(value = "/getMemberList")
+    public Map<String, Object> getMemberList(String projectId) {
+        Map<String, Object> map = new HashMap<>();
+        try {
+            QueryWrapper<ProjectMember> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("project_id", projectId);
+            queryWrapper.orderByDesc("create_time");
+            List<ProjectMember> projectMemberList = projectMemberMapper.selectList(queryWrapper);
+            map.put("code", 0);
+            map.put("success", true);
+            map.put("result", projectMemberList);
+        } catch (Exception e) {
+            map.put("success", false);
+            map.put("code", -1);
+        }
+
+        return map;
+    }
+
+
+    /**
+     * 我参与项目
+     *
+     * @param userId
+     * @return
+     */
+    @AutoLog(value = "项目成员-分页列表查询")
+    @ApiOperation(value = "项目成员-分页列表查询", notes = "项目成员-分页列表查询")
+    @GetMapping(value = "/participateList")
+    public Map<String, Object> participateList(String userId) {
+        Map<String, Object> map = new HashMap<>();
+        try {
+            QueryWrapper<ProjectMember> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("user_id", userId);
+            queryWrapper.groupBy("project_id");
+            queryWrapper.orderByDesc("create_time");
+            List<ProjectMember> projectMembers = projectMemberMapper.selectList(queryWrapper);
+            List<ProjectMember> projectMemberList = new ArrayList<>();
+            if (!Check.isNull(projectMembers)) {
+                for (ProjectMember projectMember : projectMembers) {
+                    Project project = projectService.getById(projectMember.getProjectId());
+                    projectMember.setResponsibleName(project.getResponsibleName());
+                    projectMember.setAdvertiserName(project.getAdvertiserName());
+                    projectMember.setAdvertiserId(project.getAdvertiserId());
+                    projectMember.setMediaId(project.getMediaId());
+                    projectMemberList.add(projectMember);
+                }
+            }
+            map.put("code", 0);
+            map.put("success", true);
+            map.put("result", projectMemberList);
+        } catch (Exception e) {
+            map.put("success", false);
+            map.put("code", -1);
+        }
+
+        return map;
+    }
+
+
+    /**
+     * 分页列表查询
+     *
+     * @param projectMember
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "项目成员-分页列表查询")
+    @ApiOperation(value = "项目成员-分页列表查询", notes = "项目成员-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<ProjectMember>> queryPageList(ProjectMember projectMember,
+                                                      @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                      @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                      HttpServletRequest req) {
+        Result<IPage<ProjectMember>> result = new Result<IPage<ProjectMember>>();
+        QueryWrapper<ProjectMember> queryWrapper = QueryGenerator.initQueryWrapper(projectMember, req.getParameterMap());
+        Page<ProjectMember> page = new Page<ProjectMember>(pageNo, pageSize);
+        IPage<ProjectMember> pageList = projectMemberService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+
+    /**
+     * 批量添加
+     *
+     * @param jsonObject
+     * @return
+     */
+    @AutoLog(value = "项目成员-添加")
+    @ApiOperation(value = "项目成员-添加", notes = "项目成员-添加")
+    @PostMapping(value = "/batchAdd")
+    public Result<ProjectMember> batchAdd(@RequestBody JSONObject jsonObject) {
+        Result<ProjectMember> result = new Result<ProjectMember>();
+        try {
+            if (Check.isNull(jsonObject)) {
+                throw new Exception("入参不能为空");
+            }
+            Long projectId = jsonObject.getLong("projectId");
+            String projectName = jsonObject.getString("projectName");
+            JSONArray memberArr = jsonObject.getJSONArray("memberArr");
+            if (Check.isNull(memberArr)) {
+                throw new Exception("请选择项目成员");
+            }
+            for (int i = 0; i < memberArr.size(); i++) {
+                JSONObject memberJson = memberArr.getJSONObject(i);
+                if (!Check.isNull(memberJson)) {
+                    String userId = memberJson.getString("userId");
+                    QueryWrapper<ProjectMember> queryWrapper = new QueryWrapper<>();
+                    queryWrapper.eq("user_id", userId);
+                    queryWrapper.eq("project_id", projectId);
+                    ProjectMember selectMember = (ProjectMember) projectMemberService.getObj(queryWrapper);
+                    if (!Check.isNull(selectMember)) {
+                        continue;
+                    }
+                    ProjectMember member = new ProjectMember();
+                    String roleCode = materialReportMapper.getRoleCodeByUserId(userId);
+                    if (!Check.isNull(roleCode)) {
+                        member.setRoleCode(roleCode);
+                    }
+                    member.setProjectId(projectId);
+                    member.setProjectName(projectName);
+                    member.setUserId(userId);
+                    member.setUserName(memberJson.getString("userName"));
+                    projectMemberService.save(member);
+                }
+            }
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+
+    /**
+     * 添加
+     *
+     * @param projectMember
+     * @return
+     */
+    @AutoLog(value = "项目成员-添加")
+    @ApiOperation(value = "项目成员-添加", notes = "项目成员-添加")
+    @PostMapping(value = "/add")
+    public Result<ProjectMember> add(@RequestBody ProjectMember projectMember) {
+        Result<ProjectMember> result = new Result<ProjectMember>();
+        try {
+            projectMemberService.save(projectMember);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param projectMember
+     * @return
+     */
+    @AutoLog(value = "项目成员-编辑")
+    @ApiOperation(value = "项目成员-编辑", notes = "项目成员-编辑")
+    @PutMapping(value = "/edit")
+    public Result<ProjectMember> edit(@RequestBody ProjectMember projectMember) {
+        Result<ProjectMember> result = new Result<ProjectMember>();
+        ProjectMember projectMemberEntity = projectMemberService.getById(projectMember.getId());
+        if (projectMemberEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = projectMemberService.updateById(projectMember);
+            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 {
+            projectMemberService.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<ProjectMember> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<ProjectMember> result = new Result<ProjectMember>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.projectMemberService.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<ProjectMember> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<ProjectMember> result = new Result<ProjectMember>();
+        ProjectMember projectMember = projectMemberService.getById(id);
+        if (projectMember == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(projectMember);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<ProjectMember> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                ProjectMember projectMember = JSON.parseObject(deString, ProjectMember.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(projectMember, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<ProjectMember> pageList = projectMemberService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "项目成员列表");
+        mv.addObject(NormalExcelConstants.CLASS, ProjectMember.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<ProjectMember> listProjectMembers = ExcelImportUtil.importExcel(file.getInputStream(), ProjectMember.class, params);
+                projectMemberService.saveBatch(listProjectMembers);
+                return Result.ok("文件导入成功!数据行数:" + listProjectMembers.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("文件导入失败!");
+    }
+
+}

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

@@ -1,7 +1,9 @@
 package org.jeecg.modules.ctop.controller;
 
 import cn.com.ctop.common.module.entity.UserAllocation;
+import cn.com.ctop.common.module.mapper.UserAllocationMapper;
 import cn.com.ctop.common.module.service.IUserAllocationService;
+import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -16,6 +18,8 @@ import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.ctop.entity.Project;
+import org.jeecg.modules.ctop.service.IProjectService;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -38,9 +42,10 @@ import java.util.Map;
 
 /**
  * 用户分配
+ *
  * @author jeecg-boot
- * @date 2019-08-08
  * @version V1.0
+ * @date 2019-08-08
  */
 @Slf4j
 @Api(tags = "用户分配")
@@ -49,6 +54,62 @@ import java.util.Map;
 public class UserAllocationController {
     @Autowired
     private IUserAllocationService userAllocationService;
+    @Autowired
+    private UserAllocationMapper userAllocationMapper;
+    @Autowired
+    private IProjectService projectService;
+
+
+    @GetMapping(value = "/getAccountList")
+    public Result<List<UserAllocation>> getAccountList(String userId, Long projectId) {
+        Result<List<UserAllocation>> result = new Result<>();
+        try {
+
+            QueryWrapper<UserAllocation> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("user_id", userId);
+            queryWrapper.eq("project_id", projectId);
+            Project project = projectService.getById(projectId);
+            if (!Check.isNull(project)) {
+                queryWrapper.eq("media_id", project.getMediaId());
+            }
+
+            List<UserAllocation> userAllocations = userAllocationMapper.selectList(queryWrapper);
+            result.setSuccess(true);
+            result.setResult(userAllocations);
+        } catch (Exception e) {
+            result.setSuccess(false);
+            result.success("查询失败");
+        }
+
+        return result;
+
+    }
+
+
+    @GetMapping(value = "/getAccountListByProjectId")
+    public Result<List<UserAllocation>> getAccountListByProjectId(Long projectId) {
+        Result<List<UserAllocation>> result = new Result<>();
+        try {
+
+            QueryWrapper<UserAllocation> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("project_id", projectId);
+            Project project = projectService.getById(projectId);
+            if (!Check.isNull(project)) {
+                queryWrapper.eq("media_id", project.getMediaId());
+            }
+
+            List<UserAllocation> userAllocations = userAllocationMapper.selectList(queryWrapper);
+            result.setSuccess(true);
+            result.setResult(userAllocations);
+        } catch (Exception e) {
+            result.setSuccess(false);
+            result.success("查询失败");
+        }
+
+        return result;
+
+    }
+
 
     /**
      * 分页列表查询

+ 65 - 36
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/Advertiser.java

@@ -16,59 +16,88 @@ import java.util.Date;
 
 /**
  * 广告主信息表
+ *
  * @author jeecg-boot
- * @date 2019-06-11
  * @version V1.0
+ * @date 2019-06-11
  */
 @Data
 @TableName("ctop_advertiser")
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@ApiModel(value="ctop_advertiser对象", description="广告主信息表")
+@ApiModel(value = "ctop_advertiser对象", description = "广告主信息表")
 public class Advertiser {
 
-	/**主键ID*/
-	@TableId(type = IdType.UUID)
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.UUID)
     @ApiModelProperty(value = "主键ID")
-	private String id;
-	/**广告主名称*/
-	@Excel(name = "广告主名称", width = 15)
+    private String id;
+    /**
+     * 广告主名称
+     */
+    @Excel(name = "广告主名称", width = 15)
     @ApiModelProperty(value = "广告主名称")
-	private String name;
-	/**行业ID*/
-	@Excel(name = "行业ID", width = 15)
+    private String name;
+    /**
+     * 行业ID
+     */
+    @Excel(name = "行业ID", width = 15)
     @ApiModelProperty(value = "行业ID")
-	private String industryId;
-	/**联系人姓名*/
-	@Excel(name = "联系人姓名", width = 15)
+    private String industryId;
+    /**
+     * 联系人姓名
+     */
+    @Excel(name = "联系人姓名", width = 15)
     @ApiModelProperty(value = "联系人姓名")
-	private String contact;
-	/**联系人手机*/
-	@Excel(name = "联系人手机", width = 15)
+    private String contact;
+    /**
+     * 联系人手机
+     */
+    @Excel(name = "联系人手机", width = 15)
     @ApiModelProperty(value = "联系人手机")
-	private String mobile;
-	/**联系人邮箱*/
-	@Excel(name = "联系人邮箱", width = 15)
+    private String mobile;
+    /**
+     * 联系人邮箱
+     */
+    @Excel(name = "联系人邮箱", width = 15)
     @ApiModelProperty(value = "联系人邮箱")
-	private String email;
-	/**创建人*/
-	@Excel(name = "创建人", width = 15)
+    private String email;
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", width = 15)
     @ApiModelProperty(value = "创建人")
-	private String createBy;
-	/**创建时间*/
-	@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")
+    private String createBy;
+    /**
+     * 创建时间
+     */
+    @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 = 15)
+    private Date createTime;
+    /**
+     * 修改人
+     */
+    @Excel(name = "修改人", width = 15)
     @ApiModelProperty(value = "修改人")
-	private String updateBy;
-	/**修改时间*/
-	@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")
+    private String updateBy;
+    /**
+     * 修改时间
+     */
+    @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;
+    private Date updateTime;
+
+
+
+    private String userId;
+
+    private String companyId;
+
+
 }

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

@@ -0,0 +1,96 @@
+package org.jeecg.modules.ctop.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 2019-11-19
+ */
+@Data
+@TableName("ctop_project")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_project对象", description = "项目")
+public class Project {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 项目名称
+     */
+    @Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+    /**
+     * 广告主id
+     */
+    @Excel(name = "广告主id", width = 15)
+    @ApiModelProperty(value = "广告主id")
+    private String advertiserId;
+
+    @Excel(name = "广告主名称", width = 15)
+    @ApiModelProperty(value = "广告主名称")
+    private String advertiserName;
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String userId;
+    /**
+     * 负责人id
+     */
+    @Excel(name = "负责人id", width = 15)
+    @ApiModelProperty(value = "负责人id")
+    private String responsibleId;
+
+
+    @Excel(name = "负责人名称", width = 15)
+    @ApiModelProperty(value = "负责人名称")
+    private String responsibleName;
+
+    @Excel(name = "公司id", width = 15)
+    @ApiModelProperty(value = "公司id")
+    private String companyId;
+    /**
+     * 媒体类型
+     */
+    @Excel(name = "媒体类型", width = 15)
+    @ApiModelProperty(value = "媒体类型")
+    private String mediaId;
+    /**
+     * 创建时间
+     */
+    @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;
+}

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

@@ -0,0 +1,91 @@
+package org.jeecg.modules.ctop.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 项目成员
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-19
+ */
+@Data
+@TableName("ctop_project_member")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_project_member对象", description = "项目成员")
+public class ProjectMember {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 项目id
+     */
+    @Excel(name = "项目id", width = 15)
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+
+    @Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+    /**
+     * 成员id
+     */
+    @Excel(name = "成员id", width = 15)
+    @ApiModelProperty(value = "成员id")
+    private String userId;
+
+    @Excel(name = "成员名称", width = 15)
+    @ApiModelProperty(value = "成员名称")
+    private String userName;
+
+
+    @TableField(exist = false)
+    private String responsibleName;
+
+    @TableField(exist = false)
+    private String advertiserName;
+    @TableField(exist = false)
+    private String advertiserId;
+
+
+    @TableField(exist = false)
+    private String mediaId;
+
+    private String roleCode;
+
+    /**
+     * 创建时间
+     */
+    @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;
+}

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

@@ -42,6 +42,7 @@ public class KuaishouMaterialsLoadJob implements Job {
                         kuaishouInterfaceService.getCreativeList(token);
                         //2:获取全量视频素材数据
                         kuaishouInterfaceService.getVideoList(token);
+
                     } catch (Exception e) {
                         e.printStackTrace();
                     } finally {

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

@@ -0,0 +1,15 @@
+package org.jeecg.modules.ctop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.ctop.entity.Project;
+
+/**
+ * 项目
+ *
+ * @author: jeecg-boot
+ * @date: 2019-11-19
+ * @cersion: V1.0
+ */
+public interface ProjectMapper extends BaseMapper<Project> {
+
+}

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

@@ -0,0 +1,15 @@
+package org.jeecg.modules.ctop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.ctop.entity.ProjectMember;
+
+/**
+ * 项目成员
+ *
+ * @author: jeecg-boot
+ * @date: 2019-11-19
+ * @cersion: V1.0
+ */
+public interface ProjectMemberMapper extends BaseMapper<ProjectMember> {
+
+}

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMapper.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="org.jeecg.modules.ctop.mapper.ProjectMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMemberMapper.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="org.jeecg.modules.ctop.mapper.ProjectMemberMapper">
+
+</mapper>

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

@@ -0,0 +1,15 @@
+package org.jeecg.modules.ctop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.ctop.entity.ProjectMember;
+
+/**
+ * 项目成员
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-19
+ */
+public interface IProjectMemberService extends IService<ProjectMember> {
+
+}

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

@@ -0,0 +1,15 @@
+package org.jeecg.modules.ctop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.ctop.entity.Project;
+
+/**
+ * 项目
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-19
+ */
+public interface IProjectService extends IService<Project> {
+
+}

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

@@ -0,0 +1,19 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.ctop.entity.ProjectMember;
+import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
+import org.jeecg.modules.ctop.service.IProjectMemberService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 项目成员
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-19
+ */
+@Service
+public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, ProjectMember> implements IProjectMemberService {
+
+}

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

@@ -0,0 +1,19 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.ctop.entity.Project;
+import org.jeecg.modules.ctop.mapper.ProjectMapper;
+import org.jeecg.modules.ctop.service.IProjectService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 项目
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-19
+ */
+@Service
+public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> implements IProjectService {
+
+}

+ 8 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/fileupload/controller/FileController.java

@@ -1,10 +1,12 @@
 package org.jeecg.modules.fileupload.controller;
 
 import cn.com.ctop.common.module.service.IMaterialInfoService;
+import com.alibaba.fastjson.JSONObject;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -26,8 +28,11 @@ public class FileController {
     }
 
     @PostMapping("file/insert")
-    public Map<String, Object> insertFile(String code, String url) throws Exception {
-        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        return materialInfoService.insert(user.getId(), code, url);
+    public Map<String, Object> insertFile(@RequestBody JSONObject json) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject()
+                .getPrincipal();
+
+        json.put("userId", user.getId());
+        return materialInfoService.insert(json);
     }
 }

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java

@@ -1,5 +1,7 @@
 package org.jeecg.modules.system.controller;
 
+import cn.com.ctop.common.module.utils.AesEncryptUtil;
+import cn.com.ctop.common.module.utils.EncryptedString;
 import cn.hutool.core.util.RandomUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyuncs.exceptions.ClientException;
@@ -16,8 +18,6 @@ import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.DySmsHelper;
 import org.jeecg.common.util.PasswordUtil;
 import org.jeecg.common.util.RedisUtil;
-import org.jeecg.common.util.encryption.AesEncryptUtil;
-import org.jeecg.common.util.encryption.EncryptedString;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.shiro.vo.DefContants;
 import org.jeecg.modules.system.entity.SysDepart;

Разница между файлами не показана из-за своего большого размера
+ 387 - 401
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java


+ 295 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/UserCompanyController.java

@@ -0,0 +1,295 @@
+package org.jeecg.modules.system.controller;
+
+import cn.com.ctop.common.module.utils.Check;
+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.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.entity.UserCompany;
+import org.jeecg.modules.system.mapper.SysUserMapper;
+import org.jeecg.modules.system.mapper.UserCompanyMapper;
+import org.jeecg.modules.system.service.IUserCompanyService;
+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 2019-11-14
+ */
+@Slf4j
+@Api(tags = "用户够公司")
+@RestController
+@RequestMapping("/system/userCompany")
+public class UserCompanyController {
+    @Autowired
+    private IUserCompanyService userCompanyService;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+    @Autowired
+    private UserCompanyMapper userCompanyMapper;
+
+
+    @GetMapping(value = "/companyUser")
+    public void companyUser() {
+
+        List<SysUser> sysUsers = sysUserMapper.selectAllUser();
+        if (!Check.isNull(sysUsers)) {
+            for (SysUser user : sysUsers) {
+                if (!Check.isNull(user)) {
+                    userCompanyService.addOrUpdateUserWithCompany(user);
+                }
+            }
+
+        }
+    }
+
+
+    /**
+     * 获取公司所有用户信息
+     *
+     * @param userId
+     * @return
+     */
+    @PostMapping(value = "/getUserByCompany")
+    public List<UserCompany> companyUser(@RequestBody String userId) {
+        QueryWrapper<UserCompany> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_id", userId);
+        UserCompany userCompany = userCompanyService.getOne(queryWrapper);
+        if (!Check.isNull(userCompany)) {
+            String companyId = userCompany.getCompanyId();
+            queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("company_id", companyId);
+            List<UserCompany> userCompanies = userCompanyMapper.selectList(queryWrapper);
+            return userCompanies;
+        }
+
+        return null;
+    }
+
+
+    /**
+     * 分页列表查询
+     *
+     * @param userCompany
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "用户够公司-分页列表查询")
+    @ApiOperation(value = "用户够公司-分页列表查询", notes = "用户够公司-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<UserCompany>> queryPageList(UserCompany userCompany,
+                                                    @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                    @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                    HttpServletRequest req) {
+        Result<IPage<UserCompany>> result = new Result<IPage<UserCompany>>();
+        QueryWrapper<UserCompany> queryWrapper = QueryGenerator.initQueryWrapper(userCompany, req.getParameterMap());
+        Page<UserCompany> page = new Page<UserCompany>(pageNo, pageSize);
+        IPage<UserCompany> pageList = userCompanyService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param userCompany
+     * @return
+     */
+    @AutoLog(value = "用户够公司-添加")
+    @ApiOperation(value = "用户够公司-添加", notes = "用户够公司-添加")
+    @PostMapping(value = "/add")
+    public Result<UserCompany> add(@RequestBody UserCompany userCompany) {
+        Result<UserCompany> result = new Result<UserCompany>();
+        try {
+            userCompanyService.save(userCompany);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param userCompany
+     * @return
+     */
+    @AutoLog(value = "用户够公司-编辑")
+    @ApiOperation(value = "用户够公司-编辑", notes = "用户够公司-编辑")
+    @PutMapping(value = "/edit")
+    public Result<UserCompany> edit(@RequestBody UserCompany userCompany) {
+        Result<UserCompany> result = new Result<UserCompany>();
+        UserCompany userCompanyEntity = userCompanyService.getById(userCompany.getId());
+        if (userCompanyEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = userCompanyService.updateById(userCompany);
+            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 {
+            userCompanyService.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<UserCompany> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<UserCompany> result = new Result<UserCompany>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.userCompanyService.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<UserCompany> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<UserCompany> result = new Result<UserCompany>();
+        UserCompany userCompany = userCompanyService.getById(id);
+        if (userCompany == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(userCompany);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<UserCompany> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                UserCompany userCompany = JSON.parseObject(deString, UserCompany.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(userCompany, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<UserCompany> pageList = userCompanyService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "用户够公司列表");
+        mv.addObject(NormalExcelConstants.CLASS, UserCompany.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<UserCompany> listUserCompanys = ExcelImportUtil.importExcel(file.getInputStream(), UserCompany.class, params);
+                userCompanyService.saveBatch(listUserCompanys);
+                return Result.ok("文件导入成功!数据行数:" + listUserCompanys.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("文件导入失败!");
+    }
+
+}

+ 65 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/UserCompany.java

@@ -0,0 +1,65 @@
+package org.jeecg.modules.system.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 2019-11-14
+ */
+@Data
+@TableName("user_company")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "user_company对象", description = "用户够公司")
+public class UserCompany {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 用户id
+     */
+    @Excel(name = "用户id", width = 15)
+    @ApiModelProperty(value = "用户id")
+    private String userId;
+    /**
+     * 用户名称
+     */
+    @Excel(name = "用户名称", width = 15)
+    @ApiModelProperty(value = "用户名称")
+    private String userName;
+    /**
+     * 部门id
+     */
+    @Excel(name = "部门id", width = 15)
+    @ApiModelProperty(value = "部门id")
+    private String companyId;
+    /**
+     * 公司名称
+     */
+    @Excel(name = "公司名称", width = 15)
+    @ApiModelProperty(value = "公司名称")
+    private String companyName;
+
+
+    private Date createTime;
+    private Date updateTime;
+
+
+}

+ 3 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java

@@ -21,5 +21,7 @@ public interface SysDepartMapper extends BaseMapper<SysDepart> {
 	/**
 	 * 根据用户ID查询部门集合
 	 */
-	public List<SysDepart> queryUserDeparts(@Param("userId") String userId);
+	 List<SysDepart> queryUserDeparts(@Param("userId") String userId);
+
+	SysDepart queryUserDepartsByDepartId(@Param("departId") String departId);
 }

+ 5 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java

@@ -1,14 +1,14 @@
 package org.jeecg.modules.system.mapper;
 
-import java.util.List;
-
-import org.jeecg.modules.system.entity.SysUserDepart;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
 import io.lettuce.core.dynamic.annotation.Param;
+import org.jeecg.modules.system.entity.SysUserDepart;
+
+import java.util.List;
 
 public interface SysUserDepartMapper extends BaseMapper<SysUserDepart>{
 	
 	List<SysUserDepart> getUserDepartByUid(@Param("userId") String userId);
+
+	SysUserDepart getUserDepartByUserId(@Param("userId") String userId);
 }

+ 59 - 45
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java

@@ -1,10 +1,13 @@
 package org.jeecg.modules.system.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.system.entity.SysUser;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -15,48 +18,59 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2018-12-20
  */
 public interface SysUserMapper extends BaseMapper<SysUser> {
-	/**
-	  * 通过用户账号查询用户信息
-	 * @param username
-	 * @return
-	 */
-	public SysUser getUserByName(@Param("username") String username);
-
-	/**
-	 *  根据部门Id查询用户信息
-	 * @param page
-	 * @param departId
-	 * @return
-	 */
-	IPage<SysUser> getUserByDepId(Page page, @Param("departId") String departId, @Param("username") String username);
-
-	/**
-	 * 根据角色Id查询用户信息
-	 * @param page
-	 * @param
-	 * @return
-	 */
-	IPage<SysUser> getUserByRoleId(Page page, @Param("roleId") String roleId, @Param("username") String username);
-	
-	/**
-	 * 根据用户名设置部门ID
-	 * @param username
-	 * @param orgCode
-	 */
-	void updateUserDepart(@Param("username") String username,@Param("orgCode") String orgCode);
-	
-	/**
-	 * 根据手机号查询用户信息
-	 * @param phone
-	 * @return
-	 */
-	public SysUser getUserByPhone(@Param("phone") String phone);
-	
-	
-	/**
-	 * 根据邮箱查询用户信息
-	 * @param email
-	 * @return
-	 */
-	public SysUser getUserByEmail(@Param("email")String email);
+    List<SysUser> selectAllUser();
+
+
+    /**
+     * 通过用户账号查询用户信息
+     *
+     * @param username
+     * @return
+     */
+    public SysUser getUserByName(@Param("username") String username);
+
+    /**
+     * 根据部门Id查询用户信息
+     *
+     * @param page
+     * @param departId
+     * @return
+     */
+    IPage<SysUser> getUserByDepId(Page page, @Param("departId") String departId, @Param("username") String username);
+
+    /**
+     * 根据角色Id查询用户信息
+     *
+     * @param page
+     * @param
+     * @return
+     */
+    IPage<SysUser> getUserByRoleId(Page page, @Param("roleId") String roleId, @Param("username") String username);
+
+    /**
+     * 根据用户名设置部门ID
+     *
+     * @param username
+     * @param orgCode
+     */
+    void updateUserDepart(@Param("username") String username, @Param("orgCode") String orgCode);
+
+    /**
+     * 根据手机号查询用户信息
+     *
+     * @param phone
+     * @return
+     */
+     SysUser getUserByPhone(@Param("phone") String phone);
+
+
+    /**
+     * 根据邮箱查询用户信息
+     *
+     * @param email
+     * @return
+     */
+     SysUser getUserByEmail(@Param("email") String email);
+
+    Map<String, Object> queryRoleCode(@Param("userId") String userId);
 }

+ 15 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/UserCompanyMapper.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.system.entity.UserCompany;
+
+/**
+ * 用户够公司
+ *
+ * @author: jeecg-boot
+ * @date: 2019-11-14
+ * @cersion: V1.0
+ */
+public interface UserCompanyMapper extends BaseMapper<UserCompany> {
+
+}

+ 8 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml

@@ -7,4 +7,12 @@
 			join sys_user_depart b on a.id = b.dep_id
 			where b.user_id = #{userId}
 	</select>
+
+    <select id="queryUserDepartsByDepartId" parameterType="String" resultType="org.jeecg.modules.system.entity.SysDepart">
+		select * from sys_depart
+			where id = #{departId}
+			limit 1
+	</select>
+
+
 </mapper>

+ 9 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserDepartMapper.xml

@@ -6,4 +6,13 @@
 		FROM sys_user_depart
 		WHERE user_id = #{userId, jdbcType=VARCHAR}
     </select>
+
+    <select id="getUserDepartByUserId" parameterType="String"
+            resultType="org.jeecg.modules.system.entity.SysUserDepart">
+		SELECT *
+		FROM sys_user_depart
+		WHERE user_id = #{userId, jdbcType=VARCHAR}
+		limit 1
+    </select>
+
 </mapper>

+ 28 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml

@@ -2,6 +2,12 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.system.mapper.SysUserMapper">
 
+
+    <select id="selectAllUser" resultType="org.jeecg.modules.system.entity.SysUser">
+		select * from  sys_user
+	</select>
+
+
     <!-- 根据用户名查询 -->
     <select id="getUserByName" resultType="org.jeecg.modules.system.entity.SysUser">
 		select * from  sys_user  where username = #{username} and del_flag = '0'
@@ -39,4 +45,26 @@
     <select id="getUserByEmail" resultType="org.jeecg.modules.system.entity.SysUser">
 	select * from  sys_user  where email = #{email} and del_flag = '0'
 	</select>
+
+
+    <select id="queryRoleCode" parameterType="Object" resultType="java.util.Map">
+SELECT
+   role_code roleCode,
+   role_name roleName,
+   id roleId
+   FROM
+   sys_role
+   WHERE
+   id = (
+   SELECT
+   t2.role_id
+   FROM
+   sys_user t1
+   LEFT JOIN sys_user_role t2 ON t1.id = t2.user_id
+   WHERE
+   t1.id = #{userId,jdbcType=VARCHAR}
+   )
+</select>
+
+
 </mapper>

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/UserCompanyMapper.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="org.jeecg.modules.system.mapper.UserCompanyMapper">
+
+</mapper>

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

@@ -1,6 +1,7 @@
 package org.jeecg.modules.system.service;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -122,4 +123,6 @@ public interface ISysUserService extends IService<SysUser> {
 	 * @return
 	 */
 	Result checkUserIsEffective(SysUser sysUser);
+
+    Map<String, Object> queryRoleCode(String userId);
 }

+ 19 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IUserCompanyService.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.entity.UserCompany;
+
+/**
+ * 用户够公司
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+public interface IUserCompanyService extends IService<UserCompany> {
+
+    void addOrUpdateUserWithCompany(SysUser user);
+
+    void removeByUserId(String id);
+}

+ 203 - 214
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java

@@ -1,32 +1,19 @@
 package org.jeecg.modules.system.service.impl;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
-
 import org.jeecg.common.system.api.ISysBaseApi;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.system.vo.SysUserCacheInfo;
 import org.jeecg.common.util.oConvertUtils;
-
-import org.jeecg.modules.system.entity.SysDepart;
-import org.jeecg.modules.system.entity.SysPermission;
-import org.jeecg.modules.system.entity.SysUser;
-import org.jeecg.modules.system.entity.SysUserRole;
-import org.jeecg.modules.system.mapper.SysDepartMapper;
-import org.jeecg.modules.system.mapper.SysPermissionMapper;
-import org.jeecg.modules.system.mapper.SysUserMapper;
-import org.jeecg.modules.system.mapper.SysUserRoleMapper;
-
 import org.jeecg.modules.system.entity.*;
 import org.jeecg.modules.system.mapper.*;
-
 import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
@@ -34,12 +21,7 @@ import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-import lombok.extern.slf4j.Slf4j;
+import java.util.*;
 
 /**
  * <p>
@@ -52,227 +34,234 @@ import lombok.extern.slf4j.Slf4j;
 @Service
 @Slf4j
 public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
-	
-	@Autowired
-	private SysUserMapper userMapper;
-	@Autowired
-	private SysPermissionMapper sysPermissionMapper;
-	@Autowired
-	private SysUserRoleMapper sysUserRoleMapper;
-	@Autowired
-
-	private SysUserDepartMapper sysUserDepartMapper;
-	@Autowired
+
+    @Autowired
+    private SysUserMapper userMapper;
+    @Autowired
+    private SysPermissionMapper sysPermissionMapper;
+    @Autowired
+    private SysUserRoleMapper sysUserRoleMapper;
+    @Autowired
+
+    private SysUserDepartMapper sysUserDepartMapper;
+    @Autowired
     private ISysBaseApi sysBaseApi;
-	@Autowired
-	private SysDepartMapper sysDepartMapper;
-	
-	@Override
-	public SysUser getUserByName(String username) {
-		return userMapper.getUserByName(username);
-	}
-	
-	
-	@Override
-	@Transactional
-	public void addUserWithRole(SysUser user, String roles) {
-		this.save(user);
-		if(oConvertUtils.isNotEmpty(roles)) {
-			String[] arr = roles.split(",");
-			for (String roleId : arr) {
-				SysUserRole userRole = new SysUserRole(user.getId(), roleId);
-				sysUserRoleMapper.insert(userRole);
-			}
-		}
-	}
-
-	@Override
-	@CacheEvict(value= CacheConstant.LOGIN_USER_RULES_CACHE, allEntries=true)
-	@Transactional
-	public void editUserWithRole(SysUser user, String roles) {
-		this.updateById(user);
-		//先删后加
-		sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
-		if(oConvertUtils.isNotEmpty(roles)) {
-			String[] arr = roles.split(",");
-			for (String roleId : arr) {
-				SysUserRole userRole = new SysUserRole(user.getId(), roleId);
-				sysUserRoleMapper.insert(userRole);
-			}
-		}
-	}
-
-
-	@Override
-	public List<String> getRole(String username) {
-		return sysUserRoleMapper.getRoleByUserName(username);
-	}
-	
-	/**
-	 * 通过用户名获取用户角色集合
-	 * @param username 用户名
+    @Autowired
+    private SysDepartMapper sysDepartMapper;
+
+    @Override
+    public SysUser getUserByName(String username) {
+        return userMapper.getUserByName(username);
+    }
+
+
+    @Override
+    @Transactional
+    public void addUserWithRole(SysUser user, String roles) {
+        this.save(user);
+        if (oConvertUtils.isNotEmpty(roles)) {
+            String[] arr = roles.split(",");
+            for (String roleId : arr) {
+                SysUserRole userRole = new SysUserRole(user.getId(), roleId);
+                sysUserRoleMapper.insert(userRole);
+            }
+        }
+    }
+
+    @Override
+    @CacheEvict(value = CacheConstant.LOGIN_USER_RULES_CACHE, allEntries = true)
+    @Transactional
+    public void editUserWithRole(SysUser user, String roles) {
+        this.updateById(user);
+        //先删后加
+        sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
+        if (oConvertUtils.isNotEmpty(roles)) {
+            String[] arr = roles.split(",");
+            for (String roleId : arr) {
+                SysUserRole userRole = new SysUserRole(user.getId(), roleId);
+                sysUserRoleMapper.insert(userRole);
+            }
+        }
+    }
+
+
+    @Override
+    public List<String> getRole(String username) {
+        return sysUserRoleMapper.getRoleByUserName(username);
+    }
+
+    /**
+     * 通过用户名获取用户角色集合
+     *
+     * @param username 用户名
      * @return 角色集合
-	 */
-	@Override
-	@Cacheable(value = CacheConstant.LOGIN_USER_RULES_CACHE,key = "'Roles_'+#username")
-	public Set<String> getUserRolesSet(String username) {
-		// 查询用户拥有的角色集合
-		List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
-		log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size()));
-		return new HashSet<>(roles);
-	}
-
-	/**
-	 * 通过用户名获取用户权限集合
-	 *
-	 * @param username 用户名
-	 * @return 权限集合
-	 */
-	@Override
-	@Cacheable(value = CacheConstant.LOGIN_USER_RULES_CACHE,key = "'Permissions_'+#username")
-	public Set<String> getUserPermissionsSet(String username) {
-		Set<String> permissionSet = new HashSet<>();
-		List<SysPermission> permissionList = sysPermissionMapper.queryByUser(username);
-		for (SysPermission po : permissionList) {
+     */
+    @Override
+    @Cacheable(value = CacheConstant.LOGIN_USER_RULES_CACHE, key = "'Roles_'+#username")
+    public Set<String> getUserRolesSet(String username) {
+        // 查询用户拥有的角色集合
+        List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
+        log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size()));
+        return new HashSet<>(roles);
+    }
+
+    /**
+     * 通过用户名获取用户权限集合
+     *
+     * @param username 用户名
+     * @return 权限集合
+     */
+    @Override
+    @Cacheable(value = CacheConstant.LOGIN_USER_RULES_CACHE, key = "'Permissions_'+#username")
+    public Set<String> getUserPermissionsSet(String username) {
+        Set<String> permissionSet = new HashSet<>();
+        List<SysPermission> permissionList = sysPermissionMapper.queryByUser(username);
+        for (SysPermission po : permissionList) {
 //			// TODO URL规则有问题?
 //			if (oConvertUtils.isNotEmpty(po.getUrl())) {
 //				permissionSet.add(po.getUrl());
 //			}
-			if (oConvertUtils.isNotEmpty(po.getPerms())) {
-				permissionSet.add(po.getPerms());
-			}
-		}
-		log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) );
-		return permissionSet;
-	}
-
-	@Override
-	public SysUserCacheInfo getCacheUser(String username) {
-		SysUserCacheInfo info = new SysUserCacheInfo();
-		info.setOneDepart(true);
+            if (oConvertUtils.isNotEmpty(po.getPerms())) {
+                permissionSet.add(po.getPerms());
+            }
+        }
+        log.info("-------通过数据库读取用户拥有的权限Perms------username: " + username + ",Perms size: " + (permissionSet == null ? 0 : permissionSet.size()));
+        return permissionSet;
+    }
+
+    @Override
+    public SysUserCacheInfo getCacheUser(String username) {
+        SysUserCacheInfo info = new SysUserCacheInfo();
+        info.setOneDepart(true);
 //		SysUser user = userMapper.getUserByName(username);
 //		info.setSysUserCode(user.getUsername());
 //		info.setSysUserName(user.getRealname());
 
 
         LoginUser user = sysBaseApi.getUserByName(username);
-		if(user!=null) {
-			info.setSysUserCode(user.getUsername());
-			info.setSysUserName(user.getRealname());
-			info.setSysOrgCode(user.getOrgCode());
-		}
-		
-		//多部门支持in查询
-		List<SysDepart> list = sysDepartMapper.queryUserDeparts(user.getId());
-		List<String> sysMultiOrgCode = new ArrayList<String>();
-		if(list==null || list.size()==0) {
-			//当前用户无部门
-			//sysMultiOrgCode.add("0");
-		}else if(list.size()==1) {
-			sysMultiOrgCode.add(list.get(0).getOrgCode());
-		}else {
-			info.setOneDepart(false);
-			for (SysDepart dpt : list) {
-				sysMultiOrgCode.add(dpt.getOrgCode());
-			}
-		}
-		info.setSysMultiOrgCode(sysMultiOrgCode);
-		
-		return info;
-	}
+        if (user != null) {
+            info.setSysUserCode(user.getUsername());
+            info.setSysUserName(user.getRealname());
+            info.setSysOrgCode(user.getOrgCode());
+        }
+
+        //多部门支持in查询
+        List<SysDepart> list = sysDepartMapper.queryUserDeparts(user.getId());
+        List<String> sysMultiOrgCode = new ArrayList<String>();
+        if (list == null || list.size() == 0) {
+            //当前用户无部门
+            //sysMultiOrgCode.add("0");
+        } else if (list.size() == 1) {
+            sysMultiOrgCode.add(list.get(0).getOrgCode());
+        } else {
+            info.setOneDepart(false);
+            for (SysDepart dpt : list) {
+                sysMultiOrgCode.add(dpt.getOrgCode());
+            }
+        }
+        info.setSysMultiOrgCode(sysMultiOrgCode);
+
+        return info;
+    }
 
     /**
      * 根据部门Id查询
      */
-	@Override
-	public IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId,String username) {
-		return userMapper.getUserByDepId(page, departId,username);
+    @Override
+    public IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId, String username) {
+        return userMapper.getUserByDepId(page, departId, username);
     }
 
 
     /**
      * 根据角色Id查询
- 	 */
-	@Override
-	public IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username) {
-		return userMapper.getUserByRoleId(page,roleId,username);
-	}
+     */
+    @Override
+    public IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username) {
+        return userMapper.getUserByRoleId(page, roleId, username);
+    }
 
 
-	@Override
-	public void updateUserDepart(String username,String orgCode) {
-		baseMapper.updateUserDepart(username, orgCode);
-	}
+    @Override
+    public void updateUserDepart(String username, String orgCode) {
+        baseMapper.updateUserDepart(username, orgCode);
+    }
 
-	@Override
-	public SysUser getUserByPhone(String phone) {
-		return userMapper.getUserByPhone(phone);
-	}
+    @Override
+    public SysUser getUserByPhone(String phone) {
+        return userMapper.getUserByPhone(phone);
+    }
 
 
-	@Override
-	public SysUser getUserByEmail(String email) {
-		return userMapper.getUserByEmail(email);
-	}
+    @Override
+    public SysUser getUserByEmail(String email) {
+        return userMapper.getUserByEmail(email);
+    }
 
-	@Override
-	@Transactional
-	public void addUserWithDepart(SysUser user, String selectedParts) {
+    @Override
+    @Transactional
+    public void addUserWithDepart(SysUser user, String selectedParts) {
 //		this.save(user);  //保存角色的时候已经添加过一次了
-		if(oConvertUtils.isNotEmpty(selectedParts)) {
-			String[] arr = selectedParts.split(",");
-			for (String deaprtId : arr) {
-				SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
-				sysUserDepartMapper.insert(userDeaprt);
-			}
-		}
-	}
-
-
-	@Override
-	@Transactional
-	@CacheEvict(value="loginUser_cacheRules", allEntries=true)
-	public void editUserWithDepart(SysUser user, String departs) {
+        if (oConvertUtils.isNotEmpty(selectedParts)) {
+            String[] arr = selectedParts.split(",");
+            for (String deaprtId : arr) {
+                SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
+                sysUserDepartMapper.insert(userDeaprt);
+            }
+        }
+    }
+
+
+    @Override
+    @Transactional
+    @CacheEvict(value = "loginUser_cacheRules", allEntries = true)
+    public void editUserWithDepart(SysUser user, String departs) {
         //更新角色的时候已经更新了一次了,可以再跟新一次
         this.updateById(user);
-		//先删后加
-		sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
-		if(oConvertUtils.isNotEmpty(departs)) {
-			String[] arr = departs.split(",");
-			for (String departId : arr) {
-				SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
-				sysUserDepartMapper.insert(userDepart);
-			}
-		}
-	}
-
-
-	/**
-	   * 校验用户是否有效
-	 * @param sysUser
-	 * @return
-	 */
-	@Override
-	public Result<?> checkUserIsEffective(SysUser sysUser) {
-		Result<?> result = new Result<Object>();
-		//情况1:根据用户信息查询,该用户不存在
-		if (sysUser == null) {
-			result.error500("该用户不存在,请注册");
+        //先删后加
+        sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
+        if (oConvertUtils.isNotEmpty(departs)) {
+            String[] arr = departs.split(",");
+            for (String departId : arr) {
+                SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
+                sysUserDepartMapper.insert(userDepart);
+            }
+        }
+    }
+
+
+    /**
+     * 校验用户是否有效
+     *
+     * @param sysUser
+     * @return
+     */
+    @Override
+    public Result<?> checkUserIsEffective(SysUser sysUser) {
+        Result<?> result = new Result<Object>();
+        //情况1:根据用户信息查询,该用户不存在
+        if (sysUser == null) {
+            result.error500("该用户不存在,请注册");
             sysBaseApi.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null);
-			return result;
-		}
-		//情况2:根据用户信息查询,该用户已注销
-		if (CommonConstant.DEL_FLAG_1.toString().equals(sysUser.getDelFlag())) {
+            return result;
+        }
+        //情况2:根据用户信息查询,该用户已注销
+        if (CommonConstant.DEL_FLAG_1.toString().equals(sysUser.getDelFlag())) {
             sysBaseApi.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null);
-			result.error500("该用户已注销");
-			return result;
-		}
-		//情况3:根据用户信息查询,该用户已冻结
-		if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) {
+            result.error500("该用户已注销");
+            return result;
+        }
+        //情况3:根据用户信息查询,该用户已冻结
+        if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) {
             sysBaseApi.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null);
-			result.error500("该用户已冻结");
-			return result;
-		}
-		return result;
-	}
+            result.error500("该用户已冻结");
+            return result;
+        }
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> queryRoleCode(String userId) {
+        return userMapper.queryRoleCode(userId);
+    }
 }

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

@@ -0,0 +1,98 @@
+package org.jeecg.modules.system.service.impl;
+
+import cn.com.ctop.common.module.utils.Check;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.system.entity.SysDepart;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.entity.SysUserDepart;
+import org.jeecg.modules.system.entity.UserCompany;
+import org.jeecg.modules.system.mapper.SysDepartMapper;
+import org.jeecg.modules.system.mapper.SysUserDepartMapper;
+import org.jeecg.modules.system.mapper.UserCompanyMapper;
+import org.jeecg.modules.system.service.IUserCompanyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 用户够公司
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+@Slf4j
+@Service
+public class UserCompanyServiceImpl extends ServiceImpl<UserCompanyMapper, UserCompany> implements IUserCompanyService {
+    @Autowired
+    private SysUserDepartMapper userDepartMapper;
+    @Autowired
+    private SysDepartMapper departMapper;
+    @Autowired
+    private UserCompanyMapper userCompanyMapper;
+
+    @Override
+    public void addOrUpdateUserWithCompany(SysUser user) {
+        SysUserDepart userDepart = userDepartMapper.getUserDepartByUserId(user.getId());
+        if (!Check.isNull(userDepart)) {
+            String depId = userDepart.getDepId();
+            for (int i = 0; i <= 10; i++) {
+                SysDepart depart = departMapper.queryUserDepartsByDepartId(depId);
+                if (Check.isNull(depart)) {
+                    break;
+                }
+                if (!"1".equals(depart.getOrgType())) {
+                    depId = depart.getParentId();
+                    continue;
+                } else {
+                    UserCompany userCompany = new UserCompany();
+                    userCompany.setUserId(user.getId());
+                    userCompany.setUserName(user.getRealname());
+                    userCompany.setCompanyId(depart.getId());
+                    userCompany.setCompanyName(depart.getDepartName());
+                    QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper();
+                    userCompanyQueryWrapper.eq("user_id", user.getId());
+                    userCompanyQueryWrapper.last("limit 1");
+                    UserCompany addUserCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
+                    int j;
+                    if (Check.isNull(addUserCompany)) {
+                        userCompany.setCreateTime(new Date());
+                        userCompany.setUpdateTime(new Date());
+                        j = userCompanyMapper.insert(userCompany);
+                    } else {
+                        QueryWrapper<UserCompany> updateUserCompanyQueryWrapper = new QueryWrapper();
+                        updateUserCompanyQueryWrapper.eq("user_id", user.getId());
+                        userCompany.setUpdateTime(new Date());
+                        j = userCompanyMapper.update(userCompany, updateUserCompanyQueryWrapper);
+                    }
+
+                    if (j > 0) {
+                        log.info("同步用户公司信息完成,userId:{}", user.getId());
+                    }
+                    break;
+                }
+            }
+
+        }
+
+
+    }
+
+    /**
+     * 删除公司信息
+     *
+     * @param
+     */
+    @Override
+    public void removeByUserId(String userId) {
+        Map<String, Object> deleteMap = new HashMap<>();
+        deleteMap.put("user_id", userId);
+        userCompanyMapper.deleteByMap(deleteMap);
+
+    }
+}

BIN
module-common/lib/jave-1.0.2.jar


+ 41 - 6
module-common/pom.xml

@@ -33,6 +33,17 @@
             <artifactId>module-kuaishou</artifactId>
             <version>2.0.2</version>
         </dependency>-->
+
+
+        <dependency>
+            <groupId>com.lgg.jave</groupId>
+            <artifactId>jave</artifactId>
+            <scope>system</scope>
+            <version>1.0.2</version>
+            <systemPath>${project.basedir}/lib/jave-1.0.2.jar</systemPath>
+        </dependency>
+
+
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
@@ -55,12 +66,8 @@
             <version>0.7.3</version>
             <scope>compile</scope>
         </dependency>
-        <!--<dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-csv</artifactId>
-            <version>1.5</version>
-            <scope>compile</scope>
-        </dependency>-->
+
+
         <dependency>
             <groupId>net.sourceforge.javacsv</groupId>
             <artifactId>javacsv</artifactId>
@@ -69,7 +76,35 @@
 
     </dependencies>
     <build>
+<!--
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <includeSystemScope>true</includeSystemScope>
+                </configuration>
+            </plugin>
+        </plugins>-->
+
+
         <resources>
+
+
+            <resource>
+                <directory>lib</directory>
+                <targetPath>BOOT-INF/lib/</targetPath>
+                <includes>
+                    <include>**/*.jar</include>
+                </includes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <targetPath>BOOT-INF/classes/</targetPath>
+            </resource>
+
+
+
             <!-- 解决MyBatis配置文件引入问题 -->
             <resource>
                 <directory>src/main/java</directory>

+ 76 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/MaterialAscription.java

@@ -0,0 +1,76 @@
+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 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 2019-11-23
+ */
+@Data
+@TableName("ctop_material_ascription")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_material_ascription对象", description = "素材归属标")
+public class MaterialAscription {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 素材库id
+     */
+    @Excel(name = "素材库id", width = 15)
+    @ApiModelProperty(value = "素材库id")
+    private String materialId;
+    /**
+     * 剪辑人id
+     */
+    @Excel(name = "剪辑人id", width = 15)
+    @ApiModelProperty(value = "剪辑人id")
+    private String clipId;
+    /**
+     * 拍摄人id
+     */
+    @Excel(name = "拍摄人id", width = 15)
+    @ApiModelProperty(value = "拍摄人id")
+    private String shotId;
+    /**
+     * 策划id
+     */
+    @Excel(name = "策划id", width = 15)
+    @ApiModelProperty(value = "策划id")
+    private String planId;
+    /**
+     * 平面id
+     */
+    @Excel(name = "平面id", width = 15)
+    @ApiModelProperty(value = "平面id")
+    private String planeId;
+
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 49 - 1
module-common/src/main/java/cn/com/ctop/common/module/entity/MaterialInfo.java

@@ -1,7 +1,9 @@
 package cn.com.ctop.common.module.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -37,6 +39,7 @@ public class MaterialInfo {
     @Excel(name = "code", width = 15)
     @ApiModelProperty(value = "code")
     private String code;
+    private String watermarkCode;
     /**
      * url
      */
@@ -44,9 +47,20 @@ public class MaterialInfo {
     @ApiModelProperty(value = "url")
     private String url;
 
+    /**
+     * 水印素材链接
+     */
+    private String watermarkUrl;
+
     private String type;
     /**
+     * 审核人id
+     */
+    private String auditorId;
+    /**
      * status
+     * <p>
+     * 0-待审核 1-审核通过 2-审核拒绝
      */
     @Excel(name = "status", width = 15)
     @ApiModelProperty(value = "status")
@@ -58,14 +72,48 @@ public class MaterialInfo {
     @ApiModelProperty(value = "user_id")
     private String userId;
 
+
+    private String materialDescribe;
+
+
+    private Long projectId;
+
+    /**
+     * 素材名称
+     */
+    private String materialName;
+
+    /**
+     * 水印素材名称
+     */
+    private String watermarkMaterialName;
+
+    /**
+     * 拒绝原因
+     */
+    private String refuseReason;
+    /**
+     * 拒绝上传文件
+     */
+    private String refuseFile;
+
+    /**
+     * 创意文案
+     */
+    private String creativeCopywriter;
+
+
     /**
      * createTime
      */
     @ApiModelProperty(value = "createTime")
-    private Date createTime;
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Object createTime;
     /**
      * updateTime
      */
     @ApiModelProperty(value = "updateTime")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
     private Date updateTime;
+
 }

+ 81 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/MaterialParameter.java

@@ -0,0 +1,81 @@
+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 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 2019-11-23
+ */
+@Data
+@TableName("ctop_material_parameter")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_material_parameter对象", description = "素材归属标")
+public class MaterialParameter {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 素材库id
+     */
+    @Excel(name = "素材库id", width = 15)
+    @ApiModelProperty(value = "素材库id")
+    private String materialId;
+    /**
+     * 视频秒数
+     */
+    @Excel(name = "视频秒数", width = 15)
+    @ApiModelProperty(value = "视频秒数")
+    private Long second;
+    /**
+     * 格式
+     */
+    @Excel(name = "格式", width = 15)
+    @ApiModelProperty(value = "格式")
+    private String format;
+    /**
+     * 宽
+     */
+    @Excel(name = "宽", width = 15)
+    @ApiModelProperty(value = "宽")
+    private String width;
+    /**
+     * 高
+     */
+    @Excel(name = "高", width = 15)
+    @ApiModelProperty(value = "高")
+    private String height;
+    /**
+     * 小
+     */
+    @Excel(name = "小", width = 15)
+    @ApiModelProperty(value = "小")
+    private String size;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 57 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/MaterialTag.java

@@ -0,0 +1,57 @@
+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 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 2019-11-23
+ */
+@Data
+@TableName("ctop_material_tag")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_material_tag对象", description = "素材归属标")
+public class MaterialTag {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 素材库id
+     */
+    @Excel(name = "素材库id", width = 15)
+    @ApiModelProperty(value = "素材库id")
+    private String materialId;
+    /**
+     * 剪辑人id
+     */
+    @Excel(name = "剪辑人id", width = 15)
+    @ApiModelProperty(value = "剪辑人id")
+    private String tag;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 14 - 32
module-common/src/main/java/cn/com/ctop/common/module/entity/UserAllocation.java

@@ -40,6 +40,12 @@ public class UserAllocation {
     @Excel(name = "登陆人id", width = 15)
     @ApiModelProperty(value = "登陆人id")
     private String userId;
+
+
+    @Excel(name = "登陆人名称", width = 15)
+    @ApiModelProperty(value = "登陆人名称")
+    private String userName;
+
     /**
      * 账户id --授权
      */
@@ -52,24 +58,17 @@ public class UserAllocation {
     @Excel(name = "广告主ID", width = 15)
     @ApiModelProperty(value = "广告主ID")
     private String advertiserId;
+
     /**
-     * 指定分配人
-     */
-    @Excel(name = "指定分配人", width = 15)
-    @ApiModelProperty(value = "指定分配人")
-    private String distributionName;
-    /**
-     * 部门id
+     * 项目id
      */
-    @Excel(name = "部门id", width = 15)
-    @ApiModelProperty(value = "部门id")
-    private String departmentId;
+    private Long projectId;
+
     /**
-     * 管理员名称
+     * 项目名称
      */
-    @Excel(name = "管理员名称", width = 15)
-    @ApiModelProperty(value = "管理员名称")
-    private String adminName;
+    private String projectName;
+
     /**
      * 广告主名称
      */
@@ -90,12 +89,7 @@ public class UserAllocation {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "创建时间")
     private Date createTime;
-    /**
-     * 操作人姓名
-     */
-    @Excel(name = "操作人姓名", width = 15)
-    @ApiModelProperty(value = "操作人姓名")
-    private String operationName;
+
     /**
      * 授权名称
      */
@@ -103,18 +97,6 @@ public class UserAllocation {
     @ApiModelProperty(value = "授权名称")
     private String authName;
     /**
-     * 创建人
-     */
-    @Excel(name = "创建人", width = 15)
-    @ApiModelProperty(value = "创建人")
-    private String createBy;
-    /**
-     * 修改人
-     */
-    @Excel(name = "修改人", width = 15)
-    @ApiModelProperty(value = "修改人")
-    private String updateBy;
-    /**
      * 修改时间
      */
     @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")

+ 18 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/MaterialAscriptionMapper.java

@@ -0,0 +1,18 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.MaterialAscription;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 素材归属标
+ *
+ * @author: jeecg-boot
+ * @date: 2019-11-23
+ * @cersion: V1.0
+ */
+public interface MaterialAscriptionMapper extends BaseMapper<MaterialAscription> {
+
+    JSONObject selectByMaterialId(@Param("materialId") String materialId);
+}

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

@@ -2,6 +2,9 @@ package cn.com.ctop.common.module.mapper;
 
 import cn.com.ctop.common.module.entity.MaterialInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
 
 /**
  * 素材信息
@@ -12,4 +15,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MaterialInfoMapper extends BaseMapper<MaterialInfo> {
 
+    String selectUserNameById(@Param("auditorId") String auditorId);
+
+    Integer selectCountByMap(Map<String, Object> requestMap);
+
+    String getRoleCodeByUserId(@Param("userId") String userId);
 }

+ 15 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/MaterialParameterMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.MaterialParameter;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 素材归属标
+ *
+ * @author: jeecg-boot
+ * @date: 2019-11-23
+ * @cersion: V1.0
+ */
+public interface MaterialParameterMapper extends BaseMapper<MaterialParameter> {
+
+}

+ 19 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/MaterialTagMapper.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.MaterialTag;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 素材归属标
+ *
+ * @author: jeecg-boot
+ * @date: 2019-11-23
+ * @cersion: V1.0
+ */
+public interface MaterialTagMapper extends BaseMapper<MaterialTag> {
+
+    List<String> selectByMaterialId(@Param("materialId") String materialId);
+}

+ 48 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/MaterialAscriptionMapper.xml

@@ -0,0 +1,48 @@
+<?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.common.module.mapper.MaterialAscriptionMapper">
+
+    <select id="selectByMaterialId" resultType="com.alibaba.fastjson.JSONObject">
+
+select
+      (case
+        when clip_id != ""
+        then (select realname from sys_user where id = clip_id)
+        else ""
+        end
+        ) clipName, -- 剪辑人姓名
+
+        clip_id clipId,
+
+
+        (case
+        when shot_id != ""
+        then (select realname from sys_user where id = shot_id)
+        else ""
+        end
+        ) shotName, -- 拍摄人姓名
+        shot_id shotId,
+
+         (case
+        when plan_id != ""
+        then (select realname from sys_user where id = plan_id)
+        else ""
+        end
+        ) planName, -- 策划人姓名
+        plan_id planId,
+
+         (case
+        when plane_id != ""
+        then (select realname from sys_user where id = plane_id)
+        else ""
+        end
+        ) planeName, -- 平面姓名
+        plane_id planeId
+        from ctop_material_ascription
+        where material_id = #{materialId}
+        order by create_time desc
+        limit 1
+
+    </select>
+
+</mapper>

+ 39 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/MaterialInfoMapper.xml

@@ -2,4 +2,43 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.com.ctop.common.module.mapper.MaterialInfoMapper">
 
+    <select id="selectUserNameById" resultType="java.lang.String">
+   select realname from  sys_user where  id = #{auditorId}
+    </select>
+
+
+    <select id="selectCountByMap" parameterType="java.util.Map" resultType="java.lang.Integer">
+
+        select count(1)
+        from ctop_material_info
+        where 1 = 1
+        <if test="userId != null">
+            and user_id = #{userId}
+        </if>
+
+        <if test="status != null">
+            and status = #{status}
+        </if>
+
+
+    </select>
+
+    <select id="getRoleCodeByUserId" resultType="java.lang.String">
+   SELECT
+    role_code
+    FROM
+    sys_role
+    WHERE
+    id = (
+    SELECT
+    t2.role_id
+    FROM
+    sys_user t1
+    LEFT JOIN sys_user_role t2 ON t1.id = t2.user_id
+    WHERE
+    t1.id = #{userId,jdbcType=VARCHAR}
+    )
+    </select>
+
+
 </mapper>

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

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/MaterialTagMapper.xml

@@ -0,0 +1,11 @@
+<?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.common.module.mapper.MaterialTagMapper">
+    <select id="selectByMaterialId" resultType="java.lang.String">
+    select  tag  from  ctop_material_tag
+    where material_id = #{materialId}
+    </select>
+
+</mapper>
+
+

+ 15 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialAscriptionService.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.service;
+
+import cn.com.ctop.common.module.entity.MaterialAscription;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 素材归属标
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-23
+ */
+public interface IMaterialAscriptionService extends IService<MaterialAscription> {
+
+}

+ 8 - 2
module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialInfoService.java

@@ -1,9 +1,9 @@
 package cn.com.ctop.common.module.service;
 
 import cn.com.ctop.common.module.entity.MaterialInfo;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
 
-import java.io.IOException;
 import java.util.Map;
 
 /**
@@ -18,5 +18,11 @@ public interface IMaterialInfoService extends IService<MaterialInfo> {
 
     Map<String, Object> checkMaterialInfo(String code);
 
-    Map<String, Object> insert(String userId, String code, String url) throws IOException;
+    Map<String, Object> insert(JSONObject jsonObject);
+
+    JSONObject getDetail(String materialId);
+
+    JSONObject report(String userId);
+
+    String getRoleCodeByUserId(String userId);
 }

+ 15 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialParameterService.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.service;
+
+import cn.com.ctop.common.module.entity.MaterialParameter;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 素材归属标
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-23
+ */
+public interface IMaterialParameterService extends IService<MaterialParameter> {
+
+}

+ 15 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialTagService.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.service;
+
+import cn.com.ctop.common.module.entity.MaterialTag;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 素材归属标
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-23
+ */
+public interface IMaterialTagService extends IService<MaterialTag> {
+
+}

+ 1 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/FileInfoServiceImpl.java

@@ -422,4 +422,5 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
         }
         return null;
     }
+
 }

+ 19 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialAscriptionServiceImpl.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.common.module.service.impl;
+
+import cn.com.ctop.common.module.entity.MaterialAscription;
+import cn.com.ctop.common.module.mapper.MaterialAscriptionMapper;
+import cn.com.ctop.common.module.service.IMaterialAscriptionService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 素材归属标
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-23
+ */
+@Service
+public class MaterialAscriptionServiceImpl extends ServiceImpl<MaterialAscriptionMapper, MaterialAscription> implements IMaterialAscriptionService {
+
+}

+ 243 - 17
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java

@@ -1,18 +1,39 @@
 package cn.com.ctop.common.module.service.impl;
 
+import cn.com.ctop.common.module.entity.MaterialAscription;
 import cn.com.ctop.common.module.entity.MaterialInfo;
+import cn.com.ctop.common.module.entity.MaterialParameter;
+import cn.com.ctop.common.module.entity.MaterialTag;
+import cn.com.ctop.common.module.mapper.MaterialAscriptionMapper;
 import cn.com.ctop.common.module.mapper.MaterialInfoMapper;
+import cn.com.ctop.common.module.mapper.MaterialParameterMapper;
+import cn.com.ctop.common.module.mapper.MaterialTagMapper;
 import cn.com.ctop.common.module.service.IMaterialInfoService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.LoadFileUtil;
 import cn.com.ctop.common.module.utils.ResultMapUtils;
 import cn.com.ctop.common.module.utils.StatusCode;
+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 it.sauronsoftware.jave.Encoder;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.nio.channels.FileChannel;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.regex.Pattern;
 
 /**
@@ -22,8 +43,10 @@ import java.util.regex.Pattern;
  * @version V1.0
  * @date 2019-10-11
  */
+@Slf4j
 @Service
 public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, MaterialInfo> implements IMaterialInfoService {
+    static ExecutorService executorService = Executors.newFixedThreadPool(5);
 
     @Override
     public MaterialInfo getMaterialInfoByCode(String code) {
@@ -49,7 +72,7 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
     }
 
     public boolean imgLocation(String fileName) throws IOException {
-        String reg = "(mp4|flv|avi|rm|rmvb|wmv)";
+        String reg = "(mp4|flv|avi|rm|rmvb|wmv|MP4)";
         Pattern p = Pattern.compile(reg);
         return p.matcher(fileName).find();
     }
@@ -59,25 +82,228 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         Pattern p = Pattern.compile(reg);
         System.out.println(p.matcher("https://ctop-media.oss-cn-beijing.aliyuncs.com/video/2019-10-30/ios%E6%8E%A8%E5%B9%BF%E8%A7%86%E9%A2%91-1572437289724.mp4").find());
     }
+
+    @Autowired
+    private MaterialAscriptionMapper materialAscriptionMapper;
+    @Autowired
+    private MaterialTagMapper materialTagMapper;
+
     @Override
-    public Map<String, Object> insert(String userId, String code, String url) throws IOException {
+    public Map<String, Object> insert(JSONObject jsonObject) {
         Map<String, Object> resultMap = new HashMap<>();
-        Boolean isVideo = imgLocation(url);
-        MaterialInfo info = new MaterialInfo();
-        info.setId(code);
-        info.setCode(code);
-        info.setUrl("https:" + url);
-        info.setStatus(1);
-        info.setUserId(userId);
-        info.setCreateTime(new Date());
-        info.setUpdateTime(new Date());
-        if (isVideo) {
-            info.setType("VIDEO");
-        } else {
-            info.setType("IMAGE");
+        try {
+            Boolean isVideo = imgLocation(jsonObject.getString("url"));
+            MaterialInfo info = new MaterialInfo();
+            info.setId(jsonObject.getString("code"));
+            info.setCode(jsonObject.getString("code"));
+
+            if (!Check.isNull(jsonObject.getString("watermarkUrl"))) {
+                info.setWatermarkUrl("https:" + jsonObject.getString("watermarkUrl"));
+            }
+            if (!Check.isNull(jsonObject.getString("url"))) {
+                info.setUrl("https:" + jsonObject.getString("url"));
+            }
+            info.setUserId(jsonObject.getString("userId"));
+            info.setProjectId(jsonObject.getLong("projectId"));
+            info.setWatermarkCode(jsonObject.getString("watermarkCode"));
+            info.setStatus(0);
+            info.setMaterialName(jsonObject.getString("materialName"));
+            info.setWatermarkMaterialName(jsonObject.getString("watermarkMaterialName"));
+            info.setMaterialDescribe(jsonObject.getString("materialDescribe"));
+            info.setCreateTime(new Date());
+            info.setUpdateTime(new Date());
+            if (isVideo) {
+                info.setType("VIDEO");
+            } else {
+                info.setType("IMAGE");
+            }
+            this.save(info);
+            Map<String, Object> deleteMap = new HashMap<>();
+            deleteMap.put("material_id", info.getId());
+
+            JSONObject ascription = jsonObject.getJSONObject("ascription");
+            if (!Check.isNull(ascription)) {
+                MaterialAscription materialAscription = new MaterialAscription();
+                materialAscription.setMaterialId(info.getId());
+                materialAscription.setClipId(ascription.getString("clipId")); // 剪辑人
+                materialAscription.setShotId(ascription.getString("shotId")); // 拍摄人id
+                materialAscription.setPlanId(ascription.getString("planId")); // 策划id
+                materialAscription.setPlaneId(ascription.getString("planeId")); //平面id
+                materialAscriptionMapper.deleteByMap(deleteMap);
+                int i = materialAscriptionMapper.insert(materialAscription);
+                if (i > 0) {
+                    log.info("素材归属信息入库完成,MaterialId:{}", info.getId());
+                }
+            }
+            JSONArray tag = jsonObject.getJSONArray("tag");
+            if (!Check.isNull(tag)) {
+                materialTagMapper.deleteByMap(deleteMap);
+                for (int i = 0; i < tag.size(); i++) {
+                    String tagStr = tag.getString(i);
+                    if (!Check.isNull(tagStr)) {
+                        MaterialTag materialTag = new MaterialTag();
+                        materialTag.setMaterialId(info.getId());
+                        materialTag.setTag(tagStr);
+                        materialTagMapper.insert(materialTag);
+                    }
+                }
+            }
+            getFile(info);
+            ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
+        } catch (Exception e) {
+            ResultMapUtils.setResultMap(resultMap, StatusCode.MATERIAL_UPLOAD_FAIL.getCode());
+            e.printStackTrace();
+
         }
-        this.save(info);
-        ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
+
+
         return resultMap;
     }
+
+
+    /**
+     * 获取素材详细信息
+     *
+     * @param materialId
+     * @return
+     */
+
+    @Autowired
+    private MaterialInfoMapper materialInfoMapper;
+
+
+    @Override
+    public JSONObject getDetail(String materialId) {
+        JSONObject json = new JSONObject();
+
+        MaterialInfo materialInfo = this.getById(materialId);
+        if (!Check.isNull(materialInfo.getAuditorId())) {
+            String auditorName = materialInfoMapper.selectUserNameById(materialInfo.getAuditorId());
+            json.put("auditorName", auditorName);
+        } else {
+            json.put("auditorName", "");
+        }
+
+        List<String> tagList = materialTagMapper.selectByMaterialId(materialId);
+        if (!Check.isNull(tagList)) {
+            json.put("tag", tagList);
+        }
+        QueryWrapper<MaterialParameter> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("material_id", materialId);
+        queryWrapper.orderByDesc("create_time");
+        queryWrapper.last("limit 1");
+        MaterialParameter materialParameter = materialParameterMapper.selectOne(queryWrapper);
+        if (!Check.isNull(materialParameter)) {
+            json.put("parameter", materialParameter);
+        }
+        JSONObject ascriptionJson = materialAscriptionMapper.selectByMaterialId(materialId);
+        if (!Check.isNull(ascriptionJson)) {
+            json.put("ascription", ascriptionJson);
+        }
+
+        return json;
+    }
+
+    /**
+     * 工作台报表
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public JSONObject report(String userId) {
+
+        JSONObject json = new JSONObject();
+        try {
+            Map<String, Object> requestMap = new HashMap<>();
+            requestMap.put("userId", userId);
+
+            Integer totalCount = materialInfoMapper.selectCountByMap(requestMap);
+            json.put("total", totalCount);
+
+            requestMap.put("status", 0);
+            Integer waitAudit = materialInfoMapper.selectCountByMap(requestMap);
+            json.put("waitAudit", waitAudit);
+
+            requestMap.put("status", 1);
+            Integer passAudit = materialInfoMapper.selectCountByMap(requestMap);
+            json.put("passAudit", passAudit);
+
+            requestMap.put("status", 2);
+            Integer refuseAudit = materialInfoMapper.selectCountByMap(requestMap);
+            json.put("refuseAudit", refuseAudit);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+        return json;
+    }
+
+    @Override
+    public String getRoleCodeByUserId(String userId) {
+        return materialInfoMapper.getRoleCodeByUserId(userId);
+    }
+
+
+    @Autowired
+    private MaterialParameterMapper materialParameterMapper;
+
+    public void getFile(MaterialInfo materialInfo) {
+        executorService.submit(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    this.loadFile(materialInfo);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+
+            private void loadFile(MaterialInfo materialInfo) throws IOException {
+                if (!Check.isNull(materialInfo)) {
+                    String url = materialInfo.getUrl();
+                    long l = System.currentTimeMillis();
+                    String localUrl = LoadFileUtil.downLoadFromUrl(url, "D:\\tets1\\video");
+                    File file = new File(localUrl);
+                    it.sauronsoftware.jave.Encoder encoder = new Encoder();
+                    try {
+                        it.sauronsoftware.jave.MultimediaInfo m = encoder.getInfo(file);
+                        long duration = m.getDuration();
+                        long secondDuration = duration / 1000;
+                        MaterialParameter materialParameter = new MaterialParameter();
+                        materialParameter.setMaterialId(materialInfo.getId());
+                        materialParameter.setSecond(secondDuration); // 视频秒数
+                        materialParameter.setFormat(m.getFormat()); // 视频格式
+                        materialParameter.setWidth(String.valueOf(m.getVideo().getSize().getWidth()));// 视频宽
+                        materialParameter.setHeight(String.valueOf(m.getVideo().getSize().getHeight()));// 视频高
+
+                        FileInputStream fis = new FileInputStream(file);
+                        FileChannel fc = fis.getChannel();
+                        BigDecimal fileSize = new BigDecimal(fc.size());
+                        String size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_UP) + "MB";
+                        materialParameter.setSize(size);
+
+                        Map<String, Object> deleteMap = new HashMap<>();
+                        deleteMap.put("material_id", materialInfo.getId());
+                        materialParameterMapper.deleteByMap(deleteMap);
+
+                        int insert = materialParameterMapper.insert(materialParameter);
+                        if (insert > 0) {
+                            log.info("素材基本信息入库完成,用时:{} s", (System.currentTimeMillis() - l) / 1000);
+
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        file.delete();
+                    }
+                }
+
+
+            }
+        });
+    }
+
+
 }

+ 19 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialParameterServiceImpl.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.common.module.service.impl;
+
+import cn.com.ctop.common.module.entity.MaterialParameter;
+import cn.com.ctop.common.module.mapper.MaterialParameterMapper;
+import cn.com.ctop.common.module.service.IMaterialParameterService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 素材归属标
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-23
+ */
+@Service
+public class MaterialParameterServiceImpl extends ServiceImpl<MaterialParameterMapper, MaterialParameter> implements IMaterialParameterService {
+
+}

+ 19 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialTagServiceImpl.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.common.module.service.impl;
+
+import cn.com.ctop.common.module.entity.MaterialTag;
+import cn.com.ctop.common.module.mapper.MaterialTagMapper;
+import cn.com.ctop.common.module.service.IMaterialTagService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 素材归属标
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-23
+ */
+@Service
+public class MaterialTagServiceImpl extends ServiceImpl<MaterialTagMapper, MaterialTag> implements IMaterialTagService {
+
+}

+ 1 - 1
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/encryption/AesEncryptUtil.java

@@ -1,4 +1,4 @@
-package org.jeecg.common.util.encryption;
+package cn.com.ctop.common.module.utils;
 
 import org.apache.shiro.codec.Base64;
 

+ 1 - 1
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/encryption/EncryptedString.java

@@ -1,4 +1,4 @@
-package org.jeecg.common.util.encryption;
+package cn.com.ctop.common.module.utils;
 
 
 import lombok.Data;

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

@@ -74,7 +74,7 @@ public class KuaishouInterfaceConstant {
     /**
      * 图片文件上传
      */
-    public static final String IMAGE_UPLOAD = "/rest/openapi/v1/file/ad/image/upload";
+    public static final String IMAGE_UPLOAD = "/rest/openapi/v2/file/ad/image/upload";
     /**
      * 创建应用
      */

+ 5 - 2
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/LoadFileUtil.java

@@ -1,7 +1,6 @@
-package org.jeecg.common.util;
+package cn.com.ctop.common.module.utils;
 
 import org.apache.commons.codec.digest.DigestUtils;
-import org.jeecg.common.util.encryption.AesEncryptUtil;
 
 import java.io.*;
 import java.net.HttpURLConnection;
@@ -94,5 +93,9 @@ public class LoadFileUtil {
         return DigestUtils.md5Hex(new FileInputStream(path));
     }
 
+    public static String getMD5ByFile(FileInputStream inputStream) throws IOException {
+        return DigestUtils.md5Hex(inputStream);
+    }
+
 
 }

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

@@ -17,6 +17,7 @@ public enum StatusCode {
     COMMON_SUCCESS("success", 0, true),
     COMMON_PARAM_ERROR("参数异常", -1, false),
     BYTEDANCE_VIDEO_UPLOAD_FAIL("今日头条视频文件上传失败", -201, false),
+    MATERIAL_UPLOAD_FAIL("素材文件上传失败", -201, false),
     IMAGE_NUMBER_SHORTAGE("今日头条图片文件上传失败", -202, false),
     BYTEDANCE_IMAGE_UPLOAD_FAIL("今日头条图片文件上传失败", -203, false),
     TEMPLATE_NAME_HAS_EXIST("模板名称已存在", -204, false),

+ 17 - 0
module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/IMaterialUploadService.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.manage.modules.material.service;
+
+import com.alibaba.fastjson.JSONArray;
+
+import java.io.IOException;
+
+public interface IMaterialUploadService {
+
+    /**
+     * 同步素材到账号下
+     *
+     * @param mediaId
+     * @param materialArray
+     * @param accountArray
+     */
+    void uploadAccount(String mediaId, JSONArray materialArray, JSONArray accountArray) throws IOException;
+}

+ 239 - 0
module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadServiceImpl.java

@@ -0,0 +1,239 @@
+package cn.com.ctop.manage.modules.material.service.impl;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.entity.MaterialInfo;
+import cn.com.ctop.common.module.mapper.CtopOauthTokenMapper;
+import cn.com.ctop.common.module.mapper.MaterialInfoMapper;
+import cn.com.ctop.common.module.service.IFileInfoService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
+import cn.com.ctop.common.module.utils.LoadFileUtil;
+import cn.com.ctop.common.module.utils.PropertiesUtils;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
+import cn.com.ctop.manage.modules.material.service.IMaterialUploadService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.ParseException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Service
+public class MaterialUploadServiceImpl implements IMaterialUploadService {
+    static ExecutorService executorService = Executors.newFixedThreadPool(3);
+
+
+    @Autowired
+    private CtopOauthTokenMapper oauthTokenMapper;
+    @Autowired
+    private MaterialInfoMapper materialInfoMapper;
+    @Autowired
+    private IKuaishouInterfaceService kuaishouInterfaceService;
+    @Autowired
+    private IFileInfoService fileInfoService;
+
+
+    /**
+     * 同步素材到账号下
+     *
+     * @param mediaId
+     * @param materialArray
+     * @param accountArray
+     */
+
+    @Override
+    public void uploadAccount(String mediaId, JSONArray materialArray, JSONArray accountArray) {
+        try {
+            if ("2".equals(mediaId)) {
+                this.KuaiShouUpload(mediaId, materialArray, accountArray);
+            } else if ("1".equals(mediaId)) {
+                this.TouTiaoUpload(mediaId, materialArray, accountArray);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+    }
+
+
+    private void TouTiaoUpload(String mediaId, JSONArray materialArray, JSONArray accountArray) {
+        for (int j = 0; j < materialArray.size(); j++) {
+            String materialId = materialArray.getString(j);
+            MaterialInfo materialInfo = materialInfoMapper.selectById(materialId);
+            if (Check.isNull(materialInfo)) {
+                continue;
+            }
+            try {
+
+                for (int i = 0; i < accountArray.size(); i++) {
+                    Long accountId = accountArray.getLong(i);
+                    QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
+                    tokenQueryWrapper.eq("account_id", accountId);
+                    tokenQueryWrapper.eq("media_id", mediaId);
+                    tokenQueryWrapper.orderByDesc("create_time");
+                    tokenQueryWrapper.last("limit 1");
+                    CtopOauthToken ctopOauthToken = oauthTokenMapper.selectOne(tokenQueryWrapper);
+                    if (Check.isNull(ctopOauthToken)) {
+                        continue;
+                    }
+                    executorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            try {
+                                System.err.println(Thread.currentThread().getName());
+                                if ("VIDEO".equals(materialInfo.getType())) {
+                                    fileInfoService.uploadVideoToBytedance(String.valueOf(accountId), materialInfo.getUrl());
+
+                                } else if ("IMAGE".equals(materialInfo.getType())) {
+                                    fileInfoService.uploadImageToBytedance(String.valueOf(accountId), materialInfo.getUrl());
+                                }
+
+
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }
+                    });
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+
+        }
+
+
+    }
+
+
+    private void KuaiShouUpload(String mediaId, JSONArray materialArray, JSONArray accountArray) {
+        for (int j = 0; j < materialArray.size(); j++) {
+            String materialId = materialArray.getString(j);
+            MaterialInfo materialInfo = materialInfoMapper.selectById(materialId);
+            if (Check.isNull(materialInfo)) {
+                continue;
+            }
+            try {
+                String localUrl = LoadFileUtil.downLoadFromUrl(materialInfo.getUrl(), "D:\\tets1\\video");
+                FileSystemResource resource = new FileSystemResource(new File(localUrl));
+                Map<String, String> headerMap = new HashMap<>();
+                headerMap.put("Content-Type", "multipart/form-data");
+                JSONObject requestJson = new JSONObject();
+                requestJson.put("file", resource);
+                requestJson.put("signature", materialInfo.getCode());
+                for (int i = 0; i < accountArray.size(); i++) {
+                    Long accountId = accountArray.getLong(i);
+                    QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
+                    tokenQueryWrapper.eq("account_id", accountId);
+                    tokenQueryWrapper.eq("media_id", mediaId);
+                    tokenQueryWrapper.orderByDesc("create_time");
+                    tokenQueryWrapper.last("limit 1");
+                    CtopOauthToken ctopOauthToken = oauthTokenMapper.selectOne(tokenQueryWrapper);
+                    if (Check.isNull(ctopOauthToken)) {
+                        continue;
+                    }
+                    requestJson.put("advertiser_id", accountId);
+                    headerMap.put("Access-Token", ctopOauthToken.getAccessToken());
+                    executorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            try {
+                                System.err.println(Thread.currentThread().getName());
+                                String url = "";
+                                if ("VIDEO".equals(materialInfo.getType())) {
+                                    url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.VIDEO_UPLOAD;
+
+                                } else if ("IMAGE".equals(materialInfo.getType())) {
+                                    url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.IMAGE_UPLOAD;
+                                    requestJson.put("type", "2");
+                                    requestJson.put("upload_type", "1");
+                                }
+
+                                String result = exceptInfoForRestTemplate(url, requestJson, headerMap);
+                                JSONObject resultJson = JSONObject.parseObject(result);
+                                if (!Check.isNull(resultJson)) {
+                                    if (resultJson.getInteger("code") == 0) {
+                                        JSONObject dataJson = resultJson.getJSONObject("data");
+                                        if (!Check.isNull(dataJson)) {
+                                            if ("IMAGE".equals(materialInfo.getType())) {
+                                                kuaishouInterfaceService.imageGet(accountId, ctopOauthToken.getAccessToken(), dataJson.getString("image_token"));
+                                            } else if ("VIDEO".equals(materialInfo.getType())) {
+                                                kuaishouInterfaceService.videoGet(accountId, ctopOauthToken.getAccessToken(), dataJson.getString("photo_id"), dataJson.getString("signature"));
+                                            }
+                                        }
+
+                                        log.info("素材同步完成,accountId:{},code:{}", accountId, materialInfo.getCode());
+                                    } else {
+                                        log.error("同步素材失败,返回信息:{},请求参数:{}", resultJson, requestJson);
+                                    }
+                                }
+
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }
+                    });
+
+                }
+                /*boolean isTrue = LoadFileUtil.delFile(localUrl);
+                if (isTrue) {
+                    log.info("删除本地缓存素材成功,code:{}", materialInfo.getCode());
+                }*/
+
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+
+        }
+
+
+    }
+
+
+
+
+    @Autowired
+    private RestTemplate rest;
+
+    private String exceptInfoForRestTemplate(String url, Map<String, Object> paramMap, Map<String, String> headerMap) throws ParseException {
+        try {
+            MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
+            if (!Check.isNullMap(paramMap)) {
+                for (String key : paramMap.keySet()) {
+                    param.add(key, paramMap.get(key));
+                }
+                HttpHeaders headers = new HttpHeaders();
+                if (!Check.isNullMap(headerMap)) {
+                    for (String key : headerMap.keySet()) {
+                        headers.add(key, headerMap.get(key));
+                    }
+                }
+                HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(param, headers);
+                ResponseEntity<String> responseEntity = rest.exchange(url, HttpMethod.POST, httpEntity, String.class);
+                return responseEntity.getBody();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 5 - 13
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouController.java

@@ -2,6 +2,10 @@ package cn.com.ctop.kuaishou.modules.batch.controller;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.FileEntity;
+import cn.com.ctop.common.module.utils.FileUploadTool;
+import cn.com.ctop.common.module.utils.LoadFileUtil;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -117,24 +121,11 @@ public class KuaiShouController {
     }
 
 
-    @RequestMapping("/video/get")
-    public void videoGet() {
 
-        String accessToken = "360d43b49553684a011d6607322582b1";
-        Long advertiserId = 23212L;
-        String photoId = "5249789805735604135";
-        /*FileUploadTool fileUploadTool = new FileUploadTool();
-        FileEntity entity = new FileEntity();
-
-        entity = fileUploadTool.createFile(multipartFile, request);
-        System.err.println(entity);*/
 
 
-        kuaishouInterfaceService.videoGet(advertiserId, accessToken, photoId);
 
 
-    }
-
     @RequestMapping("/image/get")
     public void imageGet() {
 
@@ -243,4 +234,5 @@ public class KuaiShouController {
     }
 
 
+
 }

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

@@ -70,6 +70,7 @@ public class MaterialRefuseController {
 
         Map<String, Object> creativeMap = updateService.updateCreative(ctopOauthToken.getAccessToken(), accountId, jsonObject);
         if (Check.isNullMap(creativeMap)) {
+
             map.put("code", -1);
             map.put("message", "修改失败,返回为空");
             return map;

+ 4 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/entity/KuaiShouImageGet.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.kuaishou.modules.batch.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;
@@ -29,9 +30,9 @@ public class KuaiShouImageGet {
     /**
      * id
      */
-    @TableId
+    @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "id")
-    private String id;
+    private Long id;
     /**
      * 账户ID
      */
@@ -68,6 +69,7 @@ public class KuaiShouImageGet {
     @Excel(name = "图片格式", width = 15)
     @ApiModelProperty(value = "图片格式")
     private String format;
+    private String signature;
     /**
      * 图片 token
      */

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

@@ -151,7 +151,7 @@ public interface IKuaishouInterfaceService {
      * @param accessToken
      * @param photoId
      */
-    void videoGet(Long advertiserId, String accessToken, String photoId);
+    void videoGet(Long advertiserId, String accessToken, String photoId, String signature);
 
     /**
      * 获取图片信息

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

@@ -1,19 +1,19 @@
 package cn.com.ctop.kuaishou.modules.batch.service.impl;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.AesEncryptUtil;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouImage;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouImageMapper;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouImageService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
-import cn.com.ctop.common.module.entity.CtopOauthToken;
-import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 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.jeecg.common.util.encryption.AesEncryptUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 

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

@@ -1,19 +1,19 @@
 package cn.com.ctop.kuaishou.modules.batch.service.impl;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.AesEncryptUtil;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouVideo;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouVideoMapper;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouVideoService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
-import cn.com.ctop.common.module.entity.CtopOauthToken;
-import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 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.jeecg.common.util.encryption.AesEncryptUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 

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

@@ -30,7 +30,6 @@ import lombok.extern.slf4j.Slf4j;
 import lombok.var;
 import org.apache.http.ParseException;
 import org.jeecg.common.util.DateUtils;
-import org.jeecg.common.util.LoadFileUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.FileSystemResource;
 import org.springframework.http.HttpEntity;
@@ -952,9 +951,9 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
     /**
      * 创建广告计划
      *
-     * @param accessToken token信息
-     * @param advertiserId  广告主id
-     * @param requestJson 请求参数拼装
+     * @param accessToken  token信息
+     * @param advertiserId 广告主id
+     * @param requestJson  请求参数拼装
      */
     @Override
     public Map<String, Object> campaignCreate(String accessToken, Long advertiserId, JSONObject requestJson) {
@@ -1944,7 +1943,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
      * @param accessToken
      */
     @Override
-    public void videoGet(Long advertiserId, String accessToken, String photoId) {
+    public void videoGet(Long advertiserId, String accessToken, String photoId, String signature) {
         try {
             String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.VIDEO_GET;
             JSONObject param = new JSONObject();
@@ -1967,12 +1966,15 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                             if (!Check.isNull(dataJson)) {
                                 KuaiShouVideoGet videoGet = new KuaiShouVideoGet();
                                 videoGet.setAccountId(advertiserId);
+                                videoGet.setId(advertiserId + photoId);
                                 videoGet.setWidth(dataJson.getInteger("width"));
                                 videoGet.setHeight(dataJson.getInteger("height"));
                                 videoGet.setUrl(dataJson.getString("url"));
                                 videoGet.setPhotoId(dataJson.getString("photo_id"));
                                 videoGet.setCoverUrl(dataJson.getString("cover_url"));
-                                videoGetMapper.insert(videoGet);
+                                videoGet.setSignature(signature);
+                                kuaiShouVideoGetService.saveOrUpdate(videoGet);
+
                             }
                         }
                     }
@@ -2018,7 +2020,14 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                         imageGet.setHeight(dataJson.getLong("height"));
                         imageGet.setSize(dataJson.getLong("size"));
                         imageGet.setFormat(dataJson.getString("format"));
+                        String signature = dataJson.getString("signature");
+                        imageGet.setSignature(signature);
                         imageGet.setImageToken(dataJson.getString("image_token"));
+                        Map<String, Object> deleteMap = new HashMap<>();
+                        deleteMap.put("account_id", advertiserId);
+                        deleteMap.put("signature", signature);
+                        imageGetMapper.deleteByMap(deleteMap);
+
                         imageGetMapper.insert(imageGet);
                     }
                 } else {
@@ -2116,11 +2125,14 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                 log.error("下载文件到本地文件夹失败,filePath:{},accountId:{}", filePath, advertiserId);
                 throw new Exception("下载文件到本地失败");
             }
+            String signature = LoadFileUtil.getMD5(localUrl);
             Long startTime = System.currentTimeMillis();
             String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.IMAGE_UPLOAD;
             JSONObject requestJson = new JSONObject();
             requestJson.put("advertiser_id", advertiserId);
+            requestJson.put("signature", signature);
             requestJson.put("type", type);
+            requestJson.put("upload_type", 1);
             Map<String, String> headerMap = new HashMap<String, String>();
             headerMap.put("Content-Type", "multipart/form-data");
             headerMap.put("Access-Token", accessToken);