Commit a639e63f by 王祖波

Merge remote-tracking branch 'origin/developer' into developer

parents aeae8701 d7414861
......@@ -42,6 +42,16 @@ public class ExternalUserDTO implements Serializable{
// 是否刷新好友
private boolean isFlush = false ;
private String externalUseridInfo ;
public String getExternalUseridInfo() {
return externalUseridInfo;
}
public void setExternalUseridInfo(String externalUseridInfo) {
this.externalUseridInfo = externalUseridInfo;
}
public boolean isFlush() {
return isFlush;
}
......
......@@ -26,6 +26,17 @@ public class WxUserAddLogQDTO implements Serializable{
private String friendStoreId ;
// 0手动 1系统
private int delType ;
// 删除时是否单向好友 1是0否
private int delIsSingle ;
public int getDelIsSingle() {
return delIsSingle;
}
public void setDelIsSingle(int delIsSingle) {
this.delIsSingle = delIsSingle;
}
public int getDelType() {
return delType;
......
......@@ -53,6 +53,16 @@ public class WelcomeDetailDTO implements Serializable {
*/
private List<WelcomeMediaDTO> welcomeMediaList;
private int scene ;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public String getWelcomeId() {
return welcomeId;
}
......
......@@ -68,6 +68,16 @@ public class WelcomeListDTO implements Serializable {
private Integer type;
private int scene ;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public String getModifierId() {
return modifierId;
}
......
......@@ -23,6 +23,17 @@ public class QueryWelcomeQDTO extends BasePageInfo {
*/
private Integer type;
// 发送场景 0无条件 1全部 2加好友 3继承
private int scene ;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
......
......@@ -73,6 +73,16 @@ public class SaveWelcomeQDTO implements Serializable {
*/
private Integer type;
private int scene = 1 ;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public String getModifierId() {
return modifierId;
}
......
......@@ -35,6 +35,16 @@ public class OpenStaffPageQDTO implements Serializable {
private List<String> staffIds ;
private String loginClerkId ;
public String getLoginClerkId() {
return loginClerkId;
}
public void setLoginClerkId(String loginClerkId) {
this.loginClerkId = loginClerkId;
}
public List<String> getStaffIds() {
return staffIds;
}
......
......@@ -128,5 +128,10 @@ public interface HaobanTimerApiService {
*/
void openStaffTimer(String params) ;
/**
* 托管服务到期
* @param params
*/
void openStaffServiceTimer(String params) ;
}
......@@ -90,7 +90,7 @@ public interface QywxTagApiService {
* @param externalUserId
* @return
*/
public ServiceResponse syncQywxTagToGicByExternalUserId(String wxEnterpriseId, String externalUserId, String wxUserId);
public ServiceResponse syncQywxTagToGicByExternalUserId(String wxEnterpriseId, String externalUserId, String wxUserId , String externalUserInfo);
/**
* 更改状态
......
......@@ -165,6 +165,12 @@ public interface GroupChatApiService {
public GroupChatUserDTO getGroupUserInfo(Long groupChatId , String externalUserId) ;
/**
* 自动群群发的id
* @param enterpriseId
* @param staffId
* @return
*/
public List<String> listOpenGroupChatDK(String enterpriseId , String staffId) ;
}
......@@ -12,14 +12,17 @@ import com.gic.haoban.task.manage.api.enums.OpenQwMsgTypeEnum;
import com.gic.mq.sdk.GicMQClient;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Struct;
import java.util.*;
@Controller
......@@ -35,10 +38,14 @@ public class QywxCallbackController extends WebBaseController {
@RequestMapping("qywx-msg-notice")
@IgnoreLogin
@ResponseBody
public Object callback(HttpServletRequest request , HttpServletResponse response) {
try {
String body = IOUtils.toString(request.getInputStream()) ;
logger.info("企微消息下发={}",body);
if(StringUtils.isBlank(body)) {
return "ok" ;
}
JSONObject jsonObject = JSONObject.parseObject(body) ;
int type = jsonObject.getIntValue("type") ;
String uuid = jsonObject.getString("uuid") ;
......@@ -91,7 +98,7 @@ public class QywxCallbackController extends WebBaseController {
this.close(uuid,OpenStaffOfflineEnum.OFFLINE4);
break;
case 100007:
this.close(uuid,OpenStaffOfflineEnum.OFFLINE2);
this.close(uuid,OpenStaffOfflineEnum.OFFLINE2,json.getString("msg"));
break;
default:
break;
......@@ -106,7 +113,7 @@ public class QywxCallbackController extends WebBaseController {
for (int i = 0; i < array.size(); i++) {
JSONObject jsonObject = array.getJSONObject(i);
int status = jsonObject.getIntValue("status");
if (status == 2057 || status == 9) {
if (status == 9) {
Long qwUserId = jsonObject.getLong("user_id");
list.add(qwUserId);
}
......@@ -141,11 +148,11 @@ public class QywxCallbackController extends WebBaseController {
// 14 101 图片
// 23 103(微信) 视频消息
// 15 102(微信) 文件消息
// 104 gif表情消息类型
// 104 gif表情消息类型 29
// 26 红包
// 78 小程序
// 13 链接
List<String> msgList = Arrays.asList("0","2","101","6","41","40","14","16","23","103","15","102","104","26","78","13") ;
List<String> msgList = Arrays.asList("0","2","101","6","41","40","14","16","23","103","15","102","104","26","78","13","29") ;
if(!msgList.contains(msgtype+"")) {
logger.info("不处理的消息");
return ;
......@@ -187,7 +194,7 @@ public class QywxCallbackController extends WebBaseController {
}else if(msgtype == 26) {
msg.setMsgtype(OpenQwMsgTypeEnum.RED);
msg.setContent(json.getString("remark"));
}else if(msgtype==104) {
}else if(msgtype==104 || msgtype==29) {
msg.setMsgtype(OpenQwMsgTypeEnum.GIF);
msg.setContent(json.getString("url"));
}else if(msgtype==23 || msgtype==103){
......@@ -196,6 +203,7 @@ public class QywxCallbackController extends WebBaseController {
}else if(msgtype==15 || msgtype==102){
msg.setMsgtype(OpenQwMsgTypeEnum.FILE);
msg.setAeskey(json.getString("aes_key"));
msg.setContent(json.getString("file_name"));
}else if(msgtype==6) {
msg.setMsgtype(OpenQwMsgTypeEnum.LOCAL);
msg.setContent(json.getString("address"));
......@@ -227,6 +235,9 @@ public class QywxCallbackController extends WebBaseController {
msg.setMsgtype(OpenQwMsgTypeEnum.text);
}
this.setSendType(msgtype, msg);
if(null != msg.getContent()) {
msg.setContent(msg.getContent().trim()) ;
}
try {
gicMQClient.sendMessage("saveChatLogMQ", JSONObject.toJSONString(msg));
} catch (Exception e) {
......@@ -286,6 +297,12 @@ public class QywxCallbackController extends WebBaseController {
logger.info("退出={}",uuid);
this.openStaffApiService.logout(uuid, offlineEnum) ;
}
private void close(String uuid , OpenStaffOfflineEnum offlineEnum , String msg) {
logger.info("退出={},msg={}",uuid,msg);
com.gic.haoban.common.utils.DingUtils.send("请检查企微托管"+uuid+msg, false);
this.openStaffApiService.logout(uuid, offlineEnum) ;
}
private void v100003(String uuid , JSONObject json) {
logger.info("取消登录={}",uuid);
this.openStaffApiService.updateLoginStep(uuid,QwOpenStepEnum.step2.getStep()) ;
......
......@@ -56,4 +56,6 @@ public interface OpenStaffMapper {
int updateByAutoLogin(@Param("id") Long openStaffId ,@Param("uuid") String uuid) ;
List<TabOpenStaff> listAllOnlineEnterprise() ;
}
\ No newline at end of file
......@@ -75,4 +75,6 @@ public interface GroupChatMapper {
@Param("force") int force);
public List<GroupChatDTO> listChangeOwner() ;
List<String> listOpenGroupChatDK(@Param("enterpriseId")String enterpriseId, @Param("staffId") String staffId);
}
\ No newline at end of file
......@@ -78,6 +78,17 @@ public class TabWelcome implements Serializable {
private String modifierName ;
private Integer type;
private int scene ;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public String getModifierId() {
return modifierId;
}
......
......@@ -64,6 +64,15 @@ public class TabWxUserAddLog implements Serializable {
private String friendClerkId ;
private String friendStoreId ;
private int delType ;
private int delIsSingle ;
public int getDelIsSingle() {
return delIsSingle;
}
public void setDelIsSingle(int delIsSingle) {
this.delIsSingle = delIsSingle;
}
public int getDelType() {
return delType;
......
......@@ -43,6 +43,16 @@ public class QywxTagSyncInfoPojo implements Serializable {
*/
private String enterpriseId;
private String externalUseridInfo ;
public String getExternalUseridInfo() {
return externalUseridInfo;
}
public void setExternalUseridInfo(String externalUseridInfo) {
this.externalUseridInfo = externalUseridInfo;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
......
package com.gic.haoban.manage.service.pojo;
import java.io.Serializable;
public class WelcomeUserInfoBO implements Serializable {
private String name ;
private int addWay ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAddWay() {
return addWay;
}
public void setAddWay(int addWay) {
this.addWay = addWay;
}
public WelcomeUserInfoBO(String name, int addWay) {
this.name = name;
this.addWay = addWay;
}
}
......@@ -27,6 +27,8 @@ public class SaveWelcomeBO {
* @see com.gic.haoban.manage.api.enums.hm.HmWelcomeType
*/
private Integer type;
private int scene = 1 ;
/**
* 内容
*/
......@@ -68,6 +70,14 @@ public class SaveWelcomeBO {
*/
private List<WelcomeSuitStaffBO> suitStaffDeleteList;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public String getModifierId() {
return modifierId;
}
......
......@@ -26,6 +26,8 @@ public class WelcomeDetailBO {
* 欢迎语类型
*/
private Integer type;
private int scene ;
/**
* 内容
*/
......@@ -51,6 +53,14 @@ public class WelcomeDetailBO {
*/
private List<WelcomeMediaBO> welcomeMediaList;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public String getWelcomeId() {
return welcomeId;
}
......
......@@ -66,6 +66,16 @@ public class WelcomeListBO {
private Integer type;
private int scene ;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public String getCreatorId() {
return creatorId;
}
......
......@@ -18,6 +18,27 @@ public class WelcomeInfoQO extends BasePageInfo {
private Integer type;
//1 正常加好友 2离职继承
private int sceneType ;
private int scene ;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public int getSceneType() {
return sceneType;
}
public void setSceneType(int sceneType) {
this.sceneType = sceneType;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
......
......@@ -30,4 +30,6 @@ public interface OpenStaffService {
String autoLogin(Long openStaffId , Long qwUserId) ;
void openStaffTimer();
void openStaffServiceTimer();
}
......@@ -87,7 +87,8 @@ public interface WelcomeService {
* @author : YongEn
* @date : 2022/2/9
*/
WelcomeDetailBO getMatchWelcome(String staffId, String wxEnterpriseId);
WelcomeDetailBO getMatchWelcome(String staffId, String wxEnterpriseId,int welcomeScene);
/**
* desc: 新增默认欢迎语
......
......@@ -151,6 +151,7 @@ public class WxUserAddLogServiceImpl implements WxUserAddLogService {
entity.setFriendClerkId(qdto.getFriendClerkId());
entity.setFriendStoreId(qdto.getFriendStoreId());
entity.setDelType(qdto.getDelType());
entity.setDelIsSingle(qdto.getDelIsSingle());
this.wxUserAddLogMapper.insert(entity);
}catch(Exception e) {
log.info("异常",e);
......
......@@ -179,6 +179,9 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
if(autoDelNum>0) {
wxUserAddLogQDTO.setDelType(1);
}
if(related.getExternalStatus()==3) {
wxUserAddLogQDTO.setDelIsSingle(1) ;
}
wxUserAddLogService.save(wxUserAddLogQDTO);
//定制
addDelFriendEvent(related.getUnionid(), related.getClerkId(), wxEnterpriseId, enterpriseId, related.getMemberId(), related.getStoreId(), 0);
......
......@@ -8,8 +8,10 @@ import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.PageHelperUtils;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.enterprise.api.dto.EnterpriseUsingPermissionDto;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.dto.StoreSearchDTO;
import com.gic.enterprise.api.service.EnterpriseUseForbidService;
import com.gic.enterprise.api.service.StoreGroupService;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.manage.api.dto.OpenStaffListDTO;
......@@ -18,6 +20,7 @@ import com.gic.haoban.manage.api.dto.StoreClerkDTO;
import com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum;
import com.gic.haoban.manage.api.enums.OpenStaffOfflineEnum;
import com.gic.haoban.manage.api.qdto.OpenStaffPageQDTO;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.notify.NoticeMessageApiService;
import com.gic.haoban.manage.api.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.service.dao.mapper.OpenStaffMapper;
......@@ -28,6 +31,7 @@ import com.gic.haoban.manage.service.pojo.QwOpenResultInitBO;
import com.gic.haoban.manage.service.service.OpenStaffService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.util.OpenUtils;
import com.gic.redis.data.util.RedisUtil;
import com.github.pagehelper.PageHelper;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -58,6 +62,10 @@ public class OpenStaffServiceImpl implements OpenStaffService {
private NoticeMessageApiService noticeMessageApiService;
@Autowired
private StaffMapper staffMapper;
@Autowired
private EnterpriseUseForbidService enterpriseUseForbidService;
@Autowired
private StaffApiService staffApiService ;
@Override
public TabOpenStaff save(TabOpenStaff tab) {
......@@ -120,9 +128,15 @@ public class OpenStaffServiceImpl implements OpenStaffService {
log.info("分页查询条件={}", JSONObject.toJSONString(qdto));
String wxEnterpriseId = qdto.getWxEnterpriseId();
String enterpriseId = qdto.getEnterpriseId();
List<String> storeIdList = null;
List<String> storeIdList = staffApiService.getHaoBanStoreIdsRolesByClerkId(qdto.getLoginClerkId(), wxEnterpriseId);
if(CollectionUtils.isEmpty(storeIdList)) {
return ServiceResponse.success(new Page<>());
}
if (CollectionUtils.isNotEmpty(qdto.getStoreGroupIdList())) {
storeIdList = this.getStoreIdList(enterpriseId, qdto.getStoreGroupIdList());
storeIdList = this.getStoreIdList(enterpriseId, qdto.getStoreGroupIdList(),storeIdList);
}
if((storeIdList.size()==1 && storeIdList.contains("-1"))) {
storeIdList = null ;
}
if (StringUtils.isNotBlank(qdto.getClerkId()) || CollectionUtils.isNotEmpty(storeIdList)) {
List<String> staffIds = staffClerkRelationService.listAllStaffIdForOpenStaff(enterpriseId, wxEnterpriseId, qdto.getClerkId(), storeIdList);
......@@ -184,7 +198,7 @@ public class OpenStaffServiceImpl implements OpenStaffService {
}
private List<String> getStoreIdList(String enterpriseId, List<String> storeGroupIds) {
private List<String> getStoreIdList(String enterpriseId, List<String> storeGroupIds , List<String> storeList) {
StoreSearchDTO storeSearch = new StoreSearchDTO();
List<String> groupIds = storeGroupService.getStoreGroupIdsByParentGroupId(enterpriseId, storeGroupIds);
storeSearch.setStoreGroupIdList(groupIds);
......@@ -193,6 +207,9 @@ public class OpenStaffServiceImpl implements OpenStaffService {
Page pageStore = new Page<>();
//-1代表不分页
pageStore.setCurrentPage(-1);
if(!(storeList.size()==1 && storeList.contains("-1"))) {
storeSearch.setStoreIdList(storeList);
}
Page resultPage = storeService.storeListPage(pageStore, storeSearch);
List<StoreDTO> storeDTOList = resultPage.getResult();
if (CollectionUtils.isEmpty(storeDTOList)) {
......@@ -238,17 +255,67 @@ public class OpenStaffServiceImpl implements OpenStaffService {
@Override
public void openStaffTimer() {
log.info("定时检查托管状态");
Object o = RedisUtil.getCache("haobansilk2mp3") ;
if(null == o) {
com.gic.haoban.common.utils.DingUtils.send("请检查silk2mp3", false);
}
List<TabOpenStaff> list = this.openStaffMapper.listAllOnline(null, null);
for (TabOpenStaff item : list) {
String uuid = item.getUuid();
boolean isLogin = OpenUtils.isLogin(uuid);
// 未登录
if (!isLogin) {
String autLogin = this.autoLogin(item.getOpenStaffId(), item.getQwUserId());
if (null == autLogin) {
this.logout(uuid, "定时检查异", 0, OpenStaffOfflineEnum.OFFLINE2.getDesc());
try{
String uuid = item.getUuid();
boolean isLogin = OpenUtils.isLogin(uuid);
// 未登录
if (!isLogin) {
String autLogin = this.autoLogin(item.getOpenStaffId(), item.getQwUserId());
if (null == autLogin) {
this.logout(uuid, "定时检查异", 0, OpenStaffOfflineEnum.OFFLINE2.getDesc());
}
}
}catch (Exception e) {
log.info("异常",e);
}
}
}
@Override
public void openStaffServiceTimer() {
log.info("托管服务到期");
List<TabOpenStaff> list = this.openStaffMapper.listAllOnlineEnterprise();
if(CollectionUtils.isNotEmpty(list)) {
for (TabOpenStaff item : list) {
String wxEnterpriseId = item.getWxEnterpriseId() ;
String enterpriseId = item.getEnterpriseId() ;
boolean isValid = this.isValid(wxEnterpriseId,enterpriseId) ;
log.info("是否有效={},{},{}",isValid,wxEnterpriseId,enterpriseId);
if (!isValid) {
List<TabOpenStaff> staffList = this.openStaffMapper.listAllOnline(wxEnterpriseId, enterpriseId);
if(CollectionUtils.isNotEmpty(staffList)) {
staffList.forEach(o->{
try {
this.logout(o.getUuid(), "服务过期", 0, null);
}catch (Exception e) {
log.info("异常",e);
}
});
}
}
}
}
}
private boolean isValid(String wxEnterpriseId, String enterpriseId) {
ServiceResponse<EnterpriseUsingPermissionDto> resp = this.enterpriseUseForbidService.getWxEnterpriseService(enterpriseId, wxEnterpriseId);
log.info("托管许可={}", JSONObject.toJSONString(resp));
if (resp.isSuccess()) {
EnterpriseUsingPermissionDto dto = resp.getResult();
if (null == dto) {
return false ;
} else {
if (dto.getServiceEndDate().before(new Date())) {
return false ;
}
}
}
return true ;
}
}
......@@ -5,8 +5,10 @@ import java.util.Date;
import java.util.List;
import java.util.Objects;
import com.alibaba.fastjson.JSONArray;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanWelcomeMediaMapper;
import com.gic.haoban.manage.service.entity.*;
import com.gic.haoban.manage.service.pojo.WelcomeUserInfoBO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
......@@ -112,10 +114,6 @@ public class WelcomeSendServiceImpl implements WelcomeSendService {
/**
* 发送欢迎语
*
* @param dto
* @param wxEnterpriseDTO
* @param enterpriseId
* @param staffId
* {"data":{"welcomeCode":"J0GjdrsF-nZNac3Xc6V2K2p8OokQZcY4g0jxljdHc7A","wxUserId":"016903","suiteid":"selfSuiteId","corpid":"wxbde984c3488b837e","externalUserid":"wmSe9FEAAAy39F1NI6Z-THUUd9mkqOIw","changeType":"add_external_contact"},"type":1,"mqTraceId":"278473818-1-1679557069.126"}
*/
@Override
......@@ -144,16 +142,23 @@ public class WelcomeSendServiceImpl implements WelcomeSendService {
log.info("发送欢迎语,state={}", state);
String relationKey = SecureUtil.md5(staffId + externalUserId);
WelcomeDetailBO welcomeBO = null;
WelcomeUserInfoBO userBO = this.getExternalUserName(qwDTO, externalUserId , wxUserId);
int addWay = userBO.getAddWay() ;
int welcomeScene = 0 ;
if(addWay==202) {
// 离职继承、在职继承
welcomeScene = 202 ;
}
if (StringUtils.isNotBlank(state)
&& (state.startsWith(Manage3Constants.HM) || state.startsWith(Manage3Constants.DT))) {
WelcomeReferBO welcomeReferBo = getWelcomeReferBo(state);
welcomeBO = welcomeService.getMatchWelcomeWithReferId(staffId, wxEnterpriseId, welcomeReferBo);
//单人活码欢迎语未配置时,取欢迎语的配置进行发送
if(state.startsWith(Manage3Constants.HM) && welcomeBO == null){
welcomeBO = welcomeService.getMatchWelcome(staffId, wxEnterpriseId);
welcomeBO = welcomeService.getMatchWelcome(staffId, wxEnterpriseId,welcomeScene);
}
} else {
welcomeBO = welcomeService.getMatchWelcome(staffId, wxEnterpriseId);
welcomeBO = welcomeService.getMatchWelcome(staffId, wxEnterpriseId,welcomeScene);
}
if (Objects.isNull(welcomeBO)) {
log.info("活码欢迎语未配置wxEnterpriseId:{}", wxEnterpriseId);
......@@ -163,7 +168,7 @@ public class WelcomeSendServiceImpl implements WelcomeSendService {
log.info("欢迎语发送{}={}", welcomeBO.getWelcomeId(), JSON.toJSONString(welcomeBO));
String content = welcomeBO.getWelcomeContent();
if (content.contains("<微信昵称>")) {
String nickName = this.getExternalUserName(qwDTO, externalUserId);
String nickName = userBO.getName() ;
//这里对“$”符号和”\\“符号进行转义处理
nickName = java.util.regex.Matcher.quoteReplacement(nickName);
content = content.replaceAll("<微信昵称>", nickName);
......@@ -403,7 +408,7 @@ public class WelcomeSendServiceImpl implements WelcomeSendService {
}
}
private String getExternalUserName(WxEnterpriseQwDTO qwDTO, String externalUserId) {
private WelcomeUserInfoBO getExternalUserName(WxEnterpriseQwDTO qwDTO, String externalUserId , String addUserId) {
log.info("查询好友详情,externalUserId={},{}", externalUserId,qwDTO.getWxSecurityType());
String userInfo = null ;
if(qwDTO.isSelf()) {
......@@ -412,13 +417,14 @@ public class WelcomeSendServiceImpl implements WelcomeSendService {
userInfo =qywxUserApiService.getExternalUseridInfo(qwDTO.getThirdCorpid(), config.getWxSuiteid(), externalUserId);
}
String name = "";
Integer addWay = 0 ;
if (StringUtils.isBlank(userInfo)) {
log.info("好友不存在");
return name;
return new WelcomeUserInfoBO(name,0);
}
if ("1".equals(userInfo)) {
log.info("限制次数");
return name;
return new WelcomeUserInfoBO(name,0);
}
if (StringUtils.isNotBlank(userInfo)) {
JSONObject userJson = JSON.parseObject(userInfo);
......@@ -428,8 +434,22 @@ public class WelcomeSendServiceImpl implements WelcomeSendService {
jt = JSON.parseObject(external_contact);
name = EmojiFilterUtil.filterEmojiLast(jt.getString("name"), true);
}
String follow_user = "";
follow_user = userJson.getString("follow_user");
if (StringUtils.isNotBlank(follow_user)) {
JSONArray j = JSON.parseArray(follow_user);
for (Object object : j) {
String followJson = JSON.toJSONString(object);
JSONObject follow = JSON.parseObject(followJson);
String userId = follow.getString("userid");
if (userId.equals(addUserId)) {
addWay = follow.getIntValue("add_way") ;
}
}
}
}
return name;
log.info("addWay={}",addWay);
return new WelcomeUserInfoBO(name,addWay);
}
private String getClerkId(String wxEnterpriseId, String staffId, String state) {
......
......@@ -205,6 +205,7 @@ public class WelcomeServiceImpl implements WelcomeService {
welcome.setModifierName(bo.getModifierName());
welcome.setDefaultWelcomeFlag(bo.getDefaultWelcomeFlag());
welcome.setType(bo.getType());
welcome.setScene(bo.getScene());
welcomeMapper.insert(welcome);
return welcome;
}
......@@ -226,6 +227,7 @@ public class WelcomeServiceImpl implements WelcomeService {
welcome.setDefaultWelcomeFlag(bo.getDefaultWelcomeFlag());
welcome.setModifierId(bo.getModifierId());
welcome.setModifierName(bo.getModifierName());
welcome.setScene(bo.getScene());
welcomeMapper.updateByPrimaryKeySelective(welcome);
return welcome;
}
......@@ -302,6 +304,7 @@ public class WelcomeServiceImpl implements WelcomeService {
bo.setOperatorName(one.getOperatorName());
bo.setDefaultWelcomeFlag(one.getDefaultWelcomeFlag());
bo.setType(one.getType());
bo.setScene(one.getScene());
// 媒体列表
bo.setWelcomeMediaList(
convertWelcomeMedia(welcomeMediaMapper.listByWelcomeId(one.getWelcomeId()))
......@@ -345,6 +348,7 @@ public class WelcomeServiceImpl implements WelcomeService {
welcomeDetail.setOpenFlag(welcome.getOpenFlag());
welcomeDetail.setDefaultWelcomeFlag(welcome.getDefaultWelcomeFlag());
welcomeDetail.setType(welcome.getType());
welcomeDetail.setScene(welcome.getScene());
// 媒体列表
welcomeDetail.setWelcomeMediaList(
convertWelcomeMedia(welcomeMediaMapper.listByWelcomeId(welcome.getWelcomeId()))
......@@ -460,24 +464,32 @@ public class WelcomeServiceImpl implements WelcomeService {
}
@Override
public WelcomeDetailBO getMatchWelcome(String staffId, String wxEnterpriseId) {
public WelcomeDetailBO getMatchWelcome(String staffId, String wxEnterpriseId,int welcomeScene) {
if (StringUtils.isEmpty(staffId) || StringUtils.isEmpty(wxEnterpriseId)) {
return null;
}
return queryMatchWelcome(staffId, wxEnterpriseId, HmWelcomeType.NORMAL.getCode());
return queryMatchWelcome(staffId, wxEnterpriseId, HmWelcomeType.NORMAL.getCode() ,welcomeScene);
}
private WelcomeDetailBO queryMatchWelcome(String staffId, String wxEnterpriseId, Integer type) {
private WelcomeDetailBO queryMatchWelcome(String staffId, String wxEnterpriseId, Integer type , int welcomeScene) {
WelcomeInfoQO welcomeInfoQO = new WelcomeInfoQO();
welcomeInfoQO.setWxEnterpriseId(wxEnterpriseId);
welcomeInfoQO.setType(type);
// 查询非默认欢迎语
welcomeInfoQO.setDefaultWelcomeFlag(0);
logger.info("发送场景={}",welcomeScene);
if(welcomeScene==202) {
welcomeInfoQO.setSceneType(2);
}else {
welcomeInfoQO.setSceneType(1);
}
List<TabWelcome> nonDefaultWelcomList = welcomeMapper.queryWelcomeList(welcomeInfoQO);
// 查询默认欢迎语
welcomeInfoQO.setSceneType(0);
welcomeInfoQO.setDefaultWelcomeFlag(1);
List<TabWelcome> defaultWelcomeList = welcomeMapper.queryWelcomeList(welcomeInfoQO);
if (CollectionUtils.isEmpty(nonDefaultWelcomList)) {
logger.info("只有默认欢迎语");
return checkAndGetDefaultWelcome(defaultWelcomeList);
}
// 匹配部门组织架构
......@@ -514,7 +526,7 @@ public class WelcomeServiceImpl implements WelcomeService {
if (Objects.isNull(matchWelcome)) {
return checkAndGetDefaultWelcome(defaultWelcomeList);
}
logger.info("欢迎语已匹配");
logger.info("欢迎语已匹配={}",matchWelcome.getWelcomeId());
return matchWelcome;
}
......@@ -532,6 +544,7 @@ public class WelcomeServiceImpl implements WelcomeService {
logger.info("未配置默认欢迎语");
return null;
}
logger.info("使用默认欢迎语发送");
return convertWelcomeToBo(defaultWelcomeList.get(0));
}
......@@ -692,6 +705,7 @@ public class WelcomeServiceImpl implements WelcomeService {
welcomeInfoQo.setWxEnterpriseId(queryWelcomeQDTO.getWxEnterpriseId());
welcomeInfoQo.setTitle(queryWelcomeQDTO.getTitle());
welcomeInfoQo.setType(queryWelcomeQDTO.getType());
welcomeInfoQo.setScene(queryWelcomeQDTO.getScene());
PageHelper.startPage(queryWelcomeQDTO.getPageNum(), queryWelcomeQDTO.getPageSize());
com.github.pagehelper.Page<TabWelcome> tabWelcomes =
(com.github.pagehelper.Page<TabWelcome>) welcomeMapper.queryWelcomeList(welcomeInfoQo);
......
......@@ -591,7 +591,7 @@ public class NoticeMessageApiServiceImpl implements NoticeMessageApiService {
public void sendMessageForOpenStaff(String enterpriseId, String accountName, String reason) {
Map<String, String> map = new HashMap<>();
map.put("accountName", accountName);
map.put("errorTime", DateUtil.dateToStr(new Date(), "yyyy年MM月dd日 hh:mm"));
map.put("errorTime", DateUtil.dateToStr(new Date(), "yyyy年MM月dd日 HH:mm"));
map.put("reason", reason);
String mqName = "haobanNotice";
NoticeMessageForm noticeMessageForm = new NoticeMessageForm();
......
......@@ -181,4 +181,9 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
public void openStaffTimer(String params) {
this.openStaffService.openStaffTimer() ;
}
@Override
public void openStaffServiceTimer(String params) {
this.openStaffService.openStaffServiceTimer() ;
}
}
......@@ -749,7 +749,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
memberId = memberService.getMemberIdByPhoneNumber(mobile, enterpriseId);
}
if (null == memberId) {
memberId = this.getMeberId(enterpriseId,unionId, name, avatar, qrcodeParam, externalUserid, wxEnterpriseRelated.getWxEnterpriseType(), 2) ;
memberId = this.getMeberId(enterpriseId,unionId, name, avatar, qrcodeParam, externalUserid, wxEnterpriseRelated.getWxEnterpriseType(), 2 , dto.getAddCreateTime()) ;
}
if (memberId == null) {
log.info("新增外部联系人,创建member失败,unionid={},外部联系人id={},", unionId,externalUserid);
......@@ -759,7 +759,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
this.saveExternalClerk(memberId, staffId, dto, staffClerkRelationDTO , 1);
// this.sendWelcome(dto, qwDTO, enterpriseId, staffId, clerkId,memberId);
//同步好友标签
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId);
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId,null);
//回调给会员,更新是否为企微好友
log.info("通知会员 合并会员后更新为企微好友,memberId:{}", memberId);
// this.memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
......@@ -991,6 +991,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
if(StringUtils.isNoneBlank(externalUserDTO.getUnionId())) {
dto.setUnionid(externalUserDTO.getUnionId());
}
dto.setAddWay(externalUserDTO.getAddWay());
dto.setSelfExternalUserid(dto.getExternalUserid());
return dto;
}
......@@ -1068,6 +1069,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String externalUserId = "";
String state = "";
int friendType = 1;
Integer addWay = 0 ;
if (StringUtils.isNotBlank(unionIdJson)) {
JSONObject jo = JSON.parseObject(unionIdJson);
String external_contact = jo.getString("external_contact");
......@@ -1093,6 +1095,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
state = follow.getString("state");
if (userId.equals(userId1)) {
createTime = follow.getString("createtime");
addWay = follow.getIntValue("add_way") ;
}
}
}
......@@ -1105,6 +1108,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
pojo.setWxEnterpriseId(wxEnterpriseId);
pojo.setState(state);
pojo.setFriendType(friendType);
pojo.setAddWay(addWay);
return pojo;
}
......@@ -1187,7 +1191,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return;
}
pushTagSync(dto.getExternalUserid(), wxUserId
, GicQywxSyncTypeEnum.FRIEND_TAG_SYNC.getType(), QywxSyncTaskTypeEnum.MEMBER_SYNC.getType(), wxEnterprise.getWxEnterpriseId(), null);
, GicQywxSyncTypeEnum.FRIEND_TAG_SYNC.getType(), QywxSyncTaskTypeEnum.MEMBER_SYNC.getType(), wxEnterprise.getWxEnterpriseId(), null,null);
}
@Override
......@@ -1385,7 +1389,11 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
throw new WxApiLimitException("getCorpSelfExternalUseridInfo接口调用被限制");
}
ExternalUserPojo pojo = getExternalUserPojo(unionIdJson, wxUserId, wxEnterpriseId);
return EntityUtil.changeEntityByJSON(ExternalUserDTO.class, pojo);
ExternalUserDTO dto = EntityUtil.changeEntityByJSON(ExternalUserDTO.class, pojo);
if(qwDTO.isSelf()) {
dto.setExternalUseridInfo(unionIdJson);
}
return dto ;
}
@Override
......@@ -1529,7 +1537,11 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
}
this.saveExternalClerk(memberId, staffId, unionDTO, staffClerkRelation, statusFlag);
if(StringUtils.isNotBlank(memberId)) {
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId);
if(null == RedisUtil.getCache("zhuan_self")) {
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId,dto.getExternalUseridInfo());
}else {
log.info("不同步标签");
}
log.info("通知会员 更新为企微好友 memberId:{}", memberId);
// memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
List<TabHaobanExternalClerkRelated> memberList = externalClerkRelatedService.getAddTimeByMemberId(memberId, enterpriseId,"1");
......@@ -1559,7 +1571,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
/**
* 同步
*/
private void pushTagSync(String dataId, String taskId, int syncType, int taskType, String wxEnterpriseId, String enterpriseId) {
private void pushTagSync(String dataId, String taskId, int syncType, int taskType, String wxEnterpriseId, String enterpriseId,String externalUseridInfo) {
QywxTagSyncInfoPojo pojo = new QywxTagSyncInfoPojo();
pojo.setDataId(dataId);
pojo.setTaskId(taskId);
......@@ -1568,6 +1580,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
pojo.setSyncType(syncType);
pojo.setWxEnterpriseId(wxEnterpriseId);
pojo.setEnterpriseId(enterpriseId);
pojo.setExternalUseridInfo(externalUseridInfo);
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
int delay = 0 ;
......@@ -1589,8 +1602,8 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
/**
* 同步
*/
private void pushTagSync(String memberId, String wxEnterpriseId, String enterpriseId) {
this.pushTagSync(memberId, "-1", GicQywxSyncTypeEnum.SINGLE_WXENT_MEMNER_SYNC.getType(), QywxSyncTaskTypeEnum.MEMBER_SYNC.getType(), wxEnterpriseId, enterpriseId);
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 String saveMemberUnionTable(ExternalUserDTO dto) {
......@@ -1948,7 +1961,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
log.info("导购码不存在:" + clerkId);
qrcodeParam = "clerk_clerk_"+clerk.getClerkId() ;
}
String memberId = this.getMeberId(enterpriseId, externalUserDTO.getUnionId(), externalUserDTO.getName(), externalUserDTO.getAvatar(), qrcodeParam, externalUserDTO.getExternalUserId(), wxEnterpriseRelated.getWxEnterpriseType(), 1) ;
String memberId = this.getMeberId(enterpriseId, externalUserDTO.getUnionId(), externalUserDTO.getName(), externalUserDTO.getAvatar(), qrcodeParam, externalUserDTO.getExternalUserId(), wxEnterpriseRelated.getWxEnterpriseType(), 1 , externalUserDTO.getAddCreateTime()) ;
if (memberId == null) {
return "会员不存在:unionid:" + externalUserDTO.getUnionId();
}
......@@ -1956,7 +1969,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return this.saveExternalUser(externalUserDTO);
}
private String getMeberId(String enterpriseId , String unionid , String name , String image ,String qrcodeParam , String externalUserId , int wxEnterpriseType , int sence) {
private String getMeberId(String enterpriseId , String unionid , String name , String image ,String qrcodeParam , String externalUserId , int wxEnterpriseType , int sence , String qwTime) {
QywxMemberQDTO qdto = new QywxMemberQDTO() ;
qdto.setEnterpriseId(enterpriseId);
qdto.setNick(name);
......@@ -1966,6 +1979,10 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
if(wxEnterpriseType==0) {
qdto.setUserId(externalUserId);
}
if(StringUtils.isNotBlank(qwTime)) {
Date time = new Date(Long.valueOf(qwTime)*1000l);
qdto.setAddTime(time);
}
qdto.setSence(sence);
String memberId = null;
com.gic.api.base.commons.ServiceResponse<MemberSimpleDetailDTO> resp = this.memberEntranceApiService.enterpriseWechatByFriendEntrance(qdto);
......
......@@ -606,7 +606,7 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
@Override
public ServiceResponse syncQywxTagToGicByExternalUserId(String wxEnterpriseId, String externalUserId, String wxUserId) {
public ServiceResponse syncQywxTagToGicByExternalUserId(String wxEnterpriseId, String externalUserId, String wxUserId , String externalUserInfo) {
//刷新标签的时候不允许同步
ServiceResponse resp = new ServiceResponse();
//所有以及关联同步的标签
......@@ -622,10 +622,14 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
//查询外部联系人
String externalUseridInfo = null ;
if(qwDTO.isSelf()) {
externalUseridInfo = this.qywxUserApiService.getCorpSelfExternalUseridInfo(qwDTO.getDkCorpid(), qwDTO.getSelfSecret(), externalUserId,qwDTO.getUrlHost()) ;
if(null != externalUserInfo) {
externalUseridInfo = externalUserInfo ;
}else {
externalUseridInfo = this.qywxUserApiService.getExternalUseridInfo(qwDTO.getThirdCorpid(), config.getWxSuiteid(), externalUserId);
if (qwDTO.isSelf()) {
externalUseridInfo = this.qywxUserApiService.getCorpSelfExternalUseridInfo(qwDTO.getDkCorpid(), qwDTO.getSelfSecret(), externalUserId, qwDTO.getUrlHost());
} else {
externalUseridInfo = this.qywxUserApiService.getExternalUseridInfo(qwDTO.getThirdCorpid(), config.getWxSuiteid(), externalUserId);
}
}
if (StringUtils.isBlank(externalUseridInfo)) {
logger.info("好友不存在");
......
......@@ -632,18 +632,22 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
List<String> takeoverClerkIdList = new ArrayList<>() ;
if(CollectionUtils.isNotEmpty(staffIdList)) {
for(int i=0;i<staffIdList.size();i++) {
List<String> clerkIdList = null ;
String staffId = staffIdList.get(i) ;
TabHaobanStaff staff = this.staffMapper.selectByPrimaryKeyNoStatus(staffId) ;
if(null != staff && null!= staff.getDelTime()) {
Date delTime = DateUtil.addNumForMinute(staff.getDelTime(),-5);
List<String> clerkIdList = this.tabHaobanStaffClerkRelationMapper.taskoverClerkIdList(staffId,delTime) ;
if(CollectionUtils.isNotEmpty(clerkIdList)) {
takeoverClerkIdList.addAll(clerkIdList);
}
}else if(null != staff) {
List<TabHaobanStaffClerkRelation> list = this.tabHaobanStaffClerkRelationMapper.taskoverClerkIdListAll(staffId) ;
if(CollectionUtils.isNotEmpty(list)) {
takeoverClerkIdList.add(list.get(0).getClerkId()) ;
if(null != staff) {
if (null != staff.getDelTime()) {
Date delTime = DateUtil.addNumForMinute(staff.getDelTime(), -5);
clerkIdList = this.tabHaobanStaffClerkRelationMapper.taskoverClerkIdList(staffId, delTime);
if (CollectionUtils.isNotEmpty(clerkIdList)) {
takeoverClerkIdList.addAll(clerkIdList);
}
if (CollectionUtils.isEmpty(clerkIdList)) {
List<TabHaobanStaffClerkRelation> list = this.tabHaobanStaffClerkRelationMapper.taskoverClerkIdListAll(staffId);
if (CollectionUtils.isNotEmpty(list)) {
takeoverClerkIdList.add(list.get(0).getClerkId());
}
}
}
}
}
......
......@@ -62,6 +62,7 @@ public class WelcomeApiServiceImpl implements WelcomeApiService {
saveWelcomeBO.setModifierId(qdto.getModifierId());
saveWelcomeBO.setModifierName(qdto.getModifierName());
saveWelcomeBO.setType(qdto.getType());
saveWelcomeBO.setScene(qdto.getScene());
// 媒体列表
saveWelcomeBO.setWelcomeMediaList(EntityUtil.changeEntityListNew(SaveWelcomeMediaBO.class, qdto.getWelcomeMediaList()));
// 适用部门新增列表
......@@ -110,6 +111,7 @@ public class WelcomeApiServiceImpl implements WelcomeApiService {
dto.setOperatorName(one.getOperatorName());
dto.setDefaultWelcomeFlag(one.getDefaultWelcomeFlag());
dto.setType(one.getType());
dto.setScene(one.getScene());
// 媒体列表
dto.setWelcomeMediaList(
CollectionUtils.isEmpty(one.getWelcomeMediaList()) ? Collections.emptyList()
......@@ -138,6 +140,7 @@ public class WelcomeApiServiceImpl implements WelcomeApiService {
dto.setOpenFlag(welcome.getOpenFlag());
dto.setDefaultWelcomeFlag(welcome.getDefaultWelcomeFlag());
dto.setType(welcome.getType());
dto.setScene(welcome.getScene());
// 媒体列表
dto.setWelcomeMediaList(
CollectionUtils.isEmpty(welcome.getWelcomeMediaList()) ? Collections.emptyList()
......
......@@ -29,6 +29,7 @@ import com.gic.haoban.manage.service.service.DepartmentService;
import com.gic.haoban.manage.service.service.MiniprogramSettingService;
import com.gic.haoban.manage.service.service.StoreRangeService;
import com.gic.haoban.manage.service.service.WxEnterpriseRelatedService;
import com.gic.haoban.manage.service.util.CustomSwitcher;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import com.google.common.collect.Sets;
......@@ -195,6 +196,10 @@ public class WxEnterpriseRelatedApiServiceImpl implements WxEnterpriseRelatedApi
}
private String isBindMany(String enterpriseId , String wxEnterpriseId) {
String eids = CustomSwitcher.haoban_one_bind_many ;
if(eids.contains(enterpriseId)) {
return null ;
}
List<TabHaobanWxEnterpriseRelated> list = this.wxEnterpriseRelatedMapper.listByEnterpriseId(enterpriseId) ;
List<String> bindNameList = new ArrayList<>() ;
if(CollectionUtils.isNotEmpty(list)) {
......
......@@ -315,4 +315,9 @@ public class GroupChatApiServiceImpl implements GroupChatApiService {
}
return null;
}
@Override
public List<String> listOpenGroupChatDK(String enterpriseId, String staffId) {
return this.groupChatMapper.listOpenGroupChatDK(enterpriseId,staffId);
}
}
......@@ -63,6 +63,13 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
String staffId = dataPre.getpDataId() ;
String taskId = dealParamMqDTO.getTaskId();
String externalUserId = dataPre.getDataContent();
String qywxFlushLimitFlag = "qywxFlushLimitFlag" ;
Object o = RedisUtil.getCache(qywxFlushLimitFlag) ;
if(null != o && o.toString().equals(wxEnterpriseId)) {
logger.info("超接口限制,staffId={},{},{}", staffId,wxUserId,externalUserId);
dealException(taskId, dataPre.getDataId(), null, "超接口限制");
return ;
}
// 查询企微侧外部联系人详情
ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getCorpSelfExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
if (externalUserDTO == null) {
......
package com.gic.haoban.manage.service.util;
import com.gic.commons.switcher.Switcher;
import com.gic.commons.switcher.SwitcherNamespace;
@SwitcherNamespace("BUZ.qywx.open")
public class CustomSwitcher {
/**
* 积分触不通知会员名单
*/
@Switcher
public static String qywx_open_host ;
@Switcher
public static String haoban_one_bind_many ;
}
\ No newline at end of file
package com.gic.haoban.manage.service.util;
import com.alibaba.fastjson.JSONObject;
import com.ctrip.framework.apollo.ConfigService;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.GlobalVar;
import com.gic.commons.util.HttpClient;
......@@ -18,14 +19,16 @@ public class OpenUtils {
private static final String gicCallbackHost = GlobalVar.ctxPropertiesMap.get("haoban_service_host") + "/haoban-manage3-operation-web/qywx-msg-notice";
private static final String openHost = "http://47.94.7.218:8089/wxwork/%s";
private static String getHost() {
return CustomSwitcher.qywx_open_host ;
}
public static ServiceResponse<QwOpenResultInitBO> init(Long qwUserId, boolean qrcodeFlag) {
JSONObject initJson = new JSONObject();
if (null != qwUserId) {
initJson.put("vid", qwUserId);
}
String initStr = HttpClient.sendPostJSON(String.format(openHost, "init"), initJson.toJSONString(), "utf-8");
String initStr = HttpClient.sendPostJSON(String.format(getHost(), "init"), initJson.toJSONString(), "utf-8");
logger.info("企微初始化,req={},{}", initJson.toJSONString(), initStr);
QwOpenResultBO initResult = result(initStr);
if (!initResult.isOk()) {
......@@ -54,7 +57,7 @@ public class OpenUtils {
json.put("uuid", uuid);
json.put("qrcodeKey", qrcodeKey);
json.put("code", validCode);
String backJson = HttpClient.sendPostJSON(String.format(openHost, "CheckCode"), json.toJSONString(), "utf-8");
String backJson = HttpClient.sendPostJSON(String.format(getHost(), "CheckCode"), json.toJSONString(), "utf-8");
logger.info("校验验证码={},uuid={}", backJson, uuid);
QwOpenResultBO bo = result(backJson);
if (!bo.isOk()) {
......@@ -66,7 +69,7 @@ public class OpenUtils {
public static void logout(String uuid) {
JSONObject json = new JSONObject();
json.put("uuid", uuid);
String backJson = HttpClient.sendPostJSON(String.format(openHost, "LoginOut"), json.toJSONString(), "utf-8");
String backJson = HttpClient.sendPostJSON(String.format(getHost(), "LoginOut"), json.toJSONString(), "utf-8");
logger.info("退出={},uuid={}", backJson, uuid);
}
......@@ -74,7 +77,7 @@ public class OpenUtils {
JSONObject json = new JSONObject();
json.put("uuid", uuid);
json.put("url", gicCallbackHost);
String backJson = HttpClient.sendPostJSON(String.format(openHost, "SetCallbackUrl"), json.toJSONString(), "utf-8");
String backJson = HttpClient.sendPostJSON(String.format(getHost(), "SetCallbackUrl"), json.toJSONString(), "utf-8");
logger.info("设置回调={},uuid={}", backJson, uuid);
}
......@@ -85,7 +88,7 @@ public class OpenUtils {
}
JSONObject json = new JSONObject();
json.put("uuid", uuid);
String backJson = HttpClient.sendPostJSON(String.format(openHost, req), json.toJSONString(), "utf-8");
String backJson = HttpClient.sendPostJSON(String.format(getHost(), req), json.toJSONString(), "utf-8");
logger.info("获取qrcode={},uuid={},times={}", backJson, uuid, times);
QwOpenResultBO initResult = result(backJson);
if (!initResult.isOk()) {
......@@ -114,7 +117,7 @@ public class OpenUtils {
public static boolean autoLogin(String uuid) {
JSONObject json = new JSONObject();
json.put("uuid", uuid);
String backJson = HttpClient.sendPostJSON(String.format(openHost, "automaticLogin"), json.toJSONString(), "utf-8");
String backJson = HttpClient.sendPostJSON(String.format(getHost(), "automaticLogin"), json.toJSONString(), "utf-8");
logger.info("自动登录={},uuid={}", backJson, uuid);
JSONObject resultJson = JSONObject.parseObject(backJson);
int errcode = resultJson.getIntValue("errcode");
......@@ -134,7 +137,7 @@ public class OpenUtils {
public static boolean isLogin(String uuid) {
JSONObject json = new JSONObject();
json.put("uuid", uuid);
String backJson = HttpClient.sendPostJSON(String.format(openHost, "GetProfile"), json.toJSONString(), "utf-8");
String backJson = HttpClient.sendPostJSON(String.format(getHost(), "GetProfile"), json.toJSONString(), "utf-8");
logger.info("获取当前账号详情={},uuid={}", backJson, uuid);
JSONObject resultJson = JSONObject.parseObject(backJson);
int errcode = resultJson.getIntValue("errcode");
......
package com.gic.haoban.manage.service.util;
import com.gic.commons.switcher.SwitcherApplication;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import java.util.concurrent.atomic.AtomicBoolean;
@Component
public class SwitcherInitialization implements InitializingBean {
static AtomicBoolean INIT = new AtomicBoolean(false);
@Override
public void afterPropertiesSet() throws Exception {
SwitcherApplication.init(CustomSwitcher.class);
}
}
\ No newline at end of file
......@@ -244,6 +244,11 @@
</if>
</select>
<select id="listAllOnlineEnterprise" resultMap="BaseResultMap">
select wx_enterprise_id,enterprise_id from tab_haoban_open_staff where
status_flag = 1 and delete_flag = 0 group by wx_enterprise_id , enterprise_id
</select>
<select id="listOpenStoreId" resultType="java.lang.String">
select a.store_id from tab_haoban_staff_clerk_relation a left join tab_haoban_open_staff b on a.staff_id = b.staff_id
where a.wx_enterprise_id = #{wxEnterpriseId} and a.enterprise_id=#{enterpriseId} and a.status_flag = 1
......
......@@ -495,7 +495,7 @@
wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR}
and super_manager_flag is null
and (wx_user_id = #{wxUserId,jdbcType=VARCHAR} or wx_open_user_id = #{wxUserId,jdbcType=VARCHAR})
order by update_time desc,create_time desc limit 1
order by status_flag asc , update_time desc,create_time desc limit 1
</select>
<update id="updateOpenUserIdsByUserId" parameterType="com.gic.haoban.manage.service.entity.TabHaobanStaff">
......
......@@ -495,7 +495,7 @@
select a.staff_id
from tab_haoban_staff_clerk_relation a left join tab_haoban_staff b on b.staff_id = a.staff_id
where a.enterprise_id = #{enterpriseId} and a.status_flag=1 and b.status_flag = 1 and a.wx_enterprise_id = #{wxEnterpriseId}
<if test="null != clerkId">
<if test="null != clerkId and clerkId != '' ">
and a.clerk_id = #{clerkId}
</if>
<if test="null != storeIdList">
......
......@@ -24,7 +24,7 @@
<sql id="Base_Column_List">
welcome_id
, wx_enterprise_id, title, welcome_content,welcome_img,open_flag, status_flag,
create_time, update_time, operator_id, operator_name, default_welcome_flag , creator_id , creator_name , modifier_id , modifier_name, `type`
create_time, update_time, operator_id, operator_name, default_welcome_flag , creator_id , creator_name , modifier_id , modifier_name, `type` , scene
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
......@@ -43,7 +43,7 @@
<insert id="insert" parameterType="com.gic.haoban.manage.service.entity.TabWelcome">
insert into tab_haoban_welcome (welcome_id, wx_enterprise_id, title,
welcome_content, welcome_img, open_flag, status_flag, create_time,
update_time, operator_id, operator_name, default_welcome_flag , creator_id , creator_name,modifier_id,modifier_name, `type`)
update_time, operator_id, operator_name, default_welcome_flag , creator_id , creator_name,modifier_id,modifier_name, `type` , scene)
values (#{welcomeId,jdbcType=VARCHAR},
#{wxEnterpriseId,jdbcType=VARCHAR},
#{title,jdbcType=VARCHAR},
......@@ -56,7 +56,7 @@
#{operatorId,jdbcType=VARCHAR},
#{operatorName,jdbcType=VARCHAR},
#{defaultWelcomeFlag,jdbcType=INTEGER} , #{creatorId} , #{creatorName} , #{modifierId} , #{modifierName},
#{type}
#{type} , #{scene}
)
</insert>
......@@ -100,7 +100,10 @@
modifier_name = #{modifierName},
</if>
<if test="type != null">
`type` = #{type}
`type` = #{type} ,
</if>
<if test="scene !=0 ">
scene = #{scene} ,
</if>
</set>
where welcome_id = #{welcomeId,jdbcType=VARCHAR}
......@@ -162,6 +165,15 @@
<if test="type != null">
and type = #{type}
</if>
<if test="scene>0">
and scene = #{scene}
</if>
<if test="sceneType==1">
and scene in (1,2)
</if>
<if test="sceneType==2">
and scene in (1,3)
</if>
</where>
order by update_time desc
</select>
......
......@@ -364,5 +364,9 @@
<select id="listChangeOwner" resultType="com.gic.haoban.manage.api.dto.chat.GroupChatDTO">
select wx_enterprise_id wxEnterpriseId , staff_id staffId FROM tab_haoban_group_chat WHERE update_time > DATE_ADD(NOW(),INTERVAL -7 DAY) AND chat_status = 1 and staff_id is not null
</select>
<select id="listOpenGroupChatDK" resultType="java.lang.String">
select wx_chat_id from tab_haoban_group_chat where enterprise_id=#{enterpriseId} and staff_id = #{staffId} and delete_flag=0 and chat_status != 4 and wx_chat_id_dk is not null
</select>
</mapper>
\ No newline at end of file
......@@ -106,7 +106,7 @@
create_time,
update_time,
add_time,
all_del_flag , qw_add_time , friend_clerk_id , friend_store_id , del_type )
all_del_flag , qw_add_time , friend_clerk_id , friend_store_id , del_type , del_is_single)
VALUES (#{logId,jdbcType=BIGINT},
#{wxEnterpriseId,jdbcType=VARCHAR},
#{enterpriseId,jdbcType=CHAR},
......@@ -138,7 +138,7 @@
now(),
now(),
now(),
#{allDelFlag,jdbcType=INTEGER} , #{qwAddTime} , #{friendClerkId} , #{friendStoreId} , #{delType})
#{allDelFlag,jdbcType=INTEGER} , #{qwAddTime} , #{friendClerkId} , #{friendStoreId} , #{delType} , #{delIsSingle})
]]>
</insert>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -653,7 +653,7 @@ public class ChatDataController extends NewBaseController {
jsonObject.put("groupType", 1);
DataPageVO vo = storeAuthUtils.getDataCommon(jsonObject.toJSONString(), req.getPageNum(), "data_mbr_scale_haoban_background_loss_statisti", req.getPageSize(), true);
if (CollectionUtils.isNotEmpty(vo.getRows())) {
vo.setRows(JSONArray.parseArray(JSON.toJSONString(vo.getRows()), WechatWorkLostStoreGroupVO.class));
vo.setRows(JSONArray.parseArray(JSON.toJSONString(vo.getRows()), GroupChatStoreGroupVO.class));
}
return RestResponse.successResult(vo);
......@@ -1003,14 +1003,14 @@ public class ChatDataController extends NewBaseController {
* @return
*/
@RequestMapping("export-join-group-details")
public RestResponse<Object> exportJoinGroupDetails(@RequestBody GroupChatDetailReq req) {
public RestResponse<Object> exportJoinGroupDetails(@RequestBody GroupChatJoinDetailReq req) {
DownloadTask task = new DownloadTask();
task.setTaskTypeEnum(TaskTypeEnum.GROUP_CHAT_JOIN_DATE);
task.setDataType(req.getDataType());
task.setUser(getUserInfo());
task.setTotalCount(groupDataDetails(req).getResult().getTotalNum());
task.setTotalCount(joinGroupDetails(req).getResult().getTotalNum());
JSONObject jsonObject = new JSONObject();
req.dealWithParam(jsonObject);
......@@ -1019,6 +1019,18 @@ public class ChatDataController extends NewBaseController {
//Excel的标题是字段进行计算
List<String> indexList = new ArrayList<>();
List<String> fieldList = new ArrayList<>();
indexList.add("入群成员姓名");
fieldList.add("memberName");
indexList.add("入群成员昵称");
fieldList.add("memberNick");
indexList.add("入群成员手机号/code");
fieldList.add("memberNumber");
indexList.add("用户身份");
fieldList.add("userType");
indexList.add("群名称");
fieldList.add("groupChatName");
......@@ -1028,35 +1040,31 @@ public class ChatDataController extends NewBaseController {
indexList.add("群主姓名");
fieldList.add("staffName");
indexList.add("导购姓名");
indexList.add("群主关联导购姓名");
fieldList.add("clerkName");
indexList.add("导购code");
indexList.add("群主关联导购code");
fieldList.add("clerkCode");
indexList.add("导购所属门店名称");
indexList.add("群主关联门店名称");
fieldList.add("storeName");
indexList.add("导购所属门店code");
indexList.add("群主关联门店code");
fieldList.add("storeCode");
indexList.add("群总人数");
fieldList.add("groupCustNum");
indexList.add("新增群人数");
fieldList.add("newGroupCustNum");
indexList.add("活跃群人数");
fieldList.add("actGroupCustNum");
indexList.add("入群方式");
fieldList.add("joinScene");
indexList.add("新退群人数");
fieldList.add("newExitGroupCustNum");
indexList.add("邀请人姓名");
fieldList.add("invitorUserName");
indexList.add("群会话总条数");
fieldList.add("groupSessionsNum");
indexList.add("邀请人code");
fieldList.add("invitorUserName");
indexList.add("入群时间");
fieldList.add("joinTime");
task.setFileName( "好办群聊统计-群数据明细-" + req.getStartDate() + "_" + req.getEndDate());
task.setFileName( "好办群聊统计-入群明细-" + req.getStartDate() + "_" + req.getEndDate());
task.setChannelName("数据-会话数据-群聊统计");
task.setBucketName(BucketNameEnum.REPORT_50000.getName());
jsonObject.put("indexList", indexList);
......@@ -1126,6 +1134,19 @@ public class ChatDataController extends NewBaseController {
//Excel的标题是字段进行计算
List<String> indexList = new ArrayList<>();
List<String> fieldList = new ArrayList<>();
indexList.add("退群成员姓名");
fieldList.add("memberName");
indexList.add("退群成员昵称");
fieldList.add("memberNick");
indexList.add("退群成员手机号/code");
fieldList.add("memberNumber");
indexList.add("用户身份");
fieldList.add("userType");
indexList.add("群名称");
fieldList.add("groupChatName");
......@@ -1135,35 +1156,22 @@ public class ChatDataController extends NewBaseController {
indexList.add("群主姓名");
fieldList.add("staffName");
indexList.add("导购姓名");
indexList.add("群主关联导购姓名");
fieldList.add("clerkName");
indexList.add("导购code");
indexList.add("群主关联导购code");
fieldList.add("clerkCode");
indexList.add("导购所属门店名称");
indexList.add("群主关联门店名称");
fieldList.add("storeName");
indexList.add("导购所属门店code");
indexList.add("群主关联门店code");
fieldList.add("storeCode");
indexList.add("群总人数");
fieldList.add("groupCustNum");
indexList.add("退群时间");
fieldList.add("userQuitTime");
indexList.add("新增群人数");
fieldList.add("newGroupCustNum");
indexList.add("活跃群人数");
fieldList.add("actGroupCustNum");
indexList.add("新退群人数");
fieldList.add("newExitGroupCustNum");
indexList.add("群会话总条数");
fieldList.add("groupSessionsNum");
task.setFileName( "好办群聊统计-群数据明细-" + req.getStartDate() + "_" + req.getEndDate());
task.setFileName( "好办群聊统计-退群明细-" + req.getStartDate() + "_" + req.getEndDate());
task.setChannelName("数据-会话数据-群聊统计");
task.setBucketName(BucketNameEnum.REPORT_50000.getName());
jsonObject.put("indexList", indexList);
......@@ -1278,8 +1286,7 @@ public class ChatDataController extends NewBaseController {
indexList.add("会话时间");
fieldList.add("sendTime");
task.setFileName( "好办群聊统计-群数据明细-" + req.getStartDate() + "_" + req.getEndDate());
task.setFileName( "好办群聊统计-会话明细-" + req.getStartDate() + "_" + req.getEndDate());
task.setChannelName("数据-会话数据-群聊统计");
task.setBucketName(BucketNameEnum.REPORT_50000.getName());
jsonObject.put("indexList", indexList);
......
......@@ -2,6 +2,8 @@ package com.gic.haoban.manage.web.controller;
import java.util.Date;
import com.gic.search.engine.api.constant.OperateEnum;
import com.gic.search.engine.api.filter.NewNodeAddUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -66,7 +68,7 @@ public class MemberController {
*/
@RequestMapping("member-count")
@ResponseBody
public RestResponse<Object> getMemberCount(String searchParams, @RequestParam(defaultValue="0")int type) {
public RestResponse<Object> getMemberCount(String searchParams, @RequestParam(defaultValue="0")int type , @RequestParam(defaultValue="0")int qywxFlag) {
if (StringUtils.isBlank(searchParams)) {
return RestResponse.successResult(0);
}
......@@ -83,6 +85,9 @@ public class MemberController {
if (!StringUtils.isBlank(searchParams)) {
searchJson = JSON.parseObject(searchParams);
}
if(qywxFlag==1) {
searchJson = NewNodeAddUtil.addNewNodeForAnd("qywxFlag", OperateEnum.OPERATE_EQ.getValue(), 0, searchJson);
}
DynamicSearchDTO search = new DynamicSearchDTO();
searchJson = this.storeService.parseSelectData(searchJson, enterpriseId, clerkId, new Date());
search.setSearchJson(searchJson);
......
......@@ -47,7 +47,7 @@ public class RightController extends WebBaseController {
if(StringUtils.isEmpty(clerkId)) {
return resultResponse(HaoBanErrCode.ERR_OTHER, "clerkId为空");
}
ServiceResponse<List<RightMenuDTO>> resp = this.rightService.getHaobanMenu(enterpriseId, clerkId);
ServiceResponse<List<RightMenuDTO>> resp = this.rightService.getHaobanMenu(enterpriseId, clerkId, login.getWxEnterpriseId());
if (resp.isSuccess()) {
return resultResponse(HaoBanErrCode.ERR_1, resp.getResult());
}
......@@ -67,7 +67,7 @@ public class RightController extends WebBaseController {
if(StringUtils.isEmpty(clerkId)) {
return resultResponse(HaoBanErrCode.ERR_OTHER, "clerkId为空");
}
ServiceResponse<Map<String,Object>> resp = this.rightService.listHaobanAllMenu(enterpriseId, clerkId);
ServiceResponse<Map<String,Object>> resp = this.rightService.listHaobanAllMenu(enterpriseId, clerkId, login.getWxEnterpriseId());
if (resp.isSuccess()) {
return resultResponse(HaoBanErrCode.ERR_1, resp.getResult());
}
......
......@@ -3,12 +3,19 @@ package com.gic.haoban.manage.web.controller;
import com.gic.api.base.commons.Page;
import com.gic.clerk.api.dto.AuthorizedUser;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.dto.PowerClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.clerk.api.service.PowerService;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.dto.EnterpriseSettingDTO;
import com.gic.enterprise.api.dto.StoreWidgetDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.enterprise.api.service.StoreWidgetService;
import com.gic.haoban.manage.web.vo.ClerkListVO;
import com.gic.web.common.utils.SessionContextUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -17,16 +24,26 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import java.util.Objects;
@Controller
public class UserController{
public class UserController {
private static final Logger LOGGER = LogManager.getLogger(UserController.class);
@Autowired
private ClerkService clerkService;
@Autowired
private EnterpriseService enterpriseService;
@Autowired
private StoreWidgetService storeWidgetService;
@Autowired
private PowerService powerService;
@RequestMapping("list-user-by-search-name")
@ResponseBody
public RestResponse listUserBySearchName(String searchName, Integer pageNum, Integer pageSize) {
......@@ -46,4 +63,29 @@ public class UserController{
}
return RestResponse.successResult(result);
}
@RequestMapping("get-user-store-power")
@ResponseBody
public RestResponse<Integer> getUserStorePower() {
AuthorizedUser user = SessionContextUtils.getLoginUser();
EnterpriseSettingDTO setting = enterpriseService.getEnterpriseSettingByEnterpriseId(user.getEnterpriseId());
if (Objects.isNull(setting.getEnableAccessControl()) || setting.getEnableAccessControl() != 1) {
return RestResponse.successResult(0);
}
PowerClerkDTO clerkDetail = powerService.getClerkDetail(user.getUserId());
if(Objects.isNull(clerkDetail)){
return RestResponse.failure("999","用户不存在");
}
// 空,代表超管
if(StringUtils.isEmpty(clerkDetail.getStoreWidgetId())){
return RestResponse.successResult(0);
}
StoreWidgetDTO storeWidget = storeWidgetService.getStoreWidgetBykey(clerkDetail.getStoreWidgetId());
return RestResponse.successResult(storeWidget.getSelectType());
}
}
......@@ -126,6 +126,9 @@ public class WechatWorkController extends NewBaseController {
if (tempJson.containsKey("4")) {
vo.setSalesDeleteNum(tempJson.getInteger("4"));
}
if(tempJson.containsKey("5")) {
vo.setDelIsSingleNum(tempJson.getInteger("5"));
}
}
}
voList.add(vo);
......@@ -361,6 +364,8 @@ public class WechatWorkController extends NewBaseController {
fieldList.add("storeCode");
indexList.add("删除类型");
fieldList.add("deleteType");
indexList.add("单向好友被删除");
fieldList.add("delIsSingle");
indexList.add("留存天数");
fieldList.add("remainDays");
indexList.add("添加好友时间");
......
......@@ -105,6 +105,7 @@ public class WelcomeController extends WebBaseController {
qdto.setModifierId(login.getClerkId());
qdto.setModifierName(login.getClerkFullName());
qdto.setType(qo.getType());
qdto.setScene(qo.getScene());
if (qo.getType() == null) {
qdto.setType(HmWelcomeType.NORMAL.getCode());
}
......@@ -266,6 +267,7 @@ public class WelcomeController extends WebBaseController {
queryWelcomeQDTO.setPageNum(qo.getPageNum());
queryWelcomeQDTO.setPageSize(qo.getPageSize());
queryWelcomeQDTO.setType(qo.getType());
queryWelcomeQDTO.setScene(qo.getScene());
if (qo.getType() == null) {
queryWelcomeQDTO.setType(HmWelcomeType.NORMAL.getCode());
}
......
......@@ -119,6 +119,7 @@ public class QywxAlarmWordsController {
}
qdto.setWxEnterpriseId(wxEnterpriseId);
qdto.setEnterpriseId(enterpriseId);
qdto.setLoginClerkId(loginUser.getClerkId());
ServiceResponse<Page<OpenQwAlarmLogDTO>> resp = this.openQwApiService.alarmWordsLogPage(qdto,basePageInfo) ;
if(!resp.isSuccess()) {
return RestResponse.failure("9999",resp.getMessage()) ;
......@@ -143,6 +144,7 @@ public class QywxAlarmWordsController {
BasePageInfo basePageInfo = new BasePageInfo() ;
basePageInfo.setPageNum(1);
basePageInfo.setPageSize(1);
qdto.setLoginClerkId(loginUser.getClerkId());
ServiceResponse<Page<OpenQwAlarmLogDTO>> pageResp =this.openQwApiService.alarmWordsLogPage(qdto,basePageInfo) ;
final int totalCount = pageResp.getResult().getTotalCount() ;
if (totalCount == 0) {
......
......@@ -8,6 +8,8 @@ import com.gic.api.base.commons.JSONResponse;
import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.clerk.api.dto.AuthorizedUser;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.DateUtil;
import com.gic.commons.util.PageHelperUtils;
import com.gic.commons.webapi.reponse.RestResponse;
......@@ -67,6 +69,8 @@ public class QywxOpenController {
private OpenStaffExcelHandler openStaffExcelHandler;
@Autowired
private EnterpriseUseForbidService enterpriseUseForbidService;
@Autowired
private ClerkService clerkService ;
/**
* 托管列表
......@@ -87,6 +91,7 @@ public class QywxOpenController {
if (null != qdto.getEndDate()) {
qdto.setEndDate(DateUtil.getEndTimeOfDay(qdto.getEndDate()));
}
qdto.setLoginClerkId(loginUser.getClerkId());
ServiceResponse<Page<OpenStaffListDTO>> pageResp = this.openStaffApiService.page(qdto, basePageInfo);
Page<OpenStaffListDTO> page = pageResp.getResult();
Page<OpenStaffVO> retPage = PageHelperUtils.changePageToCurrentPage(page, OpenStaffVO.class);
......@@ -117,6 +122,7 @@ public class QywxOpenController {
if (null != qdto.getEndDate()) {
qdto.setEndDate(DateUtil.getEndTimeOfDay(qdto.getEndDate()));
}
qdto.setLoginClerkId(loginUser.getClerkId());
ServiceResponse<Page<OpenStaffListDTO>> pageResp = this.openStaffApiService.page(qdto, basePageInfo);
final int totalCount = pageResp.getResult().getTotalCount();
if (totalCount == 0) {
......@@ -180,6 +186,11 @@ public class QywxOpenController {
if (CollectionUtils.isEmpty(relationList)) {
return RestResponse.failure("9999", "成员未关联导购");
}
relationList.forEach(o->{
String clerkId = o.getClerkId() ;
ClerkDTO clerk = this.clerkService.getclerkById(clerkId) ;
o.setClerkType(clerk.getClerkType());
});
relationList = relationList.stream().filter(o -> o.getClerkType() <= 1 && o.getEnterpriseId().equals(enterpriseId)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(relationList)) {
return RestResponse.failure("9999", "成员需关联gic商户下导购");
......
......@@ -10,9 +10,12 @@ import com.gic.api.base.commons.ServiceResponse;
import com.gic.clerk.api.dto.AuthorizedUser;
import com.gic.commons.util.DateUtil;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO;
import com.gic.haoban.common.anno.IgnoreLogin;
import com.gic.haoban.common.utils.AuthWebRequestUtil;
import com.gic.haoban.common.utils.EntityUtil;
import com.gic.haoban.manage.api.service.OpenStaffApiService;
......@@ -39,11 +42,11 @@ import com.gic.member.tag.api.dto.MemberTagItemDTO;
import com.gic.member.tag.api.service.MemberTagApiService;
import com.gic.member.tag.api.service.MemberTagGroupApiService;
import com.gic.qcloud.BucketNameEnum;
import com.gic.search.engine.api.constant.OperateEnum;
import com.gic.search.engine.api.dto.ESResponseQueryCount;
import com.gic.search.engine.api.dto.dynamic.DynamicSearchDTO;
import com.gic.search.engine.api.filter.NewNodeAddUtil;
import com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService;
import com.gic.redis.data.util.RedisUtil;
import com.gic.thirdparty.cloudfile.CloudFileUtil;
import com.gic.thirdparty.cloudfile.enums.CloudFileBusinessOptEnum;
import com.gic.thirdparty.cloudfile.enums.CloudFileTypeEnum;
import com.gic.thirdparty.cloudfile.pojo.CloudFileInfo;
import com.gic.web.common.download.DownloadTask;
import com.gic.web.common.download.DownloadTaskUtil;
import com.gic.web.common.download.constants.TaskTypeEnum;
......@@ -56,12 +59,15 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
......@@ -87,6 +93,8 @@ public class QywxOpenTaskController {
private OpenStaffApiService openStaffApiService;
@Autowired
private MemberController memberController;
@Autowired
private EnterpriseService enterpriseService;
/**
* 加好友任务列表
......@@ -167,6 +175,8 @@ public class QywxOpenTaskController {
} else {
GicLogRecordEvaluationContext.noWriteLog();
}
}else {
GicLogRecordEvaluationContext.noWriteLog();
}
ServiceResponse<OpenQwAddTaskDTO> resp = this.openQwApiService.saveAddTask(dto);
if (!resp.isSuccess()) {
......@@ -442,6 +452,8 @@ public class QywxOpenTaskController {
} else {
GicLogRecordEvaluationContext.noWriteLog();
}
}else {
GicLogRecordEvaluationContext.noWriteLog();
}
ServiceResponse<OpenQwAddTaskSettingDTO> resp = this.openQwApiService.saveAddSetting(dto);
if (!resp.isSuccess()) {
......@@ -608,6 +620,8 @@ public class QywxOpenTaskController {
} else {
GicLogRecordEvaluationContext.noWriteLog();
}
}else {
GicLogRecordEvaluationContext.noWriteLog();
}
return RestResponse.successResult(resp.getResult());
}
......@@ -698,6 +712,8 @@ public class QywxOpenTaskController {
} else {
GicLogRecordEvaluationContext.noWriteLog();
}
}else {
GicLogRecordEvaluationContext.noWriteLog();
}
return RestResponse.successResult(resp.getResult());
}
......@@ -726,8 +742,13 @@ public class QywxOpenTaskController {
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
String wxEnterpriseId = loginUser.getWxEnterpriseId();
String enterpriseId = loginUser.getEnterpriseId();
// 添加的人数
int memberNum = this.getMemberNum(dto.getSearchParams(), dto.getMemberType());
// 添加的人数 1和专属无好友 2和所有无好友
int memberRule= dto.getMemberRule() ;
int qywxFlag = 0 ;
if(memberRule==2) {
qywxFlag = 1 ;
}
int memberNum = this.getMemberNum(dto.getSearchParams(), dto.getMemberType(),qywxFlag);
// 成员数
int staffNum = this.openStaffApiService.listAllOnlineStaff(wxEnterpriseId, enterpriseId).size();
if (staffNum == 0) {
......@@ -738,18 +759,55 @@ public class QywxOpenTaskController {
if (null == setting) {
return RestResponse.successResult(0);
}
int min = (setting.getAddIntervalEnd() - setting.getAddIntervalStart()) / 2;
int min = (setting.getAddIntervalEnd() + setting.getAddIntervalStart()) / 2;
int hour = Integer.valueOf(setting.getAddTime().split("-")[1].split(":")[0]) -
Integer.valueOf(setting.getAddTime().split("-")[0].split(":")[0]);
int m = (hour * 60 / min);
int days = BigDecimal.valueOf(memberNum).divide(BigDecimal.valueOf(m*staffNum),BigDecimal.ROUND_UP).intValue() ;
int days = BigDecimal.valueOf(memberNum).divide(BigDecimal.valueOf(m * staffNum), BigDecimal.ROUND_UP).intValue();
log.info("member={},staff={},m={}", memberNum, staffNum, m);
return RestResponse.successResult(days);
}
private int getMemberNum(String searchParams, int memberType) {
RestResponse<Object> resp = this.memberController.getMemberCount(searchParams, memberType);
private int getMemberNum(String searchParams, int memberType , int qywxFlag) {
RestResponse<Object> resp = this.memberController.getMemberCount(searchParams, memberType,qywxFlag);
return Integer.valueOf(resp.getResult().toString());
}
@RequestMapping("test")
public RestResponse<Object> test(String memberId) {
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
String wxEnterpriseId = loginUser.getWxEnterpriseId();
String enterpriseId = loginUser.getEnterpriseId();
String ret = this.openQwApiService.matchStaffTest(wxEnterpriseId, enterpriseId, memberId);
return RestResponse.successResult(ret);
}
/**
* 音频文件转mp3
* @return
*/
@RequestMapping("list-silk")
@com.gic.web.common.ano.IgnoreLogin
@IgnoreLogin
public Object listSilk() {
List<OpenQwSilkMp3DTO> ret = this.openQwApiService.listSilk();
RedisUtil.setCache("haobansilk2mp3",1,5L, TimeUnit.MINUTES);
return RestResponse.successResult(ret);
}
@RequestMapping("silk2mp3")
@com.gic.web.common.ano.IgnoreLogin
@IgnoreLogin
public Object silk2Mp3(HttpServletRequest request, String enterpriseId, int type, Long id , Long relationId) throws IOException {
EnterpriseDTO enterpriseDTO = this.enterpriseService.getEnterpriseById(enterpriseId);
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
List<MultipartFile> list = multiRequest.getMultiFileMap().get("media");
MultipartFile mf = list.get(0);
byte[] data = mf.getBytes();
CloudFileInfo uploadInfo = CloudFileUtil.uploadFile(data, "mp3", CloudFileTypeEnum.AUDIO, enterpriseDTO.getFactoryCode(), CloudFileBusinessOptEnum.COMMON_QYWX);
log.info("silk2mp3={}",uploadInfo);
this.openQwApiService.updateToMp3(enterpriseId,type,id,relationId,uploadInfo.getOrgFileUrl());
return uploadInfo;
}
}
package com.gic.haoban.manage.web.controller.wechatwork;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.JSONResponse;
import com.gic.clerk.api.dto.AuthorizedUser;
import com.gic.commons.util.DateUtil;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.manage.web.handle.WechatWorkOverviewStoreGroupHandle;
import com.gic.haoban.manage.web.qo.wechatwork.StoreGroupCommonQO;
import com.gic.haoban.manage.web.qo.wechatwork.WechatWorkOverviewQO;
import com.gic.haoban.manage.web.qo.wechatwork.WechatWorkOverviewStoreGroupQO;
import com.gic.haoban.manage.web.qo.wechatwork.WechatWorkOverviewTrendQO;
import com.gic.haoban.manage.web.utils.AuthorizedUserUtils;
import com.gic.haoban.manage.web.utils.data.DataApiQO;
import com.gic.haoban.manage.web.utils.data.StoreAuthUtils;
import com.gic.haoban.manage.web.vo.wechatwork.DataPageVO;
import com.gic.haoban.manage.web.vo.wechatwork.WechatWorkOverviewStoreGroupVO;
import com.gic.haoban.manage.web.vo.wechatwork.WechatWorkOverviewTrendVO;
import com.gic.haoban.manage.web.vo.wechatwork.WechatWorkOverviewVO;
import com.gic.qcloud.BucketNameEnum;
import com.gic.web.common.controller.NewBaseController;
import com.gic.web.common.download.DownloadTask;
import com.gic.web.common.download.DownloadTaskUtil;
import com.gic.web.common.download.constants.TaskTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 企微概览
* @Author guojx
* @Date 2024/7/23 10:45
*/
@RestController
@Slf4j
@RequestMapping("wechat-work-overview")
public class WechatWorkOverviewController extends NewBaseController {
@Autowired
private StoreAuthUtils storeAuthUtils;
@Autowired
private WechatWorkOverviewStoreGroupHandle wechatWorkOverviewStoreGroupHandle;
/**
* 概览
* @param qo
* @return
*/
@RequestMapping(value = "overview")
public RestResponse<WechatWorkOverviewVO> overview(@RequestBody WechatWorkOverviewQO qo) {
List<WechatWorkOverviewVO> voList = storeAuthUtils.getOverview(
"data_mbr_scale_haoban_background_overview",
new JSONObject(),
new StoreGroupCommonQO().setStoreGroupId(qo.getStoreGroupId()),
WechatWorkOverviewVO.class);
return RestResponse.successResult(CollectionUtils.isEmpty(voList) ? null : voList.get(0));
}
/**
* 趋势图
* @param qo
* @return
* @throws ParseException
*/
@RequestMapping(value = "trend")
public RestResponse<List<WechatWorkOverviewTrendVO>> trend(@RequestBody WechatWorkOverviewTrendQO qo) throws ParseException {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
//1:总数 2:日期趋势
jsonObject.put("groupType", 2);
List<WechatWorkOverviewTrendVO> list = storeAuthUtils.getOverview(
"data_mbr_scale_haoban_background_overview_date",
jsonObject,
new StoreGroupCommonQO().setStoreGroupId(qo.getStoreGroupId()),
WechatWorkOverviewTrendVO.class);
Map<String, WechatWorkOverviewTrendVO> map = new HashMap<>();
if (CollectionUtils.isNotEmpty(list)) {
map = list.stream().collect(Collectors.toMap(e -> e.getBizDate(), e -> e));
}
List<WechatWorkOverviewTrendVO> voList = new ArrayList<>();
List<String> dateList = DateUtil.getBetweenDates(qo.getStartDate(), qo.getEndDate());
for (String date : dateList) {
WechatWorkOverviewTrendVO vo = map.get(date);
if (vo == null) {
vo.setBizDate(date);
}
voList.add(vo);
}
return RestResponse.successResult(voList);
}
/**
* 新增概览数据
* @param qo
* @return
*/
@RequestMapping(value = "new-overview")
public RestResponse<WechatWorkOverviewTrendVO> newOverview(@RequestBody WechatWorkOverviewTrendQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
//1:总数 2:日期趋势
jsonObject.put("groupType", 1);
List<WechatWorkOverviewTrendVO> voList = storeAuthUtils.getOverview(
"data_mbr_scale_haoban_background_overview_date",
jsonObject,
new StoreGroupCommonQO().setStoreGroupId(qo.getStoreGroupId()),
WechatWorkOverviewTrendVO.class);
return RestResponse.successResult(CollectionUtils.isEmpty(voList) ? null : voList.get(0));
}
/**
* 门店分组
* @param qo
* @return
*/
@RequestMapping(value = "store-group")
public RestResponse<DataPageVO<WechatWorkOverviewStoreGroupVO>> storeGroup(@RequestBody WechatWorkOverviewStoreGroupQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
return RestResponse.successResult(storeAuthUtils.getData(new DataApiQO()
.setPageSize(qo.getPageSize())
.setCurrentPage(qo.getPageNum())
.setNoTotal(false)
.setHasCountPerPage(true)
.setClazz(WechatWorkOverviewStoreGroupVO.class)
.setJsonObject(jsonObject)
.setStoreGroupCommonQO(qo)
.setApolloKey(qo.getQueryDataType() == 1 ? "data_mbr_scale_haoban_background_count" : "data_mbr_scale_haoban_background_count_new")
));
}
/**
* 门店分组导出
* @param qo
* @return
*/
@RequestMapping(value = "export-store-group")
public RestResponse exportStoreGroup(@RequestBody WechatWorkOverviewStoreGroupQO qo) {
DownloadTask task = new DownloadTask();
task.setTaskTypeEnum(TaskTypeEnum.NO_NEW_EXCEPTION_STORE);
task.setDataType(qo.getDataType());
task.setUser(getUserInfo());
task.setTotalCount(storeGroup(qo).getResult().getTotalNum());
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
storeAuthUtils.setStoreGroupJsonParam(jsonObject, qo);
boolean isTotalQuery = qo.getQueryDataType() == 1;
jsonObject.put("apolloKey", isTotalQuery ? "data_mbr_scale_haoban_background_count" : "data_mbr_scale_haoban_background_count_new");
//Excel的标题是字段进行计算
List<String> indexList = new ArrayList<>();
List<String> fieldList = new ArrayList<>();
Integer storeGroup = jsonObject.getInteger("storeGroup");
boolean isStore = storeGroup != null && storeGroup == 7;
if (isStore) {
indexList.add("门店名称");
fieldList.add("storeName");
indexList.add("门店code");
fieldList.add("storeCode");
} else {
indexList.add("分组名称");
fieldList.add("storeGroupName");
}
indexList.add("上级分组");
fieldList.add("parentStoreGroupName");
if (isTotalQuery) {
indexList.add("企微好友总数");
fieldList.add("entwchFdNumTotal");
indexList.add("已注册会员好友数");
fieldList.add("entwchFdNumMbr");
indexList.add("未注册会员好友数");
fieldList.add("entwchFdNumNonmbr");
} else {
indexList.add("新增企微好友数");
fieldList.add("newEntwchFdNumTotal");
indexList.add("新增已注册会员好友数");
fieldList.add("newEntwchFdNumMbr");
indexList.add("新增未注册会员好友数");
fieldList.add("newEntwchFdNumNonmbr");
}
if (isTotalQuery) {
task.setFileName("企微概览-门店维度总数数据");
} else {
task.setFileName("企微概览-门店维度新增数据-" + qo.getStartDate() + "_" + qo.getEndDate());
}
task.setChannelName("数据-企微数据-企微概览");
task.setBucketName(BucketNameEnum.REPORT_50000.getName());
jsonObject.put("indexList", indexList);
jsonObject.put("fieldList", fieldList);
task.setSearchDataParams(jsonObject.toJSONString());
task.setHandler(wechatWorkOverviewStoreGroupHandle);
JSONResponse downloadTask = DownloadTaskUtil.createDownloadTask(task);
return RestResponse.successResult(downloadTask.getResult());
}
private AuthorizedUser getUserInfo() {
return AuthorizedUserUtils.getUserInfo();
}
}
......@@ -36,12 +36,9 @@ public class GroupDetailsHandle extends DownloadHandlerAbstract<GroupChatDetail
JSONObject jsonObject = JSON.parseObject(searchDataParams);
jsonObject.put("pageNum", currentPage);
jsonObject.put("pageSize", getPageSize());
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mbr_scale_haoban_qw_chat_count");
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mbr_scale_haoban_qw_group_chat_detail");
List<JSONObject> list = DataApiUtils.getPageList(res);
jsonObject.put("groupType", 1);
jsonObject.put("storeGroup", 8);
if (list == null) {
list = new ArrayList<>();
}
......
......@@ -12,6 +12,7 @@ import com.gic.web.common.download.DownloadHandlerAbstract;
import com.gic.web.common.download.context.Context;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;
......@@ -26,7 +27,7 @@ import java.util.Map;
* @date 2024-06-21 11:34:49
*/
@Component
public class GroupJoinHandle extends DownloadHandlerAbstract<GroupChatJoinDetailVO> {
public class GroupJoinHandle extends DownloadHandlerAbstract<GroupChatJoinDetailVO> {
private static final Logger LOGGER = LogManager.getLogger(GroupJoinHandle.class);
......@@ -39,15 +40,20 @@ public class GroupJoinHandle extends DownloadHandlerAbstract<GroupChatJoinDetai
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_mbr_scale_haoban_qw_group_chat_join");
List<JSONObject> list = DataApiUtils.getPageList(res);
jsonObject.put("groupType", 1);
jsonObject.put("storeGroup", 8);
if (list == null) {
list = new ArrayList<>();
}
if (CollectionUtils.isNotEmpty(list)) {
List<GroupChatJoinDetailVO> result = JSONObject.parseArray(JSON.toJSONString(list), GroupChatJoinDetailVO.class);
result.forEach(groupChatJoinDetailVO -> {
if (StringUtils.isNotEmpty(groupChatJoinDetailVO.getUserType())) {
groupChatJoinDetailVO.setUserType(getUserTypeDesc(groupChatJoinDetailVO.getUserType()));
}
if (StringUtils.isNotEmpty(groupChatJoinDetailVO.getJoinScene())) {
groupChatJoinDetailVO.setJoinScene(getJoinSceneDesc(groupChatJoinDetailVO.getJoinScene()));
}
});
return result;
}
return Lists.newArrayList();
......@@ -85,4 +91,32 @@ public class GroupJoinHandle extends DownloadHandlerAbstract<GroupChatJoinDetai
List<String> list = (List<String>) jsonObject.get("fieldList");
return list;
}
private String getUserTypeDesc(String userType) {
switch (userType) {
case "1":
return "内部成员";
case "2":
return "外部成员";
case "3":
return "客户";
default:
return "";
}
}
private String getJoinSceneDesc(String userType) {
switch (userType) {
case "1":
return "群成员直接邀请入群";
case "2":
return "群成员邀请链接入群";
case "3":
return "通过扫描群二维码入群";
default:
return "";
}
}
}
package com.gic.haoban.manage.web.handle;
import com.alibaba.fastjson.JSONObject;
import com.gic.enterprise.api.dto.security.DownloadReportDTO;
import com.gic.haoban.manage.web.utils.data.DataApiQO;
import com.gic.haoban.manage.web.utils.data.StoreAuthUtils;
import com.gic.haoban.manage.web.vo.wechatwork.WechatWorkOverviewStoreGroupVO;
import com.gic.web.common.download.DownloadHandlerAbstract;
import com.gic.web.common.download.context.Context;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
/**
* 数据-企微数据-流失好友
*/
@Component
public class WechatWorkOverviewStoreGroupHandle extends DownloadHandlerAbstract<WechatWorkOverviewStoreGroupVO> {
private static final Logger LOGGER = LogManager.getLogger(WechatWorkOverviewStoreGroupHandle.class);
@Autowired
private StoreAuthUtils storeAuthUtils;
@Override
public List<WechatWorkOverviewStoreGroupVO> getData(Context context, String searchDataParams, Integer currentPage) {
return storeAuthUtils.getData(new DataApiQO()
.setClazz(WechatWorkOverviewStoreGroupVO.class)
.setPageSize(getPageSize())
.setCurrentPage(currentPage)
.setLogStr("数据-企微数据-企微概览导出日志进来")
.setSearchDataParams(searchDataParams)
.setNoTotal(false)
.setHasCountPerPage(false)
).getRows();
}
@Override
public List<String> getColumnNames() {
return Collections.EMPTY_LIST;
}
@Override
public List<String> getColumnNames(Context context){
DownloadReportDTO downloadReportDTO = context.getDownloadReportDTO();
String searchDataParams = downloadReportDTO.getSearchDataParams();
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
List<String> list = (List<String>) jsonObject.get("indexList");
return list;
}
@Override
public LinkedHashMap<String, List<String>> doubleColumnNames() {
return null;
}
@Override
public List<String> getColumns() {
return Collections.EMPTY_LIST;
}
@Override
public List<String> getColumns(Context context) {
DownloadReportDTO downloadReportDTO = context.getDownloadReportDTO();
String searchDataParams = downloadReportDTO.getSearchDataParams();
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
List<String> list = (List<String>) jsonObject.get("fieldList");
return list;
}
}
......@@ -27,9 +27,14 @@ public class GroupChatChatDetailReq implements Serializable {
private String endDate;
/**
* 群查询模糊
* 导购模糊查询
*/
private String vagueQueryGroup;
private String vagueQueryClerk;
/**
* 用户模糊查询
*/
private String vagueQueryUser;
/**
* 用户身份
......@@ -37,6 +42,12 @@ public class GroupChatChatDetailReq implements Serializable {
private String userType;
/**
* 消息类型
* 1文本2图片3视频4小程序5链接6gif表情7红包8文件9位置10名片11视频电话12语音电话
*/
private String msgType;
/**
* 排序类型 1 正序 2 倒序
*/
private Integer orderByType;
......@@ -80,13 +91,20 @@ public class GroupChatChatDetailReq implements Serializable {
if (orderByType != null) {
jsonObject.put("orderByType", orderByType);
}
if (msgType != null) {
jsonObject.put("msgType", msgType);
}
if (orderByFields != null) {
jsonObject.put("orderByFields", getDataApiOrderField());
}
jsonObject.put("pageNum", pageNum);
jsonObject.put("pageSize", pageSize);
if (StringUtils.isNotBlank(vagueQueryGroup)) {
jsonObject.put("vagueQueryGroup", vagueQueryGroup);
if (StringUtils.isNotBlank(vagueQueryClerk)) {
jsonObject.put("vagueQueryClerk", vagueQueryClerk);
}
if (StringUtils.isNotBlank(vagueQueryUser)) {
jsonObject.put("vagueQueryUser", vagueQueryUser);
jsonObject.put("phoneNum", vagueQueryUser);
}
if (StringUtils.isNotBlank(userType)) {
jsonObject.put("userType", userType);
......@@ -110,12 +128,20 @@ public class GroupChatChatDetailReq implements Serializable {
this.endDate = endDate;
}
public String getVagueQueryGroup() {
return vagueQueryGroup;
public String getVagueQueryClerk() {
return vagueQueryClerk;
}
public void setVagueQueryGroup(String vagueQueryGroup) {
this.vagueQueryGroup = vagueQueryGroup;
public void setVagueQueryClerk(String vagueQueryClerk) {
this.vagueQueryClerk = vagueQueryClerk;
}
public String getVagueQueryUser() {
return vagueQueryUser;
}
public void setVagueQueryUser(String vagueQueryUser) {
this.vagueQueryUser = vagueQueryUser;
}
public String getUserType() {
......@@ -166,6 +192,14 @@ public class GroupChatChatDetailReq implements Serializable {
this.dataType = dataType;
}
public String getMsgType() {
return msgType;
}
public void setMsgType(String msgType) {
this.msgType = msgType;
}
public String getRequestProject() {
return requestProject;
}
......
......@@ -25,9 +25,9 @@ public class GroupChatDetailReq implements Serializable {
private String endDate;
/**
* 用户模糊
* 门店模糊
*/
private String vagueQueryUser;
private String vagueQueryStore;
/**
* 导购名称/code
......@@ -96,8 +96,8 @@ public class GroupChatDetailReq implements Serializable {
if (StringUtils.isNotBlank(vagueQueryClerk)) {
jsonObject.put("vagueQueryClerk", vagueQueryClerk);
}
if (StringUtils.isNotBlank(vagueQueryUser)) {
jsonObject.put("vagueQueryUser", vagueQueryUser);
if (StringUtils.isNotBlank(vagueQueryStore)) {
jsonObject.put("vagueQueryStore", vagueQueryStore);
}
if (StringUtils.isNotBlank(vagueQueryStaff)) {
jsonObject.put("vagueQueryStaff", vagueQueryStaff);
......@@ -121,12 +121,12 @@ public class GroupChatDetailReq implements Serializable {
this.endDate = endDate;
}
public String getVagueQueryUser() {
return vagueQueryUser;
public String getVagueQueryStore() {
return vagueQueryStore;
}
public void setVagueQueryUser(String vagueQueryUser) {
this.vagueQueryUser = vagueQueryUser;
public void setVagueQueryStore(String vagueQueryStore) {
this.vagueQueryStore = vagueQueryStore;
}
public String getVagueQueryClerk() {
......
......@@ -63,7 +63,7 @@ public class GroupChatExitDetailReq implements Serializable {
public Integer getDataApiOrderField() {
Map<String, Integer> map = new HashMap<>(4);
map.put("joinTime", 1);
map.put("userQuitTime", 1);
return map.get(orderByFields) == null ? 1 : map.get(orderByFields);
}
......
......@@ -105,6 +105,13 @@ public class SingleChatDetailReq implements Serializable {
if (StringUtils.isNotBlank(vagueQueryClerk)) {
jsonObject.put("vagueQueryClerk", vagueQueryClerk);
}
if (StringUtils.isNotBlank(content)) {
jsonObject.put("content", content);
}
if (StringUtils.isNotBlank(vagueQueryUser)) {
jsonObject.put("vagueQueryUser", vagueQueryUser);
jsonObject.put("phoneNum", vagueQueryUser);
}
if (sendType != null) {
jsonObject.put("sendType", sendType);
}
......
......@@ -68,6 +68,7 @@ public class SingleChatStoreGroupReq extends StoreGroupCommonQO implements Seria
map.put("launchSessionsCustNum", 7);
map.put("launchSessionsSalesNum", 8);
map.put("sendNewsNum", 9);
map.put("entWechatFdNum", 10);
return map.get(orderByFields) == null ? 1 : map.get(orderByFields);
}
......
package com.gic.haoban.manage.web.qo.wechatwork;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.experimental.Accessors;
......@@ -12,40 +14,48 @@ import java.util.List;
*/
@Data
@Accessors(chain = true)
@JsonIgnoreProperties(ignoreUnknown = true)
public class StoreGroupCommonQO implements Serializable {
/**
* 门店code/名称
*/
@JSONField(serialize = false)
private String storeSearchParam;
/**
* 可以多选,英文逗号隔开。优先级高于storeId
*/
@JSONField(serialize = false)
private String storeGroupId;
/**
* 可以多选,英文逗号隔开
*/
@JSONField(serialize = false)
private String storeId;
/**
* 分组下钻的时候,当前点击的分组id参数.如果是无归属,则值是-1
* @return
*/
@JSONField(serialize = false)
private String nextStoreGroupId;
/**
* 因为存在nextStoreGroupId = -1的无归属分组。当下钻无归属,值为无归属上一层级的分组id。如果为空,说明上一层级是所有哦门店,否则必有值
*/
@JSONField(serialize = false)
private String preStoreGroupId;
/**
* 分组维度查询,勾选展示门店 1:是
*/
@JSONField(serialize = false)
private Integer showStore;
/**
* 门店状态
*/
@JSONField(serialize = false)
private List<String> statusList;
public boolean isRecycle() {
......
......@@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* @Author guojx
......@@ -53,6 +54,8 @@ public class WechatWorkLostDetailQO implements Serializable {
*/
private Integer delType;
private Integer delIsSingle ;
/**
* 排序类型 1 正序 2 倒序
......@@ -115,5 +118,11 @@ public class WechatWorkLostDetailQO implements Serializable {
if (StringUtils.isNotBlank(deleteType)) {
jsonObject.put("deleteType", deleteType);
}
if (Objects.nonNull(delType)) {
jsonObject.put("delType", delType);
}
if(Objects.nonNull(delIsSingle) && -1 != delIsSingle) {
jsonObject.put("delIsSingle",delIsSingle) ;
}
}
}
package com.gic.haoban.manage.web.qo.wechatwork;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/7/23 10:29
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WechatWorkOverviewQO implements Serializable {
private String storeGroupId;
}
package com.gic.haoban.manage.web.qo.wechatwork;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/5/22 9:27
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WechatWorkOverviewStoreGroupQO extends StoreGroupCommonQO implements Serializable {
/**
* 1:总数 2:新增
*/
@JSONField(serialize = false)
private Integer queryDataType;
/**
* 新增类型需要传,开始日期
*/
private String startDate;
/**
* 新增类型需要传:结束日期
*/
private String endDate;
/**
* 排序类型 1 正序 2 倒序
*/
private Integer orderByType;
/**
* 排序字段名称 1:企微好友 2:已注册会员好友 3:未注册会员好友
*/
private String orderByFields;
private Integer pageNum;
private Integer pageSize;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private Integer dataType = 1;
/**
* 下载导出参数:为了兼容前端传参
*/
private String requestProject;
public Integer getQueryDataType() {
return queryDataType == null ? 1 : queryDataType;
}
}
package com.gic.haoban.manage.web.qo.wechatwork;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/7/23 10:29
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WechatWorkOverviewTrendQO implements Serializable {
@JSONField(serialize = false)
private String storeGroupId;
/**
* yyyy-MM-dd
*/
private String startDate;
/**
* yyyy-MM-dd
*/
private String endDate;
}
......@@ -30,6 +30,16 @@ public class ListWelcomeQO extends BasePageInfo {
*/
private Integer type;
private int scene ;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
......
......@@ -64,6 +64,16 @@ public class SaveWelcomeQO implements Serializable {
*/
private Integer type;
private int scene = 1 ;
public int getScene() {
return scene;
}
public void setScene(int scene) {
this.scene = scene;
}
public String getWelcomeId() {
return welcomeId;
}
......
package com.gic.haoban.manage.web.utils.data;
import com.alibaba.fastjson.JSONObject;
import com.gic.haoban.manage.web.qo.wechatwork.StoreGroupCommonQO;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/7/23 9:36
*/
@Data
@Accessors(chain = true)
public class DataApiQO implements Serializable {
/**
* 调用传的参数
* 和jsonObject和StoreGroupCommonQO参数二选一
*/
private String searchDataParams;
/**
* 数据接口名称
*/
private String apolloKey;
private Integer currentPage;
/**
* 是否打印日志
*/
private String logStr;
private Integer pageSize;
/**
* 是否需要强制合计数据
* 默认是第一页需要合计数据
*/
private boolean hasCountPerPage;
/**
* 是否强制去除合计数据
*/
private boolean noTotal;
/**
* 返回rows对象转化
*/
private Class clazz;
/**
* 数据接口调用的参数
*/
private JSONObject jsonObject;
private StoreGroupCommonQO storeGroupCommonQO;
}
package com.gic.haoban.manage.web.utils.data;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.commons.util.DataApiUtils;
......@@ -19,7 +21,10 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
......@@ -48,6 +53,14 @@ public class StoreAuthUtils {
jsonObject.put("wxEnterpriseId", login.getWxEnterpriseId());
}
public <T> List<T> getOverview(String apolloKey, JSONObject jsonObject, StoreGroupCommonQO storeGroupCommonQO, Class clazz) {
setCommonParam(jsonObject, storeGroupCommonQO);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), apolloKey);
List<JSONObject> list = DataApiUtils.getDataList(res);
List<T> voList = JSONArray.parseArray(JSON.toJSONString(list), clazz);
return voList;
}
public List<String> getAuthStoreId(StoreGroupCommonQO storeCommonQO) {
String storeGroupId = storeCommonQO.getStoreGroupId();
String storeSearchParam = storeCommonQO.getStoreSearchParam();
......@@ -110,6 +123,7 @@ public class StoreAuthUtils {
public void setStoreGroupJsonParam(JSONObject jsonObject, StoreGroupCommonQO qo) {
WebLoginDTO login = AuthWebRequestUtil.getLoginUser();
jsonObject.put("enterpriseId", login.getEnterpriseId());
jsonObject.put("wxEnterpriseId", login.getWxEnterpriseId());
Integer storeGroup = getStoreGroupLevel(qo);
jsonObject.put("storeGroup", storeGroup);
List<String> storeIds = getAuthStoreId(qo);
......@@ -160,27 +174,47 @@ public class StoreAuthUtils {
return 1;
}
@Deprecated
public DataPageVO getDataCommon(String searchDataParams, Integer currentPage, String logStr, Integer pageSize, boolean hasCountPerPage) {
return getDataCommonParent(searchDataParams, currentPage, logStr, pageSize, hasCountPerPage, false);
}
public DataPageVO getDataCommonParent(String searchDataParams, Integer currentPage, String logStr, Integer pageSize, boolean hasCountPerPage, boolean noTotal) {
public DataPageVO getData(DataApiQO qo) {
Integer currentPage = qo.getCurrentPage();
String logStr = qo.getLogStr();
Integer pageSize = qo.getPageSize();
String searchDataParams = qo.getSearchDataParams();
boolean hasCountPerPage = qo.isHasCountPerPage();
boolean noTotal = qo.isNoTotal();
Class clazz = qo.getClazz();
boolean isFirst = currentPage != null && currentPage == 1;
if (isFirst) {
if (isFirst && StringUtils.isNotBlank(logStr)) {
log.info(logStr);
}
DataPageVO vo = new DataPageVO();
vo.setPageNum(currentPage);
vo.setPageSize(pageSize);
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
JSONObject jsonObject = qo.getJsonObject();
if (jsonObject == null) {
//兼容老接口传参
jsonObject= JSONObject.parseObject(searchDataParams);
} else {
//填充所需参数
StoreGroupCommonQO storeGroupCommonQO = qo.getStoreGroupCommonQO();
setStoreGroupJsonParam(jsonObject, storeGroupCommonQO);
}
Integer storeGroup = jsonObject.getInteger("storeGroup");
boolean isStore = storeGroup != null && storeGroup == 7;
jsonObject.put("pageNum", currentPage);
jsonObject.put("pageSize", pageSize);
String apolloKey = jsonObject.getString("apolloKey");
String allApolloKey = jsonObject.getString("allApolloKey");
String apolloKey = qo.getApolloKey();
if (StringUtils.isBlank(apolloKey)) {
apolloKey = jsonObject.getString("apolloKey");
}
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), apolloKey);
......@@ -198,11 +232,7 @@ public class StoreAuthUtils {
jsonObject.put("pageNum", 1);
jsonObject.put("storeGroup", 8);
String totalApolloKey = apolloKey;
if (StringUtils.isNotBlank(allApolloKey)) {
totalApolloKey = allApolloKey;
}
JSONObject total = getTotalJson(jsonObject, totalApolloKey);
JSONObject total = getTotalJson(jsonObject, apolloKey);
if (total == null) {
total = new JSONObject();
}
......@@ -217,9 +247,23 @@ public class StoreAuthUtils {
}
}
vo.setRows(list);
if (clazz != null && CollectionUtils.isNotEmpty(vo.getRows())) {
vo.setRows(JSONArray.parseArray(JSON.toJSONString(vo.getRows()), clazz));
}
return vo;
}
@Deprecated
public DataPageVO getDataCommonParent(String searchDataParams, Integer currentPage, String logStr, Integer pageSize, boolean hasCountPerPage, boolean noTotal) {
return getData(new DataApiQO().setSearchDataParams(searchDataParams)
.setCurrentPage(currentPage)
.setLogStr(logStr)
.setPageSize(pageSize)
.setHasCountPerPage(hasCountPerPage)
.setNoTotal(noTotal));
}
private List<String> getStore(String enterpriseId, String userId, String search, List<String> storeGroupIdList, List<String> status, List<String> storeIdList) {
StoreSearchDTO storeSearchDTO = new StoreSearchDTO();
storeSearchDTO.setEnterpriseId(enterpriseId);
......
......@@ -72,6 +72,16 @@ public class GroupChatClerkVO extends StoreGroupCommonVO implements Serializable
*/
private String clerkId;
/**
* 企微账号名称
*/
private String staffName;
/**
* 企微账号code
*/
private String staffCode;
public Integer getGroupNum() {
return groupNum;
}
......@@ -159,4 +169,20 @@ public class GroupChatClerkVO extends StoreGroupCommonVO implements Serializable
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
}
public String getStaffName() {
return staffName;
}
public void setStaffName(String staffName) {
this.staffName = staffName;
}
public String getStaffCode() {
return staffCode;
}
public void setStaffCode(String staffCode) {
this.staffCode = staffCode;
}
}
......@@ -80,7 +80,7 @@ public class GroupChatExitDetailVO extends StoreGroupCommonVO implements Serial
/**
* 退群时间
*/
private String joinTime;
private String userQuitTime;
public String getMemberId() {
return memberId;
......@@ -186,11 +186,11 @@ public class GroupChatExitDetailVO extends StoreGroupCommonVO implements Serial
this.clerkName = clerkName;
}
public String getJoinTime() {
return joinTime;
public String getUserQuitTime() {
return userQuitTime;
}
public void setJoinTime(String joinTime) {
this.joinTime = joinTime;
public void setUserQuitTime(String userQuitTime) {
this.userQuitTime = userQuitTime;
}
}
......@@ -43,6 +43,11 @@ public class TrendVO implements Serializable {
private Integer visitCnt;
/**
* 人均访问次数
*/
private Integer avgVisitCnt;
/**
* 业务日期
*/
private String bizDate;
......
......@@ -38,6 +38,16 @@ public class WechatEventTrackingOverviewVO implements Serializable {
private Double visitCntSply;
/**
* 人均访问次数
*/
private Integer avgVisitCnt;
/**
* 人均访问次数前一期
*/
private Double avgVisitCntSply;
/**
* 活跃率
*/
private Double visitRate;
......
package com.gic.haoban.manage.web.vo.open;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.gic.web.common.jsonSeralizer.CardNoJsonSeralizer;
import com.gic.web.common.jsonSeralizer.PhoneNumberJsonSeralizer;
import com.gic.web.common.jsonSeralizer.UserNameJsonSeralizer;
import java.io.Serializable;
import java.util.Date;
......@@ -16,18 +21,22 @@ public class AddMemberExcelVO implements Serializable {
/**
* 会员Nick
*/
@JsonSerialize(using = UserNameJsonSeralizer.class)
private String memberNick;
/**
* 会员姓名
*/
@JsonSerialize(using = UserNameJsonSeralizer.class)
private String memberName;
/**
* 会员卡
*/
@JsonSerialize(using = CardNoJsonSeralizer.class)
private String memberCard;
/**
* 会员手机号
*/
@JsonSerialize(using = PhoneNumberJsonSeralizer.class)
private String memberPhone;
/**
* 导购code
......
......@@ -35,6 +35,7 @@ public class OpenQwAlarmLogExcelVO implements Serializable {
/**
* 昵称
*/
@JsonSerialize(using = UserNameJsonSeralizer.class)
private String memberName;
/**
* 创建时间
......
......@@ -80,4 +80,7 @@ public class WechatWorkLostDetailVO extends StoreGroupCommonVO implements Serial
private String staffCode;
private String staffName;
// 删除时是否单向好友0否 1是
private String delIsSingle ;
}
......@@ -32,6 +32,11 @@ public class WechatWorkLostVO implements Serializable {
private Integer salesDeleteNum = 0;
/**
* 删除时菲单向的数量
*/
private Integer delIsSingleNum = 0;
/**
*
*/
private String bizDate;
......
package com.gic.haoban.manage.web.vo.wechatwork;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public class WechatWorkOverviewStoreGroupVO extends StoreGroupCommonVO implements Serializable {
/**
* 新增微信好友总数
*/
private Long newEntwchFdNumTotal;
/**
* 新增已注册微信好友数
*/
private Long newEntwchFdNumMbr;
/**
* 新增未注册微信好友数
*/
private Long newEntwchFdNumNonmbr;
/**
* 微信好友总数
*/
private Long entwchFdNumTotal;
/**
* 已注册微信好友数
*/
private Long entwchFdNumMbr;
/**
* 未注册微信好友数
*/
private Long entwchFdNumNonmbr;
}
package com.gic.haoban.manage.web.vo.wechatwork;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public class WechatWorkOverviewTrendVO implements Serializable {
/**
* 微信好友总数
*/
private Long newEntwchFdNumTotal;
/**
* 已注册微信好友数
*/
private Long newEntwchFdNumMbr;
/**
* 未注册微信好友数
*/
private Long newEntwchFdNumNonmbr;
private String bizDate;
}
package com.gic.haoban.manage.web.vo.wechatwork;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public class WechatWorkOverviewVO implements Serializable {
/**
* 微信好友总数
*/
private Long entwchFdNumTotal;
/**
* 已注册微信好友数
*/
private Long entwchFdNumMbr;
/**
* 未注册微信好友数
*/
private Long entwchFdNumNonmbr;
}
......@@ -3,6 +3,8 @@ package com.gic.haoban.manage.web.controller;
import com.alibaba.fastjson.JSON;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.DateUtil;
import com.gic.commons.util.GlobalVar;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.common.utils.CheckSmsCodeUtil;
import com.gic.haoban.common.utils.GooglePhoneNumberUtil;
......@@ -11,6 +13,7 @@ import com.gic.haoban.manage.api.response.SendSmsResponse;
import com.gic.haoban.manage.api.service.ValidationCodeApiService;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.redis.data.util.RedisUtil;
import com.task.allocation.util.MemCachedInstance;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -19,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@RestController
public class SendCodeController extends WebBaseController {
private static Logger logger = LoggerFactory.getLogger(SendCodeController.class);
......@@ -27,6 +32,8 @@ public class SendCodeController extends WebBaseController {
private ValidationCodeApiService validationCodeService;
@Autowired
private ClerkService clerkService ;
static MemCachedInstance memCachedInstance = MemCachedInstance.getInstance(
GlobalVar.getMemCachedIp(), GlobalVar.getMemCachedPort());
/**
* 验证码发送
......@@ -61,7 +68,10 @@ public class SendCodeController extends WebBaseController {
} else {
RedisUtil.setCache(cacheKey, true, 60L);
}
if (this.getVcodeTimes(phoneNumber) <= 0) {
logger.info("验证 达到上线");
return this.fail("验证码发送达到上限") ;
}
String smsCode = "";
if (CheckSmsCodeUtil.getCacheSmsCode(nationcode + "-" + phoneNumber, type) != null) {
smsCode = (String) CheckSmsCodeUtil.getCacheSmsCode(nationcode + "-" + phoneNumber, type);
......@@ -111,4 +121,23 @@ public class SendCodeController extends WebBaseController {
}
}
public static int getVcodeTimes(String phoneNumber) {
String key = phoneNumber
+ DateUtil.dateToStr(new Date(), DateUtil.FORMAT_DATE_8);
int times = 10;
Object res = memCachedInstance.getValue(key);
logger.info("好办验证码次数={}",res);
if (null == res) {
memCachedInstance.setValue(key, 10, 24 * 60 * 60 * 1000);
}
else {
times = Integer.parseInt(String.valueOf(res));
}
if (times > 0) {
memCachedInstance.setValue(key, (times - 1), 24 * 60 * 60 * 1000);
}
return times;
}
}
......@@ -2,6 +2,7 @@ package com.gic.haoban.manage.web.controller;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.service.AccountService;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.common.anno.IgnoreLogin;
import com.gic.haoban.common.utils.HaobanResponse;
......@@ -9,6 +10,7 @@ import com.gic.haoban.common.utils.UploadUtils;
import com.gic.haoban.manage.web.errCode.HaoBanErrCode;
import com.gic.thirdparty.api.service.QQCloudPicService;
import com.gic.thirdparty.cloudfile.CloudFileUtil;
import com.gic.thirdparty.cloudfile.CmeUtil;
import com.gic.thirdparty.cloudfile.enums.CloudFileBusinessOptEnum;
import com.gic.thirdparty.cloudfile.enums.CloudFileTypeEnum;
import com.gic.thirdparty.cloudfile.pojo.CloudFileInfo;
......@@ -17,6 +19,8 @@ import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
......@@ -30,10 +34,57 @@ import java.util.*;
public class UploadController extends WebBaseController {
private static org.apache.logging.log4j.Logger logger = LogManager.getLogger(UploadController.class);
@Autowired
private QQCloudPicService qqCloudPicService;
private AccountService accountService;
@Autowired
private EnterpriseService enterpriseService ;
/**
* 获取桶名称
* @param fileType 文件后缀 mp4、jpg....
* @param fileFlag 视频类型 3为cme临时资源 - 此字段保持原来业务
* @param tempFlag 是否临时文件,1是0否
* @return
*/
@RequestMapping("get-bucket")
@ResponseBody
public RestResponse<CloudFileInfo> getBucket(String fileType,String enterpriseId, @RequestParam(required = false)Integer fileFlag , String businessType , @RequestParam(defaultValue = "0") int tempFlag) {
CloudFileBusinessOptEnum businessOptEnum = null ;
// 天
Long timeOut = null ;
if(StringUtils.isBlank(businessType)) {
businessType = "material_content" ;
}
// 内容中心
if("material_content".equals(businessType)) {
//存储空间余额校验
if (!accountService.storageFeeCheck(enterpriseId)){
return RestResponse.failure("-1", "存储余额不足,暂不支持图片/视频上传,请充值");
}
businessOptEnum = CloudFileBusinessOptEnum.MATERIAL_CONTENT ;
}else if("haoban".equals(businessType)) {
// 好办
if(tempFlag==0) {
businessOptEnum = CloudFileBusinessOptEnum.HAOBAN_COMMON ;
}else {
businessOptEnum = CloudFileBusinessOptEnum.COMMON ;
timeOut = 7L ;
}
}
CloudFileTypeEnum cloudFileTypeEnum = CloudFileTypeEnum.getFileTypeByExtension(fileType);
CloudFileInfo cloudFileInfo = null;
//cme上传视频走 temp存储桶只存一天有效期
if (fileFlag != null && fileFlag == 3) {
cloudFileInfo = CloudFileUtil.getPreUploadTempFileInfo(fileType, cloudFileTypeEnum, CmeUtil.CME_TEMP_COS, CloudFileBusinessOptEnum.MATERIAL_CONTENT, 1L);
}else {
EnterpriseDTO enterpriseDTO = enterpriseService.getEnterpriseById(enterpriseId);
cloudFileInfo = CloudFileUtil.getPreUploadTempFileInfo(fileType, cloudFileTypeEnum, enterpriseDTO.getFactoryCode(), businessOptEnum,timeOut);
}
if (cloudFileInfo == null){
return RestResponse.failure("-1", "获取桶名称失败");
}
return RestResponse.successResult(cloudFileInfo);
}
@RequestMapping("upload-img")
@IgnoreLogin
......@@ -120,7 +171,7 @@ public class UploadController extends WebBaseController {
if(name.contains(".")) {
name = name.substring(name.lastIndexOf(".")+1) ;
}
CloudFileInfo uploadInfo = CloudFileUtil.uploadTempFile(file, name, type, factoryCode , CloudFileBusinessOptEnum.COMMON, 7*24L) ;
CloudFileInfo uploadInfo = CloudFileUtil.uploadTempFile(file, name, type, factoryCode , CloudFileBusinessOptEnum.COMMON, 7L) ;
if (uploadInfo != null) {
map.put("qcloudImageUrl", uploadInfo.getOrgFileUrl());
map.put("imageFiledCode", "imageFiledCode");
......
......@@ -20,6 +20,9 @@ import java.util.stream.Collectors;
import javax.validation.Valid;
import com.gic.enterprise.api.dto.custompage.CustomPageRenderDTO;
import com.gic.enterprise.api.enums.CustomPageTypeEnum;
import com.gic.enterprise.api.service.*;
import com.gic.haoban.manage.web.qo.StaffAddVO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -49,10 +52,6 @@ import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.dto.StoreSearchDTO;
import com.gic.enterprise.api.dto.enterprise.EnterpriseUsingStatusDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.enterprise.api.service.EnterpriseUseForbidService;
import com.gic.enterprise.api.service.StoreService;
import com.gic.enterprise.api.service.StoreWidgetService;
import com.gic.haoban.app.customer.service.api.service.CustomerApiService;
import com.gic.haoban.app.customer.service.api.service.DistributeApiService;
import com.gic.haoban.base.api.common.BasePageInfo;
......@@ -129,6 +128,8 @@ public class WxStaffController extends WebBaseController {
private PowerService powerService;
@Autowired
private EnterpriseUseForbidService enterpriseUseForbidService;
@Autowired
private CustomPageNewService customPageNewService ;
// 选择成员列表
@RequestMapping("/staff-list")
......@@ -317,9 +318,43 @@ public class WxStaffController extends WebBaseController {
}
auditSettingVO.setWxEnterpriseType(enterpriseBindInfo.getWxEnterpriseType());
auditSettingVO.setFreshFriendFlag(mainStore.getFreshFriendFlag());
JSONObject json = this.getMemberSignPage(storeDTO.getEnterpriseId()) ;
auditSettingVO.setShowMemberSign(null==json?0:1);
auditSettingVO.setShareMemberSignInfo(json);
return resultResponse(HaoBanErrCode.ERR_1, auditSettingVO);
}
/**
* 获取会员签到页分析配置
* @param enterpriseId
* @return
*/
@IgnoreLogin
@RequestMapping("/get-member-sign-share")
public RestResponse<Object> getMemberSingInfo(String enterpriseId) {
JSONObject json = this.getMemberSignPage(enterpriseId) ;
if(null != json) {
return RestResponse.successResult(json) ;
}
return RestResponse.failure("9999","请联系管理员先配置签到页") ;
}
private int showMemberSign(String enterpriseId) {
JSONObject dto = this.getMemberSignPage(enterpriseId) ;
if(null != dto) {
return 1 ;
}
return 0 ;
}
private JSONObject getMemberSignPage(String enterpriseId) {
CustomPageRenderDTO dto = this.customPageNewService.getPageRenderByPageType(CustomPageTypeEnum.PAGE_MEMBER_SIGN,enterpriseId) ;
if(null != dto && dto.getStatus()==1) {
JSONObject json = dto.getSetting().getJSONObject("pageConfig") ;
return json ;
}
return null ;
}
@IgnoreLogin
@RequestMapping("/get-operation-setting")
public HaobanResponse getOperatorSetting(String wxEnterpriseId, String enterpriseId) {
......@@ -1555,6 +1590,7 @@ public class WxStaffController extends WebBaseController {
vo.setEnterpriseImg(enterpriseDTO.getQcloudImageUrl());
list.add(vo);
}
this.integralAlias(list) ;
return RestResponse.successResult(list);
}
// 门店列表
......@@ -1653,9 +1689,24 @@ public class WxStaffController extends WebBaseController {
});
}
}
this.integralAlias(list) ;
return RestResponse.successResult(list);
}
private void integralAlias(List<StaffStoreVO> list) {
if(CollectionUtils.isNotEmpty(list)) {
for(StaffStoreVO vo : list) {
String enterpriseId = vo.getEnterpriseId() ;
String integralText = "淘气值" ;
if(org.apache.commons.lang.StringUtils.isBlank(integralText)) {
integralText = "积分";
}
vo.setIntegralTextAlias(integralText);
}
}
}
/**
* 会员关联数量
*/
......
......@@ -98,17 +98,25 @@ public class DataController {
List<String> deleteList = new ArrayList<>();
List<String> normalList = new ArrayList<>();
List<String> allList = new ArrayList<>();
List<ClerkListDTO> clerkList = clerkService.getClerkByStoreIdOfAllStatus(enterpriseId, storeId);
if (CollectionUtils.isNotEmpty(clerkList)) {
for (ClerkListDTO dto : clerkList) {
Integer status = dto.getStatus();
allList.add(dto.getClerkId());
if (status != null && status == 0) {
deleteList.add(dto.getClerkId());
} else {
normalList.add(dto.getClerkId());
boolean isClerk = jsonObject.containsKey("clerkId") && StringUtils.isNotBlank(jsonObject.getString("clerkId"));
if (!isClerk) {
List<ClerkListDTO> clerkList = clerkService.getClerkByStoreIdOfAllStatus(enterpriseId, storeId);
if (CollectionUtils.isNotEmpty(clerkList)) {
for (ClerkListDTO dto : clerkList) {
Integer status = dto.getStatus();
allList.add(dto.getClerkId());
if (status != null && status == 0) {
deleteList.add(dto.getClerkId());
} else {
normalList.add(dto.getClerkId());
}
}
}
} else {
allList.add(jsonObject.getString("clerkId"));
normalList.add(jsonObject.getString("clerkId"));
}
if (CollectionUtils.isEmpty(deleteList)) {
deleteList.add("no_delete_clerk_id");
......
......@@ -37,15 +37,22 @@ public class QywxOpenController {
public RestResponse<OpenStaffVO> getOpenStaff(String staffId , @RequestParam(defaultValue = "0") int authFlag) {
ServiceResponse<OpenStaffDTO> resp = this.openStaffApiService.getByStaffId(staffId) ;
if(!resp.isSuccess()) {
return RestResponse.successResult(null) ;
return RestResponse.failure("9999","数据查询失败");
}
OpenStaffVO vo = new OpenStaffVO() ;
OpenStaffDTO dto = resp.getResult();
String wxEnterpriseId = dto.getWxEnterpriseId() ;
String enterpriseId = dto.getEnterpriseId() ;
WxEnterpriseDTO en = this.wxEnterpriseApiService.getOne(wxEnterpriseId) ;
vo.setCorpName(en.getCorpName());
StaffDTO staffDTO = this.staffApiService.selectById(staffId) ;
vo.setStaffName(staffDTO.getStaffName());
vo.setStaffImage(staffDTO.getHeadImg());
if(dto.getStatusFlag()==1) {
if(authFlag==1) {
return RestResponse.failure("9999","无需授权,账号托管中");
//return RestResponse.failure("9999","无需授权,账号托管中");
vo.setStatusFlag(1);
return RestResponse.successResult(vo);
}
vo.setStatusFlag(1);
}else {
......@@ -61,13 +68,9 @@ public class QywxOpenController {
}
vo.setQrcode(codeResp.getResult().getQrCode1());
vo.setQrcodeData(codeResp.getResult().getQrcodeData());
vo.setStatusFlag(codeResp.getResult().getStatusFlag());
}
}
WxEnterpriseDTO en = this.wxEnterpriseApiService.getOne(wxEnterpriseId) ;
vo.setCorpName(en.getCorpName());
StaffDTO staffDTO = this.staffApiService.selectById(staffId) ;
vo.setStaffName(staffDTO.getStaffName());
vo.setStaffImage(staffDTO.getHeadImg());
return RestResponse.successResult(vo);
}
}
package com.gic.haoban.manage.web.vo;
import com.alibaba.fastjson.JSONObject;
import java.io.Serializable;
import java.util.Date;
......@@ -21,9 +23,29 @@ public class AuditSettingVO implements Serializable {
private int wxEnterpriseType;
private int memberOpenCardFlag;
private int freshFriendFlag;
// 是否显示会员签到
private int showMemberSign ;
private JSONObject shareMemberSignInfo ;
private static final long serialVersionUID = 1L;
public JSONObject getShareMemberSignInfo() {
return shareMemberSignInfo;
}
public void setShareMemberSignInfo(JSONObject shareMemberSignInfo) {
this.shareMemberSignInfo = shareMemberSignInfo;
}
public int getShowMemberSign() {
return showMemberSign;
}
public void setShowMemberSign(int showMemberSign) {
this.showMemberSign = showMemberSign;
}
public int getFreshFriendFlag() {
return freshFriendFlag;
}
......
......@@ -31,6 +31,16 @@ public class StaffStoreVO implements Serializable {
private Boolean enableHaoban;
private String storeCode;
// 积分别名
private String integralTextAlias ;
public String getIntegralTextAlias() {
return integralTextAlias;
}
public void setIntegralTextAlias(String integralTextAlias) {
this.integralTextAlias = integralTextAlias;
}
public Integer getMemberOpenCardFlag() {
return memberOpenCardFlag;
......
......@@ -68,6 +68,11 @@ public class ContentMaterialInfoVO implements Serializable {
private Integer downloadFlag;
/**
* 分享素材链接是否开启 1是0否
*/
private Integer shareLinkFlag;
/**
* 发布时间
*/
private Date publishTime;
......@@ -264,6 +269,14 @@ public class ContentMaterialInfoVO implements Serializable {
this.downloadFlag = downloadFlag;
}
public Integer getShareLinkFlag() {
return shareLinkFlag;
}
public void setShareLinkFlag(Integer shareLinkFlag) {
this.shareLinkFlag = shareLinkFlag;
}
public Date getPublishTime() {
return publishTime;
}
......
......@@ -14,6 +14,8 @@
<dubbo:protocol name="dubbo" port="30010"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.OpenStaffApiService" id="openStaffApiService" />
<dubbo:reference interface="com.gic.enterprise.api.service.CustomPageNewService" id="customPageNewService" />
<dubbo:reference interface="com.gic.haoban.manage.api.service.chat.GroupChatPlanApiService" id="groupChatPlanApiService" />
<dubbo:reference interface="com.gic.member.api.service.GradeService" id="gradeService" />
<dubbo:reference interface="com.gic.ecm.api.service.EcmPlanService" id="ecmPlanService" />
......
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