Commit b16b40e2 by 王祖波

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

parents 326bfc69 7629eb63
......@@ -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"),
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");
......
......@@ -14,30 +14,11 @@ import java.util.List;
public class InteractRecordExtendInfoDTO implements Serializable {
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 {
*/
private List<ExtendGoodsInfo> extendGoodsInfos;
public static class ExtendGoodsInfo {
public static class ExtendGoodsInfo 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() {
return orderPay;
}
public String getOrderNumber() {
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) {
this.orderPay = orderPay;
public void setOrderTotalNum(Integer orderTotalNum) {
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() {
return realPay;
public List<ExtendOrderInfo> getExtendOrderInfos() {
return extendOrderInfos;
}
public void setRealPay(BigDecimal realPay) {
this.realPay = realPay;
public void setExtendOrderInfos(List<ExtendOrderInfo> extendOrderInfos) {
this.extendOrderInfos = extendOrderInfos;
}
public Integer getInvalidGoodsNum() {
......
......@@ -40,6 +40,11 @@ public class InteractRecordInfoDTO implements Serializable {
private Date createTime;
/**
* 线索来源 1朋友圈; 2客户群; 3 对话框; 0其他
*/
private Integer channelSource;
/**
* 记录事件类型
* 1浏览素材;2 查看商品; 3 购买商品
* 通过此类型区分 弹窗提示
......@@ -52,6 +57,16 @@ public class InteractRecordInfoDTO implements Serializable {
private String bizId;
/**
* 浏览的商品数量
*/
private Integer visitGoodsNum;
/**
* 下单的商品数量
*/
private Integer orderGoodsNum;
/**
* 扩展信息
*/
private InteractRecordExtendInfoDTO extendInfo;
......@@ -119,4 +134,28 @@ public class InteractRecordInfoDTO implements Serializable {
public void setExtendInfo(InteractRecordExtendInfoDTO 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 {
* @return
*/
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;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -141,4 +144,26 @@ public class NoticeMessageUtil {
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 {
*/
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 {
*/
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;
import com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType;
import java.util.Date;
import java.io.Serializable;
......@@ -44,11 +46,13 @@ public class TabHaobanInteractRecord implements Serializable {
*/
private String storeId;
/**
* 线索来源 1朋友圈; 2客户群; 3 对话框; 0其他
* 线索来源 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材
* @see TriggerCustomerChannelType
*/
private Integer channelSource;
/**
* 事件类型 1浏览商品;2浏览并点击; 3浏览并查看; 4 浏览并购买; 5查看并购买
* 事件类型 1浏览素材;2浏览商品; 3 购买商品
* @see com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType
*/
private Integer eventType;
/**
......
package com.gic.haoban.manage.service.pojo.bo.content;
import com.gic.haoban.manage.api.enums.content.InteractRecordExtendInfoDTO;
import lombok.Data;
import java.util.Date;
......@@ -84,4 +83,15 @@ public class InteractRecordBO {
* 扩展信息
*/
private InteractRecordExtendInfoBO extendInfo;
/**
* 浏览的商品数量
*/
private Integer visitGoodsNum;
/**
* 下单的商品数量
*/
private Integer orderGoodsNum;
}
......@@ -18,34 +18,9 @@ import java.util.List;
public class InteractRecordExtendInfoBO implements Serializable {
/**
* 浏览的商品id
* 素材关联的订单信息
*/
private List<String> goodsIds;
/**
* 订单编号
*/
private String orderNumber;
/**
* 订单创建时间
*/
private Date orderCreateTime;
/**
* 订单商品项总数
*/
private Integer orderTotalNum;
/**
* 订单应付
*/
private BigDecimal orderPay;
/**
* 订单实付
*/
private BigDecimal realPay;
private List<ExtendOrderInfo> extendOrderInfos;
/**
* 失效商品数量
......@@ -57,8 +32,13 @@ public class InteractRecordExtendInfoBO implements Serializable {
*/
private List<ExtendGoodsInfo> extendGoodsInfos;
/**
* 冗余的商品id
*/
private List<String> goodsIds;
@Data
public static class ExtendGoodsInfo {
public static class ExtendGoodsInfo implements Serializable {
/**
* 商品名称
......@@ -88,6 +68,49 @@ public class InteractRecordExtendInfoBO implements Serializable {
* 商品单价
*/
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() {
......
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;
import com.gic.haoban.manage.service.pojo.bo.NoticeMessageBO;
import lombok.Builder;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -16,7 +17,7 @@ import java.util.Collections;
import java.util.List;
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
......@@ -24,7 +25,7 @@ import static com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum.MATERIAL_WEE
* @Description
* @Version 好办 周报/月报 上下文
**/
@Slf4j
@Data
@Builder
public class MaterialReportContext {
......@@ -98,26 +99,27 @@ public class MaterialReportContext {
*/
public List<NoticeMessageBO> buildNotifyMessageBos() {
if (CollectionUtils.isEmpty(this.staffClerkRelations)) {
log.info("成员未绑定导购, staffId: {}", this.staffId);
return Collections.emptyList();
}
if (StringUtils.isBlank(this.mainStoreId)) {
log.info("成员 {} 没有主门店数据, 区经角色不发送小程序消息通知 ", this.staffId);
return Collections.emptyList();
}
return this.staffClerkRelations
.stream()
.map(item -> {
NoticeMessageBO noticeMessageBO = new NoticeMessageBO();
noticeMessageBO.setCategoryType(MATERIAL_WEEK_REPORT.getCategory());
noticeMessageBO.setMessageType(MATERIAL_WEEK_REPORT.getType());
noticeMessageBO.setCategoryType(MATERIAL_REPORT_NOTIFY.getCategory());
noticeMessageBO.setMessageType(MATERIAL_REPORT_NOTIFY.getType());
noticeMessageBO.setClerkId(StringUtils.isNotBlank(item.getClerkId()) ? item.getClerkId() : "-1");
noticeMessageBO.setStoreId(StringUtils.isNotBlank(item.getStoreId()) ? item.getStoreId() : "-1");
noticeMessageBO.setTitle(this.getMessageTitle());
noticeMessageBO.setTemplateCode(MATERIAL_WEEK_REPORT.getTemplateCode());
noticeMessageBO.setTemplateCode(MATERIAL_REPORT_NOTIFY.getTemplateCode());
noticeMessageBO.setDescription(this.getMessageDesc());
noticeMessageBO.setEnterpriseId(this.enterpriseId);
noticeMessageBO.setRelationId(this.clerkId);
noticeMessageBO.setMessageContent(this.extendParams());
noticeMessageBO.setMessageContent(this.extendParams(item.getStoreId()));
return noticeMessageBO;
})
.collect(Collectors.toList());
......@@ -149,10 +151,12 @@ public class MaterialReportContext {
return String.format(month_desc, monthBeginStr, monthEndStr);
}
public String extendParams() {
public String extendParams(String storeId) {
JSONObject params = new JSONObject();
params.put("clerkId", this.clerkId);
params.put("storeId", this.mainStoreId);
// params.put("clerkId", this.clerkId);
// 此处页面链接 最长128个字节
params.put("s", storeId);
params.put("t", this.reportType);
return params.toJSONString();
}
......
......@@ -16,7 +16,6 @@ import java.util.Map;
import java.util.Optional;
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;
/**
......
......@@ -54,13 +54,13 @@ public class InteractRecordMessageBO implements Serializable {
*/
private Integer durationTime;
/**
* 购买商品时的 订单id
* 购买商品时的 订单编号
*/
private String orderId;
private String orderNumber;
/**
* 查看商品时查看的商品id
*/
private List<String> goodsIds;
private String goodsId;
/**
* 业务唯一标识
*/
......
......@@ -51,4 +51,18 @@ public interface InteractRecordService {
*/
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 {
* @param 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;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType;
import com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType;
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.store.goods.dto.goods.GoodsInfoSimpleDTO;
import com.gic.store.goods.dto.qdto.ErpGoodsInfoQDTO;
import com.gic.haoban.manage.service.pojo.bo.content.PotentialCustomerBO;
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.service.GoodsInfoOutApiService;
import com.gic.store.goods.service.GoodsCenterApiService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -31,9 +38,10 @@ import java.util.stream.Collectors;
@Slf4j
@Component
public class InteractRecordBuilder {
@Autowired
private GoodsInfoOutApiService goodsInfoOutApiService;
private GoodsCenterApiService goodsCenterApiService;
@Autowired
private MemberService memberService;
/**
* 互动记录描述
......@@ -47,6 +55,7 @@ public class InteractRecordBuilder {
/**
* 基于渠道和事件类型拼接信息
*
* @param channelSource
* @param eventType
* @return
......@@ -56,7 +65,7 @@ public class InteractRecordBuilder {
if (TriggerCustomerChannelType.showDescChannel().contains(channelSource)) {
TriggerCustomerChannelType channelType = TriggerCustomerChannelType.getInstance(channelSource);
if (channelType != null) {
stringBuilder.append(String.format("通过[%s]", channelType.getDesc()));
stringBuilder.append(String.format("通过%s", channelType.getDesc()));
}
}
MaterialInteractRecordEventType instance = MaterialInteractRecordEventType.getInstance(eventType);
......@@ -93,10 +102,12 @@ public class InteractRecordBuilder {
// 浏览商品事件
List<String> visitGoodsIds = extendInfo.getGoodsIds();
if (CollectionUtils.isEmpty(visitGoodsIds)) {
log.info("组装浏览商品信息, 商品信息不存在 {}", interactRecord.getExtendInfo());
return null;
}
// 拼接商品信息
List<InteractRecordExtendInfoBO.ExtendGoodsInfo> extendGoodsInfos = this.convertGoodsInfo(visitGoodsIds, interactRecord.getEnterpriseId());
List<InteractRecordExtendInfoBO.ExtendGoodsInfo> extendGoodsInfos =
this.convertGoodsInfo(visitGoodsIds, interactRecord.getEnterpriseId());
extendInfo.setExtendGoodsInfos(extendGoodsInfos);
extendInfo.setInvalidGoodsNum(visitGoodsIds.size() - extendGoodsInfos.size());
return extendInfo;
......@@ -105,26 +116,89 @@ public class InteractRecordBuilder {
}
private List<InteractRecordExtendInfoBO.ExtendGoodsInfo> convertGoodsInfo(List<String> visitGoodsIds, String enterpriseId) {
ErpGoodsInfoQDTO search = new ErpGoodsInfoQDTO();
search.setEnterpriseId(enterpriseId);
search.setGoodsIds(visitGoodsIds);
search.setExcludeStatus(Arrays.asList(GoodsStatusEnum.DELETED.getCode(), GoodsStatusEnum.BACK.getCode()));
ServiceResponse<List<GoodsInfoSimpleDTO>> serviceResponse =
goodsInfoOutApiService.queryErpGoodsInfoWithIds(search);
if (CollectionUtils.isEmpty(visitGoodsIds)) {
return Collections.emptyList();
}
GoodsListQDTO goodsListQDTO = new GoodsListQDTO();
goodsListQDTO.setEnterpriseId(enterpriseId);
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()) {
log.info("查询商品异常 {}", JSON.toJSONString(serviceResponse));
return Collections.emptyList();
}
if (CollectionUtils.isEmpty(serviceResponse.getResult().getResult())) {
log.info("查询商品为空 {}", JSON.toJSONString(serviceResponse));
return Collections.emptyList();
}
return serviceResponse.getResult()
.getResult()
.stream()
.map(item -> {
InteractRecordExtendInfoBO.ExtendGoodsInfo extendGoodsInfo = new InteractRecordExtendInfoBO.ExtendGoodsInfo();
extendGoodsInfo.setGoodsName(item.getGoodsName());
extendGoodsInfo.setGoodsCode(item.getGoodsCode());
extendGoodsInfo.setGoodsImageUrl(item.getGoodsImageUrl());
extendGoodsInfo.setGoodsImageUrl(item.getImageUrl());
extendGoodsInfo.setSalePrice(item.getSalePrice());
extendGoodsInfo.setSourceType(item.getSourceType());
return extendGoodsInfo;
})
.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;
import com.alibaba.fastjson.JSON;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
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.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated;
import com.gic.haoban.manage.service.pojo.bo.content.context.MaterialReportContext;
......@@ -74,12 +76,19 @@ public class MaterialReportBuilder {
*/
public void fillMainStore(MaterialReportContext context) {
if (CollectionUtils.isEmpty(context.getStaffClerkRelations())) {
log.info("不存在成员与导购的关联关系 staffId: {}", context.getStaffId());
return;
}
StaffClerkRelationDTO staffClerkRelationDTO = context.getStaffClerkRelations().get(0);
String wxEnterpriseId = staffClerkRelationDTO.getWxEnterpriseId();
context.setClerkId(staffClerkRelationDTO.getClerkId());
TabHaobanClerkMainStoreRelated mainStoreInfo = clerkMainStoreRelatedService.getMainStoreByStaffId(context.getStaffId(), wxEnterpriseId);
if (context.getStaffClerkRelations().size() == 1) {
StaffClerkRelationDTO staffClerkRelationDTO = context.getStaffClerkRelations().get(0);
if (staffClerkRelationDTO.getClerkType() != null && staffClerkRelationDTO.getClerkType() == 2) {
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) {
context.setMainStoreId(mainStoreInfo.getStoreId());
Optional<StaffClerkRelationDTO> mainClerkInfo = context.getStaffClerkRelations()
......@@ -90,6 +99,7 @@ public class MaterialReportBuilder {
log.info("成员{}与主门店{}不存在导购关联关系", context.getStaffId(), context.getMainStoreId());
return;
}
// 成员在主门店时的clerkId
context.setClerkId(mainClerkInfo.get().getClerkId());
}
}
......@@ -100,6 +110,13 @@ public class MaterialReportBuilder {
*/
public void buildMaterialReportData(MaterialReportContext context) {
// 获取该导购 在门店 的周报/月报数据
String clerkId = context.getClerkId();
if (StringUtils.isBlank(context.getMainStoreId())) {
// 区经
}else {
String mainStoreId = context.getMainStoreId();
}
String templatePath = "";
if (MaterialReportType.WEEK.getCode().equals(context.getReportType())) {
context.setUseMaterialNum(103);
......@@ -110,7 +127,6 @@ public class MaterialReportBuilder {
context.setConvertAmount("12.3万");
templatePath = month_template_report;
}
// 生成图片地址
String url = DrawImageUtils.drawImage(context.getFactoryCode(), context.getUseMaterialNum() + "", context.getConvertAmount(), templatePath);
context.setMaterialReportUrl(url);
......@@ -137,8 +153,7 @@ public class MaterialReportBuilder {
articleInfo.setAppid(config.getAppid());
articleInfo.setTitle(context.getMessageTitle());
articleInfo.setDescription(context.getMessageDesc());
// pagePath 拼接参数?
articleInfo.setPagepath("/monthList");
articleInfo.setPagepath(NoticeMessageUtil.buildMiniAppUrl(NoticeMessageTypeEnum.MATERIAL_REPORT_NOTIFY, context.extendParams(context.getMainStoreId())));
articleInfo.setPicurl(context.getMaterialReportUrl());
newsSendMessage.setArticleMessages(Collections.singletonList(articleInfo));
return newsSendMessage;
......
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.StaffDTO;
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.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated;
import com.gic.haoban.manage.service.pojo.bo.NoticeMessageBO;
......@@ -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.notify.NoticeMessageService;
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.service.qywx.QywxSuiteApiService;
import lombok.extern.slf4j.Slf4j;
......@@ -195,7 +194,7 @@ public class PotentialCustomerNotifyBuilder {
list.add(wxUserId);
messageDTO.setAppid(config.getAppid());
messageDTO.setUserIds(list);
messageDTO.setPage("/pageurl?");
messageDTO.setPage(NoticeMessageUtil.buildMiniAppUrl(NoticeMessageTypeEnum.MATERIAL_REPORT_NOTIFY, ""));
messageDTO.setTitle("销售线索通知");
messageDTO.setItems(Collections.singletonList(itemDTO));
return messageDTO;
......
......@@ -136,6 +136,7 @@ public class GroupMessageServiceImpl implements GroupMessageService {
.collect(Collectors.toList());
List<TabHaobanStaff> tabHaobanStaffs = staffService.listStaffWithIds(staffIds);
if (CollectionUtils.isEmpty(tabHaobanStaffs)) {
log.info("成员不存在 staffIds:{}", JSON.toJSONString(staffIds));
return Collections.emptyMap();
}
return tabHaobanStaffs
......@@ -181,6 +182,8 @@ public class GroupMessageServiceImpl implements GroupMessageService {
private void doHandlerWithSend2Group(String wxEnterpriseId, List<ClerkShareLogBO> clerkShareLogBos, GroupMessageInfoBo groupMessageInfoBo,
WxEnterpriseQwDTO qwInfo,
String corpId, Map<String, TabHaobanStaff> staffInfoMap, List<String> excludeMsgId, List<Long> clerkShareLogIds) {
log.info("doHandlerWithSend2Group 处理群发到群组开始 >>>>>>> ");
if (groupMessageInfoBo.getStartTime() == null || groupMessageInfoBo.getEndTime() == null) {
log.info("doHandlerWithSend2Group 处理群发到群组缺少时间参数 {}", JSON.toJSONString(groupMessageInfoBo));
return;
......@@ -254,6 +257,7 @@ public class GroupMessageServiceImpl implements GroupMessageService {
*/
private void doHandlerWithSend2Customer(List<ClerkShareLogBO> clerkShareLogBos, GroupMessageInfoBo groupMessageInfoBo, WxEnterpriseQwDTO qwInfo,
String corpId, Map<String, TabHaobanStaff> staffInfoMap, List<String> excludeMsgId, List<Long> clerkShareLogIds) {
log.info("doHandlerWithSend2Customer 处理群发到客户 开始 >>>>>>>>");
if (groupMessageInfoBo.getStartTime() == null || groupMessageInfoBo.getEndTime() == null) {
log.info("doHandlerWithSend2Customer 处理群发到客户 缺少时间参数 {}", JSON.toJSONString(groupMessageInfoBo));
return;
......@@ -431,6 +435,7 @@ public class GroupMessageServiceImpl implements GroupMessageService {
List<QywxGroupMsgSendResultDTO.GroupMsgSendResultInfo> groupMsgSendResultInfos = new ArrayList<>();
groupMsgSendResultInfos.addAll(serviceResponse.getResult().getSendResultInfos());
if (StringUtils.isNotBlank(serviceResponse.getResult().getCursor())) {
log.info("递归获取成员群发结果 >>>>> ");
String tempCursor = serviceResponse.getResult().getCursor();
this.queryGroupMsgSendResult(corpid, msgId, userId, tempCursor);
}
......
......@@ -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.entity.content.TabHaobanInteractRecord;
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.qo.content.InteractRecordQO;
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.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
......@@ -20,8 +22,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
......@@ -38,6 +43,8 @@ public class InteractRecordServiceImpl implements InteractRecordService {
private TabHaobanInteractRecordMapper tabHaobanInteractRecordMapper;
@Autowired
private InteractRecordBuilder interactRecordBuilder;
@Autowired
PotentialCustomerService potentialCustomerService;
/**
* 查询互动记录
......@@ -71,12 +78,14 @@ public class InteractRecordServiceImpl implements InteractRecordService {
@Override
public Page<InteractRecordBO> queryInteractRecordPage(InteractRecordQO interactRecordQO) {
// 默认查最近一年内的的数据
if (StringUtils.isBlank(interactRecordQO.getClerkId())) {
log.info("queryInteractRecordPage 参数缺失");
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());
com.github.pagehelper.Page<TabHaobanInteractRecord> pageResult =
(com.github.pagehelper.Page<TabHaobanInteractRecord>) tabHaobanInteractRecordMapper.queryInteractRecordList(interactRecordQO);
......@@ -91,8 +100,9 @@ public class InteractRecordServiceImpl implements InteractRecordService {
.map(item -> {
InteractRecordBO temp = new InteractRecordBO();
BeanUtils.copyProperties(item, temp);
temp.setRecordDesc(this.interactRecordBuilder.buildDesc(item));
temp.setRecordDesc(interactRecordBuilder.buildDesc(item));
temp.setExtendInfo(interactRecordBuilder.convertExtendInfo(item));
interactRecordBuilder.warpRelationGoodsNum(temp);
return temp;
})
.collect(Collectors.toList());
......@@ -152,4 +162,65 @@ public class InteractRecordServiceImpl implements InteractRecordService {
public List<PotentialCustomerStaticsBO> staticsClerkNewInteractRecord(InteractRecordQO 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 {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(staffInfo.getWxEnterpriseId());
QywxNewsSendMessageDTO newsSendMessageDTO = materialReportBuilder.buildQywxNewsMessage(context, qwDTO);
if (newsSendMessageDTO == null) {
log.info("构建企业应用消息异常 {}");
return;
}
log.info("发送企业图文消息参数{}", JSON.toJSONString(newsSendMessageDTO));
......
......@@ -229,4 +229,18 @@ public class PotentialCustomerServiceImpl implements PotentialCustomerService {
// 如果该导购id是成员在主门店时的导购id 发送应用消息
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 {
}
}
if (null == interactRecordBO.getExtendInfo()) {
interactRecordBO.setExtendInfo(InteractRecordExtendInfoBO.empty());
}
// 组装扩展信息
if (MaterialInteractRecordEventType.VISIT_PRODUCT.getCode().equals(interactRecordMessageBO.getEventType())) {
// 浏览商品
if (CollectionUtils.isNotEmpty(interactRecordMessageBO.getGoodsIds())) {
if (interactRecordBO.getExtendInfo() == null){
interactRecordBO.setExtendInfo(InteractRecordExtendInfoBO.empty());
}
interactRecordBO.getExtendInfo().getGoodsIds().addAll(interactRecordMessageBO.getGoodsIds());
if (StringUtils.isNotBlank(interactRecordMessageBO.getGoodsId())) {
interactRecordBO.getExtendInfo().getGoodsIds().add(interactRecordMessageBO.getGoodsId());
}
}
if (MaterialInteractRecordEventType.ORDER.getCode().equals(interactRecordMessageBO.getEventType())) {
// 下单
// 查询订单信息
String orderId = interactRecordMessageBO.getOrderId();
String orderNumber = interactRecordMessageBO.getOrderNumber();
}
interactRecordService.saveOrUpdateInteractRecord(interactRecordBO);
......
......@@ -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.service.content.InteractRecordApiService;
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.service.content.InteractRecordService;
import com.gic.haoban.manage.service.service.content.PotentialCustomerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -32,6 +35,8 @@ public class InteractRecordApiServiceImpl implements InteractRecordApiService {
@Autowired
private InteractRecordService interactRecordService;
@Autowired
PotentialCustomerService potentialCustomerService;
/**
* 查询互动记录
......@@ -72,4 +77,37 @@ public class InteractRecordApiServiceImpl implements InteractRecordApiService {
result.setResult(recordInfos);
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
ClerkShareLogBO clerkShareLogBO = new ClerkShareLogBO();
BeanUtils.copyProperties(clerkShareMaterialLogDTO, clerkShareLogBO);
Long logId = clerkShareLogService.saveClerkShareLog(clerkShareLogBO);
if (logId != null){
if (logId != null && ClerkShareMaterialType.SHARE_PYQ.getCode().equals(clerkShareLogBO.getShareType())){
// MQ 通知处理导购分享日志
TriggerCustomerDetailLogDTO triggerCustomerDetailLog = new TriggerCustomerDetailLogDTO();
triggerCustomerDetailLog.setEnterpriseId(clerkShareLogBO.getEnterpriseId());
......
......@@ -53,6 +53,7 @@ public class QywxGroupMsgTaskApiServiceImpl implements QywxGroupMsgTaskApiServic
@Override
public ServiceResponse<Void> groupMsgTaskJob(String params) {
log.info("执行群发定时任务 {}", DateUtil.datetimeToString(new Date()));
// 获取开启【内容】权限的企业id
List<String> enterpriseIds = groupMessageService.hasMaterialRightEnterprise();
// 获取企业 (当前时间 - 30分钟, 当前时间)范围内的 导购分享记录。按创建时间排序
......
......@@ -214,5 +214,6 @@
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.GoodsCenterApiService" id="goodsCenterApiService" timeout="10000" retries="0" check="false"/>
</beans>
\ No newline at end of file
......@@ -261,7 +261,10 @@
select <include refid="baseSql"/>
from tab_haoban_interact_record
<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 != ''">
and member_id = #{memberId}
</if>
......@@ -271,6 +274,9 @@
<if test="endTime != null">
and create_time <![CDATA[ <= ]]> #{endTime}
</if>
<if test="unionId != null and unionId != '' ">
and union_id = #{unionId}
</if>
</where>
order by id desc
</select>
......@@ -295,5 +301,17 @@
order by null
</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>
......@@ -276,5 +276,11 @@
where clerk_id = #{clerkId} and delete_flag = 0 and member_id = #{memberId}
</select>
<update id="mergeMember">
update tab_haoban_potential_customer
set member_id = #{memberId}
where member_id = #{memberId} and delete_flag = 0
</update>
</mapper>
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.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.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.pojo.bo.content.InteractRecordBO;
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.service.content.InteractRecordService;
......@@ -33,6 +40,8 @@ public class InteractRecordTest {
private InteractRecordService interactRecordService;
@Autowired
private InteractRecordMessageService interactRecordMessageService;
@Autowired
InteractRecordApiService interactRecordApiService;
String eid = "ff8080815dacd3a2015dacd3ef5c0000";
......@@ -43,9 +52,12 @@ public class InteractRecordTest {
@Test
public void queryInteractPageTest(){
InteractRecordQO interactRecordQO = new InteractRecordQO();
interactRecordQO.setClerkId(staffId);
interactRecordService.queryInteractRecordPage(interactRecordQO);
InteractRecordQDTO interactRecordQO = new InteractRecordQDTO();
interactRecordQO.setClerkId(clerkId);
interactRecordQO.setMemberId(memberId);
ServiceResponse<Page<InteractRecordInfoDTO>> serviceResponse =
interactRecordApiService.queryInteractRecordList(interactRecordQO);
System.out.println(JSON.toJSONString(serviceResponse));
}
@Test
......@@ -60,7 +72,7 @@ public class InteractRecordTest {
message.setMaterialId("1232139123912");
message.setChannelSource(TriggerCustomerChannelType.PYQ.getCode());
message.setEventType(MaterialInteractRecordEventType.VISIT_PRODUCT.getCode());
message.setGoodsIds(Collections.singletonList("fbc508e395f846ef9005852c420e1c23"));
message.setGoodsId("fbc508e395f846ef9005852c420e1c23");
message.setDurationTime(2000);
message.setBusinessUUId(businessId);
message.setLastAccessTime(new Date().getTime());
......
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
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.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.entity.content.TabHaobanInteractRecord;
import com.gic.haoban.manage.service.service.content.MaterialReportService;
......@@ -22,8 +25,8 @@ import java.util.List;
* @Version
**/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext-conf.xml"})
//@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(locations = {"classpath:applicationContext-conf.xml"})
public class MaterialReportServiceTest {
public MaterialReportServiceTest(){
......@@ -50,6 +53,7 @@ public class MaterialReportServiceTest {
@Test
public void weekReport(){
qywxGroupMsgTaskApiService.handlerMaterialMonthReport("");
qywxGroupMsgTaskApiService.handlerMaterialWeekReport("");
}
@Test
......@@ -75,4 +79,17 @@ public class MaterialReportServiceTest {
List<TabHaobanInteractRecord> tabHaobanInteractRecords = interactRecordMapper.queryAllByLimit(temp);
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 {
StoreListVO vo = new StoreListVO();
vo.setStoreId(store.getStoreId());
vo.setStoreName(store.getStoreName());
vo.setStoreCode(store.getStoreCode());
voList.add(vo) ;
}
}
......
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.ServiceResponse;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.content.api.dto.material.ContentMaterialBaseDTO;
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.service.content.InteractRecordApiService;
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.vo.content.ContentMaterialInfoVO;
import com.gic.haoban.manage.web.vo.content.InteractRecordExtendInfoVO;
import com.gic.haoban.manage.web.vo.content.InteractRecordVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -64,11 +69,21 @@ public class InteractRecordController {
.stream()
.map(item -> {
InteractRecordVO interactRecordVO = new InteractRecordVO();
BeanUtils.copyProperties(interactRecordVO, interactRecordVO);
BeanUtils.copyProperties(item, interactRecordVO);
ContentMaterialBaseDTO materialBaseInfo = materialBaseMap.get(Long.parseLong(item.getBizId()));
if (materialBaseInfo != null) {
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);
}
return interactRecordVO;
......
......@@ -19,40 +19,19 @@ public class InteractRecordExtendInfoVO implements Serializable {
private static final long serialVersionUID = 799914036029100258L;
/**
* 订单编号
* 素材关联的商品信息商品信息
*/
private String orderNumber;
/**
* 订单创建时间
*/
private Date orderCreateTime;
/**
* 订单商品项总数
*/
private Integer orderTotalNum;
/**
* 订单应付
*/
private BigDecimal orderPay;
private List<ExtendGoodsInfo> extendGoodsInfos;
/**
* 订单实付
* 素材关联的订单信息
*/
private BigDecimal realPay;
private List<ExtendOrderInfo> extendOrderInfos;
/**
* 失效商品数量
*/
private Integer invalidGoodsNum;
/**
* 素材扩展商品信息
*/
private List<ExtendGoodsInfo> extendGoodsInfos;
@Data
public static class ExtendGoodsInfo {
......@@ -84,5 +63,45 @@ public class InteractRecordExtendInfoVO implements Serializable {
* 商品单价
*/
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 {
private Date createTime;
/**
* 1 "朋友圈"; 2 "客户群";3 "对话框";4 "复制文案"; 5"下载素材"
*/
private Integer channelSource;
/**
* 记录事件类型
* 1浏览素材;2 查看商品; 3 购买商品
* 通过此类型区分 弹窗提示
......@@ -50,6 +55,16 @@ public class InteractRecordVO implements Serializable {
private Integer eventType;
/**
* 浏览的商品数量
*/
private Integer visitGoodsNum;
/**
* 下单的商品数量
*/
private Integer orderGoodsNum;
/**
* 素材信息
* null 代表素材被删除
*/
......
......@@ -3,6 +3,7 @@ package com.gic.haoban.manage.web.vo.content;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Author MUSI
......@@ -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