Commit 4b2731a5 by 徐高华

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

Feature/xgh/2405迭代

See merge request !1823
parents e84aaf92 53cc3326
package com.gic.haoban.manage.api.dto;
import java.io.Serializable;
public class CommonDataMQDTO implements Serializable {
/**
* @Fields serialVersionUID : TODO(用一句话描述这个变量表示什么)
*/
private static final long serialVersionUID = -5681421708810402425L;
// 1删除日报定时 2无部门成员修复
private int type;
private Object params;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public Object getParams() {
return params;
}
public void setParams(Object params) {
this.params = params;
}
}
......@@ -38,6 +38,16 @@ public class ExternalClerkRelatedDTO implements Serializable {
private Date updateTime;
private Date halfDelTime ;
public Date getHalfDelTime() {
return halfDelTime;
}
public void setHalfDelTime(Date halfDelTime) {
this.halfDelTime = halfDelTime;
}
private static final long serialVersionUID = 1L;
public String getHeadUrl() {
......
package com.gic.haoban.manage.api.dto.qdto.hm;
import java.io.Serializable;
import java.util.Date;
public class WxUserAddLogQDTO implements Serializable{
......@@ -20,6 +21,33 @@ public class WxUserAddLogQDTO implements Serializable{
private String staffName;
private String clerkId;
private Integer addWay ;
private Long qwAddTime ;
private String friendClerkId ;
private String friendStoreId ;
public String getFriendClerkId() {
return friendClerkId;
}
public void setFriendClerkId(String friendClerkId) {
this.friendClerkId = friendClerkId;
}
public String getFriendStoreId() {
return friendStoreId;
}
public void setFriendStoreId(String friendStoreId) {
this.friendStoreId = friendStoreId;
}
public Long getQwAddTime() {
return qwAddTime;
}
public void setQwAddTime(Long qwAddTime) {
this.qwAddTime = qwAddTime;
}
public Integer getAddWay() {
return addWay;
......
......@@ -65,6 +65,8 @@ public enum NoticeMessageTypeEnum {
CUSTOMER_GET_COUPON(4004, "客户领券通知", NoticeMessageCategoryTypeEnum.CUSTOMER.getType(), "customer_get_coupon", "/pages/route/index?pageType=", "hbapp_customer_detail", "customerGetCoupon", "haobanNotice"),
CUSTOMER_APPLY_ORDER_REFUND(4005, "客户申请退单通知", NoticeMessageCategoryTypeEnum.CUSTOMER.getType(), "customer_apply_order_refund", "/pages/route/index?pageType=", "hbapp_customer_order_detail", "customerApplyChargebackOrder", "haobanNotice"),
CUSTOMER_SUCCESS_ORDER_REFUND(4006, "客户成功退单通知", NoticeMessageCategoryTypeEnum.CUSTOMER.getType(), "customer_success_order_refund", "/pages/route/index?pageType=", "hbapp_user_bill_detail", "customerChargebackOrderSuccess", "haobanNotice"),
FRIEND_DEL_STAFF(4007,"删除好友通知", NoticeMessageCategoryTypeEnum.CUSTOMER.getType(),"friend_del_staff","/pages/route/index?pageType=","hbapp_customer_detail","friendDelStaff","haobanNotice"),
// 订单- 待发货订单提醒
ORDER_TAKE(5000, "待自提订单提醒", NoticeMessageCategoryTypeEnum.ORDER.getType(), "order_take", "/pages/route/index?pageType=", "hbapp_order_verfication", "toBePickUpOrderRemind", "haobanNotice"),
......
......@@ -332,4 +332,11 @@ public interface ExternalClerkRelatedApiService {
*/
List<ExternalUserClerkDTO> listExternalClerk(String enterpriseId , String memberId) ;
/**
* 单向好友数
*/
int halfFriendCount(String wxEnterpriseId , String storeId , String clerkId , String staffId) ;
Page<ExternalClerkRelatedDTO> halfFriendPage(String wxEnterpriseId , String storeId , String clerkId , String staffId,int type, BasePageInfo basePageInfo) ;
}
package com.gic.haoban.manage.api.service;
import com.gic.haoban.manage.api.dto.CommonDataMQDTO;
import com.gic.haoban.manage.api.dto.CommonMQDTO;
import java.util.List;
......@@ -15,10 +16,14 @@ import java.util.List;
public interface HaobanCommonMQApiService {
public void putCommonMessage(CommonMQDTO dto);
public void putDataMessage(CommonDataMQDTO dto);
public void putCommonDelayMessage(CommonMQDTO dto , int delay);
public void commonHandler(String message);
public void commonDataHandler(String message) ;
public void welcomeMQ(String params) ;
......
......@@ -120,5 +120,7 @@ public interface HaobanTimerApiService {
public void doErrorFriendTimer(String params) ;
public void halfTimer(String wxEnterpriseId) ;
}
package com.gic.haoban.manage.web.controller;
import com.alibaba.fastjson.JSONObject;
import com.gic.authcenter.commons.util.IgnoreLogin;
import com.gic.commons.util.GlobalVar;
import com.gic.commons.util.HttpClient;
import com.gic.haoban.common.utils.HaobanResponse;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class QywxCallbackController extends WebBaseController {
private static final Logger logger = LoggerFactory.getLogger(QywxCallbackController.class);
private static final String url = "http://47.94.7.218:8089/wxwork/%s" ;
@RequestMapping("qywx-msg-notice")
@IgnoreLogin
public Object callback(HttpServletRequest request , HttpServletResponse response) throws IOException {
try {
String body = IOUtils.toString(request.getInputStream()) ;
logger.info("企微消息下发={}",body);
JSONObject jsonObject = JSONObject.parseObject(body) ;
int type = jsonObject.getIntValue("type") ;
String uuid = jsonObject.getString("uuid") ;
JSONObject json = jsonObject.getJSONObject("json") ;
this.post(type,uuid,json);
Map<String,String> map = new HashMap<>() ;
map.put("errcode","0") ;
map.put("errmsg","ok") ;
return map ;
}catch (Exception e) {
logger.info("异常",e);
}
return "ok" ;
}
private void post(int type , String uuid , JSONObject json) {
switch (type) {
case 100001 :
this.v100001(uuid,json) ;
break;
case 100002 :
this.v100002(uuid,json) ;
break;
case 100003 :
this.v100003(uuid,json) ;
break;
case 100004 :
this.v100004(uuid,json) ;
break;
case 100005 :
this.close(uuid,json) ;
break;
case 104001 :
this.loginSuccess(uuid,json) ;
break;
case 100012 :
this.v100012(uuid,json) ;
break;
case 100009 :
this.v100009(uuid,json) ;
break;
default:
break;
}
}
private void v100012(String uuid , JSONObject json) {
logger.info("需要二次扫码");
}
private void v100009(String uuid , JSONObject json) {
logger.info("超时未扫码关闭");
}
private void v100001(String uuid , JSONObject json) {
logger.info("用户扫码={}",uuid);
}
private void v100004(String uuid , JSONObject json) {
logger.info("需要输入验证码校验={}",uuid);
}
private void v100002(String uuid , JSONObject json) {
logger.info("验证码校验成功返回={}",uuid);
}
private void loginSuccess(String uuid , JSONObject json) {
logger.info("登录成功={}",uuid);
}
private void close(String uuid , JSONObject json) {
logger.info("退出={}",uuid);
}
private void v100003(String uuid , JSONObject json) {
logger.info("取消登录={}",uuid);
}
@RequestMapping("qywx-init")
@IgnoreLogin
public HaobanResponse init() {
String callbackUrl = GlobalVar.ctxPropertiesMap.get("haoban_service_host")+"/haoban-manage3-operation-web/qywx-msg-notice" ;
String map1 = HttpClient.sendPostJSON(String.format(url,"init") ,"{}","utf-8") ;
logger.info(map1);
JSONObject json = JSONObject.parseObject(map1) ;
String uuid = json.getJSONObject("data").getString("uuid") ;
JSONObject setCallbackUrl = new JSONObject() ;
setCallbackUrl.put("uuid",uuid) ;
setCallbackUrl.put("url",callbackUrl) ;
String map2 = HttpClient.sendPostJSON(String.format(url,"SetCallbackUrl"),setCallbackUrl.toJSONString(),"utf-8") ;
String map3 = HttpClient.sendPostJSON(String.format(url,"getQrCode"),setCallbackUrl.toJSONString(),"utf-8") ;
List<String> list = new ArrayList<>() ;
list.add(map1);
list.add(map2);
list.add(map3);
HaobanResponse resp = new HaobanResponse() ;
resp.setResult(list);
return resp ;
}
}
......@@ -8,6 +8,7 @@
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/get-pic-code"/>
<mvc:exclude-mapping path="/qywx-msg-notice"/>
<mvc:exclude-mapping path="/phone-login"/>
<mvc:exclude-mapping path="/upload-file*"/>
<mvc:exclude-mapping path="/upload-file-voice"/>
......
......@@ -435,4 +435,13 @@ public interface TabHaobanExternalClerkRelatedMapper {
* @return
*/
String getMemberIdByExternalId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("externalUserId") String externalUserId);
int halfFriendCount(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("storeId")String storeId, @Param("clerkId")String clerkId, @Param("staffId")String staffId);
List<TabHaobanExternalClerkRelated> halfFriendPage(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("storeId")String storeId, @Param("clerkId")String clerkId, @Param("staffId")String staffId, @Param("type")int type);
List<TabHaobanExternalClerkRelated> halfDelFriendPage(@Param("wxEnterpriseId") String wxEnterpriseId , @Param("startItem")int startItem);
void updateHalfTime(@Param("id") String id , @Param("delTime") Date delTime) ;
}
\ No newline at end of file
package com.gic.haoban.manage.service.dao.mapper.content.holo;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.alibaba.hologres.client.HoloClient;
import com.alibaba.hologres.client.HoloConfig;
import com.ctrip.framework.apollo.Config;
......@@ -9,6 +18,12 @@ import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @Author MUSI
* @Date 2023/9/4 4:11 PM
......@@ -19,22 +34,34 @@ import org.springframework.stereotype.Component;
@Component
public class HoloDataSource implements InitializingBean, DisposableBean {
HoloClient client;
private volatile HoloClient client;
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public synchronized void init() {
public synchronized void init() {
try {
Config appConfig = ConfigService.getAppConfig();
String holoUrl = appConfig.getProperty("holo.url", "");
String holoUserName = appConfig.getProperty("holo.username", "");
String holoPassword = appConfig.getProperty("holo.password", "");
Pair<String, String> holoAuth = getHoloAuth();
if (holoAuth == null) {
log.info("holo链接初始化获取授权信息失败");
return;
}
String holoUserName = holoAuth.getKey();
String holoPassword = holoAuth.getValue();
HoloConfig holoConfig = new HoloConfig();
holoConfig.setJdbcUrl(holoUrl);
holoConfig.setUsername(holoUserName);
holoConfig.setPassword(holoPassword);
holoConfig.setConnectionMaxIdleMs(13000);
this.client = new HoloClient(holoConfig);
this.client.setAsyncCommit(false);
HoloClient newClient = new HoloClient(holoConfig);
newClient.setAsyncCommit(false);
if (this.client != null) {
this.client.close();
this.client = null;
}
this.client = newClient;
log.info("holo链接初始化完成");
}catch (Exception ex) {
log.info("初始化client 异常 >>>", ex);
......@@ -46,6 +73,7 @@ public class HoloDataSource implements InitializingBean, DisposableBean {
if (client != null) {
client.close();
}
scheduler.shutdown();
}
@Override
......@@ -53,13 +81,42 @@ public class HoloDataSource implements InitializingBean, DisposableBean {
if (client == null) {
this.init();
}
DateTime now = DateUtil.date();
Date todayTwo = DateUtil.beginOfDay(now).offset(DateField.HOUR_OF_DAY, 2);
if (now.after(todayTwo)) {
todayTwo = DateUtil.offsetDay(todayTwo, 1);
}
scheduler.scheduleAtFixedRate(this::reinitialize, DateUtil.between(now,todayTwo, DateUnit.SECOND,true), 24 * 60 * 60, TimeUnit.SECONDS);
}
public HoloClient getClient() {
if (this.client == null) {
this.init();
synchronized (this) {
if (this.client == null) {
this.init();
}
}
}
return this.client;
}
// 重新初始化方法
public synchronized void reinitialize() {
this.init();
}
private Pair<String, String> getHoloAuth() {
//{"appId":"ops_key","cluster":"default","namespaceName":"application","configurations":{"aliyun-key":"{\n\"LTAI5tGn2YicKmgcyTiJDV59\":\"iOp7cICESPZIvIjJRtTmLnCd4gT1Qy\"\n}"},"releaseKey":"20240412153514-b260f04ffbe11f4e"}
String result = HttpUtil.get("http://proapollo.gicdev.com:7080/configs/ops_key/default/application?key=aliyun-key",10000);
JSON json = JSONUtil.parse(result);
String authInfo = json.getByPath("configurations.aliyun-key", String.class);
JSON authJson = JSONUtil.parseObj(authInfo);
Map<String, String> map = authJson.toBean(new TypeReference<Map<String, String>>() {});
for (Map.Entry<String, String> entry : map.entrySet()) {
return new Pair<>(entry.getKey(), entry.getValue());
}
return null;
}
}
......@@ -63,4 +63,11 @@ public interface WxUserAddLogMapper {
*/
public List<TabWxUserAddLog> listForPage(WxUserAddLogSearchQDTO qdto);
/**
*
* @param externalUseridList
* @return
*/
public List<TabWxUserAddLog> listHalfDelTime(@Param("list")List<String> externalUseridList) ;
}
\ No newline at end of file
......@@ -51,6 +51,16 @@ public class TabHaobanExternalClerkRelated implements Serializable {
private Integer externalStatus ;
private Date halfDelTime ;
public Date getHalfDelTime() {
return halfDelTime;
}
public void setHalfDelTime(Date halfDelTime) {
this.halfDelTime = halfDelTime;
}
public Integer getExternalStatus() {
return externalStatus;
}
......
package com.gic.haoban.manage.service.entity.hm;
import java.io.Serializable;
import java.util.Date;
/**
*
......@@ -58,6 +59,34 @@ public class TabWxUserAddLog implements Serializable {
private java.util.Date updateTime;
/**是否所有好友删除 1是0否*/
private Integer allDelFlag;
private Long qwAddTime ;
private String friendClerkId ;
private String friendStoreId ;
public String getFriendClerkId() {
return friendClerkId;
}
public void setFriendClerkId(String friendClerkId) {
this.friendClerkId = friendClerkId;
}
public String getFriendStoreId() {
return friendStoreId;
}
public void setFriendStoreId(String friendStoreId) {
this.friendStoreId = friendStoreId;
}
public Long getQwAddTime() {
return qwAddTime;
}
public void setQwAddTime(Long qwAddTime) {
this.qwAddTime = qwAddTime;
}
public void setLogId(Long logId) {
this.logId = logId;
......
......@@ -73,10 +73,10 @@ public class WxUserAddLogServiceImpl implements WxUserAddLogService {
if (qdto.isDelFlag()) {
TabWxUserAddLog logUser = this.wxUserAddLogMapper.selectNewLog(externalUserid, qdto.getStaffId());
if(null == logUser) {
log.info("删除好友") ;
return ;
log.info("删除好友-无加的记录") ;
}else {
entity = logUser;
}
entity = logUser;
entity.setLogId(UniqueIdUtils.uniqueLong());
if(qdto.isDelClerkFlag()) {
entity.setStatusFlag(3);
......@@ -142,11 +142,14 @@ public class WxUserAddLogServiceImpl implements WxUserAddLogService {
log.info("会员标签查询null,memberLabelId={}", memberLabelId);
}
}
if (null != qdto.getMemberId()) {
entity.setMemberId(qdto.getMemberId());
entity = this.addMemberInfo(qdto.getEnterpriseId(), qdto.getMemberId(), entity);
}
}
if (null != qdto.getMemberId()) {
entity.setMemberId(qdto.getMemberId());
entity = this.addMemberInfo(qdto.getEnterpriseId(), qdto.getMemberId(), entity);
}
entity.setQwAddTime(qdto.getQwAddTime());
entity.setFriendClerkId(qdto.getFriendClerkId());
entity.setFriendStoreId(qdto.getFriendStoreId());
this.wxUserAddLogMapper.insert(entity);
}catch(Exception e) {
log.info("异常",e);
......
......@@ -167,6 +167,11 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
wxUserAddLogQDTO.setExternalUserid(related.getExternalUserId());
wxUserAddLogQDTO.setStaffId(related.getStaffId());
wxUserAddLogQDTO.setClerkId(related.getClerkId());
if(null != related.getAddTime()) {
wxUserAddLogQDTO.setQwAddTime(related.getAddTime());
}
wxUserAddLogQDTO.setFriendClerkId(related.getClerkId());
wxUserAddLogQDTO.setFriendStoreId(related.getStoreId());
wxUserAddLogService.save(wxUserAddLogQDTO);
//定制
addDelFriendEvent(related.getUnionid(), related.getClerkId(), wxEnterpriseId, enterpriseId, related.getMemberId(), related.getStoreId(), 0);
......
......@@ -360,7 +360,8 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
String key = LOCK_KEY + wxEnterpriseId;
Object cache = RedisUtil.getCache(key);
if (null == cache) {
RedisUtil.setCache(key, taskId, 5L, TimeUnit.DAYS);
logger.info("设置通讯录缓存={},{}",key,taskId);
RedisUtil.setCache(key, taskId, 3L, TimeUnit.HOURS);
return taskId;
}
return null;
......@@ -387,14 +388,16 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
RedisUtil.setCache(sKey, taskId);
}
}
logger.info("删除通讯录缓存={},{}",key,taskId);
RedisUtil.delCache(key);
}
@Override
public String getTaskLock(String wxEnterpriseId) {
String key = LOCK_KEY + wxEnterpriseId;
logger.info("缓存key={}",key);
return (String) RedisUtil.getCache(key);
String v = (String) RedisUtil.getCache(key);
logger.info("查询通讯录缓存key={},{}",key,v);
return v ;
}
@Override
......@@ -410,7 +413,10 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
return syncCheckDTO;
}
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
if(Arrays.asList(4,5,6).contains(syncTask.getStatusFlag())) {
RedisUtil.delCache(sKey);
return syncCheckDTO;
}
/*int status = syncTask.getStatusFlag() ;
if(status != 4) {
int count = this.preDealService.countByTaskId(taskId) ;
......
......@@ -7,6 +7,7 @@ import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.commons.util.PageHelperUtils;
import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreService;
......@@ -822,4 +823,30 @@ public class ExternalClerkRelatedApiServiceImpl implements ExternalClerkRelatedA
log.info("好友={}",JSONObject.toJSONString(retList));
return retList;
}
@Override
public int halfFriendCount(String wxEnterpriseId, String storeId, String clerkId, String staffId) {
return this.tabHaobanExternalClerkRelatedMapper.halfFriendCount(wxEnterpriseId, storeId, clerkId, staffId) ;
}
@Override
public Page<ExternalClerkRelatedDTO> halfFriendPage(String wxEnterpriseId, String storeId, String clerkId, String staffId, int type, BasePageInfo basePageInfo) {
Page<ExternalClerkRelatedDTO> retPage = null ;
try {
PageHelper.startPage(basePageInfo);
List<TabHaobanExternalClerkRelated> list = this.tabHaobanExternalClerkRelatedMapper.halfFriendPage(wxEnterpriseId, storeId, clerkId, staffId, type);
if(CollectionUtils.isNotEmpty(list)) {
for(TabHaobanExternalClerkRelated dto : list) {
if(null == dto.getHalfDelTime()) {
dto.setHalfDelTime(dto.getUpdateTime());
}
}
}
retPage = PageHelperUtils.changePageHelperToCurrentPage(list,
ExternalClerkRelatedDTO.class);
}catch (Exception e) {
log.info("error",e);
}
return retPage;
}
}
package com.gic.haoban.manage.service.service.out.impl;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSONArray;
import com.gic.haoban.manage.api.dto.CommonDataMQDTO;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.commons.util.StringUtil;
import com.gic.haoban.manage.api.dto.MemberUnionidWechatAccountQDTO;
......@@ -51,6 +54,8 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
private StaffClerkRelationService staffClerkRelationService ;
@Autowired
private HaobanMenuService haobanMenuService ;
@Autowired
private TabHaobanExternalClerkRelatedMapper externalClerkRelatedMapper ;
@Override
public void putCommonMessage(CommonMQDTO dto) {
......@@ -65,6 +70,37 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
}
@Override
public void putDataMessage(CommonDataMQDTO dto) {
String message = JSONObject.toJSONString(dto);
log.info("加入好办通用队列params={}", message);
try {
mqClient.sendCommonMessage("haobanDataCommonRouter", message,
"com.gic.haoban.manage.api.service.HaobanCommonMQApiService", "commonDataHandler");
} catch (Exception e) {
log.error("发送MQ异常",e);
}
}
@Override
public void commonDataHandler(String message) {
CommonDataMQDTO dto = JSON.parseObject(message, CommonDataMQDTO.class);
switch (dto.getType()) {
case 1:
String listStr = dto.getParams().toString() ;
JSONArray list = JSONArray.parseArray(listStr) ;
for(int i=0;i<list.size();i++) {
JSONObject json = list.getJSONObject(i) ;
String id = json.getString("id") ;
Date delTime = json.getDate("delTime") ;
this.externalClerkRelatedMapper.updateHalfTime(id,delTime);
}
break;
default:
break;
}
}
@Override
public void putCommonDelayMessage(CommonMQDTO dto, int delay) {
String message = JSONObject.toJSONString(dto);
log.info("加入好办延时通用队列params={}", message);
......@@ -75,6 +111,7 @@ public class HaobanCommonMQApiServiceImpl implements HaobanCommonMQApiService {
}
}
@Override
public void commonHandler(String message) {
log.info("接收好办通用队列params={}", message);
......
package com.gic.haoban.manage.service.service.out.impl;
import com.alibaba.fastjson.JSONObject;
import com.gic.haoban.manage.api.dto.CommonDataMQDTO;
import com.gic.haoban.manage.api.service.HaobanCommonMQApiService;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.hm.WxUserAddLogMapper;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.hm.TabWxUserAddLog;
import com.gic.haoban.manage.service.service.QywxErrorLogService;
import com.gic.haoban.manage.service.service.chat.GroupChatDataService;
import com.gic.haoban.manage.service.util.DingUtils;
import com.gic.haoban.manage.service.util.HBQwMonitorUtils;
import com.gic.redis.data.util.RedisUtil;
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.joda.time.DateTime;
import org.redisson.api.RMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -14,8 +29,12 @@ import com.gic.haoban.manage.service.service.StaffDepartmentRelatedService;
import com.gic.haoban.manage.service.service.chat.GroupChatService;
import com.gic.haoban.manage.service.service.hm.HmQrcodeTempService;
import java.util.*;
import java.util.stream.Collectors;
@Service("haobanTimerApiService")
public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
private static final Logger log = LogManager.getLogger(HaobanTimerApiService.class);
@Autowired
private HmQrcodeTempService hmQrcodeTempService;
......@@ -31,6 +50,12 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
private GroupChatDataService groupChatDataService ;
@Autowired
private QywxErrorLogService qywxErrorLogService ;
@Autowired
private TabHaobanExternalClerkRelatedMapper externalClerkRelatedMapper ;
@Autowired
private WxUserAddLogMapper wxUserAddLogMapper ;
@Autowired
private HaobanCommonMQApiService haobanCommonMQApiService ;
@Override
......@@ -102,4 +127,55 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
public void doErrorFriendTimer(String params) {
this.qywxErrorLogService.doFriendTimer(params);
}
@Override
public void halfTimer(String wxEnterpriseId) {
log.info("开始单向数据={}",wxEnterpriseId);
int pageSize = 1000 ;
int pageNum = 0;
RMap<String, String> mapCache = RedisUtil.getRedisClient().getMap("halfTimer_wxenterpriseId");
while (true) {
List<TabHaobanExternalClerkRelated> list = this.externalClerkRelatedMapper.halfDelFriendPage(wxEnterpriseId,pageNum*pageSize);
List<String> idList = new ArrayList<>() ;
if(CollectionUtils.isNotEmpty(list)) {
pageNum++;
for(TabHaobanExternalClerkRelated dto : list) {
if(StringUtils.isNotBlank(dto.getExternalUserId())) {
idList.add(dto.getExternalUserId()) ;
}else {
this.externalClerkRelatedMapper.updateHalfTime(dto.getExternalClerkRelatedId(),dto.getUpdateTime());
}
}
if(CollectionUtils.isNotEmpty(idList)) {
List<TabWxUserAddLog> logList= this.wxUserAddLogMapper.listHalfDelTime(idList);
Map<String, Date> map = new HashMap<>() ;
if(CollectionUtils.isNotEmpty(logList)) {
map = logList.stream().collect(Collectors.toMap(TabWxUserAddLog::getExternalUserid, o -> o.getCreateTime(), (k1, k2) -> k1));
}
List<JSONObject> jsonList = new ArrayList<>() ;
for(TabHaobanExternalClerkRelated dto : list) {
JSONObject json = new JSONObject() ;
json.put("id",dto.getExternalClerkRelatedId()) ;
if(null != map.get(dto.getExternalUserId())) {
//this.externalClerkRelatedMapper.updateHalfTime(dto.getExternalClerkRelatedId(),map.get(dto.getExternalUserId()));
json.put("delTime",map.get(dto.getExternalUserId())) ;
}else {
// this.externalClerkRelatedMapper.updateHalfTime(dto.getExternalClerkRelatedId(),dto.getUpdateTime());
json.put("delTime",dto.getUpdateTime()) ;
}
jsonList.add(json) ;
}
CommonDataMQDTO data = new CommonDataMQDTO() ;
data.setType(1);
data.setParams(jsonList);
this.haobanCommonMQApiService.putDataMessage(data);
}
}else {
break;
}
}
mapCache.put(wxEnterpriseId,"1") ;
DingUtils.send("halfTimer告警,wxEnterpriseId="+wxEnterpriseId, null, false);
log.info("结束单向数据={}",wxEnterpriseId);
}
}
......@@ -4,6 +4,8 @@ import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.gic.haoban.manage.api.enums.NoticeMessageTypeEnum;
import com.gic.haoban.manage.api.util.notify.NoticeMessageUtil;
import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.util.EventUtils;
import com.gic.haoban.manage.service.util.HBQwMonitorUtils;
......@@ -247,8 +249,25 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
wxUserAddLogQDTO.setStaffId(related.getStaffId());
wxUserAddLogQDTO.setClerkId(related.getClerkId());
wxUserAddLogQDTO.setDelClerkFlag(true);
wxUserAddLogService.save(wxUserAddLogQDTO);
if(null != related.getAddTime()) {
wxUserAddLogQDTO.setQwAddTime(related.getAddTime());
}
wxUserAddLogQDTO.setFriendClerkId(related.getClerkId());
wxUserAddLogQDTO.setFriendStoreId(related.getStoreId());
if(!memberUnionidRelatedDTO.getSuiteid().equals("selfSuiteId")) {
wxUserAddLogService.save(wxUserAddLogQDTO);
if(StringUtils.isNotBlank(related.getMemberId())) {
log.info("发送好友删成员通知,staffId={}",related.getStaffId());
// 发送通知
Map<String, String> map = new HashMap<String, String>();
map.put("memberName", related.getExternalName());
//参数
JSONObject jsonObject = new JSONObject();
jsonObject.put("memberId",related.getMemberId()) ;
int messageType = NoticeMessageTypeEnum.FRIEND_DEL_STAFF.getType();
NoticeMessageUtil.sendNoticeMessageByStaff(enterpriseId,related.getStaffId(),related.getClerkId(),messageType,related.getMemberId(),map,jsonObject);
}
}
addDelFriendEvent(related.getUnionid(), related.getClerkId(), wxEnterpriseId, enterpriseId, related.getMemberId(), related.getStoreId(), 0);
}
......@@ -658,6 +677,11 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
wxUserAddLogQDTO.setStaffName(staffName);
wxUserAddLogQDTO.setClerkId(hyClerkId);
wxUserAddLogQDTO.setAddWay(dto.getAddWay());
if(StringUtils.isNotBlank(dto.getAddCreateTime())) {
wxUserAddLogQDTO.setQwAddTime(Long.valueOf(createTime));
}
wxUserAddLogQDTO.setFriendClerkId(staffClerkRelationDTO.getClerkId());
wxUserAddLogQDTO.setFriendStoreId(staffClerkRelationDTO.getStoreId());
this.wxUserAddLogService.save(wxUserAddLogQDTO);
RedisUtil.unlock(lockKey);
if(StringUtils.isNotBlank(memberId)) {
......@@ -746,6 +770,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
Date firstTime = new Date();
if (CollectionUtils.isNotEmpty(memberList)){
for (TabHaobanExternalClerkRelated a : memberList){
if(null == a.getAddTime()) {
continue;
}
Date addTime = new Date(a.getAddTime() * 1000L);
if ((a.getStatusFlag() == 1 || a.getStatusFlag() == 3 || a.getStatusFlag() == 4) && opTime.before(addTime)){
opTime= addTime;
......
......@@ -22,12 +22,13 @@
<result column="self_external_userid" property="selfExternalUserid"/>
<result column="add_time" property="addTime" jdbcType="INTEGER"/>
<result column="external_status" property="externalStatus" />
<result column="half_del_time" property="halfDelTime" />
</resultMap>
<sql id="Base_Column_List">
external_clerk_related_id, wx_enterprise_id, enterprise_id, store_id, member_id,
unionid, head_url,external_name, add_create_time, member_unionid_related_id, clerk_id, staff_id,
relation_key, status_flag, create_time, update_time,external_user_id ,self_external_userid,add_time , external_status
relation_key, status_flag, create_time, update_time,external_user_id ,self_external_userid,add_time , external_status , half_del_time
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String">
......@@ -313,7 +314,7 @@
from tab_haoban_external_clerk_related
where staff_id = #{staffId,jdbcType=VARCHAR}
and external_user_id = #{externalUserid}
and status_flag = #{statusFlag}
and status_flag = #{statusFlag} order by update_time desc
</select>
......@@ -804,8 +805,11 @@
</update>
<update id="updateExternalStatusById">
update tab_haoban_external_clerk_related set external_status = #{status} , update_time=now() where
external_clerk_related_id = #{id}
update tab_haoban_external_clerk_related set external_status = #{status} , update_time=now()
<if test="status==3">
, half_del_time = now()
</if>
where external_clerk_related_id = #{id}
</update>
<select id="getMemberForExternalId" resultMap="BaseResultMap">
......@@ -893,4 +897,34 @@
limit 1
</select>
<select id="halfFriendCount" resultType="java.lang.Integer">
select count(*) from tab_haoban_external_clerk_related where wx_enterprise_id = #{wxEnterpriseId} and status_flag in (1,3,4)
and staff_id = #{staffId} and clerk_id=#{clerkId} and store_id = #{storeId}
and external_status = 3
</select>
<select id="halfFriendPage" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/> from tab_haoban_external_clerk_related
where wx_enterprise_id = #{wxEnterpriseId} and status_flag in (1,3,4)
and staff_id = #{staffId} and clerk_id=#{clerkId} and store_id = #{storeId} and external_status = 3
<if test="type==1">
and member_id is not null
</if>
<if test="type==2">
and member_id is null
</if>
</select>
<select id="halfDelFriendPage" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/> from tab_haoban_external_clerk_related
where wx_enterprise_id = #{wxEnterpriseId} and status_flag in (1,3,4) and external_status = 3
and half_del_time is null limit ${startItem}, 1000
</select>
<update id="updateHalfTime">
update tab_haoban_external_clerk_related set
half_del_time = #{delTime}
where external_clerk_related_id = #{id}
</update>
</mapper>
\ No newline at end of file
......@@ -34,6 +34,9 @@
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="all_del_flag" property="allDelFlag"/>
<result column="qw_add_time" property="qwAddTime" />
<result column="friend_clerk_id" property="friendClerkId" />
<result column="friend_store_id" property="friendStoreId" />
</resultMap>
<sql id="Base_Column_List">
log_id ,
......@@ -66,7 +69,7 @@
member_label_name,
create_time,
update_time,
all_del_flag
all_del_flag , qw_add_time , friend_clerk_id , friend_store_id
</sql>
<!-- ===================== 新增 ======================== -->
<insert id="insert"
......@@ -103,7 +106,7 @@
create_time,
update_time,
add_time,
all_del_flag)
all_del_flag , qw_add_time , friend_clerk_id , friend_store_id)
VALUES (#{logId,jdbcType=BIGINT},
#{wxEnterpriseId,jdbcType=VARCHAR},
#{enterpriseId,jdbcType=CHAR},
......@@ -135,7 +138,7 @@
now(),
now(),
now(),
#{allDelFlag,jdbcType=INTEGER})
#{allDelFlag,jdbcType=INTEGER} , #{qwAddTime} , #{friendClerkId} , #{friendStoreId})
]]>
</insert>
......@@ -204,4 +207,15 @@
</if>
and status_flag = #{statusFlag} order by create_time ${createTimeOrder}
</select>
<select id="listHalfDelTime" resultMap="result-map-tabHaobanWxUserAddLog">
select
<include refid="Base_Column_List"/>
from tab_haoban_wx_user_add_log where status_flag = 3 and external_userid in
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
order by create_time desc
</select>
</mapper>
\ No newline at end of file
......@@ -4,6 +4,7 @@ import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.AuthorizedUser;
import com.gic.commons.util.DateUtil;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO;
......@@ -29,6 +30,9 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashSet;
......@@ -113,4 +117,23 @@ public class UploadController extends WebBaseController {
}
}
@RequestMapping("copy-image-url")
public RestResponse<Object> imgUploadFee(String filetype , String fileUrl , @RequestParam(defaultValue = "0") int videoFlag) throws Exception {
WebLoginDTO login = AuthWebRequestUtil.getLoginUser();
String enterpriseId = login.getEnterpriseId() ;
EnterpriseDTO en = this.enterpriseService.getEnterpriseById(enterpriseId) ;
URL url = new URL(fileUrl);
URLConnection connection = url.openConnection();
connection.setConnectTimeout(1000 * 10);
connection.setReadTimeout(1000 * 10);
InputStream inputStream = connection.getInputStream();
CloudFileTypeEnum type = CloudFileTypeEnum.IMAGE ;
if(videoFlag==1) {
type = CloudFileTypeEnum.VIDEO ;
}
CloudFileInfo uploadInfo = CloudFileUtil.uploadFile(inputStream, filetype, type, en.getFactoryCode(), CloudFileBusinessOptEnum.COMMON) ;
logger.info("图片={}",JSONObject.toJSONString(uploadInfo));
return RestResponse.successResult(uploadInfo);
}
}
......@@ -88,6 +88,22 @@ public class GicOrderController {
@Autowired
private EvaluateDataApiService evaluateDataApiService;
// 1 虚拟商品; 2实物商品 3优惠券
// -1 全部 1 2 待发货 3已发货 4完成 关闭 0
@RequestMapping("list-member-integral-order")
public RestResponse<Object> listMemberIntegralOrder(String enterpriseId, String memberId,
@RequestParam(defaultValue = "2") Integer type,
@RequestParam(defaultValue = "-1") int status, BasePageInfo pageInfo) {
ListOrderManageQDTO qdto = new ListOrderManageQDTO();
qdto.setEnterpriseId(enterpriseId);
qdto.setOrderStep(status+"");
qdto.setGoodsType(type);
qdto.setMemberId(memberId);
qdto.setBusinessType(2);
logger.info("积分商城订单查询,qdto={}", JSON.toJSONString(qdto));
return this.orderListSelect(qdto, pageInfo, false);
}
// 发货订单列表 (0全部,待发货2+待收货3,部分发货7)
@RequestMapping("list-order")
public RestResponse<Object> orderList(String enterpriseId, String storeId, String clerkId, String search,
......
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