Commit dfbe4484 by 徐高华

Merge branch 'feature/xgh/202506迭代' into 'master'

Feature/xgh/202506迭代

See merge request !3061
parents c36e009e 86f9c432
......@@ -47,8 +47,45 @@ public class GroupChatHmDTO implements Serializable {
private Integer statusFlag ;
// 可以群数
private Integer usableChatCount;
private String storeId ;
private String storeName ;
private String storeCode ;
// 0已删除 1有效
private int storeStatus ;
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public String getStoreCode() {
return storeCode;
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
public int getStoreStatus() {
return storeStatus;
}
public void setStoreStatus(int storeStatus) {
this.storeStatus = storeStatus;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public Integer getUsableChatCount() {
return usableChatCount;
}
......
......@@ -28,7 +28,17 @@ public class GroupChatOwnerDTO implements Serializable {
private String wxOpenUserId;
private java.util.Date createTime;
private java.util.Date updateTime;
private String storeNames ;
public String getStoreNames() {
return storeNames;
}
public void setStoreNames(String storeNames) {
this.storeNames = storeNames;
}
public String getWxUserId() {
return wxUserId;
}
......
......@@ -46,6 +46,17 @@ public class HmLinkDTO implements Serializable {
// 群活码配置
private List<HmLinkChatDTO> linkChatList ;
// [{"type":1服务门店2协管3lbs4指定人群,"open":1}]
private String chatStoreRule ;
public String getChatStoreRule() {
return chatStoreRule;
}
public void setChatStoreRule(String chatStoreRule) {
this.chatStoreRule = chatStoreRule;
}
public List<HmLinkChatDTO> getLinkChatList() {
return linkChatList;
}
......
......@@ -31,6 +31,25 @@ public class HmLinkStoreDTO implements Serializable {
private java.util.Date createTime;
private java.util.Date updateTime;
private double distance ;
private String distanceStr ;
public double getDistance() {
return distance;
}
public void setDistance(double distance) {
this.distance = distance;
}
public String getDistanceStr() {
return distanceStr;
}
public void setDistanceStr(String distanceStr) {
this.distanceStr = distanceStr;
}
public String getStoreAddress() {
return storeAddress;
}
......
......@@ -25,7 +25,7 @@ public class HmLinkWxaDTO implements Serializable {
// 二维码
private String hmQrcode;
// 自定义门店规则1推荐门店 2附近门店
// 自定义门店规则1推荐门店 2附近门店 3:获取群活码需要传入经纬度
private int storeType;
// 是否展示省市区门店查询
private int selectStoreFlag;
......@@ -40,6 +40,18 @@ public class HmLinkWxaDTO implements Serializable {
*/
private Integer qwFriendFlag ;
// 是否群活码
private boolean isGroupChatHm ;
public boolean isGroupChatHm() {
return isGroupChatHm;
}
public void setGroupChatHm(boolean isGroupChatHm) {
this.isGroupChatHm = isGroupChatHm;
}
public Integer getQwFriendFlag() {
return qwFriendFlag;
}
......
......@@ -78,6 +78,26 @@ public class QwMomentPlanDTO implements Serializable{
*/
private List<QwMomentPlanAttendDTO> clerkList ;
private Integer analyseFlag ;
private Integer analyseDay ;
public Integer getAnalyseFlag() {
return analyseFlag;
}
public void setAnalyseFlag(Integer analyseFlag) {
this.analyseFlag = analyseFlag;
}
public Integer getAnalyseDay() {
return analyseDay;
}
public void setAnalyseDay(Integer analyseDay) {
this.analyseDay = analyseDay;
}
public Integer getMediaLinkFlag() {
return mediaLinkFlag;
}
......
......@@ -23,6 +23,17 @@ public class ChatHmSearchQDTO extends PageQo implements Serializable {
private List<String> creatorIdList;
private Integer linkCount;
private int allFlag;
private String storeId ;
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getSearchParamsCode() {
return searchParamsCode;
}
......
......@@ -26,7 +26,38 @@ public class OwnerSearchQDTO implements Serializable {
private List<String> departmentIdList ;
// 1查询在职 2查离职
private int status = 1;
// 选择的企业id(过滤条件)
private String paramsEnterpriseId ;
// 显示门店名称的企业
private String showNameEnterpriseId ;
// 是否需要显示门店名称
private int showStoreNames ;
public String getShowNameEnterpriseId() {
return showNameEnterpriseId;
}
public void setShowNameEnterpriseId(String showNameEnterpriseId) {
this.showNameEnterpriseId = showNameEnterpriseId;
}
public int getShowStoreNames() {
return showStoreNames;
}
public void setShowStoreNames(int showStoreNames) {
this.showStoreNames = showStoreNames;
}
public String getParamsEnterpriseId() {
return paramsEnterpriseId;
}
public void setParamsEnterpriseId(String paramsEnterpriseId) {
this.paramsEnterpriseId = paramsEnterpriseId;
}
public List<String> getDepartmentIdList() {
return departmentIdList;
}
......
......@@ -49,6 +49,17 @@ public class GroupChatActivityHmQDTO implements Serializable {
private GroupChatActivityDTO chatActivity;
// 指定门店
private String inStoreId ;
public String getInStoreId() {
return inStoreId;
}
public void setInStoreId(String inStoreId) {
this.inStoreId = inStoreId;
}
public Long getChatActivityId() {
return chatActivityId;
}
......
package com.gic.haoban.manage.api.qdto.chat;
import java.io.Serializable;
public class LinkHmFromWxaQDTO implements Serializable {
/**
* 纬度
*/
private String latitude;
/**
* 经度
*/
private String longitude;
/**
* 省市编码
*/
private String districtCode;
/**
* 小程序是否需要位置信息的查询
*/
private Integer justLocationFlag ;
public Integer getJustLocationFlag() {
return justLocationFlag;
}
public void setJustLocationFlag(Integer justLocationFlag) {
this.justLocationFlag = justLocationFlag;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public String getDistrictCode() {
return districtCode;
}
public void setDistrictCode(String districtCode) {
this.districtCode = districtCode;
}
}
......@@ -63,6 +63,9 @@ public interface HandoverOperationApiService {
*/
public Page<HandoverExternalDTO> pageHandoverFriend(String wxEnterpriseId, String search, List<String> staffIds, List<String> transferIds, BasePageInfo pageInfo);
List<HandoverExternalDTO> listAllHandoverFriend(String wxEnterpriseId, String search, List<String> staffIds);
/**
* 分配的客户列表
*
......
......@@ -97,4 +97,6 @@ public interface MaterialApiService {
//mediaType1群发 2朋友圈
public List<String> getImageMediaId(String wxEnterpriseId, List<ContentMaterialDTO> imageList, int mediaType) ;
void getImageMediaId(String wxEnterpriseId, List<String> idList) ;
}
......@@ -88,7 +88,7 @@ public interface QywxTagApiService {
/**
* 同步企业微信导入gic的会员标签
* 企业微信打标-gic侧的处理
*
* @param wxEnterpriseId
* @param externalUserId
......
......@@ -5,6 +5,7 @@ import java.util.List;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.hm.HmLinkDTO;
import com.gic.haoban.manage.api.dto.hm.HmLinkWxaDTO;
import com.gic.haoban.manage.api.qdto.chat.LinkHmFromWxaQDTO;
/**
*
......@@ -53,7 +54,10 @@ public interface HmLinkApiService {
*/
public ServiceResponse<HmLinkWxaDTO> getLinkHmFromWxa(String enterpriseId, Integer whitchStore, String storeId,
String clerkId, String linkShortCode, String mixPhone, String unionid , String memberId);
public ServiceResponse<HmLinkWxaDTO> getLinkHmFromWxa(String enterpriseId, Integer whitchStore, String storeId,
String clerkId, String linkShortCode, String mixPhone, String unionid , String memberId , LinkHmFromWxaQDTO qdto);
/**
*
* @Title: getMemberClerkHm
......
......@@ -135,7 +135,7 @@ public class QywxCallbackController extends WebBaseController {
private void chat(String uuid, JSONObject json) {
int msgtype = json.getIntValue("msgtype");
// 群发任务
if (msgtype == 573) {
if (msgtype == 573 || msgtype==529) {
json.put("uuid", uuid);
this.openQwApiService.saveNotice(json.toJSONString());
return;
......
......@@ -158,6 +158,21 @@ function corpidToken() {
});
}
function corpidTokenSelf() {
var corpids = $("#corpids").val() ;
if(!corpids || corpids.indexOf("#")==-1) {
alert("请输入corpid#secret") ;
return ;
}
$.ajax({
type:"post",
url: host+'/gic/weixin3th/qywx-token/reflush-token?tokenType=4&corpid='+corpids.split("#")[0]+"&suiteId="+corpids.split("#")[1] ,
success:function(retData) {
alert("已刷新")
}
});
}
function suiteToken() {
$.ajax({
type:"post",
......@@ -183,6 +198,7 @@ function provideToken() {
<body>
<div class="container" id="couponDiv">
<div class="tab-pane" id="tab2" style="padding:5px">
<button onclick="corpidTokenSelf()">自建应用token强刷(access-token)</button>
<button onclick="corpidToken()">企业应用token(access-token)</button>
<button onclick="suiteToken()">好办应用token(suite-access-token)</button>
<button onclick="provideToken()">服务商token</button>
......
package com.gic.haoban.manage.service.dao.mapper;
import com.gic.haoban.manage.api.dto.HandoverExternalDTO;
import com.gic.haoban.manage.api.dto.HandoverStaffFriendCountDTO;
import com.gic.haoban.manage.service.entity.TabHandoverExternal;
import org.apache.ibatis.annotations.Mapper;
......@@ -76,4 +77,6 @@ public interface HandoverExternalMapper {
* @return
*/
List<HandoverStaffFriendCountDTO> listPreCountByStaffIds(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds);
List<TabHandoverExternal> listAllByStaffIds(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds, @Param("search") String search, @Param("status") Integer status);
}
\ No newline at end of file
......@@ -3,6 +3,7 @@ package com.gic.haoban.manage.service.dao.mapper;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.service.entity.TabHaobanStaffClerkRelation;
import com.gic.haoban.manage.service.entity.ext.MemberStaffRelExtDO;
import com.gic.haoban.manage.service.pojo.StaffStoreNumBO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
......@@ -150,4 +151,6 @@ public interface TabHaobanStaffClerkRelationMapper {
List<TabHaobanStaffClerkRelation> taskoverClerkIdListAll(@Param("staffId")String staffId) ;
List<String> listAllStaffIdForOpenStaff(@Param("enterpriseId")String enterpriseId, @Param("wxEnterpriseId")String wxEnterpriseId, @Param("clerkId") String clerkId, @Param(("storeIdList")) List<String> storeIdList);
List<StaffStoreNumBO> staffStoreNum(@Param("staffIdList")List<String> staffIdList);
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.dao.mapper.chat;
import java.util.List;
import com.gic.haoban.manage.service.pojo.HmStoreNumBO;
import org.apache.ibatis.annotations.Param;
import com.gic.haoban.manage.api.dto.qdto.chat.ChatHmSearchQDTO;
......@@ -33,5 +34,9 @@ public interface GroupChatHmMapper {
public List<TabGroupChatHm> list(ChatHmSearchQDTO qdto);
List<TabGroupChatHm> listByStoreIdList(@Param("storeIdList") List<String> storeIdList) ;
List<TabGroupChatHm> listAvailableByEnterpriseId(@Param("enterpriseId") String enterpriseId);
List<HmStoreNumBO> hasManyOwnerStore(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("chatHmIdList") List<Long> chatHmIdList);
}
\ No newline at end of file
......@@ -54,6 +54,10 @@ public interface WxUserAddLogMapper {
public TabWxUserAddLog selectNewLog(@Param("externalUserid") String externalUserid,
@Param("staffId") String staffId);
public TabWxUserAddLog listNewLog(@Param("externalUserid") String externalUserid,
@Param("staffId") String staffId , @Param("friendClerkId")String friendClerkId);
/**
*
* @Title: listAllForDel
......
......@@ -41,6 +41,15 @@ public class TabGroupChatHm implements Serializable{
// 1有效 2作废 3待生效
private Integer statusFlag ;
private Integer linkCount ;
private String storeId ;
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public Integer getLinkCount() {
return linkCount;
......
......@@ -43,6 +43,16 @@ public class TabHmLink implements Serializable {
private Long otherChatHmId ;
private String chatStoreRule ;
public String getChatStoreRule() {
return chatStoreRule;
}
public void setChatStoreRule(String chatStoreRule) {
this.chatStoreRule = chatStoreRule;
}
public Long getOtherChatHmId() {
return otherChatHmId;
}
......
......@@ -82,6 +82,25 @@ public class TabQwMomentPlan implements Serializable{
*/
private Integer mediaLinkFlag ;
private Integer analyseFlag ;
private Integer analyseDay ;
public Integer getAnalyseFlag() {
return analyseFlag;
}
public void setAnalyseFlag(Integer analyseFlag) {
this.analyseFlag = analyseFlag;
}
public Integer getAnalyseDay() {
return analyseDay;
}
public void setAnalyseDay(Integer analyseDay) {
this.analyseDay = analyseDay;
}
public Integer getMediaLinkFlag() {
return mediaLinkFlag;
}
......
package com.gic.haoban.manage.service.pojo;
import java.io.Serializable;
public class HmStoreNumBO implements Serializable {
private Long chatHmId ;
private int num ;
public Long getChatHmId() {
return chatHmId;
}
public void setChatHmId(Long chatHmId) {
this.chatHmId = chatHmId;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
package com.gic.haoban.manage.service.pojo;
import java.io.Serializable;
public class StaffStoreNumBO implements Serializable {
private String staffId ;
private int num ;
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
......@@ -44,6 +44,16 @@ public class GroupChatHmBO implements Serializable{
private Integer statusFlag ;
// 可以群数
private Integer usableChatCount;
private String storeId ;
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public Integer getUsableChatCount() {
return usableChatCount;
......
......@@ -41,6 +41,16 @@ public class HmLinkBO implements Serializable {
/**0删除 1正常*/
private Integer statusFlag;
private Long otherChatHmId ;
// [{"type":1服务门店2协管3lbs4指定人群,"open":1}]
private String chatStoreRule ;
public String getChatStoreRule() {
return chatStoreRule;
}
public void setChatStoreRule(String chatStoreRule) {
this.chatStoreRule = chatStoreRule;
}
public Long getOtherChatHmId() {
return otherChatHmId;
......
......@@ -123,4 +123,6 @@ public interface HandoverService {
Boolean filterHandoverStaff(String wxEnterpriseId, String wxUserId);
public void delHandoverStaff(String wxEnterpriseId, List<String> wxUserIds) ;
List<HandoverExternalDTO> listAllByStaffIds(String wxEnterpriseId, String search, List<String> staffIds);
}
......@@ -204,4 +204,6 @@ public interface StaffClerkRelationService {
List<String> listAllStaffIdForOpenStaff(String enterpriseId,String wxEnterpriseId,String clerkId , List<String> storeIdList);
ServiceResponse<Map<String, List<String>>> listClerkForCanvas(String wxEnterpriseId, String enterpriseId, String creatorId, String storeFilterId);
Map<String,Boolean> staffManyStore(List<String> staffIdList);
}
package com.gic.haoban.manage.service.service.chat;
import java.util.List;
import java.util.Map;
import com.gic.api.base.commons.BasePageInfo;
import com.gic.api.base.commons.Page;
......@@ -63,4 +64,11 @@ public interface GroupChatHmService {
Page<GroupChatHmMemberRelationDTO> memberGroupChatHmPage(String enterpriseId, String memberId, BasePageInfo basePageInfo);
Integer memberJoinGroupChatHmCount(String enterpriseId, String memberId);
/**
* 活码包含的群主有多个门店
* @param wxEnterpriseId
* @return
*/
Map<Long,Boolean> hasManyOwnerStore(String wxEnterpriseId, List<Long> chatHmIdList);
}
\ No newline at end of file
package com.gic.haoban.manage.service.service.chat.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
import com.gic.haoban.manage.api.dto.chat.GroupChatHmMemberRelationDTO;
import com.gic.haoban.manage.service.dao.mapper.chat.*;
import com.gic.haoban.manage.service.pojo.HmStoreNumBO;
import com.gic.haoban.manage.service.pojo.bo.chat.GroupChatHmMemberRelationBO;
import com.gic.haoban.manage.service.service.chat.GroupChatUserService;
import org.apache.commons.collections.CollectionUtils;
......@@ -471,4 +465,18 @@ public class GroupChatHmServiceImpl implements GroupChatHmService {
public Integer memberJoinGroupChatHmCount(String enterpriseId, String memberId) {
return groupChatUserMapper.getMemberJoinChatGroupCountByHmName(enterpriseId, memberId, "骑行");
}
@Override
public Map<Long,Boolean> hasManyOwnerStore(String wxEnterpriseId, List<Long> chatHmIdList) {
Map<Long, Boolean> map = new HashMap<>() ;
List<HmStoreNumBO> list = this.groupChatHmMapper.hasManyOwnerStore(wxEnterpriseId, chatHmIdList);
if(CollectionUtils.isNotEmpty(list)) {
list.forEach(item -> {
map.put(item.getChatHmId(),item.getNum()>1) ;
}) ;
}
return map ;
}
}
\ No newline at end of file
......@@ -1122,6 +1122,40 @@ public class GroupChatServiceImpl implements GroupChatService {
PageHelper.startPage(basePageInfo);
List<GroupChatOwnerDTO> list = this.groupChatOwnerMapper.listOwner(qdto);
Page<GroupChatOwnerDTO> retPage = PageHelperUtils.changePageHelperToCurrentPage(list, GroupChatOwnerDTO.class);
// 拼门店名称
if(CollectionUtils.isNotEmpty(retPage.getResult()) && qdto.getShowStoreNames()==1 && StringUtils.isNotBlank(qdto.getShowNameEnterpriseId())) {
List<String> staffIdList = retPage.getResult().stream().map(GroupChatOwnerDTO::getStaffId).collect(Collectors.toList());
List<StaffClerkRelationDTO> staffList = this.staffClerkRelationService.listByWxEnterpriseIdAndStaffId(qdto.getWxEnterpriseId(),staffIdList.stream().collect(Collectors.toSet())) ;
Map<String,List<StaffClerkRelationDTO>> staffMap = staffList.stream().collect(Collectors.groupingBy(StaffClerkRelationDTO::getStaffId)) ;
staffList = staffList.stream().filter(o->o.getEnterpriseId().equals(qdto.getShowNameEnterpriseId()) && StringUtils.isNotBlank(o.getStoreId())).collect(Collectors.toList());
Map<String,String> storeNameMap = new HashMap<>() ;
if(CollectionUtils.isNotEmpty(staffList)) {
List<String> storeIdList = staffList.stream().filter(o->StringUtils.isNotEmpty(o.getStoreId())).map(o->o.getStoreId()).collect(Collectors.toList()) ;
if(CollectionUtils.isNotEmpty(storeIdList)) {
String[] arr = new String[storeIdList.size()] ;
for(int i=0;i<storeIdList.size();i++) {
arr[i] = storeIdList.get(i) ;
}
List<StoreDTO> storeList = this.storeService.getStores(arr) ;
if(CollectionUtils.isNotEmpty(storeList)) {
storeNameMap = storeList.stream().collect(Collectors.toMap(StoreDTO::getStoreId, o->o.getStoreName(),(k1,k2)->k1)) ;
}
}
}
for(GroupChatOwnerDTO item : retPage.getResult()) {
String staffId = item.getStaffId() ;
List<StaffClerkRelationDTO> relationList = staffMap.get(staffId) ;
List<String> storeNameList = new ArrayList<>() ;
if(CollectionUtils.isNotEmpty(relationList)) {
for (StaffClerkRelationDTO relation : relationList) {
if(StringUtils.isNotBlank(relation.getStoreId()) && storeNameMap.containsKey(relation.getStoreId())) {
storeNameList.add(storeNameMap.get(relation.getStoreId()));
}
}
}
item.setStoreNames(String.join("、", storeNameList));
}
}
return retPage;
}
......
......@@ -21,7 +21,7 @@ public interface HmLinkChatService {
public List<HmLinkChatDTO> listByLinkId(String wxEnterpriseId, String enterpriseId, Long linkId);
public int save(Long linkId, List<HmLinkChatDTO> list , Long otherHmId , TabHmLink link);
public int save(String wxEnterpriseId,String enterpriseId,Long linkId, List<HmLinkChatDTO> list , Long otherHmId , TabHmLink link);
public Page<HmLinkChatDTO> listPage(HmLinkChatQDTO qdto, BasePageInfo basePageInfo);
......
......@@ -46,48 +46,49 @@ public class HmLinkChatServiceImpl implements HmLinkChatService {
}
@Override
public int save(Long linkId, List<HmLinkChatDTO> list, Long otherHmId, TabHmLink link) {
public int save(String wxEnterpriseId,String enterpriseId,Long linkId, List<HmLinkChatDTO> list, Long otherHmId, TabHmLink oldLink) {
log.info("保存群链接={}", JSON.toJSONString(list));
List<HmLinkChatDTO> updateList = list.stream().filter(dto -> null != dto.getLinkChatId())
.collect(Collectors.toList());
List<Long> notDelIdList = updateList.stream().map(dto -> dto.getLinkChatId()).collect(Collectors.toList());
log.info("不删除关联群活码={},{}", linkId, notDelIdList);
String wxEnterpriseId = list.get(0).getWxEnterpriseId();
String enterpriseId = list.get(0).getEnterpriseId();
// 先查出历史记录
List<HmLinkChatDTO> oldList = this.hmLinkChatMapper.listByLinkId(wxEnterpriseId, enterpriseId, linkId);
this.hmLinkChatMapper.delete(linkId, notDelIdList , 0);
if (CollectionUtils.isNotEmpty(updateList)) {
for (HmLinkChatDTO item : updateList) {
TabHmLinkChat entity = EntityUtil.changeEntityByJSON(TabHmLinkChat.class, item);
this.hmLinkChatMapper.update(entity);
if (item.getMemberType() == 0) {
screeningDetailService.save(HmLinkChatService.ES_ID + entity.getLinkChatId(), item.getSearchJson());
List<HmLinkChatDTO> oldList = this.hmLinkChatMapper.listByLinkId(wxEnterpriseId, enterpriseId, linkId) ;
if(CollectionUtils.isEmpty(list)) {
log.info("删除关联群活码={},{}", linkId, null);
this.hmLinkChatMapper.delete(linkId, null , 0);
}
if(CollectionUtils.isNotEmpty(list)) {
List<HmLinkChatDTO> updateList = list.stream().filter(dto -> null != dto.getLinkChatId()).collect(Collectors.toList());
List<Long> notDelIdList = updateList.stream().map(dto -> dto.getLinkChatId()).collect(Collectors.toList());
log.info("不删除关联群活码={},{}", linkId, notDelIdList);
this.hmLinkChatMapper.delete(linkId, notDelIdList , 0);
if (CollectionUtils.isNotEmpty(updateList)) {
for (HmLinkChatDTO item : updateList) {
TabHmLinkChat entity = EntityUtil.changeEntityByJSON(TabHmLinkChat.class, item);
this.hmLinkChatMapper.update(entity);
if (item.getMemberType() == 0) {
screeningDetailService.save(HmLinkChatService.ES_ID + entity.getLinkChatId(), item.getSearchJson());
}
}
}
}
List<HmLinkChatDTO> addList = list.stream().filter(dto -> null == dto.getLinkChatId())
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(addList)) {
for (HmLinkChatDTO dto : addList) {
TabHmLinkChat entity = EntityUtil.changeEntityByJSON(TabHmLinkChat.class, dto);
entity.setLinkChatId(UniqueIdUtils.uniqueLong());
entity.setLinkId(linkId);
this.hmLinkChatMapper.insert(entity);
if (dto.getMemberType() == 0) {
screeningDetailService.save(HmLinkChatService.ES_ID + entity.getLinkChatId(), dto.getSearchJson());
List<HmLinkChatDTO> addList = list.stream().filter(dto -> null == dto.getLinkChatId())
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(addList)) {
for (HmLinkChatDTO dto : addList) {
TabHmLinkChat entity = EntityUtil.changeEntityByJSON(TabHmLinkChat.class, dto);
entity.setLinkChatId(UniqueIdUtils.uniqueLong());
entity.setLinkId(linkId);
this.hmLinkChatMapper.insert(entity);
if (dto.getMemberType() == 0) {
screeningDetailService.save(HmLinkChatService.ES_ID + entity.getLinkChatId(), dto.getSearchJson());
}
}
}
}
// 更新其他链接
List<Long> chatHmIdList = list.stream().map(dto -> dto.getChatHmId()).collect(Collectors.toList());
chatHmIdList.add(otherHmId);
boolean addOther = false;
if (null != link) {
chatHmIdList.add(link.getOtherChatHmId());
if (!otherHmId.equals(link.getOtherChatHmId())) {
this.hmLinkChatMapper.delete(linkId, Arrays.asList(link.getOtherChatHmId()) , 1);
if (null != oldLink) {
chatHmIdList.add(oldLink.getOtherChatHmId());
if (!otherHmId.equals(oldLink.getOtherChatHmId())) {
this.hmLinkChatMapper.delete(linkId, Arrays.asList(oldLink.getOtherChatHmId()) , 1);
addOther = true;
}
} else {
......@@ -107,7 +108,6 @@ public class HmLinkChatServiceImpl implements HmLinkChatService {
other.setLinkChatId(UniqueIdUtils.uniqueLong());
this.hmLinkChatMapper.insert(other);
}
// 统计活码关联的链接数量
for (HmLinkChatDTO old : oldList) {
chatHmIdList.add(old.getChatHmId());
......
package com.gic.haoban.manage.service.service.hm.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
......@@ -141,6 +142,7 @@ public class HmLinkServiceImpl implements HmLinkService {
this.delCache(oldLink.getLinkId(), oldLink.getShortCode());
oldWelcomeId = oldLink.getWelcomeId();
TabHmLink entity = EntityUtil.changeEntityByJSON(TabHmLink.class, dto);
this.linkMapper.update(entity);
}
// 单人活码
......@@ -159,12 +161,15 @@ public class HmLinkServiceImpl implements HmLinkService {
// 群活码
if (dto.getLinkType() == HmLinkTypeEnum.CHAT_HM_LINK_TYPE.getLinkType()) {
int index = 0;
if(CollectionUtils.isEmpty(dto.getLinkChatList())) {
dto.setLinkChatList(new ArrayList<>());
}
for (HmLinkChatDTO item : dto.getLinkChatList()) {
item.setWxEnterpriseId(dto.getWxEnterpriseId());
item.setEnterpriseId(dto.getEnterpriseId());
item.setSortNum(index++);
}
this.hmLinkChatService.save(linkId, dto.getLinkChatList() , dto.getOtherChatHmId() , oldLink);
this.hmLinkChatService.save(dto.getWxEnterpriseId(),dto.getEnterpriseId(),linkId, dto.getLinkChatList() , dto.getOtherChatHmId() , oldLink);
}
return dto.getLinkCode();
}
......
......@@ -9,6 +9,7 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import com.gic.commons.util.EntityUtil;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -244,6 +245,16 @@ public class HandoverServiceImpl implements HandoverService {
}
@Override
public List<HandoverExternalDTO> listAllByStaffIds(String wxEnterpriseId, String search, List<String> staffIds) {
List<TabHandoverExternal> list = handoverExternalMapper.listAllByStaffIds(wxEnterpriseId, staffIds , search , 1);
if(null != list) {
List<HandoverExternalDTO> retList = EntityUtil.changeEntityListByJSON(HandoverExternalDTO.class, list) ;
return retList;
}
return new ArrayList<>() ;
}
@Override
public List<TabHandoverExternal> listByIds(String wxEnterpriseId, List<String> ids) {
return handoverExternalMapper.listByIds(wxEnterpriseId, ids);
}
......
......@@ -15,6 +15,7 @@ import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.DateUtil;
import com.gic.enterprise.api.service.StoreWidgetService;
import com.gic.haoban.manage.service.entity.*;
import com.gic.haoban.manage.service.pojo.StaffStoreNumBO;
import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -678,4 +679,17 @@ public class StaffClerkRelationServiceImpl implements StaffClerkRelationService
map = list.stream().collect(Collectors.groupingBy(StaffClerkRelationDTO::getStoreId,Collectors.mapping(StaffClerkRelationDTO::getClerkId,Collectors.toList()))) ;
return ServiceResponse.success(map) ;
}
// 成员是否绑定多加家门店
@Override
public Map<String, Boolean> staffManyStore(List<String> staffIdList) {
Map<String, Boolean> map = new HashMap<>() ;
List<StaffStoreNumBO> list = this.tabHaobanStaffClerkRelationMapper.staffStoreNum(staffIdList) ;
if(CollectionUtils.isNotEmpty(list)) {
list.forEach(item -> {
map.put(item.getStaffId(),item.getNum()>1) ;
}) ;
}
return map ;
}
}
......@@ -10,9 +10,11 @@ import com.gic.commons.util.UniqueIdUtils;
import com.gic.content.api.service.ContentProducerApiService;
import com.gic.haoban.app.customer.service.api.service.InnerApiService;
import com.gic.haoban.common.utils.StringUtil;
import com.gic.haoban.manage.api.dto.CommonMQDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.enums.ChannelCodeEnum;
import com.gic.haoban.manage.api.service.HaobanCommonMQApiService;
import com.gic.haoban.manage.api.service.StaffClerkRelationApiService;
import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService;
import com.gic.haoban.manage.service.config.Config;
......@@ -78,6 +80,8 @@ public class StaffServiceImpl implements StaffService {
private StaffClerkRelationApiService staffClerkRelationApiService ;
@Autowired
private StaffDepartmentRelatedService staffDepartmentRelatedService ;
@Autowired
private HaobanCommonMQApiService haobanCommonMQApiService ;
@Override
public TabHaobanStaff selectById(String id) {
......@@ -113,6 +117,12 @@ public class StaffServiceImpl implements StaffService {
return staff.getStaffId() ;
}
mapper.insertSelective(tab);
CommonMQDTO mq = new CommonMQDTO() ;
mq.setType(11) ;
Map<String,String> map = new HashMap<>() ;
map.put("staffId",tab.getStaffId()) ;
mq.setParams(map);
this.haobanCommonMQApiService.putCommonDelayMessage(mq, 10);
RedisUtil.unlock(lockKey);
return tab.getStaffId();
}
......
......@@ -79,6 +79,9 @@ public class QwMomentPlanAttendServiceImpl implements QwMomentPlanAttendService
// 0已失效 1待完成 2已完成
Integer sendStatus = qdto.getSendStatus() ;
TabQwMomentPlan plan = this.qwMomentPlanMapper.getById(qdto.getPlanId()) ;
if(null == plan) {
return ServiceResponse.failure("9999","活动不存在") ;
}
boolean isEnd = plan.getStatusFlag()==2 || plan.getEndDate().getTime() <= System.currentTimeMillis() ;
if(null != sendStatus && isEnd && sendStatus==1) {
return ServiceResponse.success(new Page<>());
......
......@@ -155,9 +155,11 @@ public class QwMomentPlanServiceImpl implements QwMomentPlanService {
plan.setBeginDate(plan.getPublishTime());
Date endTime = DateUtil.getEndTimeOfDay(DateUtil.addDay(plan.getBeginDate(), plan.getExpireDays()));
plan.setEndDate(endTime);
if(null == planId) {
if(null == planId || null == this.qwMomentPlanMapper.getById(planId)) {
createFlag = true ;
planId = UniqueIdUtils.uniqueLong();
if(null == planId) {
planId = UniqueIdUtils.uniqueLong();
}
dto.setPlanId(planId);
plan.setPlanId(planId);
plan.setCreateTime(now);
......
......@@ -238,6 +238,21 @@ public class HandoverOperationApiServiceImpl implements HandoverOperationApiServ
}
@Override
public List<HandoverExternalDTO> listAllHandoverFriend(String wxEnterpriseId, String search, List<String> staffIds) {
List<HandoverExternalDTO> retList = handoverService.listAllByStaffIds(wxEnterpriseId, search, staffIds);
if(CollectionUtils.isEmpty(retList)) {
return retList ;
}
List<TabHaobanStaff> haobanStaffs = staffService.listNoStatusByStaffIds(wxEnterpriseId, staffIds);
Map<String, String> staffNameMap = haobanStaffs.stream().collect(Collectors.toMap(dto -> dto.getStaffId(), dto -> dto.getStaffName(), (o, n) -> o));
retList.forEach(dto -> {
String staffName = staffNameMap.get(dto.getStaffId());
dto.setStaffName(staffName);
});
return retList;
}
@Override
public Page<ExternalInfoDTO> pageHandoverFriend(String wxEnterpriseId, String search, List<String> staffIds, List<String> transferIds, BasePageInfo pageInfo, int status) {
Page<HandoverExternalDTO> retPage = handoverService.pageByStaffIds(wxEnterpriseId, search, staffIds, transferIds, pageInfo, status);
if (CollectionUtils.isEmpty(retPage.getResult())) {
......
......@@ -12,6 +12,7 @@ import com.gic.commons.util.StringUtil;
import com.gic.haoban.manage.api.dto.MemberUnionidWechatAccountQDTO;
import com.gic.haoban.manage.api.service.ExternalClerkRelatedApiService;
import com.gic.haoban.manage.service.service.chat.GroupChatPlanService;
import com.gic.haoban.manage.service.service.chat.GroupChatService;
import com.gic.haoban.manage.service.service.moment.QwMomentPlanAttendService;
import com.gic.haoban.manage.service.service.moment.QwMomentPlanService;
import com.gic.haoban.manage.service.service.role.HaobanMenuService;
......@@ -65,6 +66,8 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
private QwMomentPlanService qwMomentPlanService ;
@Autowired
private QwMomentPlanAttendService qwMomentPlanAttendService;
@Autowired
private GroupChatService groupChatService ;
@Override
public void putCommonMessage(CommonMQDTO dto) {
......@@ -178,6 +181,10 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
Long planId10 = Long.valueOf(map.get("planId")) ;
this.qwMomentPlanService.getQwData(planId10);
break;
case 11 :
String staffId11 = map.get("staffId") ;
this.groupChatService.initStaffGroupChat(staffId11);
break;
default:
break;
}
......
......@@ -575,10 +575,25 @@ public class MaterialApiServiceImpl implements MaterialApiService {
public List<String> getImageMediaId(String wxEnterpriseId, List<ContentMaterialDTO> imageList, int mediaType) {
List<String> list = this.materialService.getImageMediaId(wxEnterpriseId, imageList, mediaType);
if(CollectionUtils.isNotEmpty(list)) {
list.forEach(materialId -> {
materialService.getHasChangeMadieMaterialById(materialId, 2);
}) ;
for(String materialId : list) {
MaterialDTO m = materialService.getHasChangeMadieMaterialById(materialId, 2);
Integer materialType = m.getMaterialType();
String madiaId = m.getMediaId();
//需要上传的类型
if (Arrays.asList(2, 3, 4, 5, 6, 7).contains(materialType) && StringUtils.isBlank(madiaId)) {
return null ;
}
}
}
return list ;
}
@Override
public void getImageMediaId(String wxEnterpriseId, List<String> idList) {
if(CollectionUtils.isNotEmpty(idList)) {
idList.forEach(materialId -> {
materialService.getHasChangeMadieMaterialById(materialId, 1);
}) ;
}
}
}
......@@ -7,6 +7,7 @@ import java.util.stream.Collectors;
import com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum;
import com.gic.haoban.manage.api.qdto.CanvasInfoQDTO;
import com.gic.haoban.manage.api.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanStaffClerkRelationMapper;
import com.gic.haoban.manage.service.pojo.GicNewMemberBO;
import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.util.EventUtils;
......@@ -177,7 +178,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
private QywxErrorLogService qywxErrorLogService ;
@Autowired
private MemberTagService memberTagService ;
@Autowired
private TabHaobanStaffClerkRelationMapper tabHaobanStaffClerkRelationMapper ;
GicMQClient instance = GICMQClientUtil.getClientInstance();
@Override
......@@ -277,7 +280,17 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String staffId, String enterpriseId) {
MemberStoreDTO dto = new MemberStoreDTO();
log.info("好办顾客详情={},staffId={}",externalUserid,staffId);
List<TabHaobanExternalClerkRelated> list = externalClerkRelatedService.listByExternalUseridAndWxUserId(externalUserid, staffId);
// 如果是区经
StaffClerkRelationDTO relation = this.tabHaobanStaffClerkRelationMapper.getOneByStoreIdAndStaffId(null,staffId) ;
List<TabHaobanExternalClerkRelated> list = null ;
if(null != relation && StringUtils.isBlank(relation.getStoreId())) {
// 区经
log.info("区经");
list = externalClerkRelatedService.listByExternalUseridAndWxUserId(externalUserid, null);
}else {
list = externalClerkRelatedService.listByExternalUseridAndWxUserId(externalUserid, staffId);
}
if (CollectionUtil.isEmpty(list)) {
log.info("好友记录查不到");
dto.setErrmsg("客户不存在");
......@@ -781,7 +794,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
// 如果gic会员上没标签,不同步
List<MemberTagDTO> memberTags = memberTagService.listMemberClerkManualTag(enterpriseId, memberId);
if (CollectionUtils.isNotEmpty(memberTags)) {
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId,null);
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId,null,dto.isFlush());
}else {
log.info("gic会员上无标签,不同步企微侧标签");
}
......@@ -1238,7 +1251,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return;
}
pushTagSync(dto.getExternalUserid(), wxUserId
, GicQywxSyncTypeEnum.FRIEND_TAG_SYNC.getType(), QywxSyncTaskTypeEnum.MEMBER_SYNC.getType(), wxEnterprise.getWxEnterpriseId(), null,null);
, GicQywxSyncTypeEnum.FRIEND_TAG_SYNC.getType(), QywxSyncTaskTypeEnum.MEMBER_SYNC.getType(), wxEnterprise.getWxEnterpriseId(), null,null , true);
}
@Override
......@@ -1592,7 +1605,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
this.saveExternalClerk(memberId, staffId, unionDTO, staffClerkRelation, statusFlag , 1);
if(StringUtils.isNotBlank(memberId)) {
if(null == RedisUtil.getCache("zhuan_self")) {
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId,dto.getExternalUseridInfo());
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId,dto.getExternalUseridInfo() , true);
}else {
log.info("不同步标签");
}
......@@ -1625,7 +1638,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
/**
* 同步
*/
private void pushTagSync(String dataId, String taskId, int syncType, int taskType, String wxEnterpriseId, String enterpriseId,String externalUseridInfo) {
private void pushTagSync(String dataId, String taskId, int syncType, int taskType, String wxEnterpriseId, String enterpriseId,String externalUseridInfo ,boolean flushFlag) {
QywxTagSyncInfoPojo pojo = new QywxTagSyncInfoPojo();
pojo.setDataId(dataId);
pojo.setTaskId(taskId);
......@@ -1647,7 +1660,11 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
delay = 90 ;
log.info("美邦延迟处理");
}
clientInstance.sendMessage("qywxTagSyncDeal", JSONObject.toJSONString(pojo),delay);
String mqName = "qywxTagSyncDeal" ;
if(!flushFlag) {
mqName = "qywxTagSyncDealAddFriend" ;
}
clientInstance.sendMessage(mqName, JSONObject.toJSONString(pojo),delay);
} catch (Exception e) {
log.info("异常:{}", e);
}
......@@ -1656,8 +1673,8 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
/**
* 同步
*/
private void pushTagSync(String memberId, String wxEnterpriseId, String enterpriseId , String externalUseridInfo) {
this.pushTagSync(memberId, "-1", GicQywxSyncTypeEnum.SINGLE_WXENT_MEMNER_SYNC.getType(), QywxSyncTaskTypeEnum.MEMBER_SYNC.getType(), wxEnterpriseId, enterpriseId,externalUseridInfo);
private void pushTagSync(String memberId, String wxEnterpriseId, String enterpriseId , String externalUseridInfo , boolean flushFlag) {
this.pushTagSync(memberId, "-1", GicQywxSyncTypeEnum.SINGLE_WXENT_MEMNER_SYNC.getType(), QywxSyncTaskTypeEnum.MEMBER_SYNC.getType(), wxEnterpriseId, enterpriseId,externalUseridInfo , flushFlag);
}
private String saveMemberUnionTable(ExternalUserDTO dto) {
......@@ -2080,7 +2097,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
qdto.setSence(sence);
String memberId = null;
com.gic.api.base.commons.ServiceResponse<MemberSimpleDetailDTO> resp = this.memberEntranceApiService.enterpriseWechatByFriendEntrance(qdto);
log.info("刷新好友,创建member,resp={},param={}",JSON.toJSON(resp),JSON.toJSONString(qdto));
log.info("获取创建member,resp={},param={}",JSON.toJSON(resp),JSON.toJSONString(qdto));
if(resp.isSuccess()) {
MemberSimpleDetailDTO member = resp.getResult() ;
memberId = member.getMemberId() ;
......
......@@ -482,6 +482,9 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
return this.syncFriendTagToQywxByExternalUserId(wxEnterpriseId,enterpriseId,externalUserId,tagItemIds,null);
}
/**
* gic打标签、加好友、刷新好友时,会以gic侧的标签为准。新增或删除企微侧的客户标签。此外部联系人加的每个staff下都会处理
*/
@Override
public ServiceResponse syncFriendTagToQywxByExternalUserId(String wxEnterpriseId, String enterpriseId, String externalUserId, List<String> tagItemIds, String externalUserInfo) {
logger.info("同步gic标签到企业微信:externalUserId={},{},{}", externalUserId, JSONObject.toJSONString(tagItemIds),externalUserInfo);
......@@ -544,12 +547,10 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
Sets.SetView<String> needSetTags = Sets.difference(entQywxTagKeys, entHasSetQywxTagKeys);
//需要删除的标签
Sets.SetView<String> needDelTags = Sets.difference(entHasSetQywxTagKeys, entQywxTagKeys);
logger.info("该用户打标签:{}",wxUserId);
if (CollectionUtils.isEmpty(needDelTags) && CollectionUtils.isEmpty(needSetTags)) {
logger.info("不需要操作:{},{}", wxUserId, externalUserId);
logger.info("无需处理,staff={}", wxUserId);
return;
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("corpid", qwDTO.getThirdCorpid());
jsonObject.put("suiteId", wxSuiteid);
......@@ -563,7 +564,7 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
}
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
logger.info("qywxMarkTagMq 该用户打标签:{}",jsonObject.toJSONString());
logger.info("同步企微mq,={}",jsonObject.toJSONString());
clientInstance.sendMessage("qywxMarkTagMq", jsonObject.toJSONString());
} catch (Exception e) {
logger.info("企微标签同步qywxMarkTagMq发送失败:{}", e.getMessage(), e);
......@@ -704,13 +705,13 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
Set<String> noSyncTagItemIds = new HashSet<>();
if (!CollectionUtils.isEmpty(gicItems)) {
noSyncTagItemIds = gicItems.stream().filter(item -> !entQywxSyncTagItemIds.contains(item.getTagsId())).map(dto -> dto.getTagsId()).collect(Collectors.toSet());
logger.info("没有同步的标签:{}", JSONObject.toJSONString(noSyncTagItemIds));
logger.info("与企微不同步的标签:{}", JSONObject.toJSONString(noSyncTagItemIds));
}
//该企业下会员需要设置的标签
Sets.SetView<String> entMemberNeedSetQywxKeys = Sets.intersection(staffHasSetTagKeys, entQywxSyncTagKeys);
Set<String> saveTagIds = entMemberNeedSetQywxKeys.stream().map(qywxKey -> syncTagFormatPojo.getQywxToGicTagItemIdMap().get(qywxKey)).collect(Collectors.toSet());
saveTagIds.addAll(noSyncTagItemIds);
logger.info("会员需要打的企微标签:{}", JSONObject.toJSONString(entMemberNeedSetQywxKeys));
logger.info("企微标签:{},所有标签={}", JSONObject.toJSONString(entMemberNeedSetQywxKeys),JSONObject.toJSONString(saveTagIds));
//更新标签 会自动同步
if (CollectionUtils.isEmpty(saveTagIds)) {
saveMemberTags(new HashSet<>(), clerkRelated.getEnterpriseId(), memberId, clerkRelated.getClerkId());
......@@ -747,7 +748,7 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
* @return
*/
private Map<String, Set<String>> getExternalTagMap(String externalUseridInfo, String wxEnterpriseId) {
logger.info("externalUseridInfo:{}", externalUseridInfo);
// logger.info("externalUseridInfo:{}", externalUseridInfo);
Map<String, Set<String>> ret = new HashMap<>();
JSONObject jsonObject = JSONObject.parseObject(externalUseridInfo);
......
......@@ -151,6 +151,12 @@ public class HaobanMenuServiceImpl implements HaobanMenuService {
List<TabHaobanMenu> notPidMenuList = tabHaobanMenuMapper.getHaobanNotPidMenuList(wxEnterpriseId, clerkType, 0);
List<HaobanMenuBO> pidMenuBOList = EntityUtil.changeEntityListNew(HaobanMenuBO.class, pidMenuList);
List<HaobanMenuBO> notPidMenuBOList = EntityUtil.changeEntityListNew(HaobanMenuBO.class, notPidMenuList);
if(CollectionUtils.isEmpty(pidMenuBOList)) {
pidMenuBOList = new ArrayList<>() ;
}
if(CollectionUtils.isEmpty(notPidMenuBOList)) {
notPidMenuBOList = new ArrayList<>() ;
}
List<String> gicMenulist = this.getGicBuyCodes(enterpriseId,clerkType) ;
if(CollectionUtils.isNotEmpty(gicMenulist)) {
List<HaobanMenuBO> allMenuList = this.getAllMenuList();
......
......@@ -273,5 +273,6 @@
<dubbo:reference id="settingApiService" interface="com.gic.haoban.task.api.service.SettingApiService" timeout="10000" retries="0" />
<dubbo:reference interface="com.gic.haoban.task.manage.api.service.IMarketClueTaskApiService" id="iMarketClueTaskApiService" timeout="10000" retries="0" check="false" />
<dubbo:reference id="canvasApiService" interface="com.gic.canvas.api.service.CanvasApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference id="wechatStoreService" interface="com.gic.enterprise.api.service.WechatStoreService" timeout="10000" retries="0" check="false"/>
</beans>
\ No newline at end of file
......@@ -125,6 +125,24 @@
order by create_time desc
</select>
<select id="listAllByStaffIds" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from tab_haoban_handover_external
where wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR}
and staff_id in
<foreach collection="staffIds" item="item" separator="," open="(" close=")">
#{item}
</foreach>
and status_flag = #{status}
<if test="search!=null and search!=''">
and external_user_name like CONCAT('%',#{search},'%')
</if>
limit 0 , 5000
</select>
<select id="listIdByStaffIds" resultMap="BaseResultMap">
select
handover_external_id
......
......@@ -316,8 +316,10 @@
select
<include refid="Base_Column_List"/>
from tab_haoban_external_clerk_related
where staff_id = #{staffId,jdbcType=VARCHAR}
and external_user_id = #{externalUserid}
where external_user_id = #{externalUserid}
<if test="null != staffId">
and staff_id = #{staffId,jdbcType=VARCHAR}
</if>
and status_flag = #{statusFlag} order by update_time desc
</select>
......
......@@ -514,5 +514,15 @@
</if>
GROUP BY a.staff_id
</select>
<select id="staffStoreNum" resultType="com.gic.haoban.manage.service.pojo.StaffStoreNumBO">
select a.staff_id staffId, count(a.store_id) num from tab_haoban_staff_clerk_relation a
where a.status_flag = 1 and a.staff_id in
<foreach collection="staffIdList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
and a.store_id is not null
group by a.staff_id
</select>
</mapper>
\ No newline at end of file
......@@ -25,6 +25,7 @@
<result column="chat_count" property="chatCount" />
<result column="link_count" property="linkCount"/>
<result column="status_flag" property="statusFlag"/>
<result column="store_id" property="storeId" />
</resultMap>
<sql id="Base_Column_List">
chat_hm_id,
......@@ -46,7 +47,7 @@
create_time,
update_time,
chat_count, link_count ,
status_flag
status_flag , store_id
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert"
......@@ -72,7 +73,7 @@
create_time,
update_time,
chat_count,
status_flag
status_flag , store_id
)VALUES(
#{chatHmId},
#{chatHmCode},
......@@ -93,7 +94,7 @@
now(),
now(),
#{chatCount},
1
1 , #{storeId}
)
]]>
</insert>
......@@ -118,7 +119,7 @@
modifier_id=#{modifierId},
modifier_name=#{modifierName},
update_time=now(),
chat_count=#{chatCount}
chat_count=#{chatCount} , store_id = #{storeId}
where chat_hm_id = #{chatHmId}
]]>
</update>
......@@ -169,6 +170,9 @@
#{id}
</foreach>
</if>
<if test="null != storeId and ''!=storeId">
and store_id = #{storeId}
</if>
order by create_time desc
</select>
<select id="listAvailableByEnterpriseId"
......@@ -183,4 +187,24 @@
order by create_time desc
</select>
<select id="listByStoreIdList" resultMap="result-map-tabHaobanGroupChatHm">
select <include refid="Base_Column_List" /> from tab_haoban_group_chat_hm where store_id in
<foreach collection="storeIdList" item="item" index="index" separator="," open="(" close=")">
#{item}
</foreach>
and status_flag = 1 and delete_flag = 0
</select>
<select id="hasManyOwnerStore" resultType="com.gic.haoban.manage.service.pojo.HmStoreNumBO">
SELECT chat_hm_id chatHmId , COUNT(1) num FROM (
SELECT a.chat_hm_id , c.store_id FROM `tab_haoban_group_chat_hm_relation` a
LEFT JOIN tab_haoban_group_chat b ON a.group_chat_id = b.group_chat_id
LEFT JOIN `tab_haoban_staff_clerk_relation` c ON c.staff_id = b.staff_id AND c.status_flag = 1
WHERE a.delete_flag = 0 AND a.status_flag = 1 AND b.delete_flag = 0 AND c.`store_id` <![CDATA[ <> ]]> '' AND a.chat_hm_id in
<foreach collection="chatHmIdList" item="item" index="index" separator="," open="(" close=")">
#{item}
</foreach>
GROUP BY a.`chat_hm_id` , c.`store_id` ) t GROUP BY chat_hm_id
</select>
</mapper>
\ No newline at end of file
......@@ -53,7 +53,10 @@
<select id="listOwner" parameterType="com.gic.haoban.manage.api.dto.qdto.chat.OwnerSearchQDTO" resultType="com.gic.haoban.manage.api.dto.chat.GroupChatOwnerDTO">
SELECT a.staff_id staffId , b.`staff_name` staffName , a.wx_enterprise_id wxEnterpriseId ,
b.wx_user_id wxUserId , b.wx_open_user_id wxOpenUserId
FROM tab_haoban_group_chat_owner a LEFT JOIN tab_haoban_staff b ON a.`staff_id` = b.`staff_id`
FROM tab_haoban_group_chat_owner a LEFT JOIN tab_haoban_staff b ON a.`staff_id` = b.`staff_id`
<if test="null != paramsEnterpriseId and ''!=paramsEnterpriseId ">
left join tab_haoban_staff_clerk_relation d on a.staff_id = d.staff_id and d.status_flag = 1
</if>
<if test="departmentIdList != null and departmentIdList.size() > 0">
left join tab_haoban_staff_department_related c on a.staff_id = c.staff_id and c.status_flag = 1
</if>
......@@ -64,6 +67,9 @@
#{id,jdbcType=VARCHAR}
</foreach>
</if>
<if test="null != paramsEnterpriseId and ''!=paramsEnterpriseId ">
and d.enterprise_id = #{paramsEnterpriseId}
</if>
<if test="null != searchParams and ''!=searchParams ">
and b.staff_name like #{searchParams}
</if>
......@@ -73,7 +79,7 @@
<if test="status==2">
and b.status_flag = 0
</if>
<if test="departmentIdList != null and departmentIdList.size() > 0">
<if test="(departmentIdList != null and departmentIdList.size() > 0 ) or (null != paramsEnterpriseId and ''!=paramsEnterpriseId)">
group by a.staff_id
</if>
</select>
......@@ -94,7 +100,7 @@
</foreach>
</if>
<if test="null != searchParams and ''!=searchParams ">
and b.staff_name like #{searchParams}
and b.staff_name like #{searchParams}g
</if>
and b.status_flag = 1
<if test="departmentIdList != null and departmentIdList.size() > 0">
......
......@@ -23,6 +23,7 @@
<result column="status_flag" property="statusFlag"/>
<result column="short_code" property="shortCode" />
<result column="other_chat_hm_id" property="otherChatHmId"/>
<result column="chat_store_rule" property="chatStoreRule"/>
</resultMap>
<sql id="Base_Column_List">
link_id,
......@@ -43,7 +44,7 @@
store_rule_json,
custom_rule_json,
member_label_id,
status_flag,short_code , other_chat_hm_id
status_flag,short_code , other_chat_hm_id , chat_store_rule
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert" parameterType="com.gic.haoban.manage.service.entity.hm.TabHmLink">
......@@ -67,7 +68,7 @@
store_rule_json,
custom_rule_json,
member_label_id,
status_flag , short_code , other_chat_hm_id
status_flag , short_code , other_chat_hm_id , chat_store_rule
)VALUES(
#{linkId,jdbcType=BIGINT},
#{linkCode,jdbcType=VARCHAR},
......@@ -87,7 +88,7 @@
#{storeRuleJson,jdbcType=VARCHAR},
#{customRuleJson,jdbcType=VARCHAR},
#{memberLabelId,jdbcType=VARCHAR},
#{statusFlag,jdbcType=INTEGER} , #{shortCode} , #{otherChatHmId}
#{statusFlag,jdbcType=INTEGER} , #{shortCode} , #{otherChatHmId} , #{chatStoreRule}
)
]]>
</insert>
......@@ -105,7 +106,7 @@
update_time=now(),
store_rule_json=#{storeRuleJson,jdbcType=VARCHAR},
custom_rule_json=#{customRuleJson,jdbcType=VARCHAR},
member_label_id=#{memberLabelId,jdbcType=VARCHAR} , other_chat_hm_id = #{otherChatHmId}
member_label_id=#{memberLabelId,jdbcType=VARCHAR} , other_chat_hm_id = #{otherChatHmId} , chat_store_rule = #{chatStoreRule}
WHERE link_id = #{linkId}
]]>
</update>
......
......@@ -188,6 +188,14 @@
status_flag != 0 order by create_time desc limit 1
</select>
<select id="listNewLog" resultMap="result-map-tabHaobanWxUserAddLog">
select
<include refid="Base_Column_List"/>
from tab_haoban_wx_user_add_log where
external_userid=#{externalUserid} and staff_id =#{staffId} and
status_flag != 0 and friend_clerk_id = #{friendClerkId} order by create_time desc limit 1
</select>
<select id="listForPage" parameterType="com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogSearchQDTO"
resultMap="result-map-tabHaobanWxUserAddLog">
select
......
......@@ -33,6 +33,8 @@
<result column="task_clerk_num" property="taskClerkNum" />
<result column="moment_id" property="momentId" />
<result column="media_link_flag" property="mediaLinkFlag" />
<result column="analyse_flag" property="analyseFlag" />
<result column="analyse_day" property="analyseDay" />
</resultMap>
<sql id="Base_Column_List">
plan_id,
......@@ -62,7 +64,7 @@
total_like_count,
total_comment_count,
qw_jobid,
exec_rate , task_clerk_num , moment_id , media_link_flag
exec_rate , task_clerk_num , moment_id , media_link_flag , analyse_flag , analyse_day
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert">
......@@ -91,7 +93,7 @@
total_like_count,
total_comment_count,
qw_jobid,
exec_rate , media_link_flag
exec_rate , media_link_flag , analyse_flag , analyse_day
)VALUES(
#{planId,jdbcType=BIGINT},
#{title,jdbcType=VARCHAR},
......@@ -117,7 +119,7 @@
#{totalLikeCount,jdbcType=INTEGER},
#{totalCommentCount,jdbcType=INTEGER},
#{qwJobid,jdbcType=VARCHAR},
#{execRate,jdbcType=INTEGER} , #{mediaLinkFlag}
#{execRate,jdbcType=INTEGER} , #{mediaLinkFlag} , #{analyseFlag} , #{analyseDay}
)
</insert>
......@@ -166,6 +168,12 @@
<if test="null != mediaLinkFlag">
media_link_flag=#{mediaLinkFlag},
</if>
<if test="null != analyseFlag">
analyse_flag= #{analyseFlag},
</if>
<if test="null != analyseDay">
analyse_day= #{analyseDay},
</if>
</set>
where plan_id =#{planId}
</update>
......
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.DateUtil;
import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
public class FileUtils4 {
public static void main(String[] args) {
Date endTime = DateUtil.strToDate("2025-06-30","yyyy-MM-dd") ;
if(DateUtil.getStartTimeOfDay(endTime).getTime() - 1000*3600*24*3 <= DateUtil.getStartTimeOfDay().getTime()) {
System.out.printf(""+DateUtil.daysBetween(DateUtil.getStartTimeOfDay(), DateUtil.getStartTimeOfDay(endTime)));
if(DateUtil.getStartTimeOfDay(endTime).getTime()<DateUtil.getStartTimeOfDay().getTime() && DateUtil.daysBetween(DateUtil.getStartTimeOfDay(endTime),DateUtil.getStartTimeOfDay())>1) {
return;
}
System.out.printf("1111");
}
/* List<X> list = getText() ;
Collections.sort(list);
Collections.reverse(list);
System.out.println(JSONObject.toJSONString(list));*/
}
public static String getText(){
public static List<X> getText(){
try {
BufferedReader bw = new BufferedReader(new FileReader(new File("c:\\c.txt"))) ;
StringBuilder sb = new StringBuilder() ;
BufferedReader bw = new BufferedReader(new FileReader(new File("d:\\c.txt"))) ;
List<X> sb = new ArrayList<>() ;
while(true) {
String s = bw.readLine() ;
if(StringUtils.isBlank(s)) {
break ;
}else {
String ss = new String(s.getBytes(),"UTF-8") ;
sb.append(ss) ;
String[] arr = ss.split("\\s") ;
String s1 = arr[0] ;
String s2 = arr[1] ;
sb.add(new X(s1,s2));
}
}
bw.close();
return sb.toString() ;
System.out.println(sb.size());
return sb ;
}catch(Exception e) {
}
return null ;
}
static class X implements Comparable<X>{
public String id ;
public String name ;
public X(String id, String name) {
this.id = id ;
this.name = name ;
}
@Override
public int compareTo(X o) {
return Integer.valueOf(o.id) - Integer.valueOf(this.id);
}
}
}
import com.gic.api.base.commons.BasePageInfo;
import com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum;
import com.gic.haoban.manage.api.qdto.OpenStaffPageQDTO;
import com.gic.haoban.manage.api.service.HaobanTimerApiService;
import com.gic.haoban.manage.api.service.notify.NoticeMessageApiService;
import com.gic.haoban.manage.api.service.role.HaobanRoleApiService;
import com.gic.haoban.manage.api.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.service.service.OpenStaffService;
import com.gic.weimob.common.Md5Util;
import com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogQDTO;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.hm.WxUserAddLogMapper;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.hm.TabWxUserAddLog;
import com.gic.haoban.manage.service.service.hm.WxUserAddLogService;
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.lang.reflect.Array;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext-conf.xml"})
public class HalfFriendTest {
@Autowired
private OpenStaffService openStaffService ;
private TabHaobanExternalClerkRelatedMapper haobanExternalClerkRelatedMapper ;
@Autowired
private NoticeMessageApiService noticeMessageApiService ;
private WxUserAddLogMapper wxUserAddLogMapper ;
@Autowired
private WxUserAddLogService wxUserAddLogService ;
@Test
public void tt() {
Map<String,String> map = new HashMap<>() ;
map.put("accountName","111222333111K") ;
map.put("errorTime","2024年4月20日 22:22") ;
map.put("reason","异常断开") ;
this.noticeMessageApiService.sendMessageForOpenStaff("ff8080815dacd3a2015dacd3ef5c0000","xgh","首次托管,需要二次验证");
/*OpenStaffPageQDTO qdto = new OpenStaffPageQDTO() ;
qdto.setWxEnterpriseId("ca66a01b79474c40b3e7c7f93daf1a3b");
qdto.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000");
qdto.setClerkId("b2ef17cce11f476b996d0b27ebadf7fb");
qdto.setStoreGroupIdList(Arrays.asList("ff8080815dacd3a2015dacd3f4fc0033"));
qdto.setStaffParams("徐高华");
BasePageInfo basePageInfo = new BasePageInfo() ;
basePageInfo.setPageSize(11);
basePageInfo.setPageNum(1);
this.openStaffService.page(qdto,basePageInfo) ;*/
int messageType = NoticeMessageTypeEnum.HAOBAN_OPEN_STAFF_LOGOUT.getType();
// NoticeMessageUtil.sendNoticeMessageByStaff("ff8080815dacd3a2015dacd3ef5c0000","52995ea8c81c4cc286a9b82bc36a7081","-1",messageType,null,map,null);
String wxEnterpriseId = "b8f2f238e73844219d8c1ac563cec0db" ;
String staffId = "c153778c9ec24c189ac31e67748677e3";
List<TabHaobanExternalClerkRelated> list = this.haobanExternalClerkRelatedMapper.listByWxEnterpriseIdAndWxUserIdAndStatus(wxEnterpriseId, staffId, Arrays.asList(2)) ;
int count = 0 ;
for(TabHaobanExternalClerkRelated item : list) {
String externalUserId = item.getExternalUserId() ;
// a2d6b466a4fc436099a949db3756f6c1
// 8be4cae54aec4dbe90079d824f3c1490
String clerkId = "8be4cae54aec4dbe90079d824f3c1490" ;
TabWxUserAddLog log = this.wxUserAddLogMapper.listNewLog(externalUserId,staffId,clerkId) ;
if(null == log || log.getStatusFlag()!=3) {
continue;
}
count++ ;
System.err.println("insert"+externalUserId + " " + count);
//添加日志
WxUserAddLogQDTO wxUserAddLogQDTO = new WxUserAddLogQDTO();
wxUserAddLogQDTO.setWxEnterpriseId(wxEnterpriseId);
wxUserAddLogQDTO.setEnterpriseId(item.getEnterpriseId());
wxUserAddLogQDTO.setMemberId(item.getMemberId());
wxUserAddLogQDTO.setUnionid(item.getUnionid());
wxUserAddLogQDTO.setDelFlag(true);
wxUserAddLogQDTO.setExternalUserid(item.getExternalUserId());
wxUserAddLogQDTO.setStaffId(item.getStaffId());
wxUserAddLogQDTO.setClerkId(log.getFriendClerkId());
if(null != item.getAddTime()) {
wxUserAddLogQDTO.setQwAddTime(item.getAddTime());
}
wxUserAddLogQDTO.setFriendClerkId(log.getFriendClerkId());
wxUserAddLogQDTO.setFriendStoreId(log.getFriendStoreId());
this.wxUserAddLogService.save(wxUserAddLogQDTO);
}
}
}
......@@ -45,7 +45,7 @@ public class HandoverTest {
@Test
public void test1() {
String wxEnterpriseId = "ca66a01b79474c40b3e7c7f93daf1a3b";
String wxEnterpriseId = "ef8607976407491fb5ff66611b1d57ea";
handoverOperationApiService.dealQywxEnterpriseHandoverResult(wxEnterpriseId);
}
......
......@@ -4,6 +4,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import com.gic.haoban.manage.api.qdto.chat.LinkHmFromWxaQDTO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -106,7 +107,13 @@ public class HmLinkTest {
@Test
public void getLinkHmFromWxa(){
this.hmLinkApiService.getLinkHmFromWxa("ff8080815dacd3a2015dacd3ef5c0000", null, null, null, "fKzecO", "3b9167b1a", "orXl9t6P-XBJQyaNCaJj38GLyYd0",null) ;
LinkHmFromWxaQDTO qq = new LinkHmFromWxaQDTO();
qq.setLatitude("30.281719563802085");
qq.setDistrictCode("3301");
qq.setLongitude("120.00284342447917");
qq.setJustLocationFlag(0);
this.hmLinkApiService.getLinkHmFromWxa("ff8080815dacd3a2015dacd3ef5c0000", null, null, null,
"roFgte", "", "","ff8080819763a714019767096103000f",qq) ;
}
@Test
......
......@@ -139,8 +139,10 @@ public class ServiceTest {
"fa88746dfe964acd8761d1de8ff7d139",
"fcae29cc5d7d4739a353e777e5e77d82") ;
for(int i=0;i<list.size();i++) {
haobanQywxFeeApiService.addFee(list.get(i));
}
haobanQywxFeeApiService.addFee("ca66a01b79474c40b3e7c7f93daf1a3b");
}
@Test
......
......@@ -14,6 +14,7 @@ import com.gic.commons.util.ExcelUtils;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO;
import com.gic.haoban.common.utils.AuthWebRequestUtil;
import com.gic.haoban.manage.api.dto.EnterpriseDetailDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.dto.chat.GroupChatDTO;
import com.gic.haoban.manage.api.dto.chat.GroupChatOwnerDTO;
......@@ -23,6 +24,7 @@ import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatSearchQDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.GroupChatUserSearchQDTO;
import com.gic.haoban.manage.api.dto.qdto.chat.OwnerSearchQDTO;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.WxEnterpriseRelatedApiService;
import com.gic.haoban.manage.api.service.chat.GroupChatApiService;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.haoban.manage.web.log.LogRecordUserServiceImpl;
......@@ -68,6 +70,8 @@ public class GroupChatController {
private GroupChatUserExcelHandler groupChatUserExcelHandler;
@Autowired
private GroupChatUserQuitExcelHandler groupChatUserQuitExcelHandler ;
@Autowired
private WxEnterpriseRelatedApiService wxEnterpriseRelatedApiService ;
@RequestMapping("get-set-gic-flag")
public RestResponse<Object> getFlag() {
......@@ -268,6 +272,21 @@ public class GroupChatController {
public RestResponse<Object> ownerPage(OwnerSearchQDTO qdto, BasePageInfo basePageInfo) {
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
qdto.setWxEnterpriseId(loginUser.getWxEnterpriseId());
// 是否需要显示门店名称
String paramsEnterpriseId = qdto.getParamsEnterpriseId() ;
if(StringUtils.isNotBlank(paramsEnterpriseId)) {
qdto.setShowStoreNames(1);
qdto.setShowNameEnterpriseId(paramsEnterpriseId);
}else {
List<EnterpriseDetailDTO> list = this.wxEnterpriseRelatedApiService.listEnterpriseByWxEnterpriseId(loginUser.getWxEnterpriseId(),loginUser.getPhoneNumber(),false) ;
if(CollectionUtils.isEmpty(list)) {
return RestResponse.failure("-1", "未关联gic商户");
}
if(list.size()==1) {
qdto.setShowStoreNames(1);
qdto.setShowNameEnterpriseId(list.get(0).getEnterpriseId());
}
}
ServiceResponse<Page<GroupChatOwnerDTO>> resp = this.groupChatApiService.listOwnerPage(qdto, basePageInfo);
return RestResponse.successResult(resp.getResult());
}
......
......@@ -15,6 +15,8 @@ import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
......@@ -88,6 +90,8 @@ public class GroupChatHmController {
private DownloadReportService downloadReportService;
@Autowired
private EnterpriseService enterpriseService;
@Autowired
private StoreService storeService ;
@RequestMapping("add")
@GicLogRecord(value = "${#logValue}", category = GicLogRecordCategoryEnum.HB_QHM, optType = GicLogRecordOptTypeEnum.HB_1002_01, userFunc = LogRecordUserServiceImpl.class, optPage = "群活码-新建活码")
......@@ -174,6 +178,34 @@ public class GroupChatHmController {
content.append(b);
}
String s = null ;
String oldStoreId = oldDTO.getStoreId();
if(null == oldStoreId) {
oldStoreId = "";
}
String newStoreId = newDTO.getStoreId();
if(null == newStoreId) {
newStoreId = "";
}
if(!oldStoreId.equals(newStoreId)) {
String oldName = "--";
if(StringUtils.isNotBlank(oldStoreId)) {
StoreDTO oldStore = this.storeService.getStore(oldStoreId) ;
if(null != oldStore) {
oldName = oldStore.getStoreName() + "-" + oldStore.getStoreCode();
}
}
String newName = "--";
if(StringUtils.isNotBlank(newStoreId)) {
StoreDTO newStore = this.storeService.getStore(newStoreId) ;
if(null != newStore) {
newName = newStore.getStoreName() + "-" + newStore.getStoreCode();
}
}
s = String.format("归属门店从【%s】修改为【%s】", oldName, newName);
content.append(s) ;
}
String o = null;
List<Long> newIdList = newDTO.getChatIdList();
......@@ -222,7 +254,7 @@ public class GroupChatHmController {
content.append(f);
}
}
if (org.apache.commons.lang3.StringUtils.isAllBlank(a, b, c, d, e, f, o, p)) {
if (org.apache.commons.lang3.StringUtils.isAllBlank(a, b, c, d, e, f, o, p , s)) {
return null;
}
StringBuilder sb = new StringBuilder("编辑群活码").append("【").append(oldDTO.getChatHmCode()).append("-")
......@@ -283,6 +315,16 @@ public class GroupChatHmController {
if (vo.getUsableChatCount() == 0) {
vo.setUseRemark("无可加入的群聊");
}
if(StringUtils.isNotBlank(vo.getStoreId())) {
StoreDTO storeDTO = this.storeService.getStoreByIdNoStatus(vo.getStoreId());
if(null != storeDTO) {
vo.setStoreName(storeDTO.getStoreName());
vo.setStoreCode(storeDTO.getStoreCode());
if(null != storeDTO.getStatus() && storeDTO.getStatus()!=0 && storeDTO.getStatus()!=-3) {
vo.setStoreStatus(1);
}
}
}
});
}
return RestResponse.successResult(retPage);
......@@ -298,6 +340,16 @@ public class GroupChatHmController {
return RestResponse.failure("1", "群活码不存在");
}
GroupChatHmDTO hm = linkResp.getResult();
if(StringUtils.isNotBlank(hm.getStoreId())) {
StoreDTO storeDTO = this.storeService.getStoreByIdNoStatus(hm.getStoreId());
if(null != storeDTO) {
hm.setStoreName(storeDTO.getStoreName());
hm.setStoreCode(storeDTO.getStoreCode());
if(null != storeDTO.getStatus() && storeDTO.getStatus()!=0) {
hm.setStoreStatus(1);
}
}
}
return RestResponse.successResult(hm);
}
......
......@@ -49,7 +49,7 @@ import javax.servlet.http.HttpServletResponse;
/**
*
* @ClassName: GroupChatPlanController
* @Description: 群群发任务
* @Description: 群群发活动
* @author xugh
* @date 2022年11月26日 上午9:32:56
*
......@@ -94,12 +94,12 @@ public class GroupChatPlanController {
public RestResponse<Object> del(Long planId) {
if (null == planId) {
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure("9999", "任务ID空");
return RestResponse.failure("9999", "活动ID空");
}
ServiceResponse<GroupChatPlanDTO> planResp = this.groupChatPlanApiService.detail(planId);
if (!planResp.isSuccess()) {
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure("1", "任务不存在");
return RestResponse.failure("1", "活动不存在");
}
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
this.groupChatPlanApiService.del(loginUser.getClerkId(), loginUser.getClerkName(), planId);
......@@ -123,17 +123,17 @@ public class GroupChatPlanController {
public RestResponse<Object> stop(Long planId) {
if (null == planId) {
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure("9999", "任务ID空");
return RestResponse.failure("9999", "活动ID空");
}
ServiceResponse<GroupChatPlanDTO> planResp = this.groupChatPlanApiService.detail(planId);
if (!planResp.isSuccess()) {
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure("1", "任务不存在");
return RestResponse.failure("1", "活动不存在");
}
GroupChatPlanDTO plan = planResp.getResult();
if (plan.getEndTime().getTime() <= new Date().getTime()) {
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure("1", "任务已结束");
return RestResponse.failure("1", "活动已结束");
}
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
this.groupChatPlanApiService.stop(loginUser.getClerkId(), loginUser.getClerkName(), planId);
......@@ -151,12 +151,12 @@ public class GroupChatPlanController {
GroupChatPlanDTO oldPlan = oldResp.getResult();
if (null == oldPlan) {
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure("9999", "任务不存在");
return RestResponse.failure("9999", "活动不存在");
}
long now = System.currentTimeMillis();
if (oldPlan.getEndTime().getTime() <= now || oldPlan.getStatusFlag() == 0) {
GicLogRecordEvaluationContext.noWriteLog();
return RestResponse.failure("9999", "任务已结束");
return RestResponse.failure("9999", "活动已结束");
}
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
dto.setWxEnterpriseId(loginUser.getWxEnterpriseId());
......@@ -164,7 +164,7 @@ public class GroupChatPlanController {
dto.setModifierId(loginUser.getClerkId());
dto.setModifierName(loginUser.getClerkName());
ServiceResponse<GroupChatPlanDTO> resp = null;
// 任务进行中只能编辑备注
// 活动进行中只能编辑备注
if (oldPlan.getStartTime().getTime() <= now && oldPlan.getEndTime().getTime() >= now) {
resp = this.groupChatPlanApiService.updateRemark(dto);
} else {
......@@ -187,11 +187,11 @@ public class GroupChatPlanController {
String wxEnterpriseId = newDTO.getWxEnterpriseId();
String enterpriseId = newDTO.getEnterpriseId();
StringBuilder content = new StringBuilder();
String a = comp(wxEnterpriseId, enterpriseId, "任务标题", oldDTO.getName(), newDTO.getName(), 0);
String a = comp(wxEnterpriseId, enterpriseId, "活动标题", oldDTO.getName(), newDTO.getName(), 0);
if (null != a) {
content.append(a);
}
String b = comp(wxEnterpriseId, enterpriseId, "任务描述", oldDTO.getRemark(), newDTO.getRemark(), 0);
String b = comp(wxEnterpriseId, enterpriseId, "活动描述", oldDTO.getRemark(), newDTO.getRemark(), 0);
if (null != b) {
content.append(b);
}
......@@ -298,7 +298,7 @@ public class GroupChatPlanController {
public RestResponse<Object> detail(Long planId, @RequestParam(defaultValue = "0") int updteFlag) {
ServiceResponse<GroupChatPlanDTO> planResp = this.groupChatPlanApiService.detail(planId);
if (!planResp.isSuccess()) {
return RestResponse.failure("1", "任务不存在");
return RestResponse.failure("1", "活动不存在");
}
GroupChatPlanDTO plan = planResp.getResult();
plan.getStaffIdList();
......@@ -355,14 +355,14 @@ public class GroupChatPlanController {
@RequestMapping("owner-log")
public RestResponse<Object> ownerLog(Long planId, GroupChatPlanSearchQDTO qdto, BasePageInfo basePageInfo) {
if (null == planId) {
return RestResponse.failure("9999", "任务ID空");
return RestResponse.failure("9999", "活动ID空");
}
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
qdto.setWxEnterpriseId(loginUser.getWxEnterpriseId());
ServiceResponse<Page<GroupChatPlanOwnerLogDTO>> resp = this.groupChatPlanApiService.listOwnerLogPage(planId,
qdto, basePageInfo);
if (!resp.isSuccess()) {
return RestResponse.failure("1", "任务不存在");
return RestResponse.failure("1", "活动不存在");
}
return RestResponse.successResult(resp.getResult());
}
......@@ -370,14 +370,14 @@ public class GroupChatPlanController {
@RequestMapping("log")
public RestResponse<Object> log(Long planId, GroupChatPlanSearchQDTO qdto, BasePageInfo basePageInfo) {
if (null == planId) {
return RestResponse.failure("9999", "任务ID空");
return RestResponse.failure("9999", "活动ID空");
}
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
qdto.setWxEnterpriseId(loginUser.getWxEnterpriseId());
ServiceResponse<Page<GroupChatPlanLogDTO>> resp = this.groupChatPlanApiService.listLogPage(planId, qdto,
basePageInfo);
if (!resp.isSuccess()) {
return RestResponse.failure("1", "任务不存在");
return RestResponse.failure("1", "活动不存在");
}
return RestResponse.successResult(resp.getResult());
}
......@@ -445,9 +445,9 @@ public class GroupChatPlanController {
}
//设置sheet的表头与表名
String[] groupChatListSheetHead = {"任务名称", "任务状态", "已完成群主数", "未完成群主数", "完成率", "已送达群数", "任务开始时间", "任务结束时间", "创建人", "创建时间"};
String[] sendSheetHead = {"任务名称", "发送人", "关联导购","关联导购code", "关联门店", "关联门店code","完成状态", "已送达客户群数", "发送时间", "任务开始时间", "任务结束时间"};
String[] receiveSheetHead = {"任务名称", "群名称", "群人数", "发送人", "关联导购", "关联导购code","关联门店", "关联门店code","发送状态", "发送时间", "任务开始时间", "任务结束时间"};
String[] groupChatListSheetHead = {"活动名称", "活动状态", "执行方式","已完成群主数", "未完成群主数", "完成率", "已送达群数", "活动开始时间", "活动结束时间", "创建人", "创建时间"};
String[] sendSheetHead = {"活动名称", "发送人", "关联导购","关联导购code", "关联门店", "关联门店code","完成状态", "已送达客户群数", "发送时间", "活动开始时间", "活动结束时间"};
String[] receiveSheetHead = {"活动名称", "群名称", "群人数", "发送人", "关联导购", "关联导购code","关联门店", "关联门店code","发送状态", "发送时间", "活动开始时间", "活动结束时间"};
List<ExcelSheet> mysheet = new ArrayList<>();
ExcelSheet groupChatListExcel = new ExcelSheet("客户群发列表", groupChatListSheetHead, changeGroupChatPlanExcelVOList(groupChatPlanExcelVOList));
......@@ -467,7 +467,7 @@ public class GroupChatPlanController {
String startTime = DateUtil.formatString(vo.getStartTime(), DateUtil.FORMAT_DATETIME_19);
String endTime = DateUtil.formatString(vo.getEndTime(), DateUtil.FORMAT_DATETIME_19);
String createTime = DateUtil.formatString(vo.getCreateTime(), DateUtil.FORMAT_DATETIME_19);
String[] a = {vo.getName(), vo.getStatus(), vo.getSendCount()==null?"":vo.getSendCount().toString(), vo.getStaffCount()==null?"":vo.getStaffCount().toString(),
String[] a = {vo.getName(), vo.getStatus(), vo.getExecTypeExcel(),vo.getSendCount()==null?"":vo.getSendCount().toString(), vo.getStaffCount()==null?"":vo.getStaffCount().toString(),
vo.getCompletionRate(), vo.getSuccessChatCount()==null?"":vo.getSuccessChatCount().toString(), startTime, endTime, vo.getCreatorName(),createTime};
result.add(a);
}
......
......@@ -11,6 +11,7 @@ import java.util.stream.Collectors;
import cn.hutool.core.date.DatePattern;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.gic.api.base.commons.JSONResponse;
import com.gic.clerk.api.dto.AuthorizedUser;
import com.gic.qcloud.BucketNameEnum;
......@@ -226,6 +227,22 @@ public class HmLinkController {
if (null != b) {
content.append(b);
}
String oldChatRule = oldDTO.getChatStoreRule();
if(null == oldChatRule) {
oldChatRule = "";
}
String newChatRule = newDTO.getChatStoreRule();
if(null == newChatRule) {
newChatRule = "";
}
String s = null ;
logger.info("{},{}",oldChatRule,newChatRule);
if(!oldChatRule.equals(newChatRule)) {
String oldName = this.getChatRuleName(oldChatRule) ;
String newName = this.getChatRuleName(newChatRule) ;
s = String.format("定向入群设置从【%s】修改为【%s】", oldName, newName) ;
content.append(s) ;
}
// 其他群活码
String c = null;
if (!oldDTO.getOtherChatHmId().equals(newDTO.getOtherChatHmId())) {
......@@ -262,7 +279,7 @@ public class HmLinkController {
d = sb.toString();
content.append(d);
}
if (org.apache.commons.lang3.StringUtils.isAllBlank(a, b, c, d)) {
if (org.apache.commons.lang3.StringUtils.isAllBlank(a, b, c, d,s)) {
return null;
}
StringBuilder sb = new StringBuilder("编辑引流链接").append("【").append(oldDTO.getLinkCode()).append("-")
......@@ -270,6 +287,34 @@ public class HmLinkController {
return sb.append(content).toString();
}
private String getChatRuleName(String chatRule) {
if(org.apache.commons.lang3.StringUtils.isBlank(chatRule)) {
return "--" ;
}
JSONArray arr = JSON.parseArray(chatRule) ;
List<String> list = new ArrayList<>() ;
for(int i=0;i<arr.size();i++) {
JSONObject json = arr.getJSONObject(i) ;
if(json.getIntValue("open")==1) {
int type = json.getIntValue("type") ;
if(type==1) {
list.add("服务门店");
}else if(type==2) {
list.add("协管门店");
}else if(type==3) {
list.add("LBS定位");
}else if(type==4) {
list.add("指定人群");
}
}
}
if(CollectionUtils.isEmpty(list)) {
return "--" ;
}
return list.stream().collect(Collectors.joining("、"));
}
private String getUpdateLog(HmLinkDTO oldDTO, HmLinkDTO newDTO) {
String wxEnterpriseId = newDTO.getWxEnterpriseId();
String enterpriseId = newDTO.getEnterpriseId();
......
package com.gic.haoban.manage.web.controller.moment;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.commons.util.EntityUtil;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.haoban.manage.web.vo.moment.MomentDataClickVO;
import com.gic.member.api.dto.es.MemberDataDTO;
import com.gic.web.common.download.DownloadHandlerAbstract;
import com.gic.web.common.download.context.Context;
import com.gic.web.common.utils.DataApiUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class MomentDataClickExcelHandler extends DownloadHandlerAbstract<MomentDataClickVO> {
@Autowired
private QwMomentController qwMomentController ;
@Autowired
private QwMomentDataController qwMomentDataController ;
@Override
public List<MomentDataClickVO> getData(Context context, String json, Integer currentPage) {
Map<String, Object> res = DataApiUtils.http(json, "data_qw_moment_mbr_click_detail");
JSONObject jsonObject = JSONObject.parseObject(json) ;
Page page = DataApiUtils.getPageData(res);
List<MomentDataClickVO> voList = EntityUtil.changeEntityListByJSON(MomentDataClickVO.class, page.getResult());
if(CollectionUtils.isNotEmpty(voList)) {
List<String> memberIdList = voList.stream().map(o->o.getMbrId()).collect(Collectors.toList());
Map<String, MemberDataDTO> map = this.qwMomentController.getMemberMap(jsonObject.getString("enterpriseId"),memberIdList) ;
for (MomentDataClickVO vo : voList) {
String memberId = vo.getMbrId();
vo.setMemberId(memberId);
if(null == map.get(memberId)) {
vo.setMemberScene(2);
}else {
MemberDataDTO data = map.get(memberId) ;
vo.setMemberName(data.getName());
vo.setMemberNick(data.getNickName());
vo.setMemberCardNo(data.getCardNo());
vo.setMemberPhone(data.getPhoneNumber());
vo.setMemberImage(data.getDefineHeadImg());
vo.setClerkId(data.getMainClerkId());
vo.setStoreId(data.getMainStoreId());
vo.setMemberScene(3);
}
}
Set<String> storeSet = voList.stream().filter(o->StringUtils.isNotBlank(o.getStoreId()) && !"-1".equals(o.getStoreId())).map(o->o.getStoreId()).collect(Collectors.toSet()) ;
Set<String> clerkSet = voList.stream().filter(o->StringUtils.isNotBlank(o.getClerkId()) && !"-1".equals(o.getClerkId())).map(o->o.getClerkId()).collect(Collectors.toSet());
Map<String,StoreDTO> storeMap = this.qwMomentDataController.storeMap(storeSet) ;
Map<String, ClerkDTO> clerkMap = this.qwMomentDataController.clerkMap(clerkSet) ;
for (MomentDataClickVO vo : voList) {
if(null != storeMap.get(vo.getStoreId())) {
vo.setStoreCode(storeMap.get(vo.getStoreId()).getStoreCode());
vo.setStoreName(storeMap.get(vo.getStoreId()).getStoreName());
}
if(null != clerkMap.get(vo.getClerkId())) {
vo.setClerkCode(clerkMap.get(vo.getClerkId()).getClerkCode());
vo.setClerkName(clerkMap.get(vo.getClerkId()).getClerkName());
}
}
}
return voList ;
}
@Override
public List<String> getColumnNames() {
return Arrays.asList();
}
@Override
public List<String> getColumnNames(Context context) {
return Arrays.asList("会员姓名", "会员昵称", "手机号", "会员卡号", "专属导购姓名", "专属导购code", "所属门店名称", "所属门店code", "点击时间", "停留时长");
}
@Override
public List<String> getColumns(Context context) {
return Arrays.asList("memberName", "memberNick", "memberPhone", "memberCardNo", "clerkName", "clerkCode", "storeName", "storeCode", "clickTime", "dur");
}
@Override
public LinkedHashMap<String, List<String>> doubleColumnNames() {
return null;
}
@Override
public List<String> getColumns() {
return Arrays.asList();
}
}
package com.gic.haoban.manage.web.controller.moment;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.commons.util.EntityUtil;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.haoban.common.utils.AuthWebRequestUtil;
import com.gic.haoban.manage.web.vo.moment.MomentDataMemberVO;
import com.gic.member.api.dto.es.MemberDataDTO;
import com.gic.web.common.download.DownloadHandlerAbstract;
import com.gic.web.common.download.context.Context;
import com.gic.web.common.utils.DataApiUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class MomentDataMemberExcelHandler extends DownloadHandlerAbstract<MomentDataMemberVO> {
@Autowired
private QwMomentController qwMomentController ;
@Autowired
private QwMomentDataController qwMomentDataController ;
@Override
public List<MomentDataMemberVO> getData(Context context, String json, Integer currentPage) {
JSONObject jsonObject = JSONObject.parseObject(json) ;
Map<String, Object> res = DataApiUtils.http(json, "data_qw_moment_mbr_detail");
Page page = DataApiUtils.getPageData(res);
List<MomentDataMemberVO> voList = EntityUtil.changeEntityListByJSON(MomentDataMemberVO.class, page.getResult());
if(CollectionUtils.isNotEmpty(voList)) {
List<String> memberIdList = voList.stream().map(o->o.getMbrId()).collect(Collectors.toList());
Map<String, MemberDataDTO> map = this.qwMomentController.getMemberMap(jsonObject.getString("enterpriseId"),memberIdList) ;
for (MomentDataMemberVO vo : voList) {
String memberId = vo.getMbrId();
vo.setMemberId(memberId);
if(null == map.get(memberId)) {
vo.setMemberScene(2);
}else {
MemberDataDTO data = map.get(memberId) ;
vo.setMemberName(data.getName());
vo.setMemberNick(data.getNickName());
vo.setMemberCardNo(data.getCardNo());
vo.setMemberPhone(data.getPhoneNumber());
vo.setMemberImage(data.getDefineHeadImg());
vo.setClerkId(data.getMainClerkId());
vo.setStoreId(data.getMainStoreId());
vo.setMemberScene(3);
}
}
Set<String> storeSet = voList.stream().filter(o-> StringUtils.isNotBlank(o.getStoreId()) && !"-1".equals(o.getStoreId())).map(o->o.getStoreId()).collect(Collectors.toSet()) ;
Set<String> clerkSet = voList.stream().filter(o->StringUtils.isNotBlank(o.getClerkId()) && !"-1".equals(o.getClerkId())).map(o->o.getClerkId()).collect(Collectors.toSet());
Map<String, StoreDTO> storeMap = this.qwMomentDataController.storeMap(storeSet) ;
Map<String, ClerkDTO> clerkMap = this.qwMomentDataController.clerkMap(clerkSet) ;
for (MomentDataMemberVO vo : voList) {
if(null != storeMap.get(vo.getStoreId())) {
vo.setStoreCode(storeMap.get(vo.getStoreId()).getStoreCode());
vo.setStoreName(storeMap.get(vo.getStoreId()).getStoreName());
}
if(null != clerkMap.get(vo.getClerkId())) {
vo.setClerkCode(clerkMap.get(vo.getClerkId()).getClerkCode());
vo.setClerkName(clerkMap.get(vo.getClerkId()).getClerkName());
}
}
}
return voList ;
}
@Override
public List<String> getColumnNames() {
return Arrays.asList();
}
@Override
public List<String> getColumnNames(Context context) {
return Arrays.asList("会员姓名", "会员昵称", "手机号", "会员卡号", "专属导购姓名", "专属导购code", "所属门店名称", "所属门店code", "转化金额");
}
@Override
public List<String> getColumns(Context context) {
return Arrays.asList("memberName", "memberNick", "memberPhone", "memberCardNo", "clerkName", "clerkCode", "storeName", "storeCode", "matlConvsAmt");
}
@Override
public LinkedHashMap<String, List<String>> doubleColumnNames() {
return null;
}
@Override
public List<String> getColumns() {
return Arrays.asList();
}
}
package com.gic.haoban.manage.web.controller.moment;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.commons.util.EntityUtil;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.enums.PlatformChannelEnum;
import com.gic.haoban.common.utils.AuthWebRequestUtil;
import com.gic.haoban.manage.web.vo.moment.MomentDataOrderVO;
import com.gic.member.api.dto.es.MemberDataDTO;
import com.gic.web.common.download.DownloadHandlerAbstract;
import com.gic.web.common.download.context.Context;
import com.gic.web.common.utils.DataApiUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class MomentDataOrderExcelHandler extends DownloadHandlerAbstract<MomentDataOrderVO> {
@Autowired
private QwMomentController qwMomentController ;
@Autowired
private QwMomentDataController qwMomentDataController ;
@Override
public List<MomentDataOrderVO> getData(Context context, String json, Integer currentPage) {
JSONObject jsonObject = JSONObject.parseObject(json) ;
Map<String, Object> res = DataApiUtils.http(json, "data_qw_moment_order_detail");
Page page = DataApiUtils.getPageData(res);
List<MomentDataOrderVO> voList = EntityUtil.changeEntityListByJSON(MomentDataOrderVO.class, page.getResult());
if(CollectionUtils.isNotEmpty(voList)) {
List<String> memberIdList = voList.stream().map(o -> o.getMbrId()).collect(Collectors.toList());
Map<String, MemberDataDTO> map = this.qwMomentController.getMemberMap(jsonObject.getString("enterpriseId"), memberIdList);
for (MomentDataOrderVO vo : voList) {
String memberId = vo.getMbrId();
vo.setMemberId(memberId);
if (null == map.get(memberId)) {
vo.setMemberScene(2);
} else {
MemberDataDTO data = map.get(memberId);
vo.setMemberName(data.getName());
vo.setMemberNick(data.getNickName());
vo.setMemberCardNo(data.getCardNo());
vo.setMemberPhone(data.getPhoneNumber());
vo.setMemberImage(data.getDefineHeadImg());
vo.setMemberScene(3);
}
PlatformChannelEnum channel = PlatformChannelEnum.getEnumByChannelCode(vo.getChannelCode()) ;
if(null != channel) {
vo.setChannelName(channel.getChannelName());
}
}
Set<String> storeSet = voList.stream().filter(o -> StringUtils.isNotBlank(o.getOrderStoreId()) && !"-1".equals(o.getOrderStoreId())).map(o -> o.getOrderStoreId()).collect(Collectors.toSet());
Map<String, StoreDTO> storeMap = this.qwMomentDataController.storeMap(storeSet);
for (MomentDataOrderVO vo : voList) {
if (null != storeMap.get(vo.getOrderStoreId())) {
vo.setOrderStoreCode(storeMap.get(vo.getOrderStoreId()).getStoreCode());
vo.setOrderStoreName(storeMap.get(vo.getOrderStoreId()).getStoreName());
}
}
}
return voList ;
}
@Override
public List<String> getColumnNames() {
return Arrays.asList();
}
@Override
public List<String> getColumnNames(Context context) {
return Arrays.asList("会员姓名", "会员昵称", "手机号", "会员卡号", "订单渠道", "订单编号", "订单实付金额", "消费门店名称", "消费门店 code", "下单时间");
}
@Override
public List<String> getColumns(Context context) {
return Arrays.asList("memberName", "memberNick", "memberPhone", "memberCardNo", "channelName", "orderCode", "matlConvsAmt", "orderStoreName", "orderStoreCode", "orderTime");
}
@Override
public LinkedHashMap<String, List<String>> doubleColumnNames() {
return null;
}
@Override
public List<String> getColumns() {
return Arrays.asList();
}
}
......@@ -726,6 +726,18 @@ public class QywxOpenTaskController {
}
newType += "社群群发";
}
if (oldSendType.contains("3")) {
if (StringUtils.isNotBlank(oldType)) {
oldType += "、";
}
oldType += "企微朋友圈";
}
if (newSendType.contains("3")) {
if (StringUtils.isNotBlank(newType)) {
newType += "、";
}
newType += "企微朋友圈";
}
if (!oldType.equals(newType)) {
logContent2 += "执行消息类型从【" + oldType + "】修改为【" + newType + "】";
}
......
package com.gic.haoban.manage.web.qo.moment;
import com.gic.api.base.commons.BasePageInfo;
import java.io.Serializable;
public class MomentDataQO extends BasePageInfo implements Serializable {
private Long planId ;
private String memberId ;
/**
* 订单渠道
*/
private String orderChannel ;
/**
* 订单编号
*/
private String orderNumber ;
private Integer dataType ;
public Integer getDataType() {
return dataType;
}
public void setDataType(Integer dataType) {
this.dataType = dataType;
}
public Long getPlanId() {
return planId;
}
public void setPlanId(Long planId) {
this.planId = planId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getOrderChannel() {
return orderChannel;
}
public void setOrderChannel(String orderChannel) {
this.orderChannel = orderChannel;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
}
......@@ -69,6 +69,26 @@ public class QwMomentPlanQO implements Serializable {
*/
private Integer mediaLinkFlag ;
private Integer analyseFlag ;
private Integer analyseDay ;
public Integer getAnalyseFlag() {
return analyseFlag;
}
public void setAnalyseFlag(Integer analyseFlag) {
this.analyseFlag = analyseFlag;
}
public Integer getAnalyseDay() {
return analyseDay;
}
public void setAnalyseDay(Integer analyseDay) {
this.analyseDay = analyseDay;
}
public Integer getMediaLinkFlag() {
return mediaLinkFlag;
}
......
......@@ -42,6 +42,43 @@ public class GroupChatHmVO implements Serializable {
// 可以群数
private Integer usableChatCount;
private String useRemark;
private String storeId ;
private String storeName ;
private String storeCode ;
// 0已删除 1有效
private int storeStatus ;
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public String getStoreCode() {
return storeCode;
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
public int getStoreStatus() {
return storeStatus;
}
public void setStoreStatus(int storeStatus) {
this.storeStatus = storeStatus;
}
public String getUseRemark() {
return useRemark;
......
......@@ -60,6 +60,30 @@ public class GroupChatPlanExcelVO extends Object implements Serializable{
*/
private Date createTime;
private int execType;
// 执行方式 0企微1好办小程序
private String execTypeExcel ;
public int getExecType() {
return execType;
}
public void setExecType(int execType) {
this.execType = execType;
}
public String getExecTypeExcel() {
if(execType==1) {
return "好办小程序发送" ;
}
return "企微快捷键发送";
}
public void setExecTypeExcel(String execTypeExcel) {
this.execTypeExcel = execTypeExcel;
}
public String getName() {
return name;
}
......@@ -80,6 +104,8 @@ public class GroupChatPlanExcelVO extends Object implements Serializable{
return status;
}
public void setStatus(String status) {
this.status = status;
}
......
......@@ -51,6 +51,16 @@ public class HmLinkVO implements Serializable {
private List<HmLinkStoreVO> storeList;
private Long otherChatHmId ;
private List<HmLinkChatVO> linkChatList ;
// [{"type":1服务门店2协管3lbs4指定人群,"open":1}]
private String chatStoreRule ;
public String getChatStoreRule() {
return chatStoreRule;
}
public void setChatStoreRule(String chatStoreRule) {
this.chatStoreRule = chatStoreRule;
}
public Long getOtherChatHmId() {
return otherChatHmId;
......
......@@ -141,6 +141,25 @@ public class HaobanQwMomentPlanVO implements Serializable {
*/
private Integer mediaLinkFlag ;
private Integer analyseFlag ;
private Integer analyseDay ;
public Integer getAnalyseFlag() {
return analyseFlag;
}
public void setAnalyseFlag(Integer analyseFlag) {
this.analyseFlag = analyseFlag;
}
public Integer getAnalyseDay() {
return analyseDay;
}
public void setAnalyseDay(Integer analyseDay) {
this.analyseDay = analyseDay;
}
public Integer getMediaLinkFlag() {
return mediaLinkFlag;
}
......
package com.gic.haoban.manage.web.vo.moment;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.gic.web.common.jsonSeralizer.CardNoJsonSeralizer;
import com.gic.web.common.jsonSeralizer.PhoneNumberJsonSeralizer;
import java.io.Serializable;
public class MomentDataClickVO implements Serializable {
private String mbrId ;
private String memberId ;
/**
* 会员名称
*/
private String memberName;
private String memberImage;
/**
* 会员昵称
*/
private String memberNick;
@JsonSerialize(using = CardNoJsonSeralizer.class)
private String memberCardNo;
/**
* 会员手机号
*/
@JsonSerialize(using = PhoneNumberJsonSeralizer.class)
private String memberPhone;
private String storeId ;
private String clerkId ;
private String clerkCode;
private String clerkName;
private String storeName;
private String storeCode;
/**
* 浏览时长
*/
private Integer dur ;
/**
* 浏览时间
*/
private String clickTime ;
/**
* 1:非会员 2:会员已注销 3:正常
*/
private Integer memberScene;
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 Integer getMemberScene() {
return memberScene;
}
public void setMemberScene(Integer memberScene) {
this.memberScene = memberScene;
}
public String getMbrId() {
return mbrId;
}
public void setMbrId(String mbrId) {
this.mbrId = mbrId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getMemberImage() {
return memberImage;
}
public void setMemberImage(String memberImage) {
this.memberImage = memberImage;
}
public String getMemberNick() {
return memberNick;
}
public void setMemberNick(String memberNick) {
this.memberNick = memberNick;
}
public String getMemberCardNo() {
return memberCardNo;
}
public void setMemberCardNo(String memberCardNo) {
this.memberCardNo = memberCardNo;
}
public String getMemberPhone() {
return memberPhone;
}
public void setMemberPhone(String memberPhone) {
this.memberPhone = memberPhone;
}
public String getClerkCode() {
return clerkCode;
}
public void setClerkCode(String clerkCode) {
this.clerkCode = clerkCode;
}
public String getClerkName() {
return clerkName;
}
public void setClerkName(String clerkName) {
this.clerkName = clerkName;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public String getStoreCode() {
return storeCode;
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
public Integer getDur() {
return dur;
}
public void setDur(Integer dur) {
this.dur = dur;
}
public String getClickTime() {
return clickTime;
}
public void setClickTime(String clickTime) {
this.clickTime = clickTime;
}
}
package com.gic.haoban.manage.web.vo.moment;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.gic.web.common.jsonSeralizer.CardNoJsonSeralizer;
import com.gic.web.common.jsonSeralizer.PhoneNumberJsonSeralizer;
import java.io.Serializable;
public class MomentDataMemberVO implements Serializable {
private String mbrId ;
private String memberId ;
/**
* 会员名称
*/
private String memberName;
private String memberImage;
/**
* 会员昵称
*/
private String memberNick;
@JsonSerialize(using = CardNoJsonSeralizer.class)
private String memberCardNo;
/**
* 会员手机号
*/
@JsonSerialize(using = PhoneNumberJsonSeralizer.class)
private String memberPhone;
private String storeId ;
private String clerkId ;
private String clerkCode;
private String clerkName;
private String storeName;
private String storeCode;
/**
* 转化金额
*/
private Double matlConvsAmt ;
/**
* 1:非会员 2:会员已注销 3:正常
*/
private Integer memberScene;
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 Integer getMemberScene() {
return memberScene;
}
public void setMemberScene(Integer memberScene) {
this.memberScene = memberScene;
}
public String getMbrId() {
return mbrId;
}
public void setMbrId(String mbrId) {
this.mbrId = mbrId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getMemberImage() {
return memberImage;
}
public void setMemberImage(String memberImage) {
this.memberImage = memberImage;
}
public String getMemberNick() {
return memberNick;
}
public void setMemberNick(String memberNick) {
this.memberNick = memberNick;
}
public String getMemberCardNo() {
return memberCardNo;
}
public void setMemberCardNo(String memberCardNo) {
this.memberCardNo = memberCardNo;
}
public String getMemberPhone() {
return memberPhone;
}
public void setMemberPhone(String memberPhone) {
this.memberPhone = memberPhone;
}
public String getClerkCode() {
return clerkCode;
}
public void setClerkCode(String clerkCode) {
this.clerkCode = clerkCode;
}
public String getClerkName() {
return clerkName;
}
public void setClerkName(String clerkName) {
this.clerkName = clerkName;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public String getStoreCode() {
return storeCode;
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
public Double getMatlConvsAmt() {
return matlConvsAmt;
}
public void setMatlConvsAmt(Double matlConvsAmt) {
this.matlConvsAmt = matlConvsAmt;
}
}
package com.gic.haoban.manage.web.vo.moment;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.gic.web.common.jsonSeralizer.CardNoJsonSeralizer;
import com.gic.web.common.jsonSeralizer.PhoneNumberJsonSeralizer;
import java.io.Serializable;
public class MomentDataOrderVO implements Serializable {
private String mbrId ;
private String memberId ;
/**
* 会员名称
*/
private String memberName;
private String memberImage;
/**
* 会员昵称
*/
private String memberNick;
@JsonSerialize(using = CardNoJsonSeralizer.class)
private String memberCardNo;
/**
* 会员手机号
*/
@JsonSerialize(using = PhoneNumberJsonSeralizer.class)
private String memberPhone;
/**
* 订单渠道
*/
private String channelCode ;
private String channelName ;
/**
* 订单编号
*/
private String orderCode ;
/**
* 实付金额
*/
private Double matlConvsAmt ;
/**
* 消费门店
*/
private String orderStoreId ;
private String orderStoreName ;
private String orderStoreCode ;
/**
* 订单时间
*/
private String orderTime ;
/**
* 1:非会员 2:会员已注销 3:正常
*/
private Integer memberScene;
public Integer getMemberScene() {
return memberScene;
}
public void setMemberScene(Integer memberScene) {
this.memberScene = memberScene;
}
public String getMbrId() {
return mbrId;
}
public void setMbrId(String mbrId) {
this.mbrId = mbrId;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public String getMemberImage() {
return memberImage;
}
public void setMemberImage(String memberImage) {
this.memberImage = memberImage;
}
public String getMemberNick() {
return memberNick;
}
public void setMemberNick(String memberNick) {
this.memberNick = memberNick;
}
public String getMemberCardNo() {
return memberCardNo;
}
public void setMemberCardNo(String memberCardNo) {
this.memberCardNo = memberCardNo;
}
public String getMemberPhone() {
return memberPhone;
}
public void setMemberPhone(String memberPhone) {
this.memberPhone = memberPhone;
}
public String getChannelCode() {
return channelCode;
}
public void setChannelCode(String channelCode) {
this.channelCode = channelCode;
}
public String getChannelName() {
return channelName;
}
public void setChannelName(String channelName) {
this.channelName = channelName;
}
public String getOrderCode() {
return orderCode;
}
public void setOrderCode(String orderCode) {
this.orderCode = orderCode;
}
public Double getMatlConvsAmt() {
return matlConvsAmt;
}
public void setMatlConvsAmt(Double matlConvsAmt) {
this.matlConvsAmt = matlConvsAmt;
}
public String getOrderStoreId() {
return orderStoreId;
}
public void setOrderStoreId(String orderStoreId) {
this.orderStoreId = orderStoreId;
}
public String getOrderStoreName() {
return orderStoreName;
}
public void setOrderStoreName(String orderStoreName) {
this.orderStoreName = orderStoreName;
}
public String getOrderStoreCode() {
return orderStoreCode;
}
public void setOrderStoreCode(String orderStoreCode) {
this.orderStoreCode = orderStoreCode;
}
public String getOrderTime() {
return orderTime;
}
public void setOrderTime(String orderTime) {
this.orderTime = orderTime;
}
}
package com.gic.haoban.manage.web.vo.moment;
import java.io.Serializable;
public class MomentDataVO implements Serializable {
/**
* 点击数
*/
private Integer matlClickCnt ;
/**
* 点击会员数
*/
private Integer matlClickMbrNum ;
/**
* 转化金额
*/
private Double matlConvsAmt ;
/**
* 转化会员数
*/
private Integer matlConvsMbrNum ;
public Integer getMatlClickCnt() {
return matlClickCnt;
}
public void setMatlClickCnt(Integer matlClickCnt) {
this.matlClickCnt = matlClickCnt;
}
public Integer getMatlClickMbrNum() {
return matlClickMbrNum;
}
public void setMatlClickMbrNum(Integer matlClickMbrNum) {
this.matlClickMbrNum = matlClickMbrNum;
}
public Double getMatlConvsAmt() {
return matlConvsAmt;
}
public void setMatlConvsAmt(Double matlConvsAmt) {
this.matlConvsAmt = matlConvsAmt;
}
public Integer getMatlConvsMbrNum() {
return matlConvsMbrNum;
}
public void setMatlConvsMbrNum(Integer matlConvsMbrNum) {
this.matlConvsMbrNum = matlConvsMbrNum;
}
}
......@@ -229,7 +229,7 @@ public class WxEnterpriseInfoController extends WebBaseController {
return resultResponse(HaoBanErrCode.ERR_1, wellDoneLoginInfoVo);
}
if (StringUtils.isNotBlank(loginStaff.getPhoneNumber()) || StringUtils.isNotBlank(loginStaff.getWxOpenUseId())) {
if (StringUtils.isNotBlank(loginStaff.getPhoneNumber()) || StringUtils.isNotBlank(loginStaff.getWxOpenUseId()) || StringUtils.isNotBlank(loginStaff.getWxUserId())) {
DictDTO loginUserDict = managerDictService.getSMSDict("app_login_phone_num", loginStaff.getPhoneNumber());
if (null == loginUserDict) {
loginUserDict = managerDictService.getSMSDict("app_login_phone_num", loginStaff.getWxOpenUseId());
......
......@@ -71,6 +71,29 @@ public class ContentMaterialShareQO implements Serializable {
// 营销时间(任务创建时间)
private String marketingTime ;
// 1朋友圈
private int planType ;
// 生成素材的活动id
private String planId ;
public int getPlanType() {
return planType;
}
public void setPlanType(int planType) {
this.planType = planType;
}
public String getPlanId() {
return planId;
}
public void setPlanId(String planId) {
this.planId = planId;
}
public Long getCanvasId() {
return canvasId;
}
......
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