Pārlūkot izejas kodu

Merge branch 'corp_wx'

zoujiajian 3 gadi atpakaļ
vecāks
revīzija
8736b4076b

+ 5 - 1
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonView.java

@@ -1,5 +1,6 @@
 package com.cyksj.model.manage.views;
 
+import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.entity.OrderDonTransport;
 import com.cyksj.model.entity.OrderDonWaybill;
 import com.ejlchina.searcher.bean.DbField;
@@ -61,7 +62,10 @@ public class OrderDonView {
     private BigDecimal money;
 
     @DbField("o.status")
-    private String status;
+    private OrderDon.Status status;
+
+    @DbField("o.type")
+    private OrderDon.Type type;
 
     @DbField("o.type")
     private String type;

+ 77 - 0
netflix-dao/src/main/java/com/cyksj/model/views/TicketView.java

@@ -0,0 +1,77 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Getter
+@Setter
+@SearchBean(tables = "groups_relation gr left join groups_trips gt on gt.id = gr.groups_id" +
+		" left join account a on a.id = gt.account_id" +
+		" left join goods_don gd on gd.id = a.goods_id" +
+		" left join goods_don_sku gdk on gdk.id = gt.sku_id")
+public class TicketView{
+	@DbField("gr.user_id")
+	private Long userId;
+
+	@DbField("a.goods_id")
+	private Long goodsId;
+
+	/**
+	 * 平台
+	 */
+	@DbField("gd.title")
+	private String title;
+
+	@DbField("gdk.price")
+	private BigDecimal money;
+
+	/**
+	 * 规格
+	 */
+	@DbField("gdk.spec_val")
+	private String specVal;
+
+	/**
+	 * 主账号
+	 */
+	@DbField("a.account")
+	private String account;
+
+	/**
+	 * 主账号密码
+	 */
+	@DbField("a.password")
+	private String password;
+
+	/**
+	 * 国区id
+	 */
+	@DbField("a.cn_account")
+	private String cnAccount;
+
+	/**
+	 * 座位号
+	 */
+	@DbField("gr.num")
+	private Integer num;
+
+	/**
+	 * 过期时间
+	 */
+	@DbField("gr.expiry_time")
+	private Date expiryTime;
+
+	@DbField("gr.status")
+	private String grStatus;
+
+	/**
+	 * 状态
+	 */
+	@DbField("gt.status")
+	private String groupsTripStatus;
+}

+ 64 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YHLXUserDetailView.java

@@ -0,0 +1,64 @@
+package com.cyksj.model.views;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.cyksj.model.entity.Address;
+import com.cyksj.model.manage.views.OrderDonView;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/*
+ *项目名: netflix
+ *文件名: YhlxUserDetailView
+ *创建者: JavaZou
+ *创建时间:2022/11/11 14:48
+ */
+@Getter
+@Setter
+@SearchBean(tables = "user u")
+public class YHLXUserDetailView {
+	/**
+	 * 用户id
+	 */
+	@DbField("u.id")
+	private Long userId;
+
+	/**
+	 * 昵称
+	 */
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("u.unionid")
+	@JsonIgnore
+	private String unionId;
+
+	/**
+	 * 头像
+	 */
+	@DbField("u.headimgurl")
+	private String headImgUrl;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private Address address;
+
+	/**
+	 * 车票信息
+	 */
+	@DbIgnore
+	@TableField(exist = false)
+	private List<TicketView> ticketViews;
+
+	/**
+	 * 订单信息
+	 */
+	@DbIgnore
+	@TableField(exist = false)
+	private List<OrderDonView> orderDonViews;
+}

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/corp/CorpService.java

@@ -2,6 +2,7 @@ package com.cyksj.service.corp;
 
 import com.cyksj.dto.CorpOauth2UserInfo;
 import com.cyksj.model.entity.CorpFollow;
+import com.cyksj.model.views.YHLXUserDetailView;
 
 /*
  *项目名: netflix
@@ -25,4 +26,6 @@ public interface CorpService {
 	String getJsTicket(String corpId) throws Exception;
 
 	String getAgentJsTicket(String corpId, String agentId) throws Exception;
+
+	YHLXUserDetailView getUserDetailView(String externalUserid) throws Exception;
 }

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpEventActionServiceImpl.java

@@ -53,6 +53,9 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 		//1.从企业微信获取客户信息
 		CorpExternalContactInfo externalContact = wxCorpOps.getExternalContact(corpId, externalUserId);
 		ExternalContact corpUserInfo = externalContact.getExternalContact();
+		if (corpUserInfo == null) {
+			return null;
+		}
 		//查询客户是否存在
 		CorpUser corpUser = Optional.ofNullable(
 				corpUserMapper.selectOne(Wrappers.lambdaQuery(CorpUser.class)

+ 75 - 1
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpServiceImpl.java

@@ -1,6 +1,8 @@
 package com.cyksj.service.corp.impl;
 
 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.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 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.YHLXWxCorpConfig;
 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.CorpUserMapper;
 import com.cyksj.model.dto.WxCorpEncryptDto;
+import com.cyksj.model.entity.Address;
 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.CorpXmlOutMessage;
 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.service.corp.CorpService;
 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.CorpMessageRouter;
 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 org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -31,6 +45,8 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.PostConstruct;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 /*
  *项目名: netflix
@@ -61,6 +77,18 @@ public class CorpServiceImpl implements CorpService {
 	@Autowired
 	private RedisService redisService;
 
+	@Autowired
+	private CorpUserMapper corpUserMapper;
+
+	@Autowired
+	private UserMapper userMapper;
+
+	@Autowired
+	private BeanSearcher beanSearcher;
+
+	@Autowired
+	private AddressMapper addressMapper;
+
 	@PostConstruct
 	private void init() {
 		corpMessageRouter = new CorpMessageRouter(this)
@@ -259,4 +287,50 @@ public class CorpServiceImpl implements CorpService {
 		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;
+	}
+}

+ 13 - 2
netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/WxCorpController.java

@@ -14,6 +14,7 @@ import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.model.dto.AuthRedirect;
 import com.cyksj.model.entity.CorpFollow;
+import com.cyksj.model.views.YHLXUserDetailView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.corp.CorpService;
 import lombok.RequiredArgsConstructor;
@@ -142,7 +143,7 @@ public class WxCorpController {
 		CorpJsSdkTicket jsSdkTicket = new CorpJsSdkTicket();
 		jsSdkTicket.setCorpId(corpId);
 		jsSdkTicket.setAgentId(agentId);
-		jsSdkTicket.setNonceStr("shanxing");
+		jsSdkTicket.setNonceStr("yhlx");
 		jsSdkTicket.setTimestamp(System.currentTimeMillis());
 
 		String str = "jsapi_ticket=" + ticket +
@@ -174,7 +175,7 @@ public class WxCorpController {
 		CorpJsSdkTicket jsSdkTicket = new CorpJsSdkTicket();
 		jsSdkTicket.setCorpId(corpId);
 		jsSdkTicket.setAgentId(agentId);
-		jsSdkTicket.setNonceStr("shanxing");
+		jsSdkTicket.setNonceStr("yhlx");
 		jsSdkTicket.setTimestamp(System.currentTimeMillis());
 
 		String str = "jsapi_ticket=" + ticket +
@@ -196,4 +197,14 @@ public class WxCorpController {
 	public Result<String> dataInitByCorpId(@PathVariable("corpId") String corpId) throws Exception {
 		return GatewayResponse.SUCCESS.newBuilder().toResult(corpService.dataInitByCorpId(corpId));
 	}
+
+	/**
+	 * 企业微信客户银河录像详情
+	 */
+	@GetMapping("/user/detail")
+	public Result<YHLXUserDetailView> getYHLXUserDetailView(String externalUserid) throws Exception {
+		YHLXUserDetailView detailView = corpService.getUserDetailView(externalUserid);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(detailView);
+	}
+
 }