Commit faf3676f by 徐高华

Merge branch 'developer' into 'feature-haoban-role'

# Conflicts:
#   haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/impl/WelcomeServiceImpl.java
parents 2179eadb d73ff068
package com.gic.haoban.manage.api.dto;
import java.io.Serializable;
public class QwPendingIdDTO implements Serializable {
private static final long serialVersionUID = -7791318666042954957L;
private String externalUserId;
private String pendingId;
public String getExternalUserId() {
return externalUserId;
}
public String getPendingId() {
return pendingId;
}
public void setExternalUserId(String externalUserId) {
this.externalUserId = externalUserId;
}
public void setPendingId(String pendingId) {
this.pendingId = pendingId;
}
}
...@@ -100,6 +100,8 @@ public class StaffDTO implements Serializable { ...@@ -100,6 +100,8 @@ public class StaffDTO implements Serializable {
private String defaultGicEid; private String defaultGicEid;
private Integer addNum; private Integer addNum;
private Integer activeStatus; private Integer activeStatus;
private String enterpriseId;
private String storeId;
public String getDefaultGicEid() { public String getDefaultGicEid() {
return defaultGicEid; return defaultGicEid;
...@@ -382,4 +384,20 @@ public class StaffDTO implements Serializable { ...@@ -382,4 +384,20 @@ public class StaffDTO implements Serializable {
public void setActiveStatus(Integer activeStatus) { public void setActiveStatus(Integer activeStatus) {
this.activeStatus = activeStatus; this.activeStatus = activeStatus;
} }
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
} }
package com.gic.haoban.manage.api.service;
public interface BindApiService {
void clerkManagerTranfer(String departmentId,String fromClerkCode,String toStaffDepartmentRelatedId);
void clerkUnbind(String departmentId,String fromClerkCode,String toStaffId,String manager);
void clerkSingleUnbind(String fromClerkCode,String departmentId);
void staffBind(String departmentId,String fromClerkCode,String fromStaffDepartmentRelatedId);
}
...@@ -34,4 +34,17 @@ public interface HaobanTimerApiService { ...@@ -34,4 +34,17 @@ public interface HaobanTimerApiService {
*/ */
public ServiceResponse<Void> repairExternalUserId(String wxEnterpriseId) ; public ServiceResponse<Void> repairExternalUserId(String wxEnterpriseId) ;
/**
*
* @Title: repairStaffDepart
* @Description: 修复成员部门
* @author xugh
* @param wxEnterpriseId
* @return
* @throws
*/
public ServiceResponse<Void> repairStaffDepart(String params) ;
} }
...@@ -4,7 +4,6 @@ import com.gic.api.base.commons.Page; ...@@ -4,7 +4,6 @@ import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.BasePageInfo; import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.MaidianLogDTO; import com.gic.haoban.manage.api.dto.MaidianLogDTO;
import java.util.List;
public interface MaidianLogApiService { public interface MaidianLogApiService {
......
...@@ -59,8 +59,6 @@ public interface MemberUnionidRelatedApiService { ...@@ -59,8 +59,6 @@ public interface MemberUnionidRelatedApiService {
*/ */
List<MemberStoreDTO> listByExTernalUseridAndWxUserId(String externalUserid, String staffId, String storeId); List<MemberStoreDTO> listByExTernalUseridAndWxUserId(String externalUserid, String staffId, String storeId);
void cleanByCid(String cid);
/** /**
* 群发助手发送企业微信消息 * 群发助手发送企业微信消息
* *
...@@ -160,14 +158,6 @@ public interface MemberUnionidRelatedApiService { ...@@ -160,14 +158,6 @@ public interface MemberUnionidRelatedApiService {
String addExternal(ExternalUserDTO dto); String addExternal(ExternalUserDTO dto);
/** /**
* 添加企微好友关联关系表-需触达方式
*
* @param dto
* @return
*/
String addFriendExternal(ExternalUserDTO dto);
/**
* 获取客户详情-第三方 * 获取客户详情-第三方
* *
* @param wxEnterpriseId * @param wxEnterpriseId
...@@ -231,28 +221,6 @@ public interface MemberUnionidRelatedApiService { ...@@ -231,28 +221,6 @@ public interface MemberUnionidRelatedApiService {
/** /**
* 根据id查询
*
* @param memberUnionidRelatedId 成员unionid相关id
* @return {@link MemberUnionidRelatedDTO }
* @author mozhu
* @date 2022-03-11 17:02:45
*/
MemberUnionidRelatedDTO getById(String memberUnionidRelatedId);
/**
* 更新对外联系人id
*
* @param selfExternalUserid 自外部用户标识
* @param memberUnionidRelatedId 成员unionid相关id
* @author mozhu
* @date 2022-03-11 16:59:24
*/
void updateSelfExternalUseridById(String selfExternalUserid, String memberUnionidRelatedId);
/**
* 事件订阅test * 事件订阅test
* *
* @param param 参数 * @param param 参数
......
package com.gic.haoban.manage.api.service;
import java.util.List;
import java.util.Map;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.QwPendingIdDTO;
/**
*
* @ClassName: QwFriendApiService
* @Description: 企微好友
* @author xugh
* @date 2022年9月27日 上午10:09:14
*
*/
public interface QwFriendApiService {
/**
*
* @Title: pendingCheck
* @Description: 校验商户能否获取pending
* @author xugh
* @param enterpriseId
* @param unionid
* @param openid
* @param wxaOpenid
* @return
* @throws
*/
public ServiceResponse<Map<String,String>> pendingIdCheck(String enterpriseId, String unionid, String openid, String wxaUnionid,String wxaOpenid);
public ServiceResponse<Map<String,String>> pendingIdCheck(String enterpriseId);
/**
*
* @Title: getPendingIdByUnionid
* @Description: 通过uniond获取好友id/pendingid
* @author xugh
* @param enterpriseId
* @param unionid
* @param openid 小程序或者服务号openid
* @return
* @throws
*/
public ServiceResponse<QwPendingIdDTO> getPendingIdByUnionid(String enterpriseId, String unionid, String openid);
/**
*
* @Title: getPendingIdByExternalid
* @Description: 通过好友id查询pendingid
* @author xugh
* @param enterpriseId
* @param externalUserId
* @return
* @throws
*/
public ServiceResponse<QwPendingIdDTO> getPendingIdByExternalid(String enterpriseId, String externalUserId);
/**
*
* @Title: getPendingIdByExternalid
* @Description: 通过好友id查询pendingid
* @author xugh
* @param enterpriseId
* @param externalUserId
* @return
* @throws
*/
public ServiceResponse<List<QwPendingIdDTO>> listPendingIdByExternalid(String enterpriseId,
List<String> externalUserIdList);
/**
*
* @Title: getCallTimes
* @Description: 获取调用次数
* @author xugh
* @param wxEnterpriseId
* @return
* @throws
*/
public ServiceResponse<Object> getCallTimes(String wxEnterpriseId) ;
}
...@@ -279,4 +279,15 @@ public interface StaffApiService { ...@@ -279,4 +279,15 @@ public interface StaffApiService {
*/ */
boolean isManager(String clerkId); boolean isManager(String clerkId);
/**
* 绑定的员工列表
*
* @param storeIds 存储id
* @param wxEnterpriseId wx企业标识
* @return {@link List }<{@link StaffDTO }>
* @author mozhu
* @date 2022-10-21 00:25:46
*/
List<StaffDTO> listBindStoreIds(List<String> storeIds,String wxEnterpriseId);
} }
...@@ -58,6 +58,12 @@ ...@@ -58,6 +58,12 @@
<artifactId>haoban-config</artifactId> <artifactId>haoban-config</artifactId>
<version>${haoban-config}</version> <version>${haoban-config}</version>
</dependency> </dependency>
<dependency>
<groupId>com.gic</groupId>
<artifactId>log-record-sdk</artifactId>
<version>${log-record-sdk}</version>
</dependency>
<dependency> <dependency>
<groupId>com.vdurmont</groupId> <groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId> <artifactId>emoji-java</artifactId>
...@@ -162,11 +168,6 @@ ...@@ -162,11 +168,6 @@
<artifactId>gic-enterprise-operation-api</artifactId> <artifactId>gic-enterprise-operation-api</artifactId>
<version>${gic-enterprise-operation-api}</version> <version>${gic-enterprise-operation-api}</version>
</dependency> </dependency>
<dependency>
<groupId>com.gic</groupId>
<artifactId>log-record-sdk</artifactId>
<version>${log-record-sdk}</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -9,20 +9,6 @@ public interface MemberUnionidRelatedMapper { ...@@ -9,20 +9,6 @@ public interface MemberUnionidRelatedMapper {
int insert(MemberUnionidRelated record); int insert(MemberUnionidRelated record);
MemberUnionidRelated selectByPrimaryKey(String memberUnionidRelatedId);
int updateByPrimaryKeySelective(MemberUnionidRelated record);
int cleanByCid(@Param("cid") String cid);
MemberUnionidRelated getByUnionId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffId") String staffId, @Param("unionid") String unionid);
void deleteByUnionidAndUserId(@Param("externalUserid") String externalUserid, @Param("staffId") String staffId);
void delMemberUnionidRelatedBatch(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("externalUserids") List<String> externalUserid, @Param("staffId") String staffId);
void cleanStaffRelated(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("staffIds") List<String> staffIds);
/** /**
* 根据应用内的外部联系人获取信息 * 根据应用内的外部联系人获取信息
* *
...@@ -32,9 +18,6 @@ public interface MemberUnionidRelatedMapper { ...@@ -32,9 +18,6 @@ public interface MemberUnionidRelatedMapper {
* @return * @return
*/ */
MemberUnionidRelated getBySelfExternalUserId(@Param("staffId") String staffId, @Param("wxEnterpriseId") String wxEnterpriseId, @Param("selfExternalUserId") String selfExternalUserId); MemberUnionidRelated getBySelfExternalUserId(@Param("staffId") String staffId, @Param("wxEnterpriseId") String wxEnterpriseId, @Param("selfExternalUserId") String selfExternalUserId);
List<MemberUnionidRelated> listBySelfExternalUserId(@Param("staffId") String staffId, @Param("wxEnterpriseId") String wxEnterpriseId, @Param("selfExternalUserId") String selfExternalUserId);
List<MemberUnionidRelated> listByWxEnterpriseIdAndExternalUserId(@Param("wxEnterpriseId") String wxEnterpriseId , @Param("list")List<String> externalUserIdList); List<MemberUnionidRelated> listByWxEnterpriseIdAndExternalUserId(@Param("wxEnterpriseId") String wxEnterpriseId , @Param("list")List<String> externalUserIdList);
......
package com.gic.haoban.manage.service.dao.mapper; package com.gic.haoban.manage.service.dao.mapper;
import com.gic.haoban.manage.service.entity.TabHaobanStaffDepartmentRelated; import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import com.gic.haoban.manage.service.entity.TabHaobanStaffDepartmentRelated;
public interface StaffDepartmentRelatedMapper { public interface StaffDepartmentRelatedMapper {
...@@ -39,4 +41,6 @@ public interface StaffDepartmentRelatedMapper { ...@@ -39,4 +41,6 @@ public interface StaffDepartmentRelatedMapper {
@Param("wxEnterpriseId") String wxEnterpriseId, @Param("wxEnterpriseId") String wxEnterpriseId,
@Param("staffId") String staffId @Param("staffId") String staffId
); );
List<String> listNoDepartStaff(@Param("wxEnterpriseId")String wxEnterpriseId , @Param("addDate")Date addDate) ;
} }
\ No newline at end of file
package com.gic.haoban.manage.service.dao.mapper; package com.gic.haoban.manage.service.dao.mapper;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.service.entity.TabHaobanStaff; import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -133,4 +134,16 @@ public interface StaffMapper { ...@@ -133,4 +134,16 @@ public interface StaffMapper {
* @date 2022-07-25 16:36:07 * @date 2022-07-25 16:36:07
*/ */
int resetAddNum(); int resetAddNum();
/**
* 绑定的员工列表(暂时取100条,后续和前端一起改为分页接口)
*
* @param storeIds 存储id
* @param wxEnterpriseId wx企业标识
* @return {@link List }<{@link StaffDTO }>
* @author mozhu
* @date 2022-10-21 00:26:47
*/
List<StaffDTO> listBindStoreIds(@Param("storeIds") List<String> storeIds,
@Param("wxEnterpriseId") String wxEnterpriseId);
} }
\ No newline at end of file
...@@ -20,7 +20,7 @@ public interface TabHaobanExternalClerkRelatedMapper { ...@@ -20,7 +20,7 @@ public interface TabHaobanExternalClerkRelatedMapper {
TabHaobanExternalClerkRelated selectByClerkIdAndExternalUserId(@Param("clerkId") String clerkId, TabHaobanExternalClerkRelated selectByClerkIdAndExternalUserId(@Param("clerkId") String clerkId,
@Param("externalUserId") String externalUserId); @Param("externalUserId") String externalUserId);
int delByUserIdAndExternalUserId(TabHaobanExternalClerkRelated record); int delByUserIdAndExternalUserId(@Param("externalUserId") String externalUserId , @Param("staffId") String staffId);
void delByUserIdAndExternalUserIdBatch(@Param("staffId") String staffId, void delByUserIdAndExternalUserIdBatch(@Param("staffId") String staffId,
@Param("wxEnterpriseId") String wxEnterpriseId, @Param("wxEnterpriseId") String wxEnterpriseId,
...@@ -380,5 +380,4 @@ public interface TabHaobanExternalClerkRelatedMapper { ...@@ -380,5 +380,4 @@ public interface TabHaobanExternalClerkRelatedMapper {
void updateClerkInfo(@Param("staffId")String staffId, @Param("oldClerkId")String oldClerkId, @Param("newClerkId")String newClerkId, @Param("storeId")String storeId); void updateClerkInfo(@Param("staffId")String staffId, @Param("oldClerkId")String oldClerkId, @Param("newClerkId")String newClerkId, @Param("storeId")String storeId);
} }
\ No newline at end of file
...@@ -38,16 +38,6 @@ public interface WxEnterpriseMapper { ...@@ -38,16 +38,6 @@ public interface WxEnterpriseMapper {
TabHaobanWxEnterprise getEnterpriseBycorpId(@Param("corpId") String corpId, @Param("statusFlag") Integer statusFlag); TabHaobanWxEnterprise getEnterpriseBycorpId(@Param("corpId") String corpId, @Param("statusFlag") Integer statusFlag);
/** /**
* 获取公司by企业名称
*
* @param corpName 公司名称
* @return {@link TabHaobanWxEnterprise }
* @author mozhu
* @date 2021-12-20 20:09:52
*/
TabHaobanWxEnterprise getEnterpriseByCorpName(@Param("corpName") String corpName);
/**
* 更新是否转化外部联系人 * 更新是否转化外部联系人
* *
* @param externalFlag 外部标志 * @param externalFlag 外部标志
......
...@@ -8,8 +8,6 @@ import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated; ...@@ -8,8 +8,6 @@ import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated;
public interface WxEnterpriseRelatedMapper { public interface WxEnterpriseRelatedMapper {
int deleteByPrimaryKey(String wxEnterpriseRelatedId);
int deleteByEnterpriseId(String enterpriseId) ; int deleteByEnterpriseId(String enterpriseId) ;
int insertSelective(TabHaobanWxEnterpriseRelated record); int insertSelective(TabHaobanWxEnterpriseRelated record);
......
...@@ -43,6 +43,15 @@ public class TabHaobanExternalClerkRelated implements Serializable { ...@@ -43,6 +43,15 @@ public class TabHaobanExternalClerkRelated implements Serializable {
private Date createTime; private Date createTime;
private Date updateTime; private Date updateTime;
private String selfExternalUserid;
public String getSelfExternalUserid() {
return selfExternalUserid;
}
public void setSelfExternalUserid(String selfExternalUserid) {
this.selfExternalUserid = selfExternalUserid;
}
public String getHeadUrl() { public String getHeadUrl() {
return headUrl; return headUrl;
......
...@@ -8,8 +8,11 @@ public enum HaoBanErrCode { ...@@ -8,8 +8,11 @@ public enum HaoBanErrCode {
ERR_0001("10100001", "参数没有传"), ERR_0001("10100001", "参数没有传"),
ERR_10012("10012","企业微信不存在"), ERR_10012("10012","企业微信不存在"),
ERR_OTHER("9999","业务异常"), ERR_OTHER("9999","业务异常"),
ERR_100033("100033", "活码分组已经被关联,不可删除"),
ERR_100033("100033", "活码分组已经被关联,不可删除") ERR_2000("2000", "企微接口调用次数限制-月"),
ERR_2001("2001", "企微接口调用次数限制-天"),
ERR_2002("2002", "企微接口调用次数限制-小时"),
ERR_2010("2010", "pending接口调用限制")
; ;
private String code; private String code;
......
package com.gic.haoban.manage.service.pojo.bo;
public class QwLimitTimesBO {
private int month;
private int day;
private int hour;
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
public int getHour() {
return hour;
}
public void setMonth(int month) {
this.month = month;
}
public void setDay(int day) {
this.day = day;
}
public void setHour(int hour) {
this.hour = hour;
}
}
package com.gic.haoban.manage.service.pojo.bo;
import java.io.Serializable;
public class WxEnterpriseRelationBO implements Serializable {
private static final long serialVersionUID = 4140789670421435421L;
private String wxEnterpriseRelatedId;
private String wxEnterpriseId;
private String enterpriseId;
private int wxEnterpriseType;
private int memberOpenCardFlag;
public String getWxEnterpriseRelatedId() {
return wxEnterpriseRelatedId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
}
public int getWxEnterpriseType() {
return wxEnterpriseType;
}
public int getMemberOpenCardFlag() {
return memberOpenCardFlag;
}
public void setWxEnterpriseRelatedId(String wxEnterpriseRelatedId) {
this.wxEnterpriseRelatedId = wxEnterpriseRelatedId;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
}
public void setWxEnterpriseType(int wxEnterpriseType) {
this.wxEnterpriseType = wxEnterpriseType;
}
public void setMemberOpenCardFlag(int memberOpenCardFlag) {
this.memberOpenCardFlag = memberOpenCardFlag;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
}
...@@ -15,7 +15,7 @@ public interface ExternalClerkRelatedService { ...@@ -15,7 +15,7 @@ public interface ExternalClerkRelatedService {
* 删除好友 * 删除好友
* @param dto * @param dto
*/ */
void delByUserIdAndExternalUserId(MemberUnionidRelatedDTO dto , String wxUserId); void delByUserIdAndExternalUserId(MemberUnionidRelatedDTO dto);
/** /**
* 删除会员与导购的关联关系 * 删除会员与导购的关联关系
......
package com.gic.haoban.manage.service.service; package com.gic.haoban.manage.service.service;
import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO; import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
import com.gic.haoban.manage.service.entity.MemberUnionidRelated;
import com.github.pagehelper.PageInfo;
import java.util.List;
public interface MemberUnionRelatedService { public interface MemberUnionRelatedService {
MemberUnionidRelatedDTO getByWxUserIdAndUnionId(String wxEnterpriseId, String staffId, String unionid);
String addMemberUnionidRelated(MemberUnionidRelatedDTO dto); String addMemberUnionidRelated(MemberUnionidRelatedDTO dto);
void delMemberUnionidRelated(MemberUnionidRelatedDTO dto , String staffId);
/**
* 删除外部联系人关系
*
* @param wxEnterpriseId
* @param wxUserId
* @param externalUserids
*/
void delMemberUnionidRelatedBatch(String wxEnterpriseId, String staffId, List<String> externalUserids);
void update(MemberUnionidRelatedDTO exsitDTO);
void clean(String cid);
void cleanStaffRelated(String wxEnterpriseId, List<String> staffIds);
/** /**
* 根据应用内的外部联系人id 获取信息 * 根据应用内的外部联系人id 获取信息
*
* @param wxUserId
* @param wxEnterpriseId
* @param selfExternalUserId
* @return
*/
MemberUnionidRelatedDTO getByWxUserIdAndSelfExternalUserId(String staffId, String wxEnterpriseId, String selfExternalUserId);
/**
* 根据应用内的外部联系人id 获取信息
*
* @param wxEnterpriseId wx企业标识
* @param selfExternalUserId 自外部的用户id
* @return {@link MemberUnionidRelatedDTO }
* @author mozhu
* @date 2021-12-23 22:35:47
*/ */
MemberUnionidRelatedDTO getBySelfExternalUserId(String wxEnterpriseId, String selfExternalUserId); MemberUnionidRelatedDTO getBySelfExternalUserId(String wxEnterpriseId, String selfExternalUserId);
/**
* 根据应用内的外部联系人id 获取信息
*
* @param wxUserId
* @param wxEnterpriseId
* @param selfExternalUserId
* @return
*/
List<MemberUnionidRelatedDTO> listBySelfExternalUserId(String staffId, String wxEnterpriseId, String selfExternalUserId);
} }
package com.gic.haoban.manage.service.service; package com.gic.haoban.manage.service.service;
import com.gic.haoban.manage.api.dto.StaffDepartmentRelatedDTO; import com.gic.haoban.manage.api.dto.StaffDepartmentRelatedDTO;
import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.TabHaobanStaffDepartmentRelated; import com.gic.haoban.manage.service.entity.TabHaobanStaffDepartmentRelated;
import java.util.List; import java.util.List;
...@@ -32,5 +33,17 @@ public interface StaffDepartmentRelatedService { ...@@ -32,5 +33,17 @@ public interface StaffDepartmentRelatedService {
public int cleanStaffDepartment(String wxEnterpriseId,List<String> staffIds); public int cleanStaffDepartment(String wxEnterpriseId,List<String> staffIds);
public int update(TabHaobanStaffDepartmentRelated tab); public int update(TabHaobanStaffDepartmentRelated tab);
/**
*
* @Title: repairAllStaffDepart
* @Description: 定时修复成员部门
* @author xugh
* @param params
* @throws
*/
public void repairAllStaffDepart(String params) ;
public void repairStaffDepart(String staffId) ;
public void staffDepartChange(TabHaobanStaff staff, String wxEnterpriseId, Integer[] departmentIds) ;
} }
package com.gic.haoban.manage.service.service; package com.gic.haoban.manage.service.service;
import java.util.List;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise; import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated; import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated;
import com.gic.haoban.manage.service.pojo.bo.WxEnterpriseRelationBO;
import java.util.List;
public interface WxEnterpriseRelatedService { public interface WxEnterpriseRelatedService {
...@@ -37,4 +38,8 @@ public interface WxEnterpriseRelatedService { ...@@ -37,4 +38,8 @@ public interface WxEnterpriseRelatedService {
void setClerkEdit(String id, int clerkEditFlag); void setClerkEdit(String id, int clerkEditFlag);
int getRelationCount(String enterpriseId) ; int getRelationCount(String enterpriseId) ;
public WxEnterpriseRelationBO getHeadEnterprise(String enterpriseId) ;
public boolean getAddByWelcomeFlag(TabHaobanWxEnterpriseRelated wxEnterpriseRelated , String unionid , boolean isHmUnionid) ;
} }
...@@ -38,16 +38,6 @@ public interface WxEnterpriseService { ...@@ -38,16 +38,6 @@ public interface WxEnterpriseService {
int unbind(String wxEnterpriseId); int unbind(String wxEnterpriseId);
/** /**
* 得到企业bycorp名称
*
* @param corpName 公司名称
* @return {@link TabHaobanWxEnterprise }
* @author mozhu
* @date 2021-12-20 20:09:21
*/
TabHaobanWxEnterprise getEnterpriseByCorpName(String corpName);
/**
* 所有企业微信 * 所有企业微信
* *
* @return * @return
......
...@@ -65,10 +65,6 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -65,10 +65,6 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
@Autowired @Autowired
private MemberApiService memberApiService; private MemberApiService memberApiService;
@Autowired @Autowired
private StaffMapper staffMapper;
@Autowired
private TabHaobanStaffClerkRelationMapper staffClerkRelationMapper;
@Autowired
private WxUserAddLogService wxUserAddLogService; private WxUserAddLogService wxUserAddLogService;
@Autowired @Autowired
private StoreService storeService; private StoreService storeService;
...@@ -105,34 +101,22 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -105,34 +101,22 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
} }
@Override @Override
public void delByUserIdAndExternalUserId(MemberUnionidRelatedDTO dto, String wxUserId) { public void delByUserIdAndExternalUserId(MemberUnionidRelatedDTO dto) {
int count = mapper.delByUserIdAndExternalUserId(EntityUtil.changeEntityByJSON(TabHaobanExternalClerkRelated.class, dto));
if (count <= 0) {
logger.error("无需删除的好友数据:{}", JSON.toJSONString(dto));
return;
}
String staffId = dto.getStaffId(); String staffId = dto.getStaffId();
String externalUserid = dto.getExternalUserid(); String externalUserid = dto.getExternalUserid();
List<TabHaobanExternalClerkRelated> tabHaobanExternalClerkRelatedList = mapper.listByExTernalUseridAndWxUserId(externalUserid, staffId, 2); int count = mapper.delByUserIdAndExternalUserId(externalUserid,staffId);
if (CollectionUtils.isEmpty(tabHaobanExternalClerkRelatedList)) { if (count <= 0) {
logger.info("无解除的好友关系:externalUserid:{},wxUserId:{}", externalUserid, wxUserId); logger.error("无需删除的好友数据:{}", JSON.toJSONString(dto));
return;
}
TabHaobanExternalClerkRelated related = tabHaobanExternalClerkRelatedList.get(0);
String wxEnterpriseId = related.getWxEnterpriseId();
TabHaobanStaff tabHaobanStaff = staffMapper.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
if (null == tabHaobanStaff) {
logger.error("找不到员工:wxUserId:{}", wxUserId);
return; return;
} }
String wxEnterpriseId = dto.getWxEnterpriseId() ;
staffId = tabHaobanStaff.getStaffId(); List<TabHaobanExternalClerkRelated> deleteRelatedList = mapper.listByExTernalUseridAndWxUserId(externalUserid, staffId, 2);
List<TabHaobanStaffClerkRelation> tabHaobanStaffClerkRelations = staffClerkRelationMapper.lisByStaffId(wxEnterpriseId, staffId, null); if (CollectionUtils.isEmpty(deleteRelatedList)) {
if (CollectionUtils.isEmpty(tabHaobanStaffClerkRelations)) { logger.info("无解除的好友关系:externalUserid:{},staffId:{}", externalUserid,staffId);
logger.error("找不到员工导购关联关系:staffId:{},wxEnterpriseId:{}", staffId, wxEnterpriseId);
return; return;
} }
String enterpriseId = tabHaobanStaffClerkRelations.get(0).getEnterpriseId(); TabHaobanExternalClerkRelated related = deleteRelatedList.get(0);
String enterpriseId = related.getEnterpriseId() ;
//该企微该会员所有关联关系解除后通知会员 //该企微该会员所有关联关系解除后通知会员
List<TabHaobanExternalClerkRelated> list = mapper.listByExternalUseridAndWxEnterpriseId(dto.getExternalUserid(), wxEnterpriseId, Arrays.asList("1", "3", "4")); List<TabHaobanExternalClerkRelated> list = mapper.listByExternalUseridAndWxEnterpriseId(dto.getExternalUserid(), wxEnterpriseId, Arrays.asList("1", "3", "4"));
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
...@@ -146,14 +130,12 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -146,14 +130,12 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
} }
} else { } else {
//删除后 每次回调会员 //删除后 每次回调会员
List<TabHaobanExternalClerkRelated> relatedList = mapper.listByExTernalUseridAndWxUserId(dto.getExternalUserid(), wxUserId, 2); for (TabHaobanExternalClerkRelated externalClerkRelated : deleteRelatedList) {
for (TabHaobanExternalClerkRelated externalClerkRelated : relatedList) {
String memberId = externalClerkRelated.getMemberId(); String memberId = externalClerkRelated.getMemberId();
logger.info("通知会员 删除会员后更新为非企微好友时间 memberId:{}", memberId); logger.info("通知会员 删除会员后更新为非企微好友时间 memberId:{}", memberId);
memberApiService.updateMemberQywxEveryOccasion(enterpriseId, memberId, 1, new Date()); memberApiService.updateMemberQywxEveryOccasion(enterpriseId, memberId, 1, new Date());
} }
} }
//添加日志 //添加日志
WxUserAddLogQDTO wxUserAddLogQDTO = new WxUserAddLogQDTO(); WxUserAddLogQDTO wxUserAddLogQDTO = new WxUserAddLogQDTO();
wxUserAddLogQDTO.setWxEnterpriseId(wxEnterpriseId); wxUserAddLogQDTO.setWxEnterpriseId(wxEnterpriseId);
...@@ -165,7 +147,6 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -165,7 +147,6 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
wxUserAddLogQDTO.setStaffId(related.getStaffId()); wxUserAddLogQDTO.setStaffId(related.getStaffId());
wxUserAddLogQDTO.setClerkId(related.getClerkId()); wxUserAddLogQDTO.setClerkId(related.getClerkId());
wxUserAddLogService.save(wxUserAddLogQDTO); wxUserAddLogService.save(wxUserAddLogQDTO);
//定制 //定制
addDelFriendEvent(related.getUnionid(), related.getClerkId(), wxEnterpriseId, enterpriseId, related.getMemberId(), related.getStoreId(), 0); addDelFriendEvent(related.getUnionid(), related.getClerkId(), wxEnterpriseId, enterpriseId, related.getMemberId(), related.getStoreId(), 0);
} }
......
package com.gic.haoban.manage.service.service.impl; package com.gic.haoban.manage.service.service.impl;
import java.util.Date; import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.gic.commons.util.EntityUtil; import com.gic.commons.util.EntityUtil;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.common.utils.StringUtil; import com.gic.haoban.common.utils.StringUtil;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO; import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
import com.gic.haoban.manage.service.dao.mapper.MemberUnionidRelatedMapper; import com.gic.haoban.manage.service.dao.mapper.MemberUnionidRelatedMapper;
import com.gic.haoban.manage.service.entity.MemberUnionidRelated; import com.gic.haoban.manage.service.entity.MemberUnionidRelated;
import com.gic.haoban.manage.service.service.MemberUnionRelatedService; import com.gic.haoban.manage.service.service.MemberUnionRelatedService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@Service @Service
public class MemberUnionRelatedServiceImpl implements MemberUnionRelatedService { public class MemberUnionRelatedServiceImpl implements MemberUnionRelatedService {
...@@ -23,64 +18,29 @@ public class MemberUnionRelatedServiceImpl implements MemberUnionRelatedService ...@@ -23,64 +18,29 @@ public class MemberUnionRelatedServiceImpl implements MemberUnionRelatedService
private MemberUnionidRelatedMapper mapper; private MemberUnionidRelatedMapper mapper;
@Override @Override
public MemberUnionidRelatedDTO getByWxUserIdAndUnionId(String wxEnterpriseId, String staffId, String unionid) {
return EntityUtil.changeEntityByJSON(MemberUnionidRelatedDTO.class, mapper.getByUnionId(wxEnterpriseId, staffId, unionid));
}
@Override
public String addMemberUnionidRelated(MemberUnionidRelatedDTO dto) { public String addMemberUnionidRelated(MemberUnionidRelatedDTO dto) {
String wxEnterpriseId = dto.getWxEnterpriseId() ;
String staffId = dto.getStaffId() ;
String selfExternalUserId = dto.getSelfExternalUserid() ;
MemberUnionidRelated oldDTO = this.mapper.getBySelfExternalUserId(staffId, wxEnterpriseId, selfExternalUserId) ;
if(null != oldDTO) {
return oldDTO.getMemberUnionidRelatedId() ;
}
dto.setStatusFlag(1); dto.setStatusFlag(1);
dto.setCreateTime(new Date()); dto.setCreateTime(new Date());
dto.setUpdateTime(new Date()); dto.setUpdateTime(new Date());
dto.setMemberUnionidRelatedId(StringUtil.randomUUID()); dto.setMemberUnionidRelatedId(StringUtil.randomUUID());
String unionid = dto.getUnionid() ;
// unionid不保存,但需要传递
dto.setUnionid(null);
mapper.insert(EntityUtil.changeEntityByJSON(MemberUnionidRelated.class, dto)); mapper.insert(EntityUtil.changeEntityByJSON(MemberUnionidRelated.class, dto));
dto.setUnionid(unionid);
return dto.getMemberUnionidRelatedId(); return dto.getMemberUnionidRelatedId();
} }
@Override @Override
public void delMemberUnionidRelated(MemberUnionidRelatedDTO dto , String staffId) {
mapper.deleteByUnionidAndUserId(dto.getExternalUserid(),staffId);
}
@Override
public void delMemberUnionidRelatedBatch(String wxEnterpriseId, String staffId, List<String> externalUserids) {
mapper.delMemberUnionidRelatedBatch(wxEnterpriseId, externalUserids, staffId);
}
@Override
public void update(MemberUnionidRelatedDTO exsitDTO) {
exsitDTO.setUpdateTime(new Date());
mapper.updateByPrimaryKeySelective(EntityUtil.changeEntityByJSON(MemberUnionidRelated.class, exsitDTO));
}
@Override
public void clean(String cid) {
mapper.cleanByCid(cid);
}
@Override
public void cleanStaffRelated(String wxEnterpriseId, List<String> staffIds) {
if(staffIds == null || staffIds.isEmpty()){
return;
}
mapper.cleanStaffRelated(wxEnterpriseId,staffIds);
}
@Override
public MemberUnionidRelatedDTO getByWxUserIdAndSelfExternalUserId(String staffId, String wxEnterpriseId, String selfExternalUserId) {
MemberUnionidRelated unionidRelated = mapper.getBySelfExternalUserId(staffId,wxEnterpriseId, selfExternalUserId);
return EntityUtil.changeEntityNew(MemberUnionidRelatedDTO.class, unionidRelated);
}
@Override
public MemberUnionidRelatedDTO getBySelfExternalUserId(String wxEnterpriseId, String selfExternalUserId) { public MemberUnionidRelatedDTO getBySelfExternalUserId(String wxEnterpriseId, String selfExternalUserId) {
MemberUnionidRelated unionidRelated = mapper.getBySelfExternalUserId(null,wxEnterpriseId, selfExternalUserId); MemberUnionidRelated unionidRelated = mapper.getBySelfExternalUserId(null,wxEnterpriseId, selfExternalUserId);
return EntityUtil.changeEntityNew(MemberUnionidRelatedDTO.class, unionidRelated); return EntityUtil.changeEntityNew(MemberUnionidRelatedDTO.class, unionidRelated);
} }
@Override
public List<MemberUnionidRelatedDTO> listBySelfExternalUserId(String staffId, String wxEnterpriseId, String selfExternalUserId) {
List<MemberUnionidRelated> retList = mapper.listBySelfExternalUserId(staffId, wxEnterpriseId, selfExternalUserId);
return EntityUtil.changeEntityListNew(MemberUnionidRelatedDTO.class, retList);
}
} }
package com.gic.haoban.manage.service.service.impl; package com.gic.haoban.manage.service.service.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.DateUtil;
import com.gic.commons.util.EntityUtil; import com.gic.commons.util.EntityUtil;
import com.gic.haoban.common.utils.DingUtils;
import com.gic.haoban.common.utils.StringUtil; import com.gic.haoban.common.utils.StringUtil;
import com.gic.haoban.manage.api.dto.DepartmentDTO;
import com.gic.haoban.manage.api.dto.SecretSettingDTO;
import com.gic.haoban.manage.api.dto.StaffDepartmentRelatedDTO; import com.gic.haoban.manage.api.dto.StaffDepartmentRelatedDTO;
import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO;
import com.gic.haoban.manage.api.enums.SecretTypeEnum;
import com.gic.haoban.manage.service.dao.mapper.StaffDepartmentRelatedMapper; import com.gic.haoban.manage.service.dao.mapper.StaffDepartmentRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.StaffMapper;
import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.TabHaobanStaffDepartmentRelated; import com.gic.haoban.manage.service.entity.TabHaobanStaffDepartmentRelated;
import com.gic.haoban.manage.service.service.DepartmentService;
import com.gic.haoban.manage.service.service.SecretSettingService;
import com.gic.haoban.manage.service.service.StaffDepartmentRelatedService; import com.gic.haoban.manage.service.service.StaffDepartmentRelatedService;
import org.springframework.beans.factory.annotation.Autowired; import com.gic.haoban.manage.service.service.WxEnterpriseService;
import org.springframework.stereotype.Service; import com.gic.wechat.api.dto.qywx.UserDTO;
import com.gic.wechat.api.service.qywx.QywxUserApiService;
import java.util.Date; import com.google.common.collect.Sets;
import java.util.List;
@Service @Service
public class StaffDepartmentRelatedServiceImpl implements StaffDepartmentRelatedService { public class StaffDepartmentRelatedServiceImpl implements StaffDepartmentRelatedService {
private static final Logger logger = LogManager.getLogger(StaffDepartmentRelatedService.class);
@Autowired @Autowired
private StaffDepartmentRelatedMapper mapper; private StaffDepartmentRelatedMapper mapper;
@Autowired
private StaffMapper staffMapper ;
@Autowired
private SecretSettingService secretSettingService ;
@Autowired
private WxEnterpriseService wxEnterpriseService ;
@Autowired
private QywxUserApiService qywxUserApiService ;
@Autowired
private DepartmentService departmentService ;
@Override @Override
public List<TabHaobanStaffDepartmentRelated> listByDepartmentId(String departmentId) { public List<TabHaobanStaffDepartmentRelated> listByDepartmentId(String departmentId) {
...@@ -78,5 +115,116 @@ public class StaffDepartmentRelatedServiceImpl implements StaffDepartmentRelated ...@@ -78,5 +115,116 @@ public class StaffDepartmentRelatedServiceImpl implements StaffDepartmentRelated
public int update(TabHaobanStaffDepartmentRelated tab) { public int update(TabHaobanStaffDepartmentRelated tab) {
return mapper.updateByPrimaryKeySelective(tab); return mapper.updateByPrimaryKeySelective(tab);
} }
@Override
public void repairAllStaffDepart(String params) {
logger.info("修复无部门成员={}",params);
int addDay = 0 ;
String wxEnterpriseId = null ;
if(params.contains("#")) {
addDay = Integer.parseInt(params.split("#")[0]) ;
wxEnterpriseId = params.split("#")[1] ;
}else {
addDay = Integer.parseInt(params) ;
}
Date addDate = DateUtil.addDay(DateUtil.getStartTimeOfDay(),-addDay) ;
List<String> list = this.mapper.listNoDepartStaff(wxEnterpriseId, addDate) ;
if(CollectionUtils.isNotEmpty(list)) {
logger.info("修复成员部门,成员数={}",list.size());
DingUtils.send("修复无部门成员消息,数量="+list.size(), false);
for(String staffId : list) {
this.repairStaffDepart(staffId);
}
}
logger.info("修复成员部门完成={}",params);
}
@Override
public void repairStaffDepart(String staffId) {
TabHaobanStaff staff = this.staffMapper.selectByPrimaryKey(staffId) ;
String wxEnterpriseId = staff.getWxEnterpriseId() ;
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
if(null == qwDTO) {
return ;
}
String wxUserId = staff.getWxUserId() ;
if(qwDTO.needOpenUserIdDk()) {
wxUserId = staff.getWxOpenUseId() ;
}
SecretSettingDTO secretSetting = secretSettingService.getSecretSetting(qwDTO.getWxEnterpriseId(), SecretTypeEnum.CUSTOMIZED_APP.getVal());
if (null != secretSetting && StringUtils.isNotBlank(secretSetting.getSecretVal())) {
UserDTO user = qywxUserApiService.getSelfWorkWxUser(qwDTO.getDkCorpid(), secretSetting.getSecretVal(), wxUserId);
logger.info("成员详情(代开)={}",JSON.toJSONString(user)) ;
if(null != user.getDepartment()) {
this.staffDepartChange(staff, wxEnterpriseId, user.getDepartment()); ;
}
}
}
public void staffDepartChange(TabHaobanStaff staff, String wxEnterpriseId, Integer[] departmentIds) {
//更新部门
List<String> wxDepartIds = new ArrayList<>();
for (Integer wDId : departmentIds) {
wxDepartIds.add(wDId.toString());
}
//关联部门
List<DepartmentDTO> departmentDTOList = departmentService.listDepartmentByWxDepartIds(wxEnterpriseId, wxDepartIds);
if (CollectionUtils.isEmpty(departmentDTOList)) {
logger.info("部门没有更新或同步:{}", wxEnterpriseId);
return;
}
//已存在部门
List<TabHaobanStaffDepartmentRelated> hasRelation = this.listStaffDepartmentByStaffId(staff.getStaffId());
Map<String, TabHaobanStaffDepartmentRelated> hasRelationMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(hasRelation)) {
hasRelationMap = hasRelation.stream().collect(Collectors.toMap(TabHaobanStaffDepartmentRelated::getDepartmentId, tab -> tab));
}
//新增操作
for (DepartmentDTO departmentDTO : departmentDTOList) {
if (!hasRelationMap.containsKey(departmentDTO.getDepartmentId())) {
StaffDepartmentRelatedDTO dto = new StaffDepartmentRelatedDTO();
dto.setPhoneNumber(staff.getPhoneNumber());
dto.setStaffId(staff.getStaffId());
dto.setStaffName(staff.getStaffName());
dto.setWxEnterpriseId(wxEnterpriseId);
dto.setStatusFlag(1);
dto.setDepartmentId(departmentDTO.getDepartmentId());
dto.setNationCode(staff.getNationCode());
this.add(dto);
}
}
//删除操作
Set<String> newDepartIds = departmentDTOList.stream().map(DepartmentDTO::getDepartmentId).collect(Collectors.toSet());
Set<String> hasDepartIds = hasRelationMap.keySet();
Sets.SetView<String> delDepartIds = Sets.difference(hasDepartIds, newDepartIds);
Sets.SetView<String> updateDepartIds = Sets.intersection(newDepartIds, hasDepartIds);//交集
logger.info("删除部门:{}", JSONObject.toJSONString(delDepartIds));
if (CollectionUtils.isNotEmpty(delDepartIds)) {
for (String delDepartId : delDepartIds) {
TabHaobanStaffDepartmentRelated departmentRelated = hasRelationMap.get(delDepartId);
if (null != departmentRelated) {
StaffDepartmentRelatedDTO relatedDTO = new StaffDepartmentRelatedDTO();
relatedDTO.setStaffDepartmentRelatedId(departmentRelated.getStaffDepartmentRelatedId());
this.del(relatedDTO);
}
}
}
if (CollectionUtils.isNotEmpty(updateDepartIds)) {
for (String updateDeId : updateDepartIds) {
TabHaobanStaffDepartmentRelated departmentRelated = hasRelationMap.get(updateDeId);
if (null != departmentRelated) {
departmentRelated.setPhoneNumber(staff.getPhoneNumber());
departmentRelated.setStaffName(staff.getStaffName());
departmentRelated.setNationCode(staff.getNationCode());
departmentRelated.setUpdateTime(new Date());
this.update(departmentRelated);
}
}
}
}
} }
package com.gic.haoban.manage.service.service.impl; package com.gic.haoban.manage.service.service.impl;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.gic.commons.util.EntityUtil; import com.gic.commons.util.EntityUtil;
import com.gic.haoban.base.api.common.BasePageInfo; import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.common.utils.PageUtil; import com.gic.haoban.common.utils.PageUtil;
import com.gic.haoban.common.utils.StringUtil; import com.gic.haoban.common.utils.StringUtil;
import com.gic.haoban.manage.api.dto.StaffDTO; import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.service.dao.mapper.StaffMapper; import com.gic.haoban.manage.service.dao.mapper.StaffMapper;
import com.gic.haoban.manage.service.entity.TabHaobanStaff; import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.service.MemberUnionRelatedService; import com.gic.haoban.manage.service.service.StaffService;
import com.gic.haoban.manage.service.service.StaffService; import com.github.pagehelper.Page;
import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo;
import com.github.pagehelper.PageInfo;
@Service
@Service public class StaffServiceImpl implements StaffService {
public class StaffServiceImpl implements StaffService { private static final Logger log = LogManager.getLogger(StaffServiceImpl.class);
private static final Logger log = LogManager.getLogger(StaffServiceImpl.class);
@Autowired
@Autowired private StaffMapper mapper;
private StaffMapper mapper; @Override
@Autowired public TabHaobanStaff selectById(String id) {
private MemberUnionRelatedService memberUnionRelatedService; if (StringUtils.isBlank(id)) {
@Override return null;
public TabHaobanStaff selectById(String id) { }
if (StringUtils.isBlank(id)) { return mapper.selectByPrimaryKey(id);
return null; }
}
return mapper.selectByPrimaryKey(id); @Override
} public TabHaobanStaff selectByNationcodeAndPhoneNumber(String wxEnterpriseId, String nationcode, String phoneNumber) {
if (StringUtils.isBlank(phoneNumber)) {
@Override return null;
public TabHaobanStaff selectByNationcodeAndPhoneNumber(String wxEnterpriseId, String nationcode, String phoneNumber) { }
if (StringUtils.isBlank(phoneNumber)) { return mapper.selectByNationcodeAndPhoneNumber(wxEnterpriseId, nationcode, phoneNumber);
return null; }
}
return mapper.selectByNationcodeAndPhoneNumber(wxEnterpriseId, nationcode, phoneNumber); @Override
} public String add(TabHaobanStaff tab) {
Date now = new Date();
@Override tab.setCreateTime(now);
public String add(TabHaobanStaff tab) { tab.setUpdateTime(now);
Date now = new Date(); if (StringUtils.isBlank(tab.getStaffId())) {
tab.setCreateTime(now); tab.setStaffId(StringUtil.randomUUID());
tab.setUpdateTime(now); }
if (StringUtils.isBlank(tab.getStaffId())) { tab.setStatusFlag(1);
tab.setStaffId(StringUtil.randomUUID()); tab.setAddNum(0);
} mapper.insertSelective(tab);
tab.setStatusFlag(1); return tab.getStaffId();
tab.setAddNum(0); }
mapper.insertSelective(tab);
return tab.getStaffId(); @Override
} public Page<TabHaobanStaff> pageStaff(List<String> staffIds, Integer activeFlag, String keyword,List<String> departmentIds,String wxEnterpriseId,Integer relationFlag) {
return mapper.pageStaff(staffIds, activeFlag, keyword,departmentIds,wxEnterpriseId,relationFlag);
@Override }
public Page<TabHaobanStaff> pageStaff(List<String> staffIds, Integer activeFlag, String keyword,List<String> departmentIds,String wxEnterpriseId,Integer relationFlag) {
return mapper.pageStaff(staffIds, activeFlag, keyword,departmentIds,wxEnterpriseId,relationFlag); @Override
} public TabHaobanStaff selectByUserIdAndEnterpriseId(String userId, String wxEnterpriseId) {
return mapper.selectByUserIdAndEnterpriseId(userId, wxEnterpriseId);
@Override }
public TabHaobanStaff selectByUserIdAndEnterpriseId(String userId, String wxEnterpriseId) {
return mapper.selectByUserIdAndEnterpriseId(userId, wxEnterpriseId); @Override
} public TabHaobanStaff selectByUserIdAndEnterpriseId(String wxUserId, String wxOpenUserId , String wxEnterpriseId) {
if (StringUtils.isBlank(wxUserId)) {
@Override log.info("wxUserId is null");
public TabHaobanStaff selectByUserIdAndEnterpriseId(String wxUserId, String wxOpenUserId , String wxEnterpriseId) { return null;
if (StringUtils.isBlank(wxUserId)) { }
log.info("wxUserId is null"); TabHaobanStaff staff = this.mapper.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId) ;
return null; if (null == staff && null != wxOpenUserId && !wxUserId.equals(wxOpenUserId)) {
} return this.mapper.selectByUserIdAndEnterpriseId(wxOpenUserId, wxEnterpriseId) ;
TabHaobanStaff staff = this.mapper.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId) ; }
if (null == staff && null != wxOpenUserId && !wxUserId.equals(wxOpenUserId)) { return staff;
return this.mapper.selectByUserIdAndEnterpriseId(wxOpenUserId, wxEnterpriseId) ; }
}
return staff; @Override
} public void updateByPrimaryKey(TabHaobanStaff tab) {
tab.setUpdateTime(new Date());
@Override mapper.updateByPrimaryKeySelective(tab);
public void updateByPrimaryKey(TabHaobanStaff tab) { }
tab.setUpdateTime(new Date());
mapper.updateByPrimaryKeySelective(tab); @Override
} public int delByStaffId(String staffId) {
TabHaobanStaff staff = new TabHaobanStaff();
@Override staff.setStaffId(staffId);
public int delByStaffId(String staffId) { staff.setStatusFlag(0);
TabHaobanStaff staff = new TabHaobanStaff(); return this.mapper.updateByPrimaryKeySelective(staff);
staff.setStaffId(staffId); }
staff.setStatusFlag(0);
return this.mapper.updateByPrimaryKeySelective(staff); @Override
} public List<StaffDTO> listByUserIdsAndWxEnterpriseId(List<String> userIds, String wxEnterpriseId) {
return EntityUtil.changeEntityListByJSON(StaffDTO.class, this.mapper.listByUserIdsAndWxEnterpriseId(userIds, wxEnterpriseId));
@Override }
public List<StaffDTO> listByUserIdsAndWxEnterpriseId(List<String> userIds, String wxEnterpriseId) {
return EntityUtil.changeEntityListByJSON(StaffDTO.class, this.mapper.listByUserIdsAndWxEnterpriseId(userIds, wxEnterpriseId)); @Override
} public int cleanStaff(String wxEnterpriseId, List<String> staffIds) {
return mapper.cleanStaff(wxEnterpriseId, staffIds);
@Override }
public int cleanStaff(String wxEnterpriseId, List<String> staffIds) {
memberUnionRelatedService.cleanStaffRelated(wxEnterpriseId, staffIds); @Override
return mapper.cleanStaff(wxEnterpriseId, staffIds); public List<String> listDelUserStaffId(String wxEnterpriseId, List<String> staffIds) {
} return mapper.listUserStaffId(wxEnterpriseId, staffIds);
}
@Override
public List<String> listDelUserStaffId(String wxEnterpriseId, List<String> staffIds) { @Override
return mapper.listUserStaffId(wxEnterpriseId, staffIds); public List<TabHaobanStaff> listNoStatusByStaffIds(String wxEnterpriseId, List<String> staffIds) {
} return mapper.listNoStatusStaffIds(wxEnterpriseId, staffIds);
}
@Override
public List<TabHaobanStaff> listNoStatusByStaffIds(String wxEnterpriseId, List<String> staffIds) { @Override
return mapper.listNoStatusStaffIds(wxEnterpriseId, staffIds); public List<StaffDTO> listByOpenUserIdsAndWxEnterpriseId(List<String> openUserIds, String wxEnterpriseId) {
} return EntityUtil.changeEntityListByJSON(StaffDTO.class, mapper.listByOpenUserIdsAndWxEnterpriseId(openUserIds, wxEnterpriseId));
}
@Override
public List<StaffDTO> listByOpenUserIdsAndWxEnterpriseId(List<String> openUserIds, String wxEnterpriseId) { @Override
return EntityUtil.changeEntityListByJSON(StaffDTO.class, mapper.listByOpenUserIdsAndWxEnterpriseId(openUserIds, wxEnterpriseId)); public int updateOpenUserIdsByUserId(String wxEnterpriseId, String wxUserId, String wxOpenUseId) {
} return mapper.updateOpenUserIdsByUserId(wxEnterpriseId, wxUserId, wxOpenUseId);
}
@Override
public int updateOpenUserIdsByUserId(String wxEnterpriseId, String wxUserId, String wxOpenUseId) { @Override
return mapper.updateOpenUserIdsByUserId(wxEnterpriseId, wxUserId, wxOpenUseId); public void delOtherStaffByWxUserId(String wxUserId, String staffId, String wxEnterpriseId) {
} mapper.delOtherStaffByWxUserId(wxUserId, staffId, wxEnterpriseId);
}
@Override
public void delOtherStaffByWxUserId(String wxUserId, String staffId, String wxEnterpriseId) { @Override
mapper.delOtherStaffByWxUserId(wxUserId, staffId, wxEnterpriseId); public com.gic.api.base.commons.Page<StaffDTO> getPageStaffIdsByWxEnterpriseId(String wxEnterpriseId, BasePageInfo basePageInfo) {
} PageHelper.startPage(basePageInfo);
List<TabHaobanStaff> tabHaobanStaffs = mapper.listByWxEnterpriseId(wxEnterpriseId);
@Override return PageUtil.changePageHelperToCurrentPage(new PageInfo<>(tabHaobanStaffs),StaffDTO.class);
public com.gic.api.base.commons.Page<StaffDTO> getPageStaffIdsByWxEnterpriseId(String wxEnterpriseId, BasePageInfo basePageInfo) { }
PageHelper.startPage(basePageInfo);
List<TabHaobanStaff> tabHaobanStaffs = mapper.listByWxEnterpriseId(wxEnterpriseId); @Override
return PageUtil.changePageHelperToCurrentPage(new PageInfo<>(tabHaobanStaffs),StaffDTO.class); public int updateAddNumById(String staffId) {
} return mapper.updateAddNumById(staffId);
}
@Override
public int updateAddNumById(String staffId) { @Override
return mapper.updateAddNumById(staffId); public int resetAddNum() {
} return mapper.resetAddNum();
}
@Override
public int resetAddNum() { @Override
return mapper.resetAddNum(); public int updateActiveStatusById(Integer activeStatus, String staffId) {
} return mapper.updateActiveStatusById(activeStatus,staffId);
}
@Override }
public int updateActiveStatusById(Integer activeStatus, String staffId) {
return mapper.updateActiveStatusById(activeStatus,staffId);
}
}
...@@ -91,12 +91,10 @@ public class WelcomeServiceImpl implements WelcomeService { ...@@ -91,12 +91,10 @@ public class WelcomeServiceImpl implements WelcomeService {
@Autowired @Autowired
private WelcomeRelationService welcomeRelationService; private WelcomeRelationService welcomeRelationService;
@Autowired @Autowired
private KeyDataService keyDataService;
@Autowired
private HmLinkService linkService; private HmLinkService linkService;
@Autowired @Autowired
private HmQrcodeService qrcodeService; private HmQrcodeService qrcodeService;
private static final int WELCOME_LIMIT = 50; private static final int WELCOME_LIMIT = 100;
private static final int DEPARTMENT_NUM_LIMIT = 10000; private static final int DEPARTMENT_NUM_LIMIT = 10000;
private static final int STAFF_NUM_LIMIT = 2000; private static final int STAFF_NUM_LIMIT = 2000;
private static final int MEDIA_NUM_LIMIT = 9; private static final int MEDIA_NUM_LIMIT = 9;
...@@ -144,10 +142,10 @@ public class WelcomeServiceImpl implements WelcomeService { ...@@ -144,10 +142,10 @@ public class WelcomeServiceImpl implements WelcomeService {
long count = welcomeMapper.countByWxEnterpriseId(bo.getWxEnterpriseId(), bo.getType()); long count = welcomeMapper.countByWxEnterpriseId(bo.getWxEnterpriseId(), bo.getType());
if (count >= WELCOME_LIMIT) { if (count >= WELCOME_LIMIT) {
if (HmWelcomeType.NORMAL.getCode().equals(bo.getType())){ if (HmWelcomeType.NORMAL.getCode().equals(bo.getType())){
return "普通欢迎语最多可创建50条"; return "普通欢迎语最多可创建"+WELCOME_LIMIT+"条";
} }
if (HmWelcomeType.SPECIAL.getCode().equals(bo.getType())){ if (HmWelcomeType.SPECIAL.getCode().equals(bo.getType())){
return "特殊欢迎语最多可创建50条"; return "特殊欢迎语最多可创建"+WELCOME_LIMIT+"条";
} }
return "欢迎语条目超过限制"; return "欢迎语条目超过限制";
} }
......
package com.gic.haoban.manage.service.service.impl; package com.gic.haoban.manage.service.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.EntityUtil;
import com.gic.enterprise.api.dto.EnterpriseSettingDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.manage.service.dao.mapper.WxEnterpriseMapper; import com.gic.haoban.manage.service.dao.mapper.WxEnterpriseMapper;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise; import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.gic.haoban.manage.service.dao.mapper.WxEnterpriseRelatedMapper; import com.gic.haoban.manage.service.dao.mapper.WxEnterpriseRelatedMapper;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated; import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated;
import com.gic.haoban.manage.service.pojo.bo.WxEnterpriseRelationBO;
import com.gic.haoban.manage.service.service.WxEnterpriseRelatedService; import com.gic.haoban.manage.service.service.WxEnterpriseRelatedService;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -30,6 +36,8 @@ public class WxEnterpriseRelatedServiceImpl implements WxEnterpriseRelatedServic ...@@ -30,6 +36,8 @@ public class WxEnterpriseRelatedServiceImpl implements WxEnterpriseRelatedServic
@Autowired @Autowired
private WxEnterpriseMapper wxEnterpriseMapper; private WxEnterpriseMapper wxEnterpriseMapper;
@Autowired
private EnterpriseService enterpriseService ;
@Override @Override
public TabHaobanWxEnterpriseRelated getByGicEnterpriseIdByEnterpriseRelatedId(String wxEnterpriseRelatedId) { public TabHaobanWxEnterpriseRelated getByGicEnterpriseIdByEnterpriseRelatedId(String wxEnterpriseRelatedId) {
...@@ -75,4 +83,43 @@ public class WxEnterpriseRelatedServiceImpl implements WxEnterpriseRelatedServic ...@@ -75,4 +83,43 @@ public class WxEnterpriseRelatedServiceImpl implements WxEnterpriseRelatedServic
List<TabHaobanWxEnterpriseRelated> list = this.mapper.listByEnterpriseId(enterpriseId) ; List<TabHaobanWxEnterpriseRelated> list = this.mapper.listByEnterpriseId(enterpriseId) ;
return list.size(); return list.size();
} }
@Override
public WxEnterpriseRelationBO getHeadEnterprise(String enterpriseId) {
TabHaobanWxEnterpriseRelated root = this.mapper.findRootWxEnterpriseByEnterpriseId(enterpriseId) ;
if(null != root) {
return EntityUtil.changeEntityByJSON(WxEnterpriseRelationBO.class, root);
}
return null;
}
@Override
public boolean getAddByWelcomeFlag(TabHaobanWxEnterpriseRelated wxEnterpriseRelated, String unionid , boolean isHmUnionid) {
int openCardFlag = wxEnterpriseRelated.getMemberOpenCardFlag() ;
int wxEnterpriseType = wxEnterpriseRelated.getWxEnterpriseType() ;
// 活码
if(StringUtils.isNotBlank(unionid) && isHmUnionid) {
return false ;
}
// unionid存在,并且在同一开放平台,可以创建客户
if(StringUtils.isNotBlank(unionid) && openCardFlag==0) {
return false ;
}
String enterpriseId = wxEnterpriseRelated.getEnterpriseId() ;
EnterpriseSettingDTO setting = this.enterpriseService.getEnterpriseSettingByEnterpriseId(enterpriseId) ;
String customSetting = setting.getCustomSetting() ;
boolean settFlag = true ;
if(StringUtils.isNotBlank(customSetting)) {
JSONObject json = JSON.parseObject(customSetting) ;
String pendingidFlag = json.getString("qwPendingidFlag") ;
if(StringUtils.isBlank(pendingidFlag) || "0".equals(pendingidFlag)) {
settFlag = false ;
}
}
if(openCardFlag == 0 && wxEnterpriseType ==0 && settFlag) {
return false ;
}
return true ;
}
} }
...@@ -65,6 +65,9 @@ public class WxEnterpriseServiceImpl implements WxEnterpriseService { ...@@ -65,6 +65,9 @@ public class WxEnterpriseServiceImpl implements WxEnterpriseService {
@Override @Override
public WxEnterpriseQwDTO getQwInfo(String wxEnterpriseId) { public WxEnterpriseQwDTO getQwInfo(String wxEnterpriseId) {
TabHaobanWxEnterprise wxEnterprise = this.mapper.selectByPrimaryKey(wxEnterpriseId) ; TabHaobanWxEnterprise wxEnterprise = this.mapper.selectByPrimaryKey(wxEnterpriseId) ;
if(null == wxEnterprise) {
return null ;
}
WxEnterpriseQwDTO qw = new WxEnterpriseQwDTO(); WxEnterpriseQwDTO qw = new WxEnterpriseQwDTO();
qw.setWxEnterpriseId(wxEnterpriseId); qw.setWxEnterpriseId(wxEnterpriseId);
if(null != wxEnterprise.getWxSecurityType()) { if(null != wxEnterprise.getWxSecurityType()) {
...@@ -124,14 +127,6 @@ public class WxEnterpriseServiceImpl implements WxEnterpriseService { ...@@ -124,14 +127,6 @@ public class WxEnterpriseServiceImpl implements WxEnterpriseService {
} }
@Override @Override
public TabHaobanWxEnterprise getEnterpriseByCorpName(String corpName) {
if (StringUtils.isBlank(corpName)) {
return null;
}
return this.mapper.getEnterpriseByCorpName(corpName);
}
@Override
public List<TabHaobanWxEnterprise> listAll() { public List<TabHaobanWxEnterprise> listAll() {
return mapper.listAll(); return mapper.listAll();
} }
......
...@@ -142,7 +142,8 @@ public class AuditApiServiceImpl implements AuditApiService { ...@@ -142,7 +142,8 @@ public class AuditApiServiceImpl implements AuditApiService {
tab.setAuditStatus(5); tab.setAuditStatus(5);
String reason = "该成员在该门店下已经绑定过一个导购了"; String reason = "该成员在该门店下已经绑定过一个导购了";
if (clerkDTO != null) { if (clerkDTO != null) {
if (clerkDTO.getClerkType() == 2) { Integer clerkType = clerkDTO.getClerkType();
if (clerkType == 2) {
reason = "该成员在该商户下已经绑定过一个区经了"; reason = "该成员在该商户下已经绑定过一个区经了";
} }
} }
......
package com.gic.haoban.manage.service.service.out.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.haoban.manage.api.dto.DepartmentDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.dto.StaffDepartmentRelatedDTO;
import com.gic.haoban.manage.api.enums.AppPageType;
import com.gic.haoban.manage.api.service.BindApiService;
import com.gic.haoban.manage.api.service.DepartmentApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.api.service.StaffDepartmentRelatedApiService;
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.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class BindApiServiceImpl implements BindApiService {
private static Logger logger = LoggerFactory.getLogger(BindApiServiceImpl.class);
@Autowired
private ClerkService clerkService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private StaffDepartmentRelatedApiService staffDepartmentRelatedApiService;
@Autowired
private DepartmentApiService departmentApiService;
@Transactional
@Override
@Deprecated
public void clerkManagerTranfer(String departmentId, String fromClerkCode,
String toStaffDepartmentRelatedId) {
logger.info("===========================》222222222222222");
DepartmentDTO departmentDTO = departmentApiService.selectById(departmentId);
String storeId = departmentDTO.getRelatedId();
StaffDepartmentRelatedDTO oldStaffDepartmentRelatedDTO = staffDepartmentRelatedApiService.getByStaffDepartmentRelatedId(toStaffDepartmentRelatedId);
logger.info("===========================》333333333333333");
//老店长
StaffDepartmentRelatedDTO one = staffDepartmentRelatedApiService.getOneByClerkCodeAndDepartmentId(fromClerkCode,departmentId);
if(one != null){
//老店长清空好办这边code
one.setClerkCode(null);
one.setUpdateTime(new Date());
staffDepartmentRelatedApiService.deleteCode(one);
}
logger.info("===========================》444444444444444");
//新店长更新好办code
StaffDepartmentRelatedDTO dto = new StaffDepartmentRelatedDTO();
dto.setStaffDepartmentRelatedId(toStaffDepartmentRelatedId);
dto.setClerkCode(fromClerkCode);
dto.setUpdateTime(new Date());
staffDepartmentRelatedApiService.updateById(dto);
logger.info("===========================》555555555555555");
if(StringUtils.isNotEmpty(oldStaffDepartmentRelatedDTO.getClerkCode())){
//新店长老clerkCode对应的gicClerk更新gic姓名
List<String> clerkCodes = new ArrayList<>();
clerkCodes.add(oldStaffDepartmentRelatedDTO.getClerkCode());
List<ClerkDTO> list = clerkService.listClerk(storeId, clerkCodes, true);
for(ClerkDTO clerkDTO :list){
clerkDTO.setPhoneNumber("--");
clerkDTO.setClerkName(clerkDTO.getClerkName()+"(已解绑)");
clerkDTO.setHeadImgUrl("");
clerkService.updateClerk(clerkDTO);
}
}
logger.info("===========================》666666666666666");
//老店长更新gic那边的数据为新店长数据
List<String> clerkCodes = new ArrayList<>();
clerkCodes.add(fromClerkCode);
List<ClerkDTO> list = clerkService.listClerk(storeId, clerkCodes, true);
StaffDepartmentRelatedDTO staffDepartmentRelatedDTO = staffDepartmentRelatedApiService.getByStaffDepartmentRelatedId(toStaffDepartmentRelatedId);
StaffDTO staffDTO = staffApiService.selectById(staffDepartmentRelatedDTO.getStaffId());
logger.info("===========================》77777777777777");
for(ClerkDTO clerkDTO :list){
clerkDTO.setPhoneNumber(staffDTO.getPhoneNumber());
clerkDTO.setClerkName(staffDTO.getStaffName());
clerkDTO.setHeadImgUrl(StringUtils.isEmpty(staffDTO.getHeadImg())?"":staffDTO.getHeadImg());
clerkService.updateClerk(clerkDTO);
}
//消息推送
if(StringUtils.isNotEmpty(oldStaffDepartmentRelatedDTO.getClerkCode())){
String clerkId = list.get(0).getClerkId();
String storeName = departmentDTO.getDepartmentName();
String staffName = staffDTO.getStaffName();
String clerkCode = oldStaffDepartmentRelatedDTO.getClerkCode();
String content = "【"+staffName+"】:【"+storeName+"】"+staffName+"导购code:"+clerkCode+"已解绑,请重新分配会员!";
JSONObject jsonObject = new JSONObject();
jsonObject.put("storeId", storeId);
String data = jsonObject.toJSONString();
String pageUrl = staffDepartmentRelatedApiService.getPageUrl(AppPageType.MEMBER_LIST.getCode(), data);
staffDepartmentRelatedApiService.sendSingleMessage(clerkId, "分配会员通知", content, pageUrl);
}
logger.info("===========================》888888888888888");
}
@Transactional
@Override
@Deprecated
public void clerkUnbind(String departmentId, String fromClerkCode,
String toStaffId, String manager) {
DepartmentDTO departmentDTO = departmentApiService.selectById(departmentId);
StaffDepartmentRelatedDTO staffDepartmentRelatedDTO = staffDepartmentRelatedApiService.getOneByStaffIdAndDepartmentId(toStaffId, departmentId);
String oldClerkCode = staffDepartmentRelatedDTO.getClerkCode();
if("1".equals(manager)){
//店长操作
//第一个点击的人的clerkCode置空
StaffDepartmentRelatedDTO one = staffDepartmentRelatedApiService.getOneByClerkCodeAndDepartmentId(fromClerkCode,departmentId);
if(one != null){
//存在,则先置空
one.setClerkCode(null);
one.setUpdateTime(new Date());
staffDepartmentRelatedApiService.deleteCode(one);
}
StaffDepartmentRelatedDTO dto = staffDepartmentRelatedApiService.getOneByStaffIdAndDepartmentId(toStaffId, departmentId);
//存在,则先置空
dto.setClerkCode(fromClerkCode);
dto.setUpdateTime(new Date());
staffDepartmentRelatedApiService.updateById(dto);
//更新gic数据
String storeId = departmentDTO.getRelatedId();
List<String> clerkCodes = new ArrayList<>();
clerkCodes.add(fromClerkCode);
List<ClerkDTO> list = clerkService.listClerk(storeId, clerkCodes, true);
String clerkName = CollectionUtil.isEmpty(list)?null:list.get(0).getClerkName();//获取姓名,发消息用
StaffDTO staffDTO = staffApiService.selectById(toStaffId);
for(ClerkDTO clerkDTO :list){
clerkDTO.setPhoneNumber(staffDTO.getPhoneNumber());
clerkDTO.setClerkName(staffDTO.getStaffName());
clerkDTO.setHeadImgUrl(StringUtils.isEmpty(staffDTO.getHeadImg())?"":staffDTO.getHeadImg());
clerkService.updateClerk(clerkDTO);
}
//清空gic原来的手机号
List<String> oldClerkCodes = new ArrayList<>();
oldClerkCodes.add(oldClerkCode);
List<ClerkDTO> oldList = clerkService.listClerk(storeId, oldClerkCodes, true);
for(ClerkDTO clerkDTO :oldList){
clerkDTO.setPhoneNumber("--");
clerkDTO.setClerkName(clerkDTO.getClerkName()+"(已解绑)");
clerkDTO.setHeadImgUrl("");
clerkService.updateClerk(clerkDTO);
}
//发送消息
if(StringUtils.isNotBlank(fromClerkCode)){
//发送消息
ClerkDTO leader = clerkService.getClerkLeaderByStoreId(storeId);
if(leader == null){
leader = new ClerkDTO();
}
String clerkId = leader.getClerkId();
String storeName = departmentDTO.getDepartmentName();
String staffName = clerkName;
String leaderName = leader.getClerkName();
String clerkCode = fromClerkCode;
String content = "【"+leaderName+"】:【"+storeName+"】"+staffName+"导购code:"+clerkCode+"已解绑,请重新分配会员!";
JSONObject jsonObject = new JSONObject();
jsonObject.put("storeId", storeId);
String data = jsonObject.toJSONString();
String pageUrl = staffDepartmentRelatedApiService.getPageUrl(AppPageType.MEMBER_LIST.getCode(), data);
staffDepartmentRelatedApiService.sendSingleMessage(clerkId, "分配会员通知", content, pageUrl);
}
}else{
//把别人的的clerkCode置空
logger.info("000000000000");
StaffDepartmentRelatedDTO one = staffDepartmentRelatedApiService.getOneByClerkCodeAndDepartmentId(fromClerkCode,departmentId);
if(one != null){
//存在,则先置空
logger.info("111111111111111");
one.setClerkCode(null);
one.setUpdateTime(new Date());
staffDepartmentRelatedApiService.deleteCode(one);
}
logger.info("222222222222222");
//别人的clerkCOde换到自己上
StaffDepartmentRelatedDTO dto = staffDepartmentRelatedApiService.getOneByStaffIdAndDepartmentId(toStaffId, departmentId);
logger.info("3333333333333");
String sendClerkCode = dto.getClerkCode();
dto.setClerkCode(fromClerkCode);
dto.setUpdateTime(new Date());
staffDepartmentRelatedApiService.updateById(dto);
//更新gic数据
String storeId = departmentDTO.getRelatedId();
List<String> clerkCodes = new ArrayList<>();
clerkCodes.add(fromClerkCode);
List<ClerkDTO> list = clerkService.listClerk(storeId, clerkCodes, true);
StaffDTO staffDTO = staffApiService.selectById(toStaffId);
logger.info("444444444444");
for(ClerkDTO clerkDTO :list){
clerkDTO.setPhoneNumber(staffDTO.getPhoneNumber());
clerkDTO.setClerkName(staffDTO.getStaffName());
clerkDTO.setHeadImgUrl(StringUtils.isEmpty(staffDTO.getHeadImg())?"":staffDTO.getHeadImg());
clerkService.updateClerk(clerkDTO);
}
//清空gic原来的手机号
List<String> oldClerkCodes = new ArrayList<>();
oldClerkCodes.add(oldClerkCode);
logger.info("oldClerkCode====================>{}",oldClerkCode);
List<ClerkDTO> oldList = clerkService.listClerk(storeId, oldClerkCodes, true);
logger.info("oldList====================>{}",JSONObject.toJSONString(oldList));
for(ClerkDTO clerkDTO :oldList){
clerkDTO.setPhoneNumber("--");
clerkDTO.setClerkName(clerkDTO.getClerkName()+"(已解绑)");
clerkDTO.setHeadImgUrl("");
clerkService.updateClerk(clerkDTO);
}
//发送消息
if(StringUtils.isNotBlank(sendClerkCode)){
//发送消息
ClerkDTO leader = clerkService.getClerkLeaderByStoreId(storeId);
if(leader == null){
leader = new ClerkDTO();
}
String clerkId = leader.getClerkId();
String storeName = departmentDTO.getDepartmentName();
String staffName = staffDTO.getStaffName();
String leaderName = leader.getClerkName();
String clerkCode = sendClerkCode;
String content = "【"+leaderName+"】:【"+storeName+"】"+staffName+"导购code:"+clerkCode+"已解绑,请重新分配会员!";
JSONObject jsonObject = new JSONObject();
jsonObject.put("storeId", storeId);
String data = jsonObject.toJSONString();
String pageUrl = staffDepartmentRelatedApiService.getPageUrl(AppPageType.MEMBER_LIST.getCode(), data);
staffDepartmentRelatedApiService.sendSingleMessage(clerkId, "分配会员通知", content, pageUrl);
}
}
}
@Deprecated
@Transactional
@Override
public void clerkSingleUnbind(String fromClerkCode, String departmentId) {
//将自己的clerkCode置空
StaffDepartmentRelatedDTO one = staffDepartmentRelatedApiService.getOneByClerkCodeAndDepartmentId(fromClerkCode, departmentId);
if(one != null){
//存在,则先置空
one.setClerkCode(null);
one.setUpdateTime(new Date());
staffDepartmentRelatedApiService.deleteCode(one);
}
//更新gic数据
DepartmentDTO departmentDTO = departmentApiService.selectById(departmentId);
String storeId = departmentDTO.getRelatedId();
List<String> clerkCodes = new ArrayList<>();
clerkCodes.add(fromClerkCode);
List<ClerkDTO> list = clerkService.listClerk(storeId, clerkCodes, true);
String clerkName = CollectionUtil.isEmpty(list)?null:list.get(0).getClerkName();//获取姓名,发消息用
for(ClerkDTO clerkDTO :list){
clerkDTO.setPhoneNumber("--");
clerkDTO.setClerkName(clerkDTO.getClerkName()+"(已解绑)");
clerkDTO.setHeadImgUrl("");
clerkService.updateClerk(clerkDTO);
}
//发送消息
if(StringUtils.isNotBlank(fromClerkCode)){
//发送消息
ClerkDTO leader = clerkService.getClerkLeaderByStoreId(storeId);
if(leader == null){
leader = new ClerkDTO();
}
String clerkId = leader.getClerkId();
String storeName = departmentDTO.getDepartmentName();
String staffName = clerkName;
String leaderName = leader.getClerkName();
String clerkCode = fromClerkCode;
String content = "【"+leaderName+"】:【"+storeName+"】"+staffName+"导购code:"+clerkCode+"已解绑,请重新分配会员!";
JSONObject jsonObject = new JSONObject();
jsonObject.put("storeId", storeId);
String data = jsonObject.toJSONString();
String pageUrl = staffDepartmentRelatedApiService.getPageUrl(AppPageType.MEMBER_LIST.getCode(), data);
staffDepartmentRelatedApiService.sendSingleMessage(clerkId, "分配会员通知", content, pageUrl);
}
}
@Transactional
@Override
public void staffBind(String departmentId, String fromClerkCode,
String fromStaffDepartmentRelatedId) {
StaffDepartmentRelatedDTO oldStaffDepartmentRelatedDTO = staffDepartmentRelatedApiService.getByStaffDepartmentRelatedId(fromStaffDepartmentRelatedId);
if(oldStaffDepartmentRelatedDTO!=null){
//删除gic测的手机号和姓名
String clerkCode = oldStaffDepartmentRelatedDTO.getClerkCode();
if(StringUtils.isNotBlank(clerkCode)){
DepartmentDTO departmentDTO = departmentApiService.selectById(departmentId);
String storeId = departmentDTO.getRelatedId();
List<String> clerkCodes = new ArrayList<>();
clerkCodes.add(clerkCode);
List<ClerkDTO> list = clerkService.listClerk(storeId, clerkCodes, true);
for(ClerkDTO clerkDTO :list){
clerkDTO.setPhoneNumber("--");
clerkDTO.setClerkName(clerkDTO.getClerkName()+"(已解绑)");
clerkDTO.setHeadImgUrl("");
clerkService.updateClerk(clerkDTO);
}
}
}
//将指定人绑定clerkCode
StaffDepartmentRelatedDTO dto = new StaffDepartmentRelatedDTO();
dto.setStaffDepartmentRelatedId(fromStaffDepartmentRelatedId);
dto.setClerkCode(fromClerkCode);
dto.setUpdateTime(new Date());
staffDepartmentRelatedApiService.updateById(dto);
//更新gic数据
DepartmentDTO departmentDTO = departmentApiService.selectById(departmentId);
String storeId = departmentDTO.getRelatedId();
List<String> clerkCodes = new ArrayList<>();
clerkCodes.add(fromClerkCode);
List<ClerkDTO> list = clerkService.listClerk(storeId, clerkCodes, true);
String clerkName = CollectionUtil.isEmpty(list)?null:list.get(0).getClerkName();//获取姓名,发消息用
StaffDepartmentRelatedDTO staffDepartmentRelatedDTO = staffDepartmentRelatedApiService.getByStaffDepartmentRelatedId(fromStaffDepartmentRelatedId);
StaffDTO staffDTO = staffApiService.selectById(staffDepartmentRelatedDTO.getStaffId());
for(ClerkDTO clerkDTO :list){
clerkDTO.setPhoneNumber(staffDTO.getPhoneNumber());
clerkDTO.setClerkName(staffDTO.getStaffName());
clerkDTO.setHeadImgUrl(StringUtils.isEmpty(staffDTO.getHeadImg())?"":staffDTO.getHeadImg());
clerkService.updateClerk(clerkDTO);
}
//发送消息
if(StringUtils.isNotBlank(fromClerkCode)){
//发送消息
ClerkDTO leader = clerkService.getClerkLeaderByStoreId(storeId);
if(leader == null){
leader = new ClerkDTO();
}
String clerkId = leader.getClerkId();
String storeName = departmentDTO.getDepartmentName();
String staffName = clerkName;
String leaderName = leader.getClerkName();
String clerkCode = fromClerkCode;
String content = "【"+leaderName+"】:【"+storeName+"】"+staffName+"导购code:"+clerkCode+"已解绑,请重新分配会员!";
JSONObject jsonObject = new JSONObject();
jsonObject.put("storeId", storeId);
String data = jsonObject.toJSONString();
String pageUrl = staffDepartmentRelatedApiService.getPageUrl(AppPageType.MEMBER_LIST.getCode(), data);
staffDepartmentRelatedApiService.sendSingleMessage(clerkId, "分配会员通知", content, pageUrl);
}
}
}
...@@ -215,22 +215,12 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA ...@@ -215,22 +215,12 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
externalClerkRelated.setStatusFlag(1); externalClerkRelated.setStatusFlag(1);
tabHaobanExternalClerkRelatedMapper.updateByPrimaryKeySelective(externalClerkRelated); tabHaobanExternalClerkRelatedMapper.updateByPrimaryKeySelective(externalClerkRelated);
//更新unionid
MemberUnionidRelated memberUnionidRelated = memberUnionidRelatedMapper.selectByPrimaryKey(externalClerkRelated.getMemberUnionidRelatedId());
if (memberUnionidRelated != null) {
memberUnionidRelated.setMemberId(memberId);
memberUnionidRelated.setUnionid(unionid);
memberUnionidRelated.setEnterpriseId(enterpriseId);
memberUnionidRelated.setUpdateTime(new Date());
memberUnionidRelatedMapper.updateByPrimaryKeySelective(memberUnionidRelated);
}
String wxEnterpriseId = externalClerkRelated.getWxEnterpriseId(); String wxEnterpriseId = externalClerkRelated.getWxEnterpriseId();
//同步标签 //同步标签
pushTagSync(memberId, wxEnterpriseId, enterpriseId); pushTagSync(memberId, wxEnterpriseId, enterpriseId);
//回调给会员,更新是否为企微好友 //回调给会员,更新是否为企微好友
log.info("通知会员 合并会员后更新为企微好友,memberId:{}", memberId); log.info("通知会员 合并会员后更新为企微好友,memberId:{}", memberId);
memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1); memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
//定制 //定制
addDelFriendEvent(unionid, externalClerkRelated.getClerkId(), wxEnterpriseId, enterpriseId, memberId, externalClerkRelated.getStoreId(), 1); addDelFriendEvent(unionid, externalClerkRelated.getClerkId(), wxEnterpriseId, enterpriseId, memberId, externalClerkRelated.getStoreId(), 1);
//日志 //日志
......
...@@ -6,6 +6,7 @@ import org.springframework.stereotype.Service; ...@@ -6,6 +6,7 @@ import org.springframework.stereotype.Service;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.service.HaobanTimerApiService; import com.gic.haoban.manage.api.service.HaobanTimerApiService;
import com.gic.haoban.manage.service.service.ExternalClerkRelatedService; import com.gic.haoban.manage.service.service.ExternalClerkRelatedService;
import com.gic.haoban.manage.service.service.StaffDepartmentRelatedService;
import com.gic.haoban.manage.service.service.hm.HmQrcodeTempService; import com.gic.haoban.manage.service.service.hm.HmQrcodeTempService;
@Service("haobanTimerApiService") @Service("haobanTimerApiService")
...@@ -13,10 +14,10 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService { ...@@ -13,10 +14,10 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
@Autowired @Autowired
private HmQrcodeTempService hmQrcodeTempService ; private HmQrcodeTempService hmQrcodeTempService ;
@Autowired @Autowired
private ExternalClerkRelatedService externalClerkRelatedService ; private ExternalClerkRelatedService externalClerkRelatedService ;
@Autowired
private StaffDepartmentRelatedService staffDepartmentRelatedService ;
@Override @Override
public ServiceResponse<Void> deleteTempWxHm(String params) { public ServiceResponse<Void> deleteTempWxHm(String params) {
...@@ -29,6 +30,11 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService { ...@@ -29,6 +30,11 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
this.externalClerkRelatedService.repairExternalUserId(wxEnterpriseId) ; this.externalClerkRelatedService.repairExternalUserId(wxEnterpriseId) ;
return ServiceResponse.success(); return ServiceResponse.success();
} }
@Override
public ServiceResponse<Void> repairStaffDepart(String params) {
this.staffDepartmentRelatedService.repairAllStaffDepart(params);
return ServiceResponse.success();
}
} }
package com.gic.haoban.manage.service.service.out.impl; package com.gic.haoban.manage.service.service.out.impl;
import cn.hutool.core.collection.CollectionUtil; import java.util.ArrayList;
import cn.hutool.core.convert.Convert; import java.util.Arrays;
import cn.hutool.crypto.SecureUtil; import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.stream.Collectors;
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.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -28,7 +48,18 @@ import com.gic.haoban.app.customer.enums.QywxSyncTaskTypeEnum; ...@@ -28,7 +48,18 @@ import com.gic.haoban.app.customer.enums.QywxSyncTaskTypeEnum;
import com.gic.haoban.app.customer.service.api.service.CustomerApiService; import com.gic.haoban.app.customer.service.api.service.CustomerApiService;
import com.gic.haoban.base.api.common.ServiceResponse; import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.constants.Manage3Constants; import com.gic.haoban.manage.api.constants.Manage3Constants;
import com.gic.haoban.manage.api.dto.*; import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.FriendStoreInfoDTO;
import com.gic.haoban.manage.api.dto.MaterialDTO;
import com.gic.haoban.manage.api.dto.MemberStoreDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidWechatAccountQDTO;
import com.gic.haoban.manage.api.dto.QwFrientNoticeDTO;
import com.gic.haoban.manage.api.dto.QywxErrorLogDTO;
import com.gic.haoban.manage.api.dto.SecretSettingDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO;
import com.gic.haoban.manage.api.dto.hm.HmClerkRelationDTO; import com.gic.haoban.manage.api.dto.hm.HmClerkRelationDTO;
import com.gic.haoban.manage.api.dto.hm.HmQrcodeDTO; import com.gic.haoban.manage.api.dto.hm.HmQrcodeDTO;
import com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogQDTO; import com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogQDTO;
...@@ -42,11 +73,16 @@ import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService; ...@@ -42,11 +73,16 @@ import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.hm.HmClerkRelationApiService; import com.gic.haoban.manage.api.service.hm.HmClerkRelationApiService;
import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService; import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService;
import com.gic.haoban.manage.service.config.Config; import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.dao.mapper.MemberUnionidRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.StaffMapper; import com.gic.haoban.manage.service.dao.mapper.StaffMapper;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper; import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.WxApplicationMapper; import com.gic.haoban.manage.service.dao.mapper.WxApplicationMapper;
import com.gic.haoban.manage.service.entity.*; import com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.TabHaobanWxApplication;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated;
import com.gic.haoban.manage.service.entity.TabMiniprogramSetting;
import com.gic.haoban.manage.service.exception.WxApiLimitException; import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.pojo.DealQywxExternalUserPojo; import com.gic.haoban.manage.service.pojo.DealQywxExternalUserPojo;
import com.gic.haoban.manage.service.pojo.ExternalUserPojo; import com.gic.haoban.manage.service.pojo.ExternalUserPojo;
...@@ -56,39 +92,56 @@ import com.gic.haoban.manage.service.pojo.bo.hm.KeyDataLinkBO; ...@@ -56,39 +92,56 @@ import com.gic.haoban.manage.service.pojo.bo.hm.KeyDataLinkBO;
import com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeDetailBO; import com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeDetailBO;
import com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeMediaBO; import com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeMediaBO;
import com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeReferBO; import com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeReferBO;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.ClerkMainStoreRelatedService;
import com.gic.haoban.manage.service.service.ExternalClerkRelatedService;
import com.gic.haoban.manage.service.service.KeyDataService;
import com.gic.haoban.manage.service.service.MemberUnionRelatedService;
import com.gic.haoban.manage.service.service.MiniprogramSettingService;
import com.gic.haoban.manage.service.service.SecretSettingService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.StaffService;
import com.gic.haoban.manage.service.service.WelcomeService;
import com.gic.haoban.manage.service.service.WxEnterpriseRelatedService;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.haoban.manage.service.service.hm.HmLinkService; import com.gic.haoban.manage.service.service.hm.HmLinkService;
import com.gic.haoban.manage.service.service.hm.WxUserAddLogService; import com.gic.haoban.manage.service.service.hm.WxUserAddLogService;
import com.gic.haoban.manage.service.util.CommonUtil; import com.gic.haoban.manage.service.util.CommonUtil;
import com.gic.haoban.manage.service.util.EmojiFilterUtil; import com.gic.haoban.manage.service.util.EmojiFilterUtil;
import com.gic.member.api.dto.MemberDTO; import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.dto.MemberSimpleDetailDTO;
import com.gic.member.api.dto.MemberSourceDetailDTO; import com.gic.member.api.dto.MemberSourceDetailDTO;
import com.gic.member.api.dto.MemberSourceShowDTO; import com.gic.member.api.dto.MemberSourceShowDTO;
import com.gic.member.api.service.*; import com.gic.member.api.dto.QywxMemberQDTO;
import com.gic.member.api.service.MemberApiService;
import com.gic.member.api.service.MemberEntranceApiService;
import com.gic.member.api.service.MemberService;
import com.gic.member.api.service.MemberStoreService;
import com.gic.member.tag.api.dto.outapi.MemberTagSingleDTO; import com.gic.member.tag.api.dto.outapi.MemberTagSingleDTO;
import com.gic.member.tag.api.service.MemberTagOpenApiService; import com.gic.member.tag.api.service.MemberTagOpenApiService;
import com.gic.mq.sdk.GicMQClient; import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
import com.gic.wechat.api.dto.qywx.*; import com.gic.wechat.api.dto.qywx.QywxExternalMessageDTO;
import com.gic.wechat.api.dto.qywx.welcome.*; import com.gic.wechat.api.dto.qywx.QywxImageMaterialDTO;
import com.gic.wechat.api.dto.qywx.QywxLinkMaterialDTO;
import com.gic.wechat.api.dto.qywx.QywxMessageMaterialDTO;
import com.gic.wechat.api.dto.qywx.QywxMiniprogramMaterialDTO;
import com.gic.wechat.api.dto.qywx.QywxVideoMaterialDTO;
import com.gic.wechat.api.dto.qywx.UnionidToExternalUseridDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxExternalMessageBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxFileExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxImageExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxLinkExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxMiniprogramExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxVideoExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxWelcomeMsgDTO;
import com.gic.wechat.api.enums.QywxMediaTypeEnum; import com.gic.wechat.api.enums.QywxMediaTypeEnum;
import com.gic.wechat.api.service.qywx.QywxSuiteApiService; import com.gic.wechat.api.service.qywx.QywxSuiteApiService;
import com.gic.wechat.api.service.qywx.QywxUserApiService; import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
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.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*; import cn.hutool.core.collection.CollectionUtil;
import java.util.concurrent.TimeUnit; import cn.hutool.core.convert.Convert;
import java.util.regex.Matcher; import cn.hutool.crypto.SecureUtil;
import java.util.stream.Collectors;
@Service @Service
public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedApiService { public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedApiService {
...@@ -111,12 +164,8 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -111,12 +164,8 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
@Autowired @Autowired
private WxEnterpriseService wxEnterpriseService; private WxEnterpriseService wxEnterpriseService;
@Autowired @Autowired
private MemberOpenCardBusinessService memberOpenCardBusinessService;
@Autowired
private ClerkService clerkService; private ClerkService clerkService;
@Autowired @Autowired
private MemberUnionidRelatedMapper memberUnionidRelatedMapper;
@Autowired
private ClerkMainStoreRelatedService clerkMainStoreRelatedService; private ClerkMainStoreRelatedService clerkMainStoreRelatedService;
@Autowired @Autowired
private StoreService storeService; private StoreService storeService;
...@@ -176,17 +225,19 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -176,17 +225,19 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
@Override @Override
public void dealQywxExternalUser(String params) { public void dealQywxExternalUser(String params) {
log.info("处理外部联系人回调:{}", params);
DealQywxExternalUserPojo externalUserPojo = JSONObject.parseObject(params, DealQywxExternalUserPojo.class); DealQywxExternalUserPojo externalUserPojo = JSONObject.parseObject(params, DealQywxExternalUserPojo.class);
QwFrientNoticeDTO qwFrientNoticeDTO = externalUserPojo.getData(); QwFrientNoticeDTO qwFrientNoticeDTO = externalUserPojo.getData();
int type = externalUserPojo.getType(); int type = externalUserPojo.getType();
String wxUserId = qwFrientNoticeDTO.getWxUserId(); String wxUserId = qwFrientNoticeDTO.getWxUserId();
MemberUnionidRelatedDTO memberUnionidRelatedDTO = EntityUtil.changeEntityByJSON(MemberUnionidRelatedDTO.class, qwFrientNoticeDTO); MemberUnionidRelatedDTO memberUnionidRelatedDTO = EntityUtil.changeEntityByJSON(MemberUnionidRelatedDTO.class, qwFrientNoticeDTO);
if (type == DealQywxExternalUserPojo.DealType.add.getType()) { if (type == DealQywxExternalUserPojo.DealType.add.getType()) {
log.info("新增外部联系人回调开始:{}", params);
this.addMemberUnionidRelatedNew(memberUnionidRelatedDTO, wxUserId); this.addMemberUnionidRelatedNew(memberUnionidRelatedDTO, wxUserId);
} else if (type == DealQywxExternalUserPojo.DealType.edit.getType()) { } else if (type == DealQywxExternalUserPojo.DealType.edit.getType()) {
log.info("编辑外部联系人回调开始:{}", params);
this.editMemberUnionidRelatedProcess(memberUnionidRelatedDTO, wxUserId); this.editMemberUnionidRelatedProcess(memberUnionidRelatedDTO, wxUserId);
} else if (type == DealQywxExternalUserPojo.DealType.del.getType()) { } else if (type == DealQywxExternalUserPojo.DealType.del.getType()) {
log.info("删除外部联系人回调开始:{}", params);
String changeType = qwFrientNoticeDTO.getChangeType(); String changeType = qwFrientNoticeDTO.getChangeType();
//欧泊莱定制 //欧泊莱定制
if ("del_follow_user".equals(changeType)) { if ("del_follow_user".equals(changeType)) {
...@@ -348,187 +399,194 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -348,187 +399,194 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
@Override @Override
public String addMemberUnionidRelatedNew(MemberUnionidRelatedDTO dto, String wxUserId) { public String addMemberUnionidRelatedNew(MemberUnionidRelatedDTO dto, String wxUserId) {
//解析组装信息 String corpId = dto.getCorpid();
TabHaobanWxEnterprise wxEnterprise = this.wxEnterpriseService.getEnterpriseBycorpId(corpId) ;
if (wxEnterprise == null) {
log.info("企业不存在,corpid={}", corpId);
return null;
}
String wxEnterpriseId = wxEnterprise.getWxEnterpriseId() ;
TabHaobanStaff staff = this.staffMapper.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId) ;
if(null == staff) {
log.info("staff不存在,wxEnterpriseId={},wxUserid={}", wxEnterpriseId , wxUserId);
return null ;
}
dto.setWxEnterpriseId(wxEnterpriseId);
dto.setStaffId(staff.getStaffId());
// 新增unionid表
dto = getMemberUnionidRelatedDTONew(dto, wxUserId); dto = getMemberUnionidRelatedDTONew(dto, wxUserId);
if (null == dto) { if (null == dto) {
log.info("没处理完成-等下一次处理"); log.info("新增外部联系人,代开发和第三方回调未全部收到,直接返回");
return null; return null;
} }
insertExternalClerkRelatedNew(dto, wxUserId); this.insertExternalClerkRelatedNew(dto, wxUserId,staff.getStaffName());
return dto.getMemberUnionidRelatedId(); return dto.getMemberUnionidRelatedId();
} }
/** private void insertExternalClerkRelatedNew(MemberUnionidRelatedDTO dto, String wxUserId , String staffName) {
* 创建关联关系 log.info("新增外部联系人,处理好友表={},wxUserId={}", JSON.toJSONString(dto),wxUserId);
*
* @param dto
*/
private void insertExternalClerkRelatedNew(MemberUnionidRelatedDTO dto, String wxUserId) {
log.info("新增外部联系人,创建关联关系:{}", JSON.toJSONString(dto));
String wxEnterpriseId = dto.getWxEnterpriseId(); String wxEnterpriseId = dto.getWxEnterpriseId();
String name = dto.getExternalName(); String name = dto.getExternalName();
String createTime = dto.getAddCreateTime(); String createTime = dto.getAddCreateTime();
String externalUserId = dto.getExternalUserid(); String externalUserId = dto.getExternalUserid();
String unionid = dto.getUnionid();
String state = dto.getState();
boolean isHmUnionid = false;
String mobile = "";
log.info("新增外部联系人,wxEnterpriseId:{}", wxEnterpriseId);
if (StringUtils.isAnyBlank(wxUserId, wxEnterpriseId, name, createTime, externalUserId)) { if (StringUtils.isAnyBlank(wxUserId, wxEnterpriseId, name, createTime, externalUserId)) {
log.error("新增外部联系人,缺少必须字段:wxUserId:{},wxEnterpriseId:{},name:{},createTime:{},externalUserId:{}", wxUserId, wxEnterpriseId, name, createTime, externalUserId); log.error("新增外部联系人,缺少必须字段:wxUserId:{},wxEnterpriseId:{},name:{},createTime:{},externalUserId:{}", wxUserId, wxEnterpriseId, name, createTime, externalUserId);
//checkQywxSettingApiService.saveFriendCallback(wxEnterpriseId,null, dto);
return;
}
TabHaobanStaff staff = staffService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
if (staff == null) {
log.info("staff不存在:{},{}", dto.getUnionid(), wxUserId);
return; return;
} }
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId); WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
if (qwDTO == null) { if (qwDTO == null) {
log.info("未查询到企业:wxEnterpriseId:{}", wxEnterpriseId); log.info("企业不存在,wxEnterpriseId={}", wxEnterpriseId);
return; return;
} }
String staffId = staff.getStaffId(); String unionid = dto.getUnionid();
String staffName = staff.getStaffName(); String state = dto.getState();
log.info("新增外部联系人,staffId={}", staffId); String staffId = dto.getStaffId();
boolean isHmUnionid = false;
String mobile = "";
String memberLabelId = "";
Long hmId = null;
Long linkId = null ;
String hyClerkId = null ;
StaffClerkRelationDTO staffClerkRelationDTO = null; StaffClerkRelationDTO staffClerkRelationDTO = null;
boolean mainStoreCheck = true ;
//活码处理 "DT" "HM" //活码处理 "DT" "HM"
WxUserAddLogQDTO wxUserAddLogQDTO = new WxUserAddLogQDTO();
String memberLabelId = "";
if (StringUtils.isNotBlank(state) && (state.startsWith(Manage3Constants.HM) || state.startsWith(Manage3Constants.DT))) { if (StringUtils.isNotBlank(state) && (state.startsWith(Manage3Constants.HM) || state.startsWith(Manage3Constants.DT))) {
mainStoreCheck = false ;
String id = state.substring(2); String id = state.substring(2);
Long hmId = null; if(state.startsWith(Manage3Constants.HM)) {
HmQrcodeDTO hmQrcodeDTO = null;
if (state.contains(Manage3Constants.HM)) {
hmId = Convert.toLong(id); hmId = Convert.toLong(id);
log.info("普通活码={}", hmId); }else if(state.startsWith(Manage3Constants.DT)) {
hmQrcodeDTO = hmQrcodeApiService.getSimpleById(hmId); KeyDataLinkBO linkData = keyDataService.getDataForHmLink(id);
if (hmQrcodeDTO == null) { if(null == linkData) {
log.error("活码为空:{}", hmId); log.error("活码keyDate查询不到,id={}", id);
return; return ;
} }
memberLabelId = hmQrcodeDTO.getMemberLabelId(); linkId = linkData.getLinkId();
wxUserAddLogQDTO.setHmId(hmId); hmId = linkData.getHmId();
//处理活码导购 mobile = linkData.getMobile();
if (hmQrcodeDTO.getHmType() == 1) { if(StringUtils.isNotBlank(linkData.getUnionid())) {
staffClerkRelationDTO = staffClerkRelationService.getBindByClerkId(hmQrcodeDTO.getClerkId(), wxEnterpriseId); unionid = linkData.getUnionid();
} else if (hmQrcodeDTO.getHmType() == 2) { isHmUnionid = true;
HmClerkRelationDTO hmClerkRelationDTO = null;
//有主门店导购绑定主导购,没有主门店导购绑定第一个导购,其余随机
TabHaobanClerkMainStoreRelated mainStoreRelated = clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId);
if (mainStoreRelated != null) {
StaffClerkRelationDTO relationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStoreRelated.getStoreId());
hmClerkRelationDTO = hmClerkRelationApiService.getHmClerkByHmIdAndClerkId(hmId, relationDTO.getClerkId());
if (hmClerkRelationDTO == null) {
hmClerkRelationDTO = hmClerkRelationApiService.getOneHmClerkByHmIdAndStaffId(hmId, staffId);
if (hmClerkRelationDTO == null) {
hmClerkRelationDTO = hmClerkRelationApiService.getOneHmClerkByHmId(hmId);
}
}
} else {
hmClerkRelationDTO = hmClerkRelationApiService.getOneHmClerkByHmId(hmId);
}
staffClerkRelationDTO = staffClerkRelationService.getBindByClerkId(hmClerkRelationDTO.getClerkId(), wxEnterpriseId);
}
} else if (state.contains(Manage3Constants.DT)) {
KeyDataLinkBO dataForHmLink = keyDataService.getDataForHmLink(id);
Long linkId = dataForHmLink.getLinkId();
hmId = dataForHmLink.getHmId();
mobile = dataForHmLink.getMobile();
unionid = dataForHmLink.getUnionid();
log.info("动态活码hmId={},linkId={},unionid={}", hmId, linkId, unionid);
isHmUnionid = true;
wxUserAddLogQDTO.setLinkId(linkId);
wxUserAddLogQDTO.setHmId(hmId);
hmQrcodeDTO = hmQrcodeApiService.getSimpleById(hmId);
if (hmQrcodeDTO == null) {
log.error("活码动态为空,hmId:{}", hmId);
return;
} }
staffClerkRelationDTO = staffClerkRelationService.getBindByClerkId(hmQrcodeDTO.getClerkId(), wxEnterpriseId);
HmLinkBO hmLinkBO = hmLinkService.getByLinkId(wxEnterpriseId, null, linkId);
if (hmLinkBO != null) {
memberLabelId = hmLinkBO.getMemberLabelId();
}
} else {
//不是我们的活码
TabHaobanClerkMainStoreRelated mainStoreRelated = clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId);
if (mainStoreRelated == null) {
log.info("【新增外部联系人】主门店为空:{}", staffId);
// 无主门店仅发送欢迎语
sendWelcome(dto, qwDTO, null, staffId, null);
return;
}
staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStoreRelated.getStoreId());
} }
if (hmId != null && hmQrcodeDTO != null) { log.info("活码{},hmId={},linkId={},isHmUnionid={},unionid={},mobile={}", state,hmId, linkId, isHmUnionid,unionid,mobile);
log.info("计算活码的上限和加好友数量:{}", hmId); HmQrcodeDTO hmDTO = hmQrcodeApiService.getSimpleById(hmId);
hmQrcodeApiService.updateAddNumById(hmId, hmQrcodeDTO.getClerkId()); if (hmDTO == null) {
log.error("活码查询不到,hmId:{}", hmId);
return;
} }
} else { memberLabelId = this.getMemberLabel(state, hmDTO.getMemberLabelId(), wxEnterpriseId, linkId) ;
hyClerkId = this.getHmClerk(hmDTO,wxEnterpriseId,staffId) ;
if(StringUtils.isBlank(hyClerkId)) {
log.info("【新增外部联系人】hm未获取到导购,staffId={}",staffId);
return ;
}
staffClerkRelationDTO = staffClerkRelationService.getBindByClerkId(hyClerkId, wxEnterpriseId);
}
if(mainStoreCheck) {
TabHaobanClerkMainStoreRelated mainStoreRelated = clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId); TabHaobanClerkMainStoreRelated mainStoreRelated = clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId);
if (mainStoreRelated == null) { if (mainStoreRelated == null) {
log.info("【新增外部联系人】主门店为空:staffId={}", staffId); log.info("【新增外部联系人】主门店为空:staffId={}", staffId);
// 无主门店仅发送欢迎语 this.sendWelcome(dto, qwDTO, null, staffId, null);
sendWelcome(dto, qwDTO, null, staffId, null);
return; return;
} }
staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStoreRelated.getStoreId()); staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStoreRelated.getStoreId());
} }
if (staffClerkRelationDTO == null) { if (staffClerkRelationDTO == null) {
log.info("【新增外部联系人】导购和clerk关联为空"); log.info("【新增外部联系人】staff无关联导购,staffId={}",staffId);
return; return;
} }
String enterpriseId = staffClerkRelationDTO.getEnterpriseId(); String enterpriseId = staffClerkRelationDTO.getEnterpriseId();
hyClerkId = staffClerkRelationDTO.getClerkId() ;
log.info("新增外部联系人,enterpriseId={},clerk={}",enterpriseId,hyClerkId);
TabHaobanWxEnterpriseRelated wxEnterpriseRelated = wxEnterpriseRelatedService.getByEnterpriseId(wxEnterpriseId, enterpriseId); TabHaobanWxEnterpriseRelated wxEnterpriseRelated = wxEnterpriseRelatedService.getByEnterpriseId(wxEnterpriseId, enterpriseId);
if (wxEnterpriseRelated == null) { if (wxEnterpriseRelated == null) {
log.info("没有存在企业关联:{},{}", staffClerkRelationDTO.getWxEnterpriseId(), enterpriseId); log.info("加好友失败,商户未关联好办企业,wxEnterpriseId={},enterpriseId={}", wxEnterpriseId, enterpriseId);
return; return;
} }
String memberId = null; String memberId = null;
if (StringUtils.isNotBlank(unionid)) { boolean addByWelcome = this.wxEnterpriseRelatedService.getAddByWelcomeFlag(wxEnterpriseRelated,unionid,isHmUnionid) ;
log.info("有unionid处理:wxEnterpriseId:{},unionid:{}", wxEnterpriseId, unionid); log.info("新增外部联系人,是否通过欢迎语={},wxEnterpriseId:{},enterpriseId={},unionid={}",addByWelcome,wxEnterpriseId,enterpriseId,unionid);
if(addByWelcome) {
unionid = null ;
dto.setUnionid(unionid); dto.setUnionid(unionid);
memberId = addExternalClerkRelated(dto, staffId, staffClerkRelationDTO, wxEnterpriseRelated, isHmUnionid, mobile, wxUserId); this.addFriendByWelcome(dto, staffClerkRelationDTO,qwDTO);
} else { }else {
log.info("发送欢迎语逻辑:wxEnterpriseId:{}", wxEnterpriseId); dto.setUnionid(unionid);
addFriendByWelcome(dto, staffClerkRelationDTO); memberId = addExternalClerkRelated(dto, staffId, staffClerkRelationDTO, wxEnterpriseRelated, mobile,qwDTO);
}
// 更新后面加好友数
if(null != hmId) {
this.hmQrcodeApiService.updateAddNumById(hmId, hyClerkId);
}
//设置会员标签
this.setMemberTag(enterpriseId, memberLabelId, memberId);
//加好友增加数量
this.staffService.updateAddNumById(staffId);
WxUserAddLogQDTO wxUserAddLogQDTO = new WxUserAddLogQDTO();
wxUserAddLogQDTO.setLinkId(linkId);
wxUserAddLogQDTO.setHmId(hmId);
wxUserAddLogQDTO.setWxEnterpriseId(wxEnterpriseId);
wxUserAddLogQDTO.setEnterpriseId(enterpriseId);
wxUserAddLogQDTO.setMemberId(memberId);
wxUserAddLogQDTO.setUnionid(unionid);
wxUserAddLogQDTO.setDelFlag(false);
wxUserAddLogQDTO.setExternalUserid(externalUserId);
wxUserAddLogQDTO.setStaffId(staffId);
wxUserAddLogQDTO.setStaffName(staffName);
wxUserAddLogQDTO.setClerkId(hyClerkId);
this.wxUserAddLogService.save(wxUserAddLogQDTO);
}
// 获取hm关联的导购
private String getHmClerk(HmQrcodeDTO hmDTO , String wxEnterpriseId, String staffId) {
Long hmId = hmDTO.getHmId() ;
if (hmDTO.getHmType() == 1) {
return hmDTO.getClerkId() ;
} else if (hmDTO.getHmType() == 2) {
//有主门店导购绑定主导购,没有主门店导购绑定第一个导购,其余随机
HmClerkRelationDTO hmClerkRelationDTO = null;
TabHaobanClerkMainStoreRelated mainStoreRelated = clerkMainStoreRelatedService.getMainStoreByStaffId(staffId, wxEnterpriseId);
if (mainStoreRelated != null) {
StaffClerkRelationDTO relationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStoreRelated.getStoreId());
hmClerkRelationDTO = hmClerkRelationApiService.getHmClerkByHmIdAndClerkId(hmId, relationDTO.getClerkId());
if (hmClerkRelationDTO == null) {
hmClerkRelationDTO = hmClerkRelationApiService.getOneHmClerkByHmIdAndStaffId(hmId, staffId);
if (hmClerkRelationDTO == null) {
hmClerkRelationDTO = hmClerkRelationApiService.getOneHmClerkByHmId(hmId);
}
}
} else {
hmClerkRelationDTO = hmClerkRelationApiService.getOneHmClerkByHmId(hmId);
}
return hmClerkRelationDTO.getClerkId() ;
} }
return null ;
if (StringUtils.isNoneBlank(memberId, memberLabelId)) { }
//设置会员标签
setMemberTag(staffClerkRelationDTO, memberLabelId, memberId); // 获取hm配置的会员标签
private String getMemberLabel(String state , String hmMemberLableId , String wxEnterpriseId, Long linkId) {
if(state.startsWith(Manage3Constants.HM)) {
return hmMemberLableId ;
}
if(null != linkId) {
HmLinkBO link = hmLinkService.getByLinkId(wxEnterpriseId, null, linkId);
if (link != null) {
return link.getMemberLabelId();
}
} }
return null ;
//加好友增加数量
staffService.updateAddNumById(staffId);
log.info("插入加好友日志");
wxUserAddLogQDTO.setWxEnterpriseId(wxEnterpriseId);
wxUserAddLogQDTO.setEnterpriseId(enterpriseId);
wxUserAddLogQDTO.setMemberId(memberId);
wxUserAddLogQDTO.setUnionid(unionid);
wxUserAddLogQDTO.setDelFlag(false);
wxUserAddLogQDTO.setExternalUserid(externalUserId);
wxUserAddLogQDTO.setStaffId(staffId);
wxUserAddLogQDTO.setStaffName(staffName);
wxUserAddLogQDTO.setClerkId(staffClerkRelationDTO.getClerkId());
wxUserAddLogService.save(wxUserAddLogQDTO);
} }
/** /**
* 设置活码标签 * 设置活码标签
*
* @param staffClerkRelationDTO
* @param memberLabelId
* @param memberId
*/ */
private void setMemberTag(StaffClerkRelationDTO staffClerkRelationDTO, String memberLabelId, String memberId) { private void setMemberTag(String enterpriseId, String memberLabelId, String memberId) {
log.info("会员打标签,memberLabelId:{},memberId:{}", memberLabelId, memberId); log.info("会员打标签,memberLabelId:{},memberId:{},enterpriseId={}", memberLabelId, memberId,enterpriseId);
if (StringUtils.isNotBlank(memberLabelId)) { if (StringUtils.isNoneBlank(enterpriseId,memberLabelId,memberId)) {
MemberTagSingleDTO tagSingleDTO = new MemberTagSingleDTO(); MemberTagSingleDTO tagSingleDTO = new MemberTagSingleDTO();
tagSingleDTO.setEnterpriseId(staffClerkRelationDTO.getEnterpriseId()); tagSingleDTO.setEnterpriseId(enterpriseId);
tagSingleDTO.setOptType(0); tagSingleDTO.setOptType(0);
tagSingleDTO.setMemberId(memberId); tagSingleDTO.setMemberId(memberId);
tagSingleDTO.setTagItemIdList(Collections.singletonList(memberLabelId)); tagSingleDTO.setTagItemIdList(Collections.singletonList(memberLabelId));
...@@ -537,44 +595,25 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -537,44 +595,25 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
/** /**
* 根据统一开平和不同开平 处理不同的添加好友关系 * 不是通过欢迎语的添加好友
*
* @param dto
* @param staffId
* @param staffClerkRelationDTO
* @param wxEnterpriseRelated
*/ */
private String addExternalClerkRelated(MemberUnionidRelatedDTO dto, String staffId, StaffClerkRelationDTO staffClerkRelationDTO, private String addExternalClerkRelated(MemberUnionidRelatedDTO dto, String staffId, StaffClerkRelationDTO staffClerkRelationDTO,
TabHaobanWxEnterpriseRelated wxEnterpriseRelated, boolean isHmUnionid, String mobile, String wxUserId) { TabHaobanWxEnterpriseRelated wxEnterpriseRelated, String mobile,WxEnterpriseQwDTO qwDTO) {
String wxEnterpriseId = dto.getWxEnterpriseId(); String wxEnterpriseId = dto.getWxEnterpriseId();
String name = dto.getExternalName(); String name = dto.getExternalName();
String createTime = dto.getAddCreateTime();
String externalUserid = dto.getExternalUserid(); String externalUserid = dto.getExternalUserid();
String avatar = dto.getAvatar(); String avatar = dto.getAvatar();
if (wxEnterpriseRelated.getMemberOpenCardFlag() == 1 && (!isHmUnionid)) {
log.info("不同开平,走欢迎语逻辑,wxEnterpriseId:{}", wxEnterpriseId);
addFriendByWelcome(dto, staffClerkRelationDTO);
return "";
}
log.info("同一开平,创建关联关系...");
String unionId = dto.getUnionid(); String unionId = dto.getUnionid();
if (StringUtils.isBlank(unionId)) {
log.info("unionid不存在,走发送欢迎语逻辑:wxEnterpriseId:{}", wxEnterpriseId);
addFriendByWelcome(dto, staffClerkRelationDTO);
return "";
}
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
//新增导购和外部联系人关系 //新增导购和外部联系人关系
String clerkId = staffClerkRelationDTO.getClerkId(); String clerkId = staffClerkRelationDTO.getClerkId();
String clerkCode = staffClerkRelationDTO.getClerkCode(); String clerkCode = staffClerkRelationDTO.getClerkCode();
String enterpriseId = staffClerkRelationDTO.getEnterpriseId(); String enterpriseId = staffClerkRelationDTO.getEnterpriseId();
ClerkDTO clerk = clerkService.getClerkByClerkCode(enterpriseId, clerkCode); ClerkDTO clerk = clerkService.getClerkByClerkCode(enterpriseId, clerkCode);
log.info("【新增外部联系人】clerkCode={},unionid:{}", clerkCode, unionId); log.info("【新增外部联系人】创建member,clerkCode={},unionid:{}", clerkCode, unionId);
if (clerk == null) { if (clerk == null) {
log.info("【新增外部联系人】导购为空:{},{}", clerkCode, unionId); log.info("【新增外部联系人】创建member,导购为空返回:{}", clerkCode);
return ""; return "";
} }
String qrcodeParam = clerk.getQrcodeParam(); String qrcodeParam = clerk.getQrcodeParam();
if (StringUtils.isBlank(qrcodeParam)) { if (StringUtils.isBlank(qrcodeParam)) {
powerService.saveClerkQrCode(clerk.getClerkId()); powerService.saveClerkQrCode(clerk.getClerkId());
...@@ -582,93 +621,105 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -582,93 +621,105 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
qrcodeParam = clerk.getQrcodeParam(); qrcodeParam = clerk.getQrcodeParam();
} }
if (StringUtils.isBlank(qrcodeParam)) { if (StringUtils.isBlank(qrcodeParam)) {
log.info("不能生产导购二维码:{}", JSONObject.toJSONString(clerk)); log.info("新增外部联系人,创建member,导购二维码为空,clerkId={}", clerk.getClerkId());
return ""; return "";
} }
MemberDTO member = null; String memberId = null ;
if (isHmUnionid) { if (StringUtils.isNotBlank(mobile)) {
if (StringUtils.isNotBlank(mobile)) { memberId = memberService.getMemberIdByPhoneNumber(mobile, enterpriseId);
log.info("根据手机号查询会员:{},{}", enterpriseId, mobile); }
member = memberService.getMemberByPhone(enterpriseId, mobile); if (null == memberId) {
QywxMemberQDTO qdto = new QywxMemberQDTO() ;
qdto.setEnterpriseId(enterpriseId);
qdto.setNick(name);
qdto.setPhotoUrl(avatar);
qdto.setQrcodeParam(qrcodeParam);
qdto.setUnionId(unionId);
if(wxEnterpriseRelated.getWxEnterpriseType()==0) {
qdto.setUserId(externalUserid);
}
qdto.setSence(2);
com.gic.api.base.commons.ServiceResponse<MemberSimpleDetailDTO> resp = this.memberEntranceApiService.enterpriseWechatByFriendEntrance(qdto);
log.info("新增外部联系人,创建member,resp={},param={}",JSON.toJSON(resp),JSON.toJSONString(qdto));
if(resp.isSuccess()) {
MemberSimpleDetailDTO member = resp.getResult() ;
memberId = member.getMemberId() ;
}else {
log.info(JSON.toJSONString(resp));
} }
} }
if (memberId == null) {
if (member == null) { log.info("新增外部联系人,创建member失败,unionid={},外部联系人id={},", unionId,externalUserid);
log.info("【新增外部联系人会员】enterpriseId={},unionId={},name={},avatar={},QrcodeParam={}", enterpriseId, unionId, name, avatar, qrcodeParam);
member = memberOpenCardBusinessService.getMemberByQywxChannelParam(enterpriseId, unionId, "", name, avatar, qrcodeParam);
}
if (member == null) {
log.info("生产会员memberid失败:{}", unionId);
return ""; return "";
} }
String memberId = member.getMemberId();
String storeId = staffClerkRelationDTO.getStoreId(); String storeId = staffClerkRelationDTO.getStoreId();
List<TabHaobanExternalClerkRelated> externalClerkRelateds = externalClerkRelatedService.listByExTernalUseridAndWxUserIdAllStatus(wxEnterpriseId, externalUserid, staffId); this.saveExternalClerk(memberId, staffId, dto, staffClerkRelationDTO , 1);
this.sendWelcome(dto, qwDTO, enterpriseId, staffId, clerkId);
//同步好友标签
this.pushTagSync(memberId, wxEnterpriseId, enterpriseId);
//回调给会员,更新是否为企微好友
log.info("通知会员 合并会员后更新为企微好友,memberId:{}", memberId);
this.memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
//定制事件订阅
addDelFriendEvent(unionId, clerkId, wxEnterpriseId, enterpriseId, memberId, storeId, 1);
return memberId;
}
private void saveExternalClerk(String memberId ,String staffId , MemberUnionidRelatedDTO dto , StaffClerkRelationDTO staffClerkRelation , int status) {
String wxEnterpriseId = dto.getWxEnterpriseId() ;
String externalUserid = dto.getExternalUserid();
String relationKey = SecureUtil.md5(staffId + externalUserid); String relationKey = SecureUtil.md5(staffId + externalUserid);
String memberUnionidRelatedId = dto.getMemberUnionidRelatedId(); String memberUnionidRelatedId = dto.getMemberUnionidRelatedId();
if (CollectionUtils.isEmpty(externalClerkRelateds)) { String name = dto.getExternalName();
log.info("新增TabHaobanExternalClerkRelated"); String createTime = dto.getAddCreateTime();
String avatar = dto.getAvatar();
String unionId = dto.getUnionid();
String enterpriseId = staffClerkRelation.getEnterpriseId() ;
String clerkId = staffClerkRelation.getClerkId() ;
String storeId = staffClerkRelation.getStoreId();
List<TabHaobanExternalClerkRelated> externalList = externalClerkRelatedService.listByExTernalUseridAndWxUserIdAllStatus(wxEnterpriseId, externalUserid, staffId);
if(CollectionUtils.isEmpty(externalList)) {
log.info("新增好友表");
TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated(); TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated();
related.setAddCreateTime(createTime); related.setAddCreateTime(createTime);
related.setClerkId(clerkId); related.setClerkId(clerkId);
related.setEnterpriseId(enterpriseId); related.setEnterpriseId(enterpriseId);
related.setExternalName(name); related.setExternalName(name);
related.setExternalUserId(externalUserid); related.setExternalUserId(externalUserid);
related.setSelfExternalUserid(dto.getSelfExternalUserid());
related.setStaffId(staffId); related.setStaffId(staffId);
related.setHeadUrl(dto.getAvatar()); related.setHeadUrl(avatar);
related.setMemberUnionidRelatedId(memberUnionidRelatedId); related.setMemberUnionidRelatedId(memberUnionidRelatedId);
related.setStoreId(storeId); related.setStoreId(storeId);
related.setRelationKey(relationKey); related.setRelationKey(relationKey);
related.setUnionid(unionId); related.setUnionid(unionId);
related.setWxEnterpriseId(wxEnterpriseId); related.setWxEnterpriseId(wxEnterpriseId);
related.setMemberId(memberId); related.setMemberId(memberId);
externalClerkRelatedService.insert(related); related.setStatusFlag(status);
} else { if(status==4) {
log.info("更新TabHaobanExternalClerkRelated"); related.setPushTimes(1);
TabHaobanExternalClerkRelated exsitDTO = externalClerkRelateds.get(0); }
this.externalClerkRelatedService.insert(related);
}else {
log.info("更新好友表");
TabHaobanExternalClerkRelated exsitDTO = externalList.get(0);
exsitDTO.setMemberId(memberId); exsitDTO.setMemberId(memberId);
exsitDTO.setMemberUnionidRelatedId(memberUnionidRelatedId); exsitDTO.setMemberUnionidRelatedId(memberUnionidRelatedId);
exsitDTO.setExternalUserId(externalUserid);
exsitDTO.setUnionid(unionId); exsitDTO.setUnionid(unionId);
exsitDTO.setRelationKey(relationKey); exsitDTO.setRelationKey(relationKey);
exsitDTO.setHeadUrl(dto.getAvatar()); exsitDTO.setHeadUrl(avatar);
exsitDTO.setStoreId(storeId); exsitDTO.setStoreId(storeId);
exsitDTO.setEnterpriseId(enterpriseId); exsitDTO.setEnterpriseId(enterpriseId);
exsitDTO.setClerkId(clerkId); exsitDTO.setClerkId(clerkId);
exsitDTO.setStatusFlag(1); if(StringUtils.isNotBlank(memberId) && exsitDTO.getStatusFlag() != 1) {
externalClerkRelatedService.update(exsitDTO); exsitDTO.setStatusFlag(1);
}
this.externalClerkRelatedService.update(exsitDTO);
} }
MemberUnionidRelatedDTO memberUnionidRelatedDTO = new MemberUnionidRelatedDTO();
memberUnionidRelatedDTO.setMemberUnionidRelatedId(memberUnionidRelatedId);
memberUnionidRelatedDTO.setEnterpriseId(enterpriseId);
memberUnionidRelatedDTO.setStaffId(staffId);
memberUnionidRelatedDTO.setUnionid(unionId);
memberUnionidRelatedDTO.setMemberId(memberId);
memberUnionRelatedService.update(memberUnionidRelatedDTO);
sendWelcome(dto, qwDTO, enterpriseId, staffId, clerkId);
//同步好友标签
pushTagSync(memberId, wxEnterpriseId, enterpriseId);
//回调给会员,更新是否为企微好友
log.info("通知会员 合并会员后更新为企微好友,memberId:{}", memberId);
memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
//定制事件订阅
addDelFriendEvent(unionId, clerkId, wxEnterpriseId, enterpriseId, memberId, storeId, 1);
return memberId;
} }
/** /**
* 欧泊莱定制需求 * 欧泊莱定制需求
*
* @param unionId
* @param clerkId
* @param enterpriseId
* @param memberId
* @param storeId
*/ */
private void addDelFriendEvent(String unionId, String clerkId, String wxEnterpriseId, String enterpriseId, String memberId, String storeId, Integer changeType) { private void addDelFriendEvent(String unionId, String clerkId, String wxEnterpriseId, String enterpriseId, String memberId, String storeId, Integer changeType) {
String addDelFriendEvent = config.getAddDelFriendEvent(); String addDelFriendEvent = config.getAddDelFriendEvent();
...@@ -741,53 +792,14 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -741,53 +792,14 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
* *
* @param dto * @param dto
*/ */
private void addFriendByWelcome(MemberUnionidRelatedDTO dto, StaffClerkRelationDTO staffClerkRelationDTO) { private void addFriendByWelcome(MemberUnionidRelatedDTO dto, StaffClerkRelationDTO staffClerkRelationDTO,WxEnterpriseQwDTO qwDTO) {
String staffId = staffClerkRelationDTO.getStaffId(); String staffId = staffClerkRelationDTO.getStaffId();
String clerkId = staffClerkRelationDTO.getClerkId(); String clerkId = staffClerkRelationDTO.getClerkId();
String relationKey = SecureUtil.md5(staffId + dto.getExternalUserid());
String wxEnterpriseId = staffClerkRelationDTO.getWxEnterpriseId();
String enterpriseId = staffClerkRelationDTO.getEnterpriseId(); String enterpriseId = staffClerkRelationDTO.getEnterpriseId();
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
//发送欢迎语 //发送欢迎语
sendWelcome(dto, qwDTO, enterpriseId, staffId, clerkId); sendWelcome(dto, qwDTO, enterpriseId, staffId, clerkId);
//保存好友关系 //保存好友关系
List<TabHaobanExternalClerkRelated> externalClerkRelateds = externalClerkRelatedService.listByExTernalUseridAndWxUserIdAllStatus(wxEnterpriseId, dto.getExternalUserid(), staffId); this.saveExternalClerk(null, staffId, dto, staffClerkRelationDTO, 4);
String memberUnionidRelatedId = dto.getMemberUnionidRelatedId();
if (CollectionUtils.isEmpty(externalClerkRelateds)) {
log.info("新增TabHaobanExternalClerkRelated");
TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated();
related.setAddCreateTime(dto.getAddCreateTime());
related.setClerkId(staffClerkRelationDTO.getClerkId());
related.setEnterpriseId(enterpriseId);
related.setExternalName(dto.getExternalName());
related.setExternalUserId(dto.getExternalUserid());
related.setStaffId(staffId);
related.setMemberUnionidRelatedId(memberUnionidRelatedId);
related.setStoreId(staffClerkRelationDTO.getStoreId());
related.setRelationKey(relationKey);
related.setStatusFlag(4);
related.setPushTimes(1);
related.setWxEnterpriseId(wxEnterpriseId);
related.setHeadUrl(dto.getAvatar());
externalClerkRelatedService.insert(related);
} else {
log.info("更新TabHaobanExternalClerkRelated");
TabHaobanExternalClerkRelated exsitDTO = externalClerkRelateds.get(0);
exsitDTO.setMemberUnionidRelatedId(memberUnionidRelatedId);
exsitDTO.setExternalUserId(dto.getExternalUserid());
exsitDTO.setStoreId(staffClerkRelationDTO.getStoreId());
exsitDTO.setEnterpriseId(enterpriseId);
exsitDTO.setClerkId(staffClerkRelationDTO.getClerkId());
exsitDTO.setRelationKey(relationKey);
exsitDTO.setHeadUrl(dto.getAvatar());
exsitDTO.setStatusFlag(4);
externalClerkRelatedService.update(exsitDTO);
}
MemberUnionidRelatedDTO memberUnionidRelatedDTO = new MemberUnionidRelatedDTO();
memberUnionidRelatedDTO.setMemberUnionidRelatedId(memberUnionidRelatedId);
memberUnionidRelatedDTO.setEnterpriseId(enterpriseId);
memberUnionidRelatedDTO.setStaffId(staffId);
memberUnionRelatedService.update(memberUnionidRelatedDTO);
} }
/** /**
...@@ -1038,15 +1050,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1038,15 +1050,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
* @param dto * @param dto
* @return * @return
*/ */
public MemberUnionidRelatedDTO getMemberUnionidRelatedDTONew(MemberUnionidRelatedDTO dto, String wxUserId) { private MemberUnionidRelatedDTO getMemberUnionidRelatedDTONew(MemberUnionidRelatedDTO dto, String wxUserId) {
log.info("【新增外部联系人回调】dto={},wxUserId={}", JSON.toJSONString(dto), wxUserId); log.info("【新增外部联系人】dto={},wxUserId={}", JSON.toJSONString(dto), wxUserId);
String corpId = dto.getCorpid(); String wxEnterpriseId = dto.getWxEnterpriseId() ;
TabHaobanWxApplication tabHaobanWxApplication = wxApplicationMapper.selectByCorpId(corpId, null);
if (tabHaobanWxApplication == null) {
log.info("查询tab_haoban_wx_application为空:{}", corpId);
return null;
}
String wxEnterpriseId = tabHaobanWxApplication.getWxEnterpriseId();
String suiteid = dto.getSuiteid(); String suiteid = dto.getSuiteid();
String externalUserid = dto.getExternalUserid(); String externalUserid = dto.getExternalUserid();
ExternalUserDTO externalUserDTO; ExternalUserDTO externalUserDTO;
...@@ -1057,58 +1063,49 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1057,58 +1063,49 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
checkQywxSettingApiService.saveFriendCallback(wxEnterpriseId, externalUserDTO, dto); checkQywxSettingApiService.saveFriendCallback(wxEnterpriseId, externalUserDTO, dto);
if (externalUserDTO == null) { if (externalUserDTO == null) {
log.info("【新增外部联系人回调】失败,查询好友信息失败"); log.info("【新增外部联系人】查询好友失败,externalUserid={}",externalUserid);
return null; return null;
} }
dto.setWxEnterpriseId(wxEnterpriseId); dto.setWxEnterpriseId(wxEnterpriseId);
dto.setExternalName(EmojiFilterUtil.removeAllEmoji(externalUserDTO.getName())); dto.setExternalName(EmojiFilterUtil.removeAllEmoji(externalUserDTO.getName()));
dto.setAddCreateTime(externalUserDTO.getAddCreateTime()); dto.setAddCreateTime(externalUserDTO.getAddCreateTime());
dto.setAvatar(externalUserDTO.getAvatar()); if(StringUtils.isNotEmpty(externalUserDTO.getAvatar())) {
if (SELF_APP.equals(suiteid)) { dto.setAvatar(externalUserDTO.getAvatar());
}
if(StringUtils.isNoneBlank(externalUserDTO.getUnionId())) {
dto.setUnionid(externalUserDTO.getUnionId()); dto.setUnionid(externalUserDTO.getUnionId());
}
if (SELF_APP.equals(suiteid)) {
dto.setSelfExternalUserid(externalUserDTO.getExternalUserId()); dto.setSelfExternalUserid(externalUserDTO.getExternalUserId());
// 代开发回调过来的外部联系人id设置null
dto.setExternalUserid(null); dto.setExternalUserid(null);
dto.setAvatar(externalUserDTO.getAvatar());
} else { } else {
dto.setExternalUserid(externalUserDTO.getExternalUserId()); dto.setExternalUserid(externalUserDTO.getExternalUserId());
} }
String key = "external" + dto.getWxEnterpriseId() + "_" + dto.getExternalName() + "_" + dto.getAddCreateTime(); String key = "external" + dto.getWxEnterpriseId() + "_" + dto.getExternalName() + "_" + dto.getAddCreateTime();
String lockKey = key + "-lock"; String lockKey = key + "-lock";
RedisUtil.lock(lockKey, 10L); RedisUtil.lock(lockKey, 10L);
MemberUnionidRelatedDTO cacheDTO = RedisUtil.getCache(key, MemberUnionidRelatedDTO.class);
MemberUnionidRelatedDTO midRelatedDto = RedisUtil.getCache(key, MemberUnionidRelatedDTO.class); if (cacheDTO == null) {
if (midRelatedDto == null) { log.info("只收到一个回调,数据写入缓存后返回={}", JSON.toJSONString(dto));
log.info("redis缓存中无该好友数据,插入数据:{}", JSON.toJSONString(dto));
String memberUnionidRelatedId = memberUnionRelatedService.addMemberUnionidRelated(dto);
dto.setMemberUnionidRelatedId(memberUnionidRelatedId);
RedisUtil.setCache(key, dto, 180L); RedisUtil.setCache(key, dto, 180L);
RedisUtil.unlock(lockKey); RedisUtil.unlock(lockKey);
return null; return null;
} }
dto.setUnionid(StringUtils.isBlank(dto.getUnionid()) ? midRelatedDto.getUnionid() : dto.getUnionid()); dto.setUnionid(StringUtils.isBlank(dto.getUnionid()) ? cacheDTO.getUnionid() : dto.getUnionid());
dto.setExternalUserid(StringUtils.isBlank(dto.getExternalUserid()) ? midRelatedDto.getExternalUserid() : externalUserid); dto.setAvatar(StringUtils.isBlank(dto.getAvatar()) ? cacheDTO.getAvatar() : dto.getAvatar());
dto.setSelfExternalUserid(StringUtils.isBlank(dto.getSelfExternalUserid()) ? midRelatedDto.getSelfExternalUserid() : dto.getSelfExternalUserid()); dto.setExternalUserid(StringUtils.isBlank(dto.getExternalUserid()) ? cacheDTO.getExternalUserid() : externalUserid);
dto.setAvatar(StringUtils.isBlank(dto.getAvatar()) ? midRelatedDto.getAvatar() : dto.getAvatar()); dto.setSelfExternalUserid(StringUtils.isBlank(dto.getSelfExternalUserid()) ? cacheDTO.getSelfExternalUserid() : dto.getSelfExternalUserid());
dto.setMemberUnionidRelatedId(midRelatedDto.getMemberUnionidRelatedId());
if (StringUtils.isAnyBlank(dto.getExternalUserid(), dto.getSelfExternalUserid())) { if (StringUtils.isAnyBlank(dto.getExternalUserid(), dto.getSelfExternalUserid())) {
log.error("加好友异常、请检查配置是否正常(如:检查客户联系回调、老好办助手回调、代开发回调(是否配置多个回调、企微权限是否正常、密钥是否正确)、好办权限等),wxEnterpriseId:{}", wxEnterpriseId); log.error("新增外部联系人,只有一个外部联系人id,wxEnterpriseId:{}", wxEnterpriseId, dto.getExternalUserid());
return null; return null;
} }
log.info("好办和好办助手均已回调:{}", JSON.toJSONString(dto)); log.info("新增外部联系人,写unionid表数据={}", JSON.toJSONString(dto));
List<MemberUnionidRelatedDTO> relatedDTOS = memberUnionRelatedService.listBySelfExternalUserId(dto.getStaffId(), dto.getWxEnterpriseId(), dto.getSelfExternalUserid()); String memberUnionidRelatedId = memberUnionRelatedService.addMemberUnionidRelated(dto);
//老的关联需要删除 dto.setMemberUnionidRelatedId(memberUnionidRelatedId);
if (CollectionUtils.isNotEmpty(relatedDTOS)) {
relatedDTOS.stream().filter(mid -> (!mid.getMemberUnionidRelatedId().equals(midRelatedDto.getMemberUnionidRelatedId())))
.forEach(mid -> {
mid.setStatusFlag(0);
memberUnionRelatedService.update(mid);
});
}
memberUnionRelatedService.update(dto);
RedisUtil.unlock(lockKey); RedisUtil.unlock(lockKey);
RedisUtil.delCache(key); RedisUtil.delCache(key);
return dto; return dto;
...@@ -1208,8 +1205,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1208,8 +1205,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
TabHaobanStaff staff = this.staffMapper.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId); TabHaobanStaff staff = this.staffMapper.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
String staffId = staff.getStaffId(); String staffId = staff.getStaffId();
dto.setStaffId(staffId); dto.setStaffId(staffId);
externalClerkRelatedService.delByUserIdAndExternalUserId(dto, wxUserId); externalClerkRelatedService.delByUserIdAndExternalUserId(dto);
memberUnionRelatedService.delMemberUnionidRelated(dto, staffId);
} }
private void editMemberUnionidRelatedProcess(MemberUnionidRelatedDTO dto, String wxUserId) { private void editMemberUnionidRelatedProcess(MemberUnionidRelatedDTO dto, String wxUserId) {
...@@ -1232,18 +1228,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1232,18 +1228,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return externalClerkRelatedService.getByMemberId(staffId, memberId); return externalClerkRelatedService.getByMemberId(staffId, memberId);
} }
@Override
public void cleanByCid(String cid) {
if (StringUtils.isNotBlank(cid)) {
TabHaobanWxEnterprise wxEnterprise = wxEnterpriseService.getEnterpriseBycorpId(cid);
if (null != wxEnterprise) {
memberUnionRelatedService.clean(wxEnterprise.getWxEnterpriseId());
}
} else {
memberUnionRelatedService.clean(null);
}
}
/** /**
* 老的单个素材群发的api * 老的单个素材群发的api
* *
...@@ -1620,94 +1604,36 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1620,94 +1604,36 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String unionId = dto.getUnionId(); String unionId = dto.getUnionId();
String externalUserId = dto.getExternalUserId(); String externalUserId = dto.getExternalUserId();
String memberId = dto.getMemberId(); String memberId = dto.getMemberId();
String storeId = dto.getStoreId();
String enterpriseId = dto.getEnterpriseId(); String enterpriseId = dto.getEnterpriseId();
String staffId = dto.getStaffId(); String storeId = dto.getStoreId();
String avatar = dto.getAvatar();
String clerkId = dto.getClerkId(); String clerkId = dto.getClerkId();
if (StringUtils.isAnyBlank(wxUserId, wxEnterpriseId, name, createTime, unionId, externalUserId, memberId, storeId, enterpriseId, staffId, clerkId)) { String staffId = dto.getStaffId();
log.info("【新增外部联系人】wxUserId={},wxEnterpriseId={},name={},createTime={},unionId ={},externalUserId ={},memberId ={},storeId ={},enterpriseId ={},staffId={},clerkId={}" if (StringUtils.isAnyBlank(wxUserId, wxEnterpriseId, name, createTime, externalUserId, storeId, enterpriseId, staffId, clerkId)) {
log.info("【刷新好友】参数有空wxUserId={},wxEnterpriseId={},name={},createTime={},unionId ={},externalUserId ={},memberId ={},storeId ={},enterpriseId ={},staffId={},clerkId={}"
+ "", wxUserId, wxEnterpriseId, name, createTime, unionId, externalUserId, memberId, storeId, enterpriseId, staffId, clerkId); + "", wxUserId, wxEnterpriseId, name, createTime, unionId, externalUserId, memberId, storeId, enterpriseId, staffId, clerkId);
return "参数不对"; return "参数不对";
} }
MemberUnionidRelatedDTO exsitDTO = memberUnionRelatedService.getByWxUserIdAndUnionId(wxEnterpriseId, staffId, unionId); String memberUnionidRelatedId = this.saveMemberUnionTable(dto) ;
String uuid = ""; StaffClerkRelationDTO staffClerkRelation = new StaffClerkRelationDTO() ;
if (exsitDTO == null) { staffClerkRelation.setEnterpriseId(enterpriseId);
exsitDTO = new MemberUnionidRelatedDTO(); staffClerkRelation.setStoreId(storeId);
exsitDTO.setAvatar(avatar); staffClerkRelation.setClerkId(clerkId);
exsitDTO.setExternalUserid(externalUserId); MemberUnionidRelatedDTO unionDTO = EntityUtil.changeEntityByJSON(MemberUnionidRelatedDTO.class, dto) ;
exsitDTO.setAddCreateTime(createTime); unionDTO.setExternalName(dto.getName());
exsitDTO.setEnterpriseId(enterpriseId); unionDTO.setExternalUserid(dto.getExternalUserId());
exsitDTO.setExternalName(name); unionDTO.setSelfExternalUserid(dto.getSelfExternalUserId());
exsitDTO.setSelfExternalUserid(dto.getSelfExternalUserId()); unionDTO.setMemberUnionidRelatedId(memberUnionidRelatedId);
exsitDTO.setWxEnterpriseId(wxEnterpriseId); this.saveExternalClerk(memberId, staffId, unionDTO, staffClerkRelation, 1);
exsitDTO.setStaffId(staffId); if(StringUtils.isNotBlank(memberId)) {
exsitDTO.setUnionid(unionId); this.pushTagSync(memberId, wxEnterpriseId, enterpriseId);
exsitDTO.setMemberId(memberId); log.info("通知会员 更新为企微好友 memberId:{}", memberId);
exsitDTO.setEnterpriseId(enterpriseId); memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
uuid = memberUnionRelatedService.addMemberUnionidRelated(exsitDTO);
} else {
uuid = exsitDTO.getMemberUnionidRelatedId();
exsitDTO.setAvatar(avatar);
exsitDTO.setExternalUserid(externalUserId);
exsitDTO.setUnionid(unionId);
exsitDTO.setAddCreateTime(createTime);
exsitDTO.setExternalName(name);
exsitDTO.setSelfExternalUserid(dto.getSelfExternalUserId());
exsitDTO.setMemberId(memberId);
exsitDTO.setEnterpriseId(enterpriseId);
exsitDTO.setStaffId(staffId);
memberUnionRelatedService.update(exsitDTO);
} }
String relationKey = SecureUtil.md5(staffId + externalUserId);
List<TabHaobanExternalClerkRelated> clerkRelateds = externalClerkRelatedService.listByExTernalUseridAndWxUserIdAllStatus(wxEnterpriseId, externalUserId, staffId);
if (CollectionUtils.isEmpty(clerkRelateds)) {
TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated();
related.setAddCreateTime(createTime);
related.setClerkId(clerkId);
related.setEnterpriseId(enterpriseId);
related.setExternalName(name);
related.setExternalUserId(externalUserId);
related.setStaffId(staffId);
related.setMemberUnionidRelatedId(uuid);
related.setStoreId(storeId);
related.setRelationKey(relationKey);
related.setUnionid(unionId);
related.setWxEnterpriseId(wxEnterpriseId);
related.setMemberId(memberId);
related.setHeadUrl(dto.getAvatar());
related.setStatusFlag(1);
externalClerkRelatedService.insert(related);
} else {
TabHaobanExternalClerkRelated external = clerkRelateds.get(0);
external.setMemberId(memberId);
external.setMemberUnionidRelatedId(uuid);
external.setExternalUserId(externalUserId);
external.setExternalName(name);
external.setRelationKey(relationKey);
external.setUnionid(unionId);
external.setStoreId(storeId);
external.setEnterpriseId(enterpriseId);
external.setClerkId(clerkId);
external.setStaffId(staffId);
external.setHeadUrl(dto.getAvatar());
external.setStatusFlag(1);
externalClerkRelatedService.update(external);
}
//同步标签
pushTagSync(memberId, wxEnterpriseId, enterpriseId);
//通知企微好友
log.info("通知会员 更新为企微好友 memberId:{}", memberId);
memberApiService.updateMemberQywxFlag(enterpriseId, memberId, 1);
return ""; return "";
} }
/** /**
* 同步 * 同步
*
* @param wxEnterpriseId
* @param enterpriseId
*/ */
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) {
QywxTagSyncInfoPojo pojo = new QywxTagSyncInfoPojo(); QywxTagSyncInfoPojo pojo = new QywxTagSyncInfoPojo();
...@@ -1728,91 +1654,29 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1728,91 +1654,29 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
/** /**
* 同步 * 同步
*
* @param memberId
* @param wxEnterpriseId
* @param enterpriseId
*/ */
private void pushTagSync(String memberId, String wxEnterpriseId, String enterpriseId) { 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); this.pushTagSync(memberId, "-1", GicQywxSyncTypeEnum.SINGLE_WXENT_MEMNER_SYNC.getType(), QywxSyncTaskTypeEnum.MEMBER_SYNC.getType(), wxEnterpriseId, enterpriseId);
} }
@Override private String saveMemberUnionTable(ExternalUserDTO dto) {
public String addFriendExternal(ExternalUserDTO dto) {
String wxUserId = dto.getWxUserId();
String wxEnterpriseId = dto.getWxEnterpriseId(); String wxEnterpriseId = dto.getWxEnterpriseId();
String name = StringUtils.isBlank(dto.getName()) ? "--" : dto.getName(); String name = dto.getName();
String createTime = dto.getAddCreateTime(); String createTime = dto.getAddCreateTime();
String externalUserId = dto.getExternalUserId(); String externalUserId = dto.getExternalUserId();
String storeId = dto.getStoreId();
String enterpriseId = dto.getEnterpriseId();
String staffId = dto.getStaffId(); String staffId = dto.getStaffId();
String avatar = dto.getAvatar(); String avatar = dto.getAvatar();
String clerkId = dto.getClerkId(); MemberUnionidRelatedDTO exsitDTO = new MemberUnionidRelatedDTO();
String selfExternalUserId = dto.getSelfExternalUserId(); exsitDTO.setAvatar(avatar);
if (StringUtils.isAnyBlank(wxUserId, selfExternalUserId, wxEnterpriseId, name, createTime, externalUserId, storeId, enterpriseId, staffId, clerkId)) { exsitDTO.setExternalUserid(externalUserId);
log.error("参数不对:{}", JSON.toJSONString(dto)); exsitDTO.setSelfExternalUserid(dto.getSelfExternalUserId());
return "参数不对"; exsitDTO.setAddCreateTime(createTime);
} exsitDTO.setExternalName(name);
String relationKey = SecureUtil.md5(staffId + externalUserId); exsitDTO.setWxEnterpriseId(wxEnterpriseId);
MemberUnionidRelatedDTO exsitDTO = memberUnionRelatedService.getByWxUserIdAndSelfExternalUserId(staffId, wxEnterpriseId, dto.getSelfExternalUserId()); exsitDTO.setStaffId(staffId);
String uuid = ""; return memberUnionRelatedService.addMemberUnionidRelated(exsitDTO);
if (exsitDTO == null) {
exsitDTO = new MemberUnionidRelatedDTO();
exsitDTO.setAvatar(avatar);
exsitDTO.setSelfExternalUserid(dto.getSelfExternalUserId());
exsitDTO.setAddCreateTime(createTime);
exsitDTO.setEnterpriseId(enterpriseId);
exsitDTO.setExternalName(name);
exsitDTO.setExternalUserid(externalUserId);
exsitDTO.setWxEnterpriseId(wxEnterpriseId);
exsitDTO.setStaffId(staffId);
uuid = memberUnionRelatedService.addMemberUnionidRelated(exsitDTO);
} else {
uuid = exsitDTO.getMemberUnionidRelatedId();
exsitDTO.setAvatar(avatar);
exsitDTO.setExternalUserid(externalUserId);
exsitDTO.setAddCreateTime(createTime);
exsitDTO.setSelfExternalUserid(dto.getSelfExternalUserId());
exsitDTO.setExternalName(name);
exsitDTO.setEnterpriseId(enterpriseId);
exsitDTO.setStaffId(staffId);
memberUnionRelatedService.update(exsitDTO);
}
List<TabHaobanExternalClerkRelated> clerkRelateds = externalClerkRelatedService.listByExTernalUseridAndWxUserIdAllStatus(wxEnterpriseId, externalUserId, staffId);
if (CollectionUtils.isEmpty(clerkRelateds)) {
TabHaobanExternalClerkRelated related = new TabHaobanExternalClerkRelated();
related.setAddCreateTime(createTime);
related.setClerkId(clerkId);
related.setEnterpriseId(enterpriseId);
related.setExternalName(name);
related.setExternalUserId(externalUserId);
related.setStaffId(staffId);
related.setMemberUnionidRelatedId(uuid);
related.setStoreId(storeId);
related.setWxEnterpriseId(wxEnterpriseId);
related.setStatusFlag(3);
related.setHeadUrl(dto.getAvatar());
related.setRelationKey(relationKey);
externalClerkRelatedService.insert(related);
} else {
TabHaobanExternalClerkRelated external = clerkRelateds.get(0);
external.setMemberUnionidRelatedId(uuid);
external.setExternalUserId(externalUserId);
external.setExternalName(name);
external.setStoreId(storeId);
external.setEnterpriseId(enterpriseId);
external.setClerkId(clerkId);
external.setStaffId(staffId);
external.setHeadUrl(dto.getAvatar());
external.setRelationKey(relationKey);
external.setStatusFlag(external.getStatusFlag() == 1 ? 1 : external.getStatusFlag());
externalClerkRelatedService.update(external);
}
return "";
} }
@Override @Override
public void cleanNoExsitFriendNew(String wxEnterpriseId, String staffId, List<String> externalUserIds) { public void cleanNoExsitFriendNew(String wxEnterpriseId, String staffId, List<String> externalUserIds) {
log.info("开始删除无效的外部联系人,wxEnterpriseId={},staffId={}", wxEnterpriseId, staffId); log.info("开始删除无效的外部联系人,wxEnterpriseId={},staffId={}", wxEnterpriseId, staffId);
...@@ -1831,7 +1695,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -1831,7 +1695,6 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
//删除成员与union的关联关系 //删除成员与union的关联关系
List<String> khList = new ArrayList<String>(delExternalUserIds); List<String> khList = new ArrayList<String>(delExternalUserIds);
log.info("需要删除外部联系人staffId={} , khList={}", staffId, JSON.toJSONString(khList)); log.info("需要删除外部联系人staffId={} , khList={}", staffId, JSON.toJSONString(khList));
memberUnionRelatedService.delMemberUnionidRelatedBatch(wxEnterpriseId, staffId, khList);
//删除导购和外部联系人关系 //删除导购和外部联系人关系
externalClerkRelatedService.delByUserIdAndExternalUserIdBatch(wxEnterpriseId, staffId, khList); externalClerkRelatedService.delByUserIdAndExternalUserIdBatch(wxEnterpriseId, staffId, khList);
} }
...@@ -2010,24 +1873,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -2010,24 +1873,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
@Override @Override
public void updateSelfExternalUseridById(String selfExternalUserid, String memberUnionidRelatedId) {
MemberUnionidRelatedDTO relatedDTO = new MemberUnionidRelatedDTO();
relatedDTO.setMemberUnionidRelatedId(memberUnionidRelatedId);
relatedDTO.setSelfExternalUserid(selfExternalUserid);
memberUnionRelatedService.update(relatedDTO);
}
@Override
public MemberUnionidRelatedDTO getById(String memberUnionidRelatedId) {
MemberUnionidRelated memberUnionidRelated = memberUnionidRelatedMapper.selectByPrimaryKey(memberUnionidRelatedId);
return EntityUtil.changeEntityNew(MemberUnionidRelatedDTO.class, memberUnionidRelated);
}
@Override
public void addDelFriendEventTest(String param) { public void addDelFriendEventTest(String param) {
log.info("addDelFriendEventTest:{}", param); log.info("addDelFriendEventTest:{}", param);
} }
/** /**
* 获取客户详情列表 * 获取客户详情列表
* *
......
package com.gic.haoban.manage.service.service.out.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.enterprise.api.constant.EnterpriseServiceEnum;
import com.gic.enterprise.api.dto.EnterpriseSettingDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.enterprise.api.service.EnterpriseUseForbidService;
import com.gic.haoban.manage.api.dto.QwPendingIdDTO;
import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO;
import com.gic.haoban.manage.api.service.QwFriendApiService;
import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.errorcode.HaoBanErrCode;
import com.gic.haoban.manage.service.pojo.bo.WxEnterpriseRelationBO;
import com.gic.haoban.manage.service.service.WxEnterpriseRelatedService;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.haoban.manage.service.util.QwInterfaceLimitEnum;
import com.gic.haoban.manage.service.util.QwTimesUtils;
import com.gic.member.api.dto.MemberWechatInfoDTO;
import com.gic.member.api.service.MemberApiService;
import com.gic.wechat.api.dto.qywx.PendingIdDTO;
import com.gic.wechat.api.service.qywx.QywxExternalUserService;
@Service("qwFriendApiService")
public class QwFriendApiServiceImpl implements QwFriendApiService {
private static final Logger log = LogManager.getLogger(QwFriendApiService.class);
private static final int subjectType = 1 ;
@Autowired
private EnterpriseUseForbidService enterpriseUseForbidService;
@Autowired
private QywxExternalUserService qywxExternalUserService;
@Autowired
private WxEnterpriseRelatedService wxEnterpriseRelatedService;
@Autowired
private WxEnterpriseService wxEnterpriseService;
@Autowired
private EnterpriseService enterpriseService ;
@Autowired
private Config config;
@Autowired
private MemberApiService memberApiService ;
@Override
public ServiceResponse<Map<String, String>> pendingIdCheck(String enterpriseId) {
ServiceResponse<MemberWechatInfoDTO> resp = this.memberApiService.getMemberWechatInfo(enterpriseId) ;
log.info("pendingId校验查询={}",JSON.toJSON(resp));
if(!resp.isSuccess()) {
return ServiceResponse.failure("9999", resp.getMessage()) ;
}
MemberWechatInfoDTO dto = resp.getResult() ;
String unionid = dto.getUnionId() ;
String openid = dto.getOpenId() ;
String wxaUnionid = dto.getUnionId() ;
String wxaOpenid = dto.getWxaOpenId() ;
return this.pendingIdCheck(enterpriseId, unionid, openid, wxaUnionid, wxaOpenid,false);
}
public ServiceResponse<Map<String, String>> pendingIdCheck(String enterpriseId, String unionid, String openid,
String wxaUnionid, String wxaOpenid , boolean setCheckFlag) {
ServiceResponse<WxEnterpriseQwDTO> corpidResp = this.checkAndGetCorpid(enterpriseId,setCheckFlag);
if (!corpidResp.isSuccess()) {
return ServiceResponse.failure(corpidResp.getCode(), corpidResp.getMessage());
}
String suiteid = config.getWxSuiteid();
WxEnterpriseQwDTO qwDTO = corpidResp.getResult();
String corpid = qwDTO.getThirdCorpid();
ServiceResponse<PendingIdDTO> wxResp = this.qywxExternalUserService.unionidToExternalUserid(corpid, suiteid,
unionid, openid, subjectType);
Map<String, String> retMap = new HashMap<>();
StringBuilder sb = new StringBuilder();
String url ="https://open.work.weixin.qq.com/devtool/query?e=" ;
String result = "";
String wxCode = "0";
String wxUrl = "" ;
String wxaCode = "0";
String wxaUrl ="" ;
if (wxResp.isSuccess()) {
result = "ok";
} else {
result = wxResp.getCode();
wxCode = result;
wxUrl = url+result;
retMap.put("服务号", wxUrl) ;
}
retMap.put("wxCode", wxCode);
sb.append("服务号-").append(result).append(",");
ServiceResponse<PendingIdDTO> wxaResp = this.qywxExternalUserService.unionidToExternalUserid(corpid, suiteid,
wxaUnionid, wxaOpenid, subjectType);
if (wxaResp.isSuccess()) {
result = "ok";
} else {
result = wxaResp.getCode();
wxaCode = result;
wxaUrl = url+result;
retMap.put("小程序", wxaUrl) ;
}
sb.append("小程序-").append(result);
retMap.put("remark", sb.toString());
retMap.put("wxaCode", wxaCode);
return ServiceResponse.success(retMap);
}
@Override
public ServiceResponse<Map<String, String>> pendingIdCheck(String enterpriseId, String unionid, String openid,
String wxaUnionid, String wxaOpenid) {
return this.pendingIdCheck(enterpriseId, unionid, openid, wxaUnionid, wxaOpenid, true) ;
}
@Override
public ServiceResponse<QwPendingIdDTO> getPendingIdByUnionid(String enterpriseId, String unionid, String openid) {
ServiceResponse<WxEnterpriseQwDTO> corpidResp = this.checkAndGetCorpid(enterpriseId,true);
if (!corpidResp.isSuccess()) {
return ServiceResponse.failure(corpidResp.getCode(), corpidResp.getMessage());
}
String suiteid = config.getWxSuiteid();
WxEnterpriseQwDTO qwDTO = corpidResp.getResult();
String wxEnterpriseId = qwDTO.getWxEnterpriseId();
HaoBanErrCode limitCode = QwTimesUtils.isLimit(wxEnterpriseId, enterpriseId, QwInterfaceLimitEnum.GET_PENDING_ID);
if (null != limitCode) {
return ServiceResponse.failure(limitCode.getCode(), limitCode.getMsg());
}
String corpid = qwDTO.getThirdCorpid();
ServiceResponse<PendingIdDTO> qwResp = this.qywxExternalUserService.unionidToExternalUserid(corpid, suiteid,
unionid, openid, subjectType);
QwTimesUtils.addTimes(wxEnterpriseId, QwInterfaceLimitEnum.GET_PENDING_ID);
log.info("Unionid获取pendingid,参数={},{},返回={}", unionid, openid, JSON.toJSONString(qwResp));
if (!qwResp.isSuccess()) {
return ServiceResponse.failure(qwResp.getCode(), qwResp.getMessage());
}
QwPendingIdDTO dto = new QwPendingIdDTO();
dto.setExternalUserId(qwResp.getResult().getExternal_userid());
dto.setPendingId(qwResp.getResult().getPending_id());
return ServiceResponse.success(dto);
}
@Override
public ServiceResponse<QwPendingIdDTO> getPendingIdByExternalid(String enterpriseId, String externalUserId) {
String suiteid = config.getWxSuiteid();
ServiceResponse<WxEnterpriseQwDTO> corpidResp = this.checkAndGetCorpid(enterpriseId,true);
if (!corpidResp.isSuccess()) {
return ServiceResponse.failure(corpidResp.getCode(), corpidResp.getMessage());
}
WxEnterpriseQwDTO qwDTO = corpidResp.getResult();
String corpid = qwDTO.getThirdCorpid();
ServiceResponse<List<PendingIdDTO>> qwResp = this.qywxExternalUserService.externalUseridToPendingId(corpid,
suiteid, Arrays.asList(externalUserId));
log.info("Externalid获取pendingid,参数={},返回={}", externalUserId, JSON.toJSONString(qwResp));
if (!qwResp.isSuccess()) {
return ServiceResponse.failure(qwResp.getCode(), qwResp.getMessage());
}
List<PendingIdDTO> list = qwResp.getResult();
if (CollectionUtils.isNotEmpty(list)) {
QwPendingIdDTO dto = new QwPendingIdDTO();
dto.setExternalUserId(list.get(0).getExternal_userid());
dto.setPendingId(list.get(0).getPending_id());
return ServiceResponse.success(dto);
}
return ServiceResponse.failure("9999", "企微未查询到数据");
}
@Override
public ServiceResponse<List<QwPendingIdDTO>> listPendingIdByExternalid(String enterpriseId,
List<String> externalUserIdList) {
if (CollectionUtils.isEmpty(externalUserIdList) || externalUserIdList.size() > 1000) {
return ServiceResponse.failure("9999", "外部联系人不能为空且每次最多1000条");
}
String suiteid = config.getWxSuiteid();
ServiceResponse<WxEnterpriseQwDTO> corpidResp = this.checkAndGetCorpid(enterpriseId,true);
if (!corpidResp.isSuccess()) {
return ServiceResponse.failure(corpidResp.getCode(), corpidResp.getMessage());
}
WxEnterpriseQwDTO qwDTO = corpidResp.getResult();
String corpid = qwDTO.getThirdCorpid();
ServiceResponse<List<PendingIdDTO>> qwResp = this.qywxExternalUserService.externalUseridToPendingId(corpid,
suiteid, externalUserIdList);
log.info("获取pendingid,参数={},返回={}", externalUserIdList, JSON.toJSONString(qwResp));
if (!qwResp.isSuccess()) {
return ServiceResponse.failure(qwResp.getCode(), qwResp.getMessage());
}
List<PendingIdDTO> list = qwResp.getResult();
if (CollectionUtils.isNotEmpty(list)) {
List<QwPendingIdDTO> retList = new ArrayList<>();
for (PendingIdDTO item : list) {
QwPendingIdDTO dto = new QwPendingIdDTO();
dto.setExternalUserId(item.getExternal_userid());
dto.setPendingId(item.getPending_id());
retList.add(dto);
}
return ServiceResponse.success(retList);
}
return ServiceResponse.failure("9999", "企微未查询到数据");
}
// 2010 不需要处理的
// 判断企业是否能用企微
private ServiceResponse<WxEnterpriseQwDTO> checkAndGetCorpid(String enterpriseId,boolean setCheckFlag) {
WxEnterpriseRelationBO enterpriseRelation = this.wxEnterpriseRelatedService.getHeadEnterprise(enterpriseId);
if (null == enterpriseRelation) {
// 非总部或不存在
return ServiceResponse.failure(HaoBanErrCode.ERR_2010.getCode(), "请确认商户是否有效且是总部");
}
if(setCheckFlag) {
EnterpriseSettingDTO setting = this.enterpriseService.getEnterpriseSettingByEnterpriseId(enterpriseId) ;
String customSetting = setting.getCustomSetting() ;
if(StringUtils.isNotBlank(customSetting)) {
JSONObject json = JSON.parseObject(customSetting) ;
String pendingidFlag = json.getString("qwPendingidFlag") ;
if(StringUtils.isBlank(pendingidFlag) || "0".equals(pendingidFlag)) {
log.info("未配置unionid查询企微外部联系人接口调用");
return ServiceResponse.failure(HaoBanErrCode.ERR_2010.getCode(), "未配置unionid查询企微外部联系人接口调用");
}
}
}
Integer code = this.enterpriseUseForbidService.selectPermissionStatus(enterpriseId,
EnterpriseServiceEnum.HAO_BAN.getRightMenuCode());
log.info("好办是否到期停用={},{}", enterpriseId, code);
if (code != 0 && code != 1) {
return ServiceResponse.failure(HaoBanErrCode.ERR_2010.getCode(), "好办未启用或已停用");
}
int memberOpenCardlag = enterpriseRelation.getMemberOpenCardFlag();
if (memberOpenCardlag != 0) {
// 不在同一开放平台
return ServiceResponse.failure(HaoBanErrCode.ERR_2010.getCode(), "不在同一开放平台");
}
String wxEnterpriseId = enterpriseRelation.getWxEnterpriseId();
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
return ServiceResponse.success(qwDTO);
}
@Override
public ServiceResponse<Object> getCallTimes(String wxEnterpriseId) {
return ServiceResponse.success(QwTimesUtils.getPendingTimes(wxEnterpriseId));
}
}
package com.gic.haoban.manage.service.service.out.impl; package com.gic.haoban.manage.service.service.out.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
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.Service;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
...@@ -33,7 +49,16 @@ import com.gic.haoban.manage.service.entity.TabHaobanDepartment; ...@@ -33,7 +49,16 @@ import com.gic.haoban.manage.service.entity.TabHaobanDepartment;
import com.gic.haoban.manage.service.entity.TabHaobanStaff; import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.TabHaobanStaffDepartmentRelated; import com.gic.haoban.manage.service.entity.TabHaobanStaffDepartmentRelated;
import com.gic.haoban.manage.service.entity.TabHaobanSyncErrorLog; import com.gic.haoban.manage.service.entity.TabHaobanSyncErrorLog;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.DepartmentService;
import com.gic.haoban.manage.service.service.SecretSettingService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.StaffDepartmentRelatedService;
import com.gic.haoban.manage.service.service.StaffPrivacyUseLogService;
import com.gic.haoban.manage.service.service.StaffService;
import com.gic.haoban.manage.service.service.StoreRangeService;
import com.gic.haoban.manage.service.service.SyncErrorLogService;
import com.gic.haoban.manage.service.service.UserLoginLogService;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.haoban.manage.service.util.EmojiFilterUtil; import com.gic.haoban.manage.service.util.EmojiFilterUtil;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
import com.gic.thirdparty.api.dto.PicUploadResDTO; import com.gic.thirdparty.api.dto.PicUploadResDTO;
...@@ -43,17 +68,6 @@ import com.gic.wechat.api.dto.qywx.UserDTO; ...@@ -43,17 +68,6 @@ import com.gic.wechat.api.dto.qywx.UserDTO;
import com.gic.wechat.api.service.qywx.QywxUserApiService; import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.google.common.collect.Sets;
import org.apache.commons.collections.CollectionUtils;
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.Service;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Service @Service
public class StaffApiServiceImpl implements StaffApiService { public class StaffApiServiceImpl implements StaffApiService {
...@@ -90,8 +104,6 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -90,8 +104,6 @@ public class StaffApiServiceImpl implements StaffApiService {
@Autowired @Autowired
private StaffPrivacyUseLogService staffPrivacyUseLogService; private StaffPrivacyUseLogService staffPrivacyUseLogService;
@Autowired @Autowired
private WxApplicationService wxApplicationService;
@Autowired
private StoreWidgetService storeWidgetService; private StoreWidgetService storeWidgetService;
@Autowired @Autowired
private PowerService powerService; private PowerService powerService;
...@@ -123,6 +135,10 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -123,6 +135,10 @@ public class StaffApiServiceImpl implements StaffApiService {
@Override @Override
public List<StaffDepartmentRelatedDTO> listStaffDepartmentByStaffId(String staffId) { public List<StaffDepartmentRelatedDTO> listStaffDepartmentByStaffId(String staffId) {
List<TabHaobanStaffDepartmentRelated> list = staffDepartmentRelatedService.listStaffDepartmentByStaffId(staffId); List<TabHaobanStaffDepartmentRelated> list = staffDepartmentRelatedService.listStaffDepartmentByStaffId(staffId);
// 如果成员部门为空,修复部门数据
if(CollectionUtils.isEmpty(list)) {
this.staffDepartmentRelatedService.repairStaffDepart(staffId);
}
return EntityUtil.changeEntityListByJSON(StaffDepartmentRelatedDTO.class, list); return EntityUtil.changeEntityListByJSON(StaffDepartmentRelatedDTO.class, list);
} }
...@@ -250,7 +266,7 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -250,7 +266,7 @@ public class StaffApiServiceImpl implements StaffApiService {
staffService.updateByPrimaryKey(staff); staffService.updateByPrimaryKey(staff);
} }
logger.info("staff变更保存:{}", JSONObject.toJSONString(user)); logger.info("staff变更保存:{}", JSONObject.toJSONString(user));
staffDepartChange(staff, wxEnterpriseId, user); this.staffDepartmentRelatedService.staffDepartChange(staff, wxEnterpriseId, user.getDepartment());
// 返回结果带上员工姓名 // 返回结果带上员工姓名
res.setResult(staff.getStaffName()); res.setResult(staff.getStaffName());
return res; return res;
...@@ -320,74 +336,6 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -320,74 +336,6 @@ public class StaffApiServiceImpl implements StaffApiService {
return arr; return arr;
} }
private void staffDepartChange(TabHaobanStaff staff, String wxEnterpriseId, UserDTO user) {
//更新部门
Integer[] departmentIds = user.getDepartment();
List<String> wxDepartIds = new ArrayList<>();
for (Integer wDId : departmentIds) {
wxDepartIds.add(wDId.toString());
}
//关联部门
List<DepartmentDTO> departmentDTOList = departmentService.listDepartmentByWxDepartIds(wxEnterpriseId, wxDepartIds);
if (CollectionUtils.isEmpty(departmentDTOList)) {
logger.info("部门没有更新或同步:{}", wxEnterpriseId);
return;
}
//已存在部门
List<TabHaobanStaffDepartmentRelated> hasRelation = staffDepartmentRelatedService.listStaffDepartmentByStaffId(staff.getStaffId());
Map<String, TabHaobanStaffDepartmentRelated> hasRelationMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(hasRelation)) {
hasRelationMap = hasRelation.stream().collect(Collectors.toMap(TabHaobanStaffDepartmentRelated::getDepartmentId, tab -> tab));
}
//新增操作
for (DepartmentDTO departmentDTO : departmentDTOList) {
if (!hasRelationMap.containsKey(departmentDTO.getDepartmentId())) {
StaffDepartmentRelatedDTO dto = new StaffDepartmentRelatedDTO();
dto.setPhoneNumber(staff.getPhoneNumber());
dto.setStaffId(staff.getStaffId());
dto.setStaffName(user.getName());
dto.setWxEnterpriseId(wxEnterpriseId);
dto.setStatusFlag(1);
dto.setDepartmentId(departmentDTO.getDepartmentId());
dto.setNationCode(staff.getNationCode());
dto.setStaffName(user.getName());
staffDepartmentRelatedService.add(dto);
}
}
//删除操作
Set<String> newDepartIds = departmentDTOList.stream().map(DepartmentDTO::getDepartmentId).collect(Collectors.toSet());
Set<String> hasDepartIds = hasRelationMap.keySet();
Sets.SetView<String> delDepartIds = Sets.difference(hasDepartIds, newDepartIds);
Sets.SetView<String> updateDepartIds = Sets.intersection(newDepartIds, hasDepartIds);//交集
logger.info("删除部门:{}", JSONObject.toJSONString(delDepartIds));
if (CollectionUtils.isNotEmpty(delDepartIds)) {
for (String delDepartId : delDepartIds) {
TabHaobanStaffDepartmentRelated departmentRelated = hasRelationMap.get(delDepartId);
if (null != departmentRelated) {
StaffDepartmentRelatedDTO relatedDTO = new StaffDepartmentRelatedDTO();
relatedDTO.setStaffDepartmentRelatedId(departmentRelated.getStaffDepartmentRelatedId());
staffDepartmentRelatedService.del(relatedDTO);
}
}
}
if (CollectionUtils.isNotEmpty(updateDepartIds)) {
for (String updateDeId : updateDepartIds) {
TabHaobanStaffDepartmentRelated departmentRelated = hasRelationMap.get(updateDeId);
if (null != departmentRelated) {
departmentRelated.setPhoneNumber(staff.getPhoneNumber());
departmentRelated.setStaffName(staff.getStaffName());
departmentRelated.setNationCode(staff.getNationCode());
departmentRelated.setUpdateTime(new Date());
staffDepartmentRelatedService.update(departmentRelated);
}
}
}
}
@Override @Override
public ServiceResponse wxGetAdd(String userId, String wxEnterpriseId) { public ServiceResponse wxGetAdd(String userId, String wxEnterpriseId) {
RedisUtil.lock("haoban_add_user" + wxEnterpriseId + userId, 2L); RedisUtil.lock("haoban_add_user" + wxEnterpriseId + userId, 2L);
...@@ -1018,4 +966,9 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -1018,4 +966,9 @@ public class StaffApiServiceImpl implements StaffApiService {
} }
return false; return false;
} }
@Override
public List<StaffDTO> listBindStoreIds(List<String> storeIds, String wxEnterpriseId) {
return staffMapper.listBindStoreIds(storeIds,wxEnterpriseId);
}
} }
...@@ -123,8 +123,8 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe ...@@ -123,8 +123,8 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
} }
@Override @Override
public List<StaffClerkRelationDTO> listBindCode(String wxEnterpriseId,String enterpriseId, Set<String> clerkCodeList) { public List<StaffClerkRelationDTO> listBindCode(String wxEnterpriseId, String enterpriseId, Set<String> clerkCodeList) {
return staffClerkRelationService.listBindCode(wxEnterpriseId,enterpriseId, clerkCodeList); return staffClerkRelationService.listBindCode(wxEnterpriseId, enterpriseId, clerkCodeList);
} }
@Override @Override
...@@ -163,9 +163,10 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe ...@@ -163,9 +163,10 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
@Override @Override
public ServiceResponse bindStaffClerk(StaffClerkRelationDTO staffClerkRelationDTO, String optStaffId, int channelCode) { public ServiceResponse bindStaffClerk(StaffClerkRelationDTO staffClerkRelationDTO, String optStaffId, int channelCode) {
ServiceResponse resp = this.bindCheck(staffClerkRelationDTO, optStaffId, channelCode) ; ServiceResponse resp = this.bindCheck(staffClerkRelationDTO, optStaffId, channelCode);
if(null != resp) { if (resp != null && !resp.isSuccess()) {
return resp ; logger.error("不允许绑定:{}", resp.getMessage());
return resp;
} }
String relationId = staffClerkRelationService.bind(staffClerkRelationDTO, optStaffId, channelCode); String relationId = staffClerkRelationService.bind(staffClerkRelationDTO, optStaffId, channelCode);
return ServiceResponse.success(relationId); return ServiceResponse.success(relationId);
...@@ -186,26 +187,35 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe ...@@ -186,26 +187,35 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
} else { } else {
StaffClerkRelationDTO relationDTO = staffClerkRelationService.getBindByClerkId(clerkId, wxEnterpriseId); StaffClerkRelationDTO relationDTO = staffClerkRelationService.getBindByClerkId(clerkId, wxEnterpriseId);
if (null != relationDTO) { if (null != relationDTO) {
logger.info("已经被绑定,不能绑定");
return ServiceResponse.failure("2", "已经被绑定,不能绑定"); return ServiceResponse.failure("2", "已经被绑定,不能绑定");
} }
} }
AuditDTO auditDTO = auditApiService.findByBindRelatedIdAndAuditType(clerkId, AuditType.CLERK_BIND.getCode(),wxEnterpriseId,enterpriseId); AuditDTO auditDTO = auditApiService.findByBindRelatedIdAndAuditType(clerkId, AuditType.CLERK_BIND.getCode(), wxEnterpriseId, enterpriseId);
if (null != auditDTO) { if (null != auditDTO) {
logger.info("该导购已经被被申请绑定,请审核处理后再绑定");
return ServiceResponse.failure("4", "该导购已经被被申请绑定,请审核处理后再绑定"); return ServiceResponse.failure("4", "该导购已经被被申请绑定,请审核处理后再绑定");
} }
List<AuditDTO> list = auditApiService.listByStoreId(staffClerkRelationDTO.getStoreId()); List<AuditDTO> list = auditApiService.listByStoreId(staffClerkRelationDTO.getStoreId());
if (CollectionUtils.isNotEmpty(list)) { if (CollectionUtils.isNotEmpty(list)) {
Set<String> staffIds = list.stream().map(AuditDTO::getCommitStaffId).collect(Collectors.toSet()); Set<String> staffIds = list.stream().map(AuditDTO::getCommitStaffId).collect(Collectors.toSet());
if (staffIds.contains(staffId)) { if (staffIds.contains(staffId)) {
logger.info("该成员已经已经在该门店下申请了绑定,请审核处理后再绑定");
return ServiceResponse.failure("5", "该成员已经已经在该门店下申请了绑定,请审核处理后再绑定"); return ServiceResponse.failure("5", "该成员已经已经在该门店下申请了绑定,请审核处理后再绑定");
} }
} }
StaffClerkRelationDTO storeHasBind = staffClerkRelationService.getOneBindByStoreId(staffId, staffClerkRelationDTO.getStoreId()); StaffClerkRelationDTO storeHasBind = staffClerkRelationService.getOneBindByStoreId(staffId, staffClerkRelationDTO.getStoreId());
if (storeHasBind != null) { if (storeHasBind != null) {
logger.info("该导购已在该门店下有其它成员绑定");
return ServiceResponse.failure("3", "该导购已在该门店下有其它成员绑定"); return ServiceResponse.failure("3", "该导购已在该门店下有其它成员绑定");
} }
return null ; List<StaffClerkRelationDTO> staffClerkRelationDTOS = staffClerkRelationService.listManageBindByStaffId(staffId);
if (CollectionUtils.isNotEmpty(staffClerkRelationDTOS)) {
logger.info("该导购已绑定区经,不允许绑定导购");
return ServiceResponse.failure("3", "该导购已绑定区经,不允许绑定导购");
}
return null;
} }
@Override @Override
...@@ -226,7 +236,7 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe ...@@ -226,7 +236,7 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
if (CollectionUtil.isEmpty(clerkIds)) { if (CollectionUtil.isEmpty(clerkIds)) {
return Collections.emptyList(); return Collections.emptyList();
} }
return EntityUtil.changeEntityListNew(StaffClerkRelationDTO.class,tabHaobanStaffClerkRelationMapper.listByClerkIds(clerkIds, null)); return EntityUtil.changeEntityListNew(StaffClerkRelationDTO.class, tabHaobanStaffClerkRelationMapper.listByClerkIds(clerkIds, null));
} }
@Override @Override
...@@ -234,7 +244,7 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe ...@@ -234,7 +244,7 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
if (CollectionUtil.isEmpty(clerkIds)) { if (CollectionUtil.isEmpty(clerkIds)) {
return Collections.emptyList(); return Collections.emptyList();
} }
return EntityUtil.changeEntityListNew(StaffClerkRelationDTO.class,tabHaobanStaffClerkRelationMapper.listByClerkIds(clerkIds, wxEnterpriseId)); return EntityUtil.changeEntityListNew(StaffClerkRelationDTO.class, tabHaobanStaffClerkRelationMapper.listByClerkIds(clerkIds, wxEnterpriseId));
} }
@Override @Override
...@@ -295,6 +305,12 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe ...@@ -295,6 +305,12 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
return serviceResponse; return serviceResponse;
} }
} }
String staffId = staffClerkRelation.getStaffId();
List<StaffClerkRelationDTO> staffClerkRelationDTOS = staffClerkRelationService.listManageBindByStaffId(staffId);
if (CollectionUtils.isNotEmpty(staffClerkRelationDTOS)) {
logger.info("该导购已绑定区经,不允许绑定导购");
return ServiceResponse.failure("3", "该导购已绑定区经,不允许绑定导购");
}
if (StringUtils.isNotBlank(staffClerkRelation.getStaffClerkRelationId())) { if (StringUtils.isNotBlank(staffClerkRelation.getStaffClerkRelationId())) {
TabHaobanStaffClerkRelation oldStaffClerkRelation = tabHaobanStaffClerkRelationMapper.selectByPrimaryKey(staffClerkRelation.getStaffClerkRelationId()); TabHaobanStaffClerkRelation oldStaffClerkRelation = tabHaobanStaffClerkRelationMapper.selectByPrimaryKey(staffClerkRelation.getStaffClerkRelationId());
tabHaobanStaffClerkRelationMapper.delByPrimaryKey(staffClerkRelation.getStaffClerkRelationId()); tabHaobanStaffClerkRelationMapper.delByPrimaryKey(staffClerkRelation.getStaffClerkRelationId());
...@@ -488,9 +504,9 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe ...@@ -488,9 +504,9 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
} }
} else if (type == 2) { } else if (type == 2) {
logger.info("导购门店转移,新的导购和门店,clerkId={},storeId={}", clerkId, clerkSyncQDTO.getStoreId()); logger.info("导购门店转移,新的导购和门店,clerkId={},storeId={}", clerkId, clerkSyncQDTO.getStoreId());
StaffClerkRelationDTO oldRelationDTO = staffClerkRelationService.getByCodeAndEnterpriseId(clerkCode,enterpriseId); StaffClerkRelationDTO oldRelationDTO = staffClerkRelationService.getByCodeAndEnterpriseId(clerkCode, enterpriseId);
if (null == oldRelationDTO) { if (null == oldRelationDTO) {
logger.info("导购未关联成员,clerkCode={}",clerkCode); logger.info("导购未关联成员,clerkCode={}", clerkCode);
return; return;
} }
/* StaffClerkRelationDTO oldRelationDTO = staffClerkRelationService.getByClerkId(oldClerkId); /* StaffClerkRelationDTO oldRelationDTO = staffClerkRelationService.getByClerkId(oldClerkId);
...@@ -530,25 +546,25 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe ...@@ -530,25 +546,25 @@ public class StaffClerkRelationApiServiceImpl implements StaffClerkRelationApiSe
} }
} }
} }
// 导购门店转移 // 导购门店转移
private void moveOrAddClerk(ClerkSyncQDTO clerkSyncQDTO, StaffClerkRelationDTO oldRelationDTO) { private void moveOrAddClerk(ClerkSyncQDTO clerkSyncQDTO, StaffClerkRelationDTO oldRelationDTO) {
boolean flag = false ; boolean flag = false;
if(null != RedisUtil.getCache("clerkMoveFlag2022")) { if (null != RedisUtil.getCache("clerkMoveFlag2022")) {
flag = true ; flag = true;
} }
if(flag) { if (flag) {
String oldClerkId = oldRelationDTO.getClerkId(); String oldClerkId = oldRelationDTO.getClerkId();
this.staffClerkRelationService.delBind(oldClerkId, "-1", ChannelCodeEnum.SYNC_UNBIND.getCode(), clerkSyncQDTO.getClerkId()); this.staffClerkRelationService.delBind(oldClerkId, "-1", ChannelCodeEnum.SYNC_UNBIND.getCode(), clerkSyncQDTO.getClerkId());
// 设置新的ID // 设置新的ID
oldRelationDTO.setClerkId(clerkSyncQDTO.getClerkId()); oldRelationDTO.setClerkId(clerkSyncQDTO.getClerkId());
oldRelationDTO.setStoreId(clerkSyncQDTO.getStoreId()); oldRelationDTO.setStoreId(clerkSyncQDTO.getStoreId());
ServiceResponse response = this.bindCheck(oldRelationDTO, "-1", ChannelCodeEnum.SYNC_BIND.getCode()) ; ServiceResponse response = this.bindCheck(oldRelationDTO, "-1", ChannelCodeEnum.SYNC_BIND.getCode());
logger.info("绑定结果正常:{},{}", JSONObject.toJSONString(response), oldRelationDTO.getClerkId()); logger.info("绑定结果正常:{},{}", JSONObject.toJSONString(response), oldRelationDTO.getClerkId());
if(response==null) { if (response == null) {
this.staffClerkRelationService.insert(oldRelationDTO) ; this.staffClerkRelationService.insert(oldRelationDTO);
} }
}else { } else {
String oldClerkId = oldRelationDTO.getClerkId(); String oldClerkId = oldRelationDTO.getClerkId();
this.staffClerkRelationService.delBind(oldClerkId, "-1", ChannelCodeEnum.SYNC_UNBIND.getCode(), null); this.staffClerkRelationService.delBind(oldClerkId, "-1", ChannelCodeEnum.SYNC_UNBIND.getCode(), null);
// 设置新的ID // 设置新的ID
......
package com.gic.haoban.manage.service.task.friend; package com.gic.haoban.manage.service.task.friend;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO; import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService; import com.gic.clerk.api.service.ClerkService;
import com.gic.clerk.api.service.PowerService; import com.gic.clerk.api.service.PowerService;
import com.gic.commons.util.GICMQClientUtil; import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.*; import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum; import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum; import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum; import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService; import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService; import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog; import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated; import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated;
import com.gic.haoban.manage.service.exception.WxApiLimitException; import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.task.BaseSyncOperation; import com.gic.haoban.manage.service.task.BaseSyncOperation;
import com.gic.member.api.dto.MemberDTO; import com.gic.member.api.dto.MemberSimpleDetailDTO;
import com.gic.member.api.service.MemberOpenCardBusinessService; import com.gic.member.api.dto.QywxMemberQDTO;
import com.gic.mq.sdk.GicMQClient; import com.gic.member.api.service.MemberEntranceApiService;
import com.gic.redis.data.util.RedisUtil; import com.gic.mq.sdk.GicMQClient;
import org.apache.commons.lang3.StringUtils; import com.gic.redis.data.util.RedisUtil;
import org.slf4j.Logger; import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory; import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List; import java.util.HashSet;
import java.util.Set; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.Set;
import java.util.stream.Collectors; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* 导购和客户好友关系 /**
*/ * 导购和客户好友关系
@Service */
public class FriendSyncNewOperation implements BaseSyncOperation { @Service
public class FriendSyncNewOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(FriendSyncNewOperation.class);
@Autowired private static final Logger logger = LoggerFactory.getLogger(FriendSyncNewOperation.class);
private PreDealService preDealService; @Autowired
@Autowired private PreDealService preDealService;
private MemberUnionidRelatedApiService memberUnionidRelatedApiService; @Autowired
@Autowired private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
private SyncTaskService syncTaskService; @Autowired
@Autowired private SyncTaskService syncTaskService;
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService; @Autowired
@Autowired private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService;
private StaffClerkRelationService staffClerkRelationService; @Autowired
@Autowired private StaffClerkRelationService staffClerkRelationService;
private ClerkService clerkService; @Autowired
@Autowired private ClerkService clerkService;
private PowerService powerService; @Autowired
@Autowired private PowerService powerService;
private MemberOpenCardBusinessService memberOpenCardBusinessService; @Autowired
@Autowired private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
private FriendClerkSyncNewOperation friendClerkSyncNewOperation; @Autowired
@Autowired private WxEnterpriseRelatedService wxEnterpriseRelatedService;
private WxEnterpriseRelatedService wxEnterpriseRelatedService; @Autowired
@Autowired private MemberEntranceApiService memberEntranceApiService;
private WxEnterpriseService wxEnterpriseService;
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
@Override
@Override public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) { logger.info("同步好友开始,第三方={}", JSONObject.toJSONString(dataPre));
logger.info("同步好友开始,第三方={}", JSONObject.toJSONString(dataPre)); String reason = "成功";
String reason = "成功"; boolean dealFlag = true;
boolean dealFlag = true; String relationKey = "-1";
String relationKey = "-1"; try {
try { String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxEnterpriseId = dataPre.getWxEnterpriseId(); String wxUserId = dataPre.getDataId().split("###")[1] ;
String wxUserId = dataPre.getDataId().split("###")[1] ; String taskId = dealParamMqDTO.getTaskId();
String taskId = dealParamMqDTO.getTaskId(); String externalUserId = dataPre.getDataContent();
String externalUserId = dataPre.getDataContent(); String staffId = dataPre.getpDataId() ;
String staffId = dataPre.getpDataId() ;
if (dataPre.getStatusFlag() != PreDealStatusEnum.pre.getVal()) {
if (dataPre.getStatusFlag() != PreDealStatusEnum.pre.getVal()) { logger.info("已经处理过,无需重复处理:{}", JSONObject.toJSONString(dataPre));
logger.info("已经处理过,无需重复处理:{}", JSONObject.toJSONString(dataPre)); return;
return; }
}
ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId); if (externalUserDTO == null) {
if (externalUserDTO == null) { dealFlag = false;
dealFlag = false; reason = "好友不存在";
reason = "好友不存在"; return;
return; }
} //relationkey
//relationkey relationKey = SecureUtil.md5(staffId + "_" + externalUserDTO.getName() + "_" + externalUserDTO.getAddCreateTime());
relationKey = SecureUtil.md5(staffId + "_" + externalUserDTO.getName() + "_" + externalUserDTO.getAddCreateTime()); logger.info("第三方生成relationKey:{},{},{} 客户={}, 结果={}",staffId,externalUserDTO.getName(),externalUserDTO.getAddCreateTime() , externalUserDTO.getExternalUserId() , relationKey);
logger.info("第三方生成relationKey:{},{},{} 客户={}, 结果={}",staffId,externalUserDTO.getName(),externalUserDTO.getAddCreateTime() , externalUserDTO.getExternalUserId() , relationKey); // 根据关联键relationkey查看自建应用 是否有数据
// 根据关联键relationkey查看自建应用 是否有数据 TabHaobanPreDealLog selfPre = preDealService.getByRelationKey(taskId, PreDealTypeEnum.self_friend.getVal(), relationKey);
TabHaobanPreDealLog selfPre = preDealService.getByRelationKey(taskId, PreDealTypeEnum.self_friend.getVal(), relationKey); if (null == selfPre) {
if (null == selfPre) { logger.info("用户的自建应用不存在该数据:{},{}", JSONObject.toJSONString(dataPre), JSONObject.toJSONString(externalUserDTO));
logger.info("用户的自建应用不存在该数据:{},{}", JSONObject.toJSONString(dataPre), JSONObject.toJSONString(externalUserDTO)); dealFlag = false;
dealFlag = false; reason = "用户的自建应用不存在该数据:" + relationKey;
reason = "用户的自建应用不存在该数据:" + relationKey; return;
return; }
} ExternalUserDTO selfUserData = JSON.parseObject(selfPre.getDataContent(), ExternalUserDTO.class);
ExternalUserDTO selfUserData = JSON.parseObject(selfPre.getDataContent(), ExternalUserDTO.class); externalUserDTO.setUnionId(selfUserData.getUnionId());
externalUserDTO.setUnionId(selfUserData.getUnionId()); externalUserDTO.setSelfExternalUserId(selfUserData.getExternalUserId());
externalUserDTO.setSelfExternalUserId(selfUserData.getExternalUserId()); externalUserDTO.setAvatar(selfUserData.getAvatar());
externalUserDTO.setAvatar(selfUserData.getAvatar()); externalUserDTO.setName(selfUserData.getName());
//序列化数据 //序列化数据
String ret = dealMerge(externalUserDTO, dataPre); String ret = dealMerge(externalUserDTO, dataPre);
if (StringUtils.isNotBlank(ret)) { if (StringUtils.isNotBlank(ret)) {
logger.info("好友创建失败:{},{}", ret, JSONObject.toJSONString(externalUserDTO)); logger.info("好友创建失败:{},{}", ret, JSONObject.toJSONString(externalUserDTO));
dealFlag = false; dealFlag = false;
reason = ret + ":" + relationKey; reason = ret + ":" + relationKey;
return; return;
} }
//更新状态 //更新状态
preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, externalUserDTO.getMemberId(), relationKey , PreDealTypeEnum.friend.getVal()); preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, externalUserDTO.getMemberId(), relationKey , PreDealTypeEnum.friend.getVal());
dealSuccess(taskId, dataPre.getDataId(), dataPre.getpDataId(), wxEnterpriseId); dealSuccess(taskId, dataPre.getDataId(), dataPre.getpDataId(), wxEnterpriseId);
} catch (WxApiLimitException e) { } catch (WxApiLimitException e) {
logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre)); logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre));
dealFlag = tryAgainToMq(dataPre); dealFlag = tryAgainToMq(dataPre);
reason = "接口重试超出限制"; reason = "接口重试超出限制";
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e); logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e);
reason = "第三方好友处理异常"; reason = "第三方好友处理异常";
dealFlag = false; dealFlag = false;
} finally { } finally {
if (!dealFlag) { if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dataPre.getDataId(), dataPre.getpDataId(), reason, relationKey); dealException(dealParamMqDTO.getTaskId(), dataPre.getDataId(), dataPre.getpDataId(), reason, relationKey);
} }
} }
} }
/** /**
* 重试机制 * 重试机制
* *
* @param dataPre * @param dataPre
* @return * @return
*/ */
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) { private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试friend:{}", dataPre.getDataId()); logger.info("需要重试friend:{}", dataPre.getDataId());
String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId(); String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
Object cache = RedisUtil.getCache(key); Object cache = RedisUtil.getCache(key);
if (null == cache) { if (null == cache) {
RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS); RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
} else { } else {
Integer count = Integer.valueOf(cache.toString()); Integer count = Integer.valueOf(cache.toString());
RedisUtil.setCache(key, count + 1); RedisUtil.setCache(key, count + 1);
if (count > 4) { if (count > 4) {
return false; return false;
} }
} }
HashSet<String> reTrysIds = new HashSet<>(); HashSet<String> reTrysIds = new HashSet<>();
reTrysIds.add(dataPre.getDataId()); reTrysIds.add(dataPre.getDataId());
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_sync); dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_sync);
return true; return true;
} }
private String dealMerge(ExternalUserDTO externalUserDTO, TabHaobanPreDealLog dataPre) { private String dealMerge(ExternalUserDTO externalUserDTO, TabHaobanPreDealLog dataPre) {
String wxEnterpriseId = dataPre.getWxEnterpriseId(); String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getDataId().split("###")[1] ; String wxUserId = dataPre.getDataId().split("###")[1] ;
if (externalUserDTO.getFriendType() == 2) { if (externalUserDTO.getFriendType() == 2) {
return "不是微信好友,是企业微信好友:" + externalUserDTO.getFriendType(); return "不是微信好友,是企业微信好友:" + externalUserDTO.getFriendType();
} }
//staff信息 String staffId = dataPre.getpDataId() ;
String staffId = dataPre.getpDataId() ; ClerkMainStoreRelatedDTO mainStore = clerkMainStoreRelatedApiService.getWxEnterpriseIdAndStaffId(wxEnterpriseId, staffId);
ClerkMainStoreRelatedDTO mainStore = clerkMainStoreRelatedApiService.getWxEnterpriseIdAndStaffId(wxEnterpriseId, staffId); if (mainStore == null) {
if (mainStore == null) { return "主门店不存在";
return "主门店不存在"; }
} StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStore.getStoreId());
StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staffId, mainStore.getStoreId()); if (staffClerkRelationDTO == null) {
if (staffClerkRelationDTO == null) { return "未绑定导购";
return "未绑定导购"; }
} String enterpriseId = staffClerkRelationDTO.getEnterpriseId() ;
TabHaobanWxEnterpriseRelated wxEnterpriseRelated = wxEnterpriseRelatedService.getByEnterpriseId(wxEnterpriseId, enterpriseId);
//好友同一个开平 if (wxEnterpriseRelated == null) {
externalUserDTO.setWxEnterpriseId(wxEnterpriseId); logger.info("没有存在企业关联:{},{}", wxEnterpriseId, enterpriseId);
externalUserDTO.setEnterpriseId(staffClerkRelationDTO.getEnterpriseId()); return "没有关联企业";
externalUserDTO.setStoreId(mainStore.getStoreId()); }
externalUserDTO.setClerkId(staffClerkRelationDTO.getClerkId()); String storeId = mainStore.getStoreId() ;
externalUserDTO.setWxUserId(wxUserId); String clerkId = staffClerkRelationDTO.getClerkId() ;
externalUserDTO.setStaffId(staffClerkRelationDTO.getStaffId()); externalUserDTO.setWxEnterpriseId(wxEnterpriseId);
externalUserDTO.setEnterpriseId(enterpriseId);
TabHaobanWxEnterpriseRelated wxEnterpriseRelated = wxEnterpriseRelatedService.getByEnterpriseId(staffClerkRelationDTO.getWxEnterpriseId(), staffClerkRelationDTO.getEnterpriseId()); externalUserDTO.setStoreId(storeId);
if (wxEnterpriseRelated == null) { externalUserDTO.setClerkId(clerkId);
logger.info("没有存在企业关联:{},{}", staffClerkRelationDTO.getWxEnterpriseId(), staffClerkRelationDTO.getEnterpriseId()); externalUserDTO.setWxUserId(wxUserId);
return "没有关联企业"; externalUserDTO.setStaffId(staffId);
}
boolean addByWelcome = this.wxEnterpriseRelatedService.getAddByWelcomeFlag(wxEnterpriseRelated,externalUserDTO.getUnionId(),false) ;
Integer memberOpenCardFlag = wxEnterpriseRelated.getMemberOpenCardFlag(); if (addByWelcome) {
//好友不同开平 logger.info("好友不同开平:{}", JSONObject.toJSONString(externalUserDTO));
if (memberOpenCardFlag == 1) { return memberUnionidRelatedApiService.addExternal(externalUserDTO);
logger.info("好友不同开平,:{}", JSONObject.toJSONString(externalUserDTO)); }
return memberUnionidRelatedApiService.addFriendExternal(externalUserDTO); String clerkCode = staffClerkRelationDTO.getClerkCode();
} ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
if (clerk == null) {
if(StringUtils.isBlank(externalUserDTO.getUnionId())) { return "导购不存在:" + clerkCode;
logger.info("好友unionid不存在:{}", JSONObject.toJSONString(externalUserDTO)); }
return memberUnionidRelatedApiService.addFriendExternal(externalUserDTO); String qrcodeParam = clerk.getQrcodeParam();
} if (StringUtils.isBlank(qrcodeParam)) {
powerService.saveClerkQrCode(clerk.getClerkId());
WxEnterpriseDTO wxEnterpriseDTO = wxEnterpriseService.selectById(wxEnterpriseId); clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
if (wxEnterpriseDTO == null) { qrcodeParam = clerk.getQrcodeParam();
logger.info("没有存在企业关联:wxEnterpriseId:{}", wxEnterpriseId); }
return "没有关联企业"; if (StringUtils.isBlank(qrcodeParam)) {
} return "导购码不存在:" + clerkCode;
String clerkCode = staffClerkRelationDTO.getClerkCode(); }
ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode); QywxMemberQDTO qdto = new QywxMemberQDTO() ;
if (clerk == null) { qdto.setEnterpriseId(enterpriseId);
return "导购不存在:" + clerkCode; qdto.setNick(externalUserDTO.getName());
} qdto.setPhotoUrl(externalUserDTO.getAvatar());
String qrcodeParam = clerk.getQrcodeParam(); qdto.setQrcodeParam(qrcodeParam);
if (StringUtils.isBlank(qrcodeParam)) { qdto.setUnionId(externalUserDTO.getUnionId());
powerService.saveClerkQrCode(clerk.getClerkId()); if(wxEnterpriseRelated.getWxEnterpriseType()==0) {
clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode); qdto.setUserId(externalUserDTO.getExternalUserId());
qrcodeParam = clerk.getQrcodeParam(); }
} qdto.setSence(1);
if (StringUtils.isBlank(qrcodeParam)) { String memberId = null;
return "导购码不存在:" + clerkCode; com.gic.api.base.commons.ServiceResponse<MemberSimpleDetailDTO> resp = this.memberEntranceApiService.enterpriseWechatByFriendEntrance(qdto);
} logger.info("加好友,创建member,resp={},param={}",JSON.toJSON(resp),JSON.toJSONString(qdto));
MemberDTO member = null; if(resp.isSuccess()) {
if (StringUtils.isNotBlank(qrcodeParam) && StringUtils.isNotBlank(externalUserDTO.getUnionId())) { MemberSimpleDetailDTO member = resp.getResult() ;
member = memberOpenCardBusinessService.getMemberByQywxChannelParam(staffClerkRelationDTO.getEnterpriseId(), memberId = member.getMemberId() ;
externalUserDTO.getUnionId(), "", externalUserDTO.getName(), externalUserDTO.getAvatar(), qrcodeParam,1); }
} if (memberId == null) {
if (member == null) { return "会员不存在:unionid:" + externalUserDTO.getUnionId();
return "会员不存在:unionid:" + externalUserDTO.getUnionId(); }
} externalUserDTO.setMemberId(memberId);
externalUserDTO.setMemberId(member.getMemberId()); return memberUnionidRelatedApiService.addExternal(externalUserDTO);
return memberUnionidRelatedApiService.addExternal(externalUserDTO); }
}
public void dealException(String taskId, String dataId, String pDataId, String reason, String relationKey) {
public void dealException(String taskId, String dataId, String pDataId, String reason, String relationKey) { preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason, null, relationKey, PreDealTypeEnum.friend.getVal());
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason, null, relationKey, PreDealTypeEnum.friend.getVal()); checkDepartmentTask(taskId, pDataId);
checkDepartmentTask(taskId, pDataId); }
}
@Override
@Override public void dealException(String taskId, String dataId, String pDataId, String reason) {
public void dealException(String taskId, String dataId, String pDataId, String reason) { return;
return; }
}
@Override
@Override public void dealSuccess(String taskId, String dataId, String pDataId, String wxEnterpriseId) {
public void dealSuccess(String taskId, String dataId, String pDataId, String wxEnterpriseId) { //校验成功是否都
//校验成功是否都 checkDepartmentTask(taskId, pDataId);
checkDepartmentTask(taskId, pDataId); }
}
/**
/** * 自定义处理流程
* 自定义处理流程 *
* * @param taskId
* @param taskId * @param pDataId
* @param pDataId */
*/ public void checkDepartmentTask(String taskId, String pDataId) {
public void checkDepartmentTask(String taskId, String pDataId) { //校验是否都已经处理完成
//校验是否都已经处理完成 boolean b = preDealService.checkFriendTaskByPDataId(taskId, pDataId, PreDealTypeEnum.friend.getVal());
boolean b = preDealService.checkFriendTaskByPDataId(taskId, pDataId, PreDealTypeEnum.friend.getVal()); if (!b) {
if (!b) { return;
return; }
} logger.info("同步第三方服务商好友结束:{},{}", taskId, pDataId);
logger.info("同步第三方服务商好友结束:{},{}", taskId, pDataId); String key = "haoban_sync_third_friend_task_" + taskId + ":" + pDataId;
String key = "haoban_sync_third_friend_task_" + taskId + ":" + pDataId; String lockKey = "haoban_sync_third_friend_task_lock_" + taskId + ":" + pDataId;
String lockKey = "haoban_sync_third_friend_task_lock_" + taskId + ":" + pDataId; RedisUtil.lock(lockKey, 3L);
RedisUtil.lock(lockKey, 3L); Object hasDealCheck = RedisUtil.getCache(key);
Object hasDealCheck = RedisUtil.getCache(key); if (hasDealCheck != null) {
if (hasDealCheck != null) { logger.info("重复提交结束第三方好友:{}", pDataId);
logger.info("重复提交结束第三方好友:{}", pDataId); RedisUtil.unlock(lockKey);
RedisUtil.unlock(lockKey); return;
return; }
} RedisUtil.setCache(key, pDataId, 30L, TimeUnit.SECONDS);
RedisUtil.setCache(key, pDataId, 30L, TimeUnit.SECONDS); TabHaobanPreDealLog preDealLog = preDealService.getByDataId(taskId, pDataId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.dealing.getVal());
TabHaobanPreDealLog preDealLog = preDealService.getByDataId(taskId, pDataId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.dealing.getVal()); if (preDealLog != null) {
if (preDealLog != null) { preDealService.updateStatusByDataId(taskId, pDataId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
preDealService.updateStatusByDataId(taskId, pDataId, PreDealTypeEnum.friend_clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功"); this.checkDepartmentTask(taskId);
this.checkDepartmentTask(taskId); }
} RedisUtil.unlock(lockKey);
RedisUtil.unlock(lockKey); }
}
@Override
@Override public void checkDepartmentTask(String taskId) {
public void checkDepartmentTask(String taskId) { friendClerkSyncNewOperation.checkDepartmentTask(taskId);
friendClerkSyncNewOperation.checkDepartmentTask(taskId); }
}
/**
/** * 放入mq处理部门数据
* 放入mq处理部门数据 *
* * @param taskId
* @param taskId * @param dealList
* @param dealList */
*/ private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) { //预处理分组任务
//预处理分组任务 syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal()); List<String> ret = dealList.stream().map(relationId -> {
List<String> ret = dealList.stream().map(relationId -> { DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO(); dealParamMqDTO.setData(relationId);
dealParamMqDTO.setData(relationId); dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setTaskId(taskId); dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
dealParamMqDTO.setType(syncTaskStatusEnum.getVal()); return JSONObject.toJSONString(dealParamMqDTO);
return JSONObject.toJSONString(dealParamMqDTO); }).collect(Collectors.toList());
}).collect(Collectors.toList());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
GicMQClient clientInstance = GICMQClientUtil.getClientInstance(); try {
try { clientInstance.sendBatchMessages("departmentSyncDealMq", ret);
clientInstance.sendBatchMessages("departmentSyncDealMq", ret); } catch (Exception e) {
} catch (Exception e) { logger.info("发送失败:{}", taskId, e);
logger.info("发送失败:{}", taskId, e); e.printStackTrace();
e.printStackTrace(); }
} }
} }
}
package com.gic.haoban.manage.service.util;
public enum QwInterfaceLimitEnum {
GET_PENDING_ID("qw_limit_pending_id", "unionid查询external_userid接口", 0);
private String name;
private String remark;
private int type;
private QwInterfaceLimitEnum(String name, String remark, int type) {
this.name = name;
this.remark = remark;
this.type = type;
}
public String getName() {
return name;
}
public String getRemark() {
return remark;
}
public int getType() {
return type;
}
public void setName(String name) {
this.name = name;
}
public void setRemark(String remark) {
this.remark = remark;
}
public void setType(int type) {
this.type = type;
}
}
package com.gic.haoban.manage.service.util;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.redisson.api.RAtomicLong;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.commons.util.DateUtil;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.enterprise.service.CustomSettingApiService;
import com.gic.haoban.common.utils.DingUtils;
import com.gic.haoban.manage.service.errorcode.HaoBanErrCode;
import com.gic.haoban.manage.service.pojo.bo.QwLimitTimesBO;
import com.gic.redis.data.util.RedisUtil;
@Component
public class QwTimesUtils {
private static Logger logger = LogManager.getLogger(QwTimesUtils.class);
private static CustomSettingApiService customSettingApiService;
public static EnterpriseService enterpriseService;
@Autowired
public void setCustomSettingApiService(CustomSettingApiService customSettingApiService) {
QwTimesUtils.customSettingApiService = customSettingApiService;
}
@Autowired
public void setEnterpriseService(EnterpriseService enterpriseService) {
QwTimesUtils.enterpriseService = enterpriseService;
}
public static Map<String,Object> getPendingTimes(String wxEnterpriseId) {
QwInterfaceLimitEnum qwInterface = QwInterfaceLimitEnum.GET_PENDING_ID ;
Date now = new Date();
String dateStr = getDateStr(now);
String interfaceName = qwInterface.getName();
String keyMonth = getCacheKey(wxEnterpriseId, interfaceName, dateStr.substring(0, 6));
Integer doneTimesMonth = RedisUtil.getCache(keyMonth, Integer.class);
String keyDay = getCacheKey(wxEnterpriseId, interfaceName, dateStr.substring(0, 8));
Integer doneTimesDay = RedisUtil.getCache(keyDay, Integer.class);
String keyHour = getCacheKey(wxEnterpriseId, interfaceName, dateStr.substring(0, 10));
Integer doneTimesHour = RedisUtil.getCache(keyHour, Integer.class);
Map<String,Object> map = new HashMap<String, Object>() ;
map.put("小时调用数", doneTimesHour) ;
map.put("每天调用数", doneTimesDay) ;
map.put("每月调用数", doneTimesMonth) ;
QwLimitTimesBO setTimeBO = getSettingTimes(wxEnterpriseId, qwInterface);
map.put("配置数", JSON.toJSON(setTimeBO)) ;
return map ;
}
public static HaoBanErrCode isLimit(String wxEnterpriseId, String enterpriseId, QwInterfaceLimitEnum qwInterface) {
QwLimitTimesBO setTimeBO = getSettingTimes(wxEnterpriseId, qwInterface);
logger.info("获取配置次数={},wxEnterpriseId={},{}", JSON.toJSONString(setTimeBO), wxEnterpriseId,enterpriseId);
// 先判断月
String interfaceName = qwInterface.getName();
Date now = new Date();
String dateStr = getDateStr(now);
String keyMonth = getCacheKey(wxEnterpriseId, interfaceName, dateStr.substring(0, 6));
boolean monthResult = timesCheck(1, keyMonth, qwInterface, wxEnterpriseId, enterpriseId, now, setTimeBO);
if (monthResult) {
logger.info("月达到限制={},{}", keyMonth,enterpriseId);
return HaoBanErrCode.ERR_2000;
}
// 天
String keyDay = getCacheKey(wxEnterpriseId, interfaceName, dateStr.substring(0, 8));
boolean dayResult = timesCheck(2, keyDay, qwInterface, wxEnterpriseId, enterpriseId, now, setTimeBO);
if (dayResult) {
logger.info("天达到限制={},{}", keyDay,enterpriseId);
return HaoBanErrCode.ERR_2001;
}
// 小时
String keyHour = getCacheKey(wxEnterpriseId, interfaceName, dateStr.substring(0, 10));
boolean hourResult = timesCheck(3, keyHour, qwInterface, wxEnterpriseId, enterpriseId, now, setTimeBO);
if (hourResult) {
logger.info("小时达到限制={},{}", keyHour,enterpriseId);
return HaoBanErrCode.ERR_2002;
}
return null;
}
private static boolean timesCheck(int type, String cacheKey, QwInterfaceLimitEnum qwInterface,
String wxEnterpriseId, String enterpriseId, Date now, QwLimitTimesBO setTimeBO) {
Integer doneTimes = RedisUtil.getCache(cacheKey, Integer.class);
logger.info("type{}获取已调次数={},cacheKey={}", type, doneTimes == null ? 0 : doneTimes, cacheKey);
if (null == doneTimes || doneTimes == 0) {
return false;
}
int setTimes = 0;
switch (type) {
case 1:
setTimes = setTimeBO.getMonth();
break;
case 2:
setTimes = setTimeBO.getDay();
break;
case 3:
setTimes = setTimeBO.getHour();
break;
default:
break;
}
sendAlert(type, doneTimes, setTimes, qwInterface, enterpriseId, now);
if (doneTimes >= setTimes) {
return true;
}
return false;
}
private static QwLimitTimesBO getSettingTimes(String wxEnterpriseId, QwInterfaceLimitEnum qwInterface) {
String key = String.format("%s_%s", qwInterface.getName(), wxEnterpriseId);
QwLimitTimesBO times = getTimes(key);
if (null == times) {
return getTimes(qwInterface.getName());
}
return times;
}
private static QwLimitTimesBO getTimes(String key) {
JSONObject searchParamMap = new JSONObject();
searchParamMap.put("key", key);
ServiceResponse<Map<String, Object>> resp = customSettingApiService.getDetail("tab_gic_map",
searchParamMap.toJSONString());
if (resp.isSuccess() && null != resp.getResult()) {
return JSON.parseObject(resp.getResult().get("value").toString(), QwLimitTimesBO.class);
}
return null;
}
private static void sendAlert(int type, int doneTimes, int setTimes, QwInterfaceLimitEnum qwInterface,
String enterpriseId, Date now) {
// 调用次数达上线
String time = null;
String title = "已达上限";
String alertKey = qwInterface.getName()+enterpriseId+"alert"+type ;
boolean sendFlag = false;
if (doneTimes >= setTimes) {
sendFlag = true;
if (type == 1) {
time = DateUtil.dateToStr(now, "yyyy年MM月");
}
if (type == 2) {
time = DateUtil.dateToStr(now, "yyyy年MM月dd日");
}
if (type == 3) {
time = DateUtil.dateToStr(now, "yyyy年MM月dd日 HH:mm:ss");
}
} else if (type == 1 || type == 2) {
switch (type) {
case 1:
setTimes = setTimes - 30000;
break;
case 2:
setTimes = setTimes - 300000;
break;
default:
break;
}
if (doneTimes >= setTimes) {
sendFlag = true;
if (type == 1) {
time = DateUtil.dateToStr(now, "yyyy年MM月");
}
if (type == 2) {
time = DateUtil.dateToStr(now, "yyyy年MM月dd日");
}
title = "即将达到可调用次数";
alertKey+="_1" ;
}
}
logger.info("告警key={},value={}",alertKey,RedisUtil.getCache(alertKey));
if (sendFlag && null == RedisUtil.getCache(alertKey)) {
if(type==3) {
RedisUtil.setCache(alertKey, 1 , 60*59L);
}else {
RedisUtil.setCache(alertKey, 1 , 60*60*12L);
}
EnterpriseDTO enterpriseDTO = enterpriseService.getEnterpriseById(enterpriseId);
String brandName = enterpriseDTO.getBrandName();
// 达到上限时文案
String msg = String.format("告警【%s】%s调用在【%s】%s", brandName, qwInterface.getRemark(), time, title);
DingUtils.send(msg, false);
}
}
public static void addTimes(String wxEnterpriseId, QwInterfaceLimitEnum obj) {
String interfaceName = obj.getName();
Date now = new Date();
String dateStr = getDateStr(now);
String keyHour = getCacheKey(wxEnterpriseId, interfaceName, dateStr.substring(0, 10));
addTimes(3, keyHour);
String keyDay = getCacheKey(wxEnterpriseId, interfaceName, dateStr.substring(0, 8));
addTimes(2, keyDay);
String keyMonth = getCacheKey(wxEnterpriseId, interfaceName, dateStr.substring(0, 6));
addTimes(1, keyMonth);
}
private static String getCacheKey(String wxEnterpriseId, String interfacName, String dateStr) {
return new StringBuilder(wxEnterpriseId).append(interfacName).append(dateStr).toString();
}
// 1月 2天 3小时
private static void addTimes(int type, String key) {
RAtomicLong cache = RedisUtil.getRedisClient().getAtomicLong(key);
long val = cache.addAndGet(1);
if (val <= 1) {
switch (type) {
case 1:
cache.expire(31, TimeUnit.DAYS);
break;
case 2:
cache.expire(1, TimeUnit.DAYS);
break;
case 3:
cache.expire(1, TimeUnit.HOURS);
break;
default:
break;
}
}
}
private static String getDateStr(Date now) {
String dateStr = DateUtil.dateToStr(now, "yyyyMMddHHmmss");
return dateStr;
}
}
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
<dubbo:service interface="com.gic.haoban.manage.api.service.KeyDataApiService" ref="keyDataApiService" timeout="10000"/> <dubbo:service interface="com.gic.haoban.manage.api.service.KeyDataApiService" ref="keyDataApiService" timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.hm.HmLinkApiService" ref="hmLinkApiService" timeout="10000"/> <dubbo:service interface="com.gic.haoban.manage.api.service.hm.HmLinkApiService" ref="hmLinkApiService" timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.HaobanUserApiService" ref="haobanUserApiService" timeout="10000"/> <dubbo:service interface="com.gic.haoban.manage.api.service.HaobanUserApiService" ref="haobanUserApiService" timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.QwFriendApiService" ref="qwFriendApiService" timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.ApplicationApiService" ref="applicationApiServiceImpl" <dubbo:service interface="com.gic.haoban.manage.api.service.ApplicationApiService" ref="applicationApiServiceImpl"
timeout="10000"/> timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.TestApiService" ref="testServiceImpl" timeout="10000"/> <dubbo:service interface="com.gic.haoban.manage.api.service.TestApiService" ref="testServiceImpl" timeout="10000"/>
...@@ -46,8 +47,6 @@ ...@@ -46,8 +47,6 @@
timeout="10000"/> timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService" <dubbo:service interface="com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService"
ref="memberUnionidRelatedApiServiceImpl" timeout="10000"/> ref="memberUnionidRelatedApiServiceImpl" timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.BindApiService" ref="bindApiServiceImpl"
timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.ApplicationSettingApiService" <dubbo:service interface="com.gic.haoban.manage.api.service.ApplicationSettingApiService"
ref="applicationSettingApiServiceImpl" timeout="10000"/> ref="applicationSettingApiServiceImpl" timeout="10000"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.AuditSettingApiService" ref="auditSettingApiServiceImpl" <dubbo:service interface="com.gic.haoban.manage.api.service.AuditSettingApiService" ref="auditSettingApiServiceImpl"
...@@ -134,8 +133,7 @@ ...@@ -134,8 +133,7 @@
<dubbo:reference interface="com.gic.enterprise.api.service.EnterpriseUseForbidService" id="enterpriseUseForbidService"/> <dubbo:reference interface="com.gic.enterprise.api.service.EnterpriseUseForbidService" id="enterpriseUseForbidService"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.role.HaobanMenuApiService" ref="haobanMenuApiServiceImpl"/> <dubbo:service interface="com.gic.haoban.manage.api.service.role.HaobanMenuApiService" ref="haobanMenuApiServiceImpl"/>
<dubbo:service interface="com.gic.haoban.manage.api.service.role.HaobanRoleApiService" ref="haobanRoleApiServiceImpl"/> <dubbo:service interface="com.gic.haoban.manage.api.service.role.HaobanRoleApiService" ref="haobanRoleApiServiceImpl"/>
<dubbo:reference interface="com.gic.enterprise.api.service.DepartmentService" id="gicDepartmentService"/> <dubbo:reference interface="com.gic.enterprise.api.service.DepartmentService" id="gicDepartmentService"/>
<dubbo:reference interface="com.gic.wechat.api.service.qywx.QywxDepartmentApiService" <dubbo:reference interface="com.gic.wechat.api.service.qywx.QywxDepartmentApiService"
id="qywxDepartmentApiService"/> id="qywxDepartmentApiService"/>
...@@ -191,7 +189,7 @@ ...@@ -191,7 +189,7 @@
interface="com.gic.enterprise.api.service.StoreWidgetService" timeout="10000" interface="com.gic.enterprise.api.service.StoreWidgetService" timeout="10000"
retries="0" check="false"/> retries="0" check="false"/>
<dubbo:reference id="memberTagOpenApiService" interface="com.gic.member.tag.api.service.MemberTagOpenApiService" timeout="10000" retries="0" check="false"/> <dubbo:reference id="memberTagOpenApiService" interface="com.gic.member.tag.api.service.MemberTagOpenApiService" timeout="10000" retries="0" check="false"/>
<dubbo:reference interface="com.gic.wechat.api.service.qywx.QywxExternalUserService" id="qywxExternalUserService"/>
<dubbo:reference interface="com.gic.marketing.api.service.SmsService" id="smsService" timeout="10000" retries="0"/> <dubbo:reference interface="com.gic.marketing.api.service.SmsService" id="smsService" timeout="10000" retries="0"/>
<dubbo:reference interface="com.gic.marketing.api.service.AccountOverdueSmsSendService" id="accountOverdueSmsSendService" timeout="10000" retries="0"/> <dubbo:reference interface="com.gic.marketing.api.service.AccountOverdueSmsSendService" id="accountOverdueSmsSendService" timeout="10000" retries="0"/>
<dubbo:reference interface="com.gic.thirdparty.api.service.VoiceService" id="voiceService" timeout="10000" retries="0"/> <dubbo:reference interface="com.gic.thirdparty.api.service.VoiceService" id="voiceService" timeout="10000" retries="0"/>
......
...@@ -20,12 +20,6 @@ ...@@ -20,12 +20,6 @@
member_unionid_related_id, member_id, unionid, wx_enterprise_id, status_flag, external_userid, member_unionid_related_id, member_id, unionid, wx_enterprise_id, status_flag, external_userid,
staff_id, create_time, update_time,add_create_time,self_external_userid,external_name,enterprise_id staff_id, create_time, update_time,add_create_time,self_external_userid,external_name,enterprise_id
</sql> </sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String">
select
<include refid="Base_Column_List"/>
from tab_haoban_member_unionid_related
where member_unionid_related_id = #{memberUnionidRelatedId,jdbcType=VARCHAR}
</select>
<insert id="insert" parameterType="com.gic.haoban.manage.service.entity.MemberUnionidRelated"> <insert id="insert" parameterType="com.gic.haoban.manage.service.entity.MemberUnionidRelated">
insert into tab_haoban_member_unionid_related (member_unionid_related_id, member_id, insert into tab_haoban_member_unionid_related (member_unionid_related_id, member_id,
unionid, wx_enterprise_id, status_flag, unionid, wx_enterprise_id, status_flag,
...@@ -39,102 +33,6 @@ ...@@ -39,102 +33,6 @@
#{enterpriseId}) #{enterpriseId})
</insert> </insert>
<update id="updateByPrimaryKeySelective" parameterType="com.gic.haoban.manage.service.entity.MemberUnionidRelated">
update tab_haoban_member_unionid_related
<set>
<if test="memberId != null">
member_id = #{memberId,jdbcType=VARCHAR},
</if>
<if test="unionid != null">
unionid = #{unionid,jdbcType=VARCHAR},
</if>
<if test="wxEnterpriseId != null">
wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR},
</if>
<if test="enterpriseId != null">
enterprise_id = #{enterpriseId,jdbcType=VARCHAR},
</if>
<if test="statusFlag != null">
status_flag = #{statusFlag,jdbcType=INTEGER},
</if>
<if test="externalUserid != null">
external_userid = #{externalUserid,jdbcType=VARCHAR},
</if>
<if test="staffId != null">
staff_id = #{staffId,jdbcType=VARCHAR},
</if>
<if test="addCreateTime != null">
add_create_time = #{addCreateTime,jdbcType=VARCHAR},
</if>
<if test="selfExternalUserid != null">
self_external_userid = #{selfExternalUserid,jdbcType=VARCHAR},
</if>
<if test="externalName != null">
external_name = #{externalName,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
update_time = now()
</set>
where member_unionid_related_id = #{memberUnionidRelatedId,jdbcType=VARCHAR}
</update>
<update id="cleanByCid">
update tab_haoban_member_unionid_related
set
status_flag = 0,
update_time=now()
where member_id is null
<if test="cid !=null">
and wx_enterprise_id = #{cid}
</if>
</update>
<select id="getByUnionId" resultMap="BaseResultMap" parameterType="java.lang.String">
select
<include refid="Base_Column_List"/>
from tab_haoban_member_unionid_related
where staff_id = #{staffId}
and wx_enterprise_id=#{wxEnterpriseId}
and status_flag = 1
and unionid = #{unionid}
limit 1
</select>
<update id="deleteByUnionidAndUserId" parameterType="com.gic.haoban.manage.service.entity.MemberUnionidRelated">
update tab_haoban_member_unionid_related
set status_flag = 0,
update_time=now()
where external_userid = #{externalUserid,jdbcType=VARCHAR}
and staff_id = #{staffId}
</update>
<update id="delMemberUnionidRelatedBatch" parameterType="com.gic.haoban.manage.service.entity.MemberUnionidRelated">
update tab_haoban_member_unionid_related
set status_flag = 0,update_time=now()
where
wx_enterprise_id=#{wxEnterpriseId}
and staff_id = #{staffId}
and external_userid in
<foreach collection="externalUserids" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</update>
<update id="cleanStaffRelated" parameterType="com.gic.haoban.manage.service.entity.MemberUnionidRelated">
update tab_haoban_member_unionid_related
set status_flag = 0,
update_time = now()
where wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR}
and staff_id in
<foreach collection="staffIds" item="id" index="index" open="(" close=")" separator=",">
#{id,jdbcType=VARCHAR}
</foreach>
and status_flag = 1
</update>
<select id="getBySelfExternalUserId" resultMap="BaseResultMap"> <select id="getBySelfExternalUserId" resultMap="BaseResultMap">
select select
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>
...@@ -148,16 +46,6 @@ ...@@ -148,16 +46,6 @@
order by create_time desc limit 1 order by create_time desc limit 1
</select> </select>
<select id="listBySelfExternalUserId" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from tab_haoban_member_unionid_related
where wx_enterprise_id = #{wxEnterpriseId}
and status_flag = 1
and staff_id = #{staffId}
and self_external_userid = #{selfExternalUserId}
</select>
<select id="listByWxEnterpriseIdAndExternalUserId" resultMap="BaseResultMap"> <select id="listByWxEnterpriseIdAndExternalUserId" resultMap="BaseResultMap">
select select
external_userid, self_external_userid from tab_haoban_member_unionid_related external_userid, self_external_userid from tab_haoban_member_unionid_related
......
...@@ -187,6 +187,17 @@ ...@@ -187,6 +187,17 @@
from tab_haoban_staff_department_related from tab_haoban_staff_department_related
where status_flag = 1 where status_flag = 1
and wx_enterprise_id = #{wxEnterpriseId} and staff_id = #{staffId} and wx_enterprise_id = #{wxEnterpriseId} and staff_id = #{staffId}
</select>
<select id="listNoDepartStaff" resultType="String">
SELECT distinct(a.staff_id) FROM `tab_haoban_staff` a LEFT JOIN `tab_haoban_staff_department_related` b ON a.`staff_id` = b.`staff_id` AND b.`status_flag` = 1
WHERE
a.create_time >= #{addDate}
<if test="null != wxEnterpriseId">
and a.wx_enterprise_id = #{wxEnterpriseId}
</if>
AND a.status_flag = 1 AND b.`staff_department_related_id` IS NULL
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
staff_id, wx_user_id, phone_number, staff_name, nation_code, nick_name, sex, postion, staff_id
, wx_user_id, phone_number, staff_name, nation_code, nick_name, sex, postion,
active_flag, extend_postion, status_flag, create_time, update_time,wx_enterprise_id,head_img, active_flag, extend_postion, status_flag, create_time, update_time,wx_enterprise_id,head_img,
sort,sync_postion_flag,super_manager_flag,wx_open_user_id,wx_open_id,qr_code,add_num,active_status sort,sync_postion_flag,super_manager_flag,wx_open_user_id,wx_open_id,qr_code,add_num,active_status
</sql> </sql>
...@@ -38,7 +39,7 @@ ...@@ -38,7 +39,7 @@
from tab_haoban_staff from tab_haoban_staff
where staff_id = #{staffId,jdbcType=VARCHAR} and status_flag = 1 where staff_id = #{staffId,jdbcType=VARCHAR} and status_flag = 1
</select> </select>
<update id="delOtherStaffByWxUserId"> <update id="delOtherStaffByWxUserId">
update tab_haoban_staff update tab_haoban_staff
...@@ -282,11 +283,11 @@ ...@@ -282,11 +283,11 @@
select select
a.* a.*
<if test="departmentIds != null and departmentIds.size() > 0"> <if test="departmentIds != null and departmentIds.size() > 0">
, b.department_id departmentIds , b.department_id departmentIds
</if> </if>
from tab_haoban_staff a from tab_haoban_staff a
<if test="departmentIds != null and departmentIds.size() > 0"> <if test="departmentIds != null and departmentIds.size() > 0">
left join tab_haoban_staff_department_related b on a.staff_id = b.staff_id and b.status_flag = 1 left join tab_haoban_staff_department_related b on a.staff_id = b.staff_id and b.status_flag = 1
</if> </if>
where a.status_flag = 1 and a.wx_enterprise_id = #{wxEnterpriseId} where a.status_flag = 1 and a.wx_enterprise_id = #{wxEnterpriseId}
<if test="keyword != null and keyword != ''"> <if test="keyword != null and keyword != ''">
...@@ -314,7 +315,7 @@ ...@@ -314,7 +315,7 @@
</foreach> </foreach>
</if> </if>
<if test="departmentIds != null and departmentIds.size() > 0"> <if test="departmentIds != null and departmentIds.size() > 0">
group by a.staff_id group by a.staff_id
</if> </if>
order by a.create_time desc order by a.create_time desc
</select> </select>
...@@ -358,7 +359,7 @@ ...@@ -358,7 +359,7 @@
<foreach collection="userIds" item="id" index="index" open="(" close=")" separator=","> <foreach collection="userIds" item="id" index="index" open="(" close=")" separator=",">
#{id,jdbcType=VARCHAR} #{id,jdbcType=VARCHAR}
</foreach> </foreach>
or or
wx_open_user_id IN wx_open_user_id IN
<foreach collection="userIds" item="id" index="index" open="(" close=")" separator=","> <foreach collection="userIds" item="id" index="index" open="(" close=")" separator=",">
#{id,jdbcType=VARCHAR} #{id,jdbcType=VARCHAR}
...@@ -467,16 +468,17 @@ ...@@ -467,16 +468,17 @@
<update id="updateAddNumById" parameterType="java.lang.String"> <update id="updateAddNumById" parameterType="java.lang.String">
update tab_haoban_staff update tab_haoban_staff
set add_num = add_num +1, set add_num = add_num + 1,
update_time = now() update_time = now()
where staff_id = #{staffId} and status_flag = 1 where staff_id = #{staffId}
and status_flag = 1
</update> </update>
<update id="updateActiveStatusById" > <update id="updateActiveStatusById">
update tab_haoban_staff update tab_haoban_staff
set active_status = #{activeStatus}, set active_status = #{activeStatus},
update_time = now() update_time = now()
where staff_id = #{staffId} where staff_id = #{staffId}
</update> </update>
...@@ -489,4 +491,29 @@ ...@@ -489,4 +491,29 @@
where status_flag = 1 where status_flag = 1
</update> </update>
<select id="listBindStoreIds" resultType="com.gic.haoban.manage.api.dto.StaffDTO">
select
a.staff_id staffId,
a.phone_number phoneNumber,
a.staff_name staffName,
a.head_img headImg,
a.wx_enterprise_id wxEnterpriseId,
b.clerk_id clerkId,
b.clerk_code clerkCode,
b.enterprise_id enterpriseId,
b.store_id storeId
from tab_haoban_staff a
left join tab_haoban_staff_clerk_relation b on a.staff_id = b.staff_id
where a.wx_enterprise_id = #{wxEnterpriseId}
and a.status_flag = 1 and b.status_flag = 1
<if test="null != storeIds and storeIds.size gt 0">
and b.store_id in
<foreach collection="storeIds" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
limit 100
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -91,6 +91,9 @@ ...@@ -91,6 +91,9 @@
<if test="updateTime != null"> <if test="updateTime != null">
update_time, update_time,
</if> </if>
<if test="selfExternalUserid != null">
self_external_userid,
</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="externalClerkRelatedId != null"> <if test="externalClerkRelatedId != null">
...@@ -147,6 +150,9 @@ ...@@ -147,6 +150,9 @@
<if test="updateTime != null"> <if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP},
</if> </if>
<if test="selfExternalUserid != null">
#{selfExternalUserid},
</if>
</trim> </trim>
</insert> </insert>
<update id="updateByPrimaryKeySelective" <update id="updateByPrimaryKeySelective"
...@@ -211,11 +217,11 @@ ...@@ -211,11 +217,11 @@
and status_flag = 1 and status_flag = 1
</select> </select>
<update id="delByUserIdAndExternalUserId" parameterType="com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated" > <update id="delByUserIdAndExternalUserId">
update tab_haoban_external_clerk_related update tab_haoban_external_clerk_related
set status_flag = 2, set status_flag = 2,
update_time = now() update_time = now()
where external_user_id = #{externalUserId,jdbcType=VARCHAR} where external_user_id = #{externalUserId}
and staff_id = #{staffId} and staff_id = #{staffId}
and status_flag in (1, 3, 4) and status_flag in (1, 3, 4)
</update> </update>
......
...@@ -160,8 +160,11 @@ ...@@ -160,8 +160,11 @@
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>
from tab_haoban_staff_clerk_relation from tab_haoban_staff_clerk_relation
where status_flag=1 where status_flag=1
and store_id = #{storeId,jdbcType=VARCHAR}
and staff_id = #{staffId,jdbcType=VARCHAR} and staff_id = #{staffId,jdbcType=VARCHAR}
<if test="null != storeId and storeId != ''">
and store_id = #{storeId}
</if>
order by update_time desc limit 1
</select> </select>
......
...@@ -473,15 +473,6 @@ ...@@ -473,15 +473,6 @@
order by create_time desc limit 1 order by create_time desc limit 1
</select> </select>
<select id="getEnterpriseByCorpName" resultMap="BaseResultMap" parameterType="java.lang.String">
select
<include refid="Base_Column_List"/>
from tab_haoban_wx_enterprise
where corp_name = #{corpName} and status_flag = 1
order by create_time desc limit 1
</select>
<update id="updateExternalFlagById"> <update id="updateExternalFlagById">
update tab_haoban_wx_enterprise update tab_haoban_wx_enterprise
set external_flag = #{externalFlag}, set external_flag = #{externalFlag},
......
...@@ -27,11 +27,6 @@ ...@@ -27,11 +27,6 @@
from tab_haoban_wx_enterprise_related from tab_haoban_wx_enterprise_related
where wx_enterprise_related_id = #{wxEnterpriseRelatedId,jdbcType=VARCHAR} where wx_enterprise_related_id = #{wxEnterpriseRelatedId,jdbcType=VARCHAR}
</select> </select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
delete
from tab_haoban_wx_enterprise_related
where wx_enterprise_related_id = #{wxEnterpriseRelatedId,jdbcType=VARCHAR}
</delete>
<update id="deleteByEnterpriseId"> <update id="deleteByEnterpriseId">
update tab_haoban_wx_enterprise_related set status_flag = 0 , update_time=now() where enterprise_id=#{enterpriseId} and status_flag=1 update tab_haoban_wx_enterprise_related set status_flag = 0 , update_time=now() where enterprise_id=#{enterpriseId} and status_flag=1
......
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.EnterpriseDetailDTO; import com.gic.haoban.manage.api.dto.EnterpriseDetailDTO;
import com.gic.haoban.manage.api.dto.hm.HmGroupDTO; import com.gic.haoban.manage.api.dto.hm.HmGroupDTO;
import com.gic.haoban.manage.api.dto.hm.HmGroupQueryDTO; import com.gic.haoban.manage.api.dto.hm.HmGroupQueryDTO;
import com.gic.haoban.manage.api.dto.hm.HmPageDTO; import com.gic.haoban.manage.api.dto.hm.HmPageDTO;
import com.gic.haoban.manage.api.dto.hm.HmPageRelationDTO; import com.gic.haoban.manage.api.dto.hm.HmPageRelationDTO;
import com.gic.haoban.manage.api.dto.hm.HmWelcomeRelationDTO; import com.gic.haoban.manage.api.dto.hm.HmWelcomeRelationDTO;
import com.gic.haoban.manage.api.dto.qdto.hm.HmPageRelationQDTO; import com.gic.haoban.manage.api.dto.qdto.hm.HmPageRelationQDTO;
import com.gic.haoban.manage.api.dto.welcome.qdto.QueryWelcomeRelationQDTO; import com.gic.haoban.manage.api.dto.welcome.qdto.QueryWelcomeRelationQDTO;
import com.gic.haoban.manage.api.enums.hm.HmWelcomeReferType; import com.gic.haoban.manage.api.enums.hm.HmWelcomeReferType;
import com.gic.haoban.manage.api.service.WxEnterpriseApiService; import com.gic.haoban.manage.api.service.WxEnterpriseApiService;
import com.gic.haoban.manage.api.service.WxEnterpriseRelatedApiService; import com.gic.haoban.manage.api.service.WxEnterpriseRelatedApiService;
import com.gic.haoban.manage.api.service.hm.HmGroupApiService; import com.gic.haoban.manage.api.service.hm.HmGroupApiService;
import com.gic.haoban.manage.api.service.hm.HmPageApiService; import com.gic.haoban.manage.api.service.hm.HmPageApiService;
import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService; import com.gic.haoban.manage.api.service.hm.HmQrcodeApiService;
import com.gic.haoban.manage.api.service.hm.HmWelcomeRelationApiService; import com.gic.haoban.manage.api.service.hm.HmWelcomeRelationApiService;
import com.gic.haoban.manage.service.pojo.bo.hm.HmWelcomeRelationBO; import com.gic.haoban.manage.service.pojo.bo.hm.HmWelcomeRelationBO;
import com.gic.haoban.manage.service.service.ExternalClerkRelatedService; import com.gic.haoban.manage.service.service.ExternalClerkRelatedService;
import com.gic.haoban.manage.service.service.hm.WelcomeRelationService; import com.gic.haoban.manage.service.service.hm.WelcomeRelationService;
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext-conf.xml"}) @ContextConfiguration(locations = {"classpath:applicationContext-conf.xml"})
public class HmPageServiceTest { public class HmPageServiceTest {
@Autowired @Autowired
private HmPageApiService pageService; private HmPageApiService pageService;
@Autowired @Autowired
private WxEnterpriseRelatedApiService enterpriseRelatedApiService; private WxEnterpriseRelatedApiService enterpriseRelatedApiService;
@Autowired @Autowired
private HmGroupApiService groupService; private HmGroupApiService groupService;
@Autowired @Autowired
private HmWelcomeRelationApiService welcomeRelationApiService; private HmWelcomeRelationApiService welcomeRelationApiService;
@Autowired @Autowired
private WxEnterpriseApiService wxEnterpriseApiService ; private WxEnterpriseApiService wxEnterpriseApiService ;
@Autowired @Autowired
private ExternalClerkRelatedService externalClerkRelatedService ; private ExternalClerkRelatedService externalClerkRelatedService ;
@Test @Test
public void test(){ public void test(){
this.externalClerkRelatedService.repairExternalUserId("218a8a6c2ca14e28a1053f541be0e49d,ca66a01b79474c40b3e7c7f93daf1a3b"); this.externalClerkRelatedService.repairExternalUserId("218a8a6c2ca14e28a1053f541be0e49d,ca66a01b79474c40b3e7c7f93daf1a3b");
// this.wxEnterpriseApiService.stopHaoban("ff80808182c3a46b0182c3a4ea7d0000"); // this.wxEnterpriseApiService.stopHaoban("ff80808182c3a46b0182c3a4ea7d0000");
/* HmPageQDTO pageQDTO = new HmPageQDTO(); /* HmPageQDTO pageQDTO = new HmPageQDTO();
pageQDTO.setPageSearchText("MB01419872763172380673"); pageQDTO.setPageSearchText("MB01419872763172380673");
ServiceResponse<Page<HmPageDTO>> pageServiceResponse = pageService.queryPageList(pageQDTO);*/ ServiceResponse<Page<HmPageDTO>> pageServiceResponse = pageService.queryPageList(pageQDTO);*/
} }
@Test @Test
public void entriprise(){ public void entriprise(){
ServiceResponse<EnterpriseDetailDTO> enterpriseDetailDTOServiceResponse = enterpriseRelatedApiService.queryEnterpriseDetail("ca66a01b79474c40b3e7c7f93daf1a3b", "ff8080815dacd3a2015dacd3ef5c0000"); ServiceResponse<EnterpriseDetailDTO> enterpriseDetailDTOServiceResponse = enterpriseRelatedApiService.queryEnterpriseDetail("ca66a01b79474c40b3e7c7f93daf1a3b", "ff8080815dacd3a2015dacd3ef5c0000");
System.out.println(JSON.toJSONString(enterpriseDetailDTOServiceResponse)); System.out.println(JSON.toJSONString(enterpriseDetailDTOServiceResponse));
} }
@Test @Test
public void queryPageList(){ public void queryPageList(){
HmPageRelationQDTO pageRelationQDTO = new HmPageRelationQDTO(); HmPageRelationQDTO pageRelationQDTO = new HmPageRelationQDTO();
pageRelationQDTO.setPageId(418460224953786370L); pageRelationQDTO.setPageId(418460224953786370L);
pageRelationQDTO.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000"); pageRelationQDTO.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000");
ServiceResponse<Page<HmPageRelationDTO>> pageServiceResponse = pageService.queryPageRelation(pageRelationQDTO); ServiceResponse<Page<HmPageRelationDTO>> pageServiceResponse = pageService.queryPageRelation(pageRelationQDTO);
System.out.println(JSON.toJSONString(pageServiceResponse)); System.out.println(JSON.toJSONString(pageServiceResponse));
} }
@Test @Test
public void deletePage(){ public void deletePage(){
HmPageDTO pageDTO = new HmPageDTO(); HmPageDTO pageDTO = new HmPageDTO();
pageDTO.setPageId(418460224953786370L); pageDTO.setPageId(418460224953786370L);
ServiceResponse<Boolean> booleanServiceResponse = pageService.deleteHmPage(pageDTO); ServiceResponse<Boolean> booleanServiceResponse = pageService.deleteHmPage(pageDTO);
System.out.println(JSON.toJSONString(booleanServiceResponse)); System.out.println(JSON.toJSONString(booleanServiceResponse));
} }
@Test @Test
public void groupList(){ public void groupList(){
HmGroupQueryDTO groupQueryDTO = new HmGroupQueryDTO(); HmGroupQueryDTO groupQueryDTO = new HmGroupQueryDTO();
//groupQueryDTO.setGroupName("默认"); //groupQueryDTO.setGroupName("默认");
groupQueryDTO.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000"); groupQueryDTO.setEnterpriseId("ff8080815dacd3a2015dacd3ef5c0000");
groupQueryDTO.setClerkId("b7279937120a433b9d96ae3c9abedb04"); groupQueryDTO.setClerkId("b7279937120a433b9d96ae3c9abedb04");
ServiceResponse<Page<HmGroupDTO>> pageServiceResponse = groupService.queryHmGroupSettingList(groupQueryDTO); ServiceResponse<Page<HmGroupDTO>> pageServiceResponse = groupService.queryHmGroupSettingList(groupQueryDTO);
System.out.println(JSON.toJSONString(pageServiceResponse)); System.out.println(JSON.toJSONString(pageServiceResponse));
} }
@Autowired @Autowired
private WelcomeRelationService welcomeRelationService; private WelcomeRelationService welcomeRelationService;
@Test @Test
public void saveWelcomeRelation(){ public void saveWelcomeRelation(){
HmWelcomeRelationBO welcomeRelationBo = new HmWelcomeRelationBO(); HmWelcomeRelationBO welcomeRelationBo = new HmWelcomeRelationBO();
welcomeRelationBo.setEnterpriseId("1231321312312"); welcomeRelationBo.setEnterpriseId("1231321312312");
welcomeRelationBo.setWxEnterpriseId("31312312312"); welcomeRelationBo.setWxEnterpriseId("31312312312");
welcomeRelationBo.setReferId("313131"); welcomeRelationBo.setReferId("313131");
welcomeRelationBo.setReferCode("HM1312312312"); welcomeRelationBo.setReferCode("HM1312312312");
welcomeRelationBo.setReferName("活码名称"); welcomeRelationBo.setReferName("活码名称");
welcomeRelationBo.setType(HmWelcomeReferType.HM.getCode()); welcomeRelationBo.setType(HmWelcomeReferType.HM.getCode());
welcomeRelationService.saveHmWelcomeRelation(welcomeRelationBo); welcomeRelationService.saveHmWelcomeRelation(welcomeRelationBo);
} }
@Test @Test
public void updateWelcomeRelationTest(){ public void updateWelcomeRelationTest(){
HmWelcomeRelationBO welcomeRelationBo = new HmWelcomeRelationBO(); HmWelcomeRelationBO welcomeRelationBo = new HmWelcomeRelationBO();
welcomeRelationBo.setEnterpriseId("1231321312312"); welcomeRelationBo.setEnterpriseId("1231321312312");
welcomeRelationBo.setWxEnterpriseId("31312312312"); welcomeRelationBo.setWxEnterpriseId("31312312312");
welcomeRelationBo.setReferId("313131"); welcomeRelationBo.setReferId("313131");
welcomeRelationBo.setReferCode("HM1312312dada"); welcomeRelationBo.setReferCode("HM1312312dada");
welcomeRelationBo.setReferName("活码名称"); welcomeRelationBo.setReferName("活码名称");
welcomeRelationBo.setType(HmWelcomeReferType.HM.getCode()); welcomeRelationBo.setType(HmWelcomeReferType.HM.getCode());
welcomeRelationService.updateWelcomeRelation(welcomeRelationBo); welcomeRelationService.updateWelcomeRelation(welcomeRelationBo);
} }
@Autowired @Autowired
private HmQrcodeApiService qrcodeApiService; private HmQrcodeApiService qrcodeApiService;
@Test @Test
public void batchUpdateQrcode(){ public void batchUpdateQrcode(){
List<Long> ids = Arrays.asList(418494104339988481L, 418494104339988482L); List<Long> ids = Arrays.asList(418494104339988481L, 418494104339988482L);
long grouoId = 420219621589671937L; long grouoId = 420219621589671937L;
ServiceResponse<Boolean> booleanServiceResponse = qrcodeApiService.batchUpdateHmQrcodeGroup(ids, grouoId); ServiceResponse<Boolean> booleanServiceResponse = qrcodeApiService.batchUpdateHmQrcodeGroup(ids, grouoId);
System.out.println(JSON.toJSONString(booleanServiceResponse)); System.out.println(JSON.toJSONString(booleanServiceResponse));
} }
@Test @Test
public void welcomeTest(){ public void welcomeTest(){
QueryWelcomeRelationQDTO qdto = new QueryWelcomeRelationQDTO(); QueryWelcomeRelationQDTO qdto = new QueryWelcomeRelationQDTO();
qdto.setWelcomeId("7f12bdab4fb543e8977f96e30fc8eddb"); qdto.setWelcomeId("7f12bdab4fb543e8977f96e30fc8eddb");
//qdto.setSearchContent("测试"); //qdto.setSearchContent("测试");
ServiceResponse<Page<HmWelcomeRelationDTO>> serviceResponse = welcomeRelationApiService.queryWelcomeRelation(qdto); ServiceResponse<Page<HmWelcomeRelationDTO>> serviceResponse = welcomeRelationApiService.queryWelcomeRelation(qdto);
System.out.println(JSON.toJSONString(serviceResponse)); System.out.println(JSON.toJSONString(serviceResponse));
} }
@Test @Test
public void groupNameCheckTest(){ public void groupNameCheckTest(){
ServiceResponse<List<HmGroupDTO>> ms = groupService.queryGroupListByName("", "ff8080815dacd3a2015dacd3ef5c0000", "测试006"); ServiceResponse<List<HmGroupDTO>> ms = groupService.queryGroupListByName("", "ff8080815dacd3a2015dacd3ef5c0000", "测试006");
System.out.println(JSON.toJSONString(ms)); System.out.println(JSON.toJSONString(ms));
} }
} }
...@@ -129,6 +129,11 @@ ...@@ -129,6 +129,11 @@
<version>${haoban-config}</version> <version>${haoban-config}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.gic</groupId>
<artifactId>log-record-sdk</artifactId>
<version>${log-record-sdk}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId> <groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId> <artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version> <version>3.1.0</version>
......
package com.gic.haoban.manage.web.controller; package com.gic.haoban.manage.web.controller;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
...@@ -10,6 +11,7 @@ import com.gic.clerk.api.service.ClerkNewService; ...@@ -10,6 +11,7 @@ import com.gic.clerk.api.service.ClerkNewService;
import com.gic.clerk.api.service.ClerkService; import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.DateUtil; import com.gic.commons.util.DateUtil;
import com.gic.commons.util.ExcelUtils; import com.gic.commons.util.ExcelUtils;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.dto.StoreDTO; import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService; import com.gic.enterprise.api.service.StoreService;
import com.gic.enterprise.api.service.StoreWidgetService; import com.gic.enterprise.api.service.StoreWidgetService;
...@@ -407,6 +409,27 @@ public class StaffController extends WebBaseController { ...@@ -407,6 +409,27 @@ public class StaffController extends WebBaseController {
} }
/** /**
* 是否展示区经 true是
* @return
*/
@RequestMapping("hasManagerFlag")
public RestResponse hasManagerFlag() {
WebLoginDTO login = AuthWebRequestUtil.getLoginUser();
String wxEnterpriseId = login.getWxEnterpriseId();
List<EnterpriseDetailDTO> list = wxEnterpriseRelatedApiService.listEnterpriseByWxEnterpriseId(wxEnterpriseId);
if (CollectionUtil.isEmpty(list)) {
return RestResponse.failure(Convert.toStr(HaoBanErrCode.ERR_10010.getCode()),HaoBanErrCode.ERR_10010.getMsg());
}
List<String> enterpriseIds = list.stream().filter(dto -> {
boolean over = wxEnterpriseApiService.enterpriseIsOver(dto.getEnterpriseId());
return !over;
}).map(EnterpriseDetailDTO::getEnterpriseId).collect(Collectors.toList());
List<ClerkDTO> clerkDTOList = clerkService.listClerkEnableHaoban(enterpriseIds, null);
boolean flag = CollectionUtils.isNotEmpty(clerkDTOList);
return RestResponse.successResult(flag);
}
/**
* @return 返回值类型: <pre> * @return 返回值类型: <pre>
* @author 作者: qwm * @author 作者: qwm
* @date 时间: 2020年12月18日 上午11:11:35 <pre> * @date 时间: 2020年12月18日 上午11:11:35 <pre>
......
...@@ -56,8 +56,6 @@ public class TestController extends WebBaseController { ...@@ -56,8 +56,6 @@ public class TestController extends WebBaseController {
@Autowired @Autowired
private QywxSuiteApiService qywxSuiteApiService; private QywxSuiteApiService qywxSuiteApiService;
@Autowired @Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private TestApiService testApiService; private TestApiService testApiService;
@Autowired @Autowired
private MaidianLogApiService maidianLogApiService; private MaidianLogApiService maidianLogApiService;
...@@ -77,8 +75,19 @@ public class TestController extends WebBaseController { ...@@ -77,8 +75,19 @@ public class TestController extends WebBaseController {
private HmQrcodeApiService hmQrcodeApiService; private HmQrcodeApiService hmQrcodeApiService;
@Autowired @Autowired
private QywxCorpApiService qywxCorpApiService; private QywxCorpApiService qywxCorpApiService;
@Autowired
private QwFriendApiService qwFriendApiService ;
@RequestMapping("/pending-check")
public HaobanResponse pendingChec(String enterpriseId, String unionid,String openid,String wxaUnionid ,String wxaOpenid) {
return this.resultResponse(HaoBanErrCode.ERR_0,this.qwFriendApiService.pendingIdCheck(enterpriseId, unionid, openid, wxaUnionid,wxaOpenid));
}
@RequestMapping("/get-pending-times")
public HaobanResponse getTestTimes(String wxEnterpriseId) {
return this.resultResponse(HaoBanErrCode.ERR_0,this.qwFriendApiService.getCallTimes(wxEnterpriseId));
}
@RequestMapping("/send-message-test") @RequestMapping("/send-message-test")
public HaobanResponse testSendMessage(QywxXcxSendMessageQo qo) { public HaobanResponse testSendMessage(QywxXcxSendMessageQo qo) {
...@@ -96,11 +105,6 @@ public class TestController extends WebBaseController { ...@@ -96,11 +105,6 @@ public class TestController extends WebBaseController {
} }
} }
@RequestMapping("/clean-out")
public HaobanResponse cleanMessage(String cid) {
memberUnionidRelatedApiService.cleanByCid(cid);
return resultResponse(HaoBanErrCode.ERR_1);
}
@RequestMapping("/test-dubbo") @RequestMapping("/test-dubbo")
public HaobanResponse dubbo(@RequestParam(defaultValue = "2000") Integer n, @RequestParam(defaultValue = "100") String t) { public HaobanResponse dubbo(@RequestParam(defaultValue = "2000") Integer n, @RequestParam(defaultValue = "100") String t) {
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<dubbo:protocol name="dubbo" port="30009"/> <dubbo:protocol name="dubbo" port="30009"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.QwFriendApiService" id="qwFriendApiService" timeout="10000"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.hm.WxUserAddLogApiService" id="wxUserAddLogApiService" timeout="10000"/> <dubbo:reference interface="com.gic.haoban.manage.api.service.hm.WxUserAddLogApiService" id="wxUserAddLogApiService" timeout="10000"/>
<dubbo:reference interface="com.gic.member.tag.api.service.MemberTagApiService" id="memberTagApiService" timeout="10000"/> <dubbo:reference interface="com.gic.member.tag.api.service.MemberTagApiService" id="memberTagApiService" timeout="10000"/>
<dubbo:reference interface="com.gic.clerk.api.service.PowerService" id="powerService" timeout="10000"/> <dubbo:reference interface="com.gic.clerk.api.service.PowerService" id="powerService" timeout="10000"/>
......
...@@ -558,18 +558,8 @@ public class WxEnterpriseInfoController extends WebBaseController { ...@@ -558,18 +558,8 @@ public class WxEnterpriseInfoController extends WebBaseController {
if (externalUserDTO == null) { if (externalUserDTO == null) {
logger.info("请先添加好友,企业微信未查询到该好友,externalUserid:{}", externalUserid); logger.info("请先添加好友,企业微信未查询到该好友,externalUserid:{}", externalUserid);
return resultResponse(HaoBanErrCode.ERR_11126); return resultResponse(HaoBanErrCode.ERR_11126);
} else { }
//是否需修复数据
String unionId = externalUserDTO.getUnionId();
ExternalClerkRelatedDTO externalClerkRelatedDTO = externalClerkRelatedApiService.getByWxEnterpriseIdAndUnionId(wxEnterpriseId, staffId, unionId);
if (externalClerkRelatedDTO != null) {
String memberUnionidRelatedId = externalClerkRelatedDTO.getMemberUnionidRelatedId();
MemberUnionidRelatedDTO memberUnionidRelatedDTO = memberUnionidRelatedApiService.getById(memberUnionidRelatedId);
if (memberUnionidRelatedDTO != null && StringUtils.isBlank(memberUnionidRelatedDTO.getSelfExternalUserid())) {
memberUnionidRelatedApiService.updateSelfExternalUseridById(externalUserid, memberUnionidRelatedId);
}
}
}
MemberUnionidRelatedDTO memberUnionidRelatedDTO = memberUnionidRelatedApiService.getBySelfExternalUserId(wxEnterpriseId, externalUserid); MemberUnionidRelatedDTO memberUnionidRelatedDTO = memberUnionidRelatedApiService.getBySelfExternalUserId(wxEnterpriseId, externalUserid);
if (null == memberUnionidRelatedDTO) { if (null == memberUnionidRelatedDTO) {
logger.info("请刷新好友,wxEnterpriseId:{},传入的externalUserid:{},wxUserId:{}", wxEnterpriseId, externalUserid, wxUserId); logger.info("请刷新好友,wxEnterpriseId:{},传入的externalUserid:{},wxUserId:{}", wxEnterpriseId, externalUserid, wxUserId);
......
...@@ -117,26 +117,14 @@ public class WxStaffController extends WebBaseController { ...@@ -117,26 +117,14 @@ public class WxStaffController extends WebBaseController {
if (storeIds.contains("-1")) { if (storeIds.contains("-1")) {
storeIds = null; storeIds = null;
} }
List<StaffClerkRelationDTO> list = staffClerkRelationApiService.listByStoreIds(storeIds); List<StaffDTO> resultlist = staffApiService.listBindStoreIds(storeIds, wxEnterpriseId);
List<String> staffIds = list.stream().map(StaffClerkRelationDTO::getStaffId).collect(Collectors.toList());
List<StaffDTO> resultlist = staffApiService.listByIds(staffIds);
Map<String, StaffDTO> map = com.gic.commons.util.CollectionUtil.toMap(resultlist, "staffId");
List<StaffVO> resultList = new ArrayList<>(); List<StaffVO> resultList = new ArrayList<>();
for (StaffClerkRelationDTO staffClerkRelationDTO : list) { for (StaffDTO staffDTO : resultlist) {
String staffId = staffClerkRelationDTO.getStaffId(); String enterpriseId = staffDTO.getEnterpriseId();
logger.info("员工id为:{}", staffId); long memberCount = distributeApiService.getClerkMemberCount(enterpriseId, staffDTO.getClerkId(), storeId);
StaffDTO staffDTO = map.get(staffId); logger.info("【获取会员数】enterpriseId={},clerkId={},storeId={},memberCount={}", enterpriseId, staffDTO.getClerkId(), storeId, memberCount);
if (staffDTO != null) { staffDTO.setMemberCount(Convert.toInt(memberCount, 0));
ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), staffClerkRelationDTO.getClerkCode()); resultList.add(EntityUtil.changeEntityNew(StaffVO.class, staffDTO));
if (clerk != null) {
long memberCount = distributeApiService.getClerkMemberCount(staffClerkRelationDTO.getEnterpriseId(), clerk.getClerkId(), storeId);
logger.info("【获取会员数】enterpriseId={},clerkId={},storeId={},memberCount={}", staffClerkRelationDTO.getEnterpriseId(), clerk.getClerkId(), storeId, memberCount);
staffDTO.setMemberCount(Convert.toInt(memberCount, 0));
staffDTO.setClerkId(clerk.getClerkId());
staffDTO.setClerkCode(clerk.getClerkCode());
resultList.add(EntityUtil.changeEntityNew(StaffVO.class, staffDTO));
}
}
} }
return resultResponse(HaoBanErrCode.ERR_1, resultList); return resultResponse(HaoBanErrCode.ERR_1, resultList);
...@@ -331,7 +319,7 @@ public class WxStaffController extends WebBaseController { ...@@ -331,7 +319,7 @@ public class WxStaffController extends WebBaseController {
return resultResponse(HaoBanErrCode.ERR_10009); return resultResponse(HaoBanErrCode.ERR_10009);
} }
String enterpriseId = store.getEnterpriseId(); String enterpriseId = store.getEnterpriseId();
boolean b = auditApiService.judgeHavePhoneNumberOrCode(enterpriseId, clerkCode, phoneNumber,wxEnterpriseId); boolean b = auditApiService.judgeHavePhoneNumberOrCode(enterpriseId, clerkCode, phoneNumber, wxEnterpriseId);
if (b) { if (b) {
//待审核中存在code或该手机号 //待审核中存在code或该手机号
return resultResponse(HaoBanErrCode.ERR_10021); return resultResponse(HaoBanErrCode.ERR_10021);
...@@ -343,7 +331,7 @@ public class WxStaffController extends WebBaseController { ...@@ -343,7 +331,7 @@ public class WxStaffController extends WebBaseController {
} }
AuditSettingDTO dto = auditSettingApiService.findSettingByWxEnterpriseId(wxEnterpriseId); AuditSettingDTO dto = auditSettingApiService.findSettingByWxEnterpriseId(wxEnterpriseId);
if (dto.getAuditFlag() == 1 && dto.getClerkChangeFlag() == 1) { if (dto.getAuditFlag() == 1 && dto.getClerkChangeFlag() == 1) {
AuditDTO auditDTO = auditApiService.findByBindRelatedIdAndAuditType(clerkCode, AuditType.CLERK_ADD.getCode(),wxEnterpriseId,enterpriseId); AuditDTO auditDTO = auditApiService.findByBindRelatedIdAndAuditType(clerkCode, AuditType.CLERK_ADD.getCode(), wxEnterpriseId, enterpriseId);
if (auditDTO != null) { if (auditDTO != null) {
logger.info("已经存在了审核记录,待审核{}", clerkCode); logger.info("已经存在了审核记录,待审核{}", clerkCode);
return resultResponse(HaoBanErrCode.ERR_10018); return resultResponse(HaoBanErrCode.ERR_10018);
...@@ -431,7 +419,7 @@ public class WxStaffController extends WebBaseController { ...@@ -431,7 +419,7 @@ public class WxStaffController extends WebBaseController {
//需要审核 //需要审核
String[] clerkIdArr = clerkIds.split(","); String[] clerkIdArr = clerkIds.split(",");
for (String clerkId : clerkIdArr) { for (String clerkId : clerkIdArr) {
AuditDTO auditDTO = auditApiService.findByBindRelatedIdAndAuditType(clerkId, AuditType.CLERK_DEL.getCode(),wxEnterpriseId,store.getEnterpriseId()); AuditDTO auditDTO = auditApiService.findByBindRelatedIdAndAuditType(clerkId, AuditType.CLERK_DEL.getCode(), wxEnterpriseId, store.getEnterpriseId());
if (auditDTO != null) { if (auditDTO != null) {
logger.info("已经存在了审核记录,待审核{}", clerkId); logger.info("已经存在了审核记录,待审核{}", clerkId);
continue; continue;
...@@ -853,7 +841,7 @@ public class WxStaffController extends WebBaseController { ...@@ -853,7 +841,7 @@ public class WxStaffController extends WebBaseController {
if (staff == null) { if (staff == null) {
return resultResponse(HaoBanErrCode.ERR_10006); return resultResponse(HaoBanErrCode.ERR_10006);
} }
AuditDTO auditDTO = auditApiService.findByBindRelatedIdAndAuditType(clerkId, AuditType.CLERK_BIND.getCode(),wxEnterpriseId,clerk.getEnterpriseId()); AuditDTO auditDTO = auditApiService.findByBindRelatedIdAndAuditType(clerkId, AuditType.CLERK_BIND.getCode(), wxEnterpriseId, clerk.getEnterpriseId());
if (auditDTO != null) { if (auditDTO != null) {
return resultResponse(HaoBanErrCode.ERR_10018); return resultResponse(HaoBanErrCode.ERR_10018);
} }
...@@ -1015,13 +1003,21 @@ public class WxStaffController extends WebBaseController { ...@@ -1015,13 +1003,21 @@ public class WxStaffController extends WebBaseController {
List<BindClerkVO> bindList = new ArrayList<>(); List<BindClerkVO> bindList = new ArrayList<>();
List<BindClerkVO> unBindList = new ArrayList<>(); List<BindClerkVO> unBindList = new ArrayList<>();
for (ClerkDTO dto : list) { for (ClerkDTO dto : list) {
BindClerkVO vo = EntityUtil.changeEntityByJSON(BindClerkVO.class, dto); BindClerkVO vo = EntityUtil.changeEntityNew(BindClerkVO.class, dto);
if (bindCodeMap.containsKey(dto.getClerkCode())) { if (bindCodeMap.containsKey(dto.getClerkCode())) {
String staffId = bindCodeMap.get(dto.getClerkCode()).getStaffId(); String staffId = bindCodeMap.get(dto.getClerkCode()).getStaffId();
StaffDTO staffDTO = staffApiService.selectById(staffId); StaffDTO staffDTO = staffApiService.selectById(staffId);
vo.setStaffId(staffId); vo.setStaffId(staffId);
vo.setNationCode(dto.getNationcode()); String phoneNumber = dto.getPhoneNumber();
vo.setPhoneNumber(dto.getPhoneNumber()); if (StringUtils.isNotBlank(phoneNumber)) {
vo.setPhoneNumber(phoneNumber);
if (StringUtils.isNotBlank(dto.getNationcode())) {
vo.setNationCode(dto.getNationcode());
}
}else {
vo.setPhoneNumber("");
vo.setNationCode("");
}
vo.setStaffName(staffDTO == null ? "" : staffDTO.getStaffName()); vo.setStaffName(staffDTO == null ? "" : staffDTO.getStaffName());
bindList.add(vo); bindList.add(vo);
} else { } else {
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
<dubbo:reference interface="com.gic.enterprise.api.service.StoreService" id="storeService"/> <dubbo:reference interface="com.gic.enterprise.api.service.StoreService" id="storeService"/>
<dubbo:reference interface="com.gic.wechat.api.service.qywx.QywxCorpApiService" id="qywxCorpApiService"/> <dubbo:reference interface="com.gic.wechat.api.service.qywx.QywxCorpApiService" id="qywxCorpApiService"/>
<dubbo:reference interface="com.gic.wechat.api.service.qywx.QywxUserApiService" id="qywxUserApiService"/> <dubbo:reference interface="com.gic.wechat.api.service.qywx.QywxUserApiService" id="qywxUserApiService"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.BindApiService" id="bindApiService"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.AuditApiService" id="auditApiService"/> <dubbo:reference interface="com.gic.haoban.manage.api.service.AuditApiService" id="auditApiService"/>
<dubbo:reference interface="com.gic.haoban.manage.api.service.AuditSettingApiService" id="auditSettingApiService"/> <dubbo:reference interface="com.gic.haoban.manage.api.service.AuditSettingApiService" id="auditSettingApiService"/>
<dubbo:reference interface="com.gic.dict.api.service.ManagerDictService" id="managerDictService"/> <dubbo:reference interface="com.gic.dict.api.service.ManagerDictService" id="managerDictService"/>
......
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