Преглед на файлове

Merge remote-tracking branch 'origin/master'

chenlongfei преди 5 години
родител
ревизия
c619d93493

+ 68 - 1
src/main/java/com/mokamrp/privates/controller/CorpController.java

@@ -2,9 +2,21 @@ package com.mokamrp.privates.controller;
 
 
 import com.mokamrp.privates.constant.Constants;
+import com.mokamrp.privates.constant.HttpStatus;
+import com.mokamrp.privates.entity.GetWorkRoomHandle;
+import com.mokamrp.privates.entity.PostCorpWxLoginHandle;
 import com.mokamrp.privates.interceptor.AuthUser;
 import com.mokamrp.privates.mapper.pojo.User;
+import com.mokamrp.privates.service.GroupCorpService;
+import com.mokamrp.privates.service.UserCorpService;
+import com.mokamrp.privates.utils.RedisUtil;
+import com.mokamrp.privates.utils.StringUtils;
+import com.mokamrp.privates.utils.http.HttpUtils;
+import com.xxl.sso.core.conf.Conf;
+import com.xxl.sso.core.user.XxlSsoUser;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 import com.mokamrp.privates.service.CorpService;
 import com.mokamrp.privates.mapper.pojo.Corp;
@@ -12,8 +24,10 @@ import com.mokamrp.privates.help.AjaxResult;
 import com.mokamrp.privates.entity.IndexHandle;
 import com.mokamrp.privates.mapper.pojo.IndexBaseRes;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
-import java.util.List;
+import java.util.*;
 
 /**
  * <p>
@@ -27,5 +41,58 @@ import java.util.List;
 @RequestMapping("/corp")
 public class CorpController extends BaseController<Corp>{
 
+    @Autowired
+    public CorpService corpService;
+
+    /*
+    *偷个懒,在控制器写这个
+     */
+    @PostMapping("/loginInfo")
+    @ResponseBody
+    public Object getList(
+            @Valid @RequestBody PostCorpWxLoginHandle handle, BindingResult bindingResult,
+            HttpServletRequest request) {
+
+        String token = "Ij0dujMAh40oR0QfyH4Y6LDxrvY6bguEN0uoWwBJ";
+        String client = "co_01";
+        XxlSsoUser user = (XxlSsoUser) request.getAttribute(Conf.SSO_USER);
+        int max=99999,min=10000;
+        Long timestamp = (System.currentTimeMillis()/1000);
+
+        if (bindingResult.hasErrors()) {
+            return AjaxResult.error(HttpStatus.ERROR, bindingResult.getFieldError().getDefaultMessage());
+        }
+
+        Integer ran2 = (int) (Math.random()*(max-min)+min);
+
+        List<String> list = new ArrayList<String>();
+        list.add(client);
+        list.add(token);
+        list.add(timestamp.toString());
+        list.add(ran2.toString());
+        list.sort(Comparator.naturalOrder());
+        String imploded= StringUtils.join(list, "");
+
+        String sign = DigestUtils.sha1Hex(imploded);
+        System.out.println(list);
+        System.out.println(sign);
+        System.out.println(imploded);
+        List<String> a = list;
+        Map<String,String> requestParams = new HashMap<>();
+
+        requestParams.put("type","workwechat");
+        requestParams.put("client_id",client);
+        requestParams.put("signature",sign);
+        requestParams.put("nonce",ran2.toString());
+        requestParams.put("timestamp",timestamp.toString());
+        requestParams.put("mobile_id",handle.getMobile().toString());
+        requestParams.put("uuid",handle.getUuid());
+
+        String url = HttpUtils.getRqstUrl("http://account.kwnpv.com/onekeyload/workwechat",requestParams);
+        return AjaxResult.success("ok",url);
+    }
+
+
+
 }
 

+ 50 - 10
src/main/java/com/mokamrp/privates/controller/WorkEmployeeController.java

@@ -1,28 +1,23 @@
 package com.mokamrp.privates.controller;
 
 import com.mokamrp.privates.constant.HttpStatus;
