Selaa lähdekoodia

渠道号功能

zhaoxian 4 vuotta sitten
vanhempi
commit
d7edfcdf53
42 muutettua tiedostoa jossa 4130 lisäystä ja 3 poistoa
  1. 4 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/ProjectMapper.java
  2. 18 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/ProjectMapper.xml
  3. 63 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/utils/ExportExcelUtils.java
  4. 4 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java
  5. 5 2
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/IKuaishouAppPackageService.java
  6. 2 1
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/impl/KuaishouAppPackageServiceImpl.java
  7. 4 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaiShouAppListService.java
  8. 10 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouAppListServiceImpl.java
  9. 246 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/controller/KuaishouChannelAppInfoController.java
  10. 390 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/controller/KuaishouChannelController.java
  11. 246 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/controller/KuaishouChannelCreateStrategyController.java
  12. 321 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/controller/KuaishouChannelItemsController.java
  13. 201 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannel.java
  14. 135 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannelAppInfo.java
  15. 210 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannelCreateStrategy.java
  16. 93 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannelItems.java
  17. 57 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannelItemsRel.java
  18. 77 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannelRel.java
  19. 17 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelAppInfoMapper.java
  20. 20 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelCreateStrategyMapper.java
  21. 28 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelItemsMapper.java
  22. 15 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelItemsRelMapper.java
  23. 41 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelMapper.java
  24. 18 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelRelMapper.java
  25. 5 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelAppInfoMapper.xml
  26. 25 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelCreateStrategyMapper.xml
  27. 86 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelItemsMapper.xml
  28. 5 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelItemsRelMapper.xml
  29. 183 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelMapper.xml
  30. 12 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelRelMapper.xml
  31. 15 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelAppInfoService.java
  32. 20 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelCreateStrategyService.java
  33. 15 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelItemsRelService.java
  34. 33 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelItemsService.java
  35. 16 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelRelService.java
  36. 33 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelService.java
  37. 19 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelAppInfoServiceImpl.java
  38. 35 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelCreateStrategyServiceImpl.java
  39. 19 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelItemsRelServiceImpl.java
  40. 165 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelItemsServiceImpl.java
  41. 26 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelRelServiceImpl.java
  42. 1193 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelServiceImpl.java

+ 4 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/ProjectMapper.java

@@ -20,6 +20,8 @@ public interface ProjectMapper extends BaseMapper<Project> {
 
     String getNameByAccountId(@Param("accountId") Long accountId);
 
+    String getNameByProjectId(@Param("projectId") Long projectId);
+
     JSONObject getWarningInfoByProjectId(@Param("projectId") Long projectId);
 
     String querySupplierCodeById(@Param("projectId") Long projectId);
@@ -35,4 +37,6 @@ public interface ProjectMapper extends BaseMapper<Project> {
     JSONObject getProjectByAccountId(@Param("accountId") Long accountId);
 
     List<JSONObject> queryProductList(@Param("projectList") List<JSONObject> projectList);
+
+    JSONObject getProduct(@Param("accountId") Long accountId, @Param("projectId") Long projectId);
 }

+ 18 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/ProjectMapper.xml

@@ -10,6 +10,11 @@
      )
     </select>
 
+    <select id="getNameByProjectId" resultType="java.lang.String">
+     select project_name from ctop_project
+     where id = #{projectId}
+    </select>
+
     <select id="getWarningInfoByProjectId" resultType="com.alibaba.fastjson.JSONObject">
      select
      id projectId,
@@ -105,4 +110,17 @@
         GROUP BY t1.product_id
     </select>
 
+    <select id="getProduct" resultType="com.alibaba.fastjson.JSONObject">
+        select DISTINCT t1.id as 'projectId', product_id as 'productId', t1.project_name as 'projectName'
+        from ctop_project t1 left join ctop_user_allocation t2 ON t1.id = t2.project_id
+        <where>
+        <if test="projectId != null and projectId != ''">
+           and t1.id = #{projectId}
+        </if>
+        <if test="accountId != null and accountId != ''">
+            and t2.account_id = #{accountId}
+        </if>
+        </where>
+    </select>
+
 </mapper>

+ 63 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/utils/ExportExcelUtils.java

@@ -1,10 +1,17 @@
 package cn.com.ctop.common.module.utils;
 
 
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.*;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 
 public class ExportExcelUtils {
@@ -264,5 +271,61 @@ public class ExportExcelUtils {
         }
     }
 
