Commit b16b40e2 by 王祖波

Merge remote-tracking branch 'origin/feature-content2' into feature-content2

parents 326bfc69 7629eb63
...@@ -59,7 +59,7 @@ public enum NoticeMessageTypeEnum { ...@@ -59,7 +59,7 @@ public enum NoticeMessageTypeEnum {
CUSTOMER_SUCCESS_ORDER_REFUND(4006, "客户成功退单通知", NoticeMessageCategoryTypeEnum.CUSTOMER.getType(), "customer_success_order_refund", "/pages/route/index?pageType=", "hbapp_user_bill_detail"), CUSTOMER_SUCCESS_ORDER_REFUND(4006, "客户成功退单通知", NoticeMessageCategoryTypeEnum.CUSTOMER.getType(), "customer_success_order_refund", "/pages/route/index?pageType=", "hbapp_user_bill_detail"),
MATERIAL_NEW_NOTIFY(6001, "素材上新通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "material_new_notify", "/pages/route/index?pageType=", "hbapp_material_center"), MATERIAL_NEW_NOTIFY(6001, "素材上新通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "material_new_notify", "/pages/route/index?pageType=", "hbapp_material_center"),
MATERIAL_WEEK_REPORT(6002, "素材周报通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "material_week_notify", "/pages/route/index?pageType=", "hbapp_material_report"), MATERIAL_REPORT_NOTIFY(6002, "素材周报/月报通知", NoticeMessageCategoryTypeEnum.MATERIAL.getType(), "material_week_notify", "/pages/route/index?pageType=", "hbapp_mate_report"),
POTENTIAL_CUSTOMER_NOTIFY(6003, "销售线索通知", NoticeMessageCategoryTypeEnum.POTENTIAL_CUSTOMER.getType(), "potential_customer_notify", "/pages/route/index?pageType=", "hbapp_sales_clue_center"); POTENTIAL_CUSTOMER_NOTIFY(6003, "销售线索通知", NoticeMessageCategoryTypeEnum.POTENTIAL_CUSTOMER.getType(), "potential_customer_notify", "/pages/route/index?pageType=", "hbapp_sales_clue_center");
......
...@@ -14,30 +14,11 @@ import java.util.List; ...@@ -14,30 +14,11 @@ import java.util.List;
public class InteractRecordExtendInfoDTO implements Serializable { public class InteractRecordExtendInfoDTO implements Serializable {
private static final long serialVersionUID = 1577766149535235456L; private static final long serialVersionUID = 1577766149535235456L;
/**
* 订单编号
*/
private String orderNumber;
/**
* 订单创建时间
*/
private Date orderCreateTime;
/**
* 订单商品项总数
*/
private Integer orderTotalNum;
/**
* 订单应付
*/
private BigDecimal orderPay;
/** /**
* 订单实付 * 素材关联的订单信息
*/ */
private BigDecimal realPay; private List<ExtendOrderInfo> extendOrderInfos;
/** /**
* 失效商品数量 * 失效商品数量
...@@ -49,7 +30,7 @@ public class InteractRecordExtendInfoDTO implements Serializable { ...@@ -49,7 +30,7 @@ public class InteractRecordExtendInfoDTO implements Serializable {
*/ */
private List<ExtendGoodsInfo> extendGoodsInfos; private List<ExtendGoodsInfo> extendGoodsInfos;
public static class ExtendGoodsInfo { public static class ExtendGoodsInfo implements Serializable {
/** /**
* 商品名称 * 商品名称
...@@ -129,44 +110,95 @@ public class InteractRecordExtendInfoDTO implements Serializable { ...@@ -129,44 +110,95 @@ public class InteractRecordExtendInfoDTO implements Serializable {
} }
} }
public String getOrderNumber() { /**
return orderNumber; * 素材关联的订单信息
} */
public static class ExtendOrderInfo implements Serializable {
/**
* 订单编号
*/
private String orderNumber;
public void setOrderNumber(String orderNumber) { /**
this.orderNumber = orderNumber; * 订单创建时间
} */
private Date orderCreateTime;
public Date getOrderCreateTime() { /**
return orderCreateTime; * 订单商品项总数
} */
private Integer orderTotalNum;
public void setOrderCreateTime(Date orderCreateTime) { /**
this.orderCreateTime = orderCreateTime; * 订单应付
} */
private BigDecimal orderPay;
public Integer getOrderTotalNum() { /**
return orderTotalNum; * 订单实付
} */
private BigDecimal realPay;
public void setOrderTotalNum(Integer orderTotalNum) { /**
this.orderTotalNum = orderTotalNum; * 订单商品信息
} */
private List<ExtendGoodsInfo> orderGoodsInfos;
public BigDecimal getOrderPay() { public String getOrderNumber() {
return orderPay; return orderNumber;
} }
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public Date getOrderCreateTime() {
return orderCreateTime;
}
public void setOrderCreateTime(Date orderCreateTime) {
this.orderCreateTime = orderCreateTime;
}
public Integer getOrderTotalNum() {
return orderTotalNum;
}
public void setOrderPay(BigDecimal orderPay) { public void setOrderTotalNum(Integer orderTotalNum) {
this.orderPay = orderPay; this.orderTotalNum = orderTotalNum;
}
public BigDecimal getOrderPay() {
return orderPay;
}
public void setOrderPay(BigDecimal orderPay) {
this.orderPay = orderPay;
}
public BigDecimal getRealPay() {
return realPay;
}
public void setRealPay(BigDecimal realPay) {
this.realPay = realPay;
}
public List<ExtendGoodsInfo> getOrderGoodsInfos() {
return orderGoodsInfos;
}
public void setOrderGoodsInfos(List<ExtendGoodsInfo> orderGoodsInfos) {
this.orderGoodsInfos = orderGoodsInfos;
}
} }
public BigDecimal getRealPay() { public List<ExtendOrderInfo> getExtendOrderInfos() {
return realPay; return extendOrderInfos;
} }
public void setRealPay(BigDecimal realPay) { public void setExtendOrderInfos(List<ExtendOrderInfo> extendOrderInfos) {
this.realPay = realPay; this.extendOrderInfos = extendOrderInfos;
} }
public Integer getInvalidGoodsNum() { public Integer getInvalidGoodsNum() {
......
...@@ -40,6 +40,11 @@ public class InteractRecordInfoDTO implements Serializable { ...@@ -40,6 +40,11 @@ public class InteractRecordInfoDTO implements Serializable {
private Date createTime; private Date createTime;
/** /**
* 线索来源 1朋友圈; 2客户群; 3 对话框; 0其他
*/
private Integer channelSource;
/**
* 记录事件类型 * 记录事件类型
* 1浏览素材;2 查看商品; 3 购买商品 * 1浏览素材;2 查看商品; 3 购买商品
* 通过此类型区分 弹窗提示 * 通过此类型区分 弹窗提示
...@@ -52,6 +57,16 @@ public class InteractRecordInfoDTO implements Serializable { ...@@ -52,6 +57,16 @@ public class InteractRecordInfoDTO implements Serializable {
private String bizId; private String bizId;
/** /**
* 浏览的商品数量
*/
private Integer visitGoodsNum;
/**
* 下单的商品数量
*/
private Integer orderGoodsNum;
/**
* 扩展信息 * 扩展信息
*/ */
private InteractRecordExtendInfoDTO extendInfo; private InteractRecordExtendInfoDTO extendInfo;
...@@ -119,4 +134,28 @@ public class InteractRecordInfoDTO implements Serializable { ...@@ -119,4 +134,28 @@ public class InteractRecordInfoDTO implements Serializable {
public void setExtendInfo(InteractRecordExtendInfoDTO extendInfo) { public void setExtendInfo(InteractRecordExtendInfoDTO extendInfo) {
this.extendInfo = extendInfo; this.extendInfo = extendInfo;
} }
public Integer getChannelSource() {
return channelSource;
}
public void setChannelSource(Integer channelSource) {
this.channelSource = channelSource;
}
public Integer getVisitGoodsNum() {
return visitGoodsNum;
}
public void setVisitGoodsNum(Integer visitGoodsNum) {
this.visitGoodsNum = visitGoodsNum;
}
public Integer getOrderGoodsNum() {
return orderGoodsNum;
}
public void setOrderGoodsNum(Integer orderGoodsNum) {
this.orderGoodsNum = orderGoodsNum;
}
} }
...@@ -20,4 +20,11 @@ public interface InteractRecordApiService { ...@@ -20,4 +20,11 @@ public interface InteractRecordApiService {
* @return * @return
*/ */
ServiceResponse<Page<InteractRecordInfoDTO>> queryInteractRecordList(InteractRecordQDTO interactRecordQDTO); ServiceResponse<Page<InteractRecordInfoDTO>> queryInteractRecordList(InteractRecordQDTO interactRecordQDTO);
/**
* 处理member信息变化的MQ
* @param params
* @return
*/
ServiceResponse<Void> memberChangeMQ(String params);
} }
...@@ -9,6 +9,9 @@ import org.apache.commons.collections.CollectionUtils; ...@@ -9,6 +9,9 @@ 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;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -141,4 +144,26 @@ public class NoticeMessageUtil { ...@@ -141,4 +144,26 @@ public class NoticeMessageUtil {
logger.info("发送消息异常:{}", e); logger.info("发送消息异常:{}", e);
} }
} }
/**
* 构建小程序跳转url
* @param messageTypeEnum
* @param data
* @return
*/
public static String buildMiniAppUrl(NoticeMessageTypeEnum messageTypeEnum, String data) {
if (StringUtils.isNotBlank(data)) {
try {
data = URLEncoder.encode(data, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
logger.error(e.getMessage());
}
}
String appUrl = messageTypeEnum.getPageUrl();
if (StringUtils.isNotBlank(messageTypeEnum.getPageType())) {
appUrl += messageTypeEnum.getPageType();
}
appUrl += "&data=" + data;
return appUrl;
}
} }
...@@ -105,5 +105,21 @@ public interface TabHaobanInteractRecordMapper { ...@@ -105,5 +105,21 @@ public interface TabHaobanInteractRecordMapper {
*/ */
List<PotentialCustomerStaticsBO> staticsClerkInteractRecordNew(InteractRecordQO interactRecordQO); List<PotentialCustomerStaticsBO> staticsClerkInteractRecordNew(InteractRecordQO interactRecordQO);
/**
* 会员合并
* @param mergeMemberId
* @param memberId
* @return
*/
int mergeMember(@Param("mergeMemberId") String mergeMemberId, @Param("memberId") String memberId);
/**
* 会员授权事件
* @param memberId
* @param unionId
* @return
*/
int memberAuthorized(@Param("memberId") String memberId, @Param("unionId") String unionId);
} }
...@@ -78,5 +78,12 @@ public interface TabHaobanPotentialCustomerMapper { ...@@ -78,5 +78,12 @@ public interface TabHaobanPotentialCustomerMapper {
*/ */
List<TabHaobanPotentialCustomer> queryPotentialCustomerList(PotentialCustomerQO potentialCustomerQO); List<TabHaobanPotentialCustomer> queryPotentialCustomerList(PotentialCustomerQO potentialCustomerQO);
/**
* 会员合并操作
* @param mergeMemberId
* @param memberId
*/
void mergeMember(@Param("mergeMemberId") String mergeMemberId, @Param("memberId") String memberId);
} }
package com.gic.haoban.manage.service.entity.content; package com.gic.haoban.manage.service.entity.content;
import com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType;
import java.util.Date; import java.util.Date;
import java.io.Serializable; import java.io.Serializable;
...@@ -44,11 +46,13 @@ public class TabHaobanInteractRecord implements Serializable { ...@@ -44,11 +46,13 @@ public class TabHaobanInteractRecord implements Serializable {
*/ */
private String storeId; private String storeId;
/** /**
* 线索来源 1朋友圈; 2客户群; 3 对话框; 0其他 * 线索来源 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材
* @see TriggerCustomerChannelType
*/ */
private Integer channelSource; private Integer channelSource;
/** /**
* 事件类型 1浏览商品;2浏览并点击; 3浏览并查看; 4 浏览并购买; 5查看并购买 * 事件类型 1浏览素材;2浏览商品; 3 购买商品
* @see com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType
*/ */
private Integer eventType; private Integer eventType;
/** /**
......
package com.gic.haoban.manage.service.pojo.bo.content; package com.gic.haoban.manage.service.pojo.bo.content;
import com.gic.haoban.manage.api.enums.content.InteractRecordExtendInfoDTO;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
...@@ -84,4 +83,15 @@ public class InteractRecordBO { ...@@ -84,4 +83,15 @@ public class InteractRecordBO {
* 扩展信息 * 扩展信息
*/ */
private InteractRecordExtendInfoBO extendInfo; private InteractRecordExtendInfoBO extendInfo;
/**
* 浏览的商品数量
*/
private Integer visitGoodsNum;
/**
* 下单的商品数量
*/
private Integer orderGoodsNum;
} }
...@@ -18,34 +18,9 @@ import java.util.List; ...@@ -18,34 +18,9 @@ import java.util.List;
public class InteractRecordExtendInfoBO implements Serializable { public class InteractRecordExtendInfoBO implements Serializable {
/** /**
* 浏览的商品id * 素材关联的订单信息
*/ */
private List<String> goodsIds; private List<ExtendOrderInfo> extendOrderInfos;
/**
* 订单编号
*/
private String orderNumber;
/**
* 订单创建时间
*/
private Date orderCreateTime;
/**
* 订单商品项总数
*/
private Integer orderTotalNum;
/**
* 订单应付
*/
private BigDecimal orderPay;
/**
* 订单实付
*/
private BigDecimal realPay;
/** /**
* 失效商品数量 * 失效商品数量
...@@ -57,8 +32,13 @@ public class InteractRecordExtendInfoBO implements Serializable { ...@@ -57,8 +32,13 @@ public class InteractRecordExtendInfoBO implements Serializable {
*/ */
private List<ExtendGoodsInfo> extendGoodsInfos; private List<ExtendGoodsInfo> extendGoodsInfos;
/**
* 冗余的商品id
*/
private List<String> goodsIds;
@Data @Data
public static class ExtendGoodsInfo { public static class ExtendGoodsInfo implements Serializable {
/** /**
* 商品名称 * 商品名称
...@@ -88,6 +68,49 @@ public class InteractRecordExtendInfoBO implements Serializable { ...@@ -88,6 +68,49 @@ public class InteractRecordExtendInfoBO implements Serializable {
* 商品单价 * 商品单价
*/ */
private BigDecimal salePrice; private BigDecimal salePrice;
/***
* 1 erp同步
* 2 自建
* @see com.gic.store.goods.enums.GoodsSourceTypeEnum
*/
private Integer sourceType;
}
/**
* 素材关联的订单信息
*/
@Data
public static class ExtendOrderInfo implements Serializable {
/**
* 订单编号
*/
private String orderNumber;
/**
* 订单创建时间
*/
private Date orderCreateTime;
/**
* 订单商品项总数
*/
private Integer orderTotalNum;
/**
* 订单应付
*/
private BigDecimal orderPay;
/**
* 订单实付
*/
private BigDecimal realPay;
/**
* 订单商品信息
*/
private List<ExtendGoodsInfo> orderGoodsInfos;
} }
public static InteractRecordExtendInfoBO empty() { public static InteractRecordExtendInfoBO empty() {
......
package com.gic.haoban.manage.service.pojo.bo.content;
import lombok.Data;
import lombok.Getter;
import java.io.Serializable;
/**
* @Author MUSI
* @Date 2023/4/2 9:12 AM
* @Description
* @Version
**/
@Data
public class MemberAttrChangeBO implements Serializable {
/**
* 会员id
*/
private String memberId;
/**
* 会员unionId
*/
private String unionId;
/**
* 被合并的会员id
*/
private String mergeMemberId;
/**
* 业务变动类型:1小程序授权 2会员合并
*/
private Integer opt;
@Getter
public enum MemberChangeOpt {
MINI_APP_AUTHORIZED(1, "会员授权"),
MEMBER_MERGE(2, "会员合并");
MemberChangeOpt(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
private Integer code;
private String desc;
}
}
...@@ -9,6 +9,7 @@ import com.gic.haoban.manage.service.entity.TabHaobanStaff; ...@@ -9,6 +9,7 @@ import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.pojo.bo.NoticeMessageBO; import com.gic.haoban.manage.service.pojo.bo.NoticeMessageBO;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -16,7 +17,7 @@ import java.util.Collections; ...@@ -16,7 +17,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum.MATERIAL_WEEK_REPORT; import static com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum.MATERIAL_REPORT_NOTIFY;
/** /**
* @Author MUSI * @Author MUSI
...@@ -24,7 +25,7 @@ import static com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum.MATERIAL_WEE ...@@ -24,7 +25,7 @@ import static com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum.MATERIAL_WEE
* @Description * @Description
* @Version 好办 周报/月报 上下文 * @Version 好办 周报/月报 上下文
**/ **/
@Slf4j
@Data @Data
@Builder @Builder
public class MaterialReportContext { public class MaterialReportContext {
...@@ -98,26 +99,27 @@ public class MaterialReportContext { ...@@ -98,26 +99,27 @@ public class MaterialReportContext {
*/ */
public List<NoticeMessageBO> buildNotifyMessageBos() { public List<NoticeMessageBO> buildNotifyMessageBos() {
if (CollectionUtils.isEmpty(this.staffClerkRelations)) { if (CollectionUtils.isEmpty(this.staffClerkRelations)) {
log.info("成员未绑定导购, staffId: {}", this.staffId);
return Collections.emptyList(); return Collections.emptyList();
} }
if (StringUtils.isBlank(this.mainStoreId)) { if (StringUtils.isBlank(this.mainStoreId)) {
log.info("成员 {} 没有主门店数据, 区经角色不发送小程序消息通知 ", this.staffId);
return Collections.emptyList(); return Collections.emptyList();
} }
return this.staffClerkRelations return this.staffClerkRelations
.stream() .stream()
.map(item -> { .map(item -> {
NoticeMessageBO noticeMessageBO = new NoticeMessageBO(); NoticeMessageBO noticeMessageBO = new NoticeMessageBO();
noticeMessageBO.setCategoryType(MATERIAL_WEEK_REPORT.getCategory()); noticeMessageBO.setCategoryType(MATERIAL_REPORT_NOTIFY.getCategory());
noticeMessageBO.setMessageType(MATERIAL_WEEK_REPORT.getType()); noticeMessageBO.setMessageType(MATERIAL_REPORT_NOTIFY.getType());
noticeMessageBO.setClerkId(StringUtils.isNotBlank(item.getClerkId()) ? item.getClerkId() : "-1"); noticeMessageBO.setClerkId(StringUtils.isNotBlank(item.getClerkId()) ? item.getClerkId() : "-1");
noticeMessageBO.setStoreId(StringUtils.isNotBlank(item.getStoreId()) ? item.getStoreId() : "-1"); noticeMessageBO.setStoreId(StringUtils.isNotBlank(item.getStoreId()) ? item.getStoreId() : "-1");
noticeMessageBO.setTitle(this.getMessageTitle()); noticeMessageBO.setTitle(this.getMessageTitle());
noticeMessageBO.setTemplateCode(MATERIAL_WEEK_REPORT.getTemplateCode()); noticeMessageBO.setTemplateCode(MATERIAL_REPORT_NOTIFY.getTemplateCode());
noticeMessageBO.setDescription(this.getMessageDesc()); noticeMessageBO.setDescription(this.getMessageDesc());
noticeMessageBO.setEnterpriseId(this.enterpriseId); noticeMessageBO.setEnterpriseId(this.enterpriseId);
noticeMessageBO.setRelationId(this.clerkId); noticeMessageBO.setRelationId(this.clerkId);
noticeMessageBO.setMessageContent(this.extendParams()); noticeMessageBO.setMessageContent(this.extendParams(item.getStoreId()));
return noticeMessageBO; return noticeMessageBO;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -149,10 +151,12 @@ public class MaterialReportContext { ...@@ -149,10 +151,12 @@ public class MaterialReportContext {
return String.format(month_desc, monthBeginStr, monthEndStr); return String.format(month_desc, monthBeginStr, monthEndStr);
} }
public String extendParams() { public String extendParams(String storeId) {
JSONObject params = new JSONObject(); JSONObject params = new JSONObject();
params.put("clerkId", this.clerkId); // params.put("clerkId", this.clerkId);
params.put("storeId", this.mainStoreId); // 此处页面链接 最长128个字节
params.put("s", storeId);
params.put("t", this.reportType);
return params.toJSONString(); return params.toJSONString();
} }
......
...@@ -16,7 +16,6 @@ import java.util.Map; ...@@ -16,7 +16,6 @@ import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum.MATERIAL_WEEK_REPORT;
import static com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum.POTENTIAL_CUSTOMER_NOTIFY; import static com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum.POTENTIAL_CUSTOMER_NOTIFY;
/** /**
......
...@@ -54,13 +54,13 @@ public class InteractRecordMessageBO implements Serializable { ...@@ -54,13 +54,13 @@ public class InteractRecordMessageBO implements Serializable {
*/ */
private Integer durationTime; private Integer durationTime;
/** /**
* 购买商品时的 订单id * 购买商品时的 订单编号
*/ */
private String orderId; private String orderNumber;
/** /**
* 查看商品时查看的商品id * 查看商品时查看的商品id
*/ */
private List<String> goodsIds; private String goodsId;
/** /**
* 业务唯一标识 * 业务唯一标识
*/ */
......
...@@ -51,4 +51,18 @@ public interface InteractRecordService { ...@@ -51,4 +51,18 @@ public interface InteractRecordService {
*/ */
List<PotentialCustomerStaticsBO> staticsClerkNewInteractRecord(InteractRecordQO interactRecordQO); List<PotentialCustomerStaticsBO> staticsClerkNewInteractRecord(InteractRecordQO interactRecordQO);
/**
* 会员合并操作
* @param mergeMemberId
* @param memberId
*/
void mergeMember(String mergeMemberId, String memberId);
/**
* 会员授权事件
* @param memberId
* @param unionId
*/
void memberAuthorized(String memberId, String unionId);
} }
...@@ -55,4 +55,11 @@ public interface PotentialCustomerService { ...@@ -55,4 +55,11 @@ public interface PotentialCustomerService {
* @param context * @param context
*/ */
void sendPotentialCustomerNotice(PotentialCustomerNotifyContext context); void sendPotentialCustomerNotice(PotentialCustomerNotifyContext context);
/**
* 会员合并操作
* @param mergeMemberId
* @param memberId
*/
void mergeMember(String mergeMemberId, String memberId);
} }
...@@ -2,23 +2,30 @@ package com.gic.haoban.manage.service.service.content.adaptor; ...@@ -2,23 +2,30 @@ package com.gic.haoban.manage.service.service.content.adaptor;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
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.TriggerCustomerChannelType; import com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord; import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord;
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.store.goods.dto.goods.GoodsInfoSimpleDTO; import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO;
import com.gic.store.goods.dto.qdto.ErpGoodsInfoQDTO; import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberService;
import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO;
import com.gic.store.goods.dto.qdto.GoodsListQDTO;
import com.gic.store.goods.enums.GoodsStatusEnum; import com.gic.store.goods.enums.GoodsStatusEnum;
import com.gic.store.goods.service.GoodsInfoOutApiService; import com.gic.store.goods.service.GoodsCenterApiService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
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.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -31,9 +38,10 @@ import java.util.stream.Collectors; ...@@ -31,9 +38,10 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@Component @Component
public class InteractRecordBuilder { public class InteractRecordBuilder {
@Autowired @Autowired
private GoodsInfoOutApiService goodsInfoOutApiService; private GoodsCenterApiService goodsCenterApiService;
@Autowired
private MemberService memberService;
/** /**
* 互动记录描述 * 互动记录描述
...@@ -47,6 +55,7 @@ public class InteractRecordBuilder { ...@@ -47,6 +55,7 @@ public class InteractRecordBuilder {
/** /**
* 基于渠道和事件类型拼接信息 * 基于渠道和事件类型拼接信息
*
* @param channelSource * @param channelSource
* @param eventType * @param eventType
* @return * @return
...@@ -56,7 +65,7 @@ public class InteractRecordBuilder { ...@@ -56,7 +65,7 @@ public class InteractRecordBuilder {
if (TriggerCustomerChannelType.showDescChannel().contains(channelSource)) { if (TriggerCustomerChannelType.showDescChannel().contains(channelSource)) {
TriggerCustomerChannelType channelType = TriggerCustomerChannelType.getInstance(channelSource); TriggerCustomerChannelType channelType = TriggerCustomerChannelType.getInstance(channelSource);
if (channelType != null) { if (channelType != null) {
stringBuilder.append(String.format("通过[%s]", channelType.getDesc())); stringBuilder.append(String.format("通过%s", channelType.getDesc()));
} }
} }
MaterialInteractRecordEventType instance = MaterialInteractRecordEventType.getInstance(eventType); MaterialInteractRecordEventType instance = MaterialInteractRecordEventType.getInstance(eventType);
...@@ -93,10 +102,12 @@ public class InteractRecordBuilder { ...@@ -93,10 +102,12 @@ public class InteractRecordBuilder {
// 浏览商品事件 // 浏览商品事件
List<String> visitGoodsIds = extendInfo.getGoodsIds(); List<String> visitGoodsIds = extendInfo.getGoodsIds();
if (CollectionUtils.isEmpty(visitGoodsIds)) { if (CollectionUtils.isEmpty(visitGoodsIds)) {
log.info("组装浏览商品信息, 商品信息不存在 {}", interactRecord.getExtendInfo());
return null; return null;
} }
// 拼接商品信息 // 拼接商品信息
List<InteractRecordExtendInfoBO.ExtendGoodsInfo> extendGoodsInfos = this.convertGoodsInfo(visitGoodsIds, interactRecord.getEnterpriseId()); List<InteractRecordExtendInfoBO.ExtendGoodsInfo> extendGoodsInfos =
this.convertGoodsInfo(visitGoodsIds, interactRecord.getEnterpriseId());
extendInfo.setExtendGoodsInfos(extendGoodsInfos); extendInfo.setExtendGoodsInfos(extendGoodsInfos);
extendInfo.setInvalidGoodsNum(visitGoodsIds.size() - extendGoodsInfos.size()); extendInfo.setInvalidGoodsNum(visitGoodsIds.size() - extendGoodsInfos.size());
return extendInfo; return extendInfo;
...@@ -105,26 +116,89 @@ public class InteractRecordBuilder { ...@@ -105,26 +116,89 @@ public class InteractRecordBuilder {
} }
private List<InteractRecordExtendInfoBO.ExtendGoodsInfo> convertGoodsInfo(List<String> visitGoodsIds, String enterpriseId) { private List<InteractRecordExtendInfoBO.ExtendGoodsInfo> convertGoodsInfo(List<String> visitGoodsIds, String enterpriseId) {
ErpGoodsInfoQDTO search = new ErpGoodsInfoQDTO(); if (CollectionUtils.isEmpty(visitGoodsIds)) {
search.setEnterpriseId(enterpriseId); return Collections.emptyList();
search.setGoodsIds(visitGoodsIds); }
search.setExcludeStatus(Arrays.asList(GoodsStatusEnum.DELETED.getCode(), GoodsStatusEnum.BACK.getCode())); GoodsListQDTO goodsListQDTO = new GoodsListQDTO();
ServiceResponse<List<GoodsInfoSimpleDTO>> serviceResponse = goodsListQDTO.setEnterpriseId(enterpriseId);
goodsInfoOutApiService.queryErpGoodsInfoWithIds(search); goodsListQDTO.setIncludeGoodsIds(visitGoodsIds);
goodsListQDTO.setExcludeStatus(Arrays.asList(GoodsStatusEnum.DELETED.getCode(), GoodsStatusEnum.BACK.getCode()));
goodsListQDTO.setPageSize(visitGoodsIds.size() + 1);
ServiceResponse<Page<GoodsSpuInfoDTO>> serviceResponse = goodsCenterApiService.queryStoreGoodsList(goodsListQDTO);
if (!serviceResponse.isSuccess()) { if (!serviceResponse.isSuccess()) {
log.info("查询商品异常 {}", JSON.toJSONString(serviceResponse));
return Collections.emptyList();
}
if (CollectionUtils.isEmpty(serviceResponse.getResult().getResult())) {
log.info("查询商品为空 {}", JSON.toJSONString(serviceResponse));
return Collections.emptyList(); return Collections.emptyList();
} }
return serviceResponse.getResult() return serviceResponse.getResult()
.getResult()
.stream() .stream()
.map(item -> { .map(item -> {
InteractRecordExtendInfoBO.ExtendGoodsInfo extendGoodsInfo = new InteractRecordExtendInfoBO.ExtendGoodsInfo(); InteractRecordExtendInfoBO.ExtendGoodsInfo extendGoodsInfo = new InteractRecordExtendInfoBO.ExtendGoodsInfo();
extendGoodsInfo.setGoodsName(item.getGoodsName()); extendGoodsInfo.setGoodsName(item.getGoodsName());
extendGoodsInfo.setGoodsCode(item.getGoodsCode()); extendGoodsInfo.setGoodsCode(item.getGoodsCode());
extendGoodsInfo.setGoodsImageUrl(item.getGoodsImageUrl()); extendGoodsInfo.setGoodsImageUrl(item.getImageUrl());
extendGoodsInfo.setSalePrice(item.getSalePrice()); extendGoodsInfo.setSalePrice(item.getSalePrice());
extendGoodsInfo.setSourceType(item.getSourceType());
return extendGoodsInfo; return extendGoodsInfo;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
/**
* 计算商品浏览数量
* @param interactRecordBO
* @return
*/
public void warpRelationGoodsNum(InteractRecordBO interactRecordBO) {
if (interactRecordBO == null) {
log.info("互动记录不存在");
return;
}
if (interactRecordBO.getExtendInfo() == null) {
log.info("互动记录不存在扩展信息 {}", JSON.toJSONString(interactRecordBO));
return;
}
InteractRecordExtendInfoBO extendInfo = interactRecordBO.getExtendInfo();
interactRecordBO.setVisitGoodsNum(0);
if (CollectionUtils.isNotEmpty(extendInfo.getGoodsIds())) {
interactRecordBO.setVisitGoodsNum(extendInfo.getGoodsIds().size());
}
interactRecordBO.setOrderGoodsNum(0);
if (CollectionUtils.isNotEmpty(extendInfo.getExtendOrderInfos())) {
Integer orderGoodsNum = extendInfo.getExtendOrderInfos()
.stream()
.map(item -> item.getOrderGoodsInfos().size())
.reduce(0, Integer::sum);
interactRecordBO.setOrderGoodsNum(orderGoodsNum);
}
}
public PotentialCustomerBO build(TabHaobanInteractRecord interactRecord) {
PotentialCustomerBO temp = new PotentialCustomerBO();
BeanUtils.copyProperties(interactRecord, temp);
temp.setId(null);
// 获取会员信息
MemberDTO memberDTO = memberService.queryMember(interactRecord.getMemberId());
if (memberDTO != null) {
temp.setMemberName(memberDTO.getMemberName());
temp.setMemberNickName(memberDTO.getThirdNickname());
temp.setMemberImageUrl(memberDTO.getThirdImgUrl());
temp.setMemberPhone(memberDTO.getPhoneNumber());
}
temp.setStarFlag(0);
temp.setSeeFlag(0);
temp.setLastAccessTime(interactRecord.getCreateTime());
temp.setCreateTime(new Date());
temp.setUpdateTime(new Date());
temp.setDeleteFlag(0);
// 查询memberId是否成交过订单
temp.setDealRecordNum(0);
return temp;
}
} }
...@@ -3,7 +3,9 @@ package com.gic.haoban.manage.service.service.content.adaptor; ...@@ -3,7 +3,9 @@ package com.gic.haoban.manage.service.service.content.adaptor;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO; import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO; import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO;
import com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum;
import com.gic.haoban.manage.api.enums.content.MaterialReportType; import com.gic.haoban.manage.api.enums.content.MaterialReportType;
import com.gic.haoban.manage.api.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.service.config.Config; import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated; import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated;
import com.gic.haoban.manage.service.pojo.bo.content.context.MaterialReportContext; import com.gic.haoban.manage.service.pojo.bo.content.context.MaterialReportContext;
...@@ -74,12 +76,19 @@ public class MaterialReportBuilder { ...@@ -74,12 +76,19 @@ public class MaterialReportBuilder {
*/ */
public void fillMainStore(MaterialReportContext context) { public void fillMainStore(MaterialReportContext context) {
if (CollectionUtils.isEmpty(context.getStaffClerkRelations())) { if (CollectionUtils.isEmpty(context.getStaffClerkRelations())) {
log.info("不存在成员与导购的关联关系 staffId: {}", context.getStaffId());
return; return;
} }
StaffClerkRelationDTO staffClerkRelationDTO = context.getStaffClerkRelations().get(0); if (context.getStaffClerkRelations().size() == 1) {
String wxEnterpriseId = staffClerkRelationDTO.getWxEnterpriseId(); StaffClerkRelationDTO staffClerkRelationDTO = context.getStaffClerkRelations().get(0);
context.setClerkId(staffClerkRelationDTO.getClerkId()); if (staffClerkRelationDTO.getClerkType() != null && staffClerkRelationDTO.getClerkType() == 2) {
TabHaobanClerkMainStoreRelated mainStoreInfo = clerkMainStoreRelatedService.getMainStoreByStaffId(context.getStaffId(), wxEnterpriseId); log.info("成员clerId:{}, staffId: {} 为区经角色", staffClerkRelationDTO.getClerkId(), staffClerkRelationDTO.getStaffId());
// 区经无主门店
context.setClerkId(staffClerkRelationDTO.getClerkId());
}
return;
}
TabHaobanClerkMainStoreRelated mainStoreInfo = clerkMainStoreRelatedService.getMainStoreByStaffId(context.getStaffId(), context.getStaffInfo().getWxEnterpriseId());
if (mainStoreInfo != null) { if (mainStoreInfo != null) {
context.setMainStoreId(mainStoreInfo.getStoreId()); context.setMainStoreId(mainStoreInfo.getStoreId());
Optional<StaffClerkRelationDTO> mainClerkInfo = context.getStaffClerkRelations() Optional<StaffClerkRelationDTO> mainClerkInfo = context.getStaffClerkRelations()
...@@ -90,6 +99,7 @@ public class MaterialReportBuilder { ...@@ -90,6 +99,7 @@ public class MaterialReportBuilder {
log.info("成员{}与主门店{}不存在导购关联关系", context.getStaffId(), context.getMainStoreId()); log.info("成员{}与主门店{}不存在导购关联关系", context.getStaffId(), context.getMainStoreId());
return; return;
} }
// 成员在主门店时的clerkId
context.setClerkId(mainClerkInfo.get().getClerkId()); context.setClerkId(mainClerkInfo.get().getClerkId());
} }
} }
...@@ -100,6 +110,13 @@ public class MaterialReportBuilder { ...@@ -100,6 +110,13 @@ public class MaterialReportBuilder {
*/ */
public void buildMaterialReportData(MaterialReportContext context) { public void buildMaterialReportData(MaterialReportContext context) {
// 获取该导购 在门店 的周报/月报数据 // 获取该导购 在门店 的周报/月报数据
String clerkId = context.getClerkId();
if (StringUtils.isBlank(context.getMainStoreId())) {
// 区经
}else {
String mainStoreId = context.getMainStoreId();
}
String templatePath = ""; String templatePath = "";
if (MaterialReportType.WEEK.getCode().equals(context.getReportType())) { if (MaterialReportType.WEEK.getCode().equals(context.getReportType())) {
context.setUseMaterialNum(103); context.setUseMaterialNum(103);
...@@ -110,7 +127,6 @@ public class MaterialReportBuilder { ...@@ -110,7 +127,6 @@ public class MaterialReportBuilder {
context.setConvertAmount("12.3万"); context.setConvertAmount("12.3万");
templatePath = month_template_report; templatePath = month_template_report;
} }
// 生成图片地址 // 生成图片地址
String url = DrawImageUtils.drawImage(context.getFactoryCode(), context.getUseMaterialNum() + "", context.getConvertAmount(), templatePath); String url = DrawImageUtils.drawImage(context.getFactoryCode(), context.getUseMaterialNum() + "", context.getConvertAmount(), templatePath);
context.setMaterialReportUrl(url); context.setMaterialReportUrl(url);
...@@ -137,8 +153,7 @@ public class MaterialReportBuilder { ...@@ -137,8 +153,7 @@ public class MaterialReportBuilder {
articleInfo.setAppid(config.getAppid()); articleInfo.setAppid(config.getAppid());
articleInfo.setTitle(context.getMessageTitle()); articleInfo.setTitle(context.getMessageTitle());
articleInfo.setDescription(context.getMessageDesc()); articleInfo.setDescription(context.getMessageDesc());
// pagePath 拼接参数? articleInfo.setPagepath(NoticeMessageUtil.buildMiniAppUrl(NoticeMessageTypeEnum.MATERIAL_REPORT_NOTIFY, context.extendParams(context.getMainStoreId())));
articleInfo.setPagepath("/monthList");
articleInfo.setPicurl(context.getMaterialReportUrl()); articleInfo.setPicurl(context.getMaterialReportUrl());
newsSendMessage.setArticleMessages(Collections.singletonList(articleInfo)); newsSendMessage.setArticleMessages(Collections.singletonList(articleInfo));
return newsSendMessage; return newsSendMessage;
......
package com.gic.haoban.manage.service.service.content.adaptor; package com.gic.haoban.manage.service.service.content.adaptor;
import com.alibaba.fastjson.JSON;
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.dto.WxEnterpriseQwDTO; import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO;
import com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum;
import com.gic.haoban.manage.api.service.StaffApiService; import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.service.config.Config; import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated; import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated;
import com.gic.haoban.manage.service.pojo.bo.NoticeMessageBO; import com.gic.haoban.manage.service.pojo.bo.NoticeMessageBO;
...@@ -15,8 +16,6 @@ import com.gic.haoban.manage.service.service.StaffClerkRelationService; ...@@ -15,8 +16,6 @@ import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.WxEnterpriseService; import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.haoban.manage.service.service.notify.NoticeMessageService; import com.gic.haoban.manage.service.service.notify.NoticeMessageService;
import com.gic.wechat.api.dto.qywx.ItemDTO; import com.gic.wechat.api.dto.qywx.ItemDTO;
import com.gic.wechat.api.dto.qywx.QywxNewsArticleMessageDTO;
import com.gic.wechat.api.dto.qywx.QywxNewsSendMessageDTO;
import com.gic.wechat.api.dto.qywx.QywxXcxSendMessageDTO; import com.gic.wechat.api.dto.qywx.QywxXcxSendMessageDTO;
import com.gic.wechat.api.service.qywx.QywxSuiteApiService; import com.gic.wechat.api.service.qywx.QywxSuiteApiService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -195,7 +194,7 @@ public class PotentialCustomerNotifyBuilder { ...@@ -195,7 +194,7 @@ public class PotentialCustomerNotifyBuilder {
list.add(wxUserId); list.add(wxUserId);
messageDTO.setAppid(config.getAppid()); messageDTO.setAppid(config.getAppid());
messageDTO.setUserIds(list); messageDTO.setUserIds(list);
messageDTO.setPage("/pageurl?"); messageDTO.setPage(NoticeMessageUtil.buildMiniAppUrl(NoticeMessageTypeEnum.MATERIAL_REPORT_NOTIFY, ""));
messageDTO.setTitle("销售线索通知"); messageDTO.setTitle("销售线索通知");
messageDTO.setItems(Collections.singletonList(itemDTO)); messageDTO.setItems(Collections.singletonList(itemDTO));
return messageDTO; return messageDTO;
......
...@@ -136,6 +136,7 @@ public class GroupMessageServiceImpl implements GroupMessageService { ...@@ -136,6 +136,7 @@ public class GroupMessageServiceImpl implements GroupMessageService {
.collect(Collectors.toList()); .collect(Collectors.toList());
List<TabHaobanStaff> tabHaobanStaffs = staffService.listStaffWithIds(staffIds); List<TabHaobanStaff> tabHaobanStaffs = staffService.listStaffWithIds(staffIds);
if (CollectionUtils.isEmpty(tabHaobanStaffs)) { if (CollectionUtils.isEmpty(tabHaobanStaffs)) {
log.info("成员不存在 staffIds:{}", JSON.toJSONString(staffIds));
return Collections.emptyMap(); return Collections.emptyMap();
} }
return tabHaobanStaffs return tabHaobanStaffs
...@@ -181,6 +182,8 @@ public class GroupMessageServiceImpl implements GroupMessageService { ...@@ -181,6 +182,8 @@ public class GroupMessageServiceImpl implements GroupMessageService {
private void doHandlerWithSend2Group(String wxEnterpriseId, List<ClerkShareLogBO> clerkShareLogBos, GroupMessageInfoBo groupMessageInfoBo, private void doHandlerWithSend2Group(String wxEnterpriseId, List<ClerkShareLogBO> clerkShareLogBos, GroupMessageInfoBo groupMessageInfoBo,
WxEnterpriseQwDTO qwInfo, WxEnterpriseQwDTO qwInfo,
String corpId, Map<String, TabHaobanStaff> staffInfoMap, List<String> excludeMsgId, List<Long> clerkShareLogIds) { String corpId, Map<String, TabHaobanStaff> staffInfoMap, List<String> excludeMsgId, List<Long> clerkShareLogIds) {
log.info("doHandlerWithSend2Group 处理群发到群组开始 >>>>>>> ");
if (groupMessageInfoBo.getStartTime() == null || groupMessageInfoBo.getEndTime() == null) { if (groupMessageInfoBo.getStartTime() == null || groupMessageInfoBo.getEndTime() == null) {
log.info("doHandlerWithSend2Group 处理群发到群组缺少时间参数 {}", JSON.toJSONString(groupMessageInfoBo)); log.info("doHandlerWithSend2Group 处理群发到群组缺少时间参数 {}", JSON.toJSONString(groupMessageInfoBo));
return; return;
...@@ -254,6 +257,7 @@ public class GroupMessageServiceImpl implements GroupMessageService { ...@@ -254,6 +257,7 @@ public class GroupMessageServiceImpl implements GroupMessageService {
*/ */
private void doHandlerWithSend2Customer(List<ClerkShareLogBO> clerkShareLogBos, GroupMessageInfoBo groupMessageInfoBo, WxEnterpriseQwDTO qwInfo, private void doHandlerWithSend2Customer(List<ClerkShareLogBO> clerkShareLogBos, GroupMessageInfoBo groupMessageInfoBo, WxEnterpriseQwDTO qwInfo,
String corpId, Map<String, TabHaobanStaff> staffInfoMap, List<String> excludeMsgId, List<Long> clerkShareLogIds) { String corpId, Map<String, TabHaobanStaff> staffInfoMap, List<String> excludeMsgId, List<Long> clerkShareLogIds) {
log.info("doHandlerWithSend2Customer 处理群发到客户 开始 >>>>>>>>");
if (groupMessageInfoBo.getStartTime() == null || groupMessageInfoBo.getEndTime() == null) { if (groupMessageInfoBo.getStartTime() == null || groupMessageInfoBo.getEndTime() == null) {
log.info("doHandlerWithSend2Customer 处理群发到客户 缺少时间参数 {}", JSON.toJSONString(groupMessageInfoBo)); log.info("doHandlerWithSend2Customer 处理群发到客户 缺少时间参数 {}", JSON.toJSONString(groupMessageInfoBo));
return; return;
...@@ -431,6 +435,7 @@ public class GroupMessageServiceImpl implements GroupMessageService { ...@@ -431,6 +435,7 @@ public class GroupMessageServiceImpl implements GroupMessageService {
List<QywxGroupMsgSendResultDTO.GroupMsgSendResultInfo> groupMsgSendResultInfos = new ArrayList<>(); List<QywxGroupMsgSendResultDTO.GroupMsgSendResultInfo> groupMsgSendResultInfos = new ArrayList<>();
groupMsgSendResultInfos.addAll(serviceResponse.getResult().getSendResultInfos()); groupMsgSendResultInfos.addAll(serviceResponse.getResult().getSendResultInfos());
if (StringUtils.isNotBlank(serviceResponse.getResult().getCursor())) { if (StringUtils.isNotBlank(serviceResponse.getResult().getCursor())) {
log.info("递归获取成员群发结果 >>>>> ");
String tempCursor = serviceResponse.getResult().getCursor(); String tempCursor = serviceResponse.getResult().getCursor();
this.queryGroupMsgSendResult(corpid, msgId, userId, tempCursor); this.queryGroupMsgSendResult(corpid, msgId, userId, tempCursor);
} }
......
...@@ -7,9 +7,11 @@ import com.gic.commons.util.UniqueIdUtils; ...@@ -7,9 +7,11 @@ import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanInteractRecordMapper; import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanInteractRecordMapper;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord; import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord;
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.PotentialCustomerBO;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerStaticsBO; import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerStaticsBO;
import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO; import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
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.adaptor.InteractRecordBuilder; import com.gic.haoban.manage.service.service.content.adaptor.InteractRecordBuilder;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -20,8 +22,11 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -20,8 +22,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -38,6 +43,8 @@ public class InteractRecordServiceImpl implements InteractRecordService { ...@@ -38,6 +43,8 @@ public class InteractRecordServiceImpl implements InteractRecordService {
private TabHaobanInteractRecordMapper tabHaobanInteractRecordMapper; private TabHaobanInteractRecordMapper tabHaobanInteractRecordMapper;
@Autowired @Autowired
private InteractRecordBuilder interactRecordBuilder; private InteractRecordBuilder interactRecordBuilder;
@Autowired
PotentialCustomerService potentialCustomerService;
/** /**
* 查询互动记录 * 查询互动记录
...@@ -71,12 +78,14 @@ public class InteractRecordServiceImpl implements InteractRecordService { ...@@ -71,12 +78,14 @@ public class InteractRecordServiceImpl implements InteractRecordService {
@Override @Override
public Page<InteractRecordBO> queryInteractRecordPage(InteractRecordQO interactRecordQO) { public Page<InteractRecordBO> queryInteractRecordPage(InteractRecordQO interactRecordQO) {
// 默认查最近一年内的的数据
if (StringUtils.isBlank(interactRecordQO.getClerkId())) { if (StringUtils.isBlank(interactRecordQO.getClerkId())) {
log.info("queryInteractRecordPage 参数缺失"); log.info("queryInteractRecordPage 参数缺失");
return new Page<>(); return new Page<>();
} }
interactRecordQO.setStartTime(DateUtil.addNumForYear(new Date(), -1)); // 默认查最近一年内的的数据
if (interactRecordQO.getStartTime() == null || interactRecordQO.getStartTime().before(DateUtil.addNumForYear(new Date(), -1))) {
interactRecordQO.setStartTime(DateUtil.addNumForYear(new Date(), -1));
}
PageHelper.startPage(interactRecordQO.getPageNum(), interactRecordQO.getPageSize()); PageHelper.startPage(interactRecordQO.getPageNum(), interactRecordQO.getPageSize());
com.github.pagehelper.Page<TabHaobanInteractRecord> pageResult = com.github.pagehelper.Page<TabHaobanInteractRecord> pageResult =
(com.github.pagehelper.Page<TabHaobanInteractRecord>) tabHaobanInteractRecordMapper.queryInteractRecordList(interactRecordQO); (com.github.pagehelper.Page<TabHaobanInteractRecord>) tabHaobanInteractRecordMapper.queryInteractRecordList(interactRecordQO);
...@@ -91,8 +100,9 @@ public class InteractRecordServiceImpl implements InteractRecordService { ...@@ -91,8 +100,9 @@ public class InteractRecordServiceImpl implements InteractRecordService {
.map(item -> { .map(item -> {
InteractRecordBO temp = new InteractRecordBO(); InteractRecordBO temp = new InteractRecordBO();
BeanUtils.copyProperties(item, temp); BeanUtils.copyProperties(item, temp);
temp.setRecordDesc(this.interactRecordBuilder.buildDesc(item)); temp.setRecordDesc(interactRecordBuilder.buildDesc(item));
temp.setExtendInfo(interactRecordBuilder.convertExtendInfo(item)); temp.setExtendInfo(interactRecordBuilder.convertExtendInfo(item));
interactRecordBuilder.warpRelationGoodsNum(temp);
return temp; return temp;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -152,4 +162,65 @@ public class InteractRecordServiceImpl implements InteractRecordService { ...@@ -152,4 +162,65 @@ public class InteractRecordServiceImpl implements InteractRecordService {
public List<PotentialCustomerStaticsBO> staticsClerkNewInteractRecord(InteractRecordQO interactRecordQO) { public List<PotentialCustomerStaticsBO> staticsClerkNewInteractRecord(InteractRecordQO interactRecordQO) {
return this.tabHaobanInteractRecordMapper.staticsClerkInteractRecordNew(interactRecordQO); return this.tabHaobanInteractRecordMapper.staticsClerkInteractRecordNew(interactRecordQO);
} }
/**
* 会员合并操作
*
* @param mergeMemberId
* @param memberId
*/
@Override
public void mergeMember(String mergeMemberId, String memberId) {
if (StringUtils.isAnyBlank(memberId, mergeMemberId)) {
log.info("合并会员参数缺失 mergeMemberId: {} memberId: {}", mergeMemberId, memberId);
return;
}
tabHaobanInteractRecordMapper.mergeMember(mergeMemberId, memberId);
}
/**
* 会员授权事件
*
* @param memberId
* @param unionId
*/
@Override
public void memberAuthorized(String memberId, String unionId) {
InteractRecordQO interactRecordQO = new InteractRecordQO();
interactRecordQO.setUnionId(unionId);
List<TabHaobanInteractRecord> interactRecords = this.tabHaobanInteractRecordMapper.queryInteractRecordList(interactRecordQO);
if (CollectionUtils.isEmpty(interactRecords)) {
log.info("会员授权事件, 该会员未产生过互动记录 {}", unionId);
return;
}
tabHaobanInteractRecordMapper.memberAuthorized(memberId, unionId);
Map<String, List<TabHaobanInteractRecord>> interactRecordMap = interactRecords
.stream()
.collect(Collectors.groupingBy(item -> item.getClerkId() + item.getMemberId()));
for (Map.Entry<String, List<TabHaobanInteractRecord>> entry : interactRecordMap.entrySet()) {
this.handlerRecord(memberId, entry.getValue());
}
}
private void handlerRecord(String memberId, List<TabHaobanInteractRecord> interactRecords) {
Integer durationTime = interactRecords
.stream()
.map(TabHaobanInteractRecord::getDurationTime)
.filter(Objects::nonNull)
.reduce(0, Integer::sum);
interactRecords.sort(Comparator.comparing(TabHaobanInteractRecord::getId).reversed());
TabHaobanInteractRecord interactRecord = interactRecords.get(0);
interactRecord.setMemberId(memberId);
PotentialCustomerBO potentialCustomerBO = potentialCustomerService.queryPotentialCustomerInfo(interactRecord.getClerkId(), memberId);
if (potentialCustomerBO == null) {
potentialCustomerBO = interactRecordBuilder.build(interactRecord);
}
potentialCustomerBO.setDurationTime(durationTime);
potentialCustomerService.saveOrUpdatePotentialCustomer(potentialCustomerBO);
}
} }
...@@ -89,6 +89,7 @@ public class MaterialReportServiceImpl implements MaterialReportService { ...@@ -89,6 +89,7 @@ public class MaterialReportServiceImpl implements MaterialReportService {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(staffInfo.getWxEnterpriseId()); WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(staffInfo.getWxEnterpriseId());
QywxNewsSendMessageDTO newsSendMessageDTO = materialReportBuilder.buildQywxNewsMessage(context, qwDTO); QywxNewsSendMessageDTO newsSendMessageDTO = materialReportBuilder.buildQywxNewsMessage(context, qwDTO);
if (newsSendMessageDTO == null) { if (newsSendMessageDTO == null) {
log.info("构建企业应用消息异常 {}");
return; return;
} }
log.info("发送企业图文消息参数{}", JSON.toJSONString(newsSendMessageDTO)); log.info("发送企业图文消息参数{}", JSON.toJSONString(newsSendMessageDTO));
......
...@@ -229,4 +229,18 @@ public class PotentialCustomerServiceImpl implements PotentialCustomerService { ...@@ -229,4 +229,18 @@ public class PotentialCustomerServiceImpl implements PotentialCustomerService {
// 如果该导购id是成员在主门店时的导购id 发送应用消息 // 如果该导购id是成员在主门店时的导购id 发送应用消息
potentialCustomerNotifyBuilder.sendApplicationMessage(context); potentialCustomerNotifyBuilder.sendApplicationMessage(context);
} }
/**
* 会员合并操作
*
* @param mergeMemberId
* @param memberId
*/
@Override
public void mergeMember(String mergeMemberId, String memberId) {
if (StringUtils.isAnyBlank(mergeMemberId, memberId)) {
return;
}
potentialCustomerMapper.mergeMember(mergeMemberId, memberId);
}
} }
...@@ -69,22 +69,21 @@ public class InteractRecordMessageService { ...@@ -69,22 +69,21 @@ public class InteractRecordMessageService {
} }
} }
if (null == interactRecordBO.getExtendInfo()) {
interactRecordBO.setExtendInfo(InteractRecordExtendInfoBO.empty());
}
// 组装扩展信息 // 组装扩展信息
if (MaterialInteractRecordEventType.VISIT_PRODUCT.getCode().equals(interactRecordMessageBO.getEventType())) { if (MaterialInteractRecordEventType.VISIT_PRODUCT.getCode().equals(interactRecordMessageBO.getEventType())) {
// 浏览商品 // 浏览商品
if (CollectionUtils.isNotEmpty(interactRecordMessageBO.getGoodsIds())) { if (StringUtils.isNotBlank(interactRecordMessageBO.getGoodsId())) {
if (interactRecordBO.getExtendInfo() == null){ interactRecordBO.getExtendInfo().getGoodsIds().add(interactRecordMessageBO.getGoodsId());
interactRecordBO.setExtendInfo(InteractRecordExtendInfoBO.empty());
}
interactRecordBO.getExtendInfo().getGoodsIds().addAll(interactRecordMessageBO.getGoodsIds());
} }
} }
if (MaterialInteractRecordEventType.ORDER.getCode().equals(interactRecordMessageBO.getEventType())) { if (MaterialInteractRecordEventType.ORDER.getCode().equals(interactRecordMessageBO.getEventType())) {
// 下单 // 下单
// 查询订单信息 // 查询订单信息
String orderId = interactRecordMessageBO.getOrderId(); String orderNumber = interactRecordMessageBO.getOrderNumber();
} }
interactRecordService.saveOrUpdateInteractRecord(interactRecordBO); interactRecordService.saveOrUpdateInteractRecord(interactRecordBO);
......
...@@ -8,10 +8,13 @@ import com.gic.haoban.manage.api.enums.content.InteractRecordExtendInfoDTO; ...@@ -8,10 +8,13 @@ import com.gic.haoban.manage.api.enums.content.InteractRecordExtendInfoDTO;
import com.gic.haoban.manage.api.enums.content.InteractRecordInfoDTO; import com.gic.haoban.manage.api.enums.content.InteractRecordInfoDTO;
import com.gic.haoban.manage.api.service.content.InteractRecordApiService; import com.gic.haoban.manage.api.service.content.InteractRecordApiService;
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.MemberAttrChangeBO;
import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO; import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
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 lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -32,6 +35,8 @@ public class InteractRecordApiServiceImpl implements InteractRecordApiService { ...@@ -32,6 +35,8 @@ public class InteractRecordApiServiceImpl implements InteractRecordApiService {
@Autowired @Autowired
private InteractRecordService interactRecordService; private InteractRecordService interactRecordService;
@Autowired
PotentialCustomerService potentialCustomerService;
/** /**
* 查询互动记录 * 查询互动记录
...@@ -72,4 +77,37 @@ public class InteractRecordApiServiceImpl implements InteractRecordApiService { ...@@ -72,4 +77,37 @@ public class InteractRecordApiServiceImpl implements InteractRecordApiService {
result.setResult(recordInfos); result.setResult(recordInfos);
return ServiceResponse.success(result); return ServiceResponse.success(result);
} }
/**
* 处理member信息变化的MQ
*
* @param params
* @return
*/
@Override
public ServiceResponse<Void> memberChangeMQ(String params) {
if (StringUtils.isBlank(params)) {
log.info("会员id发生变化 {}", params);
return ServiceResponse.success();
}
MemberAttrChangeBO memberAttrChangeBO = JSON.parseObject(params, MemberAttrChangeBO.class);
if (memberAttrChangeBO == null) {
return ServiceResponse.success();
}
if (MemberAttrChangeBO.MemberChangeOpt.MINI_APP_AUTHORIZED.getCode().equals(memberAttrChangeBO.getOpt())) {
// 会员授权事件
// 根据unionId 刷新 memberId 并写入销售线索
interactRecordService.memberAuthorized(memberAttrChangeBO.getMemberId(), memberAttrChangeBO.getUnionId());
}
if (MemberAttrChangeBO.MemberChangeOpt.MEMBER_MERGE.getCode().equals(memberAttrChangeBO.getOpt())) {
//会员合并
// 把合并的memberId 修改成 合并后的memberId
interactRecordService.mergeMember(memberAttrChangeBO.getMergeMemberId(), memberAttrChangeBO.getMemberId());
potentialCustomerService.mergeMember(memberAttrChangeBO.getMergeMemberId(), memberAttrChangeBO.getMemberId());
}
return ServiceResponse.success();
}
} }
...@@ -40,7 +40,7 @@ public class MaterialShareLogApiServiceImpl implements MaterialShareLogApiServic ...@@ -40,7 +40,7 @@ public class MaterialShareLogApiServiceImpl implements MaterialShareLogApiServic
ClerkShareLogBO clerkShareLogBO = new ClerkShareLogBO(); ClerkShareLogBO clerkShareLogBO = new ClerkShareLogBO();
BeanUtils.copyProperties(clerkShareMaterialLogDTO, clerkShareLogBO); BeanUtils.copyProperties(clerkShareMaterialLogDTO, clerkShareLogBO);
Long logId = clerkShareLogService.saveClerkShareLog(clerkShareLogBO); Long logId = clerkShareLogService.saveClerkShareLog(clerkShareLogBO);
if (logId != null){ if (logId != null && ClerkShareMaterialType.SHARE_PYQ.getCode().equals(clerkShareLogBO.getShareType())){
// MQ 通知处理导购分享日志 // MQ 通知处理导购分享日志
TriggerCustomerDetailLogDTO triggerCustomerDetailLog = new TriggerCustomerDetailLogDTO(); TriggerCustomerDetailLogDTO triggerCustomerDetailLog = new TriggerCustomerDetailLogDTO();
triggerCustomerDetailLog.setEnterpriseId(clerkShareLogBO.getEnterpriseId()); triggerCustomerDetailLog.setEnterpriseId(clerkShareLogBO.getEnterpriseId());
......
...@@ -53,6 +53,7 @@ public class QywxGroupMsgTaskApiServiceImpl implements QywxGroupMsgTaskApiServic ...@@ -53,6 +53,7 @@ public class QywxGroupMsgTaskApiServiceImpl implements QywxGroupMsgTaskApiServic
@Override @Override
public ServiceResponse<Void> groupMsgTaskJob(String params) { public ServiceResponse<Void> groupMsgTaskJob(String params) {
log.info("执行群发定时任务 {}", DateUtil.datetimeToString(new Date()));
// 获取开启【内容】权限的企业id // 获取开启【内容】权限的企业id
List<String> enterpriseIds = groupMessageService.hasMaterialRightEnterprise(); List<String> enterpriseIds = groupMessageService.hasMaterialRightEnterprise();
// 获取企业 (当前时间 - 30分钟, 当前时间)范围内的 导购分享记录。按创建时间排序 // 获取企业 (当前时间 - 30分钟, 当前时间)范围内的 导购分享记录。按创建时间排序
......
...@@ -214,5 +214,6 @@ ...@@ -214,5 +214,6 @@
ref="interactRecordApiService" timeout="10000" /> ref="interactRecordApiService" timeout="10000" />
<dubbo:reference interface="com.gic.store.goods.service.GoodsInfoOutApiService" id="goodsInfoOutApiService" timeout="10000" retries="0" check="false"/> <dubbo:reference interface="com.gic.store.goods.service.GoodsInfoOutApiService" id="goodsInfoOutApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference interface="com.gic.store.goods.service.GoodsCenterApiService" id="goodsCenterApiService" timeout="10000" retries="0" check="false"/>
</beans> </beans>
\ No newline at end of file
...@@ -261,7 +261,10 @@ ...@@ -261,7 +261,10 @@
select <include refid="baseSql"/> select <include refid="baseSql"/>
from tab_haoban_interact_record from tab_haoban_interact_record
<where> <where>
clerk_id = #{clerkId} and delete_flag = 0 delete_flag = 0
<if test="clerkId != null and clerkId != ''">
and clerk_id = #{clerkId}
</if>
<if test="memberId != null and memberId != ''"> <if test="memberId != null and memberId != ''">
and member_id = #{memberId} and member_id = #{memberId}
</if> </if>
...@@ -271,6 +274,9 @@ ...@@ -271,6 +274,9 @@
<if test="endTime != null"> <if test="endTime != null">
and create_time <![CDATA[ <= ]]> #{endTime} and create_time <![CDATA[ <= ]]> #{endTime}
</if> </if>
<if test="unionId != null and unionId != '' ">
and union_id = #{unionId}
</if>
</where> </where>
order by id desc order by id desc
</select> </select>
...@@ -295,5 +301,17 @@ ...@@ -295,5 +301,17 @@
order by null order by null
</select> </select>
<update id="mergeMember">
update tab_haoban_interact_record
set member_id = #{memberId}
where member_id = #{mergeMemberId} and delete_flag = 0
</update>
<update id="memberAuthorized">
update tab_haoban_interact_record
set member_id = #{memberId}
where union_id = #{unionId} and delete_flag = 0
</update>
</mapper> </mapper>
...@@ -276,5 +276,11 @@ ...@@ -276,5 +276,11 @@
where clerk_id = #{clerkId} and delete_flag = 0 and member_id = #{memberId} where clerk_id = #{clerkId} and delete_flag = 0 and member_id = #{memberId}
</select> </select>
<update id="mergeMember">
update tab_haoban_potential_customer
set member_id = #{memberId}
where member_id = #{memberId} and delete_flag = 0
</update>
</mapper> </mapper>
import cn.hutool.crypto.digest.MD5; import cn.hutool.crypto.digest.MD5;
import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.chat.ChatOwnerTotalDTO; import com.gic.haoban.manage.api.dto.chat.ChatOwnerTotalDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO; import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatPlanSearchQDTO;
import com.gic.haoban.manage.api.dto.qdto.content.InteractRecordQDTO;
import com.gic.haoban.manage.api.enums.content.InteractRecordInfoDTO;
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.TriggerCustomerChannelType; import com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType;
import com.gic.haoban.manage.api.service.content.InteractRecordApiService;
import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatPlanOwnerLogMapper; import com.gic.haoban.manage.service.dao.mapper.chat.GroupChatPlanOwnerLogMapper;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
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.pojo.qo.content.InteractRecordQO; import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
import com.gic.haoban.manage.service.service.content.InteractRecordService; import com.gic.haoban.manage.service.service.content.InteractRecordService;
...@@ -33,6 +40,8 @@ public class InteractRecordTest { ...@@ -33,6 +40,8 @@ public class InteractRecordTest {
private InteractRecordService interactRecordService; private InteractRecordService interactRecordService;
@Autowired @Autowired
private InteractRecordMessageService interactRecordMessageService; private InteractRecordMessageService interactRecordMessageService;
@Autowired
InteractRecordApiService interactRecordApiService;
String eid = "ff8080815dacd3a2015dacd3ef5c0000"; String eid = "ff8080815dacd3a2015dacd3ef5c0000";
...@@ -43,9 +52,12 @@ public class InteractRecordTest { ...@@ -43,9 +52,12 @@ public class InteractRecordTest {
@Test @Test
public void queryInteractPageTest(){ public void queryInteractPageTest(){
InteractRecordQO interactRecordQO = new InteractRecordQO(); InteractRecordQDTO interactRecordQO = new InteractRecordQDTO();
interactRecordQO.setClerkId(staffId); interactRecordQO.setClerkId(clerkId);
interactRecordService.queryInteractRecordPage(interactRecordQO); interactRecordQO.setMemberId(memberId);
ServiceResponse<Page<InteractRecordInfoDTO>> serviceResponse =
interactRecordApiService.queryInteractRecordList(interactRecordQO);
System.out.println(JSON.toJSONString(serviceResponse));
} }
@Test @Test
...@@ -60,7 +72,7 @@ public class InteractRecordTest { ...@@ -60,7 +72,7 @@ public class InteractRecordTest {
message.setMaterialId("1232139123912"); message.setMaterialId("1232139123912");
message.setChannelSource(TriggerCustomerChannelType.PYQ.getCode()); message.setChannelSource(TriggerCustomerChannelType.PYQ.getCode());
message.setEventType(MaterialInteractRecordEventType.VISIT_PRODUCT.getCode()); message.setEventType(MaterialInteractRecordEventType.VISIT_PRODUCT.getCode());
message.setGoodsIds(Collections.singletonList("fbc508e395f846ef9005852c420e1c23")); message.setGoodsId("fbc508e395f846ef9005852c420e1c23");
message.setDurationTime(2000); message.setDurationTime(2000);
message.setBusinessUUId(businessId); message.setBusinessUUId(businessId);
message.setLastAccessTime(new Date().getTime()); message.setLastAccessTime(new Date().getTime());
......
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.UniqueIdUtils; import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum;
import com.gic.haoban.manage.api.enums.content.MaterialReportType; import com.gic.haoban.manage.api.enums.content.MaterialReportType;
import com.gic.haoban.manage.api.service.content.task.QywxGroupMsgTaskApiService; import com.gic.haoban.manage.api.service.content.task.QywxGroupMsgTaskApiService;
import com.gic.haoban.manage.api.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanInteractRecordMapper; import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanInteractRecordMapper;
import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord; import com.gic.haoban.manage.service.entity.content.TabHaobanInteractRecord;
import com.gic.haoban.manage.service.service.content.MaterialReportService; import com.gic.haoban.manage.service.service.content.MaterialReportService;
...@@ -22,8 +25,8 @@ import java.util.List; ...@@ -22,8 +25,8 @@ import java.util.List;
* @Version * @Version
**/ **/
@RunWith(SpringJUnit4ClassRunner.class) //@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext-conf.xml"}) //@ContextConfiguration(locations = {"classpath:applicationContext-conf.xml"})
public class MaterialReportServiceTest { public class MaterialReportServiceTest {
public MaterialReportServiceTest(){ public MaterialReportServiceTest(){
...@@ -50,6 +53,7 @@ public class MaterialReportServiceTest { ...@@ -50,6 +53,7 @@ public class MaterialReportServiceTest {
@Test @Test
public void weekReport(){ public void weekReport(){
qywxGroupMsgTaskApiService.handlerMaterialMonthReport(""); qywxGroupMsgTaskApiService.handlerMaterialMonthReport("");
qywxGroupMsgTaskApiService.handlerMaterialWeekReport("");
} }
@Test @Test
...@@ -75,4 +79,17 @@ public class MaterialReportServiceTest { ...@@ -75,4 +79,17 @@ public class MaterialReportServiceTest {
List<TabHaobanInteractRecord> tabHaobanInteractRecords = interactRecordMapper.queryAllByLimit(temp); List<TabHaobanInteractRecord> tabHaobanInteractRecords = interactRecordMapper.queryAllByLimit(temp);
System.out.println(JSON.toJSONString(tabHaobanInteractRecords)); System.out.println(JSON.toJSONString(tabHaobanInteractRecords));
} }
@Test
public void urlTest(){
JSONObject params = new JSONObject();
//params.put("clerkId", "300b60c7f8874ca2b9cc696ad6b6a480");
params.put("s", "ff8080816e216c04016e34294282004a");
params.put("t", 1);
String s = params.toJSONString();
String s1 = NoticeMessageUtil.buildMiniAppUrl(NoticeMessageTypeEnum.MATERIAL_REPORT_NOTIFY, s);
System.out.println("/pages/route/index?pageType=hbapp_material_report&data=".length());
System.out.println(s1);
System.out.println(s1.length());
}
} }
...@@ -1614,6 +1614,7 @@ public class WxStaffController extends WebBaseController { ...@@ -1614,6 +1614,7 @@ public class WxStaffController extends WebBaseController {
StoreListVO vo = new StoreListVO(); StoreListVO vo = new StoreListVO();
vo.setStoreId(store.getStoreId()); vo.setStoreId(store.getStoreId());
vo.setStoreName(store.getStoreName()); vo.setStoreName(store.getStoreName());
vo.setStoreCode(store.getStoreCode());
voList.add(vo) ; voList.add(vo) ;
} }
} }
......
package com.gic.haoban.manage.web.controller.content; package com.gic.haoban.manage.web.controller.content;
import cn.hutool.core.text.StrSpliter;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.webapi.reponse.RestResponse; import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.content.api.dto.material.ContentMaterialBaseDTO; import com.gic.content.api.dto.material.ContentMaterialBaseDTO;
import com.gic.haoban.manage.api.dto.qdto.content.InteractRecordQDTO; import com.gic.haoban.manage.api.dto.qdto.content.InteractRecordQDTO;
import com.gic.haoban.manage.api.enums.content.InteractRecordExtendInfoDTO;
import com.gic.haoban.manage.api.enums.content.InteractRecordInfoDTO; import com.gic.haoban.manage.api.enums.content.InteractRecordInfoDTO;
import com.gic.haoban.manage.api.service.content.InteractRecordApiService; import com.gic.haoban.manage.api.service.content.InteractRecordApiService;
import com.gic.haoban.manage.web.controller.content.adaptor.ContentMaterialAdaptor; import com.gic.haoban.manage.web.controller.content.adaptor.ContentMaterialAdaptor;
import com.gic.haoban.manage.web.qo.content.InteractRecordQO; import com.gic.haoban.manage.web.qo.content.InteractRecordQO;
import com.gic.haoban.manage.web.vo.content.ContentMaterialInfoVO; import com.gic.haoban.manage.web.vo.content.ContentMaterialInfoVO;
import com.gic.haoban.manage.web.vo.content.InteractRecordExtendInfoVO;
import com.gic.haoban.manage.web.vo.content.InteractRecordVO; import com.gic.haoban.manage.web.vo.content.InteractRecordVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -64,11 +69,21 @@ public class InteractRecordController { ...@@ -64,11 +69,21 @@ public class InteractRecordController {
.stream() .stream()
.map(item -> { .map(item -> {
InteractRecordVO interactRecordVO = new InteractRecordVO(); InteractRecordVO interactRecordVO = new InteractRecordVO();
BeanUtils.copyProperties(interactRecordVO, interactRecordVO); BeanUtils.copyProperties(item, interactRecordVO);
ContentMaterialBaseDTO materialBaseInfo = materialBaseMap.get(Long.parseLong(item.getBizId())); ContentMaterialBaseDTO materialBaseInfo = materialBaseMap.get(Long.parseLong(item.getBizId()));
if (materialBaseInfo != null) { if (materialBaseInfo != null) {
ContentMaterialInfoVO temp = new ContentMaterialInfoVO(); ContentMaterialInfoVO temp = new ContentMaterialInfoVO();
BeanUtils.copyProperties(materialBaseInfo, item); BeanUtils.copyProperties(materialBaseInfo, temp);
if (StringUtils.isNotBlank(materialBaseInfo.getMaterialThumbnailImageUrls())) {
temp.setMaterialThumbnailImageUrls(StrSpliter.split(materialBaseInfo.getMaterialThumbnailImageUrls(), ",", true, true));
}
if (StringUtils.isNotBlank(materialBaseInfo.getMaterialImageUrls())) {
temp.setMaterialImageUrls(StrSpliter.split(materialBaseInfo.getMaterialImageUrls(), ",", true, true));
}
if (null != item.getExtendInfo()) {
InteractRecordExtendInfoVO extendInfoVO = EntityUtil.changeEntityByJSON(InteractRecordExtendInfoVO.class, item.getExtendInfo());
interactRecordVO.setExtendInfo(extendInfoVO);
}
interactRecordVO.setContentMaterialInfoVO(temp); interactRecordVO.setContentMaterialInfoVO(temp);
} }
return interactRecordVO; return interactRecordVO;
......
...@@ -19,40 +19,19 @@ public class InteractRecordExtendInfoVO implements Serializable { ...@@ -19,40 +19,19 @@ public class InteractRecordExtendInfoVO implements Serializable {
private static final long serialVersionUID = 799914036029100258L; private static final long serialVersionUID = 799914036029100258L;
/** /**
* 订单编号 * 素材关联的商品信息商品信息
*/ */
private String orderNumber; private List<ExtendGoodsInfo> extendGoodsInfos;
/**
* 订单创建时间
*/
private Date orderCreateTime;
/**
* 订单商品项总数
*/
private Integer orderTotalNum;
/**
* 订单应付
*/
private BigDecimal orderPay;
/** /**
* 订单实付 * 素材关联的订单信息
*/ */
private BigDecimal realPay; private List<ExtendOrderInfo> extendOrderInfos;
/** /**
* 失效商品数量 * 失效商品数量
*/ */
private Integer invalidGoodsNum; private Integer invalidGoodsNum;
/**
* 素材扩展商品信息
*/
private List<ExtendGoodsInfo> extendGoodsInfos;
@Data @Data
public static class ExtendGoodsInfo { public static class ExtendGoodsInfo {
...@@ -84,5 +63,45 @@ public class InteractRecordExtendInfoVO implements Serializable { ...@@ -84,5 +63,45 @@ public class InteractRecordExtendInfoVO implements Serializable {
* 商品单价 * 商品单价
*/ */
private BigDecimal salePrice; private BigDecimal salePrice;
/***
* 1 erp同步
* 2 自建
* @see com.gic.store.goods.enums.GoodsSourceTypeEnum
*/
private Integer sourceType;
}
@Data
public static class ExtendOrderInfo {
/**
* 订单编号
*/
private String orderNumber;
/**
* 订单创建时间
*/
private Date orderCreateTime;
/**
* 订单商品项总数
*/
private Integer orderTotalNum;
/**
* 订单应付
*/
private BigDecimal orderPay;
/**
* 订单实付
*/
private BigDecimal realPay;
/**
* 订单项商品信息
*/
private List<ExtendGoodsInfo> orderGoodsInfos;
} }
} }
...@@ -43,6 +43,11 @@ public class InteractRecordVO implements Serializable { ...@@ -43,6 +43,11 @@ public class InteractRecordVO implements Serializable {
private Date createTime; private Date createTime;
/** /**
* 1 "朋友圈"; 2 "客户群";3 "对话框";4 "复制文案"; 5"下载素材"
*/
private Integer channelSource;
/**
* 记录事件类型 * 记录事件类型
* 1浏览素材;2 查看商品; 3 购买商品 * 1浏览素材;2 查看商品; 3 购买商品
* 通过此类型区分 弹窗提示 * 通过此类型区分 弹窗提示
...@@ -50,6 +55,16 @@ public class InteractRecordVO implements Serializable { ...@@ -50,6 +55,16 @@ public class InteractRecordVO implements Serializable {
private Integer eventType; private Integer eventType;
/** /**
* 浏览的商品数量
*/
private Integer visitGoodsNum;
/**
* 下单的商品数量
*/
private Integer orderGoodsNum;
/**
* 素材信息 * 素材信息
* null 代表素材被删除 * null 代表素材被删除
*/ */
......
...@@ -3,6 +3,7 @@ package com.gic.haoban.manage.web.vo.content; ...@@ -3,6 +3,7 @@ package com.gic.haoban.manage.web.vo.content;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
/** /**
* @Author MUSI * @Author MUSI
...@@ -51,7 +52,7 @@ public class SimpleGoodsInfoVO implements Serializable { ...@@ -51,7 +52,7 @@ public class SimpleGoodsInfoVO implements Serializable {
/** /**
* 商品价格 * 商品价格
*/ */
private String salePrice; private BigDecimal salePrice;
/** /**
* 商品状态 * 商品状态
......
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