-import com.mokamrp.privates.entity.GetWorkRoomHandle;
-import com.mokamrp.privates.entity.PostWorkEmployee;
-import com.mokamrp.privates.entity.WorkEmployeeHandle;
+import com.mokamrp.privates.entity.*;
 import com.mokamrp.privates.help.AjaxResult;
 import com.mokamrp.privates.interceptor.AuthUser;
-import com.mokamrp.privates.mapper.pojo.Corp;
-import com.mokamrp.privates.mapper.pojo.User;
-import com.mokamrp.privates.mapper.pojo.UserCorp;
+import com.mokamrp.privates.mapper.pojo.*;
+import com.mokamrp.privates.service.DownfileService;
 import com.mokamrp.privates.service.UserCorpService;
 import com.mokamrp.privates.service.WorkContactEmployeeService;
+import com.mokamrp.privates.utils.RedisUtil;
 import com.xxl.sso.core.conf.Conf;
 import com.xxl.sso.core.user.XxlSsoUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 import com.mokamrp.privates.service.WorkEmployeeService;
-import com.mokamrp.privates.mapper.pojo.WorkEmployee;
-
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-import javax.swing.border.EtchedBorder;
 import javax.validation.Valid;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -46,6 +41,12 @@ public class WorkEmployeeController extends BaseController<WorkEmployee> {
 
     @Autowired
     public WorkContactEmployeeService workContactEmployeeService;
+
+    @Resource
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private DownfileService downfileService;
     /*
      * @fast
      * 默认生成的控制器所继承的父类中有index/add/edit/del四个基础方法,均为post json请求
@@ -91,6 +92,45 @@ public class WorkEmployeeController extends BaseController<WorkEmployee> {
 
     }
 
+    @RequestMapping("/export")
+    @ResponseBody
+    public Object export(
+            @AuthUser User authUser,
+            @Valid @RequestBody PostWorkEmployee handle, BindingResult bindingResult,
+            HttpServletRequest request) {
+        XxlSsoUser user = (XxlSsoUser) request.getAttribute(Conf.SSO_USER);
+
+        if (bindingResult.hasErrors()) {
+            return AjaxResult.error(HttpStatus.ERROR, bindingResult.getFieldError().getDefaultMessage());
+        }
+
+        List<Integer> corpIds = userCorpService.getAuthUserCorpIds(user.getUserid());
+        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(authUser.getId());
+        downObj.setAuthName(authUser.getName());
+        downObj.setTitle(Downfile.WORK_EMPLOYEE);
+        downfileService.save(downObj);
+
+        /*推送一个简单下载任务*/
+        JobRedis realJob = new JobRedis();
+        JobWorkEmployeeJobRedis job = new JobWorkEmployeeJobRedis();
+        job.setPostWorkEmployee(handle);
+
+        realJob.setJobWorkEmployeeJobRedis(job);
+        realJob.setJobName(JobWorkEmployeeJobRedis.TASK_NAME);
+        realJob.setDownFile(downObj);
+
+        redisUtil.leftPush(JobRedis.QUEUE_KEY,realJob);
+
+        return AjaxResult.success("正在异步生成请稍后");
+    }
 
 }
 

+ 10 - 2
src/main/java/com/mokamrp/privates/entity/JobRedis.java

