Commit 6dc9cff7 by erqian

Merge branch 'master' into feature/1061371-Interactive-gatherings

parents f37ad2f5 75c1ae02
package com.gic.haoban.manage.api.dto.anaylsis;
import java.io.Serializable;
/**
* @author shangfeng
* @date 2024-08-29 09:55:06
*/
public class ClerkShareGoodsLogDTO implements Serializable {
private static final long serialVersionUID = 903792260439296719L;
/**
* 企业id
*/
private String enterpriseId;
/**
* 微信企业id
*/
private String wxEnterpriseId;
/**
* 导购id
*/
private String clerkId;
/**
* 成员id
*/
private String staffId;
/**
* 素材分享类型
* @see com.gic.haoban.manage.api.enums.content.ClerkShareMaterialType
*/
private Integer shareType;
/**
* 业务id
*/
private String bizId;
/**
* 业务类型
* @see com.gic.haoban.manage.api.enums.content.ShareBizType
*/
private Integer bizType;
/**
* 门店id
*/
private String storeId;
/**
* 外部联系人id
*/
private String externalUserId;
/**
* 会员id
*/
private String memberId;
/**
* 额外数据
*/
private String extend;
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public Integer getShareType() {
return shareType;
}
public void setShareType(Integer shareType) {
this.shareType = shareType;
}
public String getBizId() {
return bizId;
}
public void setBizId(String bizId) {
this.bizId = bizId;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getExternalUserId() {
return externalUserId;
}
public void setExternalUserId(String externalUserId) {
this.externalUserId = externalUserId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getExtend() {
return extend;
}
public void setExtend(String extend) {
this.extend = extend;
}
}
......@@ -95,7 +95,8 @@ public enum NoticeMessageTypeEnum {
CASH_APPLY_OFFLINE_SUCCESS_NOTIFY(7003,"提现通知", NoticeMessageCategoryTypeEnum.OTHER.getType(),"cash_apply_offline_success_notify","/pages/route/index?pageType=","hbapp_withdraw_list","cashApplyOfflineSuccessNotify","haobanNotice"),
AUTHORIZED_LOGIN_NOTIFY(8001,"账号授权通知", NoticeMessageCategoryTypeEnum.AUTHORIZED.getType(),"authorized_login_notify","/pages/route/index?pageType=","hbapp_video_auth","authorizedLoginNotify","haobanNotice");
AUTHORIZED_LOGIN_NOTIFY(8001,"账号授权通知", NoticeMessageCategoryTypeEnum.AUTHORIZED.getType(),"authorized_login_notify","/pages/route/index?pageType=","hbapp_video_auth","authorizedLoginNotify","haobanNotice"),
AUTHORIZED_LOGOUT_NOTIFY(8002,"账号异常退出登录通知", NoticeMessageCategoryTypeEnum.AUTHORIZED.getType(),"authorized_logout_notify","/pages/route/index?pageType=","hbapp_video_auth","authorizedLogoutNotify","haobanNotice");
/**
* 消息类型
......
package com.gic.haoban.manage.api.service.content;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.anaylsis.ClerkShareGoodsLogDTO;
import com.gic.haoban.manage.api.dto.content.log.ClerkShareMaterialLogDTO;
import java.util.List;
/**
* @Author MUSI
* @Date 2023/3/18 8:20 PM
......@@ -19,4 +22,12 @@ public interface MaterialShareLogApiService {
* @return
*/
ServiceResponse<Long> saveClerkShareMaterialLog(ClerkShareMaterialLogDTO clerkShareMaterialLogDTO);
/**
* 保存导购分享记录
*
* @param clerkShareGoodsLogDTOList
* @return
*/
ServiceResponse<Long> saveClerkShareRecommendLog(List<ClerkShareGoodsLogDTO> clerkShareGoodsLogDTOList);
}
package com.gic.haoban.manage.service.pojo.bo.anaylsis;
import java.util.Date;
/**
* @author shangfeng
* @date 2024-08-29 10:03:10
*/
public class ProTriggerCustomerDetailBO {
private Long id;
/**
* 企业id
*/
private String enterpriseId;
/**
* 微信企业id
*/
private String wxEnterpriseId;
/**
* 业务id
*/
private String bizId;
/**
* 业务类型 2商品
*/
private Integer bizType;
/**
* 导购id
*/
private String clerkId;
/**
* 成员id
*/
private String staffId;
/**
* 门店id
*/
private String storeId;
/**
* 渠道类型 1朋友圈; 2客户群; 3 对话框; 4 复制文案; 5 下载素材;6 潜客推荐
*/
private Integer channelType;
/**
* 触达客户标识 外部联系人id
*/
private String customerId;
/**
* 会员id
*/
private String memberId;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
/**
* 0正常; 1删除
*/
private Integer deleteFlag;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getBizId() {
return bizId;
}
public void setBizId(String bizId) {
this.bizId = bizId;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public Integer getChannelType() {
return channelType;
}
public void setChannelType(Integer channelType) {
this.channelType = channelType;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
}
package com.gic.haoban.manage.service.service.content;
import com.gic.haoban.manage.service.pojo.bo.anaylsis.ProTriggerCustomerDetailBO;
import com.gic.haoban.manage.service.pojo.bo.content.TriggerCustomerDetailBO;
import com.gic.haoban.manage.service.pojo.qo.content.TriggerCustomerDetailQO;
......@@ -27,6 +28,13 @@ public interface TriggerCustomerDetailService {
void batchSave(List<TriggerCustomerDetailBO> triggerCustomerDetailBos);
/**
* 批量保存
* @param triggerCustomerDetailBos
*/
void batchSaveGoodsShare(List<ProTriggerCustomerDetailBO> triggerCustomerDetailBos);
/**
* 查询客户触达日志
* @param triggerCustomerDetailQO
* @return
......
......@@ -43,6 +43,11 @@ public class MessageConvertHelper {
String cusp = jsonObject.getString("cusp");
JSONObject cuspJson = JSON.parseObject(cusp);
Integer isPreview = cuspJson.getInteger("is_preview");
if (Objects.equals(isPreview, 1)) {
log.info("预览数据不处理");
return null;
}
String sysp = jsonObject.getString("sysp");
JSONObject syspJson = JSON.parseObject(sysp);
......
......@@ -13,6 +13,7 @@ import com.gic.haoban.common.utils.DateUtil;
import com.gic.haoban.manage.service.dao.mapper.content.TabHaobanTriggerCustomerDetailMapper;
import com.gic.haoban.manage.service.dao.mapper.content.holo.HoloDataSource;
import com.gic.haoban.manage.service.entity.content.TabHaobanTriggerCustomerDetail;
import com.gic.haoban.manage.service.pojo.bo.anaylsis.ProTriggerCustomerDetailBO;
import com.gic.haoban.manage.service.pojo.bo.content.TriggerCustomerDetailBO;
import com.gic.haoban.manage.service.pojo.qo.content.TriggerCustomerDetailQO;
import com.gic.haoban.manage.service.service.content.TriggerCustomerDetailService;
......@@ -103,7 +104,41 @@ public class TriggerCustomerDetailServiceImpl implements TriggerCustomerDetailSe
.collect(Collectors.toList());
client.put(puts);
log.info("客户触达写数据组完成 >>>>>");
}catch (Exception ex) {
} catch (Exception ex) {
log.info("数据组写入异常 {}", JSON.toJSONString(triggerCustomerDetailBos), ex);
}
}
@Override
public void batchSaveGoodsShare(List<ProTriggerCustomerDetailBO> triggerCustomerDetailBos) {
try {
HoloClient client = holoDataSource.getClient();
if (client == null) {
log.error("数仓数据源链接异常, 请检查!!!!{}", JSON.toJSONString(triggerCustomerDetailBos));
return;
}
TableSchema tableSchema = client.getTableSchema("tab_pro_trigger_customer_detail");
SerializeConfig serializeConfig = new SerializeConfig();
serializeConfig.setPropertyNamingStrategy(PropertyNamingStrategy.SnakeCase);
// id, enterprise_id, wx_enterprise_id, biz_id, biz_type, clerk_id, staff_id,store_id, channel_type, customer_id,member_id, create_time, update_time, delete_flag
List<Put> puts = triggerCustomerDetailBos
.stream()
.map(item -> {
Put temp = new Put(tableSchema);
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(item, serializeConfig));
for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
temp.setObject(entry.getKey(), entry.getValue());
}
// 时间戳格式不行
temp.setObject("create_time", DateUtil.dateToStr(item.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
temp.setObject("update_time", DateUtil.dateToStr(item.getUpdateTime(), "yyyy-MM-dd HH:mm:ss"));
return temp;
})
.collect(Collectors.toList());
client.put(puts);
log.info("客户触达写数据组完成 >>>>>");
} catch (Exception ex) {
log.info("数据组写入异常 {}", JSON.toJSONString(triggerCustomerDetailBos), ex);
}
}
......
......@@ -545,46 +545,90 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
unlockTask(wxEnterpriseId);
return "没有配置secret";
}
Map<String,Integer> map = CustomSwitcher.haoban_department_id ;
int id = 1 ;
Map<String,String> map = CustomSwitcher.haoban_department_id ;
int syncId = 1 ;
List<Integer> ids=new ArrayList<>();
if(null != map && null != map.get(wxEnterpriseId)) {
id = map.get(wxEnterpriseId) ;
String rootIdsStr = map.get(wxEnterpriseId);
List<Integer> rootIds = Arrays.stream(rootIdsStr.split(",")).filter(mid -> mid != null).map(mid -> Integer.valueOf(mid)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(rootIds)) {
logger.info("apollo部门配置异常");
return "同步部门配置异常";
}
ids.addAll(rootIds);
}else{
ids.add(syncId);
}
logger.info("id={}",id);
List<com.gic.wechat.api.dto.qywx.DepartmentDTO> list = qywxDepartmentApiService.listSelfDepartment(qwDTO.getDkCorpid(), secretSetting.getSecretVal(), id,qwDTO.getUrlHost());
if (CollectionUtils.isEmpty(list)) {
logger.info("企微部门数量0,退出同步");
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_close.getVal());
unlockTask(wxEnterpriseId);
return "没有数据同步或权限没设置全部";
List<TabHaobanPreDealLog> dealLogList=new ArrayList<>();
String rootPid="0";
if (ids.size()>1) {
rootPid="-999";
syncId=Integer.valueOf(rootPid);
TabHaobanPreDealLog dealLog = getRootDept(wxEnterpriseId,rootPid,taskId);
dealLogList.add(dealLog);
}
logger.info("企微部门数={}",list.size());
final int _id = id ;
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.group_sync.getVal());
List<TabHaobanPreDealLog> dealLogList = list.stream().map(dto -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(dto.getId().toString());
if(dto.getId().toString().equals(_id+"")) {
dealLog.setpDataId("0");
dto.setParentid(0);
}else {
dealLog.setpDataId(dto.getParentid().toString());
for (Integer id: ids) {
logger.info("id={}",id);
List<com.gic.wechat.api.dto.qywx.DepartmentDTO> list = qywxDepartmentApiService.listSelfDepartment(qwDTO.getDkCorpid(), secretSetting.getSecretVal(), id,qwDTO.getUrlHost());
if (CollectionUtils.isEmpty(list)) {
logger.info("企微部门数量0,退出同步");
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_close.getVal());
unlockTask(wxEnterpriseId);
return "没有数据同步或权限没设置全部";
}
dealLog.setDataType(0);
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}).collect(Collectors.toList());
logger.info("企微部门数={}",list.size());
final int _id = id ;
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.group_sync.getVal());
String finalRootPid = rootPid;
List<TabHaobanPreDealLog> dealLogListMid = list.stream().map(dto -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(dto.getId().toString());
if(dto.getId().toString().equals(_id+"")) {
dealLog.setpDataId(finalRootPid);
dto.setParentid(Integer.valueOf(finalRootPid));
}else {
dealLog.setpDataId(dto.getParentid().toString());
}
dealLog.setDataType(0);
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}).collect(Collectors.toList());
dealLogList.addAll(dealLogListMid);
}
// 保存部门数据
preDealService.insert(dealLogList);
HashSet<String> hashSet = new HashSet<>();
hashSet.add(""+id);
hashSet.add(""+syncId);
sendToMq(taskId, hashSet, SyncTaskStatusEnum.group_sync,"departmentSyncDealMq2");
return null;
}
private TabHaobanPreDealLog getRootDept(String wxEnterpriseId,String rootPid,String taskId) {
WxEnterpriseDTO wxEnterpriseDTO = this.wxEnterpriseService.selectById(wxEnterpriseId);
com.gic.wechat.api.dto.qywx.DepartmentDTO departmentDTO = new com.gic.wechat.api.dto.qywx.DepartmentDTO();
departmentDTO.setName(wxEnterpriseDTO.getCorpName());
departmentDTO.setParentid(0);
departmentDTO.setOrder(0L);
departmentDTO.setId(Integer.valueOf(rootPid));
departmentDTO.setCorpid("");
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(rootPid);
dealLog.setpDataId("0");
dealLog.setDataType(0);
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setDataContent(JSONObject.toJSONString(departmentDTO));
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}
@Override
public void cleanDiffrence(String wxEnterpriseId, String taskId) {
......
......@@ -4,10 +4,12 @@ import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.haoban.manage.api.dto.anaylsis.ClerkShareGoodsLogDTO;
import com.gic.haoban.manage.api.dto.content.log.ClerkShareMaterialLogDTO;
import com.gic.haoban.manage.api.dto.content.log.TriggerCustomerDetailLogDTO;
import com.gic.haoban.manage.api.enums.content.ClerkShareMaterialType;
import com.gic.haoban.manage.api.service.content.MaterialShareLogApiService;
import com.gic.haoban.manage.service.pojo.bo.anaylsis.ProTriggerCustomerDetailBO;
import com.gic.haoban.manage.service.pojo.bo.content.ClerkShareLogBO;
import com.gic.haoban.manage.service.pojo.bo.content.TriggerCustomerDetailBO;
import com.gic.haoban.manage.service.service.content.ClerkShareLogService;
......@@ -21,6 +23,8 @@ import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author MUSI
......@@ -35,11 +39,14 @@ public class MaterialShareLogApiServiceImpl implements MaterialShareLogApiServic
/**
* 导购分享素材 客户触达日志
*
* @see com.gic.haoban.manage.api.service.content.task.QywxGroupMsgTaskApiService#handlerTriggerCustomerDetailLog(String)
*/
private static final String SHARE_MATERIAL_DETAIL_LOG = "handlerTriggerCustomerDetailLog";
@Autowired
private ClerkShareLogService clerkShareLogService;
@Autowired
TriggerCustomerDetailService triggerCustomerDetailService;
......@@ -72,7 +79,7 @@ public class MaterialShareLogApiServiceImpl implements MaterialShareLogApiServic
ClerkShareLogBO clerkShareLogBO = new ClerkShareLogBO();
BeanUtils.copyProperties(clerkShareMaterialLogDTO, clerkShareLogBO);
Long logId = clerkShareLogService.saveClerkShareLog(clerkShareLogBO);
if (logId != null && ClerkShareMaterialType.SHARE_PYQ.getCode().equals(clerkShareLogBO.getShareType())){
if (logId != null && ClerkShareMaterialType.SHARE_PYQ.getCode().equals(clerkShareLogBO.getShareType())) {
// MQ 通知处理导购分享日志
TriggerCustomerDetailLogDTO triggerCustomerDetailLog = new TriggerCustomerDetailLogDTO();
triggerCustomerDetailLog.setEnterpriseId(clerkShareLogBO.getEnterpriseId());
......@@ -81,13 +88,39 @@ public class MaterialShareLogApiServiceImpl implements MaterialShareLogApiServic
TriggerCustomerDetailLogDTO.SharePYQ sharePYQ = new TriggerCustomerDetailLogDTO.SharePYQ();
sharePYQ.setShareLogId(logId);
triggerCustomerDetailLog.setSharePYQ(sharePYQ);
try{
try {
log.info("分享朋友圈日志 MQ {}", JSON.toJSONString(triggerCustomerDetailLog));
GICMQClientUtil.getClientInstance().sendMessage(SHARE_MATERIAL_DETAIL_LOG, JSON.toJSONString(triggerCustomerDetailLog), 60);
}catch (Exception ex){
} catch (Exception ex) {
log.warn("客户分享素材 触达日志MQ异常 {}", JSON.toJSONString(triggerCustomerDetailLog), ex);
}
}
return ServiceResponse.success(logId);
}
@Override
public ServiceResponse<Long> saveClerkShareRecommendLog(List<ClerkShareGoodsLogDTO> clerkShareGoodsLogDTOList) {
List<ProTriggerCustomerDetailBO> list = clerkShareGoodsLogDTOList.stream().map(clerkShareGoodsLogDTO -> {
ProTriggerCustomerDetailBO temp = new ProTriggerCustomerDetailBO();
temp.setId(UniqueIdUtils.uniqueLong());
temp.setEnterpriseId(clerkShareGoodsLogDTO.getEnterpriseId());
temp.setWxEnterpriseId(clerkShareGoodsLogDTO.getWxEnterpriseId());
temp.setBizId(clerkShareGoodsLogDTO.getBizId());
temp.setBizType(clerkShareGoodsLogDTO.getBizType());
temp.setClerkId(clerkShareGoodsLogDTO.getClerkId());
temp.setStaffId(clerkShareGoodsLogDTO.getStaffId());
temp.setStoreId(clerkShareGoodsLogDTO.getStoreId());
temp.setChannelType(clerkShareGoodsLogDTO.getShareType());
temp.setCustomerId(clerkShareGoodsLogDTO.getExternalUserId());
temp.setMemberId(clerkShareGoodsLogDTO.getMemberId());
temp.setCreateTime(new Date());
temp.setUpdateTime(new Date());
temp.setDeleteFlag(0);
return temp;
}).collect(Collectors.toList());
triggerCustomerDetailService.batchSaveGoodsShare(list);
return ServiceResponse.success();
}
}
package com.gic.haoban.manage.service.task;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
......@@ -179,11 +177,12 @@ public class QywxDeptSyncOperation implements BaseSyncOperation {
private String getStaff(String taskId, String dataId, String enterpriseId, String wxEnterpriseId,SecretSettingDTO secretSetting,WxEnterpriseQwDTO qwDTO) {
logger.info("getstaff={}",dataId);
String id = "1" ;
Map<String,Integer> map = CustomSwitcher.haoban_department_id ;
Map<String,String> map = CustomSwitcher.haoban_department_id ;
if(null != map && null != map.get(wxEnterpriseId)) {
id = map.get(wxEnterpriseId) +"" ;
id = map.get(wxEnterpriseId) ;
}
if(id.equals(dataId)) {
List<String> ids = Arrays.stream(id.split(",")).collect(Collectors.toList());
if(ids.contains(dataId)) {
List<UserDTO> list = null ;
if(qwDTO.getWxSecurityType()==4) {
list = this.qywxUserApiService.listDepartmentUser(qwDTO.getThirdCorpid(), config.getWxSuiteid(), dataId, 1) ;
......
......@@ -21,6 +21,6 @@ public class CustomSwitcher {
public static String haoban_one_bind_many ;
@Switcher
public static Map<String,Integer> haoban_department_id ;
public static Map<String,String> haoban_department_id ;
}
\ No newline at end of file
import com.gic.haoban.manage.api.dto.anaylsis.ClerkShareGoodsLogDTO;
import com.gic.haoban.manage.api.dto.content.log.ClerkShareMaterialLogDTO;
import com.gic.haoban.manage.api.service.content.MaterialShareLogApiService;
import com.google.common.collect.Lists;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
/**
* @Author MUSI
* @Date 2023/4/7 5:56 PM
......@@ -41,4 +45,21 @@ public class MaterialShareLogApiServiceTest {
clerkShareMaterialLogDTO.setBizId(materialId);
materialShareLogApiService.saveClerkShareMaterialLog(clerkShareMaterialLogDTO);
}
@Test
public void saveClerkShareRecommendLog(){
List<ClerkShareGoodsLogDTO> clerkShareGoodsLogDTOList = Lists.newArrayList();
ClerkShareGoodsLogDTO clerkShareGoodsLogDTO = new ClerkShareGoodsLogDTO();
clerkShareGoodsLogDTO.setClerkId(clerkId);
clerkShareGoodsLogDTO.setShareType(1);
clerkShareGoodsLogDTO.setStoreId(staffId);
clerkShareGoodsLogDTO.setStaffId(staffId);
clerkShareGoodsLogDTO.setWxEnterpriseId(wxEid);
clerkShareGoodsLogDTO.setEnterpriseId(eid);
clerkShareGoodsLogDTO.setBizType(2);
clerkShareGoodsLogDTO.setBizId("8a80908c916e4e3e0191704c588200a4");
clerkShareGoodsLogDTOList.add(clerkShareGoodsLogDTO);
materialShareLogApiService.saveClerkShareRecommendLog(clerkShareGoodsLogDTOList);
}
}
......@@ -192,7 +192,7 @@ public class QywxOpenController {
}
OpenStaffDTO openStaff = staffResp.getResult() ;
if(openStaff == null) {
return RestResponse.failure("9999","该账号在当前企业下不存在") ;
return RestResponse.failure("9999","该账号非托管账号") ;
}
if(null != openStaff && openStaff.getStatusFlag()==1) {
StaffDTO staff = this.staffApiService.selectById(staffId);
......
......@@ -180,6 +180,8 @@ public class WechatWorkOverviewController extends NewBaseController {
if (isTotalQuery) {
indexList.add("企微好友总数(去重)");
fieldList.add("newEntwchFdNum");
indexList.add("企微好友总数");
fieldList.add("entwchFdNumTotal");
indexList.add("已注册会员好友数");
......
......@@ -53,7 +53,7 @@ public class StoreAuthUtils {
jsonObject.put("wxEnterpriseId", login.getWxEnterpriseId());
}
public <T> List<T> getOverview(String apolloKey, JSONObject jsonObject, StoreGroupCommonQO storeGroupCommonQO, Class clazz) {
public <T> List<T> getOverview(String apolloKey, JSONObject jsonObject, StoreGroupCommonQO storeGroupCommonQO, Class<T> clazz) {
setCommonParam(jsonObject, storeGroupCommonQO);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), apolloKey);
List<JSONObject> list = DataApiUtils.getDataList(res);
......
......@@ -40,4 +40,9 @@ public class WechatWorkOverviewStoreGroupVO extends StoreGroupCommonVO implement
* 未注册微信好友数
*/
private Integer entwchFdNumNonmbr;
/**
* 微信好友总数(去重)
*/
private Integer newEntwchFdNum;
}
......@@ -29,6 +29,11 @@ public class WechatWorkOverviewVO implements Serializable {
private Integer entwchFdNumNonmbr;
/**
* 微信好友总数(去重)
*/
private Integer newEntwchFdNum;
/**
* 已注册微信好友数占比
*/
private Double entwchFdNumMbrRate;
......
......@@ -472,6 +472,8 @@ public class WxEnterpriseInfoController extends WebBaseController {
storeMemberVO.setClerkType(clerkDTO.getClerkType());
storeMemberVO.setStaffId(staffDTO.getStaffId());
storeMemberVO.setClerkId(clerkDTO.getClerkId());
storeMemberVO.setClerkName(clerkDTO.getClerkName());
storeMemberVO.setClerkHead(clerkDTO.getHeadImgUrl());
retList.add(storeMemberVO);
}
......
......@@ -19,6 +19,8 @@ import com.gic.enterprise.api.dto.custompage.CustomPageRenderDTO;
import com.gic.enterprise.api.enums.CustomPageTypeEnum;
import com.gic.enterprise.api.service.*;
import com.gic.haoban.manage.web.qo.StaffAddVO;
import com.gic.haoban.manage.web.utils.CustomSwitcher;
import com.gic.haoban.manage.web.vo.*;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
......@@ -94,19 +96,6 @@ import com.gic.haoban.manage.api.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.web.config.Config;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.haoban.manage.web.qo.CommonQO;
import com.gic.haoban.manage.web.vo.AuditSettingVO;
import com.gic.haoban.manage.web.vo.BindClerkVO;
import com.gic.haoban.manage.web.vo.ClerkDetailVo;
import com.gic.haoban.manage.web.vo.ClerkEditInfoVO;
import com.gic.haoban.manage.web.vo.ClerkListVO;
import com.gic.haoban.manage.web.vo.ClerkStoreVO;
import com.gic.haoban.manage.web.vo.OperationSettingVO;
import com.gic.haoban.manage.web.vo.RightVO;
import com.gic.haoban.manage.web.vo.StaffStoreVO;
import com.gic.haoban.manage.web.vo.StaffVO;
import com.gic.haoban.manage.web.vo.StoreClerkVO;
import com.gic.haoban.manage.web.vo.StoreListVO;
import com.gic.haoban.manage.web.vo.StoreRoleVO;
import com.gic.haoban.manage.web.vo.notify.CustomerFriendMemberVO;
import com.gic.redis.data.util.RedisUtil;
import com.gic.wechat.api.service.qywx.QywxUserApiService;
......@@ -164,6 +153,9 @@ public class WxStaffController extends WebBaseController {
private EnterpriseUseForbidService enterpriseUseForbidService;
@Autowired
private CustomPageNewService customPageNewService ;
@Autowired
private EnterpriseWxaLinkService enterpriseWxaLinkService ;
// 选择成员列表
@RequestMapping("/staff-list")
......@@ -355,9 +347,56 @@ public class WxStaffController extends WebBaseController {
JSONObject json = this.getMemberSignPage(storeDTO.getEnterpriseId()) ;
auditSettingVO.setShowMemberSign(null==json?0:1);
auditSettingVO.setShareMemberSignInfo(json);
auditSettingVO.setShowAiCustom(this.aiCustom(storeDTO.getEnterpriseId()));
return resultResponse(HaoBanErrCode.ERR_1, auditSettingVO);
}
private int aiCustom(String enterpriseId) {
List<JSONObject> list = CustomSwitcher.haoban_ai_custom ;
if(CollectionUtils.isEmpty(list)) {
return 0 ;
}
List<AiCustomVO> voList = list.stream().map(o->JSONObject.parseObject(o.toJSONString(),AiCustomVO.class)).collect(Collectors.toList());
voList = voList.stream().filter(o->o.getIsOpen()==1 && o.getEid().equals(enterpriseId)).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(voList)) {
return 1 ;
}
return 0 ;
}
/**
* 获取会员签到页分析配置
* @param enterpriseId
* @return
*/
@IgnoreLogin
@RequestMapping("/get-ai-custom-setting")
public RestResponse<Object> getAiCustomSetting(String enterpriseId , String clerkId) {
String clerkCode = "";
if(null != clerkId) {
ClerkDTO clerkDTO = this.clerkService.getClerkByClerkId(clerkId);
if (null != clerkDTO && clerkDTO.getClerkType()<=1) {
clerkCode = clerkDTO.getClerkCode();
}
}
List<JSONObject> list = CustomSwitcher.haoban_ai_custom ;
List<AiCustomVO> voList = list.stream().map(o->JSONObject.parseObject(o.toJSONString(),AiCustomVO.class)).collect(Collectors.toList());
voList = voList.stream().filter(o->o.getIsOpen()==1 && o.getEid().equals(enterpriseId)).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(voList)) {
AiCustomVO vo = voList.get(0) ;
String h5 = String.format(vo.getUrl(),clerkCode) ;
String str = "{\"url\":\""+h5+"\",\"id\":\"5\"}" ;
Map<String, Object> map = this.enterpriseWxaLinkService.getWxaLinkAndQrCode(enterpriseId,str) ;
vo.setPath(map.get("link").toString());
vo.setQrcode(map.get("url").toString());
return RestResponse.successResult(vo);
}
return RestResponse.failure("9999","请联系管理员配置") ;
}
/**
* 获取会员签到页分析配置
* @param enterpriseId
......
......@@ -11,16 +11,22 @@ import com.gic.content.api.dto.material.ProductInfoDTO;
import com.gic.content.api.qdto.material.ContentMaterialLandingPageQDTO;
import com.gic.content.api.qdto.share.MaterialLinkShareQDTO;
import com.gic.content.api.service.ContentMaterialShareApiService;
import com.gic.haoban.manage.api.dto.anaylsis.ClerkShareGoodsLogDTO;
import com.gic.haoban.manage.api.dto.content.log.ClerkShareMaterialLogDTO;
import com.gic.haoban.manage.api.enums.content.ShareBizType;
import com.gic.haoban.manage.api.service.content.MaterialShareLogApiService;
import com.gic.haoban.manage.web.qo.content.ContentMaterialBaseQO;
import com.gic.haoban.manage.web.qo.content.log.MaterialShareLogQO;
import com.gic.haoban.manage.web.qo.content.log.RecommendShareLogQO;
import com.gic.haoban.manage.web.qo.content.share.ContentLinkShareQO;
import com.gic.haoban.manage.web.vo.content.ContentMaterialInfoVO;
import com.gic.haoban.manage.web.vo.content.SimpleGoodsInfoVO;
import com.gic.haoban.manage.web.vo.content.share.ContentMaterialLandingPageVO;
import com.gic.member.api.constant.MemberExtKeyEnum;
import com.gic.member.api.dto.member.req.MemberExtraPropertyReq;
import com.gic.member.api.service.extra.MemberExtraPropertyApiService;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
......@@ -32,6 +38,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -45,9 +52,13 @@ public class ClerkMaterialShareController {
@Autowired
private MaterialShareLogApiService materialShareLogApiService;
@Autowired
private ContentMaterialShareApiService contentMaterialShareApiService;
@Autowired
private MemberExtraPropertyApiService memberExtraPropertyApiService;
/**
* 导购分享素材日志
*
......@@ -80,6 +91,70 @@ public class ClerkMaterialShareController {
/**
* 导购分享推荐商品日志
* *
*
* @param recommendShareLogQO
* @return
*/
@RequestMapping(path = "/clerk/share/recommend/log", method = RequestMethod.POST)
public RestResponse<Void> clerkShareRecommendLog(@RequestBody RecommendShareLogQO recommendShareLogQO) {
if (CollectionUtils.isEmpty(recommendShareLogQO.getGoodsIdList())
|| CollectionUtils.isEmpty(recommendShareLogQO.getMemberInfoList())
|| StringUtils.isBlank(recommendShareLogQO.getClerkId())) {
log.info("参数缺失 {}", JSON.toJSONString(recommendShareLogQO));
return RestResponse.failure("-1", "参数异常");
}
log.info("saveClerkShareMaterialLog 保存导购分享推荐商品日志 clerkId:{}, recommendShareLogQO{}", recommendShareLogQO.getClerkId(), JSON.toJSONString(recommendShareLogQO));
List<ClerkShareGoodsLogDTO> list = Lists.newArrayList();
List<String> memberIdList = Lists.newArrayList();
List<String> goodsIdList = recommendShareLogQO.getGoodsIdList();
List<RecommendShareLogQO.MemberInfo> externalUserIdList = recommendShareLogQO.getMemberInfoList();
for (RecommendShareLogQO.MemberInfo memberInfo : externalUserIdList) {
for (String goodsId : goodsIdList) {
ClerkShareGoodsLogDTO temp = new ClerkShareGoodsLogDTO();
temp.setEnterpriseId(recommendShareLogQO.getEnterpriseId());
temp.setWxEnterpriseId(recommendShareLogQO.getWxEnterpriseId());
temp.setClerkId(recommendShareLogQO.getClerkId());
temp.setExternalUserId(memberInfo.getExternalUserId());
temp.setMemberId(memberInfo.getMemberId());
if(StringUtils.isNotEmpty(memberInfo.getMemberId())){
memberIdList.add(memberInfo.getMemberId());
}
temp.setBizId(goodsId);
temp.setBizType(ShareBizType.GOODS.getCode());
temp.setStoreId(recommendShareLogQO.getStoreId());
temp.setExtend(recommendShareLogQO.getExtend());
temp.setStaffId(recommendShareLogQO.getStaffId());
list.add(temp);
}
}
ServiceResponse<Long> serviceResponse = materialShareLogApiService.saveClerkShareRecommendLog(list);
if (!serviceResponse.isSuccess()) {
return RestResponse.failure("-701", "系统异常");
}
//更新会员推荐时间更新
if(CollectionUtils.isNotEmpty(memberIdList)){
for (String memberId : memberIdList) {
MemberExtraPropertyReq memberExtraPropertyReq = new MemberExtraPropertyReq();
memberExtraPropertyReq.setEnterpriseId(recommendShareLogQO.getEnterpriseId());
memberExtraPropertyReq.setMemberId(memberId);
memberExtraPropertyReq.setExtraKey(MemberExtKeyEnum.MEMBER_GOODS_SUGGEST_TIME.key());
memberExtraPropertyReq.setExtraValue(new Date());
memberExtraPropertyApiService.updateMemberExtraProperty(memberExtraPropertyReq);
}
}
return RestResponse.successResult();
}
/**
* 查询素材落地页信息
*
* @param contentMaterialBaseQO
......@@ -126,7 +201,8 @@ public class ClerkMaterialShareController {
/**
* 生成素材外链跳转地址
* @param materialBaseQO
*
* @param linkShareQO
* @return
*/
@RequestMapping(path = "/clerk/share-material-link", method = RequestMethod.POST)
......
......@@ -9,6 +9,7 @@ import com.gic.content.api.dto.account.AccountAuthorizeDTO;
import com.gic.content.api.dto.account.AccountAuthorizeResultDTO;
import com.gic.content.api.dto.account.ContentAccountInfoDTO;
import com.gic.content.api.enums.ContentAccountQrCodeSourceType;
import com.gic.content.api.enums.ContentAccountStatusEnum;
import com.gic.content.api.qdto.account.AccountGenerateQrCodeQDTO;
import com.gic.content.api.qdto.account.AccountScanQrCodeResultQDTO;
import com.gic.content.api.qdto.account.ContentAccountQDTO;
......@@ -31,6 +32,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
......@@ -86,6 +88,7 @@ public class ContentAccountController {
contentAccountQDTO.setQueryForClerk(Boolean.TRUE);
contentAccountQDTO.setUserCodes(clerkCodes);
contentAccountQDTO.setStoreIds(storeIds);
contentAccountQDTO.setBizType(null);
ServiceResponse<Page<ContentAccountInfoDTO>> serviceResponse =
contentAccountApiService.queryAccountList(contentAccountQDTO);
if (!serviceResponse.isSuccess() || CollectionUtils.isEmpty(serviceResponse.getResult().getResult())) {
......@@ -94,6 +97,7 @@ public class ContentAccountController {
List<ContentAccountInfoVo> contentAccountInfoVos = serviceResponse.getResult()
.getResult()
.stream()
.filter(item -> !Objects.equals(item.getStatus(), ContentAccountStatusEnum.UNBOUND.getCode()))
.map(item -> EntityUtil.changeEntityByJSON(ContentAccountInfoVo.class, item))
.collect(Collectors.toList());
return RestResponse.successResult(contentAccountInfoVos);
......@@ -114,6 +118,7 @@ public class ContentAccountController {
accountGenerateQrCodeQDTO.setSourceType(ContentAccountQrCodeSourceType.HAOBAN.getCode());
accountGenerateQrCodeQDTO.setKey(accountGenerateQrCodeQo.getKey());
accountGenerateQrCodeQDTO.setAccountId(accountGenerateQrCodeQo.getAccountId());
accountGenerateQrCodeQDTO.setBizType(accountGenerateQrCodeQo.getBizType());
ServiceResponse<AccountAuthorizeDTO> serviceResponse = contentAccountApiService.generateQrCode(accountGenerateQrCodeQDTO);
if (!serviceResponse.isSuccess()) {
return RestResponse.failure("500", "生成二维码异常");
......
package com.gic.haoban.manage.web.controller.data;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.clerk.api.dto.ClerkListDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.DataApiUtils;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.web.qo.data.goodsanalysis.GoodsAnalysisClerkDetailQO;
import com.gic.haoban.manage.web.qo.data.goodsanalysis.GoodsAnalysisOverviewQO;
import com.gic.haoban.manage.web.utils.StoreAuthUtils;
import com.gic.haoban.manage.web.vo.data.ClerkDateTrendVO;
import com.gic.haoban.manage.web.vo.data.ClerkUseDetailVO;
import com.gic.haoban.manage.web.vo.data.GoodsAnalysisDateTrendVO;
import com.gic.haoban.manage.web.vo.data.GoodsAnalysisOverviewVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 看数据-商品洞察
*/
@Controller
@RequestMapping("data-goods-analysis")
@Slf4j
public class GoodsAnalysisController {
@Autowired
private StaffApiService staffApiService;
@Autowired
private StoreAuthUtils storeAuthUtils;
@Autowired
private ClerkService clerkService;
/**
* 商品洞察看板(店长、区经)
* @param qo
* @return
*/
@RequestMapping(value = "get-overview-of-manager")
@ResponseBody
public RestResponse<GoodsAnalysisOverviewVO> getOverviewOfManager(@RequestBody GoodsAnalysisOverviewQO qo) {
// boolean isManager = staffApiService.isManager(qo.getClerkId());
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
jsonObject.put("days", storeAuthUtils.getDays(qo.getStartDate(), qo.getEndDate()));
return RestResponse.successResult(storeAuthUtils.getPageOverview(jsonObject, "data_pro_pref_ent_overview", GoodsAnalysisOverviewVO.class));
}
/**
* 导购明细(店长、区经)
* @param qo
* @return
*/
@RequestMapping(value = "get-clerk-detail-of-manager")
@ResponseBody
public RestResponse<Page<ClerkUseDetailVO>> getClerkDetailOfManager(@RequestBody GoodsAnalysisClerkDetailQO qo) {
boolean isFirstPage = qo.getPageNum() == 1;
List<ClerkListDTO> clerkList = clerkService.getClerkByStoreIdOfAllStatus(qo.getEnterpriseId(), qo.getStoreId());
List<String> deleteList = new ArrayList<>();
List<String> normalList = new ArrayList<>();
List<String> allList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(clerkList)) {
for (ClerkListDTO dto : clerkList) {
Integer status = dto.getStatus();
allList.add(dto.getClerkId());
if (status != null && status == 0) {
deleteList.add(dto.getClerkId());
} else {
normalList.add(dto.getClerkId());
}
}
}
if (CollectionUtils.isEmpty(deleteList)) {
deleteList.add("no_delete_clerk_id");
}
if (CollectionUtils.isEmpty(normalList)) {
normalList.add("no_normal_clerk_id");
}
if (CollectionUtils.isEmpty(allList)) {
allList.add("no_clerk_id");
}
//转化金额
qo.setOrderByFields(qo.getOrderByFields() == null ? 12 : qo.getOrderByFields());
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
jsonObject.put("clerkId", normalList.stream().collect(Collectors.joining(",")));
//8:合计 非8:列表
jsonObject.put("storeGroup", "1");
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_pro_pref_clerk_use_detail");
Page page = DataApiUtils.getPageData(res);
List<JSONObject> pageList = page.getResult();
if (pageList == null) {
pageList = new ArrayList<>();
}
if (isFirstPage) {
jsonObject.put("clerkId", allList.stream().collect(Collectors.joining(",")));
JSONObject allTotal = storeAuthUtils.getTotalJson(jsonObject, "data_pro_pref_clerk_use_detail");
if (allTotal != null) {
allTotal.put("clerkName", "门店");
pageList.add(0, allTotal);
}
}
int totalPage = page.getTotalCount() % page.getPageSize() != 0 ? page.getTotalCount() / page.getPageSize() + 1 : page.getTotalCount() / page.getPageSize();
boolean isLastPage = totalPage == qo.getPageNum();
if (isLastPage) {
// 最后一页添加离职导购数据
jsonObject.put("clerkId", deleteList.stream().collect(Collectors.joining(",")));
JSONObject deleteTotal = storeAuthUtils.getTotalJson(jsonObject, "data_pro_pref_clerk_use_detail");
if (deleteTotal != null) {
deleteTotal.put("clerkName", "离职导购(汇总)");
pageList.add(deleteTotal);
}
}
page.setResult(JSONArray.parseArray(JSON.toJSONString(pageList), ClerkUseDetailVO.class));
return RestResponse.successResult(page);
}
/**
* 时间趋势(店长)
* @param qo
* @return
*/
@RequestMapping(value = "get-date-trend-of-manager")
@ResponseBody
public RestResponse<Page<GoodsAnalysisDateTrendVO>> getDateTrendOfManager(@RequestBody GoodsAnalysisClerkDetailQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_pro_pref_ent_date_overview");
Page<GoodsAnalysisDateTrendVO> page = DataApiUtils.getPageData(res, GoodsAnalysisDateTrendVO.class);
return RestResponse.successResult(page);
}
/**
* 导购商品看板
* @param qo
* @return
*/
@RequestMapping(value = "get-overview-of-clerk")
@ResponseBody
public RestResponse<ClerkUseDetailVO> getOverviewOfClerk(@RequestBody GoodsAnalysisOverviewQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
jsonObject.put("clerkId", qo.getClerkId());
jsonObject.put("storeGroup", "1");
return RestResponse.successResult(storeAuthUtils.getPageOverview(jsonObject, "data_pro_pref_clerk_use_detail", ClerkUseDetailVO.class));
}
/**
* 导购趋势
* @param qo
* @return
*/
@RequestMapping(value = "get-date-trend-of-clerk")
@ResponseBody
public RestResponse<Page<ClerkDateTrendVO>> getDateTrendOfClerk(@RequestBody GoodsAnalysisClerkDetailQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
jsonObject.put("clerkId", qo.getClerkId());
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_pro_pref_clerk_date_overview");
Page<ClerkDateTrendVO> page = DataApiUtils.getPageData(res, ClerkDateTrendVO.class);
return RestResponse.successResult(page);
}
}
......@@ -52,6 +52,11 @@ public class ContentMaterialShareQO implements Serializable {
*/
private String goodsDetailSource;
/**
* 是否预览 1是 0否
*/
private Integer isPreview;
public String getEnterpriseId() {
return enterpriseId;
}
......@@ -115,4 +120,12 @@ public class ContentMaterialShareQO implements Serializable {
public void setGoodsDetailSource(String goodsDetailSource) {
this.goodsDetailSource = goodsDetailSource;
}
public Integer getIsPreview() {
return isPreview;
}
public void setIsPreview(Integer isPreview) {
this.isPreview = isPreview;
}
}
package com.gic.haoban.manage.web.qo.content.account;
import com.gic.content.api.enums.ContentAccountBizTypeEnum;
import java.io.Serializable;
/**
......@@ -30,6 +32,11 @@ public class AccountGenerateQrCodeQo implements Serializable {
*/
private String key;
/**
* 渠道类型 1 视频号 2 小红书
*/
private Integer bizType = ContentAccountBizTypeEnum.WX_VIDEO.getCode();
public String getEnterpriseId() {
return enterpriseId;
}
......@@ -61,4 +68,12 @@ public class AccountGenerateQrCodeQo implements Serializable {
public void setKey(String key) {
this.key = key;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
}
package com.gic.haoban.manage.web.qo.content.account;
import com.gic.content.api.enums.ContentAccountBizTypeEnum;
import java.io.Serializable;
/**
......@@ -27,6 +29,11 @@ public class AccountScanResultQo implements Serializable {
*/
private String enterpriseId;
/**
* 渠道类型 1 视频号 2 小红书
*/
private Integer bizType = ContentAccountBizTypeEnum.WX_VIDEO.getCode();
public String getKey() {
return key;
}
......@@ -50,4 +57,12 @@ public class AccountScanResultQo implements Serializable {
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
}
package com.gic.haoban.manage.web.qo.content.log;
import java.io.Serializable;
import java.util.List;
/**
* @author shangfeng
* @date 2024-08-27 16:57:54
*/
public class RecommendShareLogQO implements Serializable {
private static final long serialVersionUID = 2329468480342306582L;
/**
* 企业id
*/
private String enterpriseId;
/**
* 微信企业id
*/
private String wxEnterpriseId;
/**
* 门店id
*/
private String storeId;
/**
* 导购id
*/
private String clerkId;
/**
* 商品id
*/
private List<String> goodsIdList;
/**
* 成员id
*/
private String staffId;
/**
* 会员信息
*/
private List<MemberInfo> memberInfoList;
/**
* 微信unionId
*/
private String unionId;
/**
* 额外数据
*/
private String extend;
public static class MemberInfo implements Serializable {
private static final long serialVersionUID = -6888489586106817983L;
private String memberId;
private String externalUserId;
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getExternalUserId() {
return externalUserId;
}
public void setExternalUserId(String externalUserId) {
this.externalUserId = externalUserId;
}
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getClerkId() {
return clerkId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public List<String> getGoodsIdList() {
return goodsIdList;
}
public void setGoodsIdList(List<String> goodsIdList) {
this.goodsIdList = goodsIdList;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public List<MemberInfo> getMemberInfoList() {
return memberInfoList;
}
public void setMemberInfoList(List<MemberInfo> memberInfoList) {
this.memberInfoList = memberInfoList;
}
public String getUnionId() {
return unionId;
}
public void setUnionId(String unionId) {
this.unionId = unionId;
}
public String getExtend() {
return extend;
}
public void setExtend(String extend) {
this.extend = extend;
}
}
package com.gic.haoban.manage.web.qo.data.goodsanalysis;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoodsAnalysisClerkDetailQO implements Serializable {
/**
* 排序字段
*/
private Integer orderByFields;
/**
* 排序类型 1升序 2降序
*/
private Integer orderByType;
private String startDate;
private String endDate;
private Integer pageNum;
private Integer pageSize;
private String storeId;
@JSONField(serialize = false)
private String clerkId;
private String enterpriseId;
public Integer getPageNum() {
return pageNum == null ? 1 : pageNum;
}
public Integer getPageSize() {
return pageSize == null ? 10 : pageSize;
}
public Integer getOrderByType() {
return orderByType == null ? 2 : orderByType;
}
}
package com.gic.haoban.manage.web.qo.data.goodsanalysis;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoodsAnalysisOverviewQO implements Serializable {
private String storeId;
/**
*
*/
@JSONField(serialize = false)
private String clerkId;
private String startDate;
private String endDate;
private String enterpriseId;
}
package com.gic.haoban.manage.web.utils;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.switcher.Switcher;
import com.gic.commons.switcher.SwitcherNamespace;
import java.util.List;
@SwitcherNamespace("BUZ.qywx.open")
public class CustomSwitcher {
@Switcher
public static List<JSONObject> haoban_ai_custom ;
}
\ No newline at end of file
package com.gic.haoban.manage.web.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.DataApiUtils;
import com.gic.commons.util.DateUtil;
import com.gic.haoban.manage.api.service.StaffApiService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -8,8 +13,10 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* @Author guojx
......@@ -22,6 +29,16 @@ public class StoreAuthUtils {
@Autowired
private StaffApiService staffApiService;
public JSONObject getTotalJson(JSONObject param, String apolloKey) {
Map<String, Object> totalRes = DataApiUtils.http(param.toJSONString(), apolloKey);
List<JSONObject> totalList = DataApiUtils.getPageList(totalRes);
if (CollectionUtils.isEmpty(totalList)) {
return null;
}
JSONObject total = totalList.get(0);
return total;
}
/**
* 查询区经角色下管辖的门店权限
* @param clerkId
......@@ -41,4 +58,43 @@ public class StoreAuthUtils {
}
return storeIds;
}
public <T> T getPageOverview(JSONObject jsonParam, String apolloKey, Class clazz) {
List<T> list = getPageTrend(jsonParam, apolloKey, clazz, null);
if (list != null) {
return list.get(0);
}
return null;
}
public <T> List<T> getPageTrend(JSONObject jsonParam, String apolloKey, Class clazz, Integer pageSize) {
if (jsonParam == null) {
jsonParam = new JSONObject();
}
jsonParam.put("pageNum", 1);
jsonParam.put("orderByFields", 1);
jsonParam.put("orderByType", 1);
jsonParam.put("pageSize", pageSize == null ? 1 : pageSize);
if (!jsonParam.containsKey("storeGroup")) {
jsonParam.put("storeGroup", 8);
}
Map<String, Object> res = DataApiUtils.http(jsonParam.toJSONString(), apolloKey);
List<JSONObject> list = DataApiUtils.getPageList(res);
if (CollectionUtils.isNotEmpty(list)) {
return (List<T>) JSONArray.parseArray(JSON.toJSONString(list), clazz);
}
return null;
}
public Integer getDays(String startDate, String endDate) {
if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return DateUtil.daysBetween(sdf.parse(startDate), sdf.parse(endDate)) + 1;
} catch (Exception e) {
}
}
return null;
}
}
package com.gic.haoban.manage.web.utils;
import com.gic.commons.switcher.SwitcherApplication;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import java.util.concurrent.atomic.AtomicBoolean;
@Component
public class SwitcherInitialization implements InitializingBean {
static AtomicBoolean INIT = new AtomicBoolean(false);
@Override
public void afterPropertiesSet() throws Exception {
SwitcherApplication.init(CustomSwitcher.class);
}
}
\ No newline at end of file
package com.gic.haoban.manage.web.vo;
import java.io.Serializable;
public class AiCustomVO implements Serializable {
private int isOpen = 0 ;
private String eid ;
private String url ;
private String img ;
private String path ;
private String qrcode ;
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getQrcode() {
return qrcode;
}
public void setQrcode(String qrcode) {
this.qrcode = qrcode;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
public int getIsOpen() {
return isOpen;
}
public void setIsOpen(int isOpen) {
this.isOpen = isOpen;
}
public String getEid() {
return eid;
}
public void setEid(String eid) {
this.eid = eid;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
......@@ -17,7 +17,6 @@ public class AuditSettingVO implements Serializable {
private Date updateTime;
private Integer statusFlag;
private Integer clerkChangeFlag;
private int wxEnterpriseType;
......@@ -25,9 +24,19 @@ public class AuditSettingVO implements Serializable {
private int freshFriendFlag;
// 是否显示会员签到
private int showMemberSign ;
// 是否显示ai换装
private int showAiCustom ;
private JSONObject shareMemberSignInfo ;
public int getShowAiCustom() {
return showAiCustom;
}
public void setShowAiCustom(int showAiCustom) {
this.showAiCustom = showAiCustom;
}
private static final long serialVersionUID = 1L;
public JSONObject getShareMemberSignInfo() {
......
......@@ -21,6 +21,24 @@ public class StoreMemberVO implements Serializable {
private String storeImg;
private int clerkType;
private int bindFlag;
private String clerkName ;
private String clerkHead ;
public String getClerkHead() {
return clerkHead;
}
public void setClerkHead(String clerkHead) {
this.clerkHead = clerkHead;
}
public String getClerkName() {
return clerkName;
}
public void setClerkName(String clerkName) {
this.clerkName = clerkName;
}
public String getUserId() {
return userId;
......
......@@ -12,7 +12,10 @@ public class ContentAccountInfoVo implements Serializable {
private static final long serialVersionUID = -3355601918337775024L;
/**
* 渠道类型 1 视频号 2 小红书
*/
private Integer bizType;
/**
* 账号名称
*/
......@@ -31,9 +34,18 @@ public class ContentAccountInfoVo implements Serializable {
* 账号授权状态
* 1 授权中
* 2 已过期
* 3 已解绑
*/
private Integer status;
public Integer getBizType() {
return bizType;
}
public void setBizType(Integer bizType) {
this.bizType = bizType;
}
public String getAccountName() {
return accountName;
}
......
package com.gic.haoban.manage.web.vo.data;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/6/26 13:36
*/
@Data
public class ClerkDateTrendVO implements Serializable {
/**
* 1人找货次数
*/
private Long perToProCnt;
/**
* 2货找人次数
*/
private Long proToPerCnt;
/**
* 3使用天数
*/
private Long useDay;
/**
* 4推荐商品数量
*/
private Long shareProCnt;
/**
* 5触达客户数
*/
private Long touchNum;
/**
* 6商城转化客户数
*/
private Long onlineConvsNum;
/**
* 7商城转化金额
*/
private Double onlineConvsPayAmt;
/**
* 8线下转化客户数
*/
private Long offlineConvsNum;
/**
* 9线下转化金额
*/
private Double offlineConvsPayAmt;
/**
* 10商城转化商品数
*/
private Long onlineConvsProCnt;
/**
* 11线下转化商品数
*/
private Long offlineConvsProCnt;
/**
* 12转化金额
*/
private Double convsPayAmt;
/**
* 13转化客户数
*/
private Long convsNum;
/**
* 14转化商品数
*/
private Long convsProCnt;
/**
* 15点击客户数
*/
private Double clickNum;
/**
* 16点击率
*/
private Double clickRate;
/**
* 17转化率
*/
private Double convsRate;
/**
*
*/
private String clerkCode;
private String clerkName;
private String storeName;
private String storeCode;
/**
* 日期
*/
private String bizDate;
}
package com.gic.haoban.manage.web.vo.data;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/6/26 13:36
*/
@Data
public class ClerkUseDetailVO implements Serializable {
/**
* 1人找货次数
*/
private Long perToProCnt;
/**
* 2货找人次数
*/
private Long proToPerCnt;
/**
* 3使用天数
*/
private Long useDay;
/**
* 4推荐商品数量
*/
private Long shareProCnt;
/**
* 5触达客户数
*/
private Long touchNum;
/**
* 6商城转化客户数
*/
private Long onlineConvsNum;
/**
* 7商城转化金额
*/
private Double onlineConvsPayAmt;
/**
* 8线下转化客户数
*/
private Long offlineConvsNum;
/**
* 9线下转化金额
*/
private Double offlineConvsPayAmt;
/**
* 10商城转化商品数
*/
private Long onlineConvsProCnt;
/**
* 11线下转化商品数
*/
private Long offlineConvsProCnt;
/**
* 12转化金额
*/
private Double convsPayAmt;
/**
* 13转化客户数
*/
private Long convsNum;
/**
* 14转化商品数
*/
private Long convsProCnt;
/**
* 15点击客户数
*/
private Double clickNum;
/**
*
*/
private String clerkCode;
private String clerkName;
private String storeName;
private String storeCode;
}
package com.gic.haoban.manage.web.vo.data;
import lombok.Data;
import java.io.Serializable;
@Data
public class GoodsAnalysisDateTrendVO implements Serializable {
/**
* 1推荐商品数
*/
private Long shareProCnt;
/**
* 2转化商品数
*/
private Long convsProCnt;
/**
* 3转化金额
*/
private Double convsPayAmt;
/**
* 4商城转化商品数
*/
private Long onlineConvsProCnt;
/**
* 5商城转化客户数
*/
private Long onlineConvsNum;
/**
* 6商城转化金额
*/
private Double onlineConvsPayAmt;
/**
* 7线下转化商品数
*/
private Long offlineConvsProCnt;
/**
* 8线下转化客户数
*/
private Long offlineConvsNum;
/**
* 9线下转化金额
*/
private Double offlineConvsPayAmt;
/**
* 10访问导购数
*/
private Long visitNum;
/**
* 11使用导购数
*/
private Long useNum;
/**
* 12使用率
*/
private Double useRate;
/**
* 13触达客户数
*/
private Long touchNum;
/**
* 14点击客户数
*/
private Long clickNum;
/**
* 15点击率
*/
private Double clickRate;
/**
* 16转化客户数
*/
private Long convsNum;
/**
* 17转化率
*/
private Double convsRate;
/**
* 18人找货次数
*/
private Long perToProCnt;
/**
* 20分享商品转化数
*/
private Long proToPerCnt;
/**
* 20分享商品转化数
*/
private Long shareConvsProCnt;
/**
* 日期
*/
private String bizDate;
}
package com.gic.haoban.manage.web.vo.data;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/9/02 09:30
*/
@Data
public class GoodsAnalysisOverviewVO implements Serializable {
/**
* 1推荐商品数
*/
private Long shareProCnt;
/**
* 2转化商品数
*/
private Long convsProCnt;
/**
* 3转化金额
*/
private Double convsPayAmt;
/**
* 10日均访问导购数
*/
private Double avgVisitNum;
/**
* 11日均使用导购数
*/
private Double avgUseNum;
/**
* 13触达客户数
*/
private Long touchNum;
/**
* 16转化客户数
*/
private Long convsNum;
}
......@@ -173,6 +173,12 @@
<dubbo:reference id="enterpriseChannelApiService" interface="com.gic.enterprise.api.service.EnterpriseChannelApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference id="storeRankApiService" interface="com.gic.enterprise.api.service.rank.StoreRankApiService" timeout="100000" retries="0" check="false" />
<dubbo:reference id="enterpriseWxaLinkService" interface="com.gic.enterprise.api.service.EnterpriseWxaLinkService" timeout="100000" retries="0" check="false" />
<dubbo:reference id="memberExtraPropertyApiService" interface="com.gic.member.api.service.extra.MemberExtraPropertyApiService" timeout="100000" retries="0" check="false" />
<dubbo:reference id="gatheringActivityApiService" interface="com.gic.marketing.pro.api.service.activity.GatheringActivityApiService"
timeout="10000" retries="0" check="false"/>
......
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