Commit f88bd79a by root

Merge branch 'bugfix_0426_share_time' into test_branch

parents cca5378b ebf637b6
......@@ -69,7 +69,19 @@ public class GroupChatDTO implements Serializable {
private int hmAddStatus = 1 ;
private String chatRemark ;
private int initFlag ;
private String clerkRelationExcel;
public String getClerkRelationExcel() {
if (clerkRelationFlag == 0){
clerkRelationExcel="未关联";
}else {
clerkRelationExcel="已关联";
}
return clerkRelationExcel;
}
public void setClerkRelationExcel(String clerkRelationExcel) {
this.clerkRelationExcel = clerkRelationExcel;
}
public int getInitFlag() {
return initFlag;
}
......
package com.gic.haoban.manage.api.dto.content;
import java.io.Serializable;
import java.util.List;
/**
* @Author MUSI
* @Date 2023/4/26 1:57 PM
* @Description
* @Version
**/
public class MaterialConvertDTO implements Serializable {
private String enterpriseId;
private String wxEnterpriseId;
private String qrCodeUrl;
private List<String> imageUrls;
// 素材类型, 1文本, 2图片, 3网页, 4视频, 5文件,6小程序
private int materialType;
// 1群发 2朋友圈
private int mediaType ;
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getQrCodeUrl() {
return qrCodeUrl;
}
public void setQrCodeUrl(String qrCodeUrl) {
this.qrCodeUrl = qrCodeUrl;
}
public List<String> getImageUrls() {
return imageUrls;
}
public void setImageUrls(List<String> imageUrls) {
this.imageUrls = imageUrls;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public int getMaterialType() {
return materialType;
}
public void setMaterialType(int materialType) {
this.materialType = materialType;
}
public int getMediaType() {
return mediaType;
}
public void setMediaType(int mediaType) {
this.mediaType = mediaType;
}
}
......@@ -195,6 +195,7 @@ public interface ExternalClerkRelatedApiService {
com.gic.api.base.commons.ServiceResponse<Boolean> isQwFriend(String enterpriseId, String staffId, String memberId) ;
/**
*
* @param enterpriseId
......@@ -204,10 +205,8 @@ public interface ExternalClerkRelatedApiService {
*/
com.gic.api.base.commons.ServiceResponse<Boolean> isQwFriendWithUnionId(String enterpriseId, String clerkId, String unionId) ;
//无效接口
// com.gic.api.base.commons.ServiceResponse<String> getExternalUseridForWxa(String enterpriseId, String staffId, String memberId) ;
List<String> listMemberAndClerk(List<String> memberIdList , List<String> clerkIdList , String enterpriseId) ;
List<String> listMemberAndStaff(List<String> memberIdList , String StaffId , String enterpriseId) ;
/**
* 批量查询会员与导购好友关系
......
......@@ -146,14 +146,7 @@ public interface MemberUnionidRelatedApiService {
ExternalUserDTO getCorpSelfExternalUseridInfoForMember(String wxEnterpriseId, String wxUserId, String externalUserId,String enterpriseId);
/**
* 添加企微好友关联关系表-无需触达
*
* @param dto
* @return
*/
String addExternal(ExternalUserDTO dto);
public String dealMergeForReflsh(ExternalUserDTO externalUserDTO, String wxEnterpriseId , String staffId) ;
/**
* 获取客户详情-第三方
*
......
package com.gic.haoban.manage.api.service.content;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.content.MaterialConvertDTO;
import com.gic.haoban.manage.api.dto.content.log.ClerkShareMaterialLogDTO;
import java.util.List;
/**
* @Author MUSI
* @Date 2023/3/18 8:20 PM
......@@ -19,4 +22,12 @@ public interface MaterialShareLogApiService {
* @return
*/
ServiceResponse<Long> saveClerkShareMaterialLog(ClerkShareMaterialLogDTO clerkShareMaterialLogDTO);
/**
* 转换素材id
* @param materialConvertDTO
* @return
*/
ServiceResponse<List<String>> convertMaterialId(MaterialConvertDTO materialConvertDTO);
}
......@@ -186,7 +186,7 @@ public interface PreDealLogMapper {
* @param relationKey
* @return
*/
TabHaobanPreDealLog getByRelationKey(@Param("taskId") String taskId, @Param("dataType") int dataType, @Param("relationKey") String relationKey);
List<TabHaobanPreDealLog> getByRelationKey(@Param("taskId") String taskId, @Param("dataType") int dataType, @Param("relationKey") String relationKey);
/**
* 校验任务
......
......@@ -365,7 +365,7 @@ public interface TabHaobanExternalClerkRelatedMapper {
@Param("staffId") String staffId);
List<String> listMemberAndClerk(@Param("memberIdList")List<String> memberIdList, @Param("clerkIdList")List<String> clerkIdList, @Param("enterpriseId")String enterpriseId);
int getCountExternalClerk(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId,
@Param("statusFlags") List<Integer> statusFlags);
......@@ -373,7 +373,9 @@ public interface TabHaobanExternalClerkRelatedMapper {
int getCountByMemberId(@Param("memberId") String memberId);
void updateClerkInfo(@Param("staffId")String staffId, @Param("oldClerkId")String oldClerkId, @Param("newClerkId")String newClerkId, @Param("storeId")String storeId);
List<String> listByClerkId(@Param("staffId")String staffId, @Param("clerkId")String clerkId) ;
int updateExternalStatus(@Param("wxEnterpriseId")String wxEnterpriseId, @Param("externalUserid")String externalUserid, @Param("status")int status);
/**
......@@ -381,6 +383,8 @@ public interface TabHaobanExternalClerkRelatedMapper {
*/
TabHaobanExternalClerkRelated getMemberForExternalId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("externalUserId") String externalUserId);
List<String> listMemberAndStaff(@Param("memberIdList")List<String> memberIdList, @Param("staffId")String staffId, @Param("enterpriseId")String enterpriseId);
/**
* 查询成员的好友列表
......
......@@ -8,8 +8,12 @@ import java.util.Set;
public interface ClerkMainStoreRelatedService {
void setMainStore(String staffId, String storeId, String wxEnterpriseId);
// 自动刷新好友列表
void reflushExternal(String wxEnterpriseId ,String staffId) ;
TabHaobanClerkMainStoreRelated selectByWxEnterpriseIdAndStoreId(String staffId, String wxEnterpriseId);
TabHaobanClerkMainStoreRelated selectStaffMainStore(String staffId, String wxEnterpriseId);
/**
* 获取主门店 如果没有主门店设置主门店
......
......@@ -173,7 +173,7 @@ public interface PreDealService {
* @param relationKey
* @return
*/
public TabHaobanPreDealLog getByRelationKey(String taskId, Integer dataType, String relationKey);
public List<TabHaobanPreDealLog> getByRelationKey(String taskId, Integer dataType, String relationKey);
/**
* 获取任务是否有在同步中 好友
......
......@@ -42,11 +42,16 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe
@Autowired
private StaffService staffService;
@Override
public TabHaobanClerkMainStoreRelated selectByWxEnterpriseIdAndStoreId(String staffId, String wxEnterpriseId) {
return mapper.selectByWxEnterpriseIdAndStoreId(staffId, wxEnterpriseId, null);
}
@Override
public TabHaobanClerkMainStoreRelated selectStaffMainStore(String staffId, String wxEnterpriseId) {
return mapper.selectByWxEnterpriseIdAndStoreId(staffId, wxEnterpriseId, null);
}
@Override
public void setMainStore(String staffId, String storeId, String wxEnterpriseId) {
......@@ -55,7 +60,6 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe
logger.info("区经无需设置主门店:{}", staffId);
return;
}
String uuId = com.gic.haoban.common.utils.StringUtil.randomUUID();
Date now = new Date();
TabHaobanClerkMainStoreRelated t = new TabHaobanClerkMainStoreRelated();
......@@ -68,9 +72,10 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe
t.setFreshFriendFlag(1);
t.setClerkMainStoreRelatedId(uuId);
mapper.insert(t);
logger.info("切换主门店-刷新企业微信好友:{},{}", staffId, storeId);
//主门店切换需要刷新企业微信好友
}
@Override
public void reflushExternal(String wxEnterpriseId ,String staffId) {
TabHaobanStaff staff = staffService.selectById(staffId);
if (staff == null) {
logger.info("员工不存在:{}", staffId);
......@@ -79,21 +84,16 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe
String taskName = "自动刷新企业微信好友(" + staff.getStaffName() + ")";
String taskId = dealSyncOperationApiService.createWxFriendTaskSingle(wxEnterpriseId, taskName, staffId, staff.getStaffName(), SyncTaskTypeEnum.FRIEND_SINGLE.getType());
if (StringUtils.isBlank(taskId)) {
logger.info("刷新好友失败或正在刷新:{},{}", staffId, storeId);
logger.info("刷新好友失败或正在刷新:{},{}", staffId);
return;
}
dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId);
logger.info("任务id:{}", taskId);
logger.info("开始自动刷新好友任务id={},staffId={}", taskId,staffId);
}
@Override
public TabHaobanClerkMainStoreRelated getMainStoreByStaffId(String staffId, String wxEnterpriseId) {
TabHaobanClerkMainStoreRelated mainStoreRelated = mapper.selectByWxEnterpriseIdAndStoreId(staffId, wxEnterpriseId, null);
if (null != mainStoreRelated) {
return mainStoreRelated;
}
return setStaffMainStore(staffId, wxEnterpriseId, null);
return this.getMainStoreByStaffId(staffId, wxEnterpriseId,null);
}
@Override
......
......@@ -164,7 +164,7 @@ public class PreDealServiceImpl implements PreDealService {
}
@Override
public TabHaobanPreDealLog getByRelationKey(String taskId, Integer dataType, String relationKey) {
public List<TabHaobanPreDealLog> getByRelationKey(String taskId, Integer dataType, String relationKey) {
return preDealLogMapper.getByRelationKey(taskId, dataType, relationKey);
}
......
......@@ -23,9 +23,10 @@ public class ClerkMainStoreRelatedApiServiceImpl implements ClerkMainStoreRelate
@Override
public void setMainStore(String staffId, String storeId, String wxEnterpriseId) {
TabHaobanClerkMainStoreRelated related = clerkMainStoreRelatedService.selectByWxEnterpriseIdAndStoreId(staffId, wxEnterpriseId);
TabHaobanClerkMainStoreRelated related = clerkMainStoreRelatedService.selectStaffMainStore(staffId, wxEnterpriseId);
if (related == null) {
clerkMainStoreRelatedService.setMainStore(staffId, storeId, wxEnterpriseId);
this.clerkMainStoreRelatedService.setMainStore(staffId, storeId, wxEnterpriseId);
this.clerkMainStoreRelatedService.reflushExternal(wxEnterpriseId, staffId);
} else if (null != related && (!related.getStoreId().equals(storeId))) {
related.setStatusFlag(0);
related.setUpdateTime(new Date());
......
......@@ -488,8 +488,8 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
// }
@Override
public List<String> listMemberAndClerk(List<String> memberIdList, List<String> clerkIdList, String enterpriseId) {
List<String> list = tabHaobanExternalClerkRelatedMapper.listMemberAndClerk(memberIdList, clerkIdList, enterpriseId);
public List<String> listMemberAndStaff(List<String> memberIdList, String staffId, String enterpriseId) {
List<String> list = tabHaobanExternalClerkRelatedMapper.listMemberAndStaff(memberIdList, staffId, enterpriseId);
return list;
}
......
......@@ -15,6 +15,7 @@ import com.gic.haoban.manage.api.dto.CommonMQDTO;
import com.gic.haoban.manage.api.service.HaobanCommonMQApiService;
import com.gic.haoban.manage.service.service.StaffDepartmentRelatedService;
import com.gic.haoban.manage.service.service.WelcomeSendService;
import com.gic.member.api.service.MemberOpenCardBusinessService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.quartz.api.dto.QuartzTaskDTO;
import com.gic.quartz.api.service.QuartzService;
......@@ -32,6 +33,8 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
private StaffDepartmentRelatedService staffDepartmentRelatedService;
@Autowired
private WelcomeSendService welcomeSendService;
@Autowired
private MemberOpenCardBusinessService memberOpenCardBusinessService ;
@Override
public void putCommonMessage(CommonMQDTO dto) {
......@@ -74,6 +77,13 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
if (StringUtils.isNotBlank(staffId)) {
this.staffDepartmentRelatedService.repairStaffDepart(staffId);
}
break ;
case 3:
String memberId = map.get("memberId") ;
enterpriseId = map.get("enterpriseId") ;
String clerkId = map.get("clerkId") ;
this.memberOpenCardBusinessService.memberClerkByQywx(enterpriseId, memberId, clerkId);
break ;
default:
break;
}
......
......@@ -204,23 +204,25 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
logger.info("该导购已经被被申请绑定,请审核处理后再绑定");
return ServiceResponse.failure("4", "该导购已经被被申请绑定,请审核处理后再绑定");
}
List<AuditDTO> list = auditApiService.listByStoreId(staffClerkRelationDTO.getStoreId());
if (CollectionUtils.isNotEmpty(list)) {
Set<String> staffIds = list.stream().map(AuditDTO::getCommitStaffId).collect(Collectors.toSet());
if (staffIds.contains(staffId)) {
logger.info("该成员已经已经在该门店下申请了绑定,请审核处理后再绑定");
return ServiceResponse.failure("5", "该成员已经已经在该门店下申请了绑定,请审核处理后再绑定");
if (manageFlag == null || manageFlag == 0) {
List<AuditDTO> list = auditApiService.listByStoreId(staffClerkRelationDTO.getStoreId());
if (CollectionUtils.isNotEmpty(list)) {
Set<String> staffIds = list.stream().map(AuditDTO::getCommitStaffId).collect(Collectors.toSet());
if (staffIds.contains(staffId)) {
logger.info("该成员已经已经在该门店下申请了绑定,请审核处理后再绑定");
return ServiceResponse.failure("5", "该成员已经已经在该门店下申请了绑定,请审核处理后再绑定");
}
}
StaffClerkRelationDTO storeHasBind = staffClerkRelationService.getOneBindByStoreId(staffId, staffClerkRelationDTO.getStoreId());
if (storeHasBind != null) {
logger.info("该导购已在该门店下有其它成员绑定");
return ServiceResponse.failure("3", "该导购已在该门店下有其它成员绑定");
}
List<StaffClerkRelationDTO> staffClerkRelationDTOS = staffClerkRelationService.listManageBindByStaffId(staffId);
if (CollectionUtils.isNotEmpty(staffClerkRelationDTOS)) {
logger.info("该导购已绑定区经,不允许绑定导购");
return ServiceResponse.failure("3", "该导购已绑定区经,不允许绑定导购");
}
}
StaffClerkRelationDTO storeHasBind = staffClerkRelationService.getOneBindByStoreId(staffId, staffClerkRelationDTO.getStoreId());
if (storeHasBind != null) {
logger.info("该导购已在该门店下有其它成员绑定");
return ServiceResponse.failure("3", "该导购已在该门店下有其它成员绑定");
}
List<StaffClerkRelationDTO> staffClerkRelationDTOS = staffClerkRelationService.listManageBindByStaffId(staffId);
if (CollectionUtils.isNotEmpty(staffClerkRelationDTOS)) {
logger.info("该导购已绑定区经,不允许绑定导购");
return ServiceResponse.failure("3", "该导购已绑定区经,不允许绑定导购");
}
return null;
}
......@@ -545,11 +547,11 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
// 导购门店转移
private void moveOrAddClerk(ClerkSyncQDTO clerkSyncQDTO, StaffClerkRelationDTO oldRelationDTO) {
boolean flag = false;
/* boolean flag = false;
if (null != RedisUtil.getCache("clerkMoveFlag2022")) {
flag = true;
}
if (flag) {
if (flag) {*/
String oldClerkId = oldRelationDTO.getClerkId();
this.staffClerkRelationService.delBind(oldClerkId, "-1", ChannelCodeEnum.SYNC_UNBIND.getCode(), clerkSyncQDTO.getClerkId(),oldRelationDTO.getWxEnterpriseId());
// 设置新的ID
......@@ -559,16 +561,21 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
logger.info("绑定结果正常:{},{}", JSONObject.toJSONString(response), oldRelationDTO.getClerkId());
if (response == null) {
this.staffClerkRelationService.insert(oldRelationDTO);
logger.info("换门店后,查询主门店,newClerkId={}",oldRelationDTO.getStaffId());
// 设置主门店
List<StaffClerkRelationDTO> relationList = this.listByStaffId(oldRelationDTO.getWxEnterpriseId(), oldRelationDTO.getStaffId()) ;
List<String> storeIdList = relationList.stream().map(o->o.getStoreId()).collect(Collectors.toList()) ;
this.clerkMainStoreRelatedService.getMainStoreByStaffId(oldRelationDTO.getStaffId(), oldRelationDTO.getWxEnterpriseId(), storeIdList) ;
}
} else {
/*} else {
String oldClerkId = oldRelationDTO.getClerkId();
this.staffClerkRelationService.delBind(oldClerkId, "-1", ChannelCodeEnum.SYNC_UNBIND.getCode(), null,null);
// 设置新的ID
oldRelationDTO.setClerkId(clerkSyncQDTO.getClerkId());
oldRelationDTO.setStoreId(clerkSyncQDTO.getStoreId());
ServiceResponse resp = this.bindStaffClerk(oldRelationDTO, "-1", ChannelCodeEnum.SYNC_BIND.getCode());
logger.info("绑定结果正常:{},{}", JSONObject.toJSONString(resp), oldRelationDTO.getClerkId());
}
logger.info("绑定结果正常:{},{}", JSONObject.toJSONString(resp), oldRelationDTO.getClerkId());*/
// }
}
@Override
......
......@@ -4,14 +4,20 @@ import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.manage.api.dto.ContentMaterialDTO;
import com.gic.haoban.manage.api.dto.content.MaterialConvertDTO;
import com.gic.haoban.manage.api.dto.content.log.ClerkShareMaterialLogDTO;
import com.gic.haoban.manage.api.dto.content.log.TriggerCustomerDetailLogDTO;
import com.gic.haoban.manage.api.enums.content.ClerkShareMaterialType;
import com.gic.haoban.manage.api.service.MaterialApiService;
import com.gic.haoban.manage.api.service.content.MaterialShareLogApiService;
import com.gic.haoban.manage.service.pojo.bo.content.ClerkShareLogBO;
import com.gic.haoban.manage.service.pojo.bo.content.TriggerCustomerDetailBO;
import com.gic.haoban.manage.service.service.content.ClerkShareLogService;
import com.gic.haoban.manage.service.service.content.TriggerCustomerDetailService;
import com.gic.haoban.manage.service.util.DrawImageUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -19,8 +25,15 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @Author MUSI
......@@ -42,6 +55,10 @@ public class MaterialShareLogApiServiceImpl implements MaterialShareLogApiServic
private ClerkShareLogService clerkShareLogService;
@Autowired
TriggerCustomerDetailService triggerCustomerDetailService;
@Autowired
EnterpriseService enterpriseService;
@Autowired
MaterialApiService materialApiService;
@Override
......@@ -90,4 +107,66 @@ public class MaterialShareLogApiServiceImpl implements MaterialShareLogApiServic
}
return ServiceResponse.success(logId);
}
/**
* 转换素材id
*
* @param materialConvertDTO
* @return
*/
@Override
public ServiceResponse<List<String>> convertMaterialId(MaterialConvertDTO materialConvertDTO) {
EnterpriseDTO enterpriseDTO = enterpriseService.getEnterpriseById(materialConvertDTO.getEnterpriseId());
if (enterpriseDTO == null) {
return ServiceResponse.failure("-701", "企业不存在");
}
ByteArrayOutputStream byteArrayOutputStream = null;
try {
URL url = new URL(materialConvertDTO.getQrCodeUrl());
InputStream inputStream = url.openStream();
byteArrayOutputStream = cloneInputStream(inputStream);
}catch (Exception ex) {
log.info("获取二维码流对象异常 qrCodeUrl:{}", materialConvertDTO.getQrCodeUrl());
return ServiceResponse.failure("-701", "系统异常");
}
if (byteArrayOutputStream == null) {
return ServiceResponse.success();
}
ByteArrayOutputStream finalByteArrayOutputStream = byteArrayOutputStream;
List<String> imageUrls = materialConvertDTO
.getImageUrls()
.parallelStream()
.map(item -> DrawImageUtils.addWater(enterpriseDTO.getFactoryCode(), item, new ByteArrayInputStream(finalByteArrayOutputStream.toByteArray())))
.collect(Collectors.toList());
List<String> materialIds = imageUrls.parallelStream()
.map(item -> {
ContentMaterialDTO contentMaterialDTO = new ContentMaterialDTO();
contentMaterialDTO.setMaterialType(materialConvertDTO.getMaterialType());
contentMaterialDTO.setImgUrl(item);
contentMaterialDTO.setMediaType(materialConvertDTO.getMediaType());
ServiceResponse<String> serviceResponse = materialApiService.getMaterialId(materialConvertDTO.getWxEnterpriseId(), contentMaterialDTO);
if (serviceResponse.isSuccess()) {
return serviceResponse.getResult();
}
return null;
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
return ServiceResponse.success(materialIds);
}
private static ByteArrayOutputStream cloneInputStream(InputStream input) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = input.read(buffer)) > -1) {
baos.write(buffer, 0, len);
}
baos.flush();
return baos;
} catch (Exception e) {
return null;
}
}
}
......@@ -56,7 +56,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("dealParamMqDTO={},dataPre={}", JSON.toJSONString(dealParamMqDTO), JSON.toJSONString(dataPre));
logger.info("刷新好友列表(7-8),dealParamMqDTO={},dataPre={}", JSON.toJSONString(dealParamMqDTO), JSON.toJSONString(dataPre));
String reason = "";
boolean dealFlag = true;
try {
......@@ -82,7 +82,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
return;
}
if (CollectionUtils.isEmpty(selfUserIdList)) {
logger.info("改用户没有外部联系人:{}", JSONObject.toJSONString(dataPre));
logger.info("该用户无代开外部联系人:{}", JSONObject.toJSONString(dataPre));
dealFlag = false;
reason = "该用户没有外部联系人";
return;
......@@ -100,7 +100,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
return;
}
if (CollectionUtils.isEmpty(userIdList)) {
logger.info("该用户没有外部联系人2:{}", JSONObject.toJSONString(dataPre));
logger.info("该用户无第三方外部联系人:{}", JSONObject.toJSONString(dataPre));
dealFlag = false;
reason = "该用户没有外部联系人";
return;
......
......@@ -51,7 +51,7 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("同步好友开始,自建代开发={}", JSONObject.toJSONString(dataPre));
logger.info("刷新好友列表7,代开发={}", JSONObject.toJSONString(dataPre));
String reason = "成功";
boolean dealFlag = true;
try {
......@@ -60,10 +60,10 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
String staffId = dataPre.getpDataId() ;
String taskId = dealParamMqDTO.getTaskId();
String externalUserId = dataPre.getDataContent();
// 查询企微侧外部联系人详情
ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getCorpSelfExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
if (externalUserDTO == null) {
logger.info("外部联系人好友不存在:{}", JSONObject.toJSONString(dataPre));
logger.info("代开发外部联系人详情查询失败,staffId={},{},{}", staffId,wxUserId,externalUserId);
dealException(taskId, dataPre.getDataId(), null, "好友不存在");
return;
}
......@@ -74,13 +74,11 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
json.put("avatar", externalUserDTO.getAvatar());
json.put("externalUserId", externalUserDTO.getExternalUserId());
json.put("addCreateTime", externalUserDTO.getAddCreateTime());
//relationkey
logger.info("生成relationKey:{},{},{}",staffId,externalUserDTO.getName(),externalUserDTO.getAddCreateTime());
String relationKey = SecureUtil.md5(staffId + "_" + externalUserDTO.getName() + "_" + externalUserDTO.getAddCreateTime());
logger.info("relationKey:{},{}", relationKey, externalUserDTO.getExternalUserId());
String str = staffId + "_" + externalUserDTO.getName() + "_" + externalUserDTO.getAddCreateTime() ;
String relationKey = SecureUtil.md5(str);
logger.info("生成代开发relationKey={},staff={},{}",relationKey,staffId,str);
//更新状态
preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, json.toJSONString(), relationKey , PreDealTypeEnum.self_friend.getVal());
this.preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, json.toJSONString(), relationKey , PreDealTypeEnum.self_friend.getVal());
dealSuccess(taskId, dataPre.getDataId(), null, wxEnterpriseId);
} catch (WxApiLimitException e) {
logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre));
......
......@@ -5,15 +5,27 @@ import com.gic.thirdparty.cloudfile.CloudFileUtil;
import com.gic.thirdparty.cloudfile.enums.CloudFileBusinessOptEnum;
import com.gic.thirdparty.cloudfile.enums.CloudFileTypeEnum;
import com.gic.thirdparty.cloudfile.pojo.CloudFileInfo;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.tencentcloudapi.tcm.v20210413.models.IstioConfig;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ResourceUtils;
import org.springframework.util.StopWatch;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URL;
import java.util.Random;
/**
......@@ -99,15 +111,123 @@ public class DrawImageUtils {
return null;
}
public static void main(String[] args) {
static InputStream inputStream = null;
static {
try {
URL url = new URL("https://gicinner-1251519181.cos.ap-shanghai.myqcloud.com/image/material_content-80819999f96f448d9fcccb5ac86e6c37.png");
inputStream = url.openStream();
} catch (Exception ex) {
}
}
/***
* 二维码合成
* 1、先获取图片的宽高
* 2、如果图片高度大于2000,则按最大高度2000,宽度等比处理
* 3、图片与二维码按照750:136比例显示
*
* 位置距离右边20px,底部20px
*/
public static String addWater(String factoryCode, String url, InputStream qrCodeStream) {
// 读取原图片信息
//文件转化为图片
try {
StopWatch stopWatch = new StopWatch();
stopWatch.start("下载图片");
long startTime = System.currentTimeMillis();
Image srcImg = ImageIO.read(new URL(url));
stopWatch.stop();
//获取图片的宽
int srcImgWidth = srcImg.getWidth(null);
//获取图片的高
int srcImgHeight = srcImg.getHeight(null);
log.info("图片宽度:{}, 图片高度:{}", srcImgHeight, srcImgHeight);
BufferedImage bufImg = null;
if (srcImgHeight > 2000) {
log.info("原图片高度超过2000 高度:{}, 等比压缩", srcImgHeight);
// 按高度等比压缩
int tempWidth = BigDecimal.valueOf(srcImgWidth)
.multiply(BigDecimal.valueOf(2000).divide(BigDecimal.valueOf(srcImgHeight), 2, RoundingMode.HALF_DOWN))
.intValue();
log.info("压缩后的宽:{}", tempWidth);
srcImgHeight = 2000;
srcImgWidth = tempWidth;
}
bufImg = resize(srcImg, srcImgHeight, srcImgWidth, false);
Graphics2D g = bufImg.createGraphics();
//使用工具类生成二维码
stopWatch.start("处理二维码");
Image image = ImageIO.read(qrCodeStream);
//将小图片绘到大图片上,500,300 .表示你的小图片在大图片上的位置。
int qrCodeHeight = image.getHeight(null);
int qrCodeWidth = image.getWidth(null);
log.info("二维码图片宽度:{},高度:{}", qrCodeWidth, qrCodeHeight);
int qrCodeWidthTemp = srcImgWidth * 136 / 750;
log.info("二维码计算后的宽度 {}", qrCodeWidthTemp);
BufferedImage qrCodeImage = resize(image, qrCodeWidthTemp, qrCodeWidthTemp, true);
stopWatch.stop();
stopWatch.start("合成图片");
g.drawImage(qrCodeImage, srcImgWidth - (qrCodeWidthTemp + 20), srcImgHeight - (qrCodeWidthTemp + 20), null);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(bufImg, "png", bos);
g.dispose();
byte[] bytes = bos.toByteArray();
log.info("合成之后的大小 {}", bytes.length);
CloudFileInfo cloudFileInfo = CloudFileUtil.uploadFile(bytes, "png", CloudFileTypeEnum.IMAGE, factoryCode, CloudFileBusinessOptEnum.HAOBAN_COMMON);
log.info("上传图片结果:{}", JSON.toJSONString(cloudFileInfo));
stopWatch.stop();
log.info("处理耗时: {}", stopWatch.prettyPrint());
long endTime = System.currentTimeMillis();
log.info("合成图片耗时 {} 秒", (endTime - startTime) / 1000);
if (cloudFileInfo != null) {
return cloudFileInfo.getOrgFileUrl();
}
}catch (Exception ex) {
log.info("处理图片发生异常", ex);
}
return url;
}
public static BufferedImage resize(Image img, int h, int w, boolean clip) throws IOException {
//参数是TYPE_3BYTE_BGR时,图片最清晰!
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_4BYTE_ABGR);
//留一个像素的空白区域,这个很重要,画圆的时候把这个覆盖
Graphics graphics = image.getGraphics();
if (clip) {
int border = 1;
//图片是一个圆型
Ellipse2D.Double shape = new Ellipse2D.Double(border, border, h - border * 2, w - border * 2);
//需要保留的区域
graphics.setClip(shape);
}
// 绘制缩小后的图像
graphics.drawImage(img, 0, 0, w, h, null);
graphics.dispose();
return image;
}
public static void main(String[] args) throws Exception {
try {
URL url = new URL("https://gicinner-1251519181.cos.ap-shanghai.myqcloud.com/image/material_content-80819999f96f448d9fcccb5ac86e6c37.png");
inputStream = url.openStream();
} catch (Exception ex) {
}
//String url = "https://jhdm-1251519181.cos.ap-shanghai.myqcloud.com/image/material_content-7c3bc8061ffb4e2694c0e288a1ce176b.jpeg?imageView2/format/jpg/q/50";
String url = "https://newdmwltest-1251519181.cos.ap-shanghai.myqcloud.com/image/material_content-bd89447576b5438d8045def2da2c4c0f.jpg?imageView2/format/jpg/q/50";
System.setProperty("gic.module.name", "haoban-manage3-service");
Random random = new Random();
String url = DrawImageUtils.drawImage("jhdm", Math.abs(random.nextInt(1000)) + "",
Math.abs(random.nextInt(1000)) + "万", DrawBkgImg.AREA_MONTH_BKG);
System.out.println(url);
String temp = DrawImageUtils.drawImage("jhdm", Math.abs(random.nextInt(1000)) + "",
Math.abs(random.nextInt(1000)) + "万", DrawBkgImg.CLERK_MONTH_BKG);
System.out.println(temp);
DrawImageUtils.addWater("jhdm", url, inputStream);
// Random random = new Random();
// String url = DrawImageUtils.drawImage("jhdm", Math.abs(random.nextInt(1000)) + "",
// Math.abs(random.nextInt(1000)) + "万", DrawBkgImg.AREA_MONTH_BKG);
// System.out.println(url);
//
// String temp = DrawImageUtils.drawImage("jhdm", Math.abs(random.nextInt(1000)) + "",
// Math.abs(random.nextInt(1000)) + "万", DrawBkgImg.CLERK_MONTH_BKG);
// System.out.println(temp);
}
}
......@@ -745,6 +745,13 @@
and status_flag in (1,3,4)
</update>
<select id="listByClerkId" resultType="String">
select member_id from tab_haoban_external_clerk_related
where staff_id = #{staffId}
and clerk_id = #{clerkId}
and status_flag = 1
</select>
<update id="updateExternalStatus">
update tab_haoban_external_clerk_related set external_status = #{status} where
external_user_id = #{externalUserid} and wx_enterprise_id = #{wxEnterpriseId}
......@@ -774,4 +781,16 @@
</foreach>
</select>
<select id="listMemberAndStaff" resultType="java.lang.String">
select member_id
from tab_haoban_external_clerk_related
where member_id in
<foreach collection="memberIdList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
and staff_id = #{staffId}
and enterprise_id = #{enterpriseId}
AND status_flag = 1
</select>
</mapper>
\ No newline at end of file
......@@ -374,11 +374,13 @@ public class StaffController extends WebBaseController {
}
}
StoreDTO store = storeService.getStore(clerkInfoVo.getStoreId());
if (null != store) {
if (null != store && store.getStatus() != -3) {
clerkInfoVo.setStoreName(store.getStoreName());
}
});
if (manageFlag == null || manageFlag != 1) {
retList = retList.stream().filter(o->StringUtils.isNotEmpty(o.getStoreName())).collect(Collectors.toList()) ;
}
}
}
return resultResponse(HaoBanErrCode.ERR_1, retList);
......
package com.gic.haoban.manage.web.controller.chat;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.ExcelUtils;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO;
import com.gic.haoban.common.utils.AuthWebRequestUtil;
import com.gic.haoban.manage.api.dto.StaffDTO;
......@@ -28,14 +20,29 @@ import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatUserSearchQDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.OwnerSearchQDTO;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.chat.GroupChatApiService;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl;
import com.gic.log.record.anno.GicLogRecord;
import com.gic.log.record.util.GicLogRecordCategoryEnum;
import com.gic.log.record.util.GicLogRecordEvaluationContext;
import com.gic.log.record.util.GicLogRecordOptTypeEnum;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*
*
* @ClassName: GroupChatController
* @Description: 群
* @author xugh
......@@ -52,6 +59,8 @@ public class GroupChatController {
private GroupChatApiService groupChatApiService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private EnterpriseService enterpriseService;
@RequestMapping("get-set-gic-flag")
public RestResponse<Object> getFlag() {
......@@ -63,7 +72,7 @@ public class GroupChatController {
}
/**
*
*
* @Title: save
* @Description: 认领gic
* @author xugh
......@@ -204,5 +213,52 @@ public class GroupChatController {
GicLogRecordEvaluationContext.putOptTargetId(AuthWebRequestUtil.getLoginUser().getClerkId());
return RestResponse.successResult(resp.getResult());
}
/**
* 客户群列表数据明细导出
*/
@RequestMapping("customer-group-export")
public RestResponse<Boolean> customerGroupExport(HttpServletRequest request, HttpServletResponse response,GroupChatSearchQDTO qdto) {
// 登录校验
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
if (loginUser == null || StringUtils.isBlank(loginUser.getEnterpriseId())) {
return RestResponse.failure(Convert.toStr(HaoBanErrCode.ERR_4.getCode()), HaoBanErrCode.ERR_4.getMsg());
}
String sortColumn = qdto.getSortColumn();
if (StringUtils.isBlank(sortColumn)) {
sortColumn = null;
} else if ("totalCount".equals(sortColumn)) {
sortColumn = "total_count";
} else if ("totalMemberCount".equals(sortColumn)) {
sortColumn = "total_member_count";
} else if ("addMemberCount".equals(sortColumn)) {
sortColumn = "add_member_count";
} else if ("addCount".equals(sortColumn)) {
sortColumn = "add_count";
} else if ("quitCount".equals(sortColumn)) {
sortColumn = "quit_count";
} else if ("quitMemberCount".equals(sortColumn)) {
sortColumn = "quit_member_count";
}
BasePageInfo basePageInfo = new BasePageInfo() ;
basePageInfo.setPageNum(1);
basePageInfo.setPageSize(99999);
qdto.setSortColumn(sortColumn);
qdto.setWxEnterpriseId(loginUser.getWxEnterpriseId());
qdto.setEnterpriseId(loginUser.getEnterpriseId());
ServiceResponse<Page<GroupChatDTO>> page = this.groupChatApiService.listPage(qdto, basePageInfo);
if (page.isSuccess() && CollUtil.isNotEmpty(page.getResult().getResult())){
String fileName = "客户群列表数据";
List<String> titleList = Arrays.asList("客户群ID", "客户群名称", "群人数", "群客户数", "新增总数", "流失总数","群主","群主在好办小程序关联状态","创建时间");
List<String> fileList = Arrays.asList("groupChatId", "name", "totalCount", "totalMemberCount", "addCount", "quitCount", "staffName", "clerkRelationExcel", "createTime");
try {
ExcelUtils.xls(response, request, fileName, page.getResult().getResult(), fileList, titleList);
} catch (Exception e) {
e.printStackTrace();
logger.info("导出失败");
}
return RestResponse.successResult(true);
}
return RestResponse.successResult(false);
}
}
......@@ -186,9 +186,13 @@ public class WxStaffController extends WebBaseController {
List<StaffVO> resultList = new ArrayList<>();
for (StaffDTO staffDTO : resultlist) {
String enterpriseId = staffDTO.getEnterpriseId();
long memberCount = distributeApiService.getClerkMemberCount(enterpriseId, staffDTO.getClerkId(), storeId);
logger.info("【获取会员数】enterpriseId={},clerkId={},storeId={},memberCount={}", enterpriseId,
staffDTO.getClerkId(), storeId, memberCount);
String staffClerkId = staffDTO.getClerkId() ;
ClerkDTO clerk = this.clerkService.getclerkById(staffClerkId) ;
if(null != clerk) {
staffDTO.setStaffName(clerk.getClerkName());
}
long memberCount = customerApiService.countMember(enterpriseId, storeId, staffDTO.getClerkId());
logger.info("【获取会员数】enterpriseId={},clerkId={},storeId={},memberCount={}", enterpriseId, staffDTO.getClerkId(), storeId, memberCount);
staffDTO.setMemberCount(Convert.toInt(memberCount, 0));
resultList.add(EntityUtil.changeEntityNew(StaffVO.class, staffDTO));
}
......@@ -631,15 +635,7 @@ public class WxStaffController extends WebBaseController {
@HttpLimit
@RequestMapping("/check-main-store")
public HaobanResponse checkMainStore(String staffId, String storeId, String wxEnterpriseId, String dateStr) {
StaffDTO staff = staffApiService.selectById(staffId);
Date curDate = new Date();
if (staff == null) {
return resultResponse(HaoBanErrCode.ERR_10006);
}
// 给测试使用
if (StringUtils.isNotBlank(dateStr)) {
curDate = cn.hutool.core.date.DateUtil.parse(dateStr);
}
int i = cn.hutool.core.date.DateUtil.weekOfYear(curDate);
String key = "haoban_set_main_store_" + i + ":" + staffId;
Object hasSet = RedisUtil.getCache(key);
......
......@@ -16,7 +16,9 @@ import com.gic.content.api.service.ContentColumnApiService;
import com.gic.content.api.service.ContentMaterialApiService;
import com.gic.content.api.service.ContentMaterialShareApiService;
import com.gic.haoban.common.utils.EntityUtil;
import com.gic.haoban.manage.api.dto.content.MaterialConvertDTO;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.content.MaterialShareLogApiService;
import com.gic.haoban.manage.web.controller.content.adaptor.ClerkStoreAdaptor;
import com.gic.haoban.manage.web.controller.goods.GoodsInfoAdaptor;
import com.gic.haoban.manage.web.qo.content.ContentColumnClerkViewQO;
......@@ -25,6 +27,7 @@ import com.gic.haoban.manage.web.qo.content.ContentMaterialShareQO;
import com.gic.haoban.manage.web.vo.content.ContentColumnInfoVO;
import com.gic.haoban.manage.web.vo.content.ContentMaterialInfoVO;
import com.gic.haoban.manage.web.vo.content.ContentMaterialShareInfoVO;
import com.gic.haoban.manage.web.vo.content.MaterialConvertVO;
import com.gic.haoban.manage.web.vo.content.SimpleGoodsInfoVO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -44,7 +47,6 @@ import java.util.stream.Collectors;
/**
* 好办-素材中心(二期)
*
*/
@RestController
public class ContentMaterialController {
......@@ -61,6 +63,8 @@ public class ContentMaterialController {
private ClerkStoreAdaptor clerkStoreAdaptor;
@Autowired
private GoodsInfoAdaptor goodsInfoAdaptor;
@Autowired
MaterialShareLogApiService materialShareLogApiService;
/**
......@@ -152,6 +156,7 @@ public class ContentMaterialController {
/**
* 对象转换
*
* @param goodsShowStatus
* @param item
* @return
......@@ -233,4 +238,15 @@ public class ContentMaterialController {
return RestResponse.successResult();
}
@RequestMapping(path = "/share-convert")
public RestResponse<?> shareConvert(@RequestBody MaterialConvertVO materialConvertVO) {
MaterialConvertDTO materialConvertDTO = new MaterialConvertDTO();
BeanUtils.copyProperties(materialConvertVO, materialConvertDTO);
ServiceResponse<List<String>> serviceResponse = materialShareLogApiService.convertMaterialId(materialConvertDTO);
if (!serviceResponse.isSuccess()) {
return RestResponse.failure(serviceResponse.getCode(), serviceResponse.getMessage());
}
return RestResponse.successResult(serviceResponse.getResult());
}
}
package com.gic.haoban.manage.web.vo.content;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Author MUSI
* @Date 2023/4/26 2:15 PM
* @Description
* @Version
**/
@Data
public class MaterialConvertVO implements Serializable {
private String enterpriseId;
private String wxEnterpriseId;
private String qrCodeUrl;
private List<String> imageUrls;
// 素材类型, 1文本, 2图片, 3网页, 4视频, 5文件,6小程序
private int materialType;
// 1群发 2朋友圈
private int mediaType ;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment