小程序数据导出时同步活动数据
continuous-integration/drone/push Build is passing Details

畅捷通报表
YXY 1 year ago
parent 4aeafd0dbd
commit d1ac2e379d

@ -0,0 +1,101 @@
package com.ruoyi.flyingbook.LarkHelper;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.lark.oapi.core.response.RawResponse;
import com.lark.oapi.core.token.AccessTokenType;
import com.lark.oapi.service.sheets.v3.model.*;
import com.ruoyi.flyingbook.domain.lark.LarkException;
import com.ruoyi.flyingbook.domain.lark.LarkTableSheetRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author yuxiangyong
* @create 2023-03-12 18:10
*/
@Slf4j
@Component
public class LarkTableSheetHelper extends LarkHelper {
static String spreadsheetToken = "LDGnspdy1hYJawtjUOCcXVTZnuc";
static String sheetID = "2XYmks";
public static void main(String[] args) throws Exception {
LarkTableSheetHelper bk = new LarkTableSheetHelper();
LarkTableSheetRequest query = new LarkTableSheetRequest("cli_a482a8572cbc9013", "lZNXbCLlOslWbwBIVc4qvgxOdnfA8Mos", spreadsheetToken);
QuerySpreadsheetSheetRespBody spreadsheets = bk.getSpreadsheets(query);
Sheet[] sheets = spreadsheets.getSheets();
query.setSheetId(sheetID);
List<String> arr = bk.getSpreadsheetDetails(query).stream()
.filter(r -> {
String mid = String.valueOf(r);
return !mid.equals("[null]");
})
.map(r -> {
return String.valueOf(r).replace("[","").replace("]","").replace("\"","");
})
.distinct()
.collect(Collectors.toList());
int i = 0;
}
/**
*
*/
public QuerySpreadsheetSheetRespBody getSpreadsheets(LarkTableSheetRequest request) {
QuerySpreadsheetSheetResp query = null;
try {
query = buildClient(request).sheets()
.spreadsheetSheet()
.query(
QuerySpreadsheetSheetReq.newBuilder()
.spreadsheetToken(request.getSpreadsheetToken())
.build()
);
} catch (Exception e) {
throw new RuntimeException(new LarkException("LarkTableSheetHelper.getSpreadsheets", e.getMessage(), request).getErrorMessageBody());
}
if (query != null && query.getCode() == 0) {
return query.getData();
} else {
throw new RuntimeException(new LarkException("LarkTableSheetHelper.getSpreadsheets", query.getMsg(), request).getErrorMessageBody());
}
}
/**
*
*/
public JSONArray getSpreadsheetDetails(LarkTableSheetRequest request) {
JSONObject result = null;
try {
RawResponse response = buildClient(request).get(request.getUrl(), null, AccessTokenType.Tenant);
result = JSONObject.parseObject(new String(response.getBody()));
JSONObject testV = new JSONObject();
} catch (Exception e) {
throw new RuntimeException(new LarkException("LarkTableSheetHelper.getSpreadsheetDetails", e.getMessage(), request).getErrorMessageBody());
}
if (result != null && result.getInteger("code") == 0) {
JSONObject data = result.getJSONObject("data");
if (data != null) {
JSONObject valueRange = data.getJSONObject("valueRange");
if (valueRange != null) {
return valueRange.getJSONArray("values");
}
}
return null;
} else {
throw new RuntimeException(new LarkException("LarkTableSheetHelper.getSpreadsheetDetails", result.getString("msg"), request).getErrorMessageBody());
}
}
}

@ -34,6 +34,8 @@ public class LarkUserHelper extends LarkHelper{
LarkUserHelper bk = new LarkUserHelper(); LarkUserHelper bk = new LarkUserHelper();
LarkUserRequest larkUserRequest = new LarkUserRequest(appId, secret, openId); LarkUserRequest larkUserRequest = new LarkUserRequest(appId, secret, openId);
GetUserRespBody userRespBody = bk.getUserInfoDetail(larkUserRequest); GetUserRespBody userRespBody = bk.getUserInfoDetail(larkUserRequest);
larkUserRequest.setEmails(new String[]{"932687738@qq.com"});
BatchGetIdUserRespBody userInfoList = bk.getUserInfoList(larkUserRequest);
larkUserRequest.setDepartmentId(userRespBody.getUser().getDepartmentIds()[0]); larkUserRequest.setDepartmentId(userRespBody.getUser().getDepartmentIds()[0]);
GetDepartmentRespBody departmentsInfoDetail = bk.getDepartmentsInfoDetail(larkUserRequest); GetDepartmentRespBody departmentsInfoDetail = bk.getDepartmentsInfoDetail(larkUserRequest);
@ -77,6 +79,28 @@ public class LarkUserHelper extends LarkHelper{
} }
} }
public BatchGetIdUserRespBody getUserInfoList(LarkUserRequest request) {
BatchGetIdUserResp batchGetIdUserResp = null;
try {
batchGetIdUserResp = buildClient(request).contact().user()
.batchGetId(
BatchGetIdUserReq.newBuilder()
.batchGetIdUserReqBody(BatchGetIdUserReqBody.newBuilder()
.emails(request.getEmails())
.build())
.userIdType(BatchGetIdUserUserIdTypeEnum.USER_ID)
.build()
);
} catch (Exception e) {
throw new RuntimeException(new LarkException("LarkUserHelper.getUserInfoDetail",e.getMessage(),request).getErrorMessageBody());
}
if (batchGetIdUserResp != null && batchGetIdUserResp.getCode() == 0){
return batchGetIdUserResp.getData();
}else {
throw new RuntimeException(new LarkException("LarkUserHelper.getUserInfoDetail",batchGetIdUserResp.getMsg(),request).getErrorMessageBody());
}
}
/** /**
* *
*/ */

