فهرست منبع

Merge branch 'master' of http://git.mokasz.com/marketing/moka-private

leon 5 سال پیش
والد
کامیت
984d12c088

+ 0 - 3
src/main/java/com/mokamrp/privates/config/DataHubConfiguration.java

@@ -28,9 +28,6 @@ public class DataHubConfiguration {
             @Value("${datahub.accessid}") String accessId,
             @Value("${datahub.accesssecret}") String accessKey
     ) {
-        System.out.println("配置文件");
-        System.out.println(accessId);
-        System.out.println(accessKey);
         if (datahubClient == null) {
             synchronized (DataHubConfiguration.class) {
                 if (datahubClient == null) {

+ 0 - 2
src/main/java/com/mokamrp/privates/controller/MenuController.java

@@ -47,8 +47,6 @@ public class MenuController{
         try {
 
             HttpResponse response = http.execute(get);
-            System.out.println("status是xxx");
-            System.out.println(response.getStatusLine().getStatusCode());
 
             if (response.getStatusLine().getStatusCode() == 200) {
                 HttpEntity resEntity = response.getEntity();

+ 63 - 0
src/main/java/com/mokamrp/privates/controller/WorkContactEmployeeController.java

@@ -3,8 +3,10 @@ package com.mokamrp.privates.controller;
 
 import com.mokamrp.privates.constant.HttpStatus;
 import com.mokamrp.privates.entity.GetWorkContactEmployeeHandle;
+import com.mokamrp.privates.entity.HubWorkContactEmployeeHandle;
 import com.mokamrp.privates.entity.JobRedis;
 import com.mokamrp.privates.entity.JobWorkContactEmployeeRedis;
+import com.mokamrp.privates.entity.job.ExportNovelRedis;
 import com.mokamrp.privates.help.AjaxResult;
 import com.mokamrp.privates.interceptor.AuthUser;
 import com.mokamrp.privates.mapper.pojo.Downfile;
@@ -71,6 +73,67 @@ public class WorkContactEmployeeController extends BaseController<WorkContactEmp
         return AjaxResult.success(resMap);
     }
 
+    @RequestMapping("/exportnovel")
+    @ResponseBody
+    public Object export(
+            @AuthUser User authUser,
+            @Valid @RequestBody HubWorkContactEmployeeHandle handle, BindingResult bindingResult) {
+
+        if (bindingResult.hasErrors()) {
+            return AjaxResult.error(HttpStatus.ERROR, bindingResult.getFieldError().getDefaultMessage());
+        }
+
+        List<Integer> corpIds = userCorpService.getAuthUserCorpIds(authUser.getId().toString());
+        if(corpIds.size() <=0){
+            return AjaxResult.error(HttpStatus.ERROR, UserCorpService.USER_MSG);
+        }
+
+        handle.setAuthCorpIds(corpIds);
+
+        //这边开始迭代
+        Downfile downObj = new Downfile();
+        downObj.setMsg(Downfile.DEFAULT_MSG);
+        downObj.setAuthId(Integer.parseInt(authUser.getId().toString()));
+        downObj.setAuthName(authUser.getName());
+
+        downObj.setTitle(Downfile.NOVEL);
+        downfileService.save(downObj);
+
+        JobRedis realJob = new JobRedis();
+        ExportNovelRedis job = new ExportNovelRedis();
+        job.setHandle(handle);
+
+        realJob.setExportNovelRedis(job);
+        realJob.setJobName(ExportNovelRedis.TASK_NAME);
+        realJob.setDownFile(downObj);
+        redisUtil.leftPush(JobRedis.QUEUE_KEY,realJob);
+
+        return AjaxResult.success("正在异步生成请稍后");
+
+    }
+
+    @PostMapping("/hublist")
+    @ResponseBody
+    public Object hubList(
+            @AuthUser User authUser,
+            @Valid @RequestBody HubWorkContactEmployeeHandle handle, BindingResult bindingResult) {
+
+        if (bindingResult.hasErrors()) {
+            return AjaxResult.error(HttpStatus.ERROR, bindingResult.getFieldError().getDefaultMessage());
+        }
+
+        List<Integer> corpIds = userCorpService.getAuthUserCorpIds(authUser.getId().toString());
+
+        if(corpIds.size() <=0){
+            return AjaxResult.error(HttpStatus.ERROR, UserCorpService.USER_MSG);
+        }
+
+        handle.setAuthCorpIds(corpIds);
+        Map<String, Object> resMap = WorkContactEmployeeService.getHubPageList(handle);//所有
+
+        return AjaxResult.success(resMap);
+    }
+
     @RequestMapping("/export")
     @ResponseBody
     public Object export(

+ 24 - 0
src/main/java/com/mokamrp/privates/entity/HubWorkContactEmployeeHandle.java

@@ -0,0 +1,24 @@
+package com.mokamrp.privates.entity;
+
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import java.util.List;
+
+@Data
+public class HubWorkContactEmployeeHandle {
+    @Min(value = 1,message = "页码错误")
+    private Integer pagesize;
+    @Min(value = 1,message = "页码错误")
+    private Integer page;
+    private Integer gender;
+    private Integer status;
+    private String name;
+    private String startCreatedAt;
+    private String endCreatedAt;
+    private Integer corpId;
+    private List<Integer> employeeId;
+    private List<Integer> authCorpIds;
+    private List<String> ghIds;
+    private String platform;
+}

+ 16 - 0
src/main/java/com/mokamrp/privates/entity/JobRedis.java

@@ -1,5 +1,6 @@
 package com.mokamrp.privates.entity;
 
+import com.mokamrp.privates.entity.job.ExportNovelRedis;
 import com.mokamrp.privates.mapper.pojo.Downfile;
 
 import java.io.Serializable;
@@ -12,12 +13,27 @@ public class JobRedis implements Serializable {
 
     private String jobName;
 
+    /*TODO*/
     private JobWorkContactEmployeeRedis jobWorkContactEmployeeRedis;
 
     private JobRoomJobRedis jobRoomJobRedis;
 
     private JobWorkEmployeeJobRedis jobWorkEmployeeJobRedis;
 
+    private ExportNovelRedis exportNovelRedis;
+
+    public ExportNovelRedis getExportNovelRedis() {
+        return exportNovelRedis;
+    }
+
+    public void setExportNovelRedis(ExportNovelRedis exportNovelRedis) {
+        this.exportNovelRedis = exportNovelRedis;
+    }
+
+    public static String getQueueKey() {
+        return QUEUE_KEY;
+    }
+
     public JobWorkEmployeeJobRedis getJobWorkEmployeeJobRedis() {
         return jobWorkEmployeeJobRedis;
     }

+ 20 - 0
src/main/java/com/mokamrp/privates/entity/job/ExportNovelRedis.java

@@ -0,0 +1,20 @@
+package com.mokamrp.privates.entity.job;
+
+import com.mokamrp.privates.entity.GetWorkRoomHandle;
+import com.mokamrp.privates.entity.HubWorkContactEmployeeHandle;
+
+import java.io.Serializable;
+
+public class ExportNovelRedis implements Serializable {
+
+    public final static String TASK_NAME = "NOVEL";
+    private HubWorkContactEmployeeHandle hubWorkContactEmployeeHandle;
+
+    public HubWorkContactEmployeeHandle getHandle() {
+        return hubWorkContactEmployeeHandle;
+    }
+
+    public void setHandle(HubWorkContactEmployeeHandle hubWorkContactEmployeeHandle) {
+        this.hubWorkContactEmployeeHandle = hubWorkContactEmployeeHandle;
+    }
+}

+ 4 - 0
src/main/java/com/mokamrp/privates/mapper/WorkContactEmployeeMapper.java

@@ -26,7 +26,11 @@ public interface WorkContactEmployeeMapper extends BaseMapper<WorkContactEmploye
     List<WorkContactEmployeeVo> getVoList( @Param("ew") QueryWrapper<WorkContactEmployeeVo> queryWrapper,@Param("offset") Integer offset ,@Param("limit") Integer limit);
     List<WorkContactEmployeeVo> getAllVoList(@Param("ew") QueryWrapper<WorkContactEmployeeVo> queryWrapper);
     Integer getVoListTotal(@Param("ew") QueryWrapper<WorkContactEmployeeVo> queryWrapper);
+    Integer getHubListTotal(@Param("ew") QueryWrapper<WorkContactEmployeeVo> queryWrapper);
+    List<WorkContactEmployeeVo> getHubVoList( @Param("ew") QueryWrapper<WorkContactEmployeeVo> queryWrapper,@Param("offset") Integer offset ,@Param("limit") Integer limit);
+    List<WorkContactEmployeeVo> getCronHubVoList( @Param("ew") QueryWrapper<WorkContactEmployeeVo> queryWrapper,@Param("limit") Integer limit);
     List<HashMap<String, Object>> getContactTagList(@Param("ew") QueryWrapper<WorkContactEmployeeVo> queryWrapper);
     void updateChannelCode(@Param("id") Integer id,@Param("codeId") Integer codeId);
     List<WorkContactEmployeeHubVo> getCorpEmployeeContact(@Param("ew") QueryWrapper<WorkContactEmployeeHubVo> queryWrapper);
+    void updateOpenid(@Param("id") Integer id,@Param("label") String label,@Param("platform") String platform,@Param("typer_date") String typer_date);
 }

+ 72 - 0
src/main/java/com/mokamrp/privates/mapper/WorkContactEmployeeMapper.xml

@@ -70,6 +70,76 @@
         where 1 = 1 AND ${ew.sqlSegment}
     </select>
 
+    <select id="getCronHubVoList" resultType="com.mokamrp.privates.mapper.vo.WorkContactEmployeeVo">
+        SELECT
+        a.id,
+        d.ghid as gh_id,
+        d.openid as open_id,
+        d.appid as app_id,
+        p.name as company_name
+        FROM mc_work_contact_employee_openid as d
+        LEFT JOIN mc_work_contact_employee AS a ON a.id = d.id
+        LEFT JOIN mc_corp AS p ON p.id = a.corp_id
+        <where>
+            ${ew.sqlSegment}
+        </where>
+        order by id desc
+        LIMIT #{limit}
+    </select>
+
+    <update id="updateOpenid" >
+        update mc_work_contact_employee_openid
+        set label = #{label} ,platform = #{platform} ,typer_date = #{typer_date}
+        where id = #{id}
+    </update>
+
+
+    <select id="getHubListTotal" resultType="Integer">
+        SELECT
+            count(*)
+        FROM mc_work_contact_employee AS a
+             LEFT JOIN mc_work_employee AS e ON a.employee_id = e.id
+             LEFT JOIN mc_work_contact AS c ON a.contact_id = c.id
+             LEFT JOIN mc_work_contact_employee_openid AS d ON d.id = a.id
+             LEFT JOIN mc_corp AS p ON p.id = a.corp_id
+        <where>
+            ${ew.sqlSegment}
+        </where>
+    </select>
+
+    <select id="getHubVoList" resultType="com.mokamrp.privates.mapper.vo.WorkContactEmployeeVo">
+        SELECT a.id,
+               c.`name`                 AS client_name,
+               c.`wx_external_userid`   AS client_wx_id,
+               a.`employee_id`   AS employee_id,
+               c.gender          AS client_gender,
+               a.`status`        AS client_status,
+               a.channel_code_id as channel_code_id,
+               c.deleted_at      AS client_deleted_at,
+               c.created_at      AS client_created_at,
+               c.unionid         AS client_unionid,
+               e.`name`          AS employee_name,
+               p.`name`          as company_name,
+               a.contact_id,
+               d.platform,
+               d.label as typer_tag,
+               a.state,
+               d.ghid as gh_id,
+               d.openid as open_id,
+               d.appid as app_id,
+               a.remark
+        FROM mc_work_contact_employee AS a
+                 LEFT JOIN mc_work_employee AS e ON a.employee_id = e.id
+                 LEFT JOIN mc_work_contact AS c ON a.contact_id = c.id
+                 LEFT JOIN mc_work_contact_employee_openid AS d ON d.id = a.id
+                 LEFT JOIN mc_corp AS p ON p.id = a.corp_id
+        <where>
+            ${ew.sqlSegment}
+        </where>
+        order by a.id desc
+        LIMIT #{limit} offset #{offset}
+    </select>
+
     <select id="getContactTagList" resultType="Map">
         SELECT
             a.id,
@@ -101,11 +171,13 @@
             b.gender as  external_gender,
             b.corp_name as external_corp_name,
             b.corp_full_name as external_corp_full_name,
+            d.wx_corpid as wx_corpid,
             c.wx_user_id as follow_userid
         FROM
             mc_work_contact_employee AS a
         LEFT JOIN mc_work_contact AS b ON a.contact_id = b.id
         LEFT JOIN mc_work_employee AS c ON a.employee_id = c.id
+        LEFT JOIN mc_corp AS d ON d.id = a.corp_id
         <where>
             ${ew.sqlSegment}
         </where>

+ 1 - 0
src/main/java/com/mokamrp/privates/mapper/pojo/Downfile.java

@@ -19,6 +19,7 @@ import java.io.Serializable;
 public class Downfile extends Model<Downfile> {
 
     public static final String WORK_CONTACT_EMPLOYEE = "客户信息下载.csv";
+    public static final String NOVEL = "小说下载.csv";
     public static final String WORM_ROOM = "群数据下载.csv";
     public static final String WORK_EMPLOYEE = "客服数据.csv";
 

+ 13 - 0
src/main/java/com/mokamrp/privates/mapper/vo/WorkContactEmployeeHubVo.java

@@ -27,6 +27,19 @@ public class WorkContactEmployeeHubVo {
     private String followRemarkMobiles;
     private String followAddWay;
     private String followTagId;
+    private String wxCorpid;
+
+    public void setFollowCreateTime(String followCreateTime) {
+        this.followCreateTime = followCreateTime;
+    }
+
+    public String getWxCorpid() {
+        return wxCorpid;
+    }
+
+    public void setWxCorpid(String wxCorpid) {
+        this.wxCorpid = wxCorpid;
+    }
 
     public Integer getId() {
         return id;

+ 57 - 3
src/main/java/com/mokamrp/privates/mapper/vo/WorkContactEmployeeVo.java

@@ -19,7 +19,7 @@ public class WorkContactEmployeeVo {
     private Integer channelCodeId;
     private Date clientDeletedAt;
     private Date clientCreatedAt;
-    private Integer clientUnionid;
+    private String clientUnionid;
     private Integer clientGender;
     private String employeeName;
     private String companyName;
@@ -32,6 +32,60 @@ public class WorkContactEmployeeVo {
     private String tagNames;
     private String tagIds;
     private Integer employeeId;
+    private String typerTag;
+    private String appId;
+    private String ghId;
+    private String openId;
+    private String clientWxId;
+    private String platform;
+
+    public String getGhId() {
+        return ghId;
+    }
+
+    public void setGhId(String ghId) {
+        this.ghId = ghId;
+    }
+
+    public String getPlatform() {
+        return platform;
+    }
+
+    public void setPlatform(String platform) {
+        this.platform = platform;
+    }
+
+    public String getClientWxId() {
+        return clientWxId;
+    }
+
+    public void setClientWxId(String clientWxId) {
+        this.clientWxId = clientWxId;
+    }
+
+    public String getTyperTag() {
+        return typerTag;
+    }
+
+    public void setTyperTag(String typerTag) {
+        this.typerTag = typerTag;
+    }
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
 
     public Integer getClientGender() {
         return clientGender;
@@ -129,11 +183,11 @@ public class WorkContactEmployeeVo {
         this.clientCreatedAt = clientCreatedAt;
     }
 
-    public Integer getClientUnionid() {
+    public String getClientUnionid() {
         return clientUnionid;
     }
 
-    public void setClientUnionid(Integer clientUnionid) {
+    public void setClientUnionid(String clientUnionid) {
         this.clientUnionid = clientUnionid;
     }
 

+ 9 - 0
src/main/java/com/mokamrp/privates/service/WorkContactEmployeeService.java

@@ -2,6 +2,7 @@ package com.mokamrp.privates.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mokamrp.privates.entity.GetWorkContactEmployeeHandle;
+import com.mokamrp.privates.entity.HubWorkContactEmployeeHandle;
 import com.mokamrp.privates.mapper.pojo.Downfile;
 import com.mokamrp.privates.mapper.pojo.WorkContactEmployee;
 import com.mokamrp.privates.mapper.vo.WorkContactEmployeeHubVo;
@@ -21,11 +22,19 @@ public interface WorkContactEmployeeService extends IService<WorkContactEmployee
 
     public Map<String, Object> getPageList(GetWorkContactEmployeeHandle handle);
 
+    public Map<String, Object> getHubPageList(HubWorkContactEmployeeHandle handle);
+
+    public Map<String, Object> getCronHubPageList();
+
     public void export(Downfile downFile,GetWorkContactEmployeeHandle handle);
 
+    public void exportNovel(Downfile downFile,HubWorkContactEmployeeHandle handle);
+
     public void formatChanelCode();
 
     public void sendToDatahub();
 
+    public List<Integer> getNovelIds();
+
     public List<WorkContactEmployeeHubVo> getCorpEmployeeContact(Integer corpId, Integer maxId);
 }

+ 319 - 2
src/main/java/com/mokamrp/privates/service/impl/WorkContactEmployeeServiceImpl.java

@@ -1,5 +1,8 @@
 package com.mokamrp.privates.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.aliyun.oss.OSS;
 import com.aliyun.oss.model.PutObjectRequest;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -7,6 +10,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mokamrp.privates.config.OSSConfiguration;
 import com.mokamrp.privates.entity.GetWorkContactEmployeeHandle;
+import com.mokamrp.privates.entity.HubWorkContactEmployeeHandle;
+import com.mokamrp.privates.help.AjaxResult;
 import com.mokamrp.privates.mapper.DownfileMapper;
 import com.mokamrp.privates.mapper.WorkContactEmployeeMapper;
 import com.mokamrp.privates.mapper.pojo.Downfile;
@@ -16,9 +21,19 @@ import com.mokamrp.privates.mapper.vo.WorkContactEmployeeVo;
 import com.mokamrp.privates.service.WorkContactEmployeeService;
 import com.mokamrp.privates.utils.OssFile;
 import com.mokamrp.privates.utils.PageUtil;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.EntityUtils;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.annotation.Id;
 import org.springframework.stereotype.Service;
+import org.thymeleaf.expression.Ids;
 
 import java.io.ByteArrayInputStream;
 import java.text.SimpleDateFormat;
@@ -50,7 +65,198 @@ public class WorkContactEmployeeServiceImpl extends ServiceImpl<WorkContactEmplo
     private WorkContactEmployeeMapper mapperObj;
 
     @Override
+    public Map<String, Object> getCronHubPageList() {
+        List<Map<String,Object>> resList = new ArrayList<Map<String,Object>>();
 
+        Integer nextId = 0;
+
+        while(true){
+            QueryWrapper<WorkContactEmployeeVo> obj = new QueryWrapper<WorkContactEmployeeVo>();
+            obj.in("a.corp_id",getNovelIds());
+
+            if(!nextId.equals(0)){
+                obj.lt("d.id",nextId);
+            }
+
+            List<WorkContactEmployeeVo> list = mapperObj.getCronHubVoList(obj,100);
+            if(list.size() <=0){
+                break;
+            }
+
+            nextId = synTyperTag(list);
+            if(nextId.equals(0)){
+                break;
+            }
+        }
+
+        return null;
+    }
+
+    @Override
+    public List<Integer> getNovelIds(){
+        List<Integer> ids = new ArrayList<Integer>();
+        ids.add(63);
+        ids.add(64);
+        ids.add(65);
+        ids.add(66);
+        return ids;
+    }
+
+    @Override
+    public Map<String, Object> getHubPageList(HubWorkContactEmployeeHandle handle) {
+
+        List<Map<String,Object>> resList = new ArrayList<Map<String,Object>>();
+
+        QueryWrapper<WorkContactEmployeeVo> obj = getHubWrapper(handle);
+
+        Integer offset = PageUtil.getOffset(handle.getPage(),handle.getPagesize());
+        List<WorkContactEmployeeVo> list = mapperObj.getHubVoList(obj,offset,handle.getPagesize());
+        Integer total = mapperObj.getHubListTotal(obj);
+        Map<String, Object> resMap = new HashMap<String, Object>();
+
+        resMap.put("list", list);
+        resMap.put("total", total);
+
+        return resMap;
+    }
+
+    private Integer synTyperTag(List<WorkContactEmployeeVo> list){
+
+        Integer nextId = 0;
+        int j = list.size();
+        JSONArray responseList = new JSONArray();
+        int t;
+        List<Map<String,Object>> resList = new ArrayList<Map<String,Object>>();
+
+        for (int i = 0; i < j; i++) {
+            Map<String, Object> map = new HashMap<String,Object>();       //数据采用的哈希表结构
+            if(list.get(i).getOpenId() == null || list.get(i).getOpenId().isEmpty()){
+                continue;
+            }
+            map.put("openid", list.get(i).getOpenId());
+            map.put("appid", list.get(i).getAppId());
+            map.put("private_domain", 1);
+            map.put("main_body", list.get(i).getCompanyName());
+            resList.add(map);
+            nextId = list.get(i).getId();
+        }
+
+        HttpPost post = new HttpPost("http://yitian.mokagm.com/v1/external/fans/info");
+        // (2) 使用HttpClient发送get请求,获得返回结果HttpResponse
+        DefaultHttpClient http = new DefaultHttpClient();
+        JSONObject jsobj1 = new JSONObject();
+        post.setHeader("Content-Type", "application/json");
+
+        String json =  JSON.toJSONString(resList);
+
+        StringEntity s = new StringEntity(json, "utf-8");
+        s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
+        post.setEntity(s);
+
+        try {
+            HttpResponse response = http.execute(post);
+            if (response.getStatusLine().getStatusCode() == 200) {
+                HttpEntity resEntity = response.getEntity();
+                String message = EntityUtils.toString(resEntity, "utf-8");
+                JSONObject jsonObject = JSON.parseObject(message);
+                Object resMap;
+                if (jsonObject.get("data") != null) {
+                    responseList = jsonObject.getJSONArray("data");
+                }
+            }
+        }catch (Exception e){
+            System.out.println(e.getMessage());
+            return nextId;
+        }
+
+        int resLen = responseList.size();
+        Date d = new Date();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String dateString =  sdf.format(d);
+        for (int i = 0; i < j; i++) {
+            list.get(i).setPlatform("");
+            for(t=0;t<resLen;t++) {
+                //匹配成功的
+                if(list.get(i).getOpenId() != null && responseList.getJSONObject(t).get("openid").equals(list.get(i).getOpenId())){
+                    mapperObj.updateOpenid(
+                            list.get(i).getId(),
+                            responseList.getJSONObject(t).get("label").toString(),
+                            responseList.getJSONObject(t).get("platform").toString(),
+                            dateString
+                    );
+                }
+            }
+        }
+        return nextId;
+    }
+
+    private List<WorkContactEmployeeVo> getTyperTag(List<WorkContactEmployeeVo> list){
+
+        int j = list.size();
+        int t;
+        JSONArray responseList = new JSONArray();
+        List<Map<String,Object>> resList = new ArrayList<Map<String,Object>>();
+
+        for (int i = 0; i < j; i++) {
+            Map<String, Object> map = new HashMap<String,Object>();       //数据采用的哈希表结构
+            if(list.get(i).getOpenId() == null || list.get(i).getOpenId().isEmpty()){
+                continue;
+            }
+            map.put("openid", list.get(i).getOpenId());
+            map.put("appid", list.get(i).getAppId());
+            map.put("private_domain", 1);
+            map.put("main_body", list.get(i).getCompanyName());
+            resList.add(map);
+        }
+
+        /*请求typer*/
+        HttpPost post = new HttpPost("http://yitian.mokagm.com/v1/external/fans/info");
+        // (2) 使用HttpClient发送get请求,获得返回结果HttpResponse
+        DefaultHttpClient http = new DefaultHttpClient();
+        JSONObject jsobj1 = new JSONObject();
+        post.setHeader("Content-Type", "application/json");
+
+        String json =  JSON.toJSONString(resList);
+
+        StringEntity s = new StringEntity(json, "utf-8");
+        s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
+        post.setEntity(s);
+
+        try {
+            HttpResponse response = http.execute(post);
+
+            if (response.getStatusLine().getStatusCode() == 200) {
+                HttpEntity resEntity = response.getEntity();
+                String message = EntityUtils.toString(resEntity, "utf-8");
+                JSONObject jsonObject = JSON.parseObject(message);
+                Object resMap;
+                if (jsonObject.get("data") != null) {
+                    responseList = jsonObject.getJSONArray("data");
+
+                }
+            }
+        }catch (Exception e){
+            System.out.println(e.getMessage());
+            return list;
+        }
+
+
+        int resLen = responseList.size();
+        for (int i = 0; i < j; i++) {
+            list.get(i).setPlatform("");
+            for(t=0;t<resLen;t++) {
+                //匹配成功的
+                if(list.get(i).getOpenId() != null && responseList.getJSONObject(t).get("openid").equals(list.get(i).getOpenId())){
+                    list.get(i).setTyperTag(responseList.getJSONObject(t).get("label").toString());
+                    list.get(i).setPlatform(responseList.getJSONObject(t).get("platform").toString());
+                }
+            }
+        }
+
+        return list;
+    }
+
+    @Override
     public Map<String, Object> getPageList(GetWorkContactEmployeeHandle handle) {
 
         QueryWrapper<WorkContactEmployeeVo> obj = getWrapper(handle);
@@ -101,6 +307,57 @@ public class WorkContactEmployeeServiceImpl extends ServiceImpl<WorkContactEmplo
         return vos;
     }
 
+    @Override
+    public void exportNovel(Downfile downFile, HubWorkContactEmployeeHandle handle) {
+
+        String title = Downfile.NOVEL;
+        List<Object> tempObj;
+        QueryWrapper<WorkContactEmployeeVo> obj = getHubWrapper(handle);
+        Integer total = mapperObj.getHubListTotal(obj);
+        List<WorkContactEmployeeVo> list = mapperObj.getHubVoList(obj,0,total);
+
+        //实现下载
+        List<List<Object>> resList = new ArrayList<List<Object>>();
+        Object[] head = {"id", "客户名称", "状态(1正常 2删除 3拉黑)", "平台", "ghid", "appid","openid", "标签", "客服名称", "所属公司","备注","创建时间"};
+        List<Object> headList = Arrays.asList(head);
+        resList.add(headList);
+
+        if (list.size() >= 1) {
+            for (WorkContactEmployeeVo o : list) {
+                tempObj = new ArrayList<Object>() {//这个大括号 就相当于我们  new 接口
+                    {//这个大括号 就是 构造代码块 会在构造函数前 调用
+                        this.add(o.getId());
+                        this.add(o.getClientName());
+                        this.add(o.getClientStatus());
+                        this.add(o.getPlatform());
+                        this.add(o.getGhId());
+                        this.add(o.getAppId());
+                        this.add(o.getOpenId());
+                        this.add(o.getTyperTag());
+                        this.add(o.getEmployeeName());
+                        this.add(o.getCompanyName());
+                        this.add(o.getRemark());
+                        this.add(o.getClientCreatedAt());
+                    }
+                };
+                resList.add(tempObj);
+            }
+        }
+
+        StringBuffer content = OssFile.createCSV(resList);
+
+        /*上传到oss*/
+        Date currentTime = new Date();
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        String bom = new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF });
+        String dateString = formatter.format(currentTime);
+        String filePath = OSSConfiguration.DOWN_DIR + dateString + "/" + downFile.getId().toString() + "_" + title;
+        PutObjectRequest putObjectRequest = new PutObjectRequest(ossConfiguration.getBucketName(), filePath, new ByteArrayInputStream((bom+content.toString()).getBytes()));
+        ossClient.putObject(putObjectRequest);
+        downFile.setDownUrl(ossConfiguration.getHost() + filePath);
+        downFile.setStatus(1);
+        downfileMapper.updateById(downFile);
+    }
 
     @Override
     public void export(Downfile downFile, GetWorkContactEmployeeHandle handle) {
@@ -174,8 +431,13 @@ public class WorkContactEmployeeServiceImpl extends ServiceImpl<WorkContactEmplo
                 for (Map<String, Object> tag : tagMapData) {
                     if (tag.get("employee_id").toString().equals(list.get(i).getEmployeeId().toString())
                             && tag.get("contact_id").toString().equals(list.get(i).getContactId().toString()) ) {
-                        list.get(i).setTagNames(tag.get("tag_names").toString());
-                        list.get(i).setTagIds(tag.get("tag_ids").toString());
+                        if(tag.get("tag_names") != null){
+                            list.get(i).setTagNames(tag.get("tag_names").toString());
+                        }
+
+                        if(tag.get("tag_ids") != null){
+                            list.get(i).setTagIds(tag.get("tag_ids").toString());
+                        }
                     }
                 }
             }
@@ -184,6 +446,61 @@ public class WorkContactEmployeeServiceImpl extends ServiceImpl<WorkContactEmplo
         return list;
     }
 
+    private QueryWrapper<WorkContactEmployeeVo> getHubWrapper(HubWorkContactEmployeeHandle handle) {
+
+        QueryWrapper<WorkContactEmployeeVo> obj = new QueryWrapper<WorkContactEmployeeVo>();
+        Integer gender = handle.getGender();
+        String name = handle.getName();
+        Integer status = handle.getStatus();
+        String startCreatedAt = handle.getStartCreatedAt();
+        String endCreatedAt = handle.getEndCreatedAt();
+        Integer corpId = handle.getCorpId();
+        List<String> ghIds = handle.getGhIds();
+        String platform = handle.getPlatform();
+        List<Integer> employeeId = handle.getEmployeeId();
+        List<Integer> authCorpIds = handle.getAuthCorpIds();
+
+        obj.in("a.corp_id",getNovelIds());
+        obj.in("a.corp_id", authCorpIds);
+
+        if (name != null && !name.equals("")) {
+            obj.like("c.name", name);
+        }
+
+        if (gender != null) {
+            obj.eq("c.gender", gender);
+        }
+
+        if (startCreatedAt != null && !startCreatedAt.isEmpty()) {
+            obj.ge("c.created_at", startCreatedAt);
+        }
+
+        if (status != null) {
+            obj.eq("a.`status`", status);
+        }
+
+        if (endCreatedAt != null && !endCreatedAt.isEmpty()) {
+            obj.le("c.created_at", endCreatedAt);
+        }
+        if (corpId != null) {
+            obj.eq("a.corp_id", corpId);
+        }
+
+        if (employeeId != null && employeeId.size() >= 1) {
+            obj.in("a.employee_id", employeeId);
+        }
+
+        if (platform != null && !platform.equals("")) {
+            obj.like("d.platform", platform);
+        }
+
+        if (ghIds != null && ghIds.size() >= 1) {
+            obj.in("d.ghid", ghIds);
+        }
+
+        return obj;
+    }
+
     private QueryWrapper<WorkContactEmployeeVo> getWrapper(GetWorkContactEmployeeHandle handle) {
 
         QueryWrapper<WorkContactEmployeeVo> obj = new QueryWrapper<WorkContactEmployeeVo>();

+ 2 - 1
src/main/java/com/mokamrp/privates/tast/DatahubJobTask.java

@@ -109,6 +109,7 @@ public class DatahubJobTask {
             if(vo.getFollowCreateTime() != null && !vo.getFollowCreateTime().isEmpty()){
                 createtime = date2TimeStamp(vo.getFollowCreateTime(),"yyyy-MM-dd HH:mm:ss");
             }
+
             data.setField("external_userid", vo.getExternalUserid());
             data.setField("external_name", vo.getExternalName());
             data.setField("external_type", vo.getExternalType());
@@ -116,6 +117,7 @@ public class DatahubJobTask {
             data.setField("external_corp_name", vo.getExternalCorpName());
             data.setField("external_corp_full_name", vo.getExternalCorpFullName());
             data.setField("external_gender", vo.getExternalGender());
+            data.setField("wx_corpid", vo.getWxCorpid());
             data.setField("follow_userid", vo.getFollowUserid());
             data.setField("follow_remark", vo.getFollowRemark());
             data.setField("follow_createtime", createtime);
@@ -128,7 +130,6 @@ public class DatahubJobTask {
             recordEntries.add(recordEntry);
         }
 
-        // 生成十条数据
         try {
             PutRecordsResult result = datahubClient.putRecords(project, topic, recordEntries);
             int i = result.getFailedRecordCount();

+ 5 - 0
src/main/java/com/mokamrp/privates/tast/ExportJobTask.java

@@ -4,6 +4,7 @@ import com.mokamrp.privates.entity.JobRedis;
 import com.mokamrp.privates.entity.JobRoomJobRedis;
 import com.mokamrp.privates.entity.JobWorkContactEmployeeRedis;
 import com.mokamrp.privates.entity.JobWorkEmployeeJobRedis;
+import com.mokamrp.privates.entity.job.ExportNovelRedis;
 import com.mokamrp.privates.mapper.pojo.Downfile;
 import com.mokamrp.privates.service.WorkContactEmployeeService;
 import com.mokamrp.privates.service.WorkEmployeeService;
@@ -61,6 +62,10 @@ public class ExportJobTask {
                     JobWorkEmployeeJobRedis weJob= out.getJobWorkEmployeeJobRedis();
                     workEmployeeService.export(downFile,weJob.getPostWorkEmployee());
                     break;
+                case ExportNovelRedis.TASK_NAME:
+                    ExportNovelRedis novelJob= out.getExportNovelRedis();
+                    workContactEmployeeService.exportNovel(downFile,novelJob.getHandle());
+                    break;
                 default :
             }
         }

+ 50 - 0
src/main/java/com/mokamrp/privates/tast/SynTagTask.java

@@ -0,0 +1,50 @@
+package com.mokamrp.privates.tast;
+
+import com.aliyun.datahub.client.DatahubClient;
+import com.aliyun.datahub.client.exception.DatahubClientException;
+import com.aliyun.datahub.client.model.PutRecordsResult;
+import com.aliyun.datahub.client.model.RecordEntry;
+import com.aliyun.datahub.client.model.RecordSchema;
+import com.aliyun.datahub.client.model.TupleRecordData;
+import com.mokamrp.privates.entity.JobContactEmployee;
+import com.mokamrp.privates.mapper.vo.WorkContactEmployeeHubVo;
+import com.mokamrp.privates.service.WorkContactEmployeeService;
+import com.mokamrp.privates.utils.RedisUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class SynTagTask {
+
+    @Autowired
+    private WorkContactEmployeeService workContactEmployeeService;
+
+    @Resource
+    private RedisUtil redisUtil;
+
+    @Resource
+    private DatahubClient datahubClient;
+
+    @Value("${datahub.topic}")
+    private String topic;
+
+    @Value("${datahub.project}")
+    private String project;
+
+    /**
+     * 导出任务,单进程
+     */
+    @Scheduled(cron="0 20 3,8,10,12,14,16,18 * * *")
+    public void execute() {
+        System.out.println("执行typer同步任务,当前时间"+(new Date())+",当前长度"+redisUtil.lGetListSize(JobContactEmployee.QUEUE_KEY));
+        workContactEmployeeService.getCronHubPageList();
+    }
+}

+ 6 - 2
src/main/java/com/mokamrp/privates/tast/produce/ProduceDataHub.java

@@ -23,6 +23,9 @@ import java.util.Map;
 public class ProduceDataHub{
 
     @Autowired
+    private WorkContactEmployeeService workContactEmployeeService;
+
+    @Autowired
     private CorpService CorpService;
 
     @Resource
@@ -31,11 +34,12 @@ public class ProduceDataHub{
     /**
      * 导出任务,单进程
      */
-    @Scheduled(cron="0 0 10,18 * * *")
+    @Scheduled(cron="0 0 3,12,15 * * *")
     public void execute() {
         System.out.println("当前时间"+(new Date())+",定时任务推送公司粉丝datahub任务");
         QueryWrapper<Corp> obj= new QueryWrapper<Corp>();
-        //obj.in("id",18);
+        //obj.in("id",workContactEmployeeService.getNovelIds());
+
         List<Map<String,Object>> corps = CorpService.listMaps(obj);
         JobContactEmployee job = new JobContactEmployee();
         //生成任务到redis