Commit 955f4603 by 徐高华

Merge branch 'feature-canvas'

# Conflicts:
#	haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/dao/mapper/TabHaobanExternalClerkRelatedMapper.java
#	haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/out/impl/ExternalClerkRelatedApiServiceImpl.java
parents f1d812ca 46172f03
......@@ -49,6 +49,23 @@ public class ExternalUserClerkDTO implements Serializable {
return externalStatus;
}
// 外部联系人ID状态1正常, 3单向好友
private Integer externalStatus ;
public Integer getExternalStatus() {
if(null == externalStatus) {
return 1;
}
if(externalStatus != 3) {
return 1;
}
return externalStatus;
}
public void setExternalStatus(Integer externalStatus) {
this.externalStatus = externalStatus;
}
public String getMemberId() {
return memberId;
}
......
......@@ -8,7 +8,7 @@ public class CommonMQDTO implements Serializable {
* @Fields serialVersionUID : TODO(用一句话描述这个变量表示什么)
*/
private static final long serialVersionUID = -5681421708810402425L;
// 1删除日报定时 2无部门成员修复
// 1删除日报定时 2无部门成员修复 3 通知会员好友关系 4社群终止 5 刷新社群群发结果
private int type;
private Object params;
......
......@@ -6,7 +6,7 @@ public class ContentMaterialDTO implements Serializable {
private static final long serialVersionUID = -8114034921530488238L;
// 素材类型, 1文本, 2图片, 3网页, 4视频, 5文件,6小程序
// 素材类型, 1文本, 2图片, 3网页, 4视频, 5文件,6小程序 7 卡券
private int materialType;
private String imgUrl;
......@@ -19,6 +19,70 @@ public class ContentMaterialDTO implements Serializable {
*/
private String videoImgUrl;
private String appid ;
private int type ;
private String materialTitle ;
private String link ;
private String materialDesc;
/**
* 画布-群发-卡券素材ID
*/
private String canvasCouponUUID ;
public String getCanvasCouponUUID() {
return canvasCouponUUID;
}
public void setCanvasCouponUUID(String canvasCouponUUID) {
this.canvasCouponUUID = canvasCouponUUID;
}
public String getMaterialDesc() {
return materialDesc;
}
public void setMaterialDesc(String materialDesc) {
this.materialDesc = materialDesc;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getMaterialTitle() {
return materialTitle;
}
public void setMaterialTitle(String materialTitle) {
this.materialTitle = materialTitle;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public int getMediaType() {
return mediaType;
}
......
......@@ -37,6 +37,16 @@ public class StaffClerkRelationDTO implements Serializable {
private Integer manageFlag;
private Integer clerkType;
private String staffHeadImg ;
public String getStaffHeadImg() {
return staffHeadImg;
}
public void setStaffHeadImg(String staffHeadImg) {
this.staffHeadImg = staffHeadImg;
}
public String getQwUserId() {
return qwUserId;
}
......
......@@ -131,6 +131,19 @@ public class WxEnterpriseDTO implements Serializable {
*/
private Integer callbackFlag;
/**
* 是否开启微信托管-自动发送
*/
private Boolean isOpenQywxAutoSend ;
public Boolean getOpenQywxAutoSend() {
return isOpenQywxAutoSend;
}
public void setOpenQywxAutoSend(Boolean openQywxAutoSend) {
isOpenQywxAutoSend = openQywxAutoSend;
}
public Integer getCallbackFlag() {
return callbackFlag;
}
......
......@@ -22,6 +22,15 @@ public class ChatOwnerTotalDTO implements Serializable {
private int notSendCount;
// 计划状态 1进行中 2已结束
private int planStatus;
private int execType ;
public int getExecType() {
return execType;
}
public void setExecType(int execType) {
this.execType = execType;
}
public int getPlanStatus() {
return planStatus;
......
......@@ -62,6 +62,16 @@ public class GroupChatPlanDTO implements Serializable {
private int sendAllFlag ;
// 所有的群发条件
private String allSearchParams ;
// 执行方式 0企微1好办小程序
private int execType ;
public int getExecType() {
return execType;
}
public void setExecType(int execType) {
this.execType = execType;
}
public String getAllSearchParams() {
return allSearchParams;
......
......@@ -39,6 +39,25 @@ public class GroupChatPlanOwnerLogDTO implements Serializable{
private String msgid ;
private Date expireDate ;
private Date sendTime ;
private int execType ;
private Date dataGetTime ;
public Date getDataGetTime() {
return dataGetTime;
}
public void setDataGetTime(Date dataGetTime) {
this.dataGetTime = dataGetTime;
}
public int getExecType() {
return execType;
}
public void setExecType(int execType) {
this.execType = execType;
}
public Date getStartTime() {
return startTime;
}
......
......@@ -78,9 +78,22 @@ public class NoticeMessageInfoDTO implements Serializable {
private String pageType;
/**
* 关联的具体业务消息id
*/
private String relationId;
/**
*/
private static final long serialVersionUID = 1L;
public String getRelationId() {
return relationId;
}
public void setRelationId(String relationId) {
this.relationId = relationId;
}
public String getPageType() {
return pageType;
}
......
......@@ -15,7 +15,7 @@ public class GroupChatPlanSearchQDTO implements Serializable {
private String searchParams;
// 1进行中、2未开始、3已结束
private Integer status;
// 群主 0发送失败 1待发送 2已发送
// 群主 0发送失败 1待发送 2已发送 3放弃 30(失败+放弃)
private Integer sendStatus ;
// 群名称
private String chatName ;
......
......@@ -38,6 +38,17 @@ public class GroupChatSearchQDTO extends PageQo implements Serializable {
private String wxChatId ;
private String searchPage ;
// 查询放弃群的过滤时间
private Date giveUpStartTime ;
public Date getGiveUpStartTime() {
return giveUpStartTime;
}
public void setGiveUpStartTime(Date giveUpStartTime) {
this.giveUpStartTime = giveUpStartTime;
}
public String getSearchPage() {
return searchPage;
}
......
......@@ -35,6 +35,13 @@ public enum NoticeMessageTypeEnum {
CLERK_TASK_SEND_NOTICE(2014, "导购任务通知", NoticeMessageCategoryTypeEnum.TASK.getType(), "clerk_task_send_notice", "/pages/route/index?pageType=", "hbapp_guide_task_detail", "clerk_task_send_notice", "haobanNotice"),
GROUP_CHAT_PLAN(2015, "社群群发任务通知", NoticeMessageCategoryTypeEnum.TASK.getType(), "haobanGroupChatPlan", "/pages/route/index?pageType=", "hbapp_canvas_group_send", "haobanGroupChatPlan", "haobanNotice"),
MASS_GROUP_SEND_PLAN(2016, "客户群发任务通知", NoticeMessageCategoryTypeEnum.TASK.getType(), "haobanMassGroupSendPlan", "/pages/route/index?pageType=", "hbapp_canvas_custom_send", "haobanMassGroupSendPlan", "haobanNotice"),
TEL_TASK_CANVAS(2017, "话务任务通知", NoticeMessageCategoryTypeEnum.TASK.getType(), "haobanTelTaskCanvas", "/pages/route/index?pageType=", "hbapp_canvas_task", "haobanTelTaskCanvas", "haobanNotice"),
HB_TASK_TO_DO_LIST_NOTICE(2018, "任务执行提醒", NoticeMessageCategoryTypeEnum.TASK.getType(), "haobanTaskTodoNotice", "/pages/route/index?pageType=", "", "haobanTaskTodoNotice", "haobanNotice"),
STORE_ACCOUNT(3001, "账号申请", NoticeMessageCategoryTypeEnum.OTHER.getType(), "store_account", "/pages/route/index?pageType=", "store_relate_store_record_list", "accountApplication", "haobanNotice"),
//
MEMBER_FACE(3002, "账号申请", NoticeMessageCategoryTypeEnum.OTHER.getType(), "member_face", "/pages/route/index?pageType=", "hbapp_customer_edit_tag", "", "haobanNotice"),
......
......@@ -6,7 +6,10 @@ public enum PlanSendStatusEnum {
TO_BE_SEND(1, "待发送"),
SENDED(2, "禁用");
SENDED(2, "已发送"),
GIVE_UP(3, "放弃");
private int code;
private String name;
......
package com.gic.haoban.manage.api.qdto;
import java.io.Serializable;
public class CanvasInfoQDTO implements Serializable {
private Long canvasId ;
private Long nodeId ;
private Long execLogId ;
private String clerkId ;
private Long taskTime ;
public Long getCanvasId() {
return canvasId;
}
public void setCanvasId(Long canvasId) {
this.canvasId = canvasId;
}
public Long getNodeId() {
return nodeId;
}
public void setNodeId(Long nodeId) {
this.nodeId = nodeId;
}
public Long getExecLogId() {
return execLogId;
}
public void setExecLogId(Long execLogId) {
this.execLogId = execLogId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public Long getTaskTime() {
return taskTime;
}
public void setTaskTime(Long taskTime) {
this.taskTime = taskTime;
}
}
package com.gic.haoban.manage.api.qdto;
import java.io.Serializable;
import java.util.Date;
public class StaffSendResultQDTO implements Serializable {
private String wxEnterpriseId ;
private String staffId ;
private Long planId ;
/**
* 发送失败原因,为空是成功
*/
private String failRemark ;
/**
* 发送时间
*/
private Date sendTime ;
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public Long getPlanId() {
return planId;
}
public void setPlanId(Long planId) {
this.planId = planId;
}
public String getFailRemark() {
return failRemark;
}
public void setFailRemark(String failRemark) {
this.failRemark = failRemark;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
}
......@@ -6,6 +6,10 @@ public class CombinedQDTO implements Serializable {
private static final long serialVersionUID = -28454620622119889L;
/**
* 企业id
*/
private String enterpriseId;
/**
* 主图url
*/
private String imageUrl;
......@@ -27,11 +31,16 @@ public class CombinedQDTO implements Serializable {
private String lineTwo;
/**
* 1群发 2朋友圈
* 1群发 2朋友圈 3合成图片
*/
private Integer mediaType;
/**
* 额外参数
*/
private String extend = "";
/**
* 导购id(作标识)
*/
private String clerkId;
......@@ -41,6 +50,14 @@ public class CombinedQDTO implements Serializable {
*/
private String businessId;
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getImageUrl() {
return imageUrl;
}
......@@ -89,8 +106,16 @@ public class CombinedQDTO implements Serializable {
this.mediaType = mediaType;
}
public String getExtend() {
return extend;
}
public void setExtend(String extend) {
this.extend = extend;
}
public String getUnionString() {
return this.getImageUrl() + this.getQrCodeUrl() + this.getShowStyle() + this.getLineOne() + this.getLineTwo() + this.getMediaType();
return this.getImageUrl() + this.getQrCodeUrl() + this.getShowStyle() + this.getLineOne() + this.getLineTwo() + this.getMediaType() + this.getExtend();
}
public String getClerkId() {
......
......@@ -363,5 +363,13 @@ public interface ExternalClerkRelatedApiService {
*/
public com.gic.api.base.commons.ServiceResponse<MemberGroupFriendDTO> memberIsAddClerk(String enterpriseId, String memberId) ;
/**
* 获取好友数据
* @param memberId
* @param storeId
* @param clerkId
* @return
*/
int getFriendNum(String memberId , String storeId , String clerkId) ;
}
......@@ -139,4 +139,16 @@ public interface HaobanTimerApiService {
* @param params
*/
void groupChatActivityTime(String params);
/**
* 群群发获取msgid
* @param params
*/
void groupChatMsgidTimer(String params) ;
/**
* 取消企微群群发
* @param params
*/
void cancelSendTimer(String params) ;
}
......@@ -3,6 +3,7 @@ package com.gic.haoban.manage.api.service;
import com.gic.api.base.commons.JSONResponse;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.qdto.CanvasInfoQDTO;
import java.util.List;
......@@ -83,6 +84,9 @@ public interface MemberUnionidRelatedApiService {
JSONResponse sendMessageShare(String wxEnterpriseId, String staffId, List<String> extendUserList, String message ,List<ContentMaterialDTO> imgList);
JSONResponse sendMessage(String wxEnterpriseId, String staffId, List<String> extendUserList,
String message , List<ContentMaterialDTO> imageList, String planId , CanvasInfoQDTO canvas) ;
/**
* 创建企业群发, 支出素材批量发送
*
......
......@@ -390,4 +390,7 @@ public interface StaffApiService {
Page<StaffDTO> listByParams(String enterpriseId , String params, String wxEnterpriseId, BasePageInfo pageInfo) ;
void deleteStaff(String enterpriseId , String clerkId) ;
}
......@@ -8,6 +8,7 @@ import com.gic.haoban.manage.api.dto.StaffClerkInfoDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import java.util.List;
import java.util.Map;
import java.util.Set;
public interface StaffClerkRelationApiService {
......@@ -222,4 +223,16 @@ public interface StaffClerkRelationApiService {
List<String> listAllClerkIdsByEnterpriseId(String enterpriseId);
List<String> listAlStoreIdsByEnterpriseId(String enterpriseId);
/**
* 画布查询关联好办的的导购
* @param wxEnterpriseId
* @param enterpriseId
* @param creatorId
* @param storeFilterId
* @return
*/
ServiceResponse<Map<String,List<String>>> listClerkForCanvas(String wxEnterpriseId , String enterpriseId , String creatorId , String storeFilterId) ;
}
......@@ -8,6 +8,9 @@ import com.gic.haoban.manage.api.dto.chat.GroupChatPlanDTO;
import com.gic.haoban.manage.api.dto.chat.GroupChatPlanLogDTO;
import com.gic.haoban.manage.api.dto.chat.GroupChatPlanOwnerLogDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO;
import com.gic.haoban.manage.api.qdto.StaffSendResultQDTO;
import java.util.Date;
/**
*
......@@ -74,4 +77,22 @@ public interface GroupChatPlanApiService {
* @return
*/
public ServiceResponse<Integer> getTotalCount(String enterpriseId,String clerkId,String storeId);
void staffSendResult(StaffSendResultQDTO qdto);
/**
* 获取msgid(非社群群发)
* @return
*/
String getQwMsgId(String staffId , Date sendTime) ;
/**
*
* @param params
*/
void noticeTimer(String params) ;
Integer getTaskNum(String wxEnterpriseId, String enterpriseId, String storeId, String clerkId, String staffId);
}
package com.gic.haoban.manage.api.util.notify;
import com.alibaba.fastjson.JSONObject;
......@@ -27,6 +28,7 @@ public class NoticeMessageUtil {
private static final Logger logger = getLogger(NoticeMessageUtil.class);
//com.gic.haoban.manage.api.service.notify.NoticeMessageApiService#run
private static final String NOTICE_MESSAGE = "haobanNoticeMessage";
private static final String NOTICE_MESSAGE_BATCH = "haobanNoticeMessageBatch";
......
......@@ -457,4 +457,5 @@ public interface TabHaobanExternalClerkRelatedMapper {
* @param memberId
*/
TabHaobanExternalClerkRelated isClerkFriend(@Param("enterpriseId")String enterpriseId, @Param("clerkId")String clerkId, @Param("memberId")String memberId);
int getFriendNum(@Param("memberId")String memberId, @Param("storeId")String storeId, @Param("clerkId")String clerkId);
}
\ No newline at end of file
......@@ -125,6 +125,8 @@ public interface TabHaobanStaffClerkRelationMapper {
List<String> listAllClerkIdsByEnterpriseId(@Param("enterpriseId") String enterpriseId);
List<String> listAlStoreIdsByEnterpriseId(@Param("enterpriseId") String enterpriseId);
/**
* 根据staffId查询gic品牌id
* @param wxEnterpriseId 企业微信id
......
......@@ -29,6 +29,12 @@ public interface GroupChatPlanOwnerLogMapper {
public TabGroupChatPlanOwnerLog selectById(Long ownerLogId);
/**
* 放弃
* @param id
*/
void giveUp(@Param("id")Long id) ;
public void updateSendCount(@Param("id") Long id, @Param("sendCount") int sendCount,
@Param("failCount") int failCount, @Param("sendTime") Date sendTime);
......@@ -53,4 +59,22 @@ public interface GroupChatPlanOwnerLogMapper {
* @return
*/
Integer getTotalCount(@Param("enterpriseId")String enterpriseId,@Param("clerkId")String clerkId,@Param("storeId")String storeId);
void updateExecType(@Param("planId")Long planId , @Param("execType")int execType) ;
List<GroupChatPlanOwnerLogDTO> listForMsgid() ;
List<GroupChatPlanOwnerLogDTO> listForCancelSend() ;
void updateMsgid(@Param("id")Long id , @Param("msgid")String msgid) ;
void staffSendResult(@Param("staffId")String staffId, @Param("planId")Long planId, @Param("sendTime")Date sendTime, @Param("failRemark")String failRemark , @Param("statusFlag")int statusFlag);
int getTotalTask(@Param("enterpriseId")String enterpriseId , @Param("clerkId")String clerkId , @Param("time")Date time ) ;
int getInvalidTask(@Param("enterpriseId")String enterpriseId , @Param("clerkId")String clerkId , @Param("time")Date time ) ;
int getOverdueTask(@Param("enterpriseId")String enterpriseId , @Param("clerkId")String clerkId , @Param("time")Date time ) ;
int getTaskNum(@Param("enterpriseId")String enterpriseId, @Param("clerkId")String clerkId, @Param("storeId")String storeId, @Param("staffId")String staffId);
}
\ No newline at end of file
......@@ -39,6 +39,8 @@ public interface WxUserAddLogMapper {
*/
public List<TabWxUserAddLog> listAllForDel(String externalUserid);
TabWxUserAddLog getForTask(@Param("externalUserid") String externalUserid) ;
/**
*
* @Title: selectNewLog
......
......@@ -32,6 +32,7 @@ public class TabMaterialContent implements Serializable {
private java.util.Date createTime;
/**修改时间*/
private java.util.Date updateTime;
// 1群发 2朋友圈
private int mediaType ;
/**
......@@ -39,6 +40,36 @@ public class TabMaterialContent implements Serializable {
*/
private String videoImgUrl;
private String appid ;
private String materialTitle ;
private String link ;
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getMaterialTitle() {
return materialTitle;
}
public void setMaterialTitle(String materialTitle) {
this.materialTitle = materialTitle;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public int getMediaType() {
return mediaType;
}
......
......@@ -58,6 +58,17 @@ public class TabGroupChatPlan implements Serializable {
// 所有的群发条件
private String allSearchParams ;
// 执行方式 0企微1好办小程序
private int execType ;
public int getExecType() {
return execType;
}
public void setExecType(int execType) {
this.execType = execType;
}
public String getAllSearchParams() {
return allSearchParams;
}
......
......@@ -34,6 +34,24 @@ public class TabGroupChatPlanOwnerLog implements Serializable {
private Integer doneFlag;
private Integer deleteFlag;
private Date sendTime;
private int execType ;
private Date dataGetTime ;
public Date getDataGetTime() {
return dataGetTime;
}
public void setDataGetTime(Date dataGetTime) {
this.dataGetTime = dataGetTime;
}
public int getExecType() {
return execType;
}
public void setExecType(int execType) {
this.execType = execType;
}
public Integer getFailCount() {
return failCount;
......
......@@ -57,6 +57,16 @@ public class GroupChatPlanBO implements Serializable{
private int sendAllFlag ;
// 所有的群发条件
private String allSearchParams ;
// 执行方式 0企微1好办小程序
private int execType ;
public int getExecType() {
return execType;
}
public void setExecType(int execType) {
this.execType = execType;
}
public String getAllSearchParams() {
return allSearchParams;
......
......@@ -123,4 +123,14 @@ public interface ExternalClerkRelatedService {
*/
String getMemberIdByExternalId(String wxEnterpriseId,String externalUserId);
/**
* 获取好友数据
* @param memberId
* @param storeId
* @param clerkId
* @return
*/
int getFriendNum(String memberId , String storeId , String clerkId) ;
}
......@@ -57,6 +57,7 @@ public interface MaterialService {
public JSONResponse reUpdalodMetailJson(String materialId,int from) ;
//mediaType1群发 2朋友圈
public List<String> getImageMediaId(String wxEnterpriseId, List<ContentMaterialDTO> imageList, int mediaType) ;
List<MaterialDTO> listContentMaterialByIds(List<String> materialIds,Integer mediaType);
......
......@@ -4,6 +4,7 @@ import java.util.List;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.ContentMaterialDTO;
import com.gic.haoban.manage.api.qdto.CanvasInfoQDTO;
public interface QywxSendService {
......@@ -13,6 +14,7 @@ public interface QywxSendService {
public ServiceResponse<String> sendMessage(String wxEnterpriseId, String staffId, List<String> extendUserList,
List<String> materialIdList , String planId);
/**
* 素材-分享
*/
......@@ -20,6 +22,12 @@ public interface QywxSendService {
List<ContentMaterialDTO> imageList, String message);
/**
* 画布
*/
public ServiceResponse<String> sendMessage(String wxEnterpriseId, String staffId, List<String> extendUserList,
List<ContentMaterialDTO> imageList, String message , String planId , CanvasInfoQDTO canvas);
/**
* 分享朋友圈
*/
public ServiceResponse<String> share(String wxEnterpriseId, List<String> clerkIdList, String message,
......
package com.gic.haoban.manage.service.service;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.service.entity.MemberClerkChatConfig;
import java.util.List;
import java.util.Map;
import java.util.Set;
public interface StaffClerkRelationService {
......@@ -182,6 +184,8 @@ public interface StaffClerkRelationService {
*/
List<String> listAllClerkIdsByEnterpriseId(String enterpriseId);
List<String> listAlStoreIdsByEnterpriseId(String enterpriseId);
/**
* 根据staffId查询gic品牌id
* @param wxEnterpriseId 企业微信id
......@@ -198,4 +202,6 @@ public interface StaffClerkRelationService {
List<String> listAllStaffIdByEnterpriseId(String enterpriseId,String wxEnterpriseId);
List<String> listAllStaffIdForOpenStaff(String enterpriseId,String wxEnterpriseId,String clerkId , List<String> storeIdList);
ServiceResponse<Map<String, List<String>>> listClerkForCanvas(String wxEnterpriseId, String enterpriseId, String creatorId, String storeFilterId);
}
......@@ -15,7 +15,7 @@ public interface GroupChatPlanOwnerLogService {
public void batchAdd(String staffIdList, TabGroupChatPlan entity);
public void update(TabGroupChatPlanOwnerLog entity);
public boolean update(TabGroupChatPlanOwnerLog entity);
public void deleteByStaffIds(Long planId, String delStaffIds);
......
......@@ -5,7 +5,11 @@ import com.gic.api.base.commons.Page;
import com.gic.haoban.manage.api.dto.chat.GroupChatPlanDTO;
import com.gic.haoban.manage.api.dto.chat.GroupChatPlanLogDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO;
import com.gic.haoban.manage.api.qdto.StaffSendResultQDTO;
import com.gic.haoban.manage.service.pojo.bo.chat.GroupChatPlanBO;
import com.gic.haoban.manage.service.service.content.impl.GroupMessageServiceImpl;
import java.util.Date;
public interface GroupChatPlanService {
......@@ -29,4 +33,17 @@ public interface GroupChatPlanService {
public void updateRemark(GroupChatPlanDTO dto);
void groupChatMsgidTimer(String params);
void cancelSendTimer(String params);
void staffSendResult(StaffSendResultQDTO qdto);
void stopByMsgid(Long planId);
String getQwMsgId(String staffId , Date sendTime, GroupMessageServiceImpl.GroupMsgChatType groupMsgChatType) ;
void noticeTimer(String params);
Integer getTaskNum(String wxEnterpriseId, String enterpriseId, String storeId, String clerkId, String staffId);
}
\ No newline at end of file
......@@ -128,34 +128,40 @@ public class GroupChatPlanOwnerLogServiceImpl implements GroupChatPlanOwnerLogSe
log.setUpdateTime(new Date());
log.setSendCount(0);
log.setStaffId(staffId);
log.setExecType(entity.getExecType());
logList.add(log);
}
this.groupChatPlanOwnerLogMapper.batchInsert(logList);
}
@Override
public void update(TabGroupChatPlanOwnerLog entity) {
public boolean update(TabGroupChatPlanOwnerLog entity) {
String staffId = entity.getStaffId();
TabHaobanClerkMainStoreRelated mainStore = this.clerkMainStoreRelatedService.getMainStoreByStaffId(staffId,
entity.getWxEnterpriseId());
boolean flag = true ;
if (null == mainStore) {
entity.setRemark("区经/未配置主门店");
flag = false ;
} else {
String storeId = mainStore.getStoreId();
StaffClerkRelationDTO clerk = this.staffClerkRelationService.getOneBindByStoreId(staffId, storeId);
if (null != clerk) {
if (!clerk.getEnterpriseId().equals(entity.getEnterpriseId())) {
entity.setRemark("主门店不在任务商户下");
flag = false ;
} else {
entity.setClerkId(clerk.getClerkId());
entity.setStoreId(mainStore.getStoreId());
}
} else {
entity.setRemark("无关联导购");
flag = false ;
logger.info("导购关联数据不存在,staffid={},storeid={}", staffId, mainStore.getStoreId());
}
}
this.groupChatPlanOwnerLogMapper.update(entity);
return flag ;
}
@Override
......@@ -196,6 +202,14 @@ public class GroupChatPlanOwnerLogServiceImpl implements GroupChatPlanOwnerLogSe
qdto.setClerkId(qdto.getSearchClerkId());
}
}
if(clerkType > 1) {
storeId = qdto.getStoreId() ;
clerkId = null;
qdto.setClerkId(null);
if (StringUtils.isNotBlank(qdto.getSearchClerkId())) {
qdto.setClerkId(qdto.getSearchClerkId());
}
}
qdto.setStoreId(storeId);
PageHelper.startPage(basePageInfo);
List<ChatOwnerTotalDTO> list = this.groupChatPlanOwnerLogMapper.listOwnerLogPageForWxaTotal(qdto);
......
......@@ -19,6 +19,7 @@ import com.gic.haoban.manage.service.service.hm.HmClerkRelationService;
import com.gic.haoban.manage.service.service.hm.HmLinkService;
import com.gic.haoban.manage.service.service.hm.HmQrcodeService;
import com.gic.haoban.manage.service.service.hm.WxUserAddLogService;
import com.gic.haoban.task.api.service.TelTaskApiService;
import com.gic.member.api.dto.es.MemberDataDTO;
import com.gic.member.tag.api.dto.MemberTagDTO;
import com.gic.member.tag.api.dto.MemberTagItemDTO;
......@@ -49,6 +50,8 @@ public class WxUserAddLogServiceImpl implements WxUserAddLogService {
private MemberTagApiService memberTagApiService;
@Autowired
private HmClerkRelationService hmClerkRelationService;
@Autowired
private TelTaskApiService telTaskApiService;
@Override
public void save(WxUserAddLogQDTO qdto) {
......@@ -158,6 +161,13 @@ public class WxUserAddLogServiceImpl implements WxUserAddLogService {
entity.setFriendStoreId(qdto.getFriendStoreId());
entity.setDelType(qdto.getDelType());
entity.setDelIsSingle(qdto.getDelIsSingle());
if(null != qdto.getAddWay() && qdto.getAddWay().equals(202) && null != entity.getMemberId()) {
TabWxUserAddLog delUser = this.wxUserAddLogMapper.getForTask(externalUserid) ;
if(null != delUser && null != delUser.getStoreId() && delUser.getStoreId().equals(entity.getStoreId())) {
String overClerkId = delUser.getClerkId() ;
this.telTaskApiService.distributeTask(qdto.getEnterpriseId(), overClerkId , Arrays.asList(entity.getMemberId()), entity.getClerkId());
}
}
this.wxUserAddLogMapper.insert(entity);
}catch(Exception e) {
log.info("异常",e);
......
......@@ -592,4 +592,9 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
public String getMemberIdByExternalId(String wxEnterpriseId, String externalUserId) {
return this.mapper.getMemberIdByExternalId(wxEnterpriseId,externalUserId);
}
@Override
public int getFriendNum(String memberId, String storeId, String clerkId) {
return this.mapper.getFriendNum(memberId,storeId,clerkId);
}
}
......@@ -8,10 +8,16 @@ import java.util.stream.Collectors;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.HttpClient;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.manage.service.util.ApolloUtils;
import com.gic.haoban.manage.api.qdto.combined.CombinedQDTO;
import com.gic.haoban.manage.service.context.combined.ImageCombined;
import com.gic.redis.data.util.RedisUtil;
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 org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger;
......@@ -48,6 +54,8 @@ public class MaterialServiceImpl implements MaterialService {
@Autowired
private WxEnterpriseService wxEnterpriseService ;
@Autowired
private EnterpriseService enterpriseService;
@Autowired
private QywxSuiteApiService qywxSuiteApiService ;
@Autowired
private Config config;
......@@ -141,7 +149,7 @@ public class MaterialServiceImpl implements MaterialService {
Integer materialType = materialDTO.getMaterialType();
String madiaId = materialDTO.getMediaId();
//需要上传的类型
List<Integer> typeList = Arrays.asList(2, 4, 5, 6);
List<Integer> typeList = Arrays.asList(2, 4, 5, 6 , 7);
if (typeList.contains(materialType)) {
madiaId = this.reUpdalodMetail(materialId,from);
}
......@@ -201,7 +209,7 @@ public class MaterialServiceImpl implements MaterialService {
if (type == 5) {
fileType = QywxMediaTypeEnum.FILE;
url = old.getLink();
} else if (type == 6) {
} else if (type == 6 || type ==7) {
fileType = QywxMediaTypeEnum.IMAGE;
url = old.getImgUrl();
}
......@@ -299,7 +307,12 @@ public class MaterialServiceImpl implements MaterialService {
imageList.forEach(dto -> {
String imageUrl = dto.getImgUrl();
int type = dto.getMaterialType();
String md5 = Md5Util.MD5(imageUrl);
String md5 = null ;
if(type==7) {
md5 = Md5Util.MD5(imageUrl + type + dto.getCanvasCouponUUID()+dto.getMaterialTitle());
}else {
md5 = Md5Util.MD5(imageUrl+type);
}
TabMaterialContent tab = this.materialContentMapper.selectByUrl(wxEnterpriseId, md5, mediaType);
if (null != tab) {
Integer materialType = tab.getMaterialType();
......@@ -318,6 +331,12 @@ public class MaterialServiceImpl implements MaterialService {
tab.setMediaType(mediaType);
tab.setWxEnterpriseId(wxEnterpriseId);
tab.setVideoImgUrl(dto.getVideoImgUrl());
tab.setAppid(dto.getAppid());
tab.setMaterialTitle(dto.getMaterialTitle());
tab.setLink(dto.getLink());
if(type==7) {
tab.setLink(dto.getCanvasCouponUUID());
}
this.materialContentMapper.insert(tab);
materialIdList.add(id);
}
......@@ -372,11 +391,26 @@ public class MaterialServiceImpl implements MaterialService {
arr = imageUrl.split("/");
}
JSONResponse json = null;
Integer mediaType = combinedQDTO.getMediaType();
if (Objects.equals(1,mediaType)) {
json = qywxSuiteApiService.uploadMedia(qwDTO.getThirdCorpid(), qwDTO.getSelf3thSecret(), combinedImageData, arr[arr.length - 1], QywxMediaTypeEnum.IMAGE.getCode(), qwDTO.isSelf(), qwDTO.getUrlHost());
}else if (Objects.equals(2,mediaType)) {
json = qywxSuiteApiService.uploadAttachment(qwDTO.getThirdCorpid(), qwDTO.getSelf3thSecret(), combinedImageData, arr[arr.length - 1], QywxMediaTypeEnum.IMAGE.getCode(), qwDTO.isSelf(), qwDTO.getUrlHost());
} else if (Objects.equals(3, mediaType)) {
EnterpriseDTO enterprise = enterpriseService.getEnterpriseById(combinedQDTO.getEnterpriseId());
if (enterprise == null) {
return jsonResponse;
}
CloudFileInfo uploadInfo = CloudFileUtil.uploadFile(combinedImageData, "jpg", CloudFileTypeEnum.IMAGE, enterprise.getFactoryCode(), CloudFileBusinessOptEnum.COMMON) ;
String orgFileUrl = uploadInfo.getOrgFileUrl();
if (StringUtils.isBlank(orgFileUrl)) {
return jsonResponse;
}
json = new JSONResponse();
json.setErrorCode(0);
json.setSuccess(true);
json.setResult(orgFileUrl);
}
return json;
} catch (Exception e) {
......
......@@ -11,7 +11,9 @@ import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.DateUtil;
import com.gic.enterprise.api.service.StoreWidgetService;
import com.gic.haoban.manage.service.entity.*;
import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.collections.CollectionUtils;
......@@ -89,6 +91,10 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
private MemberApiService memberApiService;
@Autowired
private ClerkService clerkService;
@Autowired
private TabHaobanStaffClerkRelationMapper tabHaobanStaffClerkRelationMapper;
@Autowired
private StoreWidgetService storeWidgetService;
@Override
public List<StaffClerkRelationDTO> listBindCode(String wxEnterpriseId, String enterpriseId, Set<String> clerkCodeList) {
......@@ -634,6 +640,11 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
}
@Override
public List<String> listAlStoreIdsByEnterpriseId(String enterpriseId) {
return this.mapper.listAlStoreIdsByEnterpriseId(enterpriseId);
}
@Override
public List<StaffClerkRelationDTO>listByWxEnterpriseIdAndStaffId(String wxEnterpriseId, Set<String> staffIdList) {
return this.mapper.listByWxEnterpriseIdAndStaffId(wxEnterpriseId,staffIdList);
}
......@@ -647,4 +658,18 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
public List<String> listAllStaffIdForOpenStaff(String enterpriseId, String wxEnterpriseId, String clerkId, List<String> storeIdList) {
return this.mapper.listAllStaffIdForOpenStaff(enterpriseId,wxEnterpriseId,clerkId,storeIdList);
}
@Override
public ServiceResponse<Map<String, List<String>>> listClerkForCanvas(String wxEnterpriseId, String enterpriseId, String creatorId, String storeFilterId) {
Map<String,List<String>> map = new HashMap<>() ;
List<String> storeIdList = storeWidgetService.getStoreWidgetStore(storeFilterId, enterpriseId, creatorId, null, 2);
if (CollectionUtils.isEmpty(storeIdList)) {
logger.info("无门店");
return ServiceResponse.success();
}
logger.info("门店筛选器查询结果数量:{}", storeIdList.size());
List<StaffClerkRelationDTO> list = tabHaobanStaffClerkRelationMapper.listByStoreIds(wxEnterpriseId,storeIdList);
map = list.stream().collect(Collectors.groupingBy(StaffClerkRelationDTO::getStoreId,Collectors.mapping(StaffClerkRelationDTO::getClerkId,Collectors.toList()))) ;
return ServiceResponse.success(map) ;
}
}
......@@ -455,7 +455,20 @@ public class NoticeMessageApiServiceImpl implements NoticeMessageApiService {
if (retPage != null && CollectionUtils.isNotEmpty(tPage.getResult())) {
tPage.getResult().forEach(mid -> {
NoticeMessageTypeEnum messageTypeEnum = NoticeMessageTypeEnum.getByType(mid.getMessageType());
if(messageTypeEnum.getMessageCode().equals("haobanTaskTodoNotice")) {
String relationId = mid.getRelationId() ;
if("chat".equals(relationId)) {
mid.setPageType("hbapp_canvas_group_send_list");
}else if("mass".equals(relationId)) {
mid.setPageType("hbapp_canvas_custom_send_list");
}else if("tel".equals(relationId)) {
mid.setPageType("hbapp_canvas_task_list");
}else {
mid.setPageType("workbench");
}
}else {
mid.setPageType(messageTypeEnum.getPageType());
}
});
}
return ServiceResponse.success(tPage);
......
......@@ -39,6 +39,7 @@ import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.haoban.manage.service.service.hm.WxUserAddLogService;
import com.gic.haoban.manage.service.util.EventUtils;
import com.gic.haoban.task.manage.api.service.IMarketTaskMemberApiService;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.dto.MemberSourceDetailDTO;
import com.gic.member.api.dto.MemberSourceShowDTO;
......@@ -106,6 +107,8 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
private ExternalClerkRelatedService externalClerkRelatedService;
@Autowired
private StaffClerkRelationService staffClerkRelationService ;
@Autowired
private IMarketTaskMemberApiService iMarketTaskMemberApiService ;
/**
* 查询会员在企业下的好友关系
......@@ -423,6 +426,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
if(type==0) {
log.info("删除会员,memberId:{}", memberId);
this.tabHaobanExternalClerkRelatedMapper.updateStatusByMemberId(memberId, enterpriseId);
this.iMarketTaskMemberApiService.memberEvent(0,enterpriseId,memberId,null);
}else if(type==1) {
//合并会员,会员会先调删除,在调合并。顺序不能调换
log.info("合并会员,memberId:{},新memberId={}", memberId , mergeMemberId);
......@@ -432,6 +436,7 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
log.info("会员合并 ,更新为企微好友,新memberId:{}", mergeMemberId);
this.memberApiService.updateMemberQywxFlag(enterpriseId, mergeMemberId, 1);
this.staffClerkRelationService.addMemberQywxFlag(enterpriseId,memberId);
this.iMarketTaskMemberApiService.memberEvent(1,enterpriseId,memberId,mergeMemberId);
}
}else if(type==2) {
int m1 = this.tabHaobanExternalClerkRelatedMapper.countByMemberId(memberId, enterpriseId) ;
......@@ -915,4 +920,9 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
}
return com.gic.api.base.commons.ServiceResponse.success(null) ;
}
@Override
public int getFriendNum(String memberId, String storeId, String clerkId) {
return this.externalClerkRelatedService.getFriendNum(memberId,storeId,clerkId);
}
}
......@@ -11,6 +11,7 @@ import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.commons.util.StringUtil;
import com.gic.haoban.manage.api.dto.MemberUnionidWechatAccountQDTO;
import com.gic.haoban.manage.api.service.ExternalClerkRelatedApiService;
import com.gic.haoban.manage.service.service.chat.GroupChatPlanService;
import com.gic.haoban.manage.service.service.role.HaobanMenuService;
import com.gic.haoban.manage.service.util.EventUtils;
import com.gic.member.api.dto.MemberInfoChangeNotifyDTO;
......@@ -56,6 +57,8 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
private HaobanMenuService haobanMenuService ;
@Autowired
private TabHaobanExternalClerkRelatedMapper externalClerkRelatedMapper ;
@Autowired
private GroupChatPlanService groupChatPlanService ;
@Override
public void putCommonMessage(CommonMQDTO dto) {
......@@ -135,6 +138,14 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
String clerkId = map.get("clerkId") ;
this.memberOpenCardBusinessService.memberClerkByQywx(enterpriseId, memberId, clerkId);
break ;
case 4:
Long planId = Long.valueOf(map.get("planId")) ;
this.groupChatPlanService.stopByMsgid(planId);
break ;
case 5 :
Long ownerLogId = Long.valueOf(map.get("ownerLogId")) ;
this.groupChatPlanService.doPlanSendInfo(ownerLogId);
break;
default:
break;
}
......
......@@ -8,9 +8,7 @@ import com.gic.haoban.manage.service.dao.mapper.hm.WxUserAddLogMapper;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.hm.TabWxUserAddLog;
import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.service.chat.GroupChatActivityInviteLogService;
import com.gic.haoban.manage.service.service.chat.GroupChatActivityService;
import com.gic.haoban.manage.service.service.chat.GroupChatDataService;
import com.gic.haoban.manage.service.service.chat.*;
import com.gic.haoban.manage.service.util.DingUtils;
import com.gic.haoban.manage.service.util.HBQwMonitorUtils;
import com.gic.redis.data.util.RedisUtil;
......@@ -24,7 +22,6 @@ import org.springframework.stereotype.Service;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.service.HaobanTimerApiService;
import com.gic.haoban.manage.service.service.chat.GroupChatService;
import com.gic.haoban.manage.service.service.hm.HmQrcodeTempService;
import java.util.*;
......@@ -58,6 +55,8 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
private OpenStaffService openStaffService ;
@Autowired
private GroupChatActivityService groupChatActivityService;
@Autowired
private GroupChatPlanService groupChatPlanService ;
@Override
......@@ -195,4 +194,14 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
public void groupChatActivityTime(String params) {
groupChatActivityService.activityQuartzUpdateStatus();
}
@Override
public void groupChatMsgidTimer(String params) {
this.groupChatPlanService.groupChatMsgidTimer(params) ;
}
@Override
public void cancelSendTimer(String params) {
this.groupChatPlanService.cancelSendTimer(params) ;
}
}
......@@ -5,6 +5,7 @@ import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum;
import com.gic.haoban.manage.api.qdto.CanvasInfoQDTO;
import com.gic.haoban.manage.api.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.service.pojo.GicNewMemberBO;
import com.gic.haoban.manage.service.service.*;
......@@ -1248,6 +1249,13 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
}
@Override
public JSONResponse sendMessage(String wxEnterpriseId, String staffId, List<String> extendUserList, String message, List<ContentMaterialDTO> imageList, String planId, CanvasInfoQDTO canvas) {
log.info("imageList={}",JSONObject.toJSON(imageList));
com.gic.api.base.commons.ServiceResponse<String> resp = this.qywxSendService.sendMessage(wxEnterpriseId, staffId, extendUserList, imageList, message,planId,canvas) ;
return this.retJson(resp) ;
}
@Override
public JSONResponse share(String wxEnterpriseId, List<String> clerkIdList, String message,
List<ContentMaterialDTO> imgList) {
com.gic.api.base.commons.ServiceResponse<String> resp = this.qywxSendService.share(wxEnterpriseId, clerkIdList, message, imgList) ;
......
......@@ -916,6 +916,10 @@ public class StaffApiServiceImpl implements StaffApiService {
boolean isMustReturnStoreIdWhenSuperAdmin, Boolean addUnassignedStore) {
//兼容店长和店员登陆
ClerkDTO clerkDTO = clerkService.getClerkByClerkId(clerkId);
if (clerkDTO == null) {
logger.info("被删除或者冻结:{}", clerkId);
return Collections.singletonList("no_store");
}
if (clerkDTO != null) {
if (clerkDTO.getClerkType() == null || clerkDTO.getClerkType() == 0 || clerkDTO.getClerkType() == 1) {
StoreDTO storeDTO = storeService.getStore(clerkDTO.getStoreId());
......@@ -1539,4 +1543,27 @@ public class StaffApiServiceImpl implements StaffApiService {
List<StaffDTO> pageList = this.staffMapper.listByParams(wxEnterpriseIdList , params) ;
return PageUtil.changePageHelperToCurrentPage(new PageInfo<>(pageList), StaffDTO.class);
}
@Override
public void deleteStaff(String enterpriseId, String clerkId) {
StaffClerkRelationDTO staffDTO = this.staffClerkRelationService.getByClerkId(clerkId) ;
if(null == staffDTO) {
logger.info("没找到成员={}",clerkId);
return ;
}
logger.info("删除企微成员={},{}",clerkId,JSONObject.toJSONString(staffDTO));
String wxEnterpriseId = staffDTO.getWxEnterpriseId() ;
String staffId = staffDTO.getStaffId() ;
TabHaobanStaff staff = this.staffMapper.selectByPrimaryKey(staffId) ;
if(null == staff) {
logger.info("staff无={}",staffId);
return ;
}
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
if(qwDTO.isSelf()) {
this.qywxUserApiService.deleteSelfWorkWxUser(qwDTO.getDkCorpid(), qwDTO.getSelf3thSecret(), staff.getWxUserId(),qwDTO.getUrlHost()) ;
}else {
this.qywxUserApiService.deleteWorkWxUser(qwDTO.getThirdCorpid(), config.getWxSuiteid(), staff.getWxOpenUseId()) ;
}
}
}
......@@ -659,4 +659,14 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
public List<String> listAllClerkIdsByEnterpriseId(String enterpriseId) {
return this.staffClerkRelationService.listAllClerkIdsByEnterpriseId(enterpriseId);
}
@Override
public List<String> listAlStoreIdsByEnterpriseId(String enterpriseId) {
return this.staffClerkRelationService.listAlStoreIdsByEnterpriseId(enterpriseId);
}
@Override
public ServiceResponse<Map<String, List<String>>> listClerkForCanvas(String wxEnterpriseId, String enterpriseId, String creatorId, String storeFilterId) {
return staffClerkRelationService.listClerkForCanvas(wxEnterpriseId,enterpriseId,creatorId,storeFilterId);
}
}
package com.gic.haoban.manage.service.service.out.impl.chat;
import com.gic.haoban.manage.api.qdto.StaffSendResultQDTO;
import com.gic.haoban.manage.service.service.content.impl.GroupMessageServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -23,6 +25,8 @@ import com.gic.haoban.manage.service.pojo.bo.chat.GroupChatPlanBO;
import com.gic.haoban.manage.service.service.chat.GroupChatPlanOwnerLogService;
import com.gic.haoban.manage.service.service.chat.GroupChatPlanService;
import java.util.Date;
@Service("groupChatPlanApiService")
public class GroupChatPlanApiServiceImpl implements GroupChatPlanApiService {
......@@ -108,6 +112,11 @@ public class GroupChatPlanApiServiceImpl implements GroupChatPlanApiService {
Long planId = log.getPlanId() ;
GroupChatPlanBO plan = this.groupChatPlanService.getById(planId) ;
dto.setPlanName(plan.getName());
if(dto.getSendStatus()==1) {
if(plan.getSendFlag()==0 || plan.getEndTime().getTime() < System.currentTimeMillis()) {
dto.setSendStatus(0);
}
}
return ServiceResponse.success(dto);
}
......@@ -168,4 +177,23 @@ public class GroupChatPlanApiServiceImpl implements GroupChatPlanApiService {
return ServiceResponse.success(page);
}
@Override
public void staffSendResult(StaffSendResultQDTO qdto) {
this.groupChatPlanService.staffSendResult(qdto);
}
@Override
public String getQwMsgId(String staffId, Date sendTime) {
return this.groupChatPlanService.getQwMsgId(staffId,sendTime, GroupMessageServiceImpl.GroupMsgChatType.single);
}
@Override
public void noticeTimer(String params) {
this.groupChatPlanService.noticeTimer(params) ;
}
@Override
public Integer getTaskNum(String wxEnterpriseId, String enterpriseId, String storeId, String clerkId, String staffId) {
return this.groupChatPlanService.getTaskNum(wxEnterpriseId,enterpriseId,storeId,clerkId,staffId);
}
}
......@@ -252,5 +252,8 @@
<dubbo:reference id="memberTagEsApiService" interface="com.gic.member.tag.api.service.MemberTagEsApiService" timeout="100000" retries="0" check="false"/>
<dubbo:reference id="memberCrowdApiService" interface="com.gic.member.ext.api.service.MemberCrowdApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference id="coupCardDistributionService" interface="com.gic.marketing.api.service.CoupCardDistributionService" timeout="30000" retries="0" check="false"/>
<dubbo:reference id="enterpriseWxaLinkService" interface="com.gic.enterprise.api.service.EnterpriseWxaLinkService" timeout="30000" retries="0" check="false"/>
<dubbo:reference id="qywxGroupSendCanvasApiService" interface="com.gic.haoban.task.manage.api.service.QywxGroupSendCanvasApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference interface="com.gic.haoban.task.api.service.TelTaskApiService" id="telTaskApiService" timeout="10000" retries="0" check="false" />
<dubbo:reference interface="com.gic.haoban.task.manage.api.service.IMarketTaskMemberApiService" id="iMarketTaskMemberApiService"/>
</beans>
\ No newline at end of file
......@@ -924,6 +924,16 @@
and external_status = 3
</select>
<select id="getFriendNum" resultType="java.lang.Integer">
select count(*) from tab_haoban_external_clerk_related where
member_id = #{memberId} and store_id = #{storeId}
<if test="null != clerkId">
and clerk_id=#{clerkId}
</if>
and status_flag = 1
</select>
<select id="halfFriendPage" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/> from tab_haoban_external_clerk_related
where wx_enterprise_id = #{wxEnterpriseId} and status_flag in (1,3,4)
......
......@@ -14,6 +14,9 @@
<result column="update_time" property="updateTime"/>
<result column="media_type" property="mediaType" />
<result column="video_img_url" property="videoImgUrl" />
<result column="app_id" property="appid" />
<result column="material_title" property="materialTitle" />
<result column="link" property="link" />
</resultMap>
<sql id="Base_Column_List">
material_id,
......@@ -26,7 +29,7 @@
status_flag,
create_time,
update_time , media_type,
video_img_url
video_img_url , app_id , material_title , link
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert" parameterType="com.gic.haoban.manage.service.entity.TabMaterialContent" useGeneratedKeys="true" keyProperty="id">
......@@ -43,7 +46,7 @@
create_time,
update_time ,
media_type,
video_img_url
video_img_url , app_id , material_title , link
)VALUES(
#{materialId,jdbcType=VARCHAR},
#{materialType,jdbcType=INTEGER},
......@@ -54,7 +57,7 @@
#{urlMd5,jdbcType=VARCHAR},
1,
now(),
now() , #{mediaType},#{videoImgUrl}
now() , #{mediaType},#{videoImgUrl} , #{appid} , #{materialTitle} , #{link}
)
]]>
</insert>
......
......@@ -263,7 +263,7 @@
</foreach>
and a.status_flag = 1
group by a.staff_id, a.clerk_id) as scr on scr.staff_id = ecr.staff_id
where ecr.status_flag = 1 AND ecr.`external_status` in (1 , 3)
where ecr.status_flag = 1 AND ecr.`external_status` in (1)
and ecr.enterprise_id = #{enterpriseId,jdbcType=VARCHAR}
and ecr.wx_enterprise_id=#{wxEnterpriseId}
and ecr.member_id in
......@@ -415,7 +415,8 @@
a.update_time updateTime ,
a.manage_flag manageFlag ,
b.wx_user_id qwUserId,
b.wx_open_user_id openUserId
b.wx_open_user_id openUserId ,
b.head_img staffHeadImg
from tab_haoban_staff_clerk_relation a left join tab_haoban_staff b on b.staff_id = a.staff_id
</sql>
......@@ -439,6 +440,12 @@
where a.enterprise_id = #{enterpriseId} and a.status_flag=1 and b.status_flag = 1
</select>
<select id="listAlStoreIdsByEnterpriseId" resultType="java.lang.String">
select distinct(a.store_id) storeId
from tab_haoban_staff_clerk_relation a inner join tab_haoban_staff b on b.staff_id = a.staff_id
where a.enterprise_id = #{enterpriseId} and a.status_flag=1 and b.status_flag = 1
</select>
<select id="listByWxEnterpriseIdAndStaffId" resultType="com.gic.haoban.manage.api.dto.StaffClerkRelationDTO">
select
staff_id staffId,
......
......@@ -316,6 +316,11 @@
<if test="null != startDate">
and a.chat_add_time <![CDATA[ >=]]> #{startDate} and a.chat_add_time <![CDATA[ <= ]]> #{endDate}
</if>
<if test="null != giveUpStartTime">
and a.chat_add_time <![CDATA[ <= ]]> #{giveUpStartTime}
</if>
<if test="null != dismissStartDate">
and a.chat_dissolve_time <![CDATA[ >=]]> #{startDate} and a.chat_dissolve_time <![CDATA[ <= ]]> #{endDate}
</if>
......
......@@ -96,8 +96,14 @@
and (d.name like #{chatName} or d.wx_chat_id like #{wxChatId}
</if>
<if test="null !=sendStatus">
<if test="sendStatus==30">
and a.send_status in (0,3)
</if>
<if test="sendStatus != 30">
and a.send_status = #{sendStatus}
</if>
</if>
<if test="null != startDate">
and a.create_time <![CDATA[>=]]> #{startDate} and a.create_time <![CDATA[<=]]> #{endDate}
</if>
......
......@@ -30,6 +30,7 @@
<result column="material_from" property="materialFrom" />
<result column="send_all_flag" property="sendAllFlag" />
<result column="all_search_params" property="allSearchParams" />
<result column="exec_type" property="execType" />
</resultMap>
<sql id="Base_Column_List">
plan_id,
......@@ -53,7 +54,7 @@
success_chat_count,
fail_chat_count ,
wx_enterprise_id , enterprise_id , send_flag ,
material_from , send_all_flag , all_search_params
material_from , send_all_flag , all_search_params , exec_type
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert"
......@@ -80,7 +81,7 @@
send_count,
success_chat_count,
fail_chat_count , wx_enterprise_id , enterprise_id , delete_flag , send_flag,
material_from , send_all_flag , all_search_params
material_from , send_all_flag , all_search_params , exec_type
)VALUES(
#{planId},
#{name},
......@@ -102,7 +103,7 @@
#{sendCount},
#{successChatCount},
#{failChatCount} , #{wxEnterpriseId} , #{enterpriseId} , 0 , 1,
#{materialFrom} , #{sendAllFlag} , #{allSearchParams}
#{materialFrom} , #{sendAllFlag} , #{allSearchParams} , #{execType}
)
]]>
</insert>
......@@ -147,7 +148,8 @@
expire_days=#{expireDays},
material_from=#{materialFrom} ,
send_all_flag = #{sendAllFlag} ,
all_search_params = #{allSearchParams}
all_search_params = #{allSearchParams} ,
exec_type = #{execType}
where plan_id = #{planId}
]]>
</update>
......
......@@ -19,6 +19,8 @@
<result column="done_flag" property="doneFlag"/>
<result column="send_time" property="sendTime"/>
<result column="fail_count" property="failCount"/>
<result column="exec_type" property="execType" />
<result column="data_get_time" property="dataGetTime" />
</resultMap>
<sql id="Base_Column_List">
owner_log_id,
......@@ -31,7 +33,7 @@
send_status,
send_count,
create_time,
update_time , remark , msgid , delete_flag , done_flag , send_time , fail_count
update_time , remark , msgid , delete_flag , done_flag , send_time , fail_count , exec_type , data_get_time
</sql>
<!-- ===================== 新增 ======================== -->
......@@ -48,7 +50,7 @@
send_count,
fail_count,
create_time,
update_time , remark , msgid , delete_flag , done_flag
update_time , remark , msgid , delete_flag , done_flag , exec_type
)VALUES
<foreach collection="list" item="item" separator="," >
( #{item.ownerLogId,jdbcType=BIGINT},
......@@ -62,7 +64,7 @@
0,
0,
#{item.createTime},
#{item.updateTime} , #{item.remark} , #{item.msgid} , 0 , 0
#{item.updateTime} , #{item.remark} , #{item.msgid} , 0 , 0 , #{item.execType}
)
</foreach>
</insert>
......@@ -92,10 +94,24 @@
<update id="updateSendCount">
<![CDATA[
UPDATE tab_haoban_group_chat_plan_owner_log SET send_count = #{sendCount} , fail_count =#{failCount} , done_flag = 1 ,
send_status = 2 , send_time = #{sendTime} ,
send_status = 2 , send_time = #{sendTime} , data_get_time = now() ,
update_time = now() where owner_log_id = #{id}
]]>
</update>
<update id="updateExecType">
update tab_haoban_group_chat_plan_owner_log set exec_type =#{execType} where plan_id=#{planId} and delete_flag = 0
</update>
<update id="updateMsgid">
update tab_haoban_group_chat_plan_owner_log set msgid=#{msgid} where owner_log_id = #{id}
</update>
<update id="giveUp" parameterType="java.lang.Long">
update tab_haoban_group_chat_plan_owner_log set send_status = 3 where owner_log_id = #{id}
</update>
<update id="staffSendResult">
update tab_haoban_group_chat_plan_owner_log set send_status = #{statusFlag} , send_time = #{sendTime} , remark = #{failRemark} where plan_id = #{planId} and staff_id = #{staffId}
</update>
<!-- ============ 查询=============-->
<select id="selectById" parameterType="long" resultMap="result-map-tabHaobanGroupChatPlanOwnerLog">
......@@ -128,7 +144,7 @@
a.send_time sendTime ,
a.create_time createTime ,
a.done_flag doneFlag ,
a.msgid msgid
a.msgid msgid , a.exec_type execType
from tab_haoban_group_chat_plan_owner_log a left join tab_haoban_staff b on a.staff_id = b.staff_id
where
a.wx_enterprise_id = #{wxEnterpriseId} and a.plan_id = #{planId} and a.delete_flag = 0
......@@ -144,12 +160,39 @@
order by a.create_time , a.owner_log_id
</select>
<select id="getOwnerInfo" resultType="com.gic.haoban.manage.api.dto.chat.GroupChatPlanOwnerLogDTO">
select
a.owner_log_id ownerLogId ,
b.plan_id planId ,
b.name planName ,
b.exec_type execType ,
a.staff_id staffId ,
a.clerk_id clerkId ,
a.store_id storeId ,
a.send_status sendStatus ,
a.send_count sendCount ,
a.fail_count failCount ,
a.send_time sendTime ,
a.create_time createTime ,
b.end_time expireDate ,
b.end_time endTime ,
b.start_time startTime ,
a.done_flag doneFlag ,
a.msgid msgid
from tab_haoban_group_chat_plan_owner_log a left join tab_haoban_group_chat_plan b on a.plan_id = b.plan_id
where a.wx_enterprise_id = #{wxEnterpriseId} and a.plan_id = #{planId} and b.delete_flag = 0 and a.staff_id = #{staffId}
<if test="null != clerkId">
and a.clerk_id = #{clerkId}
</if>
</select>
<select id="listOwnerLogPageForWxaTotal" parameterType="com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO" resultType="com.gic.haoban.manage.api.dto.chat.ChatOwnerTotalDTO">
select
b.plan_id planId ,
b.name planName ,
b.start_time startTime ,
b.end_time endTime ,
b.exec_type execType ,
<!-- 已发送 -->
SUM(CASE a.send_status WHEN 2 THEN 1 ELSE 0 END ) sendCount,
<!-- 待发送 -->
......@@ -171,10 +214,10 @@
and b.name like #{searchParams}
</if>
<if test="1==clerkTaskStatus">
and b.end_time > now()
and b.end_time > now() and a.send_status =1
</if>
<if test="2==clerkTaskStatus">
and b.end_time <![CDATA[<=]]> now()
and ( b.end_time <![CDATA[<=]]> now() or a.send_status !=1 )
</if>
group by b.plan_id
order by b.end_time desc , a.create_time desc
......@@ -212,29 +255,6 @@
order by a.create_time desc , a.owner_log_id
</select>
<select id="getOwnerInfo" resultType="com.gic.haoban.manage.api.dto.chat.GroupChatPlanOwnerLogDTO">
select
a.owner_log_id ownerLogId ,
b.plan_id planId ,
b.name planName ,
a.staff_id staffId ,
a.clerk_id clerkId ,
a.store_id storeId ,
a.send_status sendStatus ,
a.send_count sendCount ,
a.fail_count failCount ,
a.send_time sendTime ,
a.create_time createTime ,
b.end_time expireDate ,
b.end_time endTime ,
b.start_time startTime ,
a.done_flag doneFlag ,
a.msgid msgid
from tab_haoban_group_chat_plan_owner_log a left join tab_haoban_group_chat_plan b on a.plan_id = b.plan_id
where a.wx_enterprise_id = #{wxEnterpriseId} and a.plan_id = #{planId} and b.delete_flag = 0 and a.staff_id = #{staffId}
and a.clerk_id = #{clerkId}
</select>
<select id="getTotalCount" resultType="java.lang.Integer">
SELECT
......@@ -257,6 +277,61 @@
AND b.end_time >= now()
</select>
<select id="listForMsgid" resultType="com.gic.haoban.manage.api.dto.chat.GroupChatPlanOwnerLogDTO">
SELECT
a.owner_log_id ownerLogId ,
b.plan_id planId ,
a.staff_id staffId ,
a.send_time sendTime
FROM tab_haoban_group_chat_plan_owner_log a LEFT JOIN tab_haoban_group_chat_plan b ON a.plan_id = b.plan_id
WHERE b.exec_type = 1 AND a.send_status = 2 AND a.msgid IS NULL
</select>
<select id="listForCancelSend" resultType="com.gic.haoban.manage.api.dto.chat.GroupChatPlanOwnerLogDTO">
SELECT
a.wx_enterprise_id wxEnterpriseId ,
a.owner_log_id ownerLogId ,
b.plan_id planId ,
a.staff_id staffId ,
a.send_time sendTime,
a.msgid msgid
FROM tab_haoban_group_chat_plan_owner_log a LEFT JOIN tab_haoban_group_chat_plan b ON a.plan_id = b.plan_id
WHERE b.exec_type = 0 AND a.send_status = 1 AND a.msgid IS not NULL and b.end_time <![CDATA[<=]]> now() AND end_time > DATE_ADD(CURDATE(), INTERVAL -2 DAY)
</select>
<!-- 查询所有任务数-->
<select id="getTotalTask" resultType="int">
select count(1) from tab_haoban_group_chat_plan_owner_log a LEFT JOIN tab_haoban_group_chat_plan b ON a.plan_id = b.plan_id
where a.enterprise_id = #{enterpriseId} and b.end_time <![CDATA[ > ]]> now()
AND a.clerk_id = #{clerkId} AND a.send_status = 1 and a.delete_flag = 0
</select>
<!-- 查询逾期任务数-->
<select id="getInvalidTask" resultType="int">
select count(1) from tab_haoban_group_chat_plan_owner_log a LEFT JOIN tab_haoban_group_chat_plan b ON a.plan_id = b.plan_id
where a.enterprise_id = #{enterpriseId} and b.end_time = #{time}
AND a.clerk_id = #{clerkId} AND a.send_status = 1 and a.delete_flag = 0
</select>
<!-- 查询失效任务数-->
<select id="getOverdueTask" resultType="int">
select count(1) from tab_haoban_group_chat_plan_owner_log a LEFT JOIN tab_haoban_group_chat_plan b ON a.plan_id = b.plan_id
where a.enterprise_id = #{enterpriseId} and b.end_time = now()
AND a.clerk_id = #{clerkId} AND a.send_status = 1 and a.delete_flag = 0
</select>
<select id="getTaskNum" resultType="java.lang.Integer">
select count(1) from (
select a.plan_id from tab_haoban_group_chat_plan_owner_log a LEFT JOIN tab_haoban_group_chat_plan b ON a.plan_id = b.plan_id
where a.enterprise_id = #{enterpriseId}
and a.store_id = #{storeId}
<if test="null != clerkId">
AND a.clerk_id = #{clerkId}
</if>
and b.end_time <![CDATA[ > ]]> now()
AND a.send_status = 1 and a.delete_flag = 0 group by a.plan_id ) t
</select>
</mapper>
\ No newline at end of file
......@@ -171,6 +171,15 @@
create_time asc
</select>
<select id="getForTask"
resultMap="result-map-tabHaobanWxUserAddLog">
select
<include refid="Base_Column_List"/>
from tab_haoban_wx_user_add_log where
external_userid=#{externalUserid} and status_flag = 2 and add_channel = 4 order by
create_time desc limit 1
</select>
<select id="selectNewLog" resultMap="result-map-tabHaobanWxUserAddLog">
select
<include refid="Base_Column_List"/>
......
import com.alibaba.fastjson.JSON;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogQDTO;
import com.gic.haoban.manage.api.enums.SyncTaskTypeEnum;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.service.ExternalClerkRelatedService;
import com.gic.haoban.manage.service.service.out.impl.MemberUnionidRelatedApiServiceImpl;
import com.gic.member.api.service.MemberApiService;
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.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* 删除无效外部联系人
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext-conf.xml"})
public class DelInvalidExternalUserTest {
private static final Logger log = LogManager.getLogger(DelInvalidExternalUserTest.class);
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService ;
@Autowired
private TabHaobanExternalClerkRelatedMapper tabHaobanExternalClerkRelatedMapper ;
@Autowired
private MemberApiService memberApiService;
@Autowired
private ExternalClerkRelatedService externalClerkRelatedService ;
@Test
public void test() {
String wxEnterpriseId = "8477c149d8774f06ab841f042645832b" ;
String wxUserId = "51301";
String staffId = "4eaf610dde494b4bb05ea4529b86a328" ;
this.doSelf(wxEnterpriseId,wxUserId,staffId);
}
public void doSelf(String wxEnterpriseId,String wxUserId , String staffId) {
List<String> list = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId,wxUserId) ;
log.info("企微={}",list);
/* List<TabHaobanExternalClerkRelated> gicList = this.tabHaobanExternalClerkRelatedMapper.listByWxEnterpriseIdAndWxUserId(staffId,wxEnterpriseId) ;
if(CollectionUtils.isNotEmpty(gicList)) {
for(TabHaobanExternalClerkRelated item : gicList) {
String extid = item.getExternalUserId() ;
if(!list.contains(extid)) {
log.info("不存在好友关系={}",extid);
this.delByUserIdAndExternalUserId(item) ;
}
}
}*/
}
public void delByUserIdAndExternalUserId(TabHaobanExternalClerkRelated dto) {
String staffId = dto.getStaffId();
String externalUserid = dto.getExternalUserId();
String wxEnterpriseId = dto.getWxEnterpriseId();
int count = tabHaobanExternalClerkRelatedMapper.delByUserIdAndExternalUserId(externalUserid,staffId);
if (count <= 0) {
log.error("无需删除的好友数据:{}", JSON.toJSONString(dto));
return;
}
List<TabHaobanExternalClerkRelated> deleteRelatedList = tabHaobanExternalClerkRelatedMapper.listByExTernalUseridAndWxUserId(externalUserid, staffId, 2);
if (CollectionUtils.isEmpty(deleteRelatedList)) {
log.info("无解除的好友关系:externalUserid:{},staffId:{}", externalUserid,staffId);
return;
}
TabHaobanExternalClerkRelated related = deleteRelatedList.get(0);
String enterpriseId = related.getEnterpriseId() ;
//该企微该会员所有关联关系解除后通知会员
List<TabHaobanExternalClerkRelated> list = tabHaobanExternalClerkRelatedMapper.listByExternalUseridAndWxEnterpriseId(externalUserid, wxEnterpriseId, Arrays.asList("1", "3", "4"));
if (CollectionUtils.isEmpty(list)) {
//删除的好友关系
List<TabHaobanExternalClerkRelated> haobanExternalClerkRelatedList = tabHaobanExternalClerkRelatedMapper.listByExternalUseridAndWxEnterpriseId(externalUserid, wxEnterpriseId, Collections.singletonList("2"));
for (TabHaobanExternalClerkRelated externalClerkRelated : haobanExternalClerkRelatedList) {
String memberId = externalClerkRelated.getMemberId();
log.info("通知会员 删除会员后更新为非企微好友 memberId:{}", memberId);
List<TabHaobanExternalClerkRelated> memberList = this.externalClerkRelatedService.getAddTimeByMemberId(memberId, enterpriseId,null);
Date date = new Date();
Date opTime = new Date(0);
if (CollectionUtils.isNotEmpty(memberList)){
for (TabHaobanExternalClerkRelated a : memberList){
if ((a.getStatusFlag() == 0 || a.getStatusFlag() == 2) && a.getUpdateTime().after(opTime)){
opTime= a.getUpdateTime();
date = opTime;
}
}
}
memberApiService.updateMemberQywxEveryOccasion(enterpriseId, memberId, 0, date,null);
}
}
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.google.common.collect.Sets;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
public class FileUtils {
......@@ -13,7 +16,7 @@ public class FileUtils {
public static void main(String[] args) {
System.out.println(JSONArray.parseArray(getText().toString()));
cleanNoExsitFriendNew(null,null,null);
}
public static StringBuilder getText(){
......@@ -21,4 +24,20 @@ public class FileUtils {
return list ;
}
public static void cleanNoExsitFriendNew(String wxEnterpriseId, String staffId, List<String> externalUserIds) {
externalUserIds = Arrays.asList("wm0JLXDgAATwCdjIMGe-fwl7ZOMoJ2hw","wm0JLXDgAAa2Cqg0fa2F5BGgwfJo2dJw","wm0JLXDgAAzUoijz9olOmRV7PEBrQhNw","wm0JLXDgAAXI_2kotwsZHLdETKmJenYA","wm0JLXDgAA11ODZutAcho6-5BFC1zy4A") ;
Set<String> externalUserIdList = new HashSet<>() ;
externalUserIdList.add("wm0JLXDgAA5A396Jqh-mQQjbTa39m1yw") ;
Sets.SetView<String> delExternalUserIds = Sets.difference(externalUserIdList,new HashSet<>(externalUserIds));
System.out.println(delExternalUserIds);
}
}
......@@ -24,18 +24,9 @@ public class QwOpenTest {
@Test
public void tt() {
/* OpenStaffInitQDTO s = new OpenStaffInitQDTO() ;
s.setStaffId("52995ea8c81c4cc286a9b82bc36a7081");
s.setWxEnterpriseId("ca66a01b79474c40b3e7c7f93daf1a3b");
s.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000");
this.openStaffApiService.init(s) ;*/
List<String> list = this.list();
for(String m : list) {
// memberApiService.updateMemberQywxEveryOccasion("ff8080816f6be950016f82d9c2061b92", "0000000090dacb280190deec34d0531b", 0, new Date(), null);
}
memberApiService.updateMemberQywxEveryOccasion("ff8080816f6be950016f82d9c2061b92", "0000000090dacb280190deec34d0531b", 0, new Date(), null);
memberApiService.updateMemberQywxEveryOccasion("ff8080816d6905a5016d6b79a017014a", "61dd1e382a1f42ea9256c7e9c819dc34", 1, new Date(1705232487000L), new Date(1705232487000L));
}
......
......@@ -66,6 +66,17 @@ public class GroupChatPlanVO implements Serializable{
// 所有的群发条件
private String allSearchParams ;
// 执行方式 0企微1好办小程序
private int execType ;
public int getExecType() {
return execType;
}
public void setExecType(int execType) {
this.execType = execType;
}
public String getAllSearchParams() {
return allSearchParams;
}
......
......@@ -263,6 +263,12 @@
<version>${gic-webapp-common}</version>
</dependency>
<dependency>
<groupId>com.gic</groupId>
<artifactId>gic-search-engine-api</artifactId>
<version>${gic-search-engine-api}</version>
</dependency>
</dependencies>
<build>
......
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
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.DateUtil;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.content.api.dto.column.ContentColumnListDTO;
import com.gic.content.api.dto.material.ContentMaterialDTO;
......@@ -244,6 +245,9 @@ public class ContentMaterialController {
}
ContentMaterialShareQDTO contentMaterialShareQDTO = new ContentMaterialShareQDTO();
BeanUtils.copyProperties(contentMaterialShareQO, contentMaterialShareQDTO);
if(null != contentMaterialShareQO.getMarketingTime()) {
contentMaterialShareQDTO.setMarketingTime(DateUtil.strToDate(contentMaterialShareQO.getMarketingTime(),"yyyy-MM-dd HH:mm:ss"));
}
ServiceResponse<ContentMaterialShareInfoDTO> serviceResponse = contentMaterialShareApiService.shareContentMaterial(contentMaterialShareQDTO);
if (!serviceResponse.isSuccess()) {
return RestResponse.failure(serviceResponse.getCode(), serviceResponse.getMessage());
......
package com.gic.haoban.manage.web.controller.data;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.DataApiUtils;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.StaffClerkRelationApiService;
import com.gic.haoban.manage.web.qo.canvas.*;
import com.gic.haoban.manage.web.utils.EsMemberInfoUtils;
import com.gic.haoban.manage.web.vo.canvas.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
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 java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 画布数据
*/
@Slf4j
@RestController
@RequestMapping("/canvas-data")
public class CanvasDataController {
@Autowired
private EsMemberInfoUtils esMemberInfoUtils;
@Autowired
private StaffApiService staffApiService;
@Autowired
private ClerkService clerkService;
@Autowired
private StaffClerkRelationApiService staffClerkRelationApiService;
/**
* 活动转化数据
* @param qo
* @return
*/
@RequestMapping("get-canvas-conversion-data")
public RestResponse<CanvasConversionDataVO> getCanvasConversionData(@RequestBody CanvasConversionDataQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, null, null);
//1画布维度2导购维度3会员维度
jsonObject.put("dataType", 1);
removeClerkIdParam(qo.getClerkId(), jsonObject);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_list");
List<CanvasConversionDataVO> list = DataApiUtils.parsePageDataList(res, CanvasConversionDataVO.class);
return RestResponse.successResult(list.size() > 0 ? list.get(0) : new CanvasConversionDataVO());
}
/**
* 画布待完成会员列表
* @param qo
* @return
*/
@RequestMapping("get-canvas-to-do-complete-member")
public RestResponse<Page<CanvasToDoCompleteMemberVO>> getCanvasToDoCompleteMember(@RequestBody CanvasToDoCompleteMemberQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, qo.getPageNum(), qo.getPageSize());
removeClerkIdParam(qo.getClerkId(), jsonObject);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_mbr");
Page<CanvasToDoCompleteMemberVO> page = DataApiUtils.getPageData(res, CanvasToDoCompleteMemberVO.class);
List<CanvasToDoCompleteMemberVO> list = page.getResult();
esMemberInfoUtils.setMemberInfo(qo.getEnterpriseId(), list, Stream.of("memberName","memberNick","photoUrl","clerkCode", "clerkName")
.collect(Collectors.toSet()));
return RestResponse.successResult(page);
}
private void removeClerkIdParam(String clerkId, JSONObject jsonObject) {
if (StringUtils.isNotBlank(clerkId) && staffApiService.isManager(clerkId)) {
//店长不需要传参
jsonObject.remove("clerkId");
}
}
/**
* 活动已完成的会员
* @param qo
* @return
*/
@RequestMapping("get-canvas-conversion-member")
public RestResponse<Page<CanvasConversionMemberVO>> getCanvasConversionMember(@RequestBody CanvasConversionMemberQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, qo.getPageNum(), qo.getPageSize());
//1导购2会员
jsonObject.put("dataType", 2);
removeClerkIdParam(qo.getClerkId(), jsonObject);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_clerk");
Page<CanvasConversionMemberVO> page = DataApiUtils.getPageData(res, CanvasConversionMemberVO.class);
List<CanvasConversionMemberVO> list = page.getResult();
esMemberInfoUtils.setMemberInfo(qo.getEnterpriseId(), list, Stream.of("memberName","memberNick","photoUrl","clerkCode", "clerkName")
.collect(Collectors.toSet()));
return RestResponse.successResult(page);
}
/**
* 活动导购详情
* @param qo
* @return
*/
@RequestMapping("get-canvas-conversion-clerk")
public RestResponse<Page<CanvasConversionMemberVO>> getCanvasConversionClerk(@RequestBody CanvasConversionClerkQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, qo.getPageNum(), qo.getPageSize());
//1导购2会员
jsonObject.put("dataType", 1);
removeClerkIdParam(qo.getClerkId(), jsonObject);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_clerk");
Page<CanvasConversionMemberVO> page = DataApiUtils.getPageData(res, CanvasConversionMemberVO.class);
List<CanvasConversionMemberVO> list = page.getResult();
esMemberInfoUtils.setMemberInfo(qo.getEnterpriseId(), list, Stream.of("clerkCode", "clerkName")
.collect(Collectors.toSet()));
return RestResponse.successResult(page);
}
/**
* 区经的话务/群发 门店和活动数据
* @param qo
* @return
*/
@RequestMapping("get-tel-or-mass-task-data")
public RestResponse<Page<CanvasTaskVO>> getTelOrMassTaskData(@RequestBody CanvasTaskQO qo) {
boolean isStore = qo.getDataType() == 1;
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, qo.getPageNum(), qo.getPageSize());
if (StringUtils.isBlank(qo.getStoreId())) {
List<String> authStoreIdList = staffApiService
.getHaobanStoreIdsRolesByClerkIdAndStoreStatus(qo.getClerkId(), qo.getWxEnterpriseId(), null, null);
if (CollectionUtils.isNotEmpty(authStoreIdList)) {
jsonObject.put("storeId", authStoreIdList.stream().collect(Collectors.joining(",")));
}
}
//区经,设置了门店ID参数后,取出clerkId
jsonObject.remove("clerkId");
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_mkt_task");
Page<CanvasTaskVO> page = DataApiUtils.getPageData(res, CanvasTaskVO.class);
List<CanvasTaskVO> list = page.getResult();
if (CollectionUtils.isNotEmpty(list)) {
if (qo.getPageNum() == 1) {
//合计
jsonObject.put("dataType", 4);
res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_mkt_task");
JSONObject total = DataApiUtils.getPageOne(res);
total.put(isStore ? "storeName" : "canvasName", "合计");
if (CollectionUtils.isEmpty(list)) {
list = new ArrayList<>();
}
list.add(0, JSONObject.parseObject(total.toJSONString(), CanvasTaskVO.class));
page.setResult(list);
}
}
return RestResponse.successResult(page);
}
/**
* 店长/店员 任务列表
* @param qo
* @return
*/
@RequestMapping("get-tel-and-mass-task-data")
public RestResponse<Page<CanvasStoreTaskVO>> getTelAndMassTaskData(@RequestBody CanvasStoreTaskQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
setPageParam(jsonObject, qo.getPageNum(), qo.getPageSize());
jsonObject.put("subType", "all");
// if (StringUtils.isNotBlank(qo.getClerkId()) && staffApiService.isManager(qo.getClerkId())) {
// //店长不需要传参
// jsonObject.remove("clerkId");
// }
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mkt_canvas_haoban_mkt_task");
Page<CanvasStoreTaskVO> page = DataApiUtils.getPageData(res, CanvasStoreTaskVO.class);
List<CanvasStoreTaskVO> list = page.getResult();
if (CollectionUtils.isNotEmpty(list)) {
List<String> clerkIdList = list.stream().filter(e -> StringUtils.isNotBlank(e.getClerkId())).map(e -> e.getClerkId()).distinct().collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(clerkIdList)) {
List<StaffClerkRelationDTO> staffClerkRelationDTOS = staffClerkRelationApiService.listByClerkIds(clerkIdList);
if (CollectionUtils.isNotEmpty(staffClerkRelationDTOS)) {
Map<String, String> clerkIdMapHeadImage = staffClerkRelationDTOS.stream()
.filter(e -> StringUtils.isNotBlank(e.getStaffHeadImg()))
.collect(Collectors.toMap(StaffClerkRelationDTO::getClerkId, StaffClerkRelationDTO::getStaffHeadImg, (v1, v2) -> v1));
for (CanvasStoreTaskVO vo : list) {
vo.setClerkImageUrl(clerkIdMapHeadImage.get(vo.getClerkId()));
}
}
}
}
return RestResponse.successResult(page);
}
private void setPageParam(JSONObject jsonObject, Integer pageNum, Integer pageSize) {
jsonObject.put("pageNum", pageNum == null ? 1 : pageNum);
jsonObject.put("pageSize", pageSize == null ? 10 : pageSize);
}
}
package com.gic.haoban.manage.web.qo;
import com.gic.api.base.commons.BasePageInfo;
import java.io.Serializable;
public class GroupChatQO extends BasePageInfo implements Serializable {
/**
* 群名
*/
private String chatName ;
private String enterpriseId ;
private String wxEnterpriseId ;
private String staffId ;
private Long ownLogId ;
public Long getOwnLogId() {
return ownLogId;
}
public void setOwnLogId(Long ownLogId) {
this.ownLogId = ownLogId;
}
public String getChatName() {
return chatName;
}
public void setChatName(String chatName) {
this.chatName = chatName;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
}
package com.gic.haoban.manage.web.qo.canvas;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CanvasConversionClerkQO extends CanvasConversionDataQO implements Serializable {
private Integer pageNum;
private Integer pageSize;
/**
* 1 升序 2降序
*/
private Integer orderByType;
/**
* 1金额/积分 2人数
*/
private String orderByFields;
}
package com.gic.haoban.manage.web.qo.canvas;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CanvasConversionDataQO implements Serializable {
private Long canvasId;
private String enterpriseId;
/**
* 1:积分消耗 2:转化
*/
private Integer sourceType;
/**
* mass:群发任务 tel_task:话务任务
*/
private String subType;
private String storeId;
private String clerkId;
}
package com.gic.haoban.manage.web.qo.canvas;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CanvasConversionMemberQO extends CanvasConversionDataQO implements Serializable {
private Integer pageNum;
private Integer pageSize;
/**
* 1已转化2为转化 默认已转化
*/
private Integer isConvs;
}
package com.gic.haoban.manage.web.qo.canvas;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gic.commons.web.qo.PageQo;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CanvasStoreTaskQO extends PageQo implements Serializable {
/**
* 1 升序 2降序
*/
private Integer orderByType;
/**
* 1完成任务数2待完成任务数3逾期任务数4逾期失效任务数5总任务数6任务完成率
*/
private String orderByFields;
/**
* 开始时间 yyyy-MM-dd
*/
private String startDate;
private String endDate;
/**
* 导购筛选
*/
private String clerkQuery;
/**
* 画布活动筛选
*/
private String canvasQuery;
/**
* 活动ID
*/
private String canvasId;
/**
* 门店ID
*/
private String storeId;
/**
* 不传则查询整个门店
*/
private String clerkId;
/**
* 2导购3活动 4:门店合计
*/
private Integer dataType;
/**
* 企业ID.
*/
private String enterpriseId;
public Integer getDataType() {
return dataType == null ? 2 : dataType;
}
}
package com.gic.haoban.manage.web.qo.canvas;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gic.commons.web.qo.PageQo;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CanvasTaskQO extends PageQo implements Serializable {
/**
* 1 升序 2降序
*/
private Integer orderByType;
/**
* 1完成任务数2待完成任务数3逾期任务数4逾期失效任务数5总任务数6任务完成率
*/
private String orderByFields;
/**
* tel_task 话务任务 mass 群发任务
*/
private String subType;
/**
* 开始时间 yyyy-MM-dd
*/
private String startDate;
private String endDate;
/**
* 门店筛选
*/
private String storeQuery;
/**
* 画布活动筛选
*/
private String canvasQuery;
/**
* 门店维度跳转到活动维度时候,传递
*/
private String storeId;
/**
* 1门店 3活动
*/
private Integer dataType;
/**
* 企业ID.
*/
private String enterpriseId;
/**
* 微信企业
*/
private String wxEnterpriseId;
/**
* 区经,用于查询管辖门店权限
*/
private String clerkId;
public Integer getDataType() {
return dataType == null ? 1 : dataType;
}
}
package com.gic.haoban.manage.web.qo.canvas;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gic.commons.web.qo.PageQo;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class CanvasToDoCompleteMemberQO extends PageQo implements Serializable {
private Long canvasId;
private String enterpriseId;
/**
* mass:群发任务 tel_task:话务任务
*/
private String subType;
private String storeId;
private String clerkId;
}
......@@ -5,6 +5,8 @@ import java.io.Serializable;
public class CombinedQO implements Serializable {
private static final long serialVersionUID = -28454620622119889L;
private String enterpriseId;
private String wxEnterpriseId;
/**
* 主图url
......@@ -40,6 +42,14 @@ public class CombinedQO implements Serializable {
*/
private String businessId;
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
......
package com.gic.haoban.manage.web.qo.content;
import java.io.Serializable;
import java.util.Date;
/**
* @Author MUSI
......@@ -57,6 +58,37 @@ public class ContentMaterialShareQO implements Serializable {
*/
private Integer isPreview;
//活动id
private Long canvasId;
// 节点id
private Long nodeId;
// 营销时间(任务创建时间)
private String marketingTime ;
public Long getCanvasId() {
return canvasId;
}
public void setCanvasId(Long canvasId) {
this.canvasId = canvasId;
}
public Long getNodeId() {
return nodeId;
}
public void setNodeId(Long nodeId) {
this.nodeId = nodeId;
}
public String getMarketingTime() {
return marketingTime;
}
public void setMarketingTime(String marketingTime) {
this.marketingTime = marketingTime;
}
public String getEnterpriseId() {
return enterpriseId;
}
......
package com.gic.haoban.manage.web.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService;
import com.gic.search.engine.api.constant.OperateEnum;
import com.gic.search.engine.api.dto.ESResponseQueryBatch;
import com.gic.search.engine.api.dto.dynamic.DynamicSearchDTO;
import com.gic.search.engine.api.filter.NewNodeAddUtil;
import com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.stream.Collectors;
@Component
@Slf4j
public class EsMemberInfoUtils {
@Autowired
private ESDataDynamicOperationApiService esDataDynamicOperationApiService;
@Autowired
private StoreService storeService;
@Autowired
private ClerkService clerkService;
public void setMemberInfo(String enterpriseId, List list, Set<String> fieldName) {
if (CollectionUtils.isNotEmpty(list)) {
List<String> memberIdList = new ArrayList<>();
for (Object o : list) {
String memberId = ReflectUtils.getDateFieldValue(o, "memberId");
if (org.apache.commons.lang.StringUtils.isNotBlank(memberId) && !"-1".equals(memberId)) {
memberIdList.add(memberId);
}
}
if (CollectionUtils.isNotEmpty(memberIdList)) {
List<JSONObject> memberJson = queryDataBatch(enterpriseId, memberIdList, "memberId,name,mainStoreId,phoneNumber,name,nickName,mainClerkId,photoUrl");
if (CollectionUtils.isNotEmpty(memberJson)) {
Map<String, JSONObject> map = memberJson.stream()
.collect(Collectors.toMap(e -> e.getString("memberId"), e -> e));
Map<String, StoreDTO> storeMap = new HashMap<>();
Map<String, ClerkDTO> clerkMap = new HashMap<>();
boolean isQueryStore = fieldName.contains("storeName") || fieldName.contains("storeCode");
if (isQueryStore) {
List<String> mainStoreIdList = memberJson.stream().
filter(e -> org.apache.commons.lang3.StringUtils.isNotBlank(e.getString("mainStoreId")))
.map(e -> e.getString("mainStoreId")).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(mainStoreIdList)) {
List<StoreDTO> mainStoreList = storeService.queryStore(mainStoreIdList);
if (CollectionUtils.isNotEmpty(mainStoreList)) {
storeMap = mainStoreList.stream().collect(Collectors.toMap(e -> e.getStoreId(), e -> e));
}
}
}
boolean isQueryClerk = fieldName.contains("clerkCode") || fieldName.contains("clerkName");
if (isQueryClerk) {
Set<String> mainClerkIdList = memberJson.stream().
filter(e -> org.apache.commons.lang3.StringUtils.isNotBlank(e.getString("mainClerkId")))
.map(e -> e.getString("mainClerkId")).collect(Collectors.toSet());
if (CollectionUtils.isNotEmpty(mainClerkIdList)) {
List<ClerkDTO> mainClerkList = clerkService.getClerkByClerkIds(mainClerkIdList);
if (CollectionUtils.isNotEmpty(mainClerkList)) {
clerkMap = mainClerkList.stream().collect(Collectors.toMap(e -> e.getClerkId(), e -> e));
}
}
}
for (Object vo : list) {
String memberId = ReflectUtils.getDateFieldValue(vo, "memberId");
JSONObject jsonValue = map.get(memberId);
if (jsonValue != null) {
if (fieldName.contains("memberPhone")) {
ReflectUtils.setDateFieldValue(vo, "memberPhone", jsonValue.getString("phoneNumber"));
}
if (fieldName.contains("memberName")) {
ReflectUtils.setDateFieldValue(vo, "memberName", jsonValue.getString("name"));
}
if (fieldName.contains("memberNick")) {
ReflectUtils.setDateFieldValue(vo, "memberNick", jsonValue.getString("nickName"));
}
if (fieldName.contains("photoUrl")) {
ReflectUtils.setDateFieldValue(vo, "photoUrl", jsonValue.getString("photoUrl"));
}
if (fieldName.contains("memberScene")) {
ReflectUtils.setDateFieldValue(vo, "memberScene", 3);
}
if (isQueryStore) {
String mainStoreId = jsonValue.getString("mainStoreId");
// ReflectUtils.setDateFieldValue(vo, "storeId", mainStoreId);
if (org.apache.commons.lang.StringUtils.isNotBlank(mainStoreId)) {
StoreDTO storeValue = storeMap.get(mainStoreId);
if (storeValue != null) {
ReflectUtils.setDateFieldValue(vo, "storeCode", storeValue.getStoreCode());
ReflectUtils.setDateFieldValue(vo, "storeName", storeValue.getStoreName());
if (fieldName.contains("parentStoreGroupName")) {
ReflectUtils.setDateFieldValue(vo, "parentStoreGroupName", storeValue.getStoreGroupName());
}
}
}
}
if (isQueryClerk) {
String mainClerkId = jsonValue.getString("mainClerkId");
// ReflectUtils.setDateFieldValue(vo, "clerkId", mainClerkId);
if (org.apache.commons.lang.StringUtils.isNotBlank(mainClerkId)) {
ClerkDTO clerkDTO = clerkMap.get(mainClerkId);
if (clerkDTO != null) {
ReflectUtils.setDateFieldValue(vo, "clerkCode", clerkDTO.getClerkCode());
ReflectUtils.setDateFieldValue(vo, "clerkName", clerkDTO.getClerkName());
}
}
}
}
}
}
}
}
}
public List<JSONObject> queryDataBatch(String enterpriseId, List<String> memberIdList, String returnFields) {
if (CollectionUtils.isEmpty(memberIdList)) {
log.warn("memberIdList 为空", enterpriseId);
return null;
}
List<JSONObject> jsonObjList = new ArrayList<JSONObject>();
try {
JSONObject searchJson = new JSONObject();
String[] memberIdArr = memberIdList.toArray(new String[memberIdList.size()]);
String memberIds = StringUtils.join(memberIdArr, " ");
searchJson = NewNodeAddUtil.addNewNodeForAnd("memberId", OperateEnum.OPERATE_CONTAIN.getValue(), memberIds,
searchJson);
DynamicSearchDTO search = new DynamicSearchDTO();
log.info("==============搜索条件==============: {}", JSON.toJSONString(searchJson));
search.setRecordNumber(memberIdList.size() + 1);
search.setSearchJson(searchJson);
search.setEnterpriseId(enterpriseId);
search.setColumnCategoryCode("member");
search.setReturnFileds(returnFields);
search.setSortJson(NewNodeAddUtil.createSortNode("memberId", NewNodeAddUtil.SORT_RULE_ASC));
ESResponseQueryBatch esRes = esDataDynamicOperationApiService.queryDataBatch(search, false, null);
jsonObjList = esRes.getRes();
} catch (Exception e) {
log.warn("从搜索引擎搜索会员数据异常", memberIdList, enterpriseId, e);
}
return jsonObjList;
}
}
package com.gic.haoban.manage.web.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MemberInfoQO implements Serializable {
/**
* 是否设置服务门店名称和code
*/
private boolean setStore;
/**
* 是否设置专属导购名称和code
*/
private boolean setClerk;
/**
* 是否设置服务门店上级分组名称
*/
private boolean setParentStoreGroup;
/**
* 是否设置会员类型。
* 1:非会员 2:会员已注销 3:正常
*/
private boolean setMemberScene;
}
package com.gic.haoban.manage.web.utils;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Method;
@Slf4j
public class ReflectUtils {
public static String getDateFieldValue(Object obj, String fieldName) {
try {
Method method = obj.getClass().getMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1));
return (String) method.invoke(obj);
} catch (Exception e) {
log.warn("反射get值错误:{}", e.getMessage(), e);
return null;
}
}
public static void setDateFieldValue(Object obj, String fieldName, String dataValue) {
try {
Method method = obj.getClass().getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), String.class);
method.invoke(obj, dataValue);
} catch (Exception e) {
log.warn("反射set值错误:{}", e.getMessage(), e);
}
}
public static void setDateFieldValue(Object obj, String fieldName, Integer dataValue) {
try {
Method method = obj.getClass().getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), Integer.class);
method.invoke(obj, dataValue);
} catch (Exception e) {
log.warn("反射set值错误:{}", e.getMessage(), e);
}
}
public static <T> T createInstance(Class<T> clazz) {
try {
return clazz.newInstance();
} catch (InstantiationException e) {
return null;
} catch (IllegalAccessException e) {
return null;
}
}
}
package com.gic.haoban.manage.web.vo.canvas;
import lombok.Data;
import java.io.Serializable;
@Data
public class CanvasConversionDataVO implements Serializable {
/**
* 消耗积分数
*/
private Integer convsCsmeIntglCnt;
/**
* 积分消耗人数
*/
private Integer csmeIntglMbrNum;
/**
* 转化人数
*/
private Integer convsMbrNum;
/**
* 转化金额
*/
private Double convsAmt;
}
package com.gic.haoban.manage.web.vo.canvas;
import lombok.Data;
import java.io.Serializable;
@Data
public class CanvasConversionMemberVO extends CanvasConversionDataVO implements Serializable {
/**
* 会员id
*/
private String mbrId;
private String memberId;
private String clerkId;
private String clerkCode;
private String clerkName;
/**
* 会员名称
*/
private String memberName;
/**
* 会员昵称
*/
private String memberNick;
/**
* 头像
*/
private String photoUrl;
public String getMemberId() {
return mbrId;
}
}
package com.gic.haoban.manage.web.vo.canvas;
import lombok.Data;
import java.io.Serializable;
@Data
public class CanvasStoreTaskVO implements Serializable {
/**
* 完成任务数
*/
private Integer complTaskCnt;
/**
* 待完成任务数
*/
private Integer untreatedTaskCnt;
/**
* 逾期中任务数
*/
private Integer overdueTaskCnt;
/**
* 逾期失效任务数
*/
private Integer overdueInvalidTaskCnt;
/**
* 总任务数
*/
private Integer assignedTaskCnt;
/**
* 任务完成率
*/
private Double taskComplRate;
/**
* 放弃任务数
*/
private Integer abandonTaskCnt;
/**
* 导购名称
*/
private String clerkName;
private String clerkId;
/**
* 导购头像
*/
private String clerkImageUrl;
/**
* 画布活动名称
*/
private String canvasName;
/**
* 活动ID
*/
private String canvasId;
/**
* 排序值
*/
private Integer rn;
}
package com.gic.haoban.manage.web.vo.canvas;
import lombok.Data;
import java.io.Serializable;
@Data
public class CanvasTaskVO implements Serializable {
/**
* 完成任务数
*/
private Integer complTaskCnt;
/**
* 待完成任务数
*/
private Integer untreatedTaskCnt;
/**
* 逾期中任务数
*/
private Integer overdueTaskCnt;
/**
* 逾期失效任务数
*/
private Integer overdueInvalidTaskCnt;
/**
* 总任务数
*/
private Integer assignedTaskCnt;
/**
* 任务完成率
*/
private Double taskComplRate;
/**
*
*/
private String storeId;
/**
* 放弃任务数
*/
private Integer abandonTaskCnt;
/**
* 门店名称
*/
private String storeName;
/**
* 画布活动名称
*/
private String canvasName;
/**
* 活动ID
*/
private String canvasId;
}
package com.gic.haoban.manage.web.vo.canvas;
import lombok.Data;
import java.io.Serializable;
@Data
public class CanvasToDoCompleteMemberVO implements Serializable {
private String mbrId;
private String memberId;
private String clerkId;
private String clerkCode;
private String clerkName;
/**
* 会员名称
*/
private String memberName;
/**
* 会员昵称
*/
private String memberNick;
/**
* 头像
*/
private String photoUrl;
/**
* 逾期天数
*/
private Integer invalidDays;
public String getMemberId() {
return mbrId;
}
}
......@@ -14,7 +14,7 @@
<dubbo:protocol name="dubbo" port="30010"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.OpenStaffApiService" id="openStaffApiService" />
<dubbo:reference interface="com.gic.haoban.manage.api.service.chat.GroupChatApiService" id="groupChatApiService" />
<dubbo:reference interface="com.gic.enterprise.api.service.CustomPageNewService" id="customPageNewService" />
<dubbo:reference interface="com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService" id="groupChatPlanApiService" />
<dubbo:reference interface="com.gic.member.api.service.GradeService" id="gradeService" />
......@@ -175,6 +175,7 @@
<dubbo:reference id="storeRankApiService" interface="com.gic.enterprise.api.service.rank.StoreRankApiService" timeout="100000" retries="0" check="false" />
<dubbo:reference id="enterpriseWxaLinkService" interface="com.gic.enterprise.api.service.EnterpriseWxaLinkService" timeout="100000" retries="0" check="false" />
<dubbo:reference id="clerkTaskApiService" interface="com.gic.marketing.pro.api.service.clerktask.ClerkTaskApiService" timeout="100000" retries="0" check="false" />
<dubbo:reference interface="com.gic.haoban.manage.api.service.HaobanCommonMQApiService" id="haobanCommonMQApiService" timeout="10000"/>
......@@ -186,4 +187,7 @@
<dubbo:reference id="gatheringActivityWxApiService" interface="com.gic.marketing.pro.api.service.activity.GatheringActivityWxApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference id="eSDataDynamicOperationApiService"
interface="com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService"
timeout="10000"/>
</beans>
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