Commit 166f1dc4 by xiehongfei

Merge branch 'master' into feature/20250618-erqian

parents 6ee42af0 dfbe4484
package com.gic.haoban.manage.api.constants; package com.gic.haoban.manage.api.constants;
import java.util.Date;
/** /**
* @author mozhu * @author mozhu
* @date 2022/4/19 15:12 * @date 2022/4/19 15:12
...@@ -25,4 +27,15 @@ public class Manage3Constants { ...@@ -25,4 +27,15 @@ public class Manage3Constants {
* 企微最大分页 * 企微最大分页
*/ */
public static final Integer QW_LIMIT = 1000; public static final Integer QW_LIMIT = 1000;
/**
* 建联未转化限制时间天数
*/
public static final Integer CONTACT_ORDER_LIMIT_DAY = 30;
/**
* 建联未转化时间调整发布时间
*/
public static final Date CONTACT_FIX_RELEASE_DATE = new Date("2025/06/18 23:00:00");
} }
...@@ -45,8 +45,19 @@ public class MaterialDTO implements Serializable{ ...@@ -45,8 +45,19 @@ public class MaterialDTO implements Serializable{
//appid link路径 img_url 封面图 materialTitle //appid link路径 img_url 封面图 materialTitle
private String appId; private String appId;
// 小程序卡片时,小程序的头像
private String headImg ;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public String getHeadImg() {
return headImg;
}
public void setHeadImg(String headImg) {
this.headImg = headImg;
}
public String getMediaid() { public String getMediaid() {
return mediaid; return mediaid;
} }
......
package com.gic.haoban.manage.api.dto;
import java.io.Serializable;
import java.util.Date;
public class MemberExternalUserDTO implements Serializable , Comparable<MemberExternalUserDTO>{
private String staffId ;
private String memberId ;
private String clerkHead ;
private String clerkId ;
private String clerkCode ;
private String clerkName ;
private String storeId ;
private String storeName ;
private String storeCode ;
/**
* 添加好友时间
*/
private Date addTime ;
/**
* 单向好友-客户删客户时间
*/
private Date halfDelTime ;
/**
* 导购删除客户时间
*/
private Date delTime ;
/**
* 1 好友 2已删除
*/
private Integer statusFlag ;
// 外部联系人ID状态1正常, 3单向好友
private Integer externalStatus = 1 ;
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getClerkHead() {
return clerkHead;
}
public void setClerkHead(String clerkHead) {
this.clerkHead = clerkHead;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getClerkCode() {
return clerkCode;
}
public void setClerkCode(String clerkCode) {
this.clerkCode = clerkCode;
}
public String getClerkName() {
return clerkName;
}
public void setClerkName(String clerkName) {
this.clerkName = clerkName;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public String getStoreCode() {
return storeCode;
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
public Integer getStatusFlag() {
return statusFlag;
}
public void setStatusFlag(Integer statusFlag) {
this.statusFlag = statusFlag;
}
public Integer getExternalStatus() {
return externalStatus;
}
public void setExternalStatus(Integer externalStatus) {
this.externalStatus = externalStatus;
}
public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
public Date getHalfDelTime() {
return halfDelTime;
}
public void setHalfDelTime(Date halfDelTime) {
this.halfDelTime = halfDelTime;
}
public Date getDelTime() {
return delTime;
}
public void setDelTime(Date delTime) {
this.delTime = delTime;
}
@Override
public int compareTo(MemberExternalUserDTO o) {
return o.addTime.compareTo(this.addTime);
}
}
...@@ -47,8 +47,45 @@ public class GroupChatHmDTO implements Serializable { ...@@ -47,8 +47,45 @@ public class GroupChatHmDTO implements Serializable {
private Integer statusFlag ; private Integer statusFlag ;
// 可以群数 // 可以群数
private Integer usableChatCount; private Integer usableChatCount;
private String storeId ;
private String storeName ;
private String storeCode ;
// 0已删除 1有效
private int storeStatus ;
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public String getStoreCode() {
return storeCode;
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
public int getStoreStatus() {
return storeStatus;
}
public void setStoreStatus(int storeStatus) {
this.storeStatus = storeStatus;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public Integer getUsableChatCount() { public Integer getUsableChatCount() {
return usableChatCount; return usableChatCount;
} }
......
...@@ -28,7 +28,17 @@ public class GroupChatOwnerDTO implements Serializable { ...@@ -28,7 +28,17 @@ public class GroupChatOwnerDTO implements Serializable {
private String wxOpenUserId; private String wxOpenUserId;
private java.util.Date createTime; private java.util.Date createTime;
private java.util.Date updateTime; private java.util.Date updateTime;
private String storeNames ;
public String getStoreNames() {
return storeNames;
}
public void setStoreNames(String storeNames) {
this.storeNames = storeNames;
}
public String getWxUserId() { public String getWxUserId() {
return wxUserId; return wxUserId;
} }
......
package com.gic.haoban.manage.api.dto.contact;
import java.io.Serializable;
import java.util.List;
public class ContactConfigDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 配置主键ID
*/
private Long configId;
/**
* 自动建联类型 10话务任务 20企微群发 30发送商品 40发送素材
*/
private List<Integer> contactAutoList;
/**
* 是否自动备注(0 否 1 是)
*/
private Integer remarkFlag;
/**
* 备注内容
*/
private List<String> remarkContentList;
/**
* 企业ID
*/
private String enterpriseId;
public Long getConfigId() {
return configId;
}
public void setConfigId(Long configId) {
this.configId = configId;
}
public Integer getRemarkFlag() {
return remarkFlag;
}
public void setRemarkFlag(Integer remarkFlag) {
this.remarkFlag = remarkFlag;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public List<Integer> getContactAutoList() {
return contactAutoList;
}
public void setContactAutoList(List<Integer> contactAutoList) {
this.contactAutoList = contactAutoList;
}
public List<String> getRemarkContentList() {
return remarkContentList;
}
public void setRemarkContentList(List<String> remarkContentList) {
this.remarkContentList = remarkContentList;
}
}
\ No newline at end of file
...@@ -20,7 +20,7 @@ public class ContactFollowDTO implements Serializable { ...@@ -20,7 +20,7 @@ public class ContactFollowDTO implements Serializable {
private String clerkCode; private String clerkCode;
/** /**
* 跟进类型 1私人电话 2企微会话 3发送商品 4企微群发 5标记建联 * 跟进类型 1私人电话 2企微会话 3发送商品 4企微群发 5标记建联 6自动建联 7营销素材
* @see com.gic.haoban.manage.api.enums.contact.ContactFollowTypeEnum * @see com.gic.haoban.manage.api.enums.contact.ContactFollowTypeEnum
*/ */
private Integer followType; private Integer followType;
......
...@@ -60,6 +60,25 @@ public class ContactLogDTO implements Serializable { ...@@ -60,6 +60,25 @@ public class ContactLogDTO implements Serializable {
*/ */
private Date potentialTime; private Date potentialTime;
/** /**
* 来源日志id
*/
private Long sourceLogId;
/**
* 来源类型 1潜客(0001)2机会人群(0010)
*/
private Integer sourceType;
/**
* 业务类型 1潜客(0001)2机会人群(0010)
*/
private Integer bizType;
/**
* 跟进记录组
*/
private String followTypes;
/**
* 企业id * 企业id
*/ */
private String enterpriseId; private String enterpriseId;
...@@ -168,4 +187,35 @@ public class ContactLogDTO implements Serializable { ...@@ -168,4 +187,35 @@ public class ContactLogDTO implements Serializable {
this.enterpriseId = enterpriseId; this.enterpriseId = enterpriseId;
} }
public Long getSourceLogId() {
return sourceLogId;
}
public void setSourceLogId(Long sourceLogId) {
this.sourceLogId = sourceLogId;
}
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getFollowTypes() {
return followTypes;
}
public void setFollowTypes(String followTypes) {
this.followTypes = followTypes;
}
} }
\ No newline at end of file
...@@ -46,6 +46,17 @@ public class HmLinkDTO implements Serializable { ...@@ -46,6 +46,17 @@ public class HmLinkDTO implements Serializable {
// 群活码配置 // 群活码配置
private List<HmLinkChatDTO> linkChatList ; private List<HmLinkChatDTO> linkChatList ;
// [{"type":1服务门店2协管3lbs4指定人群,"open":1}]
private String chatStoreRule ;
public String getChatStoreRule() {
return chatStoreRule;
}
public void setChatStoreRule(String chatStoreRule) {
this.chatStoreRule = chatStoreRule;
}
public List<HmLinkChatDTO> getLinkChatList() { public List<HmLinkChatDTO> getLinkChatList() {
return linkChatList; return linkChatList;
} }
......
...@@ -31,6 +31,25 @@ public class HmLinkStoreDTO implements Serializable { ...@@ -31,6 +31,25 @@ public class HmLinkStoreDTO implements Serializable {
private java.util.Date createTime; private java.util.Date createTime;
private java.util.Date updateTime; private java.util.Date updateTime;
private double distance ;
private String distanceStr ;
public double getDistance() {
return distance;
}
public void setDistance(double distance) {
this.distance = distance;
}
public String getDistanceStr() {
return distanceStr;
}
public void setDistanceStr(String distanceStr) {
this.distanceStr = distanceStr;
}
public String getStoreAddress() { public String getStoreAddress() {
return storeAddress; return storeAddress;
} }
......
...@@ -25,7 +25,7 @@ public class HmLinkWxaDTO implements Serializable { ...@@ -25,7 +25,7 @@ public class HmLinkWxaDTO implements Serializable {
// 二维码 // 二维码
private String hmQrcode; private String hmQrcode;
// 自定义门店规则1推荐门店 2附近门店 // 自定义门店规则1推荐门店 2附近门店 3:获取群活码需要传入经纬度
private int storeType; private int storeType;
// 是否展示省市区门店查询 // 是否展示省市区门店查询
private int selectStoreFlag; private int selectStoreFlag;
...@@ -40,6 +40,18 @@ public class HmLinkWxaDTO implements Serializable { ...@@ -40,6 +40,18 @@ public class HmLinkWxaDTO implements Serializable {
*/ */
private Integer qwFriendFlag ; private Integer qwFriendFlag ;
// 是否群活码
private boolean isGroupChatHm ;
public boolean isGroupChatHm() {
return isGroupChatHm;
}
public void setGroupChatHm(boolean isGroupChatHm) {
this.isGroupChatHm = isGroupChatHm;
}
public Integer getQwFriendFlag() { public Integer getQwFriendFlag() {
return qwFriendFlag; return qwFriendFlag;
} }
......
...@@ -78,6 +78,26 @@ public class QwMomentPlanDTO implements Serializable{ ...@@ -78,6 +78,26 @@ public class QwMomentPlanDTO implements Serializable{
*/ */
private List<QwMomentPlanAttendDTO> clerkList ; private List<QwMomentPlanAttendDTO> clerkList ;
private Integer analyseFlag ;
private Integer analyseDay ;
public Integer getAnalyseFlag() {
return analyseFlag;
}
public void setAnalyseFlag(Integer analyseFlag) {
this.analyseFlag = analyseFlag;
}
public Integer getAnalyseDay() {
return analyseDay;
}
public void setAnalyseDay(Integer analyseDay) {
this.analyseDay = analyseDay;
}
public Integer getMediaLinkFlag() { public Integer getMediaLinkFlag() {
return mediaLinkFlag; return mediaLinkFlag;
} }
......
...@@ -23,6 +23,17 @@ public class ChatHmSearchQDTO extends PageQo implements Serializable { ...@@ -23,6 +23,17 @@ public class ChatHmSearchQDTO extends PageQo implements Serializable {
private List<String> creatorIdList; private List<String> creatorIdList;
private Integer linkCount; private Integer linkCount;
private int allFlag; private int allFlag;
private String storeId ;
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getSearchParamsCode() { public String getSearchParamsCode() {
return searchParamsCode; return searchParamsCode;
} }
......
...@@ -26,7 +26,38 @@ public class OwnerSearchQDTO implements Serializable { ...@@ -26,7 +26,38 @@ public class OwnerSearchQDTO implements Serializable {
private List<String> departmentIdList ; private List<String> departmentIdList ;
// 1查询在职 2查离职 // 1查询在职 2查离职
private int status = 1; private int status = 1;
// 选择的企业id(过滤条件)
private String paramsEnterpriseId ;
// 显示门店名称的企业
private String showNameEnterpriseId ;
// 是否需要显示门店名称
private int showStoreNames ;
public String getShowNameEnterpriseId() {
return showNameEnterpriseId;
}
public void setShowNameEnterpriseId(String showNameEnterpriseId) {
this.showNameEnterpriseId = showNameEnterpriseId;
}
public int getShowStoreNames() {
return showStoreNames;
}
public void setShowStoreNames(int showStoreNames) {
this.showStoreNames = showStoreNames;
}
public String getParamsEnterpriseId() {
return paramsEnterpriseId;
}
public void setParamsEnterpriseId(String paramsEnterpriseId) {
this.paramsEnterpriseId = paramsEnterpriseId;
}
public List<String> getDepartmentIdList() { public List<String> getDepartmentIdList() {
return departmentIdList; return departmentIdList;
} }
......
package com.gic.haoban.manage.api.dto.send; package com.gic.haoban.manage.api.dto.send;
import com.gic.haoban.manage.api.dto.anaylsis.ClerkShareGoodsLogDTO;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* Created by wangzubo on 2025/3/25. * Created by wangzubo on 2025/3/25.
...@@ -60,6 +63,11 @@ public class DealQwSendDTO implements Serializable { ...@@ -60,6 +63,11 @@ public class DealQwSendDTO implements Serializable {
*/ */
private String enterpriseId; private String enterpriseId;
/**
* 商品分享信息
*/
private List<ClerkShareGoodsLogDTO> shareGoodsList;
public FinishQwSendBO() { public FinishQwSendBO() {
} }
...@@ -119,6 +127,14 @@ public class DealQwSendDTO implements Serializable { ...@@ -119,6 +127,14 @@ public class DealQwSendDTO implements Serializable {
public void setEnterpriseId(String enterpriseId) { public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId; this.enterpriseId = enterpriseId;
} }
public List<ClerkShareGoodsLogDTO> getShareGoodsList() {
return shareGoodsList;
}
public void setShareGoodsList(List<ClerkShareGoodsLogDTO> shareGoodsList) {
this.shareGoodsList = shareGoodsList;
}
} }
public static class QwSendMsgBO implements Serializable { public static class QwSendMsgBO implements Serializable {
......
package com.gic.haoban.manage.api.enums.contact;
public enum ContactAutoTypeEnum {
// 自动建联类型 10话务任务 20企微群发 30发送商品 40发送素材
CALL_TASK(10, "专属导购通过话务任务成功触达客户"),
QW_TASK(20, "专属导购通过企微群发任务成功触达了客户"),
GOODS_RECOMMEND(30, "专属导购通过\"智能选款\"或\"意向客户\"给客户发送了商品"),
MATERIAL(40, "专属导购通过\"聊天工具栏\"或\"企微群发\"给客户发送了营销素材");
private final int code;
private final String description;
public int getCode() {
return code;
}
public String getDescription() {
return description;
}
ContactAutoTypeEnum(int code, String description) {
this.code = code;
this.description = description;
}
public static ContactAutoTypeEnum fromCode(int code) {
for (ContactAutoTypeEnum type : values()) {
if (type.code == code) {
return type;
}
}
return null;
}
}
\ No newline at end of file
package com.gic.haoban.manage.api.enums.contact;
import cn.hutool.core.date.DateUtil;
import com.gic.haoban.manage.api.dto.contact.ContactLogDTO;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
public enum ContactBizTypeEnum {
// 业务类型 1潜客(0001)2机会人群(0010)
POTENTIAL_CUSTOMER("10",1,"潜客"),
OPPORTUNITY_CUSTOMER("20",2,"机会人群");
private final String codePre;
private final int type;
private final String description;
public String getCodePre() {
return codePre;
}
public int getType() {
return type;
}
public String getDescription() {
return description;
}
public Long getEsClerkContactTime(Long contactTime) {
if (Objects.equals(contactTime, -1L)) {
return null;
}
return Long.parseLong(this.getCodePre() + contactTime);
}
public static List<Long> getEsClerkContactTimeList(List<ContactLogDTO> list) {
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
list = list.stream().sorted(Comparator.comparing(ContactLogDTO::getBizType))
.collect(Collectors.toList());
List<Long> clerkContactTimeList = Lists.newArrayList();
Long maxContactTime = null;
for (ContactLogDTO contactLogDTO : list) {
Date contactTime = contactLogDTO.getContactTime();
ContactBizTypeEnum bizTypeEnum = ContactBizTypeEnum.fromType(contactLogDTO.getBizType());
Long orginalContactTimeLong = Long.parseLong(DateUtil.format(contactTime, "yyyyMMddHHmmss"));
Long contactTimeLong = bizTypeEnum.getEsClerkContactTime(orginalContactTimeLong);
clerkContactTimeList.add(contactTimeLong);
if (maxContactTime == null || orginalContactTimeLong > maxContactTime) {
maxContactTime = orginalContactTimeLong;
}
}
if (maxContactTime != null) {
clerkContactTimeList.add(maxContactTime);
}
return clerkContactTimeList;
}
ContactBizTypeEnum(String codePre, int type, String description) {
this.codePre = codePre;
this.type = type;
this.description = description;
}
public static ContactBizTypeEnum fromCode(String code) {
for (ContactBizTypeEnum type : values()) {
if (Objects.equals(type.codePre,code)) {
return type;
}
}
return ContactBizTypeEnum.POTENTIAL_CUSTOMER;
}
public static ContactBizTypeEnum fromType(int type) {
for (ContactBizTypeEnum bizTypeEnum : values()) {
if (bizTypeEnum.type == type) {
return bizTypeEnum;
}
}
return ContactBizTypeEnum.POTENTIAL_CUSTOMER;
}
}
\ No newline at end of file
...@@ -4,20 +4,28 @@ import org.apache.commons.lang3.StringUtils; ...@@ -4,20 +4,28 @@ import org.apache.commons.lang3.StringUtils;
public enum ContactFollowTypeEnum { public enum ContactFollowTypeEnum {
PRIVATE_PHONE(1, "私人电话","私人电话"), // 跟进表中不会有这两个类型
WECHAT_SESSION(2, "企微会话","企微会话"), SMS(-1, "短信/彩信","系统向客户发送了营销短信/彩信",null),
PRODUCT(3, "发送商品","商品"), AI(-2, "AI电话","客户接听了AI电话",null),
WECHAT_GROUP_SEND(4, "企微群发","企微群发"),
CONTACT(5, "标记建联","标记了建联"); PRIVATE_PHONE(1, "私人电话","私人电话",null),
WECHAT_SESSION(2, "企微会话","企微会话",null),
PRODUCT(3, "发送商品","商品",ContactAutoTypeEnum.GOODS_RECOMMEND.getCode()),
WECHAT_GROUP_SEND(4, "企微群发","企微群发",null),
CONTACT(5, "标记建联","标记了建联",null),
AUTO_CONTACT(6, "系统自动标记","系统自动标记",null),
MATERIAL(7, "营销素材","营销素材",ContactAutoTypeEnum.MATERIAL.getCode());
private final int code; private final int code;
private final String description; private final String description;
private final String textMatch; private final String textMatch;
private final Integer contactAutoType;
ContactFollowTypeEnum(int code, String description,String textMatch) { ContactFollowTypeEnum(int code, String description,String textMatch,Integer contactAutoType) {
this.code = code; this.code = code;
this.description = description; this.description = description;
this.textMatch = textMatch; this.textMatch = textMatch;
this.contactAutoType = contactAutoType;
} }
public String getTextMatch() { public String getTextMatch() {
...@@ -32,6 +40,10 @@ public enum ContactFollowTypeEnum { ...@@ -32,6 +40,10 @@ public enum ContactFollowTypeEnum {
return description; return description;
} }
public Integer getContactAutoType() {
return contactAutoType;
}
public static ContactFollowTypeEnum fromCode(int code) { public static ContactFollowTypeEnum fromCode(int code) {
for (ContactFollowTypeEnum type : values()) { for (ContactFollowTypeEnum type : values()) {
if (type.code == code) { if (type.code == code) {
......
...@@ -49,6 +49,17 @@ public class GroupChatActivityHmQDTO implements Serializable { ...@@ -49,6 +49,17 @@ public class GroupChatActivityHmQDTO implements Serializable {
private GroupChatActivityDTO chatActivity; private GroupChatActivityDTO chatActivity;
// 指定门店
private String inStoreId ;
public String getInStoreId() {
return inStoreId;
}
public void setInStoreId(String inStoreId) {
this.inStoreId = inStoreId;
}
public Long getChatActivityId() { public Long getChatActivityId() {
return chatActivityId; return chatActivityId;
} }
......
package com.gic.haoban.manage.api.qdto.chat;
import java.io.Serializable;
public class LinkHmFromWxaQDTO implements Serializable {
/**
* 纬度
*/
private String latitude;
/**
* 经度
*/
private String longitude;
/**
* 省市编码
*/
private String districtCode;
/**
* 小程序是否需要位置信息的查询
*/
private Integer justLocationFlag ;
public Integer getJustLocationFlag() {
return justLocationFlag;
}
public void setJustLocationFlag(Integer justLocationFlag) {
this.justLocationFlag = justLocationFlag;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public String getDistrictCode() {
return districtCode;
}
public void setDistrictCode(String districtCode) {
this.districtCode = districtCode;
}
}
package com.gic.haoban.manage.api.qdto.contact; package com.gic.haoban.manage.api.qdto.contact;
import com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -21,15 +23,36 @@ public class ContactFollowBatchQDTO implements Serializable { ...@@ -21,15 +23,36 @@ public class ContactFollowBatchQDTO implements Serializable {
private String clerkId; private String clerkId;
/** /**
* 跟进类型 1私人电话 2企微会话 3发送商品 4企微群发 5标记建联 * 跟进类型 1私人电话 2企微会话 3发送商品 4企微群发 5标记建联 6自动建联 7营销素材
* @see com.gic.haoban.manage.api.enums.contact.ContactFollowTypeEnum * @see com.gic.haoban.manage.api.enums.contact.ContactFollowTypeEnum
*/ */
private Integer followType; private Integer followType;
/**
* 业务id(建联日志id)
*/
private String bizId;
/**
* 业务类型 1潜客(0001)2机会人群(0010)
* @see com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum
*/
private Integer bizType = ContactBizTypeEnum.POTENTIAL_CUSTOMER.getType();
/**
* 来源类型 1潜客(0001)2机会人群(0010)
* @see com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum
*/
private Integer sourceType;
/** /**
* 跟进记录 * 跟进记录
*/ */
private String followRemark; private String followRemark;
/**
* 关联商品信息
*/
private List<String> goodsInfoList;
public String getEnterpriseId() { public String getEnterpriseId() {
return enterpriseId; return enterpriseId;
} }
...@@ -62,6 +85,30 @@ public class ContactFollowBatchQDTO implements Serializable { ...@@ -62,6 +85,30 @@ public class ContactFollowBatchQDTO implements Serializable {
this.followType = followType; this.followType = followType;
} }
public String getBizId() {
return bizId;
}
public void setBizId(String bizId) {
this.bizId = bizId;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public String getFollowRemark() { public String getFollowRemark() {
return followRemark; return followRemark;
} }
...@@ -70,6 +117,14 @@ public class ContactFollowBatchQDTO implements Serializable { ...@@ -70,6 +117,14 @@ public class ContactFollowBatchQDTO implements Serializable {
this.followRemark = followRemark; this.followRemark = followRemark;
} }
public List<String> getGoodsInfoList() {
return goodsInfoList;
}
public void setGoodsInfoList(List<String> goodsInfoList) {
this.goodsInfoList = goodsInfoList;
}
public static class MemberFollow implements Serializable{ public static class MemberFollow implements Serializable{
/** /**
...@@ -78,6 +133,11 @@ public class ContactFollowBatchQDTO implements Serializable { ...@@ -78,6 +133,11 @@ public class ContactFollowBatchQDTO implements Serializable {
private String memberId; private String memberId;
/** /**
* 外部联系人id
*/
private String externalUserId;
/**
* 跟进时间 * 跟进时间
*/ */
private Date followTime; private Date followTime;
...@@ -90,6 +150,12 @@ public class ContactFollowBatchQDTO implements Serializable { ...@@ -90,6 +150,12 @@ public class ContactFollowBatchQDTO implements Serializable {
this.followTime = followTime; this.followTime = followTime;
} }
public MemberFollow(String memberId, String externalUserId, Date followTime) {
this.memberId = memberId;
this.externalUserId = externalUserId;
this.followTime = followTime;
}
public String getMemberId() { public String getMemberId() {
return memberId; return memberId;
} }
...@@ -98,6 +164,14 @@ public class ContactFollowBatchQDTO implements Serializable { ...@@ -98,6 +164,14 @@ public class ContactFollowBatchQDTO implements Serializable {
this.memberId = memberId; this.memberId = memberId;
} }
public String getExternalUserId() {
return externalUserId;
}
public void setExternalUserId(String externalUserId) {
this.externalUserId = externalUserId;
}
public Date getFollowTime() { public Date getFollowTime() {
return followTime; return followTime;
} }
......
package com.gic.haoban.manage.api.qdto.contact; package com.gic.haoban.manage.api.qdto.contact;
import com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -19,10 +21,28 @@ public class ContactFollowQDTO implements Serializable { ...@@ -19,10 +21,28 @@ public class ContactFollowQDTO implements Serializable {
*/ */
private String clerkCode; private String clerkCode;
/** /**
* 跟进类型 1私人电话 2企微会话 3发送商品 4企微群发 5标记建联 * 跟进类型 1私人电话 2企微会话 3发送商品 4企微群发 5标记建联 6自动建联 7营销素材
* @see com.gic.haoban.manage.api.enums.contact.ContactFollowTypeEnum * @see com.gic.haoban.manage.api.enums.contact.ContactFollowTypeEnum
*/ */
private Integer followType; private Integer followType;
/**
* 业务id(建联日志id)
*/
private String bizId;
/**
* 业务类型 1潜客(0001)2机会人群(0010)
* @see com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum
*/
private Integer bizType = ContactBizTypeEnum.POTENTIAL_CUSTOMER.getType();
/**
* 来源类型 1潜客(0001)2机会人群(0010)
* @see com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum
*/
private Integer sourceType;
/** /**
* 跟进记录 * 跟进记录
*/ */
...@@ -76,6 +96,30 @@ public class ContactFollowQDTO implements Serializable { ...@@ -76,6 +96,30 @@ public class ContactFollowQDTO implements Serializable {
this.followType = followType; this.followType = followType;
} }
public String getBizId() {
return bizId;
}
public void setBizId(String bizId) {
this.bizId = bizId;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public String getFollowRemark() { public String getFollowRemark() {
return followRemark; return followRemark;
} }
......
package com.gic.haoban.manage.api.qdto.contact;
import java.io.Serializable;
public class ContactLogCheckQDTO implements Serializable {
private static final long serialVersionUID = 973688857967269973L;
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 企业id
*/
private String enterpriseId;
/**
* 业务类型 1潜客(0001)2机会人群(0010)null为都校验
* @see com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum
*/
private Integer bizType;
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
}
\ No newline at end of file
package com.gic.haoban.manage.api.qdto.contact; package com.gic.haoban.manage.api.qdto.contact;
import com.gic.api.base.commons.Constant;
import com.gic.haoban.manage.api.enums.contact.ContactAutoTypeEnum;
import com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum;
import com.gic.haoban.manage.api.enums.contact.ContactFollowTypeEnum;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
public class ContactLogQDTO implements Serializable { public class ContactLogQDTO implements Serializable {
private static final long serialVersionUID = 973688857967269973L; private static final long serialVersionUID = 973688857967269973L;
...@@ -22,6 +28,69 @@ public class ContactLogQDTO implements Serializable { ...@@ -22,6 +28,69 @@ public class ContactLogQDTO implements Serializable {
*/ */
private String enterpriseId; private String enterpriseId;
/**
* 跟进类型 1私人电话 2企微会话 3发送商品 4企微群发 5标记建联 6自动建联 7营销素材
* @see com.gic.haoban.manage.api.enums.contact.ContactFollowTypeEnum
*/
private Integer followType = ContactFollowTypeEnum.CONTACT.getCode();
/**
* 跟进记录
*/
private String followRemark;
/**
* 跟进上传素材,数组格式
*/
private List<String> followMaterialList;
/**
* 自动建联类型
* @see ContactAutoTypeEnum
*/
private Integer contactAutoType;
/**
* 是否自动建联 1是0否
*/
private Integer autoFlag = Constant.FLAG_FALSE;
/**
* 是否同步建联
*/
private Integer syncContactType;
/**
* 同步建联时间
*/
private Date syncContactTime;
/**
* 业务类型 1潜客(0001)2机会人群(0010)
* @see com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum
*/
private Integer bizType = ContactBizTypeEnum.POTENTIAL_CUSTOMER.getType();
/**
* 来源类型 1潜客(0001)2机会人群(0010)
* @see com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum
*/
private Integer sourceType;
/**
* 来源建联id
*/
private Long sourceLogId;
public ContactLogQDTO() {
}
public ContactLogQDTO(String enterpriseId,String memberId, String clerkId, String storeId, Integer contactAutoType) {
this.memberId = memberId;
this.clerkId = clerkId;
this.storeId = storeId;
this.enterpriseId = enterpriseId;
this.contactAutoType = contactAutoType;
}
public String getMemberId() { public String getMemberId() {
return memberId; return memberId;
} }
...@@ -53,4 +122,84 @@ public class ContactLogQDTO implements Serializable { ...@@ -53,4 +122,84 @@ public class ContactLogQDTO implements Serializable {
public void setEnterpriseId(String enterpriseId) { public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId; this.enterpriseId = enterpriseId;
} }
public Integer getFollowType() {
return followType;
}
public void setFollowType(Integer followType) {
this.followType = followType;
}
public String getFollowRemark() {
return followRemark;
}
public void setFollowRemark(String followRemark) {
this.followRemark = followRemark;
}
public List<String> getFollowMaterialList() {
return followMaterialList;
}
public void setFollowMaterialList(List<String> followMaterialList) {
this.followMaterialList = followMaterialList;
}
public Integer getContactAutoType() {
return contactAutoType;
}
public void setContactAutoType(Integer contactAutoType) {
this.contactAutoType = contactAutoType;
}
public Integer getAutoFlag() {
return autoFlag;
}
public void setAutoFlag(Integer autoFlag) {
this.autoFlag = autoFlag;
}
public Integer getSyncContactType() {
return syncContactType;
}
public void setSyncContactType(Integer syncContactType) {
this.syncContactType = syncContactType;
}
public Date getSyncContactTime() {
return syncContactTime;
}
public void setSyncContactTime(Date syncContactTime) {
this.syncContactTime = syncContactTime;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public Long getSourceLogId() {
return sourceLogId;
}
public void setSourceLogId(Long sourceLogId) {
this.sourceLogId = sourceLogId;
}
} }
\ No newline at end of file
package com.gic.haoban.manage.api.qdto.contact; package com.gic.haoban.manage.api.qdto.contact;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
...@@ -43,6 +44,12 @@ public class ContactOrderSearchQDTO implements Serializable { ...@@ -43,6 +44,12 @@ public class ContactOrderSearchQDTO implements Serializable {
*/ */
private Date endTime; private Date endTime;
/**
* 业务类型 1潜客(0001)2机会人群(0010)
* @see com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum
*/
private Integer bizType = ContactBizTypeEnum.POTENTIAL_CUSTOMER.getType();
public String getMemberId() { public String getMemberId() {
return memberId; return memberId;
} }
...@@ -102,4 +109,12 @@ public class ContactOrderSearchQDTO implements Serializable { ...@@ -102,4 +109,12 @@ public class ContactOrderSearchQDTO implements Serializable {
this.endTime = DateUtil.endOfDay(endTime); this.endTime = DateUtil.endOfDay(endTime);
} }
} }
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
} }
\ No newline at end of file
...@@ -343,6 +343,9 @@ public interface ExternalClerkRelatedApiService { ...@@ -343,6 +343,9 @@ public interface ExternalClerkRelatedApiService {
*/ */
List<ExternalUserClerkDTO> listExternalClerk(String enterpriseId , String memberId) ; List<ExternalUserClerkDTO> listExternalClerk(String enterpriseId , String memberId) ;
List<MemberExternalUserDTO> listMemberExternalUser(String enterpriseId , String memberId) ;
// 0不是好友 1是好友 3是单向好友 // 0不是好友 1是好友 3是单向好友
int isClerkFriend(String enterpriseId , String clerkId , String memberId) ; int isClerkFriend(String enterpriseId , String clerkId , String memberId) ;
......
...@@ -63,6 +63,9 @@ public interface HandoverOperationApiService { ...@@ -63,6 +63,9 @@ public interface HandoverOperationApiService {
*/ */
public Page<HandoverExternalDTO> pageHandoverFriend(String wxEnterpriseId, String search, List<String> staffIds, List<String> transferIds, BasePageInfo pageInfo); public Page<HandoverExternalDTO> pageHandoverFriend(String wxEnterpriseId, String search, List<String> staffIds, List<String> transferIds, BasePageInfo pageInfo);
List<HandoverExternalDTO> listAllHandoverFriend(String wxEnterpriseId, String search, List<String> staffIds);
/** /**
* 分配的客户列表 * 分配的客户列表
* *
......
...@@ -157,4 +157,10 @@ public interface HaobanTimerApiService { ...@@ -157,4 +157,10 @@ public interface HaobanTimerApiService {
* @param params * @param params
*/ */
void contactDataTimer(String params); void contactDataTimer(String params);
/**
* 企业微信应用过期提醒
* @param params
*/
void qywxAppOverTimer(String params) ;
} }
...@@ -94,4 +94,9 @@ public interface MaterialApiService { ...@@ -94,4 +94,9 @@ public interface MaterialApiService {
* @param qdto * @param qdto
*/ */
void materialSortCategory(MaterialCategorySortQDTO qdto); void materialSortCategory(MaterialCategorySortQDTO qdto);
//mediaType1群发 2朋友圈
public List<String> getImageMediaId(String wxEnterpriseId, List<ContentMaterialDTO> imageList, int mediaType) ;
void getImageMediaId(String wxEnterpriseId, List<String> idList) ;
} }
...@@ -88,7 +88,7 @@ public interface QywxTagApiService { ...@@ -88,7 +88,7 @@ public interface QywxTagApiService {
/** /**
* 同步企业微信导入gic的会员标签 * 企业微信打标-gic侧的处理
* *
* @param wxEnterpriseId * @param wxEnterpriseId
* @param externalUserId * @param externalUserId
......
package com.gic.haoban.manage.api.service.contact;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.contact.ContactConfigDTO;
public interface ContactConfigApiService {
/**
* 保存建联配置
*
* @param contactConfig
*/
ServiceResponse<Void> saveContactConfig(ContactConfigDTO contactConfig);
/**
* 获取建联配置
* @param enterpriseId
* @return
*/
ServiceResponse<ContactConfigDTO> getContactConfig(String enterpriseId);
}
...@@ -2,8 +2,11 @@ package com.gic.haoban.manage.api.service.contact; ...@@ -2,8 +2,11 @@ package com.gic.haoban.manage.api.service.contact;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.contact.ContactLogDTO; import com.gic.haoban.manage.api.dto.contact.ContactLogDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactLogCheckQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactLogQDTO; import com.gic.haoban.manage.api.qdto.contact.ContactLogQDTO;
import java.util.List;
public interface ContactLogApiService { public interface ContactLogApiService {
/** /**
...@@ -11,13 +14,37 @@ public interface ContactLogApiService { ...@@ -11,13 +14,37 @@ public interface ContactLogApiService {
* @param memberId * @param memberId
* @return * @return
*/ */
@Deprecated
ServiceResponse<ContactLogDTO> getClerkContactTime(String memberId); ServiceResponse<ContactLogDTO> getClerkContactTime(String memberId);
/** /**
* 获取每个业务最近一条有效建联记录
* @param memberId
* @return
*/
ServiceResponse<List<ContactLogDTO>> getClerkContactTimeList(String memberId);
/**
* 保存建联记录 * 保存建联记录
* @param qdto * @param qdto
* @return * @return
*/ */
ServiceResponse<Void> saveContactLog(ContactLogQDTO qdto); ServiceResponse<Void> saveContactLog(ContactLogQDTO qdto);
/**
* 消息队列异步自动建联
* @param message
* @return
*/
ServiceResponse<Void> autoContactLogForMQ(String message);
/**
* 是否可以建联校验
* @param checkQDTO
* @return
*/
ServiceResponse<Boolean> contactCheck(ContactLogCheckQDTO checkQDTO) ;
} }
...@@ -5,6 +5,7 @@ import java.util.List; ...@@ -5,6 +5,7 @@ import java.util.List;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.hm.HmLinkDTO; import com.gic.haoban.manage.api.dto.hm.HmLinkDTO;
import com.gic.haoban.manage.api.dto.hm.HmLinkWxaDTO; import com.gic.haoban.manage.api.dto.hm.HmLinkWxaDTO;
import com.gic.haoban.manage.api.qdto.chat.LinkHmFromWxaQDTO;
/** /**
* *
...@@ -53,7 +54,10 @@ public interface HmLinkApiService { ...@@ -53,7 +54,10 @@ public interface HmLinkApiService {
*/ */
public ServiceResponse<HmLinkWxaDTO> getLinkHmFromWxa(String enterpriseId, Integer whitchStore, String storeId, public ServiceResponse<HmLinkWxaDTO> getLinkHmFromWxa(String enterpriseId, Integer whitchStore, String storeId,
String clerkId, String linkShortCode, String mixPhone, String unionid , String memberId); String clerkId, String linkShortCode, String mixPhone, String unionid , String memberId);
public ServiceResponse<HmLinkWxaDTO> getLinkHmFromWxa(String enterpriseId, Integer whitchStore, String storeId,
String clerkId, String linkShortCode, String mixPhone, String unionid , String memberId , LinkHmFromWxaQDTO qdto);
/** /**
* *
* @Title: getMemberClerkHm * @Title: getMemberClerkHm
......
...@@ -135,7 +135,7 @@ public class QywxCallbackController extends WebBaseController { ...@@ -135,7 +135,7 @@ public class QywxCallbackController extends WebBaseController {
private void chat(String uuid, JSONObject json) { private void chat(String uuid, JSONObject json) {
int msgtype = json.getIntValue("msgtype"); int msgtype = json.getIntValue("msgtype");
// 群发任务 // 群发任务
if (msgtype == 573) { if (msgtype == 573 || msgtype==529) {
json.put("uuid", uuid); json.put("uuid", uuid);
this.openQwApiService.saveNotice(json.toJSONString()); this.openQwApiService.saveNotice(json.toJSONString());
return; return;
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace=".dao.TabContactConfigDao">
<resultMap type=".entity.TabContactConfig" id="TabContactConfigMap">
<result property="configId" column="config_id" jdbcType="INTEGER"/>
<result property="contactAuto" column="contact_auto" jdbcType="VARCHAR"/>
<result property="remarkFlag" column="remark_flag" jdbcType="INTEGER"/>
<result property="remarkContent" column="remark_content" jdbcType="VARCHAR"/>
<result property="enterpriseId" column="enterprise_id" jdbcType="VARCHAR"/>
<result property="deleteFlag" column="delete_flag" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<!--查询单个-->
<select id="queryById" resultMap="TabContactConfigMap">
select
config_idcontact_autoremark_flagremark_contententerprise_iddelete_flagcreate_timeupdate_time
from tab_contact_config
where config_id = #{configId}
</select>
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="TabContactConfigMap">
select
config_idcontact_autoremark_flagremark_contententerprise_iddelete_flagcreate_timeupdate_time
from tab_contact_config
<where>
<if test="configId != null">
and config_id = #{configId}
</if>
<if test="contactAuto != null and contactAuto != ''">
and contact_auto = #{contactAuto}
</if>
<if test="remarkFlag != null">
and remark_flag = #{remarkFlag}
</if>
<if test="remarkContent != null and remarkContent != ''">
and remark_content = #{remarkContent}
</if>
<if test="enterpriseId != null and enterpriseId != ''">
and enterprise_id = #{enterpriseId}
</if>
<if test="deleteFlag != null">
and delete_flag = #{deleteFlag}
</if>
<if test="createTime != null">
and create_time = #{createTime}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
</where>
limit #{pageable.offset}, #{pageable.pageSize}
</select>
<!--统计总行数-->
<select id="count" resultType="java.lang.Long">
select count(1)
from tab_contact_config
<where>
<if test="configId != null">
and config_id = #{configId}
</if>
<if test="contactAuto != null and contactAuto != ''">
and contact_auto = #{contactAuto}
</if>
<if test="remarkFlag != null">
and remark_flag = #{remarkFlag}
</if>
<if test="remarkContent != null and remarkContent != ''">
and remark_content = #{remarkContent}
</if>
<if test="enterpriseId != null and enterpriseId != ''">
and enterprise_id = #{enterpriseId}
</if>
<if test="deleteFlag != null">
and delete_flag = #{deleteFlag}
</if>
<if test="createTime != null">
and create_time = #{createTime}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
</if>
</where>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="configId" useGeneratedKeys="true">
insert into
tab_contact_config(contact_autoremark_flagremark_contententerprise_iddelete_flagcreate_timeupdate_time)
values (#{contactAuto}#{remarkFlag}#{remarkContent}#{enterpriseId}#{deleteFlag}#{createTime}#{updateTime})
</insert>
<insert id="insertBatch" keyProperty="configId" useGeneratedKeys="true">
insert into
tab_contact_config(contact_autoremark_flagremark_contententerprise_iddelete_flagcreate_timeupdate_time)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.contactAuto}#{entity.remarkFlag}#{entity.remarkContent}#{entity.enterpriseId}#{entity.deleteFlag}#{entity.createTime}#{entity.updateTime})
</foreach>
</insert>
<insert id="insertOrUpdateBatch" keyProperty="configId" useGeneratedKeys="true">
insert into
tab_contact_config(contact_autoremark_flagremark_contententerprise_iddelete_flagcreate_timeupdate_time)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.contactAuto}#{entity.remarkFlag}#{entity.remarkContent}#{entity.enterpriseId}#{entity.deleteFlag}#{entity.createTime}#{entity.updateTime})
</foreach>
on duplicate key update
contact_auto = values(contact_auto)remark_flag = values(remark_flag)remark_content =
values(remark_content)enterprise_id = values(enterprise_id)delete_flag = values(delete_flag)create_time =
values(create_time)update_time = values(update_time)
</insert>
<!--通过主键修改数据-->
<update id="update">
update tab_contact_config
<set>
<if test="contactAuto != null and contactAuto != ''">
contact_auto = #{contactAuto},
</if>
<if test="remarkFlag != null">
remark_flag = #{remarkFlag},
</if>
<if test="remarkContent != null and remarkContent != ''">
remark_content = #{remarkContent},
</if>
<if test="enterpriseId != null and enterpriseId != ''">
enterprise_id = #{enterpriseId},
</if>
<if test="deleteFlag != null">
delete_flag = #{deleteFlag},
</if>
<if test="createTime != null">
create_time = #{createTime},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
</set>
where config_id = #{configId}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete from tab_contact_config where config_id = #{configId}
</delete>
</mapper>
...@@ -158,6 +158,21 @@ function corpidToken() { ...@@ -158,6 +158,21 @@ function corpidToken() {
}); });
} }
function corpidTokenSelf() {
var corpids = $("#corpids").val() ;
if(!corpids || corpids.indexOf("#")==-1) {
alert("请输入corpid#secret") ;
return ;
}
$.ajax({
type:"post",
url: host+'/gic/weixin3th/qywx-token/reflush-token?tokenType=4&corpid='+corpids.split("#")[0]+"&suiteId="+corpids.split("#")[1] ,
success:function(retData) {
alert("已刷新")
}
});
}
function suiteToken() { function suiteToken() {
$.ajax({ $.ajax({
type:"post", type:"post",
...@@ -183,6 +198,7 @@ function provideToken() { ...@@ -183,6 +198,7 @@ function provideToken() {
<body> <body>
<div class="container" id="couponDiv"> <div class="container" id="couponDiv">
<div class="tab-pane" id="tab2" style="padding:5px"> <div class="tab-pane" id="tab2" style="padding:5px">
<button onclick="corpidTokenSelf()">自建应用token强刷(access-token)</button>
<button onclick="corpidToken()">企业应用token(access-token)</button> <button onclick="corpidToken()">企业应用token(access-token)</button>
<button onclick="suiteToken()">好办应用token(suite-access-token)</button> <button onclick="suiteToken()">好办应用token(suite-access-token)</button>
<button onclick="provideToken()">服务商token</button> <button onclick="provideToken()">服务商token</button>
......
...@@ -93,6 +93,12 @@ ...@@ -93,6 +93,12 @@
<dependency> <dependency>
<groupId>com.gic</groupId> <groupId>com.gic</groupId>
<artifactId>haoban-app-performance-api</artifactId>
<version>${haoban-app-performance-api}</version>
</dependency>
<dependency>
<groupId>com.gic</groupId>
<artifactId>gic-enterprise-api</artifactId> <artifactId>gic-enterprise-api</artifactId>
<version>${gic-enterprise-api}</version> <version>${gic-enterprise-api}</version>
<exclusions> <exclusions>
...@@ -142,6 +148,12 @@ ...@@ -142,6 +148,12 @@
<dependency> <dependency>
<groupId>com.gic</groupId> <groupId>com.gic</groupId>
<artifactId>gic-marketing-pro-api</artifactId>
<version>${gic-marketing-pro-api}</version>
</dependency>
<dependency>
<groupId>com.gic</groupId>
<artifactId>haoban-app-customer-api</artifactId> <artifactId>haoban-app-customer-api</artifactId>
<version>${haoban-app-customer-api}</version> <version>${haoban-app-customer-api}</version>
</dependency> </dependency>
...@@ -247,6 +259,11 @@ ...@@ -247,6 +259,11 @@
<artifactId>task-allocation-sdk</artifactId> <artifactId>task-allocation-sdk</artifactId>
<version>${task-allocation-sdk}</version> <version>${task-allocation-sdk}</version>
</dependency> </dependency>
<dependency>
<groupId>com.gic</groupId>
<artifactId>gic-canvas-api</artifactId>
<version>${gic-canvas-api}</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -10,8 +10,10 @@ import com.gic.haoban.manage.api.qdto.combined.CombinedQDTO; ...@@ -10,8 +10,10 @@ import com.gic.haoban.manage.api.qdto.combined.CombinedQDTO;
import com.gic.haoban.manage.service.util.ApolloUtils; import com.gic.haoban.manage.service.util.ApolloUtils;
import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.stats.CacheStats;
import net.coobird.thumbnailator.Thumbnails; import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -28,9 +30,7 @@ import java.io.InputStream; ...@@ -28,9 +30,7 @@ import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.util.Arrays; import java.util.Arrays;
import java.util.Iterator; import java.util.Iterator;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.*;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/** /**
* Created by wangzubo on 2024/10/27. * Created by wangzubo on 2024/10/27.
...@@ -42,14 +42,15 @@ public class ImageCombined { ...@@ -42,14 +42,15 @@ public class ImageCombined {
private static final Logger logger = LoggerFactory.getLogger(ImageCombined.class); private static final Logger logger = LoggerFactory.getLogger(ImageCombined.class);
private static final Cache<String, BufferedImage> imageCache = Caffeine.newBuilder() private static final Cache<String, BufferedImage> imageCache = Caffeine.newBuilder()
.maximumWeight(200 * 1024 * 1024) // 100MB .maximumWeight(300 * 1024 * 1024) // 100MB
.weigher((String key, BufferedImage image) -> image.getWidth() * image.getHeight() * 3) .weigher((String key, BufferedImage image) -> image.getWidth() * image.getHeight() * 4)
.removalListener((key, value, cause) -> { .removalListener((key, value, cause) -> {
logger.info("移除缓存:{}",key); logger.info("移除缓存:{}",key);
if (value != null) { if (value != null) {
value.flush(); value.flush();
} }
}) })
.recordStats()
.expireAfterAccess(10, TimeUnit.MINUTES) // 可设置失效时间 .expireAfterAccess(10, TimeUnit.MINUTES) // 可设置失效时间
.build(); .build();
...@@ -58,10 +59,12 @@ public class ImageCombined { ...@@ -58,10 +59,12 @@ public class ImageCombined {
ApolloUtils.combinedMaximumPoolSize(), ApolloUtils.combinedMaximumPoolSize(),
60L, 60L,
TimeUnit.SECONDS, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(40), new ArrayBlockingQueue<>(20),
new ThreadPoolExecutor.AbortPolicy() new ThreadPoolExecutor.AbortPolicy()
); );
private static final ScheduledExecutorService CACHE_STAT_SCHEDULER = Executors.newScheduledThreadPool(1);
private static void refreshThreadPool(ConfigChangeEvent changeEvent) { private static void refreshThreadPool(ConfigChangeEvent changeEvent) {
if (!StringUtils.equals(changeEvent.getNamespace(), APPLICATION)) { if (!StringUtils.equals(changeEvent.getNamespace(), APPLICATION)) {
return; return;
...@@ -99,10 +102,19 @@ public class ImageCombined { ...@@ -99,10 +102,19 @@ public class ImageCombined {
ImageIO.scanForPlugins(); // 初始化图像插件 ImageIO.scanForPlugins(); // 初始化图像插件
Config config = ConfigService.getAppConfig(); Config config = ConfigService.getAppConfig();
config.addChangeListener(ImageCombined::refreshThreadPool); config.addChangeListener(ImageCombined::refreshThreadPool);
CACHE_STAT_SCHEDULER.scheduleAtFixedRate(() -> {
CacheStats stats = imageCache.stats();
logger.info("【加载图片缓存统计】请求数: {}, 命中: {}, 未命中: {}, 命中率: {}%",
stats.requestCount(),
stats.hitCount(),
stats.missCount(),
String.format("%.2f", stats.hitRate() * 100));
}, 10, 10, TimeUnit.MINUTES);
} }
public static void main(String[] args) throws Exception{ public static void main(String[] args) throws Exception{
BufferedImage largeImage = loadImageWithCache(LARGE_IMAGE_URL); BufferedImage largeImage = loadImageWithCache(LARGE_IMAGE_URL,"");
BufferedImage qrCodeImage = ImageIO.read(new URL(QR_CODE_URL)); BufferedImage qrCodeImage = ImageIO.read(new URL(QR_CODE_URL));
int showStyle = 0; int showStyle = 0;
...@@ -112,6 +124,7 @@ public class ImageCombined { ...@@ -112,6 +124,7 @@ public class ImageCombined {
} }
public static byte[] getCombinedImage(CombinedQDTO combinedQDTO) throws Exception{ public static byte[] getCombinedImage(CombinedQDTO combinedQDTO) throws Exception{
String enterpriseId = combinedQDTO.getEnterpriseId();
String imageUrl = combinedQDTO.getImageUrl(); String imageUrl = combinedQDTO.getImageUrl();
String qrCodeUrl = combinedQDTO.getQrCodeUrl(); String qrCodeUrl = combinedQDTO.getQrCodeUrl();
Integer showStyle = combinedQDTO.getShowStyle(); Integer showStyle = combinedQDTO.getShowStyle();
...@@ -124,7 +137,7 @@ public class ImageCombined { ...@@ -124,7 +137,7 @@ public class ImageCombined {
//压缩图片的参数 //压缩图片的参数
imageUrl = imageUrl + "?imageView2/2/w/1080/h/10800/format/jpg"; imageUrl = imageUrl + "?imageView2/2/w/1080/h/10800/format/jpg";
logger.info("加载要合成的图片开始1"); logger.info("加载要合成的图片开始1");
BufferedImage largeImage = loadImageWithCache(imageUrl); BufferedImage largeImage = loadImageWithCache(imageUrl,enterpriseId);
logger.info("加载要合成的图片开始2"); logger.info("加载要合成的图片开始2");
BufferedImage qrCodeImage = loadImageWithReader(qrCodeUrl); BufferedImage qrCodeImage = loadImageWithReader(qrCodeUrl);
logger.info("加载要合成的图片结束"); logger.info("加载要合成的图片结束");
...@@ -170,8 +183,8 @@ public class ImageCombined { ...@@ -170,8 +183,8 @@ public class ImageCombined {
/** /**
* 从缓存中加载图像 * 从缓存中加载图像
*/ */
private static BufferedImage loadImageWithCache(String url) { private static BufferedImage loadImageWithCache(String url,String enterpriseId) {
boolean useCache = ApolloUtils.combinedCache(); boolean useCache = ApolloUtils.combinedCache(enterpriseId);
if (!useCache) { if (!useCache) {
logger.info("非缓存加载图片:{}", url); logger.info("非缓存加载图片:{}", url);
return loadImageWithReader(url); return loadImageWithReader(url);
......
package com.gic.haoban.manage.service.dao.mapper; package com.gic.haoban.manage.service.dao.mapper;
import com.gic.haoban.manage.api.dto.HandoverExternalDTO;
import com.gic.haoban.manage.api.dto.HandoverStaffFriendCountDTO; import com.gic.haoban.manage.api.dto.HandoverStaffFriendCountDTO;
import com.gic.haoban.manage.service.entity.TabHandoverExternal; import com.gic.haoban.manage.service.entity.TabHandoverExternal;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
...@@ -76,4 +77,6 @@ public interface HandoverExternalMapper { ...@@ -76,4 +77,6 @@ public interface HandoverExternalMapper {
* @return * @return
*/ */
List<HandoverStaffFriendCountDTO> listPreCountByStaffIds(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds); List<HandoverStaffFriendCountDTO> listPreCountByStaffIds(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds);
List<TabHandoverExternal> listAllByStaffIds(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds, @Param("search") String search, @Param("status") Integer status);
} }
\ No newline at end of file
...@@ -88,5 +88,13 @@ public interface TabHaobanAppOrderMapper { ...@@ -88,5 +88,13 @@ public interface TabHaobanAppOrderMapper {
*/ */
TabHaobanAppOrder queryByOrderId(@Param("orderId")String orderId); TabHaobanAppOrder queryByOrderId(@Param("orderId")String orderId);
/**
* 查询有效订单
* @param wxEnterpriseId
* @return
*/
List<TabHaobanAppOrder> listOrderForNotice(@Param("wxEnterpriseId")String wxEnterpriseId) ;
} }
...@@ -3,6 +3,7 @@ package com.gic.haoban.manage.service.dao.mapper; ...@@ -3,6 +3,7 @@ package com.gic.haoban.manage.service.dao.mapper;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO; import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.service.entity.TabHaobanStaffClerkRelation; import com.gic.haoban.manage.service.entity.TabHaobanStaffClerkRelation;
import com.gic.haoban.manage.service.entity.ext.MemberStaffRelExtDO; import com.gic.haoban.manage.service.entity.ext.MemberStaffRelExtDO;
import com.gic.haoban.manage.service.pojo.StaffStoreNumBO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Date; import java.util.Date;
...@@ -150,4 +151,6 @@ public interface TabHaobanStaffClerkRelationMapper { ...@@ -150,4 +151,6 @@ public interface TabHaobanStaffClerkRelationMapper {
List<TabHaobanStaffClerkRelation> taskoverClerkIdListAll(@Param("staffId")String staffId) ; List<TabHaobanStaffClerkRelation> taskoverClerkIdListAll(@Param("staffId")String staffId) ;
List<String> listAllStaffIdForOpenStaff(@Param("enterpriseId")String enterpriseId, @Param("wxEnterpriseId")String wxEnterpriseId, @Param("clerkId") String clerkId, @Param(("storeIdList")) List<String> storeIdList); List<String> listAllStaffIdForOpenStaff(@Param("enterpriseId")String enterpriseId, @Param("wxEnterpriseId")String wxEnterpriseId, @Param("clerkId") String clerkId, @Param(("storeIdList")) List<String> storeIdList);
List<StaffStoreNumBO> staffStoreNum(@Param("staffIdList")List<String> staffIdList);
} }
\ No newline at end of file
...@@ -96,4 +96,10 @@ public interface WxEnterpriseMapper { ...@@ -96,4 +96,10 @@ public interface WxEnterpriseMapper {
List<String> listWxEnterpriseByCallbackFlag(@Param("callbackFlag")Integer callbackFlag); List<String> listWxEnterpriseByCallbackFlag(@Param("callbackFlag")Integer callbackFlag);
List<String> getWxEnterpriseIdByName(@Param("corpName")String corpName); List<String> getWxEnterpriseIdByName(@Param("corpName")String corpName);
/**
* 查询所有非自建的
* @return
*/
List<TabHaobanWxEnterprise> listAllNotSelf() ;
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.dao.mapper.chat; ...@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.dao.mapper.chat;
import java.util.List; import java.util.List;
import com.gic.haoban.manage.service.pojo.HmStoreNumBO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import com.gic.haoban.manage.api.dto.qdto.chat.ChatHmSearchQDTO; import com.gic.haoban.manage.api.dto.qdto.chat.ChatHmSearchQDTO;
...@@ -33,5 +34,9 @@ public interface GroupChatHmMapper { ...@@ -33,5 +34,9 @@ public interface GroupChatHmMapper {
public List<TabGroupChatHm> list(ChatHmSearchQDTO qdto); public List<TabGroupChatHm> list(ChatHmSearchQDTO qdto);
List<TabGroupChatHm> listByStoreIdList(@Param("storeIdList") List<String> storeIdList) ;
List<TabGroupChatHm> listAvailableByEnterpriseId(@Param("enterpriseId") String enterpriseId); List<TabGroupChatHm> listAvailableByEnterpriseId(@Param("enterpriseId") String enterpriseId);
List<HmStoreNumBO> hasManyOwnerStore(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("chatHmIdList") List<Long> chatHmIdList);
} }
\ No newline at end of file
package com.gic.haoban.manage.service.dao.mapper.contact;
import com.gic.haoban.manage.service.entity.contact.TabContactConfig;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TabContactConfigMapper {
/**
* 根据主键查询
*/
TabContactConfig queryById(@Param("configId") Long configId);
/**
* 根据 enterpriseId 查询配置
*/
TabContactConfig queryByEnterpriseId(@Param("enterpriseId") String enterpriseId);
/**
* 插入单条数据
*/
int insert(TabContactConfig tabContactConfig);
/**
* 批量插入
*/
int insertBatch(@Param("list") List<TabContactConfig> list);
/**
* 更新数据
*/
int update(TabContactConfig tabContactConfig);
/**
* 根据主键删除
*/
int deleteById(@Param("configId") Long configId);
}
\ No newline at end of file
...@@ -3,8 +3,10 @@ package com.gic.haoban.manage.service.dao.mapper.contact; ...@@ -3,8 +3,10 @@ package com.gic.haoban.manage.service.dao.mapper.contact;
import com.gic.haoban.manage.api.qdto.chat.GroupChatActivitySearchQDTO; import com.gic.haoban.manage.api.qdto.chat.GroupChatActivitySearchQDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactFollowSearchQDTO; import com.gic.haoban.manage.api.qdto.contact.ContactFollowSearchQDTO;
import com.gic.haoban.manage.service.entity.contact.TabContactFollow; import com.gic.haoban.manage.service.entity.contact.TabContactFollow;
import com.gic.haoban.manage.service.pojo.bo.contact.listFollowCheckBO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -31,6 +33,8 @@ public interface TabContactFollowMapper { ...@@ -31,6 +33,8 @@ public interface TabContactFollowMapper {
List<TabContactFollow> pageFollow(@Param("enterpriseId") String enterpriseId, List<TabContactFollow> pageFollow(@Param("enterpriseId") String enterpriseId,
@Param("search") ContactFollowSearchQDTO searchQDTO); @Param("search") ContactFollowSearchQDTO searchQDTO);
List<String> listFollowCheck(@Param("enterpriseId") String enterpriseId,
@Param("list")List<listFollowCheckBO> list);
/** /**
* 通过memberId查询最后一次跟进记录 * 通过memberId查询最后一次跟进记录
* @param enterpriseId * @param enterpriseId
...@@ -50,6 +54,21 @@ public interface TabContactFollowMapper { ...@@ -50,6 +54,21 @@ public interface TabContactFollowMapper {
List<TabContactFollow> queryByIds(@Param("followIds") List<Long> followIds); List<TabContactFollow> queryByIds(@Param("followIds") List<Long> followIds);
/** /**
* 获取时间段内跟进类型
* @param enterpriseId
* @param clerkId
* @param memberId
* @param beginTime
* @param endTime
* @return
*/
String getFollowTypes(@Param("enterpriseId") String enterpriseId,
@Param("clerkId") String clerkId,
@Param("memberId") String memberId,
@Param("beginTime") Date beginTime,
@Param("endTime") Date endTime);
/**
* 统计总行数 * 统计总行数
* *
* @param tabContactFollow 查询条件 * @param tabContactFollow 查询条件
......
...@@ -35,7 +35,7 @@ public interface TabContactLogMapper { ...@@ -35,7 +35,7 @@ public interface TabContactLogMapper {
* @param clerkId * @param clerkId
* @return * @return
*/ */
TabContactLog queryLastLog(@Param("memberId")String memberId, @Param("clerkId")String clerkId, @Param("beginTime")Date beginTime, @Param("endTime")Date endTime); List<TabContactLog> queryLastLog(@Param("memberId")String memberId, @Param("clerkId")String clerkId, @Param("beginTime")Date beginTime, @Param("endTime")Date endTime);
/** /**
* 统计总行数 * 统计总行数
......
...@@ -54,6 +54,10 @@ public interface WxUserAddLogMapper { ...@@ -54,6 +54,10 @@ public interface WxUserAddLogMapper {
public TabWxUserAddLog selectNewLog(@Param("externalUserid") String externalUserid, public TabWxUserAddLog selectNewLog(@Param("externalUserid") String externalUserid,
@Param("staffId") String staffId); @Param("staffId") String staffId);
public TabWxUserAddLog listNewLog(@Param("externalUserid") String externalUserid,
@Param("staffId") String staffId , @Param("friendClerkId")String friendClerkId);
/** /**
* *
* @Title: listAllForDel * @Title: listAllForDel
......
...@@ -41,6 +41,15 @@ public class TabGroupChatHm implements Serializable{ ...@@ -41,6 +41,15 @@ public class TabGroupChatHm implements Serializable{
// 1有效 2作废 3待生效 // 1有效 2作废 3待生效
private Integer statusFlag ; private Integer statusFlag ;
private Integer linkCount ; private Integer linkCount ;
private String storeId ;
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public Integer getLinkCount() { public Integer getLinkCount() {
return linkCount; return linkCount;
......
package com.gic.haoban.manage.service.entity.contact;
import java.io.Serializable;
import java.util.Date;
/**
* 建联配置表(TabContactConfig)实体类
*
* @author TONGYI Lingma
* @since 2025-05-26 16:09:38
*/
public class TabContactConfig implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 配置主键ID
*/
private Long configId;
/**
* 自动建联类型 10话务任务 20企微群发 30发送商品 40发送素材
*/
private String contactAuto;
/**
* 是否自动备注(0 否 1 是)
*/
private Integer remarkFlag;
/**
* 备注内容
*/
private String remarkContent;
/**
* 企业ID
*/
private String enterpriseId;
/**
* 是否删除(0 正常 1 删除)
*/
private Integer deleteFlag;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
public Long getConfigId() {
return configId;
}
public void setConfigId(Long configId) {
this.configId = configId;
}
public String getContactAuto() {
return contactAuto;
}
public void setContactAuto(String contactAuto) {
this.contactAuto = contactAuto;
}
public Integer getRemarkFlag() {
return remarkFlag;
}
public void setRemarkFlag(Integer remarkFlag) {
this.remarkFlag = remarkFlag;
}
public String getRemarkContent() {
return remarkContent;
}
public void setRemarkContent(String remarkContent) {
this.remarkContent = remarkContent;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
\ No newline at end of file
...@@ -28,7 +28,7 @@ public class TabContactFollow implements Serializable { ...@@ -28,7 +28,7 @@ public class TabContactFollow implements Serializable {
*/ */
private String clerkCode; private String clerkCode;
/** /**
* 跟进类型 1私人电话 2企微会话 3发送商品 4企微群发 5标记建联 * 跟进类型 1私人电话 2企微会话 3发送商品 4企微群发 5标记建联 6自动建联 7营销素材
* @see com.gic.haoban.manage.api.enums.contact.ContactFollowTypeEnum * @see com.gic.haoban.manage.api.enums.contact.ContactFollowTypeEnum
*/ */
private Integer followType; private Integer followType;
...@@ -48,6 +48,22 @@ public class TabContactFollow implements Serializable { ...@@ -48,6 +48,22 @@ public class TabContactFollow implements Serializable {
* 跟进时间 * 跟进时间
*/ */
private Date followTime; private Date followTime;
/**
* 来源类型 1潜客(0001)2机会人群(0010)
*/
private Integer sourceType;
/**
* 业务类型 1潜客(0001)2机会人群(0010)
*/
private Integer bizType;
/**
* 业务id(建联日志id)
*/
private String bizId;
/** /**
* 企业id * 企业id
*/ */
...@@ -137,6 +153,30 @@ public class TabContactFollow implements Serializable { ...@@ -137,6 +153,30 @@ public class TabContactFollow implements Serializable {
this.followTime = followTime; this.followTime = followTime;
} }
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getBizId() {
return bizId;
}
public void setBizId(String bizId) {
this.bizId = bizId;
}
public String getEnterpriseId() { public String getEnterpriseId() {
return enterpriseId; return enterpriseId;
} }
......
...@@ -59,6 +59,40 @@ public class TabContactLog implements Serializable { ...@@ -59,6 +59,40 @@ public class TabContactLog implements Serializable {
* 成为潜客时间 * 成为潜客时间
*/ */
private Date potentialTime; private Date potentialTime;
/**
* 潜客分
*/
private Integer potentialScore;
/**
* 来源日志id
*/
private Long sourceLogId;
/**
* 来源类型 1潜客(0001)2机会人群(0010)
*/
private Integer sourceType;
/**
* 业务类型 1潜客(0001)2机会人群(0010)
*/
private Integer bizType;
/**
* 业务冗余数据
*/
private String bizData;
/**
* 跟进记录组
*/
private String followTypes;
/**
* 是否自动建联 1是0否
*/
private Integer autoFlag;
/** /**
* 企业id * 企业id
*/ */
...@@ -172,6 +206,62 @@ public class TabContactLog implements Serializable { ...@@ -172,6 +206,62 @@ public class TabContactLog implements Serializable {
this.potentialTime = potentialTime; this.potentialTime = potentialTime;
} }
public Integer getPotentialScore() {
return potentialScore;
}
public void setPotentialScore(Integer potentialScore) {
this.potentialScore = potentialScore;
}
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public Long getSourceLogId() {
return sourceLogId;
}
public void setSourceLogId(Long sourceLogId) {
this.sourceLogId = sourceLogId;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getBizData() {
return bizData;
}
public void setBizData(String bizData) {
this.bizData = bizData;
}
public String getFollowTypes() {
return followTypes;
}
public void setFollowTypes(String followTypes) {
this.followTypes = followTypes;
}
public Integer getAutoFlag() {
return autoFlag;
}
public void setAutoFlag(Integer autoFlag) {
this.autoFlag = autoFlag;
}
public String getEnterpriseId() { public String getEnterpriseId() {
return enterpriseId; return enterpriseId;
} }
......
...@@ -88,6 +88,19 @@ public class TabContactOrder implements Serializable { ...@@ -88,6 +88,19 @@ public class TabContactOrder implements Serializable {
*/ */
private Integer potentialScore; private Integer potentialScore;
/** /**
* 金字塔分层信息
*/
private String groupInfo;
/**
* 来源类型 1潜客(0001)2机会人群(0010)
*/
private Integer sourceType;
/**
* 业务类型 1潜客(0001)2机会人群(0010)
*/
private Integer bizType;
/**
* 是否删除 * 是否删除
*/ */
private Integer deleteFlag; private Integer deleteFlag;
...@@ -256,6 +269,30 @@ public class TabContactOrder implements Serializable { ...@@ -256,6 +269,30 @@ public class TabContactOrder implements Serializable {
this.potentialScore = potentialScore; this.potentialScore = potentialScore;
} }
public String getGroupInfo() {
return groupInfo;
}
public void setGroupInfo(String groupInfo) {
this.groupInfo = groupInfo;
}
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public Integer getDeleteFlag() { public Integer getDeleteFlag() {
return deleteFlag; return deleteFlag;
} }
......
...@@ -43,6 +43,16 @@ public class TabHmLink implements Serializable { ...@@ -43,6 +43,16 @@ public class TabHmLink implements Serializable {
private Long otherChatHmId ; private Long otherChatHmId ;
private String chatStoreRule ;
public String getChatStoreRule() {
return chatStoreRule;
}
public void setChatStoreRule(String chatStoreRule) {
this.chatStoreRule = chatStoreRule;
}
public Long getOtherChatHmId() { public Long getOtherChatHmId() {
return otherChatHmId; return otherChatHmId;
} }
......
...@@ -82,6 +82,25 @@ public class TabQwMomentPlan implements Serializable{ ...@@ -82,6 +82,25 @@ public class TabQwMomentPlan implements Serializable{
*/ */
private Integer mediaLinkFlag ; private Integer mediaLinkFlag ;
private Integer analyseFlag ;
private Integer analyseDay ;
public Integer getAnalyseFlag() {
return analyseFlag;
}
public void setAnalyseFlag(Integer analyseFlag) {
this.analyseFlag = analyseFlag;
}
public Integer getAnalyseDay() {
return analyseDay;
}
public void setAnalyseDay(Integer analyseDay) {
this.analyseDay = analyseDay;
}
public Integer getMediaLinkFlag() { public Integer getMediaLinkFlag() {
return mediaLinkFlag; return mediaLinkFlag;
} }
......
package com.gic.haoban.manage.service.pojo;
import java.io.Serializable;
public class HmStoreNumBO implements Serializable {
private Long chatHmId ;
private int num ;
public Long getChatHmId() {
return chatHmId;
}
public void setChatHmId(Long chatHmId) {
this.chatHmId = chatHmId;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
package com.gic.haoban.manage.service.pojo;
import java.io.Serializable;
public class StaffStoreNumBO implements Serializable {
private String staffId ;
private int num ;
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
...@@ -44,6 +44,16 @@ public class GroupChatHmBO implements Serializable{ ...@@ -44,6 +44,16 @@ public class GroupChatHmBO implements Serializable{
private Integer statusFlag ; private Integer statusFlag ;
// 可以群数 // 可以群数
private Integer usableChatCount; private Integer usableChatCount;
private String storeId ;
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public Integer getUsableChatCount() { public Integer getUsableChatCount() {
return usableChatCount; return usableChatCount;
......
package com.gic.haoban.manage.service.pojo.bo.contact;
import java.io.Serializable;
import java.util.Date;
public class listFollowCheckBO implements Serializable {
private static final long serialVersionUID = 973688857967269974L;
/**
* 会员id
*/
private String memberId;
/**
* 导购id
*/
private String clerkId;
/**
* 互动时间
*/
private Date followTime;
public listFollowCheckBO() {
}
public listFollowCheckBO(String memberId, String clerkId, Date followTime) {
this.memberId = memberId;
this.clerkId = clerkId;
this.followTime = followTime;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public Date getFollowTime() {
return followTime;
}
public void setFollowTime(Date followTime) {
this.followTime = followTime;
}
}
\ No newline at end of file
...@@ -41,6 +41,16 @@ public class HmLinkBO implements Serializable { ...@@ -41,6 +41,16 @@ public class HmLinkBO implements Serializable {
/**0删除 1正常*/ /**0删除 1正常*/
private Integer statusFlag; private Integer statusFlag;
private Long otherChatHmId ; private Long otherChatHmId ;
// [{"type":1服务门店2协管3lbs4指定人群,"open":1}]
private String chatStoreRule ;
public String getChatStoreRule() {
return chatStoreRule;
}
public void setChatStoreRule(String chatStoreRule) {
this.chatStoreRule = chatStoreRule;
}
public Long getOtherChatHmId() { public Long getOtherChatHmId() {
return otherChatHmId; return otherChatHmId;
......
package com.gic.haoban.manage.service.service; package com.gic.haoban.manage.service.service;
import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO; import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO;
import com.gic.haoban.manage.api.dto.MemberExternalUserDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO; import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated; import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -133,4 +134,5 @@ public interface ExternalClerkRelatedService { ...@@ -133,4 +134,5 @@ public interface ExternalClerkRelatedService {
*/ */
int getFriendNum(String memberId , String storeId , String clerkId) ; int getFriendNum(String memberId , String storeId , String clerkId) ;
List<MemberExternalUserDTO> listMemberExternalUser(String enterpriseId, String memberId);
} }
...@@ -123,4 +123,6 @@ public interface HandoverService { ...@@ -123,4 +123,6 @@ public interface HandoverService {
Boolean filterHandoverStaff(String wxEnterpriseId, String wxUserId); Boolean filterHandoverStaff(String wxEnterpriseId, String wxUserId);
public void delHandoverStaff(String wxEnterpriseId, List<String> wxUserIds) ; public void delHandoverStaff(String wxEnterpriseId, List<String> wxUserIds) ;
List<HandoverExternalDTO> listAllByStaffIds(String wxEnterpriseId, String search, List<String> staffIds);
} }
...@@ -204,4 +204,6 @@ public interface StaffClerkRelationService { ...@@ -204,4 +204,6 @@ public interface StaffClerkRelationService {
List<String> listAllStaffIdForOpenStaff(String enterpriseId,String wxEnterpriseId,String clerkId , List<String> storeIdList); 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); ServiceResponse<Map<String, List<String>>> listClerkForCanvas(String wxEnterpriseId, String enterpriseId, String creatorId, String storeFilterId);
Map<String,Boolean> staffManyStore(List<String> staffIdList);
} }
package com.gic.haoban.manage.service.service.chat; package com.gic.haoban.manage.service.service.chat;
import java.util.List; import java.util.List;
import java.util.Map;
import com.gic.api.base.commons.BasePageInfo; import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
...@@ -63,4 +64,11 @@ public interface GroupChatHmService { ...@@ -63,4 +64,11 @@ public interface GroupChatHmService {
Page<GroupChatHmMemberRelationDTO> memberGroupChatHmPage(String enterpriseId, String memberId, BasePageInfo basePageInfo); Page<GroupChatHmMemberRelationDTO> memberGroupChatHmPage(String enterpriseId, String memberId, BasePageInfo basePageInfo);
Integer memberJoinGroupChatHmCount(String enterpriseId, String memberId); Integer memberJoinGroupChatHmCount(String enterpriseId, String memberId);
/**
* 活码包含的群主有多个门店
* @param wxEnterpriseId
* @return
*/
Map<Long,Boolean> hasManyOwnerStore(String wxEnterpriseId, List<Long> chatHmIdList);
} }
\ No newline at end of file
...@@ -42,6 +42,7 @@ public interface GroupChatPlanService { ...@@ -42,6 +42,7 @@ public interface GroupChatPlanService {
void stopByMsgid(Long planId); void stopByMsgid(Long planId);
String getQwMsgId(String staffId , Date sendTime, GroupMessageServiceImpl.GroupMsgChatType groupMsgChatType) ; String getQwMsgId(String staffId , Date sendTime, GroupMessageServiceImpl.GroupMsgChatType groupMsgChatType) ;
String getQwMsgId(String staffId , Date sendTime, GroupMessageServiceImpl.GroupMsgChatType groupMsgChatType , String enterpriseId , String taskId) ;
void noticeTimer(String params); void noticeTimer(String params);
......
package com.gic.haoban.manage.service.service.chat.impl; package com.gic.haoban.manage.service.service.chat.impl;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.gic.haoban.manage.api.dto.chat.GroupChatHmMemberRelationDTO; import com.gic.haoban.manage.api.dto.chat.GroupChatHmMemberRelationDTO;
import com.gic.haoban.manage.service.dao.mapper.chat.*; import com.gic.haoban.manage.service.dao.mapper.chat.*;
import com.gic.haoban.manage.service.pojo.HmStoreNumBO;
import com.gic.haoban.manage.service.pojo.bo.chat.GroupChatHmMemberRelationBO; import com.gic.haoban.manage.service.pojo.bo.chat.GroupChatHmMemberRelationBO;
import com.gic.haoban.manage.service.service.chat.GroupChatUserService; import com.gic.haoban.manage.service.service.chat.GroupChatUserService;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
...@@ -471,4 +465,18 @@ public class GroupChatHmServiceImpl implements GroupChatHmService { ...@@ -471,4 +465,18 @@ public class GroupChatHmServiceImpl implements GroupChatHmService {
public Integer memberJoinGroupChatHmCount(String enterpriseId, String memberId) { public Integer memberJoinGroupChatHmCount(String enterpriseId, String memberId) {
return groupChatUserMapper.getMemberJoinChatGroupCountByHmName(enterpriseId, memberId, "骑行"); return groupChatUserMapper.getMemberJoinChatGroupCountByHmName(enterpriseId, memberId, "骑行");
} }
@Override
public Map<Long,Boolean> hasManyOwnerStore(String wxEnterpriseId, List<Long> chatHmIdList) {
Map<Long, Boolean> map = new HashMap<>() ;
List<HmStoreNumBO> list = this.groupChatHmMapper.hasManyOwnerStore(wxEnterpriseId, chatHmIdList);
if(CollectionUtils.isNotEmpty(list)) {
list.forEach(item -> {
map.put(item.getChatHmId(),item.getNum()>1) ;
}) ;
}
return map ;
}
} }
\ No newline at end of file
...@@ -7,6 +7,10 @@ import java.util.concurrent.ExecutorService; ...@@ -7,6 +7,10 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.gic.canvas.api.dto.node.CanvasNodeDTO;
import com.gic.canvas.api.dto.node.QWMassContactNodeDTO;
import com.gic.canvas.api.dto.node.extract.MaterialExternalResources;
import com.gic.canvas.api.service.CanvasApiService;
import com.gic.enterprise.api.dto.EnterpriseDTO; import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.service.EnterpriseService; import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.manage.api.dto.CommonMQDTO; import com.gic.haoban.manage.api.dto.CommonMQDTO;
...@@ -29,6 +33,8 @@ import com.gic.haoban.manage.service.service.content.impl.GroupMessageServiceImp ...@@ -29,6 +33,8 @@ import com.gic.haoban.manage.service.service.content.impl.GroupMessageServiceImp
import com.gic.haoban.manage.service.util.StreamUtils; import com.gic.haoban.manage.service.util.StreamUtils;
import com.gic.haoban.task.api.dto.TaskSettingDTO; import com.gic.haoban.task.api.dto.TaskSettingDTO;
import com.gic.haoban.task.api.service.SettingApiService; import com.gic.haoban.task.api.service.SettingApiService;
import com.gic.haoban.task.manage.api.dto.MarketClueTaskDTO;
import com.gic.haoban.task.manage.api.service.IMarketClueTaskApiService;
import com.gic.haoban.task.manage.api.service.QywxGroupSendCanvasApiService; import com.gic.haoban.task.manage.api.service.QywxGroupSendCanvasApiService;
import com.gic.thirdparty.cloudfile.CloudFileUtil; import com.gic.thirdparty.cloudfile.CloudFileUtil;
import com.gic.thirdparty.cloudfile.enums.CloudFileBusinessOptEnum; import com.gic.thirdparty.cloudfile.enums.CloudFileBusinessOptEnum;
...@@ -142,6 +148,10 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService { ...@@ -142,6 +148,10 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
private SettingApiService settingApiService ; private SettingApiService settingApiService ;
@Autowired @Autowired
private QwMomentPlanAttendMapper qwMomentPlanAttendMapper ; private QwMomentPlanAttendMapper qwMomentPlanAttendMapper ;
@Autowired
private IMarketClueTaskApiService marketClueTaskApiService ;
@Autowired
private CanvasApiService canvasApiService ;
private static GicMQClient mqClient = GICMQClientUtil.getClientInstance(); private static GicMQClient mqClient = GICMQClientUtil.getClientInstance();
...@@ -345,7 +355,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService { ...@@ -345,7 +355,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
@Override @Override
public void doPlan(Long planId) { public void doPlan(Long planId) {
logger.info("开始群群发发送{}", planId); logger.info("开始群群发发送{}", planId);
DingUtils.send("开始群群发发送,planId=" + planId + ",tranceid=" + ProviderLocalTag.tag.get().traceId, false); //DingUtils.send("开始群群发发送,planId=" + planId + ",tranceid=" + ProviderLocalTag.tag.get().traceId, false);
TabGroupChatPlan plan = this.groupChatPlanMapper.selectById(planId); TabGroupChatPlan plan = this.groupChatPlanMapper.selectById(planId);
if (null == plan) { if (null == plan) {
logger.info("计划不存在,planid={}", planId); logger.info("计划不存在,planid={}", planId);
...@@ -514,7 +524,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService { ...@@ -514,7 +524,7 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
@Override @Override
public void doPlanSendInfoTimer(String params) { public void doPlanSendInfoTimer(String params) {
DingUtils.send("开始群群发统计(定时),params=" + params + ",tranceid=" + ProviderLocalTag.tag.get().traceId, false); // DingUtils.send("开始群群发统计(定时),params=" + params + ",tranceid=" + ProviderLocalTag.tag.get().traceId, false);
Long planId = Long.parseLong(params); Long planId = Long.parseLong(params);
List<Long> idList = this.groupChatPlanOwnerLogService.listForTimer(planId); List<Long> idList = this.groupChatPlanOwnerLogService.listForTimer(planId);
logger.info("定时处理群发结果,条数={}", idList.size()); logger.info("定时处理群发结果,条数={}", idList.size());
...@@ -896,6 +906,37 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService { ...@@ -896,6 +906,37 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
@Override @Override
public String getQwMsgId(String staffId , Date sendTime, GroupMessageServiceImpl.GroupMsgChatType groupMsgChatType) { public String getQwMsgId(String staffId , Date sendTime, GroupMessageServiceImpl.GroupMsgChatType groupMsgChatType) {
Date startTime = DateUtil.addNumForSecond(sendTime,-30) ; Date startTime = DateUtil.addNumForSecond(sendTime,-30) ;
Date endTime = DateUtil.addNumForMinute(sendTime,2) ;
TabHaobanStaff staff = this.staffMapper.selectByPrimaryKey(staffId) ;
if(null == staff) {
return null ;
}
String wxEnterpriseId = staff.getWxEnterpriseId() ;
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
String wxUserId = staff.getWxUserId() ;
if(qwDTO.needOpenUserId3th()) {
wxUserId = staff.getWxOpenUseId() ;
}
Long sendTimeSec = sendTime.getTime() / 1000;
// 发送到群
List<QywxGroupMessageInfoDTO> msgList = this.queryGroupMsg(groupMsgChatType,startTime, endTime, qwDTO, wxUserId);
if(CollectionUtils.isNotEmpty(msgList)) {
if(msgList.size()==0) {
return msgList.get(0).getMsgId() ;
}else {
return msgList.stream()
.min(Comparator.comparingLong(msg -> Math.abs(msg.getCreateTime() - sendTimeSec)))
.map(QywxGroupMessageInfoDTO::getMsgId)
.orElse(null);
}
}
return null ;
}
@Override
public String getQwMsgId(String staffId, Date sendTime, GroupMessageServiceImpl.GroupMsgChatType groupMsgChatType, String enterpriseId, String taskId) {
Date startTime = DateUtil.addNumForSecond(sendTime,-120) ;
Date endTime = DateUtil.addNumForMinute(sendTime,1) ; Date endTime = DateUtil.addNumForMinute(sendTime,1) ;
TabHaobanStaff staff = this.staffMapper.selectByPrimaryKey(staffId) ; TabHaobanStaff staff = this.staffMapper.selectByPrimaryKey(staffId) ;
String wxEnterpriseId = staff.getWxEnterpriseId() ; String wxEnterpriseId = staff.getWxEnterpriseId() ;
...@@ -910,12 +951,76 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService { ...@@ -910,12 +951,76 @@ public class GroupChatPlanServiceImpl implements GroupChatPlanService {
if(msgList.size()==0) { if(msgList.size()==0) {
return msgList.get(0).getMsgId() ; return msgList.get(0).getMsgId() ;
}else { }else {
return msgList.get(msgList.size()-1).getMsgId() ; List<MaterialExternalResources> taskList = this.getTaskList(taskId,enterpriseId) ;
if(CollectionUtils.isEmpty(taskList)) {
return null ;
}
String taskText = this.getTaskText(taskList) ;
int count = this.getTaskNum(taskList) ;
if(StringUtils.isNotBlank(taskText)) {
logger.info("taskText={}",taskText);
int matchNum = 0 ;
String msgid = null ;
for(QywxGroupMessageInfoDTO item : msgList) {
if(item.getDataStr().contains(taskText)) {
JSONObject j = JSONObject.parseObject(item.getDataStr()) ;
int size = j.getJSONArray("attachments").size() ;
if(size == count) {
msgid = item.getMsgId();
matchNum = matchNum + 1;
}
}
}
logger.info("matchNum=",matchNum);
if(matchNum == 1) {
return msgid ;
}
}
DingUtils.send("企微查询到多个群发任务,无法匹配",false);
return null ;
} }
} }
return null ; return null ;
} }
private List<MaterialExternalResources> getTaskList(String taskId , String enterpriseId) {
MarketClueTaskDTO task = this.marketClueTaskApiService.getMarketClueTaskDTO(taskId, enterpriseId);
Long canvasId = task.getCanvasId();
Long nodeId = task.getNodeId();
ServiceResponse<CanvasNodeDTO<?>> nodeResp = this.canvasApiService.getCanvasNodeByNodeId(canvasId, nodeId);
logger.info("群发节点={}", JSONObject.toJSONString(nodeResp));
ServiceResponse<CanvasNodeDTO<QWMassContactNodeDTO>> massNodeResp = this.canvasApiService.convertToQWMassContactNode(nodeResp.getResult());
QWMassContactNodeDTO nodeDTO = massNodeResp.getResult().getNodeInfo();
List<MaterialExternalResources> canvasMaterialList = nodeDTO.getMaterialResourcesList();
return canvasMaterialList;
}
private String getTaskText(List<MaterialExternalResources> canvasMaterialList) {
// 1:文本,2:图片,3:网页,4:视频,5:文件, 6: 小程序,7:卡券
String s = "";
for(MaterialExternalResources res : canvasMaterialList) {
// 素材类型,1:文本,2:图片,3:网页,4:视频,5:文件, 6: 小程序,7:卡券
if(res.getMaterialType()==1) {
s = res.getContentText() ;
JSONObject json = new JSONObject() ;
json.put("content",s) ;
return json.toJSONString() ;
}
}
return s ;
}
private int getTaskNum(List<MaterialExternalResources> canvasMaterialList) {
// 1:文本,2:图片,3:网页,4:视频,5:文件, 6: 小程序,7:卡券
int num = 0 ;
for(MaterialExternalResources res : canvasMaterialList) {
// 素材类型,1:文本,2:图片,3:网页,4:视频,5:文件, 6: 小程序,7:卡券
if(res.getMaterialType()!=1) {
num = num + 1;
}
}
return num ;
}
private List<QywxGroupMessageInfoDTO> queryGroupMsg(GroupMessageServiceImpl.GroupMsgChatType groupMsgChatType, Date startTime, Date endTime , WxEnterpriseQwDTO qwDTO , String qwUserId) { private List<QywxGroupMessageInfoDTO> queryGroupMsg(GroupMessageServiceImpl.GroupMsgChatType groupMsgChatType, Date startTime, Date endTime , WxEnterpriseQwDTO qwDTO , String qwUserId) {
QywxGroupMessageQDTO qdto = new QywxGroupMessageQDTO(); QywxGroupMessageQDTO qdto = new QywxGroupMessageQDTO();
qdto.setCorpid(qwDTO.getThirdCorpid()); qdto.setCorpid(qwDTO.getThirdCorpid());
......
...@@ -1122,6 +1122,40 @@ public class GroupChatServiceImpl implements GroupChatService { ...@@ -1122,6 +1122,40 @@ public class GroupChatServiceImpl implements GroupChatService {
PageHelper.startPage(basePageInfo); PageHelper.startPage(basePageInfo);
List<GroupChatOwnerDTO> list = this.groupChatOwnerMapper.listOwner(qdto); List<GroupChatOwnerDTO> list = this.groupChatOwnerMapper.listOwner(qdto);
Page<GroupChatOwnerDTO> retPage = PageHelperUtils.changePageHelperToCurrentPage(list, GroupChatOwnerDTO.class); Page<GroupChatOwnerDTO> retPage = PageHelperUtils.changePageHelperToCurrentPage(list, GroupChatOwnerDTO.class);
// 拼门店名称
if(CollectionUtils.isNotEmpty(retPage.getResult()) && qdto.getShowStoreNames()==1 && StringUtils.isNotBlank(qdto.getShowNameEnterpriseId())) {
List<String> staffIdList = retPage.getResult().stream().map(GroupChatOwnerDTO::getStaffId).collect(Collectors.toList());
List<StaffClerkRelationDTO> staffList = this.staffClerkRelationService.listByWxEnterpriseIdAndStaffId(qdto.getWxEnterpriseId(),staffIdList.stream().collect(Collectors.toSet())) ;
Map<String,List<StaffClerkRelationDTO>> staffMap = staffList.stream().collect(Collectors.groupingBy(StaffClerkRelationDTO::getStaffId)) ;
staffList = staffList.stream().filter(o->o.getEnterpriseId().equals(qdto.getShowNameEnterpriseId()) && StringUtils.isNotBlank(o.getStoreId())).collect(Collectors.toList());
Map<String,String> storeNameMap = new HashMap<>() ;
if(CollectionUtils.isNotEmpty(staffList)) {
List<String> storeIdList = staffList.stream().filter(o->StringUtils.isNotEmpty(o.getStoreId())).map(o->o.getStoreId()).collect(Collectors.toList()) ;
if(CollectionUtils.isNotEmpty(storeIdList)) {
String[] arr = new String[storeIdList.size()] ;
for(int i=0;i<storeIdList.size();i++) {
arr[i] = storeIdList.get(i) ;
}
List<StoreDTO> storeList = this.storeService.getStores(arr) ;
if(CollectionUtils.isNotEmpty(storeList)) {
storeNameMap = storeList.stream().collect(Collectors.toMap(StoreDTO::getStoreId, o->o.getStoreName(),(k1,k2)->k1)) ;
}
}
}
for(GroupChatOwnerDTO item : retPage.getResult()) {
String staffId = item.getStaffId() ;
List<StaffClerkRelationDTO> relationList = staffMap.get(staffId) ;
List<String> storeNameList = new ArrayList<>() ;
if(CollectionUtils.isNotEmpty(relationList)) {
for (StaffClerkRelationDTO relation : relationList) {
if(StringUtils.isNotBlank(relation.getStoreId()) && storeNameMap.containsKey(relation.getStoreId())) {
storeNameList.add(storeNameMap.get(relation.getStoreId()));
}
}
}
item.setStoreNames(String.join("、", storeNameList));
}
}
return retPage; return retPage;
} }
......
package com.gic.haoban.manage.service.service.contact;
import com.gic.haoban.manage.api.dto.contact.ContactConfigDTO;
public interface ContactConfigService {
/**
* 保存建联配置
*
* @param contactConfig
*/
void saveContactConfig(ContactConfigDTO contactConfig);
/**
* 获取建联配置
* @param enterpriseId
* @return
*/
ContactConfigDTO getContactConfig(String enterpriseId);
}
package com.gic.haoban.manage.service.service.contact; package com.gic.haoban.manage.service.service.contact;
import com.gic.api.base.commons.BusinessException; import com.gic.api.base.commons.BusinessException;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.haoban.manage.api.qdto.contact.ContactLogQDTO; import com.gic.haoban.manage.api.qdto.contact.ContactLogQDTO;
import com.gic.haoban.manage.service.entity.contact.TabContactLog; import com.gic.haoban.manage.service.entity.contact.TabContactLog;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map;
public interface ContactLogService { public interface ContactLogService {
/**
* 是否可以建联判断
* @param enterpriseId
* @param memberId
* @param clerkDTO
* @return
*/
Integer contactCheck(String enterpriseId, String memberId, ClerkDTO clerkDTO,Integer bizType) ;
/** /**
* 保存建联记录 * 保存建联记录
...@@ -17,12 +28,24 @@ public interface ContactLogService { ...@@ -17,12 +28,24 @@ public interface ContactLogService {
void saveContactLog(ContactLogQDTO qdto) throws BusinessException; void saveContactLog(ContactLogQDTO qdto) throws BusinessException;
/** /**
* 自动建联
* @param qdto
*/
void autoContactLog(ContactLogQDTO qdto);
/**
* 同步建联
* @param qdto
*/
void syncContactLog(ContactLogQDTO qdto);
/**
* 清除建联状态 * 清除建联状态
* *
* @param memberId * @param memberId
* @param clearType 1 消费清除 2 换绑主导购 * @param clearType 1 消费清除 2 换绑主导购
*/ */
void clearContactLog(String memberId, Integer clearType,String clerkId); void clearContactLog(String enterpriseId,String memberId, Integer clearType,String clerkId);
/** /**
* 获取最近一条有效建联记录 * 获取最近一条有效建联记录
...@@ -33,10 +56,19 @@ public interface ContactLogService { ...@@ -33,10 +56,19 @@ public interface ContactLogService {
TabContactLog getClerkContactTime(String memberId); TabContactLog getClerkContactTime(String memberId);
/** /**
* 根据时间获取最近一条建联记录 * 获取每个业务最近一条有效建联记录
* @param memberId
* @return
*/
List<TabContactLog> getClerkContactTimeList(String memberId);
/**
* 获取最近一条建联记录
* @param memberId * @param memberId
* @param clerkId
* @param beginTime * @param beginTime
* @param endTime
* @return * @return
*/ */
TabContactLog getLastByTime(String memberId, Date beginTime,Date endTime); Map<Integer,TabContactLog> getLastByTime(String memberId, String clerkId, Date beginTime, Date endTime);
} }
...@@ -23,6 +23,7 @@ import com.gic.haoban.app.customer.dto.contact.ContactParamDTO; ...@@ -23,6 +23,7 @@ import com.gic.haoban.app.customer.dto.contact.ContactParamDTO;
import com.gic.haoban.app.customer.dto.contact.ContactSumDTO; import com.gic.haoban.app.customer.dto.contact.ContactSumDTO;
import com.gic.haoban.app.customer.service.api.service.CustomerApiService; import com.gic.haoban.app.customer.service.api.service.CustomerApiService;
import com.gic.haoban.common.utils.DateUtil; import com.gic.haoban.common.utils.DateUtil;
import com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum;
import com.gic.haoban.manage.service.dao.mapper.content.holo.HoloDataSource; import com.gic.haoban.manage.service.dao.mapper.content.holo.HoloDataSource;
import com.gic.haoban.manage.service.pojo.bo.contact.ContactDataBO; import com.gic.haoban.manage.service.pojo.bo.contact.ContactDataBO;
import com.gic.store.goods.dto.potential.PlatformPotentialCustomerOutDTO; import com.gic.store.goods.dto.potential.PlatformPotentialCustomerOutDTO;
...@@ -178,6 +179,7 @@ public class ContactAdaptor { ...@@ -178,6 +179,7 @@ public class ContactAdaptor {
ContactParamDTO contact = new ContactParamDTO(); ContactParamDTO contact = new ContactParamDTO();
contact.setRuleJSON(JSON.toJSONString(result)); contact.setRuleJSON(JSON.toJSONString(result));
contact.setContactType(0); contact.setContactType(0);
contact.setBizType(ContactBizTypeEnum.POTENTIAL_CUSTOMER.getType());
params.setStoreId(storeId); params.setStoreId(storeId);
params.setClerkId(clerkId); params.setClerkId(clerkId);
params.setClerkType(clerkTypeStr); params.setClerkType(clerkTypeStr);
......
package com.gic.haoban.manage.service.service.contact.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.manage.api.dto.contact.ContactConfigDTO;
import com.gic.haoban.manage.service.dao.mapper.contact.TabContactConfigMapper;
import com.gic.haoban.manage.service.entity.contact.TabContactConfig;
import com.gic.haoban.manage.service.service.contact.ContactConfigService;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Service("contactConfigService")
public class ContactConfigServiceImpl implements ContactConfigService {
private static final Logger logger = LogManager.getLogger(ContactConfigService.class);
@Autowired
private TabContactConfigMapper contactConfigMapper;
@Override
public void saveContactConfig(ContactConfigDTO contactConfig) {
logger.info("保存联系配置信息:{}", JSON.toJSONString(contactConfig));
if (contactConfig.getContactAutoList() == null) {
contactConfig.setContactAutoList(Collections.emptyList());
}
if (contactConfig.getRemarkContentList() == null) {
contactConfig.setRemarkContentList(Collections.emptyList());
}
String enterpriseId = contactConfig.getEnterpriseId();
TabContactConfig config = contactConfigMapper.queryByEnterpriseId(enterpriseId);
if (config != null) {
config.setRemarkFlag(contactConfig.getRemarkFlag());
config.setContactAuto(contactConfig.getContactAutoList().stream().map(String::valueOf).collect(Collectors.joining(",")));
config.setRemarkContent(JSON.toJSONString(contactConfig.getRemarkContentList()));
contactConfigMapper.update(config);
}else {
config = EntityUtil.changeEntityNew(TabContactConfig.class, contactConfig);
config.setConfigId(UniqueIdUtils.uniqueLong());
config.setContactAuto(contactConfig.getContactAutoList().stream().map(String::valueOf).collect(Collectors.joining(",")));
config.setRemarkContent(JSON.toJSONString(contactConfig.getRemarkContentList()));
contactConfigMapper.insert(config);
}
}
@Override
public ContactConfigDTO getContactConfig(String enterpriseId) {
TabContactConfig config = contactConfigMapper.queryByEnterpriseId(enterpriseId);
if (config == null) {
return null;
}
ContactConfigDTO contactConfigDTO = EntityUtil.changeEntityNew(ContactConfigDTO.class, config);
List<Integer> contactAutoList = Optional.ofNullable(config.getContactAuto())
.filter(StringUtils::isNotBlank)
.map(s -> Arrays.stream(s.split(",")).map(Integer::valueOf).collect(Collectors.toList()))
.orElse(Collections.emptyList());
contactConfigDTO.setContactAutoList(contactAutoList);
List<String> remarkContentList = Optional.ofNullable(config.getRemarkContent())
.filter(StringUtils::isNotBlank)
.map(x -> JSONArray.parseArray(x, String.class))
.orElse(Collections.emptyList());
contactConfigDTO.setRemarkContentList(remarkContentList);
return contactConfigDTO;
}
}
...@@ -23,6 +23,9 @@ import com.gic.haoban.manage.service.service.ESMemberInfoService; ...@@ -23,6 +23,9 @@ import com.gic.haoban.manage.service.service.ESMemberInfoService;
import com.gic.haoban.manage.service.service.contact.ContactLogService; import com.gic.haoban.manage.service.service.contact.ContactLogService;
import com.gic.haoban.manage.service.service.contact.ContactOrderService; import com.gic.haoban.manage.service.service.contact.ContactOrderService;
import com.gic.member.api.dto.es.MemberDataDTO; import com.gic.member.api.dto.es.MemberDataDTO;
import com.gic.member.tag.api.dto.MemberTagGroupDetailDTO;
import com.gic.member.tag.api.dto.MemberTagGroupSimpleDTO;
import com.gic.member.tag.api.service.MemberTagGroupApiService;
import com.gic.order.api.dto.resp.OrderInfoResp; import com.gic.order.api.dto.resp.OrderInfoResp;
import com.gic.order.api.dto.resp.OrderItemResp; import com.gic.order.api.dto.resp.OrderItemResp;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
...@@ -49,6 +52,8 @@ public class ContactOrderServiceImpl implements ContactOrderService { ...@@ -49,6 +52,8 @@ public class ContactOrderServiceImpl implements ContactOrderService {
@Autowired @Autowired
private ESMemberInfoService esMemberInfoService; private ESMemberInfoService esMemberInfoService;
@Autowired @Autowired
private MemberTagGroupApiService memberTagGroupApiService;
@Autowired
private StoreService storeService; private StoreService storeService;
@Autowired @Autowired
private ClerkService clerkService; private ClerkService clerkService;
...@@ -70,6 +75,11 @@ public class ContactOrderServiceImpl implements ContactOrderService { ...@@ -70,6 +75,11 @@ public class ContactOrderServiceImpl implements ContactOrderService {
logger.info("订单不是销售单"); logger.info("订单不是销售单");
return false; return false;
} }
long noGiveCount = orderInfoResp.getOrderItems().stream().filter(x -> !Objects.equals(x.getProType(), 2)).count();
if (noGiveCount == 0) {
logger.info("都是赠品订单:{}", orderId);
return false;
}
String enterpriseId = orderInfoResp.getEnterpriseId(); String enterpriseId = orderInfoResp.getEnterpriseId();
String memberId = orderInfoResp.getMemberId(); String memberId = orderInfoResp.getMemberId();
logger.info("建联处理订单:{},memberId:{}", orderId,memberId); logger.info("建联处理订单:{},memberId:{}", orderId,memberId);
...@@ -86,47 +96,79 @@ public class ContactOrderServiceImpl implements ContactOrderService { ...@@ -86,47 +96,79 @@ public class ContactOrderServiceImpl implements ContactOrderService {
contactBeginTime = DateUtil.offsetDay(receiptsDate, -1); contactBeginTime = DateUtil.offsetDay(receiptsDate, -1);
} }
TabContactLog lastContactLog = contactLogService.getLastByTime(memberId, contactBeginTime,receiptsDate); Map<Integer, TabContactLog> contactMap = contactLogService.getLastByTime(memberId, null, contactBeginTime, receiptsDate);
if (lastContactLog == null) { if (contactMap == null || contactMap.isEmpty()) {
return false; return false;
} }
logger.info("建联转化订单建联信息:{}", JSON.toJSONString(lastContactLog)); for (Map.Entry<Integer, TabContactLog> entry : contactMap.entrySet()) {
TabContactOrder contactOrder = new TabContactOrder(); Integer key = entry.getKey();
contactOrder.setOrderId(orderId); TabContactLog lastContactLog = entry.getValue();
contactOrder.setMemberId(memberId); if (lastContactLog == null) {
contactOrder.setOrderNumber(orderInfoResp.getOrderNo()); continue;
Double paidAmount = orderInfoResp.getPayAmount(); }
if (Objects.equals(PlatformChannelEnum.C_WECHAT_MINI.getChannelCode(), channelCode)) { logger.info("建联转化订单建联信息:{}", JSON.toJSONString(lastContactLog));
paidAmount = paidAmount + (Objects.isNull(orderInfoResp.getDeliveryPaymentAmount()) ? 0.0 : orderInfoResp.getDeliveryPaymentAmount()); TabContactOrder contactOrder = new TabContactOrder();
} contactOrder.setOrderId(orderId);
contactOrder.setPaidAmount(paidAmount); contactOrder.setMemberId(memberId);
contactOrder.setProductCount(orderInfoResp.getGoodsCount()); contactOrder.setOrderNumber(orderInfoResp.getOrderNo());
contactOrder.setPayTime(orderInfoResp.getReceiptsDate()); Double paidAmount = orderInfoResp.getPayAmount();
contactOrder.setReceiptsDate(orderInfoResp.getReceiptsDate()); if (Objects.equals(PlatformChannelEnum.C_WECHAT_MINI.getChannelCode(), channelCode)) {
List<OrderItemResp> orderItems = orderInfoResp.getOrderItems(); paidAmount = paidAmount + (Objects.isNull(orderInfoResp.getDeliveryPaymentAmount()) ? 0.0 : orderInfoResp.getDeliveryPaymentAmount());
if (CollectionUtils.isNotEmpty(orderItems)) { }
List<ContactOrderGoodsInfoDTO> goodsInfoDTOS = JSONObject.parseArray(JSON.toJSONString(orderItems), ContactOrderGoodsInfoDTO.class); contactOrder.setPaidAmount(paidAmount);
contactOrder.setGoodsInfo(JSON.toJSONString(goodsInfoDTOS)); contactOrder.setProductCount(orderInfoResp.getGoodsCount());
} contactOrder.setPayTime(orderInfoResp.getReceiptsDate());
contactOrder.setChannelCode(channelCode); contactOrder.setReceiptsDate(orderInfoResp.getReceiptsDate());
contactOrder.setChannelType(channelType); List<OrderItemResp> orderItems = orderInfoResp.getOrderItems();
contactOrder.setClerkId(lastContactLog.getClerkId()); if (CollectionUtils.isNotEmpty(orderItems)) {
contactOrder.setClerkCode(lastContactLog.getClerkCode()); List<ContactOrderGoodsInfoDTO> goodsInfoDTOS = JSONObject.parseArray(JSON.toJSONString(orderItems), ContactOrderGoodsInfoDTO.class);
contactOrder.setClerkName(lastContactLog.getClerkName()); contactOrder.setGoodsInfo(JSON.toJSONString(goodsInfoDTOS));
contactOrder.setStoreId(lastContactLog.getStoreId()); }
contactOrder.setContactLogId(lastContactLog.getLogId()); contactOrder.setChannelCode(channelCode);
contactOrder.setContactTime(lastContactLog.getContactTime()); contactOrder.setChannelType(channelType);
contactOrder.setPotentialTime(lastContactLog.getPotentialTime()); contactOrder.setClerkId(lastContactLog.getClerkId());
contactOrder.setEnterpriseId(lastContactLog.getEnterpriseId()); contactOrder.setClerkCode(lastContactLog.getClerkCode());
contactOrder.setClerkName(lastContactLog.getClerkName());
contactOrder.setStoreId(lastContactLog.getStoreId());
contactOrder.setContactLogId(lastContactLog.getLogId());
contactOrder.setContactTime(lastContactLog.getContactTime());
contactOrder.setPotentialTime(lastContactLog.getPotentialTime());
contactOrder.setSourceType(lastContactLog.getSourceType());
contactOrder.setBizType(lastContactLog.getBizType());
contactOrder.setEnterpriseId(lastContactLog.getEnterpriseId());
JSONObject jsonObject = esMemberInfoService.queryDataSingle(enterpriseId, memberId, "potentialScore"); JSONObject jsonObject = esMemberInfoService.queryDataSingle(enterpriseId, memberId, "potentialScore");
if (jsonObject != null && jsonObject.getInteger("potentialScore") != null) { if (jsonObject != null && jsonObject.getInteger("potentialScore") != null) {
contactOrder.setPotentialScore(jsonObject.getInteger("potentialScore")); contactOrder.setPotentialScore(jsonObject.getInteger("potentialScore"));
}
String groupInfo = convertGroupInfo(enterpriseId, memberId);
contactOrder.setGroupInfo(groupInfo);
contactOrderMapper.insert(contactOrder);
} }
contactOrderMapper.insert(contactOrder);
return true; return true;
} }
private String convertGroupInfo(String enterpriseId, String memberId) {
JSONObject jo = new JSONObject();
try {
MemberTagGroupDetailDTO memberTagGroupDetail = memberTagGroupApiService.getMemberTagGroupDetail(enterpriseId, memberId, "1");
if (memberTagGroupDetail == null) {
return jo.toJSONString();
}
MemberTagGroupSimpleDTO allChannelMemberGradeGroup = memberTagGroupDetail.getAllChannelMemberGradeGroup();
if (allChannelMemberGradeGroup != null) {
jo.put("allChannelMemberGradeGroup", allChannelMemberGradeGroup.getGroupName());
}
MemberTagGroupSimpleDTO memberGradeGroup = memberTagGroupDetail.getMemberGradeGroup();
if (memberGradeGroup != null) {
jo.put("memberGradeGroup", memberGradeGroup.getGroupName());
}
} catch (Exception e) {
logger.info("获取金字塔分层信息异常",e);
}
return jo.toJSONString();
}
@Override @Override
public Page<ContactOrderDetailDTO> pageContactOrder(String enterpriseId, ContactOrderSearchQDTO searchQDTO, BasePageInfo pageInfo) { public Page<ContactOrderDetailDTO> pageContactOrder(String enterpriseId, ContactOrderSearchQDTO searchQDTO, BasePageInfo pageInfo) {
PageHelper.startPage(pageInfo); PageHelper.startPage(pageInfo);
......
...@@ -6,6 +6,7 @@ import com.gic.enterprise.api.constant.EnterpriseServiceEnum; ...@@ -6,6 +6,7 @@ import com.gic.enterprise.api.constant.EnterpriseServiceEnum;
import com.gic.enterprise.api.dto.EnterpriseUsingPermissionDto; import com.gic.enterprise.api.dto.EnterpriseUsingPermissionDto;
import com.gic.enterprise.api.dto.enterprise.EnterpriseUsingStatusDTO; import com.gic.enterprise.api.dto.enterprise.EnterpriseUsingStatusDTO;
import com.gic.enterprise.api.service.EnterpriseUseForbidService; import com.gic.enterprise.api.service.EnterpriseUseForbidService;
import com.gic.haoban.manage.api.enums.contact.ContactBizTypeEnum;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -50,6 +51,11 @@ public class EnterpriseAdaptor { ...@@ -50,6 +51,11 @@ public class EnterpriseAdaptor {
EnterpriseServiceEnum.GOODS_ANALYSIS.getRightMenuCode() EnterpriseServiceEnum.GOODS_ANALYSIS.getRightMenuCode()
); );
public static final List<String> newRightCodeList = Lists.newArrayList(
EnterpriseServiceEnum.POTENTIAL.getRightMenuCode(),
EnterpriseServiceEnum.CONTENT.getRightMenuCode()
);
@Autowired @Autowired
EnterpriseUseForbidService enterpriseUseForbidService; EnterpriseUseForbidService enterpriseUseForbidService;
...@@ -134,6 +140,17 @@ public class EnterpriseAdaptor { ...@@ -134,6 +140,17 @@ public class EnterpriseAdaptor {
return StringUtils.equals(cache, "1"); return StringUtils.equals(cache, "1");
} }
public boolean checkEnterpriseHasRightByContactBizType(String enterpriseId,Integer contactBizType) {
if (Objects.equals(contactBizType, ContactBizTypeEnum.POTENTIAL_CUSTOMER.getType())) {
return checkEnterpriseHasRights(enterpriseId,Lists.newArrayList(EnterpriseServiceEnum.POTENTIAL.getRightMenuCode()));
} else if (Objects.equals(contactBizType, ContactBizTypeEnum.OPPORTUNITY_CUSTOMER.getType())) {
return checkEnterpriseHasRights(enterpriseId,Lists.newArrayList(EnterpriseServiceEnum.OBJECTIVES.getRightMenuCode()));
} else {
return checkEnterpriseHasRights(enterpriseId, Lists.newArrayList(EnterpriseServiceEnum.POTENTIAL.getRightMenuCode()))
|| checkEnterpriseHasRights(enterpriseId, Lists.newArrayList(EnterpriseServiceEnum.OBJECTIVES.getRightMenuCode()));
}
}
public boolean checkEnterpriseHasRight(String enterpriseId,String rightMenuCode) { public boolean checkEnterpriseHasRight(String enterpriseId,String rightMenuCode) {
return checkEnterpriseHasRights(enterpriseId,Lists.newArrayList(rightMenuCode)); return checkEnterpriseHasRights(enterpriseId,Lists.newArrayList(rightMenuCode));
} }
......
...@@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSON; ...@@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.content.api.dto.setting.ContentSettingDTO; import com.gic.content.api.dto.setting.ContentSettingDTO;
import com.gic.content.api.service.ContentSettingApiService; import com.gic.content.api.service.ContentSettingApiService;
import com.gic.enterprise.api.constant.EnterpriseServiceEnum;
import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType; import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType;
import com.gic.haoban.manage.api.enums.content.ShareBizType;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO; import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordExtendInfoBO; import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordExtendInfoBO;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO; import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO;
...@@ -15,6 +17,7 @@ import com.gic.haoban.manage.service.pojo.bo.content.context.PotentialCustomerNo ...@@ -15,6 +17,7 @@ import com.gic.haoban.manage.service.pojo.bo.content.context.PotentialCustomerNo
import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO; import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO;
import com.gic.haoban.manage.service.service.content.InteractRecordService; import com.gic.haoban.manage.service.service.content.InteractRecordService;
import com.gic.haoban.manage.service.service.content.PotentialCustomerService; import com.gic.haoban.manage.service.service.content.PotentialCustomerService;
import com.gic.haoban.manage.service.service.content.adaptor.EnterpriseAdaptor;
import com.gic.haoban.manage.service.service.content.adaptor.InteractRecordBuilder; import com.gic.haoban.manage.service.service.content.adaptor.InteractRecordBuilder;
import com.gic.haoban.manage.service.service.content.adaptor.InteractRecordMessageBuilder; import com.gic.haoban.manage.service.service.content.adaptor.InteractRecordMessageBuilder;
import com.gic.haoban.manage.service.util.IntervalUtils; import com.gic.haoban.manage.service.util.IntervalUtils;
...@@ -46,6 +49,8 @@ public class InteractRecordMessageService { ...@@ -46,6 +49,8 @@ public class InteractRecordMessageService {
@Autowired @Autowired
InteractRecordBuilder interactRecordBuilder; InteractRecordBuilder interactRecordBuilder;
@Autowired @Autowired
EnterpriseAdaptor enterpriseAdaptor;
@Autowired
PotentialCustomerService potentialCustomerService; PotentialCustomerService potentialCustomerService;
@Autowired @Autowired
ContentSettingApiService contentSettingApiService; ContentSettingApiService contentSettingApiService;
...@@ -67,6 +72,19 @@ public class InteractRecordMessageService { ...@@ -67,6 +72,19 @@ public class InteractRecordMessageService {
} }
InteractRecordMessageContext context = InteractRecordMessageContext.create(interactRecordMessageBO); InteractRecordMessageContext context = InteractRecordMessageContext.create(interactRecordMessageBO);
log.info("业务类型:{}", context.getBizType());
// 普通商品分享校验服务是否到期
if (Objects.equals(context.getBizType(), ShareBizType.GOODS.getCode())
&& (Objects.isNull(interactRecordMessageBO.getShareSource()) || Objects.equals(interactRecordMessageBO.getShareSource(), -1))) {
log.info("普通商品分享");
if (!enterpriseAdaptor.checkEnterpriseHasRights(interactRecordMessageBO.getEnterpriseId(), EnterpriseAdaptor.newRightCodeList)) {
log.info("企业 {} 没权限", interactRecordMessageBO.getEnterpriseId());
return;
}
}
// 参数是否完整 // 参数是否完整
// 根据businessId clerkId memberId materialId 构建唯一标识key // 根据businessId clerkId memberId materialId 构建唯一标识key
String recordKey = context.buildRecordKey(); String recordKey = context.buildRecordKey();
......
...@@ -47,4 +47,5 @@ public interface HaobanQywxFeeOrderService { ...@@ -47,4 +47,5 @@ public interface HaobanQywxFeeOrderService {
void refund(Long feeOrderId ,String wxEnterpriseId , String orderId) ; void refund(Long feeOrderId ,String wxEnterpriseId , String orderId) ;
void qywxAppOverTimer(String params);
} }
package com.gic.haoban.manage.service.service.fee.impl; package com.gic.haoban.manage.service.service.fee.impl;
import java.util.Date;
import java.util.List; import java.util.List;
import com.gic.commons.util.DateUtil;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanAppOrderMapper;
import com.gic.haoban.manage.service.dao.mapper.WxEnterpriseMapper;
import com.gic.haoban.manage.service.dao.mapper.fee.TabHaobanQywxFeeOrderAccountMapper; import com.gic.haoban.manage.service.dao.mapper.fee.TabHaobanQywxFeeOrderAccountMapper;
import com.gic.haoban.manage.service.entity.TabHaobanAppOrder;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise;
import com.gic.haoban.manage.service.util.DingUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -29,6 +37,10 @@ public class HaobanQywxFeeOrderServiceImpl implements HaobanQywxFeeOrderService ...@@ -29,6 +37,10 @@ public class HaobanQywxFeeOrderServiceImpl implements HaobanQywxFeeOrderService
private TabHaobanQywxFeeOrderMapper tabHaobanQywxFeeOrderMapper; private TabHaobanQywxFeeOrderMapper tabHaobanQywxFeeOrderMapper;
@Autowired @Autowired
private TabHaobanQywxFeeOrderAccountMapper tabHaobanQywxFeeOrderAccountMapper ; private TabHaobanQywxFeeOrderAccountMapper tabHaobanQywxFeeOrderAccountMapper ;
@Autowired
private WxEnterpriseMapper wxEnterpriseMapper;
@Autowired
private TabHaobanAppOrderMapper tabHaobanAppOrderMapper;
/** /**
* 新增数据 * 新增数据
...@@ -69,4 +81,26 @@ public class HaobanQywxFeeOrderServiceImpl implements HaobanQywxFeeOrderService ...@@ -69,4 +81,26 @@ public class HaobanQywxFeeOrderServiceImpl implements HaobanQywxFeeOrderService
this.tabHaobanQywxFeeOrderMapper.refund(feeOrderId); this.tabHaobanQywxFeeOrderMapper.refund(feeOrderId);
this.tabHaobanQywxFeeOrderAccountMapper.refund(wxEnterpriseId,orderId); this.tabHaobanQywxFeeOrderAccountMapper.refund(wxEnterpriseId,orderId);
} }
@Override
public void qywxAppOverTimer(String params) {
// https://oapi.dingtalk.com/robot/send?access_token=62053271b8f98ac1d7e0695d98639be00ac1963e101f80e022200b5af9632ec7
List<TabHaobanWxEnterprise> enList = this.wxEnterpriseMapper.listAllNotSelf() ;
for(TabHaobanWxEnterprise wxEnterprise : enList) {
String wxEnterpriseId = wxEnterprise.getWxEnterpriseId() ;
List<TabHaobanAppOrder> orderList = this.tabHaobanAppOrderMapper.listOrderForNotice(wxEnterpriseId) ;
if(CollectionUtils.isNotEmpty(orderList)) {
TabHaobanAppOrder order = orderList.get(0) ;
Date endTime = order.getEndTime() ;
// 3天内过期
if(DateUtil.getStartTimeOfDay(endTime).getTime() - 1000*3600*24*3 <= DateUtil.getStartTimeOfDay().getTime()) {
if(DateUtil.getStartTimeOfDay(endTime).getTime()<DateUtil.getStartTimeOfDay().getTime() && DateUtil.daysBetween(DateUtil.getStartTimeOfDay(endTime),DateUtil.getStartTimeOfDay())>1) {
continue;
}
logger.info("应用即将到期={}",wxEnterpriseId);
DingUtils.send("企微企业名称:"+wxEnterprise.getCorpName()+"-"+wxEnterprise.getOpenCorpid() + "\n应用到期时间:" + DateUtil.dateToStr(endTime,"yyyy-MM-dd HH:mm:ss") , "https://oapi.dingtalk.com/robot/send?access_token=62053271b8f98ac1d7e0695d98639be00ac1963e101f80e022200b5af9632ec7",false);
}
}
}
}
} }
...@@ -21,7 +21,7 @@ public interface HmLinkChatService { ...@@ -21,7 +21,7 @@ public interface HmLinkChatService {
public List<HmLinkChatDTO> listByLinkId(String wxEnterpriseId, String enterpriseId, Long linkId); public List<HmLinkChatDTO> listByLinkId(String wxEnterpriseId, String enterpriseId, Long linkId);
public int save(Long linkId, List<HmLinkChatDTO> list , Long otherHmId , TabHmLink link); public int save(String wxEnterpriseId,String enterpriseId,Long linkId, List<HmLinkChatDTO> list , Long otherHmId , TabHmLink link);
public Page<HmLinkChatDTO> listPage(HmLinkChatQDTO qdto, BasePageInfo basePageInfo); public Page<HmLinkChatDTO> listPage(HmLinkChatQDTO qdto, BasePageInfo basePageInfo);
......
...@@ -46,48 +46,49 @@ public class HmLinkChatServiceImpl implements HmLinkChatService { ...@@ -46,48 +46,49 @@ public class HmLinkChatServiceImpl implements HmLinkChatService {
} }
@Override @Override
public int save(Long linkId, List<HmLinkChatDTO> list, Long otherHmId, TabHmLink link) { public int save(String wxEnterpriseId,String enterpriseId,Long linkId, List<HmLinkChatDTO> list, Long otherHmId, TabHmLink oldLink) {
log.info("保存群链接={}", JSON.toJSONString(list)); log.info("保存群链接={}", JSON.toJSONString(list));
List<HmLinkChatDTO> updateList = list.stream().filter(dto -> null != dto.getLinkChatId()) List<HmLinkChatDTO> oldList = this.hmLinkChatMapper.listByLinkId(wxEnterpriseId, enterpriseId, linkId) ;
.collect(Collectors.toList()); if(CollectionUtils.isEmpty(list)) {
List<Long> notDelIdList = updateList.stream().map(dto -> dto.getLinkChatId()).collect(Collectors.toList()); log.info("删除关联群活码={},{}", linkId, null);
log.info("不删除关联群活码={},{}", linkId, notDelIdList); this.hmLinkChatMapper.delete(linkId, null , 0);
String wxEnterpriseId = list.get(0).getWxEnterpriseId(); }
String enterpriseId = list.get(0).getEnterpriseId(); if(CollectionUtils.isNotEmpty(list)) {
// 先查出历史记录 List<HmLinkChatDTO> updateList = list.stream().filter(dto -> null != dto.getLinkChatId()).collect(Collectors.toList());
List<HmLinkChatDTO> oldList = this.hmLinkChatMapper.listByLinkId(wxEnterpriseId, enterpriseId, linkId); List<Long> notDelIdList = updateList.stream().map(dto -> dto.getLinkChatId()).collect(Collectors.toList());
this.hmLinkChatMapper.delete(linkId, notDelIdList , 0); log.info("不删除关联群活码={},{}", linkId, notDelIdList);
if (CollectionUtils.isNotEmpty(updateList)) { this.hmLinkChatMapper.delete(linkId, notDelIdList , 0);
for (HmLinkChatDTO item : updateList) { if (CollectionUtils.isNotEmpty(updateList)) {
TabHmLinkChat entity = EntityUtil.changeEntityByJSON(TabHmLinkChat.class, item); for (HmLinkChatDTO item : updateList) {
this.hmLinkChatMapper.update(entity); TabHmLinkChat entity = EntityUtil.changeEntityByJSON(TabHmLinkChat.class, item);
if (item.getMemberType() == 0) { this.hmLinkChatMapper.update(entity);
screeningDetailService.save(HmLinkChatService.ES_ID + entity.getLinkChatId(), item.getSearchJson()); if (item.getMemberType() == 0) {
screeningDetailService.save(HmLinkChatService.ES_ID + entity.getLinkChatId(), item.getSearchJson());
}
} }
} }
} List<HmLinkChatDTO> addList = list.stream().filter(dto -> null == dto.getLinkChatId())
List<HmLinkChatDTO> addList = list.stream().filter(dto -> null == dto.getLinkChatId()) .collect(Collectors.toList());
.collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(addList)) {
if (CollectionUtils.isNotEmpty(addList)) { for (HmLinkChatDTO dto : addList) {
for (HmLinkChatDTO dto : addList) { TabHmLinkChat entity = EntityUtil.changeEntityByJSON(TabHmLinkChat.class, dto);
TabHmLinkChat entity = EntityUtil.changeEntityByJSON(TabHmLinkChat.class, dto); entity.setLinkChatId(UniqueIdUtils.uniqueLong());
entity.setLinkChatId(UniqueIdUtils.uniqueLong()); entity.setLinkId(linkId);
entity.setLinkId(linkId); this.hmLinkChatMapper.insert(entity);
this.hmLinkChatMapper.insert(entity); if (dto.getMemberType() == 0) {
if (dto.getMemberType() == 0) { screeningDetailService.save(HmLinkChatService.ES_ID + entity.getLinkChatId(), dto.getSearchJson());
screeningDetailService.save(HmLinkChatService.ES_ID + entity.getLinkChatId(), dto.getSearchJson()); }
} }
} }
} }
// 更新其他链接 // 更新其他链接
List<Long> chatHmIdList = list.stream().map(dto -> dto.getChatHmId()).collect(Collectors.toList()); List<Long> chatHmIdList = list.stream().map(dto -> dto.getChatHmId()).collect(Collectors.toList());
chatHmIdList.add(otherHmId); chatHmIdList.add(otherHmId);
boolean addOther = false; boolean addOther = false;
if (null != link) { if (null != oldLink) {
chatHmIdList.add(link.getOtherChatHmId()); chatHmIdList.add(oldLink.getOtherChatHmId());
if (!otherHmId.equals(link.getOtherChatHmId())) { if (!otherHmId.equals(oldLink.getOtherChatHmId())) {
this.hmLinkChatMapper.delete(linkId, Arrays.asList(link.getOtherChatHmId()) , 1); this.hmLinkChatMapper.delete(linkId, Arrays.asList(oldLink.getOtherChatHmId()) , 1);
addOther = true; addOther = true;
} }
} else { } else {
...@@ -107,7 +108,6 @@ public class HmLinkChatServiceImpl implements HmLinkChatService { ...@@ -107,7 +108,6 @@ public class HmLinkChatServiceImpl implements HmLinkChatService {
other.setLinkChatId(UniqueIdUtils.uniqueLong()); other.setLinkChatId(UniqueIdUtils.uniqueLong());
this.hmLinkChatMapper.insert(other); this.hmLinkChatMapper.insert(other);
} }
// 统计活码关联的链接数量 // 统计活码关联的链接数量
for (HmLinkChatDTO old : oldList) { for (HmLinkChatDTO old : oldList) {
chatHmIdList.add(old.getChatHmId()); chatHmIdList.add(old.getChatHmId());
......
package com.gic.haoban.manage.service.service.hm.impl; package com.gic.haoban.manage.service.service.hm.impl;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -141,6 +142,7 @@ public class HmLinkServiceImpl implements HmLinkService { ...@@ -141,6 +142,7 @@ public class HmLinkServiceImpl implements HmLinkService {
this.delCache(oldLink.getLinkId(), oldLink.getShortCode()); this.delCache(oldLink.getLinkId(), oldLink.getShortCode());
oldWelcomeId = oldLink.getWelcomeId(); oldWelcomeId = oldLink.getWelcomeId();
TabHmLink entity = EntityUtil.changeEntityByJSON(TabHmLink.class, dto); TabHmLink entity = EntityUtil.changeEntityByJSON(TabHmLink.class, dto);
this.linkMapper.update(entity); this.linkMapper.update(entity);
} }
// 单人活码 // 单人活码
...@@ -159,12 +161,15 @@ public class HmLinkServiceImpl implements HmLinkService { ...@@ -159,12 +161,15 @@ public class HmLinkServiceImpl implements HmLinkService {
// 群活码 // 群活码
if (dto.getLinkType() == HmLinkTypeEnum.CHAT_HM_LINK_TYPE.getLinkType()) { if (dto.getLinkType() == HmLinkTypeEnum.CHAT_HM_LINK_TYPE.getLinkType()) {
int index = 0; int index = 0;
if(CollectionUtils.isEmpty(dto.getLinkChatList())) {
dto.setLinkChatList(new ArrayList<>());
}
for (HmLinkChatDTO item : dto.getLinkChatList()) { for (HmLinkChatDTO item : dto.getLinkChatList()) {
item.setWxEnterpriseId(dto.getWxEnterpriseId()); item.setWxEnterpriseId(dto.getWxEnterpriseId());
item.setEnterpriseId(dto.getEnterpriseId()); item.setEnterpriseId(dto.getEnterpriseId());
item.setSortNum(index++); item.setSortNum(index++);
} }
this.hmLinkChatService.save(linkId, dto.getLinkChatList() , dto.getOtherChatHmId() , oldLink); this.hmLinkChatService.save(dto.getWxEnterpriseId(),dto.getEnterpriseId(),linkId, dto.getLinkChatList() , dto.getOtherChatHmId() , oldLink);
} }
return dto.getLinkCode(); return dto.getLinkCode();
} }
......
...@@ -14,10 +14,7 @@ import com.gic.enterprise.api.service.StoreService; ...@@ -14,10 +14,7 @@ import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.common.utils.DingUtils; import com.gic.haoban.common.utils.DingUtils;
import com.gic.haoban.common.utils.EntityUtil; import com.gic.haoban.common.utils.EntityUtil;
import com.gic.haoban.common.utils.StringUtil; import com.gic.haoban.common.utils.StringUtil;
import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO; import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
import com.gic.haoban.manage.api.dto.SecretSettingDTO;
import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO;
import com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogQDTO; import com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogQDTO;
import com.gic.haoban.manage.api.enums.SecretTypeEnum; import com.gic.haoban.manage.api.enums.SecretTypeEnum;
import com.gic.haoban.manage.service.config.Config; import com.gic.haoban.manage.service.config.Config;
...@@ -41,6 +38,7 @@ import com.gic.search.engine.api.dto.dynamic.DynamicSearchDTO; ...@@ -41,6 +38,7 @@ import com.gic.search.engine.api.dto.dynamic.DynamicSearchDTO;
import com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService; import com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService;
import com.gic.wechat.api.dto.qywx.QywxNewExternalUseridDTO; import com.gic.wechat.api.dto.qywx.QywxNewExternalUseridDTO;
import com.gic.wechat.api.service.qywx.QywxUserApiService; import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -597,4 +595,61 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -597,4 +595,61 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
public int getFriendNum(String memberId, String storeId, String clerkId) { public int getFriendNum(String memberId, String storeId, String clerkId) {
return this.mapper.getFriendNum(memberId,storeId,clerkId); return this.mapper.getFriendNum(memberId,storeId,clerkId);
} }
@Override
public List<MemberExternalUserDTO> listMemberExternalUser(String enterpriseId, String memberId) {
List<TabHaobanExternalClerkRelated> list = this.mapper.getAddTimeByMemberId(memberId,enterpriseId,null) ;
if(CollectionUtils.isEmpty(list)) {
return Lists.newArrayList();
}
List<MemberExternalUserDTO> retList = new ArrayList<>() ;
String externalUserId = null ;
//Map<String,String> map = new HashMap<>() ;
for(TabHaobanExternalClerkRelated item : list) {
MemberExternalUserDTO dto = new MemberExternalUserDTO() ;
if(null == externalUserId) {
externalUserId = item.getExternalUserId() ;
}else if(!externalUserId.equals(item.getExternalUserId())) {
continue;
}
/*String staffId = item.getStaffId() ;
String clerkId = item.getClerkId() ;
if(null != map.get(staffId) && !map.get(staffId).equals(clerkId)) {
continue;
}
map.put(staffId,clerkId) ;*/
dto.setMemberId(memberId);
dto.setClerkId(item.getClerkId());
dto.setStoreId(item.getStoreId());
dto.setExternalStatus(item.getExternalStatus());
dto.setHalfDelTime(item.getHalfDelTime());
if(null == item.getAddTime() && null != item.getAddCreateTime()) {
item.setAddTime(Long.valueOf(item.getAddCreateTime()));
}
if(null == item.getAddTime()) {
continue;
}
dto.setAddTime(new Date(item.getAddTime()*1000));
dto.setStatusFlag(item.getStatusFlag());
if(dto.getStatusFlag()==2) {
dto.setDelTime(item.getUpdateTime());
dto.setExternalStatus(1);
dto.setHalfDelTime(null);
}
retList.add(dto);
}
for(MemberExternalUserDTO dto : retList) {
ClerkDTO clerkDTO = this.clerkService.getclerkById(dto.getClerkId()) ;
dto.setClerkCode(clerkDTO.getClerkCode());
dto.setClerkName(clerkDTO.getClerkName());
dto.setClerkHead(clerkDTO.getHeadImgUrl());
dto.setStoreId(clerkDTO.getStoreId());
dto.setStoreCode(clerkDTO.getStoreCode());
dto.setStoreName(clerkDTO.getStoreName());
}
if(CollectionUtils.isNotEmpty(retList)) {
Collections.sort(retList);
}
return retList;
}
} }
...@@ -9,6 +9,7 @@ import java.util.Map; ...@@ -9,6 +9,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.gic.commons.util.EntityUtil;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -244,6 +245,16 @@ public class HandoverServiceImpl implements HandoverService { ...@@ -244,6 +245,16 @@ public class HandoverServiceImpl implements HandoverService {
} }
@Override @Override
public List<HandoverExternalDTO> listAllByStaffIds(String wxEnterpriseId, String search, List<String> staffIds) {
List<TabHandoverExternal> list = handoverExternalMapper.listAllByStaffIds(wxEnterpriseId, staffIds , search , 1);
if(null != list) {
List<HandoverExternalDTO> retList = EntityUtil.changeEntityListByJSON(HandoverExternalDTO.class, list) ;
return retList;
}
return new ArrayList<>() ;
}
@Override
public List<TabHandoverExternal> listByIds(String wxEnterpriseId, List<String> ids) { public List<TabHandoverExternal> listByIds(String wxEnterpriseId, List<String> ids) {
return handoverExternalMapper.listByIds(wxEnterpriseId, ids); return handoverExternalMapper.listByIds(wxEnterpriseId, ids);
} }
......
...@@ -170,7 +170,7 @@ public class MaterialServiceImpl implements MaterialService { ...@@ -170,7 +170,7 @@ public class MaterialServiceImpl implements MaterialService {
return ""; return "";
} }
public JSONResponse reUpdalodMetailJson(String materialId,int from) { public JSONResponse reUpdalodMetailJson(String materialId,int from) {
JSONResponse jp = new JSONResponse() ; JSONResponse jp = new JSONResponse() ;
MaterialDTO old = null ; MaterialDTO old = null ;
TabMaterialContent entity =null ; TabMaterialContent entity =null ;
......
...@@ -15,6 +15,7 @@ import com.gic.api.base.commons.ServiceResponse; ...@@ -15,6 +15,7 @@ import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.DateUtil; import com.gic.commons.util.DateUtil;
import com.gic.enterprise.api.service.StoreWidgetService; import com.gic.enterprise.api.service.StoreWidgetService;
import com.gic.haoban.manage.service.entity.*; import com.gic.haoban.manage.service.entity.*;
import com.gic.haoban.manage.service.pojo.StaffStoreNumBO;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -286,7 +287,7 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService ...@@ -286,7 +287,7 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
@Override @Override
public void addMemberQywxFlag(String enterpriseId, String memberId) { public void addMemberQywxFlag(String enterpriseId, String memberId) {
List<TabHaobanExternalClerkRelated> memberList = externalClerkRelatedService.getAddTimeByMemberId(memberId, enterpriseId,"1"); List<TabHaobanExternalClerkRelated> memberList = externalClerkRelatedService.getAddTimeByMemberId(memberId, enterpriseId,null);
Date date = new Date(); Date date = new Date();
Date opTime = new Date(0); Date opTime = new Date(0);
Date firstTime = new Date(); Date firstTime = new Date();
...@@ -678,4 +679,17 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService ...@@ -678,4 +679,17 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
map = list.stream().collect(Collectors.groupingBy(StaffClerkRelationDTO::getStoreId,Collectors.mapping(StaffClerkRelationDTO::getClerkId,Collectors.toList()))) ; map = list.stream().collect(Collectors.groupingBy(StaffClerkRelationDTO::getStoreId,Collectors.mapping(StaffClerkRelationDTO::getClerkId,Collectors.toList()))) ;
return ServiceResponse.success(map) ; return ServiceResponse.success(map) ;
} }
// 成员是否绑定多加家门店
@Override
public Map<String, Boolean> staffManyStore(List<String> staffIdList) {
Map<String, Boolean> map = new HashMap<>() ;
List<StaffStoreNumBO> list = this.tabHaobanStaffClerkRelationMapper.staffStoreNum(staffIdList) ;
if(CollectionUtils.isNotEmpty(list)) {
list.forEach(item -> {
map.put(item.getStaffId(),item.getNum()>1) ;
}) ;
}
return map ;
}
} }
...@@ -10,9 +10,11 @@ import com.gic.commons.util.UniqueIdUtils; ...@@ -10,9 +10,11 @@ import com.gic.commons.util.UniqueIdUtils;
import com.gic.content.api.service.ContentProducerApiService; import com.gic.content.api.service.ContentProducerApiService;
import com.gic.haoban.app.customer.service.api.service.InnerApiService; import com.gic.haoban.app.customer.service.api.service.InnerApiService;
import com.gic.haoban.common.utils.StringUtil; import com.gic.haoban.common.utils.StringUtil;
import com.gic.haoban.manage.api.dto.CommonMQDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO; import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO; import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.enums.ChannelCodeEnum; import com.gic.haoban.manage.api.enums.ChannelCodeEnum;
import com.gic.haoban.manage.api.service.HaobanCommonMQApiService;
import com.gic.haoban.manage.api.service.StaffClerkRelationApiService; import com.gic.haoban.manage.api.service.StaffClerkRelationApiService;
import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService; import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService;
import com.gic.haoban.manage.service.config.Config; import com.gic.haoban.manage.service.config.Config;
...@@ -78,6 +80,8 @@ public class StaffServiceImpl implements StaffService { ...@@ -78,6 +80,8 @@ public class StaffServiceImpl implements StaffService {
private StaffClerkRelationApiService staffClerkRelationApiService ; private StaffClerkRelationApiService staffClerkRelationApiService ;
@Autowired @Autowired
private StaffDepartmentRelatedService staffDepartmentRelatedService ; private StaffDepartmentRelatedService staffDepartmentRelatedService ;
@Autowired
private HaobanCommonMQApiService haobanCommonMQApiService ;
@Override @Override
public TabHaobanStaff selectById(String id) { public TabHaobanStaff selectById(String id) {
...@@ -113,6 +117,12 @@ public class StaffServiceImpl implements StaffService { ...@@ -113,6 +117,12 @@ public class StaffServiceImpl implements StaffService {
return staff.getStaffId() ; return staff.getStaffId() ;
} }
mapper.insertSelective(tab); mapper.insertSelective(tab);
CommonMQDTO mq = new CommonMQDTO() ;
mq.setType(11) ;
Map<String,String> map = new HashMap<>() ;
map.put("staffId",tab.getStaffId()) ;
mq.setParams(map);
this.haobanCommonMQApiService.putCommonDelayMessage(mq, 10);
RedisUtil.unlock(lockKey); RedisUtil.unlock(lockKey);
return tab.getStaffId(); return tab.getStaffId();
} }
......
...@@ -32,7 +32,6 @@ import com.github.pagehelper.PageHelper; ...@@ -32,7 +32,6 @@ import com.github.pagehelper.PageHelper;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
......
...@@ -79,6 +79,9 @@ public class QwMomentPlanAttendServiceImpl implements QwMomentPlanAttendService ...@@ -79,6 +79,9 @@ public class QwMomentPlanAttendServiceImpl implements QwMomentPlanAttendService
// 0已失效 1待完成 2已完成 // 0已失效 1待完成 2已完成
Integer sendStatus = qdto.getSendStatus() ; Integer sendStatus = qdto.getSendStatus() ;
TabQwMomentPlan plan = this.qwMomentPlanMapper.getById(qdto.getPlanId()) ; TabQwMomentPlan plan = this.qwMomentPlanMapper.getById(qdto.getPlanId()) ;
if(null == plan) {
return ServiceResponse.failure("9999","活动不存在") ;
}
boolean isEnd = plan.getStatusFlag()==2 || plan.getEndDate().getTime() <= System.currentTimeMillis() ; boolean isEnd = plan.getStatusFlag()==2 || plan.getEndDate().getTime() <= System.currentTimeMillis() ;
if(null != sendStatus && isEnd && sendStatus==1) { if(null != sendStatus && isEnd && sendStatus==1) {
return ServiceResponse.success(new Page<>()); return ServiceResponse.success(new Page<>());
......
...@@ -155,9 +155,11 @@ public class QwMomentPlanServiceImpl implements QwMomentPlanService { ...@@ -155,9 +155,11 @@ public class QwMomentPlanServiceImpl implements QwMomentPlanService {
plan.setBeginDate(plan.getPublishTime()); plan.setBeginDate(plan.getPublishTime());
Date endTime = DateUtil.getEndTimeOfDay(DateUtil.addDay(plan.getBeginDate(), plan.getExpireDays())); Date endTime = DateUtil.getEndTimeOfDay(DateUtil.addDay(plan.getBeginDate(), plan.getExpireDays()));
plan.setEndDate(endTime); plan.setEndDate(endTime);
if(null == planId) { if(null == planId || null == this.qwMomentPlanMapper.getById(planId)) {
createFlag = true ; createFlag = true ;
planId = UniqueIdUtils.uniqueLong(); if(null == planId) {
planId = UniqueIdUtils.uniqueLong();
}
dto.setPlanId(planId); dto.setPlanId(planId);
plan.setPlanId(planId); plan.setPlanId(planId);
plan.setCreateTime(now); plan.setCreateTime(now);
......
...@@ -939,4 +939,9 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA ...@@ -939,4 +939,9 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
} }
return Lists.newArrayList(); return Lists.newArrayList();
} }
@Override
public List<MemberExternalUserDTO> listMemberExternalUser(String enterpriseId, String memberId) {
return this.externalClerkRelatedService.listMemberExternalUser(enterpriseId,memberId);
}
} }
...@@ -238,6 +238,21 @@ public class HandoverOperationApiServiceImpl implements HandoverOperationApiServ ...@@ -238,6 +238,21 @@ public class HandoverOperationApiServiceImpl implements HandoverOperationApiServ
} }
@Override @Override
public List<HandoverExternalDTO> listAllHandoverFriend(String wxEnterpriseId, String search, List<String> staffIds) {
List<HandoverExternalDTO> retList = handoverService.listAllByStaffIds(wxEnterpriseId, search, staffIds);
if(CollectionUtils.isEmpty(retList)) {
return retList ;
}
List<TabHaobanStaff> haobanStaffs = staffService.listNoStatusByStaffIds(wxEnterpriseId, staffIds);
Map<String, String> staffNameMap = haobanStaffs.stream().collect(Collectors.toMap(dto -> dto.getStaffId(), dto -> dto.getStaffName(), (o, n) -> o));
retList.forEach(dto -> {
String staffName = staffNameMap.get(dto.getStaffId());
dto.setStaffName(staffName);
});
return retList;
}
@Override
public Page<ExternalInfoDTO> pageHandoverFriend(String wxEnterpriseId, String search, List<String> staffIds, List<String> transferIds, BasePageInfo pageInfo, int status) { public Page<ExternalInfoDTO> pageHandoverFriend(String wxEnterpriseId, String search, List<String> staffIds, List<String> transferIds, BasePageInfo pageInfo, int status) {
Page<HandoverExternalDTO> retPage = handoverService.pageByStaffIds(wxEnterpriseId, search, staffIds, transferIds, pageInfo, status); Page<HandoverExternalDTO> retPage = handoverService.pageByStaffIds(wxEnterpriseId, search, staffIds, transferIds, pageInfo, status);
if (CollectionUtils.isEmpty(retPage.getResult())) { if (CollectionUtils.isEmpty(retPage.getResult())) {
...@@ -296,7 +311,7 @@ public class HandoverOperationApiServiceImpl implements HandoverOperationApiServ ...@@ -296,7 +311,7 @@ public class HandoverOperationApiServiceImpl implements HandoverOperationApiServ
QywxTransferCustomerDTO transferCustomerResp = qywxUserApiService.transferCustomer(qwDTO.getThirdCorpid(), qwDTO.getSelf3thSecret(), wxUserId, takeoverUserId, list,qwDTO.isSelf(),qwDTO.getUrlHost()); QywxTransferCustomerDTO transferCustomerResp = qywxUserApiService.transferCustomer(qwDTO.getThirdCorpid(), qwDTO.getSelf3thSecret(), wxUserId, takeoverUserId, list,qwDTO.isSelf(),qwDTO.getUrlHost());
if (transferCustomerResp.getErrcode() != 0) { if (transferCustomerResp.getErrcode() != 0) {
logger.info("离职继承-分配客户异常={}",JSONObject.toJSONString(transferCustomerResp)); logger.info("离职继承-分配客户异常={}",JSONObject.toJSONString(transferCustomerResp));
DingUtils.send("离职继承分配异常"+wxUserId,true); // DingUtils.send("离职继承分配异常"+wxUserId,true);
} }
List<QywxTransferCustomerInfoDTO> customer = transferCustomerResp.getCustomer(); List<QywxTransferCustomerInfoDTO> customer = transferCustomerResp.getCustomer();
if (CollectionUtils.isEmpty(customer)) { if (CollectionUtils.isEmpty(customer)) {
......
...@@ -12,6 +12,7 @@ import com.gic.commons.util.StringUtil; ...@@ -12,6 +12,7 @@ import com.gic.commons.util.StringUtil;
import com.gic.haoban.manage.api.dto.MemberUnionidWechatAccountQDTO; import com.gic.haoban.manage.api.dto.MemberUnionidWechatAccountQDTO;
import com.gic.haoban.manage.api.service.ExternalClerkRelatedApiService; import com.gic.haoban.manage.api.service.ExternalClerkRelatedApiService;
import com.gic.haoban.manage.service.service.chat.GroupChatPlanService; import com.gic.haoban.manage.service.service.chat.GroupChatPlanService;
import com.gic.haoban.manage.service.service.chat.GroupChatService;
import com.gic.haoban.manage.service.service.moment.QwMomentPlanAttendService; import com.gic.haoban.manage.service.service.moment.QwMomentPlanAttendService;
import com.gic.haoban.manage.service.service.moment.QwMomentPlanService; import com.gic.haoban.manage.service.service.moment.QwMomentPlanService;
import com.gic.haoban.manage.service.service.role.HaobanMenuService; import com.gic.haoban.manage.service.service.role.HaobanMenuService;
...@@ -65,6 +66,8 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService { ...@@ -65,6 +66,8 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
private QwMomentPlanService qwMomentPlanService ; private QwMomentPlanService qwMomentPlanService ;
@Autowired @Autowired
private QwMomentPlanAttendService qwMomentPlanAttendService; private QwMomentPlanAttendService qwMomentPlanAttendService;
@Autowired
private GroupChatService groupChatService ;
@Override @Override
public void putCommonMessage(CommonMQDTO dto) { public void putCommonMessage(CommonMQDTO dto) {
...@@ -178,6 +181,10 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService { ...@@ -178,6 +181,10 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
Long planId10 = Long.valueOf(map.get("planId")) ; Long planId10 = Long.valueOf(map.get("planId")) ;
this.qwMomentPlanService.getQwData(planId10); this.qwMomentPlanService.getQwData(planId10);
break; break;
case 11 :
String staffId11 = map.get("staffId") ;
this.groupChatService.initStaffGroupChat(staffId11);
break;
default: default:
break; break;
} }
......
...@@ -15,6 +15,7 @@ import com.gic.haoban.manage.service.service.chat.GroupChatDataService; ...@@ -15,6 +15,7 @@ import com.gic.haoban.manage.service.service.chat.GroupChatDataService;
import com.gic.haoban.manage.service.service.chat.GroupChatPlanService; import com.gic.haoban.manage.service.service.chat.GroupChatPlanService;
import com.gic.haoban.manage.service.service.chat.GroupChatService; import com.gic.haoban.manage.service.service.chat.GroupChatService;
import com.gic.haoban.manage.service.service.contact.adaptor.ContactAdaptor; import com.gic.haoban.manage.service.service.contact.adaptor.ContactAdaptor;
import com.gic.haoban.manage.service.service.fee.HaobanQywxFeeOrderService;
import com.gic.haoban.manage.service.service.hm.HmQrcodeTempService; import com.gic.haoban.manage.service.service.hm.HmQrcodeTempService;
import com.gic.haoban.manage.service.util.DingUtils; import com.gic.haoban.manage.service.util.DingUtils;
import com.gic.haoban.manage.service.util.HBQwMonitorUtils; import com.gic.haoban.manage.service.util.HBQwMonitorUtils;
...@@ -62,6 +63,8 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService { ...@@ -62,6 +63,8 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
private GroupChatPlanService groupChatPlanService ; private GroupChatPlanService groupChatPlanService ;
@Autowired @Autowired
private ContactAdaptor contactAdaptor; private ContactAdaptor contactAdaptor;
@Autowired
private HaobanQywxFeeOrderService haobanQywxFeeOrderService ;
@Override @Override
...@@ -214,4 +217,9 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService { ...@@ -214,4 +217,9 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
public void contactDataTimer(String params) { public void contactDataTimer(String params) {
contactAdaptor.contactDataTimer(); contactAdaptor.contactDataTimer();
} }
@Override
public void qywxAppOverTimer(String params) {
this.haobanQywxFeeOrderService.qywxAppOverTimer(params) ;
}
} }
...@@ -335,24 +335,29 @@ public class MaterialApiServiceImpl implements MaterialApiService { ...@@ -335,24 +335,29 @@ public class MaterialApiServiceImpl implements MaterialApiService {
} }
PageHelper.startPage(pageInfo.getPageNum(), pageInfo.getPageSize()); PageHelper.startPage(pageInfo.getPageNum(), pageInfo.getPageSize());
com.github.pagehelper.Page<TabHaobanMaterial> page = materialService.listMaterial(wxEnterpriseId, keyword, categoryIds, materialType); com.github.pagehelper.Page<TabHaobanMaterial> page = materialService.listMaterial(wxEnterpriseId, keyword, categoryIds, materialType);
List<TabHaobanMaterial> result = page.getResult();
List<TabMiniprogramSetting> settings = miniprogramSettingService.listMiniprogram(wxEnterpriseId); List<TabMiniprogramSetting> settings = miniprogramSettingService.listMiniprogram(wxEnterpriseId);
if (CollectionUtils.isNotEmpty(result) && CollectionUtils.isNotEmpty(settings)) { Page<MaterialDTO> retPage = PageUtil.changePageHelperToCurrentPage(page, MaterialDTO.class);
if (CollectionUtils.isNotEmpty(retPage.getResult()) && CollectionUtils.isNotEmpty(settings)) {
Map<String, TabMiniprogramSetting> settingMap = settings.stream() Map<String, TabMiniprogramSetting> settingMap = settings.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(
TabMiniprogramSetting::getAppId, TabMiniprogramSetting::getAppId,
Function.identity(), Function.identity(),
(a, b) -> a (a, b) -> a
)); ));
result.forEach(dto -> { retPage.getResult().forEach(dto -> {
//小程序去判断逻辑 //小程序去判断逻辑
if (dto.getMaterialType() != null && dto.getMaterialType() == 6) { if (dto.getMaterialType() != null && dto.getMaterialType() == 6) {
TabMiniprogramSetting miniprogramSetting = settingMap.get(dto.getAppId()); TabMiniprogramSetting miniprogramSetting = settingMap.get(dto.getAppId());
dto.setMaterialDesc(miniprogramSetting == null ? "--" : miniprogramSetting.getMiniprogramName()); if(null != miniprogramSetting) {
dto.setMaterialDesc(miniprogramSetting.getMiniprogramName());
dto.setHeadImg(miniprogramSetting.getImageUrl());
}else {
dto.setMaterialContent("--");
}
} }
}); });
} }
return PageUtil.changePageHelperToCurrentPage(page, MaterialDTO.class); return retPage ;
} }
@Override @Override
...@@ -565,4 +570,30 @@ public class MaterialApiServiceImpl implements MaterialApiService { ...@@ -565,4 +570,30 @@ public class MaterialApiServiceImpl implements MaterialApiService {
return com.gic.api.base.commons.ServiceResponse.failure("9999", "获取图片失败,请稍后再试"); return com.gic.api.base.commons.ServiceResponse.failure("9999", "获取图片失败,请稍后再试");
} }
} }
@Override
public List<String> getImageMediaId(String wxEnterpriseId, List<ContentMaterialDTO> imageList, int mediaType) {
List<String> list = this.materialService.getImageMediaId(wxEnterpriseId, imageList, mediaType);
if(CollectionUtils.isNotEmpty(list)) {
for(String materialId : list) {
MaterialDTO m = materialService.getHasChangeMadieMaterialById(materialId, 2);
Integer materialType = m.getMaterialType();
String madiaId = m.getMediaId();
//需要上传的类型
if (Arrays.asList(2, 3, 4, 5, 6, 7).contains(materialType) && StringUtils.isBlank(madiaId)) {
return null ;
}
}
}
return list ;
}
@Override
public void getImageMediaId(String wxEnterpriseId, List<String> idList) {
if(CollectionUtils.isNotEmpty(idList)) {
idList.forEach(materialId -> {
materialService.getHasChangeMadieMaterialById(materialId, 1);
}) ;
}
}
} }
...@@ -482,6 +482,9 @@ public class QywxTagApiServiceImpl implements QywxTagApiService { ...@@ -482,6 +482,9 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
return this.syncFriendTagToQywxByExternalUserId(wxEnterpriseId,enterpriseId,externalUserId,tagItemIds,null); return this.syncFriendTagToQywxByExternalUserId(wxEnterpriseId,enterpriseId,externalUserId,tagItemIds,null);
} }
/**
* gic打标签、加好友、刷新好友时,会以gic侧的标签为准。新增或删除企微侧的客户标签。此外部联系人加的每个staff下都会处理
*/
@Override @Override
public ServiceResponse syncFriendTagToQywxByExternalUserId(String wxEnterpriseId, String enterpriseId, String externalUserId, List<String> tagItemIds, String externalUserInfo) { public ServiceResponse syncFriendTagToQywxByExternalUserId(String wxEnterpriseId, String enterpriseId, String externalUserId, List<String> tagItemIds, String externalUserInfo) {
logger.info("同步gic标签到企业微信:externalUserId={},{},{}", externalUserId, JSONObject.toJSONString(tagItemIds),externalUserInfo); logger.info("同步gic标签到企业微信:externalUserId={},{},{}", externalUserId, JSONObject.toJSONString(tagItemIds),externalUserInfo);
...@@ -544,12 +547,10 @@ public class QywxTagApiServiceImpl implements QywxTagApiService { ...@@ -544,12 +547,10 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
Sets.SetView<String> needSetTags = Sets.difference(entQywxTagKeys, entHasSetQywxTagKeys); Sets.SetView<String> needSetTags = Sets.difference(entQywxTagKeys, entHasSetQywxTagKeys);
//需要删除的标签 //需要删除的标签
Sets.SetView<String> needDelTags = Sets.difference(entHasSetQywxTagKeys, entQywxTagKeys); Sets.SetView<String> needDelTags = Sets.difference(entHasSetQywxTagKeys, entQywxTagKeys);
logger.info("该用户打标签:{}",wxUserId);
if (CollectionUtils.isEmpty(needDelTags) && CollectionUtils.isEmpty(needSetTags)) { if (CollectionUtils.isEmpty(needDelTags) && CollectionUtils.isEmpty(needSetTags)) {
logger.info("不需要操作:{},{}", wxUserId, externalUserId); logger.info("无需处理,staff={}", wxUserId);
return; return;
} }
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("corpid", qwDTO.getThirdCorpid()); jsonObject.put("corpid", qwDTO.getThirdCorpid());
jsonObject.put("suiteId", wxSuiteid); jsonObject.put("suiteId", wxSuiteid);
...@@ -563,7 +564,7 @@ public class QywxTagApiServiceImpl implements QywxTagApiService { ...@@ -563,7 +564,7 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
} }
GicMQClient clientInstance = GICMQClientUtil.getClientInstance(); GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try { try {
logger.info("qywxMarkTagMq 该用户打标签:{}",jsonObject.toJSONString()); logger.info("同步企微mq,={}",jsonObject.toJSONString());
clientInstance.sendMessage("qywxMarkTagMq", jsonObject.toJSONString()); clientInstance.sendMessage("qywxMarkTagMq", jsonObject.toJSONString());
} catch (Exception e) { } catch (Exception e) {
logger.info("企微标签同步qywxMarkTagMq发送失败:{}", e.getMessage(), e); logger.info("企微标签同步qywxMarkTagMq发送失败:{}", e.getMessage(), e);
...@@ -704,13 +705,13 @@ public class QywxTagApiServiceImpl implements QywxTagApiService { ...@@ -704,13 +705,13 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
Set<String> noSyncTagItemIds = new HashSet<>(); Set<String> noSyncTagItemIds = new HashSet<>();
if (!CollectionUtils.isEmpty(gicItems)) { if (!CollectionUtils.isEmpty(gicItems)) {
noSyncTagItemIds = gicItems.stream().filter(item -> !entQywxSyncTagItemIds.contains(item.getTagsId())).map(dto -> dto.getTagsId()).collect(Collectors.toSet()); noSyncTagItemIds = gicItems.stream().filter(item -> !entQywxSyncTagItemIds.contains(item.getTagsId())).map(dto -> dto.getTagsId()).collect(Collectors.toSet());
logger.info("没有同步的标签:{}", JSONObject.toJSONString(noSyncTagItemIds)); logger.info("与企微不同步的标签:{}", JSONObject.toJSONString(noSyncTagItemIds));
} }
//该企业下会员需要设置的标签 //该企业下会员需要设置的标签
Sets.SetView<String> entMemberNeedSetQywxKeys = Sets.intersection(staffHasSetTagKeys, entQywxSyncTagKeys); Sets.SetView<String> entMemberNeedSetQywxKeys = Sets.intersection(staffHasSetTagKeys, entQywxSyncTagKeys);
Set<String> saveTagIds = entMemberNeedSetQywxKeys.stream().map(qywxKey -> syncTagFormatPojo.getQywxToGicTagItemIdMap().get(qywxKey)).collect(Collectors.toSet()); Set<String> saveTagIds = entMemberNeedSetQywxKeys.stream().map(qywxKey -> syncTagFormatPojo.getQywxToGicTagItemIdMap().get(qywxKey)).collect(Collectors.toSet());
saveTagIds.addAll(noSyncTagItemIds); saveTagIds.addAll(noSyncTagItemIds);
logger.info("会员需要打的企微标签:{}", JSONObject.toJSONString(entMemberNeedSetQywxKeys)); logger.info("企微标签:{},所有标签={}", JSONObject.toJSONString(entMemberNeedSetQywxKeys),JSONObject.toJSONString(saveTagIds));
//更新标签 会自动同步 //更新标签 会自动同步
if (CollectionUtils.isEmpty(saveTagIds)) { if (CollectionUtils.isEmpty(saveTagIds)) {
saveMemberTags(new HashSet<>(), clerkRelated.getEnterpriseId(), memberId, clerkRelated.getClerkId()); saveMemberTags(new HashSet<>(), clerkRelated.getEnterpriseId(), memberId, clerkRelated.getClerkId());
...@@ -747,7 +748,7 @@ public class QywxTagApiServiceImpl implements QywxTagApiService { ...@@ -747,7 +748,7 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
* @return * @return
*/ */
private Map<String, Set<String>> getExternalTagMap(String externalUseridInfo, String wxEnterpriseId) { private Map<String, Set<String>> getExternalTagMap(String externalUseridInfo, String wxEnterpriseId) {
logger.info("externalUseridInfo:{}", externalUseridInfo); // logger.info("externalUseridInfo:{}", externalUseridInfo);
Map<String, Set<String>> ret = new HashMap<>(); Map<String, Set<String>> ret = new HashMap<>();
JSONObject jsonObject = JSONObject.parseObject(externalUseridInfo); JSONObject jsonObject = JSONObject.parseObject(externalUseridInfo);
......
...@@ -1098,6 +1098,10 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -1098,6 +1098,10 @@ public class StaffApiServiceImpl implements StaffApiService {
String storeWidgetId = this.powerService.getStoreWidgetId(null, clerkId); String storeWidgetId = this.powerService.getStoreWidgetId(null, clerkId);
if(null != storeWidgetId) { if(null != storeWidgetId) {
Page<StoreDTO> page = storeWidgetService.getStoreWidgetStore(storeWidgetId, null, clerkDTO.getEnterpriseId(), pageParam, null,null); Page<StoreDTO> page = storeWidgetService.getStoreWidgetStore(storeWidgetId, null, clerkDTO.getEnterpriseId(), pageParam, null,null);
if(null == page || CollectionUtils.isEmpty(page.getResult())) {
storeRoleDTO.setStoreCount(0);
return storeRoleDTO;
}
storeId = page.getResult().get(0).getStoreId(); storeId = page.getResult().get(0).getStoreId();
storeCount = page.getTotalCount(); storeCount = page.getTotalCount();
} }
......
...@@ -31,12 +31,13 @@ public class RouterApiServiceImpl implements RouterApiService { ...@@ -31,12 +31,13 @@ public class RouterApiServiceImpl implements RouterApiService {
return ServiceResponse.success(); return ServiceResponse.success();
} }
ClerkAddEventParam clerkAddEventParam = JSONObject.parseObject(params, ClerkAddEventParam.class); ClerkAddEventParam clerkAddEventParam = JSONObject.parseObject(params, ClerkAddEventParam.class);
String enterpriseId = clerkAddEventParam.getEnterpriseId();
String memberId = clerkAddEventParam.getMemberId(); String memberId = clerkAddEventParam.getMemberId();
Integer changeType = clerkAddEventParam.getChangeType(); Integer changeType = clerkAddEventParam.getChangeType();
String clerkId = clerkAddEventParam.getClerkId(); String clerkId = clerkAddEventParam.getClerkId();
if (Objects.equals(changeType, 1)) { if (Objects.equals(changeType, 1)) {
// 换绑主导购清除建联状态 // 换绑主导购清除建联状态
contactLogService.clearContactLog(memberId, 2, clerkId); contactLogService.clearContactLog(enterpriseId,memberId, 2, clerkId);
} }
return ServiceResponse.success(); return ServiceResponse.success();
} }
......
package com.gic.haoban.manage.service.service.out.impl.contact;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.contact.ContactConfigDTO;
import com.gic.haoban.manage.api.service.contact.ContactConfigApiService;
import com.gic.haoban.manage.service.service.contact.ContactConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("contactConfigApiService")
public class ContactConfigApiServiceImpl implements ContactConfigApiService {
@Autowired
private ContactConfigService contactConfigService;
@Override
public ServiceResponse<Void> saveContactConfig(ContactConfigDTO contactConfig) {
contactConfigService.saveContactConfig(contactConfig);
return ServiceResponse.success();
}
@Override
public ServiceResponse<ContactConfigDTO> getContactConfig(String enterpriseId) {
ContactConfigDTO config = contactConfigService.getContactConfig(enterpriseId);
return ServiceResponse.success(config);
}
}
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