@@ -11,14 +11,22 @@ public class JobRedis implements Serializable {
 
     private Downfile downFile;
 
-
-
     private String jobName;
 
     private JobWorkContactEmployeeRedis jobWorkContactEmployeeRedis;
 
     private JobRoomJobRedis jobRoomJobRedis;
 
+    private JobWorkEmployeeJobRedis jobWorkEmployeeJobRedis;
+
+    public JobWorkEmployeeJobRedis getJobWorkEmployeeJobRedis() {
+        return jobWorkEmployeeJobRedis;
+    }
+
+    public void setJobWorkEmployeeJobRedis(JobWorkEmployeeJobRedis jobWorkEmployeeJobRedis) {
+        this.jobWorkEmployeeJobRedis = jobWorkEmployeeJobRedis;
+    }
+
     public JobWorkContactEmployeeRedis getJobWorkContactEmployeeRedis() {
         return jobWorkContactEmployeeRedis;
     }

+ 18 - 0
src/main/java/com/mokamrp/privates/entity/JobWorkEmployeeJobRedis.java

@@ -0,0 +1,18 @@
+package com.mokamrp.privates.entity;
+
+import java.io.Serializable;
+
+public class JobWorkEmployeeJobRedis implements Serializable {
+
+    public final static String TASK_NAME = "WorkEmployeeService";
+    private PostWorkEmployee PostWorkEmployee;
+
+    public com.mokamrp.privates.entity.PostWorkEmployee getPostWorkEmployee() {
+        return PostWorkEmployee;
+    }
+
+    public void setPostWorkEmployee(com.mokamrp.privates.entity.PostWorkEmployee postWorkEmployee) {
+        PostWorkEmployee = postWorkEmployee;
+    }
+
+}

+ 10 - 0
src/main/java/com/mokamrp/privates/entity/PostCorpWxLoginHandle.java

@@ -0,0 +1,10 @@
+package com.mokamrp.privates.entity;
+
+import lombok.Data;
+
+@Data
+public class PostCorpWxLoginHandle {
+    private Integer mobile;
+    private Integer type;
+    private String uuid;
+}

+ 3 - 1
src/main/java/com/mokamrp/privates/mapper/CorpMapper.xml

@@ -21,12 +21,14 @@
         <result column="created_at" property="createdAt"/>
         <result column="updated_at" property="updatedAt"/>
         <result column="deleted_at" property="deletedAt"/>
+        <result column="mobile" property="mobile"/>
+        <result column="uuid" property="uuid"/>
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
         id
-        , name, wx_corpid, social_code, employee_secret, event_callback, contact_secret, token, encoding_aes_key, power, tenant_id, created_at, updated_at, deleted_at
+        , name, wx_corpid, social_code, employee_secret, event_callback, contact_secret, token, encoding_aes_key, power, tenant_id, created_at, updated_at, deleted_at,mobile,uuid
     </sql>
 
 </mapper>

+ 1 - 0
src/main/java/com/mokamrp/privates/mapper/WorkEmployeeMapper.xml

@@ -55,6 +55,7 @@
             A.cust_cnt,
             A.group_cnt,
             A.in_group_cnt,
+            A.wx_user_id,
             C.`name` AS companyName,
             D.group_id
         FROM

+ 20 - 1
src/main/java/com/mokamrp/privates/mapper/pojo/Corp.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.mokamrp.privates.utils.StringUtils;
+
 import java.util.Date;
 import java.io.Serializable;
 
@@ -65,7 +67,8 @@ public class Corp extends Model<Corp> {
     private Date createdAt;
     private Date updatedAt;
     private Date deletedAt;
-
+    private Integer mobile;
+    private String uuid;
 
     public Integer getId() {
         return id;
@@ -179,6 +182,22 @@ public class Corp extends Model<Corp> {
         this.deletedAt = deletedAt;
     }
 
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public Integer getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(Integer mobile) {
+        this.mobile = mobile;
+    }
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 3 - 2
src/main/java/com/mokamrp/privates/mapper/pojo/Downfile.java

@@ -20,10 +20,11 @@ import java.util.Date;
 @TableName("private_downfile")
 public class Downfile extends Model<Downfile> {
 
-    public static final String WORK_CONTACT_EMPLOYEE = "客信息下载.csv";
+    public static final String WORK_CONTACT_EMPLOYEE = "客信息下载.csv";
     public static final String WORM_ROOM = "群数据下载.csv";
+    public static final String WORK_EMPLOYEE = "客服数据.csv";
 
-    public static final String DEFAULT_MSG = "数据下载中";
+    public static final String DEFAULT_MSG = "数据下载中";
 
     private static final long serialVersionUID = 1L;
 

+ 30 - 0
src/main/java/com/mokamrp/privates/mapper/vo/WorkEmployeeVo.java

@@ -16,6 +16,7 @@ public class WorkEmployeeVo {
     private String groupName;
     private String name;
     private Integer gender;
+    private String genderTxt;
     private String avatar;
     private String qrCode;
     private String mobile;
@@ -30,6 +31,19 @@ public class WorkEmployeeVo {
     private String companyName;
     private Object roomNum;
     private Object fanNum;
+    private String wxUserId;
+
+    public void setQrCode(String qrCode) {
+        this.qrCode = qrCode;
+    }
+
+    public String getWxUserId() {
+        return wxUserId;
+    }
+
+    public void setWxUserId(String wxUserId) {
+        this.wxUserId = wxUserId;
+    }
 
     public Object getRoomNum() {
         return roomNum;
@@ -75,10 +89,26 @@ public class WorkEmployeeVo {
         return gender;
     }
 
+    public void setGenderTxt(String genderTxt) {
+        this.genderTxt = genderTxt;
+    }
+
     public void setGender(Integer gender) {
         this.gender = gender;
     }
 
+    public String getGenderTxt() {
+        String genderTxt = "未知";
+
+        if(gender.equals(1)){
+            genderTxt = "男";
+        }else if(gender.equals(2)){
+            genderTxt = "女";
+        }
+
+        return genderTxt;
+    }
+
     public String getAvatar() {
         return avatar;
     }

+ 63 - 0
src/main/java/com/mokamrp/privates/service/impl/WorkEmployeeServiceImpl.java

@@ -1,5 +1,6 @@
 package com.mokamrp.privates.service.impl;
 
+import com.aliyun.oss.OSS;
 import com.aliyun.oss.model.PutObjectRequest;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -49,6 +50,15 @@ public class WorkEmployeeServiceImpl extends ServiceImpl<WorkEmployeeMapper, Wor
     @Autowired
     private WorkRoomMapper workRoomMapper;
 
+    @Autowired
+    private DownfileMapper downfileMapper;
+
+    @Autowired
+    private OSSConfiguration ossConfiguration;
+
+    @Autowired
+    private OSS ossClient;
+
     public Object selectWorkEmployeeList(String authUserId, WorkEmployeeHandle workEmployee) {
         List<Integer> userCorpIds = userCorpService.getAuthUserCorpIds(authUserId);
         List<Integer> corpIds = new ArrayList<Integer>();
@@ -89,6 +99,59 @@ public class WorkEmployeeServiceImpl extends ServiceImpl<WorkEmployeeMapper, Wor
 
     @Override
     public void export(Downfile downFile, PostWorkEmployee handle) {
+        List<Object> tempObj;
+        List<List<Object>> resList = new ArrayList<List<Object>>();
+
+        /*
+        所属主体        主体分组     客服名称 标签 性别      头像    客服唯一码       手机编号  手机号  封禁状态  粉丝数 管理群数 迁移状态
+        companyName    groupName   name        gender   avatar   wxUserId       mobile                  fanNum  roomNum
+         */
+
+        Object[] head = {"id", "所属主体", "主体分组", "客服名称", "性别", "头像", "客服唯一码", "手机编号", "粉丝数", "管理群数"};
+        List<Object> headList = Arrays.asList(head);
+        Date currentTime = new Date();
+        String fileName = Downfile.WORK_EMPLOYEE;
+
+        QueryWrapper<WorkEmployeeVo> obj = getWrapper(handle);
+        Integer total = workEmployeeMapper.getVoListTotal(obj);
+        Page<WorkEmployeeVo> pageObj = new Page<>(1, total);
+        List<WorkEmployeeVo> list = getCommonList(pageObj, obj);
+
+        resList.add(headList);
+
+        if (list.size() >= 1) {
+            for (WorkEmployeeVo o : list) {
+                tempObj = new ArrayList<Object>() {
+                    {
+                        this.add(o.getId());
+                        this.add(o.getCompanyName());
+                        this.add(o.getGroupName());
+                        this.add(o.getName());
+                        this.add(o.getGenderTxt());
+                        this.add(o.getAvatar());
+                        this.add(o.getWxUserId());
+                        this.add(o.getMobile());
+                        this.add(o.getFanNum());
+                        this.add(o.getRoomNum());
+                    }
+                };
+                resList.add(tempObj);
+            }
+        }
+
+        StringBuffer content = OssFile.createCSV(resList);
+
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        String dateString = formatter.format(currentTime);
+        String filePath = OSSConfiguration.DOWN_DIR + dateString + "/" + downFile.getId().toString() + "_" + fileName;
+
+        PutObjectRequest putObjectRequest = new PutObjectRequest(ossConfiguration.getBucketName(), filePath,
+                new ByteArrayInputStream(content.toString().getBytes()));
+        ossClient.putObject(putObjectRequest);
+
+        downFile.setDownUrl(ossConfiguration.getHost() + filePath);
+        downFile.setStatus(1);
+        downfileMapper.updateById(downFile);
 
         return;
     }

+ 10 - 3
src/main/java/com/mokamrp/privates/tast/ExportJobTask.java

@@ -3,15 +3,15 @@ package com.mokamrp.privates.tast;
 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.mapper.pojo.Downfile;
 import com.mokamrp.privates.service.WorkContactEmployeeService;
+import com.mokamrp.privates.service.WorkEmployeeService;
 import com.mokamrp.privates.service.WorkRoomService;
 import com.mokamrp.privates.utils.RedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
-
 import javax.annotation.Resource;
 import java.util.Date;
 
@@ -24,10 +24,12 @@ public class ExportJobTask {
     @Autowired
     private WorkRoomService workRoomService;
 
-
     @Autowired
     private WorkContactEmployeeService workContactEmployeeService;
 
+    @Autowired
+    private WorkEmployeeService workEmployeeService;
+
     /**
      * 导出任务,单进程
      */
@@ -44,6 +46,7 @@ public class ExportJobTask {
                 continue;
             }
 
+            System.out.println("id:"+downFile.getId());
             switch(out.getJobName()){
                 case "Room":
                     JobRoomJobRedis job= out.getJobRoomJobRedis();
@@ -53,6 +56,10 @@ public class ExportJobTask {
                     JobWorkContactEmployeeRedis eJob= out.getJobWorkContactEmployeeRedis();
                     workContactEmployeeService.export(downFile,eJob.getWorkContactEmployeeHandle());
                     break;
+                case "WorkEmployeeService":
+                    JobWorkEmployeeJobRedis weJob= out.getJobWorkEmployeeJobRedis();
+                    workEmployeeService.export(downFile,weJob.getPostWorkEmployee());
+                    break;
                 default :
             }
         }

+ 20 - 0
src/main/java/com/mokamrp/privates/utils/http/HttpUtils.java

@@ -11,6 +11,7 @@ import java.net.SocketTimeoutException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.security.cert.X509Certificate;
+import java.util.Map;
 
 /**
  * 通用http发送方法
@@ -175,6 +176,25 @@ public class HttpUtils {
         return result.toString();
     }
 
+    public static String getRqstUrl(String url, Map<String, String> params) {
+        StringBuilder builder = new StringBuilder(url);
+        boolean isFirst = true;
+        for (String key : params.keySet()) {
+            if (key != null && params.get(key) != null) {
+                if (isFirst) {
+                    isFirst = false;
+                    builder.append("?");
+                } else {
+                    builder.append("&");
+                }
+                builder.append(key)
+                        .append("=")
+                        .append(params.get(key));
+            }
+        }
+        return builder.toString();
+    }
+
     private static class TrustAnyTrustManager implements X509TrustManager {
         @Override
         public void checkClientTrusted(X509Certificate[] chain, String authType) {