|
@@ -1,6 +1,8 @@
|
|
|
package com.cyksj.service.corp.impl;
|
|
package com.cyksj.service.corp.impl;
|
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
|
|
import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
|
|
|
import com.cyksj.common.util.ListsUtil;
|
|
import com.cyksj.common.util.ListsUtil;
|
|
@@ -10,12 +12,21 @@ import com.cyksj.config.corp.BaseWxCorpConfig;
|
|
|
import com.cyksj.config.corp.WxCorpFactory;
|
|
import com.cyksj.config.corp.WxCorpFactory;
|
|
|
import com.cyksj.config.corp.YHLXWxCorpConfig;
|
|
import com.cyksj.config.corp.YHLXWxCorpConfig;
|
|
|
import com.cyksj.dto.CorpOauth2UserInfo;
|
|
import com.cyksj.dto.CorpOauth2UserInfo;
|
|
|
|
|
+import com.cyksj.mapper.AddressMapper;
|
|
|
|
|
+import com.cyksj.mapper.UserMapper;
|
|
|
import com.cyksj.mapper.corp.CorpFollowMapper;
|
|
import com.cyksj.mapper.corp.CorpFollowMapper;
|
|
|
|
|
+import com.cyksj.mapper.corp.CorpUserMapper;
|
|
|
import com.cyksj.model.dto.WxCorpEncryptDto;
|
|
import com.cyksj.model.dto.WxCorpEncryptDto;
|
|
|
|
|
+import com.cyksj.model.entity.Address;
|
|
|
import com.cyksj.model.entity.CorpFollow;
|
|
import com.cyksj.model.entity.CorpFollow;
|
|
|
|
|
+import com.cyksj.model.entity.CorpUser;
|
|
|
|
|
+import com.cyksj.model.entity.User;
|
|
|
|
|
+import com.cyksj.model.manage.views.OrderDonView;
|
|
|
import com.cyksj.model.request.corp.CorpXmlMessage;
|
|
import com.cyksj.model.request.corp.CorpXmlMessage;
|
|
|
import com.cyksj.model.request.corp.CorpXmlOutMessage;
|
|
import com.cyksj.model.request.corp.CorpXmlOutMessage;
|
|
|
import com.cyksj.model.response.CorpUserInfo;
|
|
import com.cyksj.model.response.CorpUserInfo;
|
|
|
|
|
+import com.cyksj.model.views.TicketView;
|
|
|
|
|
+import com.cyksj.model.views.YHLXUserDetailView;
|
|
|
import com.cyksj.redis.RedisService;
|
|
import com.cyksj.redis.RedisService;
|
|
|
import com.cyksj.service.corp.CorpService;
|
|
import com.cyksj.service.corp.CorpService;
|
|
|
import com.cyksj.service.corp.WxCorpOps;
|
|
import com.cyksj.service.corp.WxCorpOps;
|
|
@@ -23,6 +34,9 @@ import com.cyksj.service.corp.msg.CorpEventActionService;
|
|
|
import com.cyksj.service.corp.msg.CorpMessageHandler;
|
|
import com.cyksj.service.corp.msg.CorpMessageHandler;
|
|
|
import com.cyksj.service.corp.msg.CorpMessageRouter;
|
|
import com.cyksj.service.corp.msg.CorpMessageRouter;
|
|
|
import com.cyksj.util.WxCorpUtil;
|
|
import com.cyksj.util.WxCorpUtil;
|
|
|
|
|
+import com.ejlchina.searcher.BeanSearcher;
|
|
|
|
|
+import com.ejlchina.searcher.param.Operator;
|
|
|
|
|
+import com.ejlchina.searcher.util.MapUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -31,6 +45,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import javax.annotation.PostConstruct;
|
|
import javax.annotation.PostConstruct;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.Optional;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
*项目名: netflix
|
|
*项目名: netflix
|
|
@@ -61,6 +77,18 @@ public class CorpServiceImpl implements CorpService {
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private RedisService redisService;
|
|
private RedisService redisService;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private CorpUserMapper corpUserMapper;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private UserMapper userMapper;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private BeanSearcher beanSearcher;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private AddressMapper addressMapper;
|
|
|
|
|
+
|
|
|
@PostConstruct
|
|
@PostConstruct
|
|
|
private void init() {
|
|
private void init() {
|
|
|
corpMessageRouter = new CorpMessageRouter(this)
|
|
corpMessageRouter = new CorpMessageRouter(this)
|
|
@@ -259,4 +287,50 @@ public class CorpServiceImpl implements CorpService {
|
|
|
return wxCorpOps.getAgentJsTicket(corpId, agentId);
|
|
return wxCorpOps.getAgentJsTicket(corpId, agentId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public YHLXUserDetailView getUserDetailView(String externalUserid) throws Exception {
|
|
|
|
|
+ CorpUser corpUser = corpUserMapper.selectOne(Wrappers.lambdaQuery(CorpUser.class).eq(CorpUser::getExternalUserid, externalUserid).last("limit 1"));
|
|
|
|
|
+ if (corpUser == null) {
|
|
|
|
|
+ //尝试添加客户
|
|
|
|
|
+ corpEventActionService.addExternalContact(yhlXWxCorpConfig.getCorpId(), null, externalUserid, null, null);
|
|
|
|
|
+ corpUser = corpUserMapper.selectOne(Wrappers.lambdaQuery(CorpUser.class).eq(CorpUser::getExternalUserid, externalUserid).last("limit 1"));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (corpUser == null) {
|
|
|
|
|
+ log.info("该客户{}不存在", externalUserid);
|
|
|
|
|
+ return new YHLXUserDetailView();
|
|
|
|
|
+ }
|
|
|
|
|
+ //获取用户基本信息
|
|
|
|
|
+ if (StrUtil.isEmpty(corpUser.getUnionid())) {
|
|
|
|
|
+ log.info("该客户{}不是微信用户或未关联unionId", externalUserid);
|
|
|
|
|
+ return new YHLXUserDetailView();
|
|
|
|
|
+ }
|
|
|
|
|
+ User user = userMapper.selectOne(Wrappers.lambdaQuery(User.class).eq(User::getUnionid, corpUser.getUnionid()).last("limit 1"));
|
|
|
|
|
+ if (user == null) {
|
|
|
|
|
+ log.info("该客户{}不是银河用户", externalUserid);
|
|
|
|
|
+ return new YHLXUserDetailView();
|
|
|
|
|
+ }
|
|
|
|
|
+ YHLXUserDetailView view = Optional.ofNullable(beanSearcher.searchFirst(YHLXUserDetailView.class, MapUtils.builder().field(YHLXUserDetailView::getUnionId, corpUser.getUnionid()).op(Operator.Equal).build())).orElse(new YHLXUserDetailView());
|
|
|
|
|
+ if (view.getUserId() != null) {
|
|
|
|
|
+ view.setAddress(addressMapper.selectOne(Wrappers.lambdaQuery(Address.class).eq(Address::getUserId, view.getUserId()).eq(Address::getIsDefault, true).last("limit 1")));
|
|
|
|
|
+ List<TicketView> ticketViews = beanSearcher.searchAll(TicketView.class, MapUtils.builder()
|
|
|
|
|
+ .field(TicketView::getUserId, view.getUserId()).op(Operator.Equal)
|
|
|
|
|
+ .field(TicketView::getGrStatus, "validity").op(Operator.Equal)
|
|
|
|
|
+ .build());
|
|
|
|
|
+ DateTime now = DateTime.now();
|
|
|
|
|
+ List<TicketView> tkCollect = ticketViews.stream().filter(tk -> {
|
|
|
|
|
+ if ("validity".equals(tk.getGroupsTripStatus())) {
|
|
|
|
|
+ if (tk.getExpiryTime() != null && tk.getExpiryTime().before(now)) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
|
+ view.setTicketViews(tkCollect);
|
|
|
|
|
+ List<OrderDonView> orderDonViews = beanSearcher.searchAll(OrderDonView.class, MapUtils.builder()
|
|
|
|
|
+ .field(OrderDonView::getUserId, view.getUserId()).op(Operator.Equal)
|
|
|
|
|
+ .build());
|
|
|
|
|
+ view.setOrderDonViews(orderDonViews);
|
|
|
|
|
+ }
|
|
|
|
|
+ return view;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|