@ -179,8 +179,8 @@ public class LarkActiveController extends BaseController {
@GetMapping("/exportActiveFile") @GetMapping("/exportActiveFile")
public void export(HttpServletResponse response) { public void export(HttpServletResponse response) {
try { try {
larkUserActiveRelatoinService.syncSheet("cli_a482a8572cbc9013","lZNXbCLlOslWbwBIVc4qvgxOdnfA8Mos");
LarkActiveCountVo larkActiveCountVo = larkUserActiveRelatoinService.queryCount(); LarkActiveCountVo larkActiveCountVo = larkUserActiveRelatoinService.queryCount();
List<LarkActiveExportDetailVo> larkActiveExportDetailVos = larkUserActiveRelatoinService.queryExportDetail(APP_ID,APP_SECRET);
ExportUtils.writeFile(response, "fileName"); ExportUtils.writeFile(response, "fileName");
EasyExcel.write(response.getOutputStream()) EasyExcel.write(response.getOutputStream())
.head(LarkActiveCountVo.class) .head(LarkActiveCountVo.class)
@ -188,12 +188,6 @@ public class LarkActiveController extends BaseController {
.excelType(ExcelTypeEnum.XLSX) .excelType(ExcelTypeEnum.XLSX)
.sheet(0,"sheetName1") .sheet(0,"sheetName1")
.doWrite(Arrays.asList(larkActiveCountVo)); .doWrite(Arrays.asList(larkActiveCountVo));
EasyExcel.write(response.getOutputStream())
.head(LarkActiveExportDetailVo.class)
.registerWriteHandler(new CustomMergeStrategy(LarkActiveExportDetailVo.class))
.excelType(ExcelTypeEnum.XLSX)
.sheet(1,"sheetName2")
.doWrite(larkActiveExportDetailVos);
}catch (Exception e){ }catch (Exception e){
log.info("导出信息错误",e); log.info("导出信息错误",e);
} }

@ -0,0 +1,38 @@
package com.ruoyi.flyingbook.domain.lark;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author yuxiangyong
* @create 2023-03-18 0:12
*/
@Data
@NoArgsConstructor
public class LarkTableSheetRequest extends LarkRequest{
private String spreadsheetToken;
private String sheetId;
public LarkTableSheetRequest(String appId, String appSecret, String spreadsheetToken) {
super(appId,appSecret);
this.spreadsheetToken = spreadsheetToken;
}
public LarkTableSheetRequest(String appId, String appSecret, String spreadsheetToken, String sheetId) {
super(appId,appSecret);
this.spreadsheetToken = spreadsheetToken;
this.sheetId = sheetId;
}
public String getRange(){
return String.format("%s!D2:D5000",this.sheetId);
}
public String getUrl(){
return String.format("https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/%s/values/%s",this.spreadsheetToken,getRange());
}
}

@ -19,9 +19,11 @@ public class LarkUserRequest extends LarkRequest{
private String code; private String code;
//部门id //部门id
private String departmentId; private String departmentId;
public LarkUserRequest(String appId, String appSecret) { public LarkUserRequest(String appId, String appSecret) {
super(appId, appSecret); super(appId, appSecret);
} }
private String[] emails;
public LarkUserRequest(String appId, String appSecret, String openId) { public LarkUserRequest(String appId, String appSecret, String openId) {
super(appId, appSecret); super(appId, appSecret);

@ -37,6 +37,7 @@ public interface ILarkUserActiveRelatoinService {
public ResponseVo<LarkUserActiveRelatoin> queryPage(LarkActiveUserRelationRequest request); public ResponseVo<LarkUserActiveRelatoin> queryPage(LarkActiveUserRelationRequest request);
public ResponseVo<String> commitFile(LarkActiveUserRelationRequest request); public ResponseVo<String> commitFile(LarkActiveUserRelationRequest request);
public void syncSheet(String appId,String appSecret);
public void submit(List<LarkActiveImportVo> list,String appId,String appSecret); public void submit(List<LarkActiveImportVo> list,String appId,String appSecret);
/** /**

@ -1,20 +1,25 @@
package com.ruoyi.flyingbook.service.impl; package com.ruoyi.flyingbook.service.impl;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONArray;
import com.lark.oapi.service.contact.v3.model.GetDepartmentRespBody; import com.lark.oapi.service.contact.v3.model.GetDepartmentRespBody;
import com.lark.oapi.service.contact.v3.model.GetUserRespBody; import com.lark.oapi.service.contact.v3.model.GetUserRespBody;
import com.lark.oapi.service.sheets.v3.model.QuerySpreadsheetSheetRespBody;
import com.lark.oapi.service.sheets.v3.model.Sheet;
import com.ruoyi.common.enums.FlagStatus; import com.ruoyi.common.enums.FlagStatus;
import com.ruoyi.common.enums.LarkActiveEnum; import com.ruoyi.common.enums.LarkActiveEnum;
import com.ruoyi.common.enums.LarkActiveStageEnum; import com.ruoyi.common.enums.LarkActiveStageEnum;
import com.ruoyi.common.enums.LarkUserTypeEnum; import com.ruoyi.common.enums.LarkUserTypeEnum;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.flyingbook.CosHelper.CosHelper; import com.ruoyi.flyingbook.CosHelper.CosHelper;
import com.ruoyi.flyingbook.LarkHelper.LarkTableSheetHelper;
import com.ruoyi.flyingbook.LarkHelper.LarkUserHelper; import com.ruoyi.flyingbook.LarkHelper.LarkUserHelper;
import com.ruoyi.flyingbook.domain.LarkActive; import com.ruoyi.flyingbook.domain.LarkActive;
import com.ruoyi.flyingbook.domain.LarkLoginLog; import com.ruoyi.flyingbook.domain.LarkLoginLog;
import com.ruoyi.flyingbook.domain.LarkUserActiveImage; import com.ruoyi.flyingbook.domain.LarkUserActiveImage;
import com.ruoyi.flyingbook.domain.LarkUserActiveRelatoin; import com.ruoyi.flyingbook.domain.LarkUserActiveRelatoin;
import com.ruoyi.flyingbook.domain.edi.ResponseVo; import com.ruoyi.flyingbook.domain.edi.ResponseVo;
import com.ruoyi.flyingbook.domain.lark.LarkTableSheetRequest;
import com.ruoyi.flyingbook.domain.lark.LarkUserRequest; import com.ruoyi.flyingbook.domain.lark.LarkUserRequest;
import com.ruoyi.flyingbook.domain.larkactive.*; import com.ruoyi.flyingbook.domain.larkactive.*;
import com.ruoyi.flyingbook.mapper.LarkActiveMapper; import com.ruoyi.flyingbook.mapper.LarkActiveMapper;
@ -37,6 +42,7 @@ import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -63,6 +69,8 @@ public class LarkUserActiveRelatoinServiceImpl implements ILarkUserActiveRelatoi
private ILarkUserActiveInviteRelatoinService larkUserActiveInviteRelatoinService; private ILarkUserActiveInviteRelatoinService larkUserActiveInviteRelatoinService;
@Autowired @Autowired
private LarkUserHelper larkUserHelper; private LarkUserHelper larkUserHelper;
@Autowired
private LarkTableSheetHelper larkTableSheetHelper;
private static final String BUCKET_NAME = "ruoyi-1308275795"; private static final String BUCKET_NAME = "ruoyi-1308275795";
@ -300,6 +308,108 @@ public class LarkUserActiveRelatoinServiceImpl implements ILarkUserActiveRelatoi
return responseVo; return responseVo;
} }
@Override
public void syncSheet(String appId, String appSecret) {
Map<String,String> relationMap = new HashMap<>();
syncSheetDetail(appId,appSecret,"LDGnspdy1hYJawtjUOCcXVTZnuc",LarkActiveEnum.AI,relationMap);
syncSheetDetail(appId,appSecret,"LDGnspdy1hYJawtjUOCcXVTZnuc",LarkActiveEnum.INFORMATION_SECURITY,relationMap);
}
private void syncSheetDetail(String appId, String appSecret, String spreadsheetToken, LarkActiveEnum active,Map<String,String> relationMap){
try {
List<LarkActive> larkActives = larkActiveMapper.selectLarkActiveByDesc(active.getCode(), FlagStatus.OK.getCode());
if (CollectionUtils.isEmpty(larkActives)) {
return;
}
Long activeId = larkActives.get(0).getId();
LarkUserRequest larkUserRequest = new LarkUserRequest(appId, appSecret);
LarkTableSheetRequest larkTableSheetRequest = new LarkTableSheetRequest(appId, appSecret, spreadsheetToken);
QuerySpreadsheetSheetRespBody spreadsheets = larkTableSheetHelper.getSpreadsheets(larkTableSheetRequest);
Sheet[] sheets = spreadsheets.getSheets();
if (sheets != null && sheets.length > 0){
Sheet sheet = sheets[0];
larkTableSheetRequest.setSheetId(sheet.getSheetId());
List<String> userIdList = larkTableSheetHelper.getSpreadsheetDetails(larkTableSheetRequest).stream()
.filter(r -> {
String mid = String.valueOf(r);
return !mid.equals("[null]");
})
.map(r -> {
return String.valueOf(r).replace("[", "").replace("]", "").replace("\"", "");
})
.distinct()
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(userIdList)){
return;
}
List<String> openIdList = new ArrayList<>();
for (String userId : userIdList) {
try {
String midOpenId = relationMap.get(userId);
if (StringUtils.isNotBlank(midOpenId)){
openIdList.add(midOpenId);
}else {
larkUserRequest.setOpenId(userId);
GetUserRespBody userInfoDetail = larkUserHelper.getUserInfo(larkUserRequest);
String openId = userInfoDetail.getUser().getOpenId();
openIdList.add(openId);
relationMap.put(userId, openId);
}
if(openIdList.size() == 200){
syncTable(openIdList,activeId);
openIdList = new ArrayList<>();
}
} catch (Exception e) {
log.info("syncSheetDetail error userId:{}", userId, e);
}
}
if(CollectionUtils.isNotEmpty(openIdList)){
syncTable(openIdList,activeId);
}
}
}catch (Exception e){
log.info("syncSheetDetail error", e);
}
}
private void syncTable(List<String> openIdList,Long activeId){
try {
Map<String, LarkUserActiveRelatoin> relationMap = larkUserActiveRelatoinMapper.queryByOpenIdList(openIdList, activeId).stream()
.collect(Collectors.toMap(LarkUserActiveRelatoin::getUserName, Function.identity(), (k1, k2) -> k1));
List<Long> waitUpdateList = new ArrayList<>();
Set<String> inviteOpenIdSet = new HashSet<>();
for (String openId : openIdList) {
LarkUserActiveRelatoin activeRelatoin = relationMap.get(openId);
inviteOpenIdSet.add(openId);
if (activeRelatoin == null) {
LarkUserActiveRelatoin relatoin = new LarkUserActiveRelatoin();
relatoin.setCreateTime(new Date());
relatoin.setCreateBy("system");
relatoin.setActiveStage(LarkActiveStageEnum.ADJUST.getCode());
relatoin.setFlag(FlagStatus.OK.getCode());
relatoin.setActiveId(activeId);
relatoin.setUserName(openId);
relatoin.setCompanyName("安克");
larkUserActiveRelatoinMapper.insertLarkUserActiveRelatoin(relatoin);
} else {
if (!LarkActiveStageEnum.ADJUST.getCode().equals(activeRelatoin.getActiveStage())) {
waitUpdateList.add(activeRelatoin.getActiveId());
}
}
}
if (CollectionUtils.isNotEmpty(inviteOpenIdSet)) {
larkUserActiveInviteRelatoinService.inviteSuccess(new ArrayList<>(inviteOpenIdSet));
}
if (CollectionUtils.isNotEmpty(waitUpdateList)) {
larkUserActiveRelatoinMapper.updateByIdList(waitUpdateList, LarkActiveStageEnum.ADJUST.getCode());
}
}catch (Exception e){
log.info("syncTable error",e);
}
}
@Override @Override
public void submit(List<LarkActiveImportVo> list, String appId, String appSecret) { public void submit(List<LarkActiveImportVo> list, String appId, String appSecret) {
LarkUserRequest larkUserRequest = new LarkUserRequest(appId, appSecret); LarkUserRequest larkUserRequest = new LarkUserRequest(appId, appSecret);

@ -60,7 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="queryByInviteList" resultType="com.ruoyi.flyingbook.domain.LarkUserActiveInviteRelatoin"> <select id="queryByInviteList" resultType="com.ruoyi.flyingbook.domain.LarkUserActiveInviteRelatoin">
<include refid="selectLarkUserActiveInviteRelatoinVo"/> <include refid="selectLarkUserActiveInviteRelatoinVo"/>
WHERE invite_stage = #{inviteStage} and flag = #{flag} WHERE invite_stage = #{inviteStage} and flag = #{flag}
and invite_user_name in (<foreach collection="inviteList" open="(" separator="," close=")" item="item">#{item}</foreach>) and invite_user_name in <foreach collection="inviteList" open="(" separator="," close=")" item="item">#{item}</foreach>
</select> </select>
<insert id="insertLarkUserActiveInviteRelatoin" parameterType="com.ruoyi.flyingbook.domain.LarkUserActiveInviteRelatoin" useGeneratedKeys="true" keyProperty="id"> <insert id="insertLarkUserActiveInviteRelatoin" parameterType="com.ruoyi.flyingbook.domain.LarkUserActiveInviteRelatoin" useGeneratedKeys="true" keyProperty="id">

Loading…
Cancel
Save