Commit ada17731 by songyinghui

Merge branch 'feature-wm-data' into 'master'

Feature wm data

See merge request !1622
parents bf1fb41d 1ab951b6
......@@ -28,4 +28,25 @@ public interface InteractRecordApiService {
* @return
*/
ServiceResponse<Void> memberChangeMQ(String params);
/**
* 处理会员线上订单
* @param params
* @return
*/
ServiceResponse<Void> dealMemberOnlineOrder(String params);
/**
* 处理会员线下订单数据
* @param params
* @return
*/
ServiceResponse<Void> dealMemberOffLineOrder(String params);
/**
* 处理会员新增事件
* @param params
* @return
*/
ServiceResponse<Void> dealMemberEvent(String params);
}
......@@ -5,15 +5,19 @@ import com.gic.api.base.commons.ServiceResponse;
import com.gic.enterprise.api.constant.EnterpriseServiceEnum;
import com.gic.enterprise.api.dto.enterprise.EnterpriseUsingStatusDTO;
import com.gic.enterprise.api.service.EnterpriseUseForbidService;
import com.gic.redis.data.util.RedisUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
......@@ -35,6 +39,8 @@ public class MaterialEnterpriseAdaptor {
private String desc;
}
private static final Long cache_hour_sec = 5 * 60L;
@Autowired
EnterpriseUseForbidService enterpriseUseForbidService;
......@@ -58,4 +64,32 @@ public class MaterialEnterpriseAdaptor {
.map(EnterpriseUsingStatusDTO::getEnterpriseId)
.collect(Collectors.toList());
}
/**
* 校验企业是否有内容权限
* @param enterpriseId
* @return
*/
public boolean checkEnterpriseHasContentRight(String enterpriseId) {
String key = "haoban_enterprise_content:" + enterpriseId;
String cache = RedisUtil.getCache(key, String.class);
if (StringUtils.isBlank(cache)) {
cache = "0";
ServiceResponse<List<EnterpriseUsingStatusDTO>> tempServiceResponse = enterpriseUseForbidService.getUseEnterpriseByCode(EnterpriseServiceEnum.CONTENT.getRightMenuCode(), enterpriseId);
if (!tempServiceResponse.isSuccess() || CollectionUtils.isEmpty(tempServiceResponse.getResult())) {
log.info("企业 {} 没有内容权限 {}", enterpriseId, JSON.toJSONString(tempServiceResponse));
RedisUtil.setCache(key, cache, cache_hour_sec, TimeUnit.SECONDS);
return false;
}
EnterpriseUsingStatusDTO enterpriseUsingStatusDTO = tempServiceResponse.getResult().get(0);
if (!Boolean.TRUE.equals(enterpriseUsingStatusDTO.getVaild())) {
log.info("企业 {} 内容权限已失效 {}", enterpriseId, JSON.toJSONString(tempServiceResponse));
RedisUtil.setCache(key, cache, cache_hour_sec, TimeUnit.SECONDS);
return false;
}
cache = "1";
RedisUtil.setCache(key, cache, cache_hour_sec, TimeUnit.SECONDS);
}
return StringUtils.equals(cache, "1");
}
}
......@@ -192,6 +192,9 @@ public class InteractRecordServiceImpl implements InteractRecordService {
@Override
public void memberAuthorized(String memberId, String unionId) {
if (StringUtils.isAnyBlank(memberId, unionId)) {
return;
}
InteractRecordQO interactRecordQO = new InteractRecordQO();
interactRecordQO.setUnionId(unionId);
List<TabHaobanInteractRecord> interactRecords = this.tabHaobanInteractRecordMapper.queryInteractRecordList(interactRecordQO);
......
......@@ -4,15 +4,27 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.GICMQClientUtil;
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.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.content.MemberAttrChangeBO;
import com.gic.haoban.manage.service.pojo.bo.content.binlog.MemberOrderBo;
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.MaterialEnterpriseAdaptor;
import com.gic.haoban.manage.service.task.KafkaMessageServiceImpl;
import com.gic.member.api.dto.event.lifecycle.CreateMemberEventParam;
import com.gic.member.api.dto.info.MemberSummaryInfoDTO;
import com.gic.member.api.dto.info.qo.QueryMemberInfoDTO;
import com.gic.member.api.service.MemberOutApiService;
import com.gic.order.api.constant.OrderChannelEnum;
import com.gic.order.api.dto.OrderSaveNotifyDTO;
import com.gic.order.api.dto.resp.OrderInfoResp;
import com.gic.order.api.service.member.MemberOrderReadApiService;
import com.gic.haoban.manage.service.util.EventUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
......@@ -39,6 +51,12 @@ public class InteractRecordApiServiceImpl implements InteractRecordApiService {
private InteractRecordService interactRecordService;
@Autowired
PotentialCustomerService potentialCustomerService;
@Autowired
private MaterialEnterpriseAdaptor materialEnterpriseAdaptor;
@Autowired
MemberOutApiService memberOutApiService;
@Autowired
private MemberOrderReadApiService memberOrderReadApiService;
/**
* 查询互动记录
......@@ -131,4 +149,113 @@ public class InteractRecordApiServiceImpl implements InteractRecordApiService {
}
return ServiceResponse.success();
}
/**
* 处理会员线上订单
*
* @param params
* @return
*/
@Override
public ServiceResponse<Void> dealMemberOnlineOrder(String params) {
return dealMemberOrder(params, true);
}
private ServiceResponse<Void> dealMemberOrder(String params, boolean isOnlineOrder) {
if (StringUtils.isBlank(params)) {
return ServiceResponse.success();
}
OrderSaveNotifyDTO orderSaveNotifyDTO = JSON.parseObject(params, OrderSaveNotifyDTO.class);
if (orderSaveNotifyDTO.getFirstCreate() == null || orderSaveNotifyDTO.getFirstCreate() != 1) {
log.info("会员订单 非购买事件 {}", params);
return ServiceResponse.success();
}
potentialCustomerService.updateMemberDealFlag(orderSaveNotifyDTO.getEnterpriseId(), orderSaveNotifyDTO.getMemberId());
String enterpriseId = orderSaveNotifyDTO.getEnterpriseId();
String memberId = orderSaveNotifyDTO.getMemberId();
String orderId = orderSaveNotifyDTO.getOrderId();
ServiceResponse<OrderInfoResp> serviceResponse =
memberOrderReadApiService.getOrder(enterpriseId, memberId, orderId, isOnlineOrder);
if (!serviceResponse.isSuccess() || serviceResponse.getResult() == null) {
log.info("获取订单信息异常 {}", JSON.toJSONString(serviceResponse));
return ServiceResponse.success();
}
OrderInfoResp orderInfoResp = serviceResponse.getResult();
if (orderInfoResp.getOrderType() == null || OrderChannelEnum.WEIMOB.getSort() != orderInfoResp.getOrderType()) {
log.info("订单 {} 非微盟渠道", orderId);
return ServiceResponse.success();
}
MemberOrderBo memberOrderBo = new MemberOrderBo();
memberOrderBo.setEnterpriseId(orderSaveNotifyDTO.getEnterpriseId());
memberOrderBo.setMemberId(orderSaveNotifyDTO.getMemberId());
memberOrderBo.setOrderId(orderSaveNotifyDTO.getOrderId());
memberOrderBo.setOrderNumber(orderInfoResp.getRorderNumber());
memberOrderBo.setOrderTime(orderInfoResp.getOrderTime());
if (isOnlineOrder) {
memberOrderBo.setTableName(KafkaMessageServiceImpl.tab_gic_eorder);
}else {
memberOrderBo.setTableName(KafkaMessageServiceImpl.tab_gic_order);
}
try {
log.info("发送微盟订单处理消息 {}", params);
/**
* @see com.gic.haoban.manage.api.service.content.MallOrderStatusChangeApiService#dealWeimoOrder(String)
*/
GICMQClientUtil.getClientInstance().sendMessage("dealWeimoOrderForInteractRecord", JSON.toJSONString(memberOrderBo), 120);
}catch (Exception ex) {
log.info("处理会员订单异常 ", ex);
}
return ServiceResponse.success();
}
/**
* 处理会员线下订单数据
*
* @param params
* @return
*/
@Override
public ServiceResponse<Void> dealMemberOffLineOrder(String params) {
return dealMemberOrder(params, false);
}
/**
* 处理会员新增事件
*
* @param params
* @return
*/
@Override
public ServiceResponse<Void> dealMemberEvent(String params) {
if (StringUtils.isBlank(params)) {
return ServiceResponse.success();
}
CreateMemberEventParam createMemberEventParam = JSON.parseObject(params, CreateMemberEventParam.class);
String enterpriseId = createMemberEventParam.getEnterpriseId();
String memberId = createMemberEventParam.getMemberId();
if (!materialEnterpriseAdaptor.checkEnterpriseHasContentRight(enterpriseId)) {
log.info("企业 {} 没有内容权限", enterpriseId);
return ServiceResponse.success();
}
QueryMemberInfoDTO queryMemberInfoDTO = QueryMemberInfoDTO
.queryByMemberId(memberId)
.setMemberBaseInfoDTO(true)
.setMemberPersonalInfoDTO(false);
ServiceResponse<MemberSummaryInfoDTO> serviceResponse = memberOutApiService.queryMemberInfo(queryMemberInfoDTO);
if (!serviceResponse.isSuccess() || serviceResponse.getResult() == null) {
log.info("查询会员信息为空 {}", memberId);
return null;
}
String unionId = serviceResponse.getResult().getMemberBaseInfoDTO().getUnionid();
interactRecordService.memberAuthorized(memberId, unionId);
return ServiceResponse.success();
}
}
......@@ -9,6 +9,9 @@ import com.gic.business.order.enums.OrderEnum;
import com.gic.business.order.qdto.ordermanage.OrderInfoQDTO;
import com.gic.business.order.service.ordermanage.OrderInfoOutApiService;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.content.api.dto.setting.ContentSettingDTO;
import com.gic.content.api.enums.ContentMallShopType;
import com.gic.content.api.service.ContentSettingApiService;
import com.gic.enterprise.api.constant.EnterpriseServiceEnum;
import com.gic.enterprise.api.dto.enterprise.EnterpriseUsingStatusDTO;
import com.gic.enterprise.api.service.EnterpriseUseForbidService;
......@@ -56,6 +59,8 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
private MaterialDataAdaptor materialDataAdaptor;
@Autowired
private EnterpriseUseForbidService enterpriseUseForbidService;
@Autowired
private ContentSettingApiService contentSettingApiService;
private static final String ORDER_EVENT_RETRY = "orderEventRetryMQ";
......@@ -82,6 +87,19 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
return ServiceResponse.success();
}
String enterpriseId = orderEventMqBO.getEnterpriseId();
ServiceResponse<ContentSettingDTO> response = contentSettingApiService.queryContentSettingInfo(enterpriseId);
if (!response.isSuccess() || response.getResult() == null) {
log.info("查询企业内容配置异常 {}", enterpriseId);
return ServiceResponse.success();
}
if (!ContentMallShopType.GIC_MALL.getCode().equals(response.getResult().getMallShopType())) {
log.info("当前企业内容配置非微商城 {}", JSON.toJSONString(response));
return ServiceResponse.success();
}
OrderInfoQDTO orderInfoQDTO = new OrderInfoQDTO();
orderInfoQDTO.setEnterpriseId(orderEventMqBO.getEnterpriseId());
orderInfoQDTO.setOrderNumber(orderEventMqBO.getOrderNumber());
......@@ -208,6 +226,17 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
return ServiceResponse.success();
}
ServiceResponse<ContentSettingDTO> response = contentSettingApiService.queryContentSettingInfo(enterpriseId);
if (!response.isSuccess() || response.getResult() == null) {
log.info("查询企业内容配置异常 {}", enterpriseId);
return ServiceResponse.success();
}
if (!ContentMallShopType.WEIMO_MALL.getCode().equals(response.getResult().getMallShopType())) {
log.info("当前企业内容配置非微盟商城 {}", JSON.toJSONString(response));
return ServiceResponse.success();
}
String memberId = memberOrderBo.getMemberId();
String orderId = memberOrderBo.getOrderId();
String orderNumber = memberOrderBo.getOrderNumber();
......
......@@ -98,26 +98,26 @@ public class KafkaMessageServiceImpl implements MessageListener<String, GicRecor
else if (record.value().getTableName().equals(CLERK)) {
logger.info("导购binlog无需监听");
}
else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_eorder)) {
// 处理线上单微盟订单
MemberOrderBo memberOrderBo = new MemberOrderBo();
BeanUtils.copyProperties((MaterialMemberEOrderPojo)pojo, memberOrderBo);
this.dealMemberOrder(memberOrderBo);
// 处理会员订单新增事件
dealMemberEOrder((MaterialMemberEOrderPojo) pojo);
}
else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_order)) {
MemberOrderBo memberOrderBo = new MemberOrderBo();
BeanUtils.copyProperties((MaterialMemberGicOrderPojo)pojo, memberOrderBo);
this.dealMemberOrder(memberOrderBo);
// 处理会员订单新增事件
dealMemberGicOrder((MaterialMemberGicOrderPojo) pojo);
}else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_member)) {
// 会员unionId新增事件
dealMemberUnionIdChange((MaterialMemberUnionIdPoJo) pojo);
}
// else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_eorder)) {
// // 处理线上单微盟订单
// MemberOrderBo memberOrderBo = new MemberOrderBo();
// BeanUtils.copyProperties((MaterialMemberEOrderPojo)pojo, memberOrderBo);
// //this.dealMemberOrder(memberOrderBo);
// // 处理会员订单新增事件
// // dealMemberEOrder((MaterialMemberEOrderPojo) pojo);
// }
// else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_order)) {
//
//// MemberOrderBo memberOrderBo = new MemberOrderBo();
//// BeanUtils.copyProperties((MaterialMemberGicOrderPojo)pojo, memberOrderBo);
// //this.dealMemberOrder(memberOrderBo);
// // 处理会员订单新增事件
// // dealMemberGicOrder((MaterialMemberGicOrderPojo) pojo);
//
// }else if (StringUtils.startsWith(record.value().getTableName(), tab_gic_member)) {
// // 会员unionId新增事件
// //dealMemberUnionIdChange((MaterialMemberUnionIdPoJo) pojo);
// }
}
private BinlogBasePojo binlogChange(GicRecord record) {
......
......@@ -234,5 +234,6 @@
<dubbo:reference id="memberOrderReadApiService" interface="com.gic.order.api.service.member.MemberOrderReadApiService" timeout="10000" retries="0" check="false" />
<dubbo:reference id="contentProducerApiService" interface="com.gic.content.api.service.ContentProducerApiService" timeout="10000" retries="0" check="false" />
<dubbo:reference interface="com.gic.content.api.service.ContentMaterialApiService" id="contentMaterialApiService" timeout="10000" retries="0" check="false" />
<dubbo:reference interface="com.gic.content.api.service.ContentSettingApiService" id="contentSettingApiService" timeout="10000" retries="0" check="false" />
</beans>
\ No newline at end of file
......@@ -154,7 +154,7 @@ public class MaterialDataStaticsController {
storeIds.add(materialStatisticsBaseQO.getStoreId());
}
MaterialDataOverviewVO materialDataOverviewVO =
materialDataAdaptor.queryMaterialDataOverview(materialStatisticsBaseQO.getEnterpriseId(), storeIds, materialStatisticsBaseQO.getFixedDateDiff());
materialDataAdaptor.queryMaterialDataOverview(materialStatisticsBaseQO, materialStatisticsBaseQO.getEnterpriseId(), storeIds, materialStatisticsBaseQO.getFixedDateDiff());
return RestResponse.successResult(materialDataOverviewVO);
}
......
......@@ -140,11 +140,13 @@ public class MaterialDataAdaptor {
* @param fixedDateDiff
* @return
*/
public MaterialDataOverviewVO queryMaterialDataOverview(String enterpriseId, List<String> storeIds, Integer fixedDateDiff) {
public MaterialDataOverviewVO queryMaterialDataOverview(MaterialAnalyzeDataQO dataQO, String enterpriseId, List<String> storeIds, Integer fixedDateDiff) {
Map<String, Object> inlineParams = new HashMap<>();
inlineParams.put("enterpriseId", enterpriseId);
inlineParams.put("fixedDateDiff", fixedDateDiff);
inlineParams.put("startDate", dataQO.getStartDate());
inlineParams.put("endDate", dataQO.getEndDate());
if (CollectionUtil.isNotEmpty(storeIds)) {
inlineParams.put("storeId", StringUtils.join(storeIds, ","));
}
......@@ -175,6 +177,9 @@ public class MaterialDataAdaptor {
inlineParams.put("pageSize", pageSize);
inlineParams.put("enterpriseId", enterpriseId);
inlineParams.put("fixedDateDiff", fixedDateDiff);
inlineParams.put("startDate", dataQO.getStartDate());
inlineParams.put("endDate", dataQO.getEndDate());
int orderByFields = DataApiUtils.getOrderByFields(orderByField, "enterpriseId", dataQO.getFieldsOrder());
inlineParams.put("orderByFields", orderByFields);
inlineParams.put("orderByType", DataApiUtils.getOrderByType(order));
......@@ -207,6 +212,8 @@ public class MaterialDataAdaptor {
inlineParams.put("pageSize", pageSize);
inlineParams.put("enterpriseId", enterpriseId);
inlineParams.put("fixedDateDiff", fixedDateDiff);
inlineParams.put("startDate", dataQO.getStartDate());
inlineParams.put("endDate", dataQO.getEndDate());
inlineParams.put("orderByFields", DataApiUtils.getOrderByFields(orderByField, "enterpriseId", dataQO.getFieldsOrder()));
inlineParams.put("orderByType", DataApiUtils.getOrderByType(order));
if (CollectionUtil.isNotEmpty(storeIds)) {
......
......@@ -32,6 +32,16 @@ public class MaterialStatisticsBaseQO extends BasePageInfo {
*/
private String storeId;
/**
* 开始时间
*/
private String startDate;
/**
* 结束时间
*/
private String endDate;
public String getEnterpriseId() {
return enterpriseId;
......@@ -56,4 +66,20 @@ public class MaterialStatisticsBaseQO extends BasePageInfo {
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
}
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