+    //发送响应流方法
+    public void putResponseHeader(HttpServletResponse response, String fileName) {
+        try {
+            try {
+                fileName = new String(fileName.getBytes(), "ISO8859-1");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+//            response.setContentType("multipart/form-data;charset=ISO8859-1");
+            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+            response.addHeader("Pargam", "no-cache");
+            response.addHeader("Cache-Control", "no-cache");
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
 
+    public String getCellValue(Cell cell) {
+        String value = "";
+        if (cell != null) {
+            // 以下是判断数据的类型
+            switch (cell.getCellType()) {
+                case HSSFCell.CELL_TYPE_NUMERIC: // 数字
+                    value = cell.getNumericCellValue() + "";
+                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
+                        Date date = cell.getDateCellValue();
+                        if (date != null) {
+                            value = new SimpleDateFormat("yyyy-MM-dd").format(date);
+                        } else {
+                            value = "";
+                        }
+                    } else {
+                        value = new DecimalFormat("0").format(cell.getNumericCellValue());
+                    }
+                    break;
+                case HSSFCell.CELL_TYPE_STRING: // 字符串
+                    value = cell.getStringCellValue();
+                    break;
+                case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
+                    value = cell.getBooleanCellValue() + "";
+                    break;
+                case HSSFCell.CELL_TYPE_FORMULA: // 公式
+                    value = cell.getCellFormula() + "";
+                    break;
+                case HSSFCell.CELL_TYPE_BLANK: // 空值
+                    value = "";
+                    break;
+                case HSSFCell.CELL_TYPE_ERROR: // 故障
+                    value = "非法字符";
+                    break;
+                default:
+                    value = "未知类型";
+                    break;
+            }
+        }
+        return value.trim();
+    }
 }

+ 4 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java

@@ -113,6 +113,10 @@ public class KuaishouInterfaceConstant {
      */
     public static final String APP_CREATE = "/rest/openapi/v1/file/ad/app/create";
     /**
+     * 创建应用
+     */
+    public static final String APP_UPDATE = "/rest/openapi/v1/file/ad/app/update";
+    /**
      * 创建广告获取应用列表
      */
     public static final String APP_LIST = "/rest/openapi/v1/file/ad/app/list";

+ 5 - 2
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/IKuaishouAppPackageService.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.kuaishou.modules.ai.service;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.kuaishou.modules.ai.entity.KuaishouAppPackage;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -19,11 +20,11 @@ public interface IKuaishouAppPackageService extends IService<KuaishouAppPackage>
 
     Result<Object> importExcel(MultipartFile file, Long projectId, Integer platform, String imageUrl) throws Exception;
 
-    Result<Object> pushAppPackage(Long id, JSONArray accountIds,JSONObject requestJson);
+    Result<Object> pushAppPackage(Long id, JSONArray accountIds, JSONObject requestJson);
 
     Result<Object> queryPushResults(String id, JSONArray accountIds, String status);
 
-    List<Long> queryByAppVersion(Long projectId,String appVersion,Integer dataStatus);
+    List<Long> queryByAppVersion(Long projectId, String appVersion, Integer dataStatus);
 
     void createAppAndGroupRel(JSONObject request);
 
@@ -42,4 +43,6 @@ public interface IKuaishouAppPackageService extends IService<KuaishouAppPackage>
     Result<Object> getAppsDetail(List<Long> list);
 
     JSONObject queryAppId(Long appTemId, Long accountId);
+
+    JSONObject getImageToken(String md5, Long accountId, CtopOauthToken oauthToken);
 }

+ 2 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/impl/KuaishouAppPackageServiceImpl.java

@@ -320,7 +320,8 @@ public class KuaishouAppPackageServiceImpl extends ServiceImpl<KuaishouAppPackag
     /**
      * 获取图片token
      */
-    private JSONObject getImageToken(String md5, Long accountId, CtopOauthToken oauthToken) {
+    @Override
+    public JSONObject getImageToken(String md5, Long accountId, CtopOauthToken oauthToken) {
         JSONObject request = new JSONObject();
         if (!Check.isNull(md5)) {
             QueryWrapper<KuaiShouImageGet> queryWrapper = new QueryWrapper<>();

+ 4 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaiShouAppListService.java

@@ -3,6 +3,8 @@ package cn.com.ctop.kuaishou.modules.batch.service;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouAppList;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: 快手-应用列表
  * @Author: jeecg-boot
@@ -12,4 +14,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
 public interface IKuaiShouAppListService extends IService<KuaiShouAppList> {
 
     KuaiShouAppList getAppInfo(Long accountId, Long appId);
+
+    List<KuaiShouAppList> getAppListByAccountId(Long accountId);
 }

+ 10 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouAppListServiceImpl.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @Description: 快手-应用列表
  * @Author: jeecg-boot
@@ -25,4 +27,12 @@ public class KuaiShouAppListServiceImpl extends ServiceImpl<KuaiShouAppListMappe
         queryWrapper.last("limit 1");
         return this.getOne(queryWrapper);
     }
+
+    @Override
+    public List<KuaiShouAppList> getAppListByAccountId(Long accountId) {
+        QueryWrapper<KuaiShouAppList> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account_id", accountId);
+        queryWrapper.eq("platform", 1);
+        return this.list(queryWrapper);
+    }
 }

+ 246 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/controller/KuaishouChannelAppInfoController.java

@@ -0,0 +1,246 @@
+package cn.com.ctop.kuaishou.modules.channel.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelAppInfo;
+import cn.com.ctop.kuaishou.modules.channel.service.IKuaishouChannelAppInfoService;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+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 com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 渠道功能创建的应用记录
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2021-09-02
+ */
+@Slf4j
+@Api(tags = "渠道功能创建的应用记录")
+@RestController
+@RequestMapping("/ctop_kuaishou_channel_app_info/kuaishouChannelAppInfo")
+public class KuaishouChannelAppInfoController {
+    @Autowired
+    private IKuaishouChannelAppInfoService kuaishouChannelAppInfoService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param kuaishouChannelAppInfo
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "渠道功能创建的应用记录-分页列表查询", notes = "渠道功能创建的应用记录-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<KuaishouChannelAppInfo>> queryPageList(KuaishouChannelAppInfo kuaishouChannelAppInfo,
+                                                               @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                               @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                               HttpServletRequest req) {
+        Result<IPage<KuaishouChannelAppInfo>> result = new Result<>();
+        QueryWrapper<KuaishouChannelAppInfo> queryWrapper = QueryGenerator.initQueryWrapper(kuaishouChannelAppInfo, req.getParameterMap());
+        Page<KuaishouChannelAppInfo> page = new Page<KuaishouChannelAppInfo>(pageNo, pageSize);
+        IPage<KuaishouChannelAppInfo> pageList = kuaishouChannelAppInfoService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param kuaishouChannelAppInfo
+     * @return
+     */
+    @ApiOperation(value = "渠道功能创建的应用记录-添加", notes = "渠道功能创建的应用记录-添加")
+    @PostMapping(value = "/add")
+    public Result<KuaishouChannelAppInfo> add(@RequestBody KuaishouChannelAppInfo kuaishouChannelAppInfo) {
+        Result<KuaishouChannelAppInfo> result = new Result<>();
+        try {
+            kuaishouChannelAppInfoService.save(kuaishouChannelAppInfo);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param kuaishouChannelAppInfo
+     * @return
+     */
+    @ApiOperation(value = "渠道功能创建的应用记录-编辑", notes = "渠道功能创建的应用记录-编辑")
+    @PutMapping(value = "/edit")
+    public Result<KuaishouChannelAppInfo> edit(@RequestBody KuaishouChannelAppInfo kuaishouChannelAppInfo) {
+        Result<KuaishouChannelAppInfo> result = new Result<KuaishouChannelAppInfo>();
+        KuaishouChannelAppInfo kuaishouChannelAppInfoEntity = kuaishouChannelAppInfoService.getById(kuaishouChannelAppInfo.getId());
+        if (kuaishouChannelAppInfoEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = kuaishouChannelAppInfoService.updateById(kuaishouChannelAppInfo);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "渠道功能创建的应用记录-通过id删除", notes = "渠道功能创建的应用记录-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id") String id) {
+        try {
+            kuaishouChannelAppInfoService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "渠道功能创建的应用记录-批量删除", notes = "渠道功能创建的应用记录-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<KuaishouChannelAppInfo> deleteBatch(@RequestParam(name = "ids") String ids) {
+        Result<KuaishouChannelAppInfo> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.kuaishouChannelAppInfoService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "渠道功能创建的应用记录-通过id查询", notes = "渠道功能创建的应用记录-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<KuaishouChannelAppInfo> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<KuaishouChannelAppInfo> result = new Result<>();
+        KuaishouChannelAppInfo kuaishouChannelAppInfo = kuaishouChannelAppInfoService.getById(id);
+        if (kuaishouChannelAppInfo == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(kuaishouChannelAppInfo);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<KuaishouChannelAppInfo> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                KuaishouChannelAppInfo kuaishouChannelAppInfo = JSON.parseObject(deString, KuaishouChannelAppInfo.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(kuaishouChannelAppInfo, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<KuaishouChannelAppInfo> pageList = kuaishouChannelAppInfoService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "渠道功能创建的应用记录列表");
+        mv.addObject(NormalExcelConstants.CLASS, KuaishouChannelAppInfo.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<KuaishouChannelAppInfo> listKuaishouChannelAppInfos = ExcelImportUtil.importExcel(file.getInputStream(), KuaishouChannelAppInfo.class, params);
+                kuaishouChannelAppInfoService.saveBatch(listKuaishouChannelAppInfos);
+                return Result.ok("文件导入成功!数据行数:" + listKuaishouChannelAppInfos.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("文件导入失败!");
+    }
+
+}

+ 390 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/controller/KuaishouChannelController.java

@@ -0,0 +1,390 @@
+package cn.com.ctop.kuaishou.modules.channel.controller;
+
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.ExportExcelUtils;
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannel;
+import cn.com.ctop.kuaishou.modules.channel.service.IKuaishouChannelService;
+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.github.pagehelper.PageHelper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 渠道号信息表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2021-08-30
+ */
+@Slf4j
+@Api(tags = "渠道号信息表")
+@RestController
+@RequestMapping("/channel")
+public class KuaishouChannelController {
+    @Autowired
+    private IKuaishouChannelService kuaishouChannelService;
+
+    /**
+     * 查询渠道号管理首页数据
+     */
+    @GetMapping(value = "/channelManagementHome")
+    public Result<Object> channelManagementHome(Long productId, Long projectId, Long accountId,
+                                                @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        try {
+            PageHelper.startPage(pageNo, pageSize);
+            return kuaishouChannelService.channelManagementHome(productId, projectId, accountId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询渠道号管理首页数据异常");
+        }
+    }
+
+
+    /**
+     * 渠道号详情
+     */
+    @GetMapping(value = "/channelNumberDetails")
+    public Result<Object> channelNumberDetails(KuaishouChannel kuaishouChannel, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        try {
+            if (Check.isNull(kuaishouChannel.getAccountId()) && Check.isNull(kuaishouChannel.getProjectId())) {
+                return Result.error("请选择账户");
+            }
+            return kuaishouChannelService.channelNumberDetails(kuaishouChannel, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询渠道号详情异常");
+        }
+    }
+
+
+    /**
+     * 渠道号使用详情列表
+     */
+    @GetMapping(value = "/channelNumberUsageDetailsList")
+    public Result<Object> channelNumberUsageDetailsList(KuaishouChannel kuaishouChannel, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        try {
+            if (Check.isNull(kuaishouChannel.getAccountId()) || Check.isNull(kuaishouChannel.getChannelCode())) {
+                return Result.error("缺失参数");
+            }
+            return kuaishouChannelService.channelNumberUsageDetailsList(kuaishouChannel, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询渠道号详情异常");
+        }
+    }
+
+
+    /**
+     * 渠道号绑定单品列表页
+     */
+    @PostMapping(value = "/channelNumberBindingItemInfo")
+    public Result<Object> channelNumberBindingItemInfo(@RequestBody JSONObject request) {
+        try {
+            if (request.isEmpty()) {
+                return Result.error("请选择信息");
+            }
+            JSONArray ids = request.getJSONArray("ids");
+            return kuaishouChannelService.channelNumberBindingItemInfo(ids);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询渠道号绑定单品列表异常");
+        }
+    }
+
+
+    /**
+     * 修改渠道号
+     */
+    @GetMapping(value = "/updateChannel")
+    public Result<Object> updateChannel(KuaishouChannel channel) {
+        try {
+            if (Check.isNull(channel.getId())) {
+                return Result.error("缺失参数");
+            }
+            KuaishouChannel kuaishouChannelEntity = kuaishouChannelService.getById(channel.getId());
+            if (kuaishouChannelEntity == null) {
+                return Result.error("未找到对应实体");
+            } else {
+                kuaishouChannelService.updateById(channel);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("修改渠道号异常");
+        }
+        return Result.ok("修改成功");
+    }
+
+    /**
+     * 导出单品模板
+     */
+    @GetMapping("/exportChannelTemplate")
+    public Result<Object> getExcel(HttpServletResponse response, Long projectId, Long productId, String userId) {
+        try {
+            if (Check.isNull(projectId) || Check.isNull(productId)) {
+                return Result.error("缺少参数");
+            }
+            OutputStream os = response.getOutputStream();
+            ExportExcelUtils eeu = new ExportExcelUtils();
+            XSSFWorkbook workbook = new XSSFWorkbook();
+            String[] titles = {"产品", "项目", "使用范围(1账户,2项目)", "账户ID", "渠道号创建人", "渠道号(数字加字母)", "渠道号名称", "下载链接", "应用包名", "应用名称", "应用标记", "隐私政策链接"
+                    , "第三方点击监测链接", "是否关联单品(0否,1是)", "关联单品名称", "使用层级(账户:account,计划:plan,组:group)", "是否循环(0否,1是)", "循环次数", "调起链接(选填)", "第三方actionBar监测链接(选填)"};
+            List<List<Object>> list = new ArrayList<>();
+            List<Object> ids = new ArrayList<>();
+            ids.add(productId);//产品
+            ids.add(projectId);//项目
+            ids.add(1);//使用范围(1项目,2账户)
+            ids.add(23212);//账户ID
+            ids.add(userId);//渠道号创建人
+            ids.add("KS_0001");//渠道号(数字加字母)
+            ids.add("快手0001");//渠道号名称
+            ids.add("http://test.com.cn");//下载链接
+            ids.add("com.test.hcst");//应用包名
+            ids.add("示例包_HCST");//应用名称
+            ids.add("hcst");//应用标记
+            ids.add("http://test.com.cn");//隐私政策链接
+            ids.add("http://test.com.cn");//第三方点击监测链接
+            ids.add(1);//是否关联单品(0否,1是)
+            ids.add("剑来");//关联单品名称
+            ids.add("account");//使用层级(账户:account,计划:plan,组:group)
+            ids.add(1);//是否循环(0否,1是)
+            ids.add(10);//循环次数
+            list.add(ids);
+            eeu.exportExcelForAttendance(workbook, 0, "Sheet1", titles, list);
+            eeu.putResponseHeader(response, "渠道号模板.xlsx");
+            workbook.write(os);
+            os.flush();
+            os.close();
+        } catch (IOException e) {
+            log.error(e.getMessage());
+        }
+        return Result.ok("success");
+    }
+
+    /**
+     * 系统批量创建渠道号
+     */
+    @PostMapping(value = "/systemBatchCreation")
+    public Result<Object> systemBatchCreation(@RequestBody JSONObject request) {
+        try {
+            return kuaishouChannelService.systemBatchCreation(request);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("系统批量创建渠道号异常", e);
+            return Result.error("系统批量创建渠道号失败," + e.getMessage());
+        }
+    }
+
+
+    /**
+     * 导入渠道号EXCEL批量创建
+     */
+    @PostMapping(value = "/importChannelExcel")
+    @ResponseBody
+    public Result<Object> importChannelExcel(HttpServletResponse response, @RequestParam("file") MultipartFile file, @RequestParam("imageUrl") String imageUrl) {
+        response.setHeader("Access-Control-Allow-Origin", "*");
+        try {
+            if (Check.isNull(file) || Check.isNull(imageUrl)) {
+                return Result.error("请上传图标和文档");
+            }
+            return kuaishouChannelService.importChannelExcel(file, imageUrl);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("excel批量添加渠道号异常", e);
+            return Result.error("excel批量添加渠道号失败," + e.getMessage());
+        }
+    }
+
+    /**
+     * 定制创建渠道号
+     */
+    @PostMapping(value = "/customizedCreate")
+    public Result<Object> customizedCreate(@RequestBody JSONObject request) {
+        try {
+            return kuaishouChannelService.customizedCreate(request, 3);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("定制创建渠道号异常", e);
+            return Result.error("定制创建渠道号失败," + e.getMessage());
+        }
+    }
+
+    /**
+     * 通过账户查询渠道号接口
+     */
+    @PostMapping(value = "/queryChannel")
+    public Result<Object> queryChannel(Long accountId, String usageLevel) {
+        try {
+            if (Check.isNull(accountId) || Check.isNull(usageLevel)) {
+                return Result.error("缺失参数");
+            }
+            return kuaishouChannelService.queryChannel(accountId, usageLevel);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("通过账户查询渠道号异常", e);
+            return Result.error("通过账户查询渠道号失败," + e.getMessage());
+        }
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "渠道号信息表-通过id删除", notes = "渠道号信息表-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id") String id) {
+        try {
+            kuaishouChannelService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "渠道号信息表-批量删除", notes = "渠道号信息表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<KuaishouChannel> deleteBatch(@RequestParam(name = "ids") String ids) {
+        Result<KuaishouChannel> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.kuaishouChannelService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "渠道号信息表-通过id查询", notes = "渠道号信息表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<KuaishouChannel> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<KuaishouChannel> result = new Result<>();
+        KuaishouChannel kuaishouChannel = kuaishouChannelService.getById(id);
+        if (kuaishouChannel == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(kuaishouChannel);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<KuaishouChannel> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                KuaishouChannel kuaishouChannel = JSON.parseObject(deString, KuaishouChannel.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(kuaishouChannel, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<KuaishouChannel> pageList = kuaishouChannelService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "渠道号信息表列表");
+        mv.addObject(NormalExcelConstants.CLASS, KuaishouChannel.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<KuaishouChannel> listKuaishouChannels = ExcelImportUtil.importExcel(file.getInputStream(), KuaishouChannel.class, params);
+                kuaishouChannelService.saveBatch(listKuaishouChannels);
+                return Result.ok("文件导入成功!数据行数:" + listKuaishouChannels.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("文件导入失败!");
+    }
+
+}

+ 246 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/controller/KuaishouChannelCreateStrategyController.java

@@ -0,0 +1,246 @@
+package cn.com.ctop.kuaishou.modules.channel.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelCreateStrategy;
+import cn.com.ctop.kuaishou.modules.channel.service.IKuaishouChannelCreateStrategyService;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+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 com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 渠道号创建策略表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2021-09-01
+ */
+@Slf4j
+@Api(tags = "渠道号创建策略表")
+@RestController
+@RequestMapping("/ctop_kuaishou_channel_create_strategy/kuaishouChannelCreateStrategy")
+public class KuaishouChannelCreateStrategyController {
+    @Autowired
+    private IKuaishouChannelCreateStrategyService kuaishouChannelCreateStrategyService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param kuaishouChannelCreateStrategy
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "渠道号创建策略表-分页列表查询", notes = "渠道号创建策略表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<KuaishouChannelCreateStrategy>> queryPageList(KuaishouChannelCreateStrategy kuaishouChannelCreateStrategy,
+                                                                      @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                      @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                                      HttpServletRequest req) {
+        Result<IPage<KuaishouChannelCreateStrategy>> result = new Result<>();
+        QueryWrapper<KuaishouChannelCreateStrategy> queryWrapper = QueryGenerator.initQueryWrapper(kuaishouChannelCreateStrategy, req.getParameterMap());
+        Page<KuaishouChannelCreateStrategy> page = new Page<KuaishouChannelCreateStrategy>(pageNo, pageSize);
+        IPage<KuaishouChannelCreateStrategy> pageList = kuaishouChannelCreateStrategyService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param kuaishouChannelCreateStrategy
+     * @return
+     */
+    @ApiOperation(value = "渠道号创建策略表-添加", notes = "渠道号创建策略表-添加")
+    @PostMapping(value = "/add")
+    public Result<KuaishouChannelCreateStrategy> add(@RequestBody KuaishouChannelCreateStrategy kuaishouChannelCreateStrategy) {
+        Result<KuaishouChannelCreateStrategy> result = new Result<>();
+        try {
+            kuaishouChannelCreateStrategyService.save(kuaishouChannelCreateStrategy);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param kuaishouChannelCreateStrategy
+     * @return
+     */
+    @ApiOperation(value = "渠道号创建策略表-编辑", notes = "渠道号创建策略表-编辑")
+    @PutMapping(value = "/edit")
+    public Result<KuaishouChannelCreateStrategy> edit(@RequestBody KuaishouChannelCreateStrategy kuaishouChannelCreateStrategy) {
+        Result<KuaishouChannelCreateStrategy> result = new Result<KuaishouChannelCreateStrategy>();
+        KuaishouChannelCreateStrategy kuaishouChannelCreateStrategyEntity = kuaishouChannelCreateStrategyService.getById(kuaishouChannelCreateStrategy.getId());
+        if (kuaishouChannelCreateStrategyEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = kuaishouChannelCreateStrategyService.updateById(kuaishouChannelCreateStrategy);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "渠道号创建策略表-通过id删除", notes = "渠道号创建策略表-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id") String id) {
+        try {
+            kuaishouChannelCreateStrategyService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "渠道号创建策略表-批量删除", notes = "渠道号创建策略表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<KuaishouChannelCreateStrategy> deleteBatch(@RequestParam(name = "ids") String ids) {
+        Result<KuaishouChannelCreateStrategy> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.kuaishouChannelCreateStrategyService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "渠道号创建策略表-通过id查询", notes = "渠道号创建策略表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<KuaishouChannelCreateStrategy> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<KuaishouChannelCreateStrategy> result = new Result<>();
+        KuaishouChannelCreateStrategy kuaishouChannelCreateStrategy = kuaishouChannelCreateStrategyService.getById(id);
+        if (kuaishouChannelCreateStrategy == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(kuaishouChannelCreateStrategy);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<KuaishouChannelCreateStrategy> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                KuaishouChannelCreateStrategy kuaishouChannelCreateStrategy = JSON.parseObject(deString, KuaishouChannelCreateStrategy.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(kuaishouChannelCreateStrategy, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<KuaishouChannelCreateStrategy> pageList = kuaishouChannelCreateStrategyService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "渠道号创建策略表列表");
+        mv.addObject(NormalExcelConstants.CLASS, KuaishouChannelCreateStrategy.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<KuaishouChannelCreateStrategy> listKuaishouChannelCreateStrategys = ExcelImportUtil.importExcel(file.getInputStream(), KuaishouChannelCreateStrategy.class, params);
+                kuaishouChannelCreateStrategyService.saveBatch(listKuaishouChannelCreateStrategys);
+                return Result.ok("文件导入成功!数据行数:" + listKuaishouChannelCreateStrategys.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("文件导入失败!");
+    }
+
+}

+ 321 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/controller/KuaishouChannelItemsController.java

@@ -0,0 +1,321 @@
+package cn.com.ctop.kuaishou.modules.channel.controller;
+
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.ExportExcelUtils;
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelItems;
+import cn.com.ctop.kuaishou.modules.channel.service.IKuaishouChannelItemsService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.pagehelper.PageHelper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 渠道号对应单品信息表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2021-08-30
+ */
+@Slf4j
+@Api(tags = "渠道号对应单品信息表")
+@RestController
+@RequestMapping("/channelItem")
+public class KuaishouChannelItemsController {
+    @Autowired
+    private IKuaishouChannelItemsService kuaishouChannelItemsService;
+
+    /**
+     * 查询单品列表
+     */
+    @GetMapping(value = "/queryChannelItemList")
+    public Result<Object> queryChannelItemList(KuaishouChannelItems kuaishouChannelItems, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        try {
+            PageHelper.startPage(pageNo, pageSize);
+            return kuaishouChannelItemsService.queryChannelItemList(kuaishouChannelItems);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询单品列表异常");
+        }
+    }
+
+    /**
+     * 根据项目查询单品集合
+     */
+    @GetMapping(value = "/queryAllChannelItemByProjectId")
+    public Result<Object> queryAllChannelItemByProjectId(Long projectId) {
+        try {
+            if (Check.isNull(projectId)) {
+                return Result.error("请选择项目");
+            }
+            return kuaishouChannelItemsService.queryAllChannelItemByProjectId(projectId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("根据项目查询单品集合异常");
+        }
+    }
+
+    /**
+     * 新增单品
+     *
+     * @return
+     */
+    @PostMapping(value = "/addChannelItem")
+    public Result<Object> addChannelItem(@RequestBody JSONArray request) {
+        try {
+            if (request.isEmpty()) {
+                return Result.error("请添加信息");
+            }
+            return kuaishouChannelItemsService.addChannelItem(request);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            return Result.error("新增单品异常");
+        }
+    }
+
+    /**
+     * 修改渠道号
+     */
+    @GetMapping(value = "/updateChannelItems")
+    public Result<Object> updateChannelItems(KuaishouChannelItems item) {
+        try {
+            if (Check.isNull(item.getId())) {
+                return Result.error("缺失参数");
+            }
+            KuaishouChannelItems itemEntity = kuaishouChannelItemsService.getById(item.getId());
+            if (itemEntity == null) {
+                return Result.error("未找到对应实体");
+            } else {
+                kuaishouChannelItemsService.updateById(item);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("修改渠道号异常");
+        }
+        return Result.ok("修改成功");
+    }
+
+    /**
+     * 渠道号绑定单品
+     */
+    @PostMapping(value = "/channelBindingItem")
+    public Result<Object> channelBindingItem(@RequestBody JSONArray request) {
+        try {
+            if (request.isEmpty()) {
+                return Result.error("请选择信息");
+            }
+            return kuaishouChannelItemsService.channelBindingItem(request);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("修改渠道号异常");
+        }
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "渠道号对应单品信息表-通过id删除", notes = "渠道号对应单品信息表-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id") String id) {
+        try {
+            kuaishouChannelItemsService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "渠道号对应单品信息表-批量删除", notes = "渠道号对应单品信息表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<KuaishouChannelItems> deleteBatch(@RequestParam(name = "ids") String ids) {
+        Result<KuaishouChannelItems> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.kuaishouChannelItemsService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "渠道号对应单品信息表-通过id查询", notes = "渠道号对应单品信息表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<KuaishouChannelItems> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<KuaishouChannelItems> result = new Result<>();
+        KuaishouChannelItems kuaishouChannelItems = kuaishouChannelItemsService.getById(id);
+        if (kuaishouChannelItems == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(kuaishouChannelItems);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出单品模板
+     */
+    @GetMapping("/exportItemTemplate")
+    public Result<Object> getExcel(HttpServletResponse response, Long projectId) {
+        try {
+            if (Check.isNull(projectId)) {
+                return Result.error("请选择项目");
+            }
+            OutputStream os = response.getOutputStream();
+            ExportExcelUtils eeu = new ExportExcelUtils();
+            XSSFWorkbook workbook = new XSSFWorkbook();
+            String[] titles = {"项目", "单品名称", "素材关键词"};
+            List<List<Object>> list = new ArrayList<>();
+            List<Object> ids = new ArrayList<>();
+            ids.add(projectId);
+            list.add(ids);
+            eeu.exportExcelForAttendance(workbook, 0, "Sheet1", titles, list);
+            eeu.putResponseHeader(response, "单品模板.xlsx");
+            workbook.write(os);
+            os.flush();
+            os.close();
+        } catch (IOException e) {
+            log.error(e.getMessage());
+        }
+        return Result.ok("success");
+    }
+
+    /**
+     * 导入单品EXCEL批量创建
+     */
+    @PostMapping(value = "/importItemExcel")
+    @ResponseBody
+    public Result<Object> importItemExcel(HttpServletResponse response, @RequestParam("file") MultipartFile file) {
+        response.setHeader("Access-Control-Allow-Origin", "*");
+        try {
+            if (Check.isNull(file)) {
+                return Result.error("执行失败,请上传应用Excel文件");
+            }
+            return kuaishouChannelItemsService.importItemExcel(file);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("excel批量添加单品异常", e);
+            return Result.error("excel批量添加单品失败," + e.getMessage());
+        }
+    }
+
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<KuaishouChannelItems> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                KuaishouChannelItems kuaishouChannelItems = JSON.parseObject(deString, KuaishouChannelItems.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(kuaishouChannelItems, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<KuaishouChannelItems> pageList = kuaishouChannelItemsService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "渠道号对应单品信息表列表");
+        mv.addObject(NormalExcelConstants.CLASS, KuaishouChannelItems.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("渠道号对应单品信息表列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @returnexportAppTemplate
+     */
+    @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<KuaishouChannelItems> listKuaishouChannelItemss = ExcelImportUtil.importExcel(file.getInputStream(), KuaishouChannelItems.class, params);
+                kuaishouChannelItemsService.saveBatch(listKuaishouChannelItemss);
+                return Result.ok("文件导入成功!数据行数:" + listKuaishouChannelItemss.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("文件导入失败!");
+    }
+
+}

+ 201 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannel.java

@@ -0,0 +1,201 @@
+package cn.com.ctop.kuaishou.modules.channel.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 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;
+import java.util.List;
+
+/**
+ * 渠道号信息表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2021-08-30
+ */
+@Data
+@TableName("ctop_kuaishou_channel")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_channel对象", description = "渠道号信息表")
+public class KuaishouChannel {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 策略ID
+     */
+    private Long strategyId;
+    /**
+     * 项目id
+     */
+    @Excel(name = "项目id", width = 15)
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+    /**
+     * 产品ID
+     */
+    private Long productId;
+    /**
+     * 项目名称
+     */
+    @Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+    /**
+     * 产品名
+     */
+    @Excel(name = "产品名", width = 15)
+    @ApiModelProperty(value = "产品名")
+    private String productName;
+    /**
+     * 账户id
+     */
+    @Excel(name = "账户id", width = 15)
+    @ApiModelProperty(value = "账户id")
+    private Long accountId;
+    /**
+     * 创建方式 1-批量,2-excel导入,3-自定义
+     */
+    @Excel(name = "创建方式 1-批量,2-excel导入,3-自定义", width = 15)
+    @ApiModelProperty(value = "创建方式 1-批量,2-excel导入,3-自定义")
+    private Integer createType;
+
+    /**
+     * 状态 0无效,1有效
+     */
+    private Integer state;
+
+    /**
+     * 使用范围,1账户,2项目
+     */
+    private Integer usageRange;
+
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String userId;
+    /**
+     * 创建日期
+     */
+    @Excel(name = "创建日期", width = 15)
+    @ApiModelProperty(value = "创建日期")
+    private String stateDate;
+    /**
+     * 应用id
+     */
+    @Excel(name = "应用id", width = 15)
+    @ApiModelProperty(value = "应用id")
+    private Long appId;
+
+    /**
+     * 应用记录id
+     */
+    private Long channelAppInfoId;
+    /**
+     * 渠道号
+     */
+    @Excel(name = "渠道号", width = 15)
+    @ApiModelProperty(value = "渠道号")
+    private String channelCode;
+    /**
+     * 编号
+     */
+    private Long channelNumber;
+    /**
+     * 渠道名称
+     */
+    @Excel(name = "渠道名称", width = 15)
+    @ApiModelProperty(value = "渠道名称")
+    private String channelName;
+    /**
+     * 下载链接
+     */
+    @Excel(name = "下载链接", width = 15)
+    @ApiModelProperty(value = "下载链接")
+    private String url;
+    /**
+     * 调起链接
+     */
+    @Excel(name = "调起链接", width = 15)
+    @ApiModelProperty(value = "调起链接")
+    private String schemaUri;
+    /**
+     * 第三方点击检测链接
+     */
+    @Excel(name = "第三方点击检测链接", width = 15)
+    @ApiModelProperty(value = "第三方点击检测链接")
+    private String clickTrackUrl;
+    /**
+     * 第三方点击按钮监测链接
+     */
+    @Excel(name = "第三方点击按钮监测链接", width = 15)
+    @ApiModelProperty(value = "第三方点击按钮监测链接")
+    private String actionbarClickUrl;
+    /**
+     * 是否关联单品 0:否,1:是
+     */
+    @Excel(name = "是否关联单品 0:否,1:是", width = 15)
+    @ApiModelProperty(value = "是否关联单品 0:否,1:是")
+    private Integer isHaveItem;
+    /**
+     * 使用范围层级,账户:account,计划:plan,组:group
+     */
+    @Excel(name = "使用范围层级,账户:account,计划:plan,组:group", width = 15)
+    @ApiModelProperty(value = "使用范围层级,账户:account,计划:plan,组:group")
+    private String usageLevel;
+    /**
+     * 已使用次数
+     */
+    @Excel(name = "已使用次数", width = 15)
+    @ApiModelProperty(value = "已使用次数")
+    private Integer usageTimes;
+    /**
+     * 是否循环重复使用 0:否,1:是
+     */
+    @Excel(name = "是否循环重复使用 0:否,1:是", width = 15)
+    @ApiModelProperty(value = "是否循环重复使用 0:否,1:是")
+    private Integer isCycle;
+    /**
+     * 可循环次数
+     */
+    @Excel(name = "可循环次数", width = 15)
+    @ApiModelProperty(value = "可循环次数")
+    private Integer cycleTimes;
+    /**
+     * 已循环次数
+     */
+    @Excel(name = "已循环次数", width = 15)
+    @ApiModelProperty(value = "已循环次数")
+    private Integer haveCycleTimes;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+
+    @TableField(exist = false)
+    private String itemName;
+
+    @TableField(exist = false)
+    private List<KuaishouChannelItems> items;
+}

+ 135 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannelAppInfo.java

@@ -0,0 +1,135 @@
+package cn.com.ctop.kuaishou.modules.channel.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 2021-09-02
+ */
+@Data
+@TableName("ctop_kuaishou_channel_app_info")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_channel_app_info对象", description = "渠道功能创建的应用记录")
+public class KuaishouChannelAppInfo {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 账户id
+     */
+    @Excel(name = "账户id", width = 15)
+    @ApiModelProperty(value = "账户id")
+    private Long accountId;
+    /**
+     * 应用标记
+     */
+    @Excel(name = "应用标记", width = 15)
+    @ApiModelProperty(value = "应用标记")
+    private String appVersion;
+    /**
+     * 应用名称
+     */
+    @Excel(name = "应用名称", width = 15)
+    @ApiModelProperty(value = "应用名称")
+    private String appName;
+    /**
+     * 操作类型,add新增,update修改
+     */
+    private String type;
+    /**
+     * 应用包名
+     */
+    @Excel(name = "应用包名	", width = 15)
+    @ApiModelProperty(value = "应用包名	")
+    private String packageName;
+    /**
+     * 应用类型 1:Android应用下载,2:Android网页游戏,3:iOS应用下载,4:iOS网页游戏
+     */
+    @Excel(name = "应用类型 1:Android应用下载,2:Android网页游戏,3:iOS应用下载,4:iOS网页游戏", width = 15)
+    @ApiModelProperty(value = "应用类型 1:Android应用下载,2:Android网页游戏,3:iOS应用下载,4:iOS网页游戏")
+    private Integer platform;
+    /**
+     * 应用下载地址/网页游戏链接地址
+     */
+    @Excel(name = "应用下载地址/网页游戏链接地址	", width = 15)
+    @ApiModelProperty(value = "应用下载地址/网页游戏链接地址	")
+    private String url;
+    /**
+     * 是否接入快手广告监测SDK	 0:未接入,1:已接入
+     */
+    @Excel(name = "是否接入快手广告监测SDK	 0:未接入,1:已接入", width = 15)
+    @ApiModelProperty(value = "是否接入快手广告监测SDK	 0:未接入,1:已接入")
+    private Integer useSdk;
+    /**
+     * app隐私政策链接 安卓类应用必填
+     */
+    @Excel(name = "app隐私政策链接 安卓类应用必填", width = 15)
+    @ApiModelProperty(value = "app隐私政策链接 安卓类应用必填")
+    private String appPrivacyUrl;
+    /**
+     * 图标
+     */
+    @Excel(name = "图标", width = 15)
+    @ApiModelProperty(value = "图标")
+    private String imageToken;
+    /**
+     * 应用图标链接地址
+     */
+    @Excel(name = "应用图标链接地址", width = 15)
+    @ApiModelProperty(value = "应用图标链接地址")
+    private String appIconUrl;
+    /**
+     * 状态 0 待创建  1 创建中 2 创建成功 3 创建失败
+     */
+    @Excel(name = "状态 1 创建成功, 0 创建失败", width = 15)
+    @ApiModelProperty(value = "状态 1 创建成功, 0 创建失败")
+    private Integer state;
+    /**
+     * 备注
+     */
+    @Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+    /**
+     * app_id
+     */
+    @Excel(name = "app_id", width = 15)
+    @ApiModelProperty(value = "app_id")
+    private Long appId;
+    /**
+     * 创建时间
+     */
+    @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;
+}

+ 210 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannelCreateStrategy.java

@@ -0,0 +1,210 @@
+package cn.com.ctop.kuaishou.modules.channel.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 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 2021-09-01
+ */
+@Data
+@TableName("ctop_kuaishou_channel_create_strategy")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_channel_create_strategy对象", description = "渠道号创建策略表")
+public class KuaishouChannelCreateStrategy {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 使用范围,1账户,2项目
+     */
+    @Excel(name = "使用范围,1账户,2项目", width = 15)
+    @ApiModelProperty(value = "使用范围,1账户,2项目")
+    private Integer usageRange;
+    /**
+     * 使用范围层级,账户:account,计划:plan,组:group
+     */
+    @Excel(name = "使用范围层级,账户:account,计划:plan,组:group", width = 15)
+    @ApiModelProperty(value = "使用范围层级,账户:account,计划:plan,组:group")
+    private String usageLevel;
+    /**
+     * 产品id
+     */
+    @Excel(name = "产品id", width = 15)
+    @ApiModelProperty(value = "产品id")
+    private Long productId;
+    /**
+     * 项目id
+     */
+    @Excel(name = "项目id", width = 15)
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+    /**
+     * 账户id
+     */
+    @Excel(name = "账户id", width = 15)
+    @ApiModelProperty(value = "账户id")
+    private Long accountId;
+    /**
+     * 创建方式 1-批量,2-excel导入,3-自定义
+     */
+    @Excel(name = "创建方式 1-批量,2-excel导入,3-自定义", width = 15)
+    @ApiModelProperty(value = "创建方式 1-批量,2-excel导入,3-自定义")
+    private Integer createType;
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String userId;
+    /**
+     * 创建日期
+     */
+    @Excel(name = "创建日期", width = 15)
+    @ApiModelProperty(value = "创建日期")
+    private String stateDate;
+    /**
+     * 编号长度
+     */
+    @Excel(name = "编号长度", width = 15)
+    @ApiModelProperty(value = "编号长度")
+    private Integer numberLength;
+    /**
+     * 编号最小值
+     */
+    @Excel(name = "编号最小值", width = 15)
+    @ApiModelProperty(value = "编号最小值")
+    private Integer numberMin;
+    /**
+     * 编号最大值
+     */
+    @Excel(name = "编号最大值", width = 15)
+    @ApiModelProperty(value = "编号最大值")
+    private Integer numberMax;
+    /**
+     * 渠道号
+     */
+    @Excel(name = "渠道号", width = 15)
+    @ApiModelProperty(value = "渠道号")
+    private String channelCode;
+    /**
+     * 渠道名称
+     */
+    @Excel(name = "渠道名称", width = 15)
+    @ApiModelProperty(value = "渠道名称")
+    private String channelName;
+    /**
+     * 下载链接
+     */
+    @Excel(name = "下载链接", width = 15)
+    @ApiModelProperty(value = "下载链接")
+    private String url;
+    /**
+     * 调起链接
+     */
+    @Excel(name = "调起链接", width = 15)
+    @ApiModelProperty(value = "调起链接")
+    private String schemaUri;
+    /**
+     * 第三方点击检测链接
+     */
+    @Excel(name = "第三方点击检测链接", width = 15)
+    @ApiModelProperty(value = "第三方点击检测链接")
+    private String clickTrackUrl;
+    /**
+     * 第三方点击按钮监测链接
+     */
+    @Excel(name = "第三方点击按钮监测链接", width = 15)
+    @ApiModelProperty(value = "第三方点击按钮监测链接")
+    private String actionbarClickUrl;
+    /**
+     * 是否关联单品 0:否,1:是
+     */
+    @Excel(name = "是否关联单品 0:否,1:是", width = 15)
+    @ApiModelProperty(value = "是否关联单品 0:否,1:是")
+    private Integer isHaveItem;
+    /**
+     * 是否循环重复使用 0:否,1:是
+     */
+    @Excel(name = "是否循环重复使用 0:否,1:是", width = 15)
+    @ApiModelProperty(value = "是否循环重复使用 0:否,1:是")
+    private Integer isCycle;
+    /**
+     * 可循环次数
+     */
+    @Excel(name = "可循环次数", width = 15)
+    @ApiModelProperty(value = "可循环次数")
+    private Integer cycleTimes;
+    /**
+     * 应用标记
+     */
+    @Excel(name = "应用标记", width = 15)
+    @ApiModelProperty(value = "应用标记")
+    private String appVersion;
+    /**
+     * 应用包名
+     */
+    @Excel(name = "应用包名", width = 15)
+    @ApiModelProperty(value = "应用包名")
+    private String packageName;
+    /**
+     * 应用名称
+     */
+    @Excel(name = "应用名称", width = 15)
+    @ApiModelProperty(value = "应用名称")
+    private String appName;
+    /**
+     * 应用图标链接地址
+     */
+    @Excel(name = "应用图标链接地址", width = 15)
+    @ApiModelProperty(value = "应用图标链接地址")
+    private String appIconUrl;
+    /**
+     * 安卓类应用必填 隐私政策链接
+     */
+    private String appPrivacyUrl;
+    /**
+     * 图片MD5标识
+     */
+    @Excel(name = "图片MD5标识", width = 15)
+    @ApiModelProperty(value = "图片MD5标识")
+    private String imageToken;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+
+    @TableField(exist = false)
+    private Long appId;
+
+    @TableField(exist = false)
+    private Long channelAppInfoId;
+
+    @TableField(exist = false)
+    private String itemName;
+
+}

+ 93 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannelItems.java

@@ -0,0 +1,93 @@
+package cn.com.ctop.kuaishou.modules.channel.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * 渠道号对应单品信息表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2021-08-30
+ */
+@Data
+@TableName("ctop_kuaishou_channel_items")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_channel_items对象", description = "渠道号对应单品信息表")
+public class KuaishouChannelItems {
+
+    /**
+     * 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;
+
+    private Integer state;
+    /**
+     * 渠道号
+     */
+    @Excel(name = "渠道号", width = 15)
+    @ApiModelProperty(value = "渠道号")
+    private String channelCode;
+    /**
+     * 单品名称
+     */
+    @Excel(name = "单品名称", width = 15)
+    @ApiModelProperty(value = "单品名称")
+    private String itemName;
+    /**
+     * 素材关键词
+     */
+    @Excel(name = "素材关键词", width = 15)
+    @ApiModelProperty(value = "素材关键词")
+    private String keyword;
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String userId;
+    /**
+     * 日期
+     */
+    @Excel(name = "日期", width = 15)
+    @ApiModelProperty(value = "日期")
+    private String stateDate;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 57 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannelItemsRel.java

@@ -0,0 +1,57 @@
+package cn.com.ctop.kuaishou.modules.channel.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 2021-09-06
+ */
+@Data
+@TableName("ctop_kuaishou_channel_items_rel")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_channel_items_rel对象", description = "渠道号和单品关系表")
+public class KuaishouChannelItemsRel {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 渠道id
+     */
+    @Excel(name = "渠道id", width = 15)
+    @ApiModelProperty(value = "渠道id")
+    private Long channelId;
+    /**
+     * 单品id
+     */
+    @Excel(name = "单品id", width = 15)
+    @ApiModelProperty(value = "单品id")
+    private Long itemId;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 77 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/entity/KuaishouChannelRel.java

@@ -0,0 +1,77 @@
+package cn.com.ctop.kuaishou.modules.channel.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 2021-09-06
+ */
+@Data
+@TableName("ctop_kuaishou_channel_rel")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_channel_rel对象", description = "渠道号绑定关系表")
+public class KuaishouChannelRel {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 渠道id
+     */
+    @Excel(name = "渠道编码", width = 15)
+    @ApiModelProperty(value = "渠道id")
+    private String channelCode;
+    /**
+     * 项目id
+     */
+    @Excel(name = "项目id", width = 15)
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+    /**
+     * 账户id
+     */
+    @Excel(name = "账户id", width = 15)
+    @ApiModelProperty(value = "账户id")
+    private Long accountId;
+
+    private Long appId;
+    /**
+     * 计划ID
+     */
+    @Excel(name = "计划ID", width = 15)
+    @ApiModelProperty(value = "计划ID")
+    private Long campaignId;
+    /**
+     * 组id
+     */
+    @Excel(name = "组id", width = 15)
+    @ApiModelProperty(value = "组id")
+    private Long unitId;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 17 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelAppInfoMapper.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.kuaishou.modules.channel.mapper;
+
+import java.util.List;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelAppInfo;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 渠道功能创建的应用记录
+ * @author jeecg-boot
+ * 2021-09-02
+ * @version V1.0
+ */
+public interface KuaishouChannelAppInfoMapper extends BaseMapper<KuaishouChannelAppInfo> {
+
+}

+ 20 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelCreateStrategyMapper.java

@@ -0,0 +1,20 @@
+package cn.com.ctop.kuaishou.modules.channel.mapper;
+
+import java.util.List;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelCreateStrategy;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 渠道号创建策略表
+ * @author jeecg-boot
+ * 2021-09-01
+ * @version V1.0
+ */
+public interface KuaishouChannelCreateStrategyMapper extends BaseMapper<KuaishouChannelCreateStrategy> {
+
+    List<KuaishouChannelCreateStrategy> queryChannelStrategyByAccountId(@Param("accountId") Long accountId);
+
+    List<KuaishouChannelCreateStrategy> queryChannelStrategyByProjectId(@Param("accountId") Long accountId);
+}

+ 28 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelItemsMapper.java

@@ -0,0 +1,28 @@
+package cn.com.ctop.kuaishou.modules.channel.mapper;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelItems;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 渠道号对应单品信息表
+ *
+ * @author jeecg-boot
+ * 2021-08-30
+ * @version V1.0
+ */
+public interface KuaishouChannelItemsMapper extends BaseMapper<KuaishouChannelItems> {
+
+    void replaceBatch(@Param("itemList") List<KuaishouChannelItems> itemList);
+
+    List<JSONObject> queryChannelItemList(KuaishouChannelItems kuaishouChannelItems);
+
+    List<JSONObject> queryAllChannelItemByProjectId(@Param("projectId") Long projectId);
+
+    KuaishouChannelItems queryByProjectIdAndName(@Param("projectId") Long projectId, @Param("itemName") String itemName);
+
+    List<KuaishouChannelItems> queryItemsByChannelCode(@Param("projectId") Long projectId,@Param("channelCode") String channelCode);
+}

+ 15 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelItemsRelMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.kuaishou.modules.channel.mapper;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelItemsRel;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 渠道号和单品关系表
+ *
+ * @author jeecg-boot
+ * 2021-09-06
+ * @version V1.0
+ */
+public interface KuaishouChannelItemsRelMapper extends BaseMapper<KuaishouChannelItemsRel> {
+
+}

+ 41 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelMapper.java

@@ -0,0 +1,41 @@
+package cn.com.ctop.kuaishou.modules.channel.mapper;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannel;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 渠道号信息表
+ *
+ * @author jeecg-boot
+ * 2021-08-30
+ * @version V1.0
+ */
+public interface KuaishouChannelMapper extends BaseMapper<KuaishouChannel> {
+
+    List<JSONObject> channelManagementHome(@Param("productId") Long productId, @Param("projectId") Long projectId, @Param("accountId") Long accountId);
+
+    Long channelNumberDetailsTotal(KuaishouChannel kuaishouChannel);
+
+    List<KuaishouChannel> channelNumberDetails(KuaishouChannel kuaishouChannel);
+
+    Long channelNumberUsageDetailsListTotal(KuaishouChannel kuaishouChannel);
+
+    List<JSONObject> channelNumberUsageDetailsList(KuaishouChannel kuaishouChannel);
+
+    List<JSONObject> channelNumberBindingItemInfo(@Param("request") JSONArray request);
+
+    List<KuaishouChannel> queryFollowOrder(@Param("accountId") Long accountId, @Param("usedId") Long usedId, @Param("usageRange") Integer usageRange);
+
+    KuaishouChannel queryByAccountId(@Param("accountId") Long accountId);
+
+    List<KuaishouChannel> queryMaxChannelNumber(@Param("strategyId") Long strategyId);
+
+    Integer queryUsedChannelNumber(@Param("strategyId") Long strategyId);
+
+    List<KuaishouChannel> queryByAccountIdLevel(@Param("accountId") Long accountId, @Param("usageLevel") String usageLevel);
+}

+ 18 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/KuaishouChannelRelMapper.java

@@ -0,0 +1,18 @@
+package cn.com.ctop.kuaishou.modules.channel.mapper;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelRel;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 渠道号绑定关系表
+ *
+ * @author jeecg-boot
+ * 2021-09-06
+ * @version V1.0
+ */
+public interface KuaishouChannelRelMapper extends BaseMapper<KuaishouChannelRel> {
+
+    KuaishouChannelRel queryByAccountChannelCode(@Param("channelCode") String channelCode, @Param("accountId") Long accountId);
+
+}

+ 5 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelAppInfoMapper.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.kuaishou.modules.channel.mapper.KuaishouChannelAppInfoMapper">
+
+</mapper>

+ 25 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelCreateStrategyMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.ctop.kuaishou.modules.channel.mapper.KuaishouChannelCreateStrategyMapper">
+
+    <select id="queryChannelStrategyByAccountId" resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelCreateStrategy">
+        SELECT
+            *
+        FROM
+            ctop_kuaishou_channel_create_strategy
+        WHERE
+            account_id =#{accountId}
+        ORDER BY
+            create_time
+    </select>
+    <select id="queryChannelStrategyByProjectId" resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelCreateStrategy">
+        SELECT
+            *
+        FROM
+            ctop_kuaishou_channel_create_strategy
+        WHERE
+                project_id = ( SELECT project_id FROM ctop_user_allocation WHERE account_id = #{accountId} )
+        ORDER BY
+            create_time
+    </select>
+</mapper>

+ 86 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelItemsMapper.xml

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.ctop.kuaishou.modules.channel.mapper.KuaishouChannelItemsMapper">
+
+
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_channel_items (
+        id,
+        project_id,
+        project_name,
+        state,
+        item_name,
+        keyword,
+        user_id,
+        state_date
+        )
+        values
+        <foreach collection="itemList" item="item" separator=",">
+            (
+            #{item.id},
+            #{item.projectId},
+            #{item.projectName},
+            #{item.state},
+            #{item.itemName},
+            #{item.keyword},
+            #{item.userId},
+            #{item.stateDate}
+            )
+        </foreach>
+    </insert>
+
+    <select id="queryChannelItemList" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        id,
+        project_id,
+        project_name,
+        item_name,
+        keyword,
+        state,
+        create_time
+        FROM ctop_kuaishou_channel_items
+        <where>
+            <if test="projectId != null">
+                and project_id = #{projectId}
+            </if>
+            <if test="itemName != null">
+                AND LOCATE(#{itemName},item_name)
+            </if>
+            <if test="keyword != null">
+                AND LOCATE(#{keyword},keyword)
+            </if>
+            <if test="state != null">
+                AND state = #{state}
+            </if>
+        </where>
+        ORDER BY create_time DESC
+    </select>
+
+    <select id="queryAllChannelItemByProjectId" resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelItems">
+        SELECT
+        id,
+        item_name,
+        keyword
+        FROM ctop_kuaishou_channel_items
+        WHERE project_id = #{projectId}
+        AND state = 1
+        ORDER BY create_time DESC
+    </select>
+
+    <select id="queryByProjectIdAndName" resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelItems">
+        SELECT item_name
+        FROM ctop_kuaishou_channel_items
+        WHERE project_id = #{projectId}
+        AND item_name = #{itemName}
+        limit 1
+    </select>
+
+    <select id="queryItemsByChannelCode" resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelItems">
+        SELECT item_name,project_id,project_name,state,keyword
+        FROM ctop_kuaishou_channel_items
+        WHERE project_id = #{projectId}
+        AND channel_code = #{channelCode}
+    </select>
+
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelItemsRelMapper.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.kuaishou.modules.channel.mapper.KuaishouChannelItemsRelMapper">
+
+</mapper>

+ 183 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelMapper.xml

@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.ctop.kuaishou.modules.channel.mapper.KuaishouChannelMapper">
+
+    <select id="channelManagementHome" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT * FROM (
+        SELECT
+        IFNULL(t1.product_name, '')as 'productName',
+        IFNULL(t1.project_name, '')as 'projectName',
+        IFNULL(t1.account_id, '')as 'accountId',
+        IFNULL(t1.project_id, '')as 'projectId',
+        IFNULL(t2.realname, '')as 'realname',
+        MAX(t1.state_date) as 'stateDate',
+        IFNULL(t1.create_type, '') as 'createType',
+        t1.create_time
+        FROM ctop_kuaishou_channel t1
+        LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+        where account_id is not null
+
+        <if test="projectId != null">
+            and project_id = #{projectId}
+        </if>
+        <if test="productId != null">
+            and product_id = #{productId}
+        </if>
+        <if test="accountId != null">
+            and account_id= #{accountId}
+        </if>
+        GROUP BY account_id
+        UNION ALL
+        SELECT
+        IFNULL(t1.product_name, '')as 'productName',
+        IFNULL(t1.project_name, '')as 'projectName',
+        IFNULL(t1.account_id, '')as 'accountId',
+        IFNULL(t1.project_id, '')as 'projectId',
+        IFNULL(t2.realname, '')as 'realname',
+        MAX(t1.state_date) as 'stateDate',
+        IFNULL(t1.create_type, '') as 'createType',
+        t1.create_time
+        FROM ctop_kuaishou_channel t1
+        LEFT JOIN sys_user t2 ON t1.user_id = t2.id
+        where account_id is null
+        <if test="projectId != null">
+            and project_id = #{projectId}
+        </if>
+        <if test="productId != null">
+            and product_id = #{productId}
+        </if>
+        <if test="accountId != null">
+            and account_id= #{accountId}
+        </if>
+        GROUP BY project_id
+        ) t
+        ORDER BY t.create_time DESC
+    </select>
+
+    <select id="channelNumberDetailsTotal" resultType="java.lang.Long">
+        SELECT IFNULL(SUM(1), 0)
+        FROM ctop_kuaishou_channel
+        <where>
+            <if test="accountId != null">
+                AND account_id = #{accountId}
+            </if>
+            <if test="projectId != null">
+                AND project_id = #{projectId}
+            </if>
+            <if test="createType != null">
+                AND create_type = #{createType}
+            </if>
+            <if test="channelName != null">
+                AND LOCATE(#{channelName},t1.channel_name)
+            </if>
+            <if test="channelCode != null">
+                AND LOCATE(#{channelCode},t1.channel_code)
+            </if>
+        </where>
+    </select>
+
+    <select id="channelNumberDetails" resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannel">
+        SELECT t1.*
+        FROM ctop_kuaishou_channel t1
+        <where>
+            <if test="accountId != null">
+                AND t1.account_id = #{accountId}
+            </if>
+            <if test="projectId != null">
+                AND t1.project_id = #{projectId}
+            </if>
+            <if test="createType != null">
+                AND create_type = #{createType}
+            </if>
+            <if test="channelName != null">
+                AND LOCATE(#{channelName},t1.channel_name)
+            </if>
+            <if test="channelCode != null">
+                AND LOCATE(#{channelCode},t1.channel_code)
+            </if>
+        </where>
+    </select>
+
+    <select id="channelNumberUsageDetailsListTotal" resultType="java.lang.Long">
+        SELECT IFNULL(SUM(1), 0)
+        FROM ctop_kuaishou_channel
+        WHERE account_id = #{accountId}
+          AND channel_code = #{channelCode}
+    </select>
+
+    <select id="channelNumberUsageDetailsList" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT (SELECT MAX(tt.create_time)
+                FROM ctop_kuaishou_creative tt
+                WHERE tt.unit_id = t1.unit_id) as 'createTime', CASE t1.usage_range WHEN 1 THEN '账户' WHEN 2 THEN '项目' ELSE '' END as 'usageRange', IFNULL(t1.channel_code, '') as 'channelCode', IFNULL(t1.project_name, '') as 'projectName', IFNULL(t2.auth_name, '') as 'authName', IFNULL(t1.account_id, '') as 'accountId', IFNULL(t1.campaign_id, '') as 'campaignId', IFNULL(t1.unit_id, '') as 'unitId'
+        FROM ctop_kuaishou_channel t1
+                 LEFT JOIN ctop_user_allocation t2 ON t1.account_id = t2.account_id
+        WHERE t1.account_id = #{accountId}
+          AND t1.channel_code = #{channelCode}
+    </select>
+
+    <select id="channelNumberBindingItemInfo" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.id,
+        IFNULL(t1.product_name, '')as 'productName',
+        IFNULL(t1.project_name, '')as 'projectName',
+        IFNULL(t1.project_Id, '')as 'project_Id',
+        IFNULL(t1.channel_code, '') as 'channelCode',
+        IFNULL(t1.channel_name, '') as 'channelName'
+        FROM ctop_kuaishou_channel t1
+        WHERE t1.id IN
+        <foreach collection="request" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+
+
+    <select id="queryFollowOrder" resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannel">
+        SELECT id,
+               channel_code,
+               usage_level,
+               usage_range,
+               usage_times
+        FROM `ctop_kuaishou_channel`
+        WHERE account_id = #{accountId}
+          AND state = 1
+          AND usage_times &lt; cycle_times
+          AND id > #{usedId}
+          AND usage_range = #{usageRange}
+        ORDER BY channel_code, channel_number limit 10
+
+    </select>
+
+    <select id="queryByAccountId" resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannel">
+        SELECT id,
+               channel_code,
+               usage_level,
+               usage_range
+        FROM `ctop_kuaishou_channel`
+        WHERE account_id = #{accountId}
+        ORDER BY usage_range limit 1
+    </select>
+
+    <select id="queryMaxChannelNumber" resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannel">
+        SELECT have_cycle_times, max(channel_number) as channel_number
+        FROM `ctop_kuaishou_channel`
+        where strategy_id = #{strategyId}
+        group by have_cycle_times
+    </select>
+
+    <select id="queryUsedChannelNumber" resultType="java.lang.Integer">
+        SELECT count(1)
+        from `ctop_kuaishou_channel`
+        where strategy_id = #{strategyId}
+    </select>
+
+    <select id="queryByAccountIdLevel" resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannel">
+        SELECT id,
+               channel_code,
+               usage_level,
+               usage_range
+        FROM `ctop_kuaishou_channel`
+        WHERE account_id = #{accountId}
+        and usage_level = #{usageLevel}
+    </select>
+
+</mapper>

+ 12 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/mapper/xml/KuaishouChannelRelMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.ctop.kuaishou.modules.channel.mapper.KuaishouChannelRelMapper">
+
+    <select id="queryByAccountChannelCode"
+            resultType="cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelCreateStrategy">
+        SELECT *
+        FROM ctop_kuaishou_channel_rel
+        WHERE account_id = #{accountId}
+          AND channel_code = #{channelCode} limit 1
+    </select>
+</mapper>

+ 15 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelAppInfoService.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.kuaishou.modules.channel.service;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelAppInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 渠道功能创建的应用记录
+ *
+ * @author jeecg-boot
+ * 2021-09-02
+ * @version V1.0
+ */
+public interface IKuaishouChannelAppInfoService extends IService<KuaishouChannelAppInfo> {
+
+}

+ 20 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelCreateStrategyService.java

@@ -0,0 +1,20 @@
+package cn.com.ctop.kuaishou.modules.channel.service;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelCreateStrategy;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 渠道号创建策略表
+ *
+ * @author jeecg-boot
+ * 2021-09-01
+ * @version V1.0
+ */
+public interface IKuaishouChannelCreateStrategyService extends IService<KuaishouChannelCreateStrategy> {
+
+    List<KuaishouChannelCreateStrategy> queryChannelStrategyByAccountId(Long accountId);
+
+    List<KuaishouChannelCreateStrategy> queryChannelStrategyByProjectId(Long accountId);
+}

+ 15 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelItemsRelService.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.kuaishou.modules.channel.service;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelItemsRel;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 渠道号和单品关系表
+ *
+ * @author jeecg-boot
+ * 2021-09-06
+ * @version V1.0
+ */
+public interface IKuaishouChannelItemsRelService extends IService<KuaishouChannelItemsRel> {
+
+}

+ 33 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelItemsService.java

@@ -0,0 +1,33 @@
+package cn.com.ctop.kuaishou.modules.channel.service;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelItems;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 渠道号对应单品信息表
+ *
+ * @author jeecg-boot
+ * 2021-08-30
+ * @version V1.0
+ */
+public interface IKuaishouChannelItemsService extends IService<KuaishouChannelItems> {
+
+    Result<Object> queryChannelItemList(KuaishouChannelItems kuaishouChannelItems);
+
+    Result<Object> queryAllChannelItemByProjectId(Long projectId);
+
+    Result<Object> addChannelItem(JSONArray request);
+
+    Result<Object> channelBindingItem(JSONArray request);
+
+    Result<Object> importItemExcel(MultipartFile file) throws Exception;
+
+    List<KuaishouChannelItems> queryItemsByChannelCode(Long projectId, String channelCode);
+}

+ 16 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelRelService.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.kuaishou.modules.channel.service;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelRel;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 渠道号绑定关系表
+ *
+ * @author jeecg-boot
+ * 2021-09-06
+ * @version V1.0
+ */
+public interface IKuaishouChannelRelService extends IService<KuaishouChannelRel> {
+
+    KuaishouChannelRel queryByAccountChannelCode(String channelCode, Long accountId);
+}

+ 33 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/IKuaishouChannelService.java

@@ -0,0 +1,33 @@
+package cn.com.ctop.kuaishou.modules.channel.service;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannel;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 渠道号信息表
+ * @author jeecg-boot
+ * 2021-08-30
+ * @version V1.0
+ */
+public interface IKuaishouChannelService extends IService<KuaishouChannel> {
+
+    Result<Object> channelManagementHome(Long productId, Long projectId, Long accountId);
+
+    Result<Object> channelNumberDetails(KuaishouChannel kuaishouCha, Integer pageNo, Integer pageSizennel);
+
+    Result<Object> channelNumberUsageDetailsList(KuaishouChannel kuaishouChannel, Integer pageNo, Integer pageSize);
+
+    Result<Object> channelNumberBindingItemInfo(JSONArray request);
+
+    Result<Object> importChannelExcel(MultipartFile file, String imageUrl) throws Exception;
+
+    Result<Object> systemBatchCreation(JSONObject request);
+
+    Result<Object> customizedCreate(JSONObject request,Integer createType) throws Exception;
+
+    Result<Object> queryChannel(Long accountId, String usageLevel) throws Exception;
+}

+ 19 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelAppInfoServiceImpl.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.kuaishou.modules.channel.service.impl;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelAppInfo;
+import cn.com.ctop.kuaishou.modules.channel.mapper.KuaishouChannelAppInfoMapper;
+import cn.com.ctop.kuaishou.modules.channel.service.IKuaishouChannelAppInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 渠道功能创建的应用记录
+ *
+ * @author jeecg-boot
+ * 2021-09-02
+ * @version V1.0
+ */
+@Service
+public class KuaishouChannelAppInfoServiceImpl extends ServiceImpl<KuaishouChannelAppInfoMapper, KuaishouChannelAppInfo> implements IKuaishouChannelAppInfoService {
+
+}

+ 35 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelCreateStrategyServiceImpl.java

@@ -0,0 +1,35 @@
+package cn.com.ctop.kuaishou.modules.channel.service.impl;
+
+import cn.com.ctop.common.module.mapper.ProjectMapper;
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelCreateStrategy;
+import cn.com.ctop.kuaishou.modules.channel.mapper.KuaishouChannelCreateStrategyMapper;
+import cn.com.ctop.kuaishou.modules.channel.service.IKuaishouChannelCreateStrategyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 渠道号创建策略表
+ *
+ * @author jeecg-boot
+ * 2021-09-01
+ * @version V1.0
+ */
+@Service
+public class KuaishouChannelCreateStrategyServiceImpl extends ServiceImpl<KuaishouChannelCreateStrategyMapper, KuaishouChannelCreateStrategy> implements IKuaishouChannelCreateStrategyService {
+
+    @Autowired
+    private KuaishouChannelCreateStrategyMapper createStrategyMapper;
+
+    @Override
+    public List<KuaishouChannelCreateStrategy> queryChannelStrategyByAccountId(Long accountId) {
+        return createStrategyMapper.queryChannelStrategyByAccountId(accountId);
+    }
+
+    @Override
+    public List<KuaishouChannelCreateStrategy> queryChannelStrategyByProjectId(Long accountId) {
+        return createStrategyMapper.queryChannelStrategyByProjectId(accountId);
+    }
+}

+ 19 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelItemsRelServiceImpl.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.kuaishou.modules.channel.service.impl;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelItemsRel;
+import cn.com.ctop.kuaishou.modules.channel.mapper.KuaishouChannelItemsRelMapper;
+import cn.com.ctop.kuaishou.modules.channel.service.IKuaishouChannelItemsRelService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 渠道号和单品关系表
+ *
+ * @author jeecg-boot
+ * 2021-09-06
+ * @version V1.0
+ */
+@Service
+public class KuaishouChannelItemsRelServiceImpl extends ServiceImpl<KuaishouChannelItemsRelMapper, KuaishouChannelItemsRel> implements IKuaishouChannelItemsRelService {
+
+}

+ 165 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelItemsServiceImpl.java

@@ -0,0 +1,165 @@
+package cn.com.ctop.kuaishou.modules.channel.service.impl;
+
+import cn.com.ctop.common.module.mapper.ProjectMapper;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.ExportExcelUtils;
+import cn.com.ctop.kuaishou.modules.ai.entity.KuaishouAppPackage;
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelItems;
+import cn.com.ctop.kuaishou.modules.channel.mapper.KuaishouChannelItemsMapper;
+import cn.com.ctop.kuaishou.modules.channel.service.IKuaishouChannelItemsService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageInfo;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.common.util.MD5Util;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 渠道号对应单品信息表
+ *
+ * @author jeecg-boot
+ * 2021-08-30
+ * @version V1.0
+ */
+@Service
+public class KuaishouChannelItemsServiceImpl extends ServiceImpl<KuaishouChannelItemsMapper, KuaishouChannelItems> implements IKuaishouChannelItemsService {
+
+    @Autowired
+    private KuaishouChannelItemsMapper channelItemsMapper;
+
+    @Autowired
+    private ProjectMapper projectMapper;
+
+
+    @Override
+    public Result<Object> queryChannelItemList(KuaishouChannelItems kuaishouChannelItems) {
+        List<JSONObject> list = channelItemsMapper.queryChannelItemList(kuaishouChannelItems);
+        return Result.ok(new PageInfo<>(list));
+    }
+
+    @Override
+    public Result<Object> queryAllChannelItemByProjectId(Long projectId) {
+        List<JSONObject> list = channelItemsMapper.queryAllChannelItemByProjectId(projectId);
+        return Result.ok(list);
+    }
+
+    @Override
+    public Result<Object> addChannelItem(JSONArray request) {
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = null;
+        if (!Check.isNull(sysUser)) {
+            userId = sysUser.getId();
+        }
+        List<KuaishouChannelItems> itemList = new ArrayList<>();
+        for (int i = 0; i < request.size(); i++) {
+            JSONObject jsonObject = request.getJSONObject(i);
+            Long projectId = jsonObject.getLong("projectId");
+            String itemName = jsonObject.getString("itemName");
+            KuaishouChannelItems one = channelItemsMapper.queryByProjectIdAndName(projectId, itemName);
+            if (Check.isNull(one)) {
+                KuaishouChannelItems item = new KuaishouChannelItems();
+                item.setProjectId(projectId);
+                item.setProjectName(projectMapper.getNameByProjectId(projectId));
+                item.setState(1);
+                item.setItemName(itemName);
+                item.setKeyword(jsonObject.getString("keyword"));
+                item.setStateDate(DateUtils.getNowDate("yyyy-MM-dd"));
+                item.setUserId(userId);
+                itemList.add(item);
+            }
+        }
+        if (!itemList.isEmpty()) {
+            channelItemsMapper.replaceBatch(itemList);
+        }
+        return Result.ok("添加成功");
+    }
+
+    @Override
+    public Result<Object> channelBindingItem(JSONArray request) {
+        for (int i = 0; i < request.size(); i++) {
+            JSONObject object = request.getJSONObject(i);
+            KuaishouChannelItems item = new KuaishouChannelItems();
+            item.setId(object.getLong("id"));
+            item.setChannelCode(object.getString("channelCode"));
+            this.updateById(item);
+        }
+        return Result.ok("绑定成功");
+    }
+
+    @Override
+    public Result<Object> importItemExcel(MultipartFile file) throws Exception {
+        JSONObject returnJson = new JSONObject();
+        Workbook workbook = null;
+        String fileName = file.getOriginalFilename();
+        String substring = fileName.substring(fileName.lastIndexOf(".") + 1).toUpperCase();
+        if ("XLS".equals(substring)) {
+            workbook = new HSSFWorkbook(file.getInputStream());
+        } else if ("XLSX".equals(substring)) {
+            workbook = new XSSFWorkbook(file.getInputStream());
+        } else {
+            throw new Exception("文件不是Excel文件");
+        }
+        Sheet sheet = workbook.getSheet("Sheet1");
+        if (Check.isNull(sheet)) {
+            throw new Exception("Sheet标题不是默认的Sheet1");
+        }
+        int rows = sheet.getLastRowNum();// 指的行数,一共有多少行+
+        if (rows == 0) {
+            throw new Exception("请填写数据");
+        }
+        ExportExcelUtils eeu = new ExportExcelUtils();
+        JSONArray array = new JSONArray();
+        for (int i = 1; i <= rows + 1; i++) {
+            Row row = sheet.getRow(i);
+            if (row != null) {
+                String projectId = eeu.getCellValue(row.getCell(0));
+                String itemName = eeu.getCellValue(row.getCell(1));
+                String keyword = eeu.getCellValue(row.getCell(2));
+                if (Check.isNull(projectId)) {
+                    return Result.error("解析数据失败,文档中项目列缺失数据");
+                } else if (Check.isNull(itemName)) {
+                    return Result.error("解析数据失败,文档中单品名称列缺失数据");
+                } else if (Check.isNull(keyword)) {
+                    return Result.error("解析数据失败,文档中素材关键词列缺失数据");
+                }
+                JSONObject obj = new JSONObject();
+                obj.put("projectId", projectId);
+                obj.put("itemName", itemName);
+                obj.put("keyword", keyword);
+                array.add(obj);
+            }
+        }
+        if (!array.isEmpty()) {
+            addChannelItem(array);
+        }
+        return Result.ok("添加成功");
+    }
+
+    @Override
+    public List<KuaishouChannelItems> queryItemsByChannelCode(Long projectId, String channelCode) {
+        return channelItemsMapper.queryItemsByChannelCode(projectId,  channelCode);
+    }
+
+
+}

+ 26 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelRelServiceImpl.java

@@ -0,0 +1,26 @@
+package cn.com.ctop.kuaishou.modules.channel.service.impl;
+
+import cn.com.ctop.kuaishou.modules.channel.entity.KuaishouChannelRel;
+import cn.com.ctop.kuaishou.modules.channel.mapper.KuaishouChannelRelMapper;
+import cn.com.ctop.kuaishou.modules.channel.service.IKuaishouChannelRelService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 渠道号绑定关系表
+ *
+ * @author jeecg-boot
+ * 2021-09-06
+ * @version V1.0
+ */
+@Service
+public class KuaishouChannelRelServiceImpl extends ServiceImpl<KuaishouChannelRelMapper, KuaishouChannelRel> implements IKuaishouChannelRelService {
+    @Autowired
+    private KuaishouChannelRelMapper channelRelMapper;
+
+    @Override
+    public KuaishouChannelRel queryByAccountChannelCode(String channelCode, Long accountId) {
+        return channelRelMapper.queryByAccountChannelCode(channelCode, accountId);
+    }
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1193 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/channel/service/impl/KuaishouChannelServiceImpl.java