Przeglądaj źródła

fix midjourney多规格预备账号

zoujiajian 2 lat temu
rodzic
commit
0735827a25

+ 2 - 2
netflix-dao/src/main/java/com/cyksj/model/entity/Account.java

@@ -87,9 +87,9 @@ public class Account extends BaseEntity {
     private String gptRefreshToken;
 
     /**
-     * 备用账号类型sku_id
+     * 备用账号类型sku_ids
      */
-    private Integer preSkuId;
+    private String preSkuIds;
 
     /**
      * 类型 1通用 2备用

+ 3 - 3
netflix-dao/src/main/java/com/cyksj/model/manage/views/AccountView.java

@@ -106,7 +106,7 @@ public class AccountView {
     @DbField("a.email")
     private String email;
 
-    @DbField("ifnull(gdk.id,a.pre_sku_id)")
+    @DbField("gdk.id")
     private Long skuId;
 
     @DbField("a.gpt_refresh_token")
@@ -138,8 +138,8 @@ public class AccountView {
     @DbIgnore
     private Date lastUpdatePwdDate;
 
-    @DbField("a.pre_sku_id")
-    private Long preSkuId;
+    @DbField("a.pre_sku_ids")
+    private String preSkuIds;
 
     @DbField("a.type")
     private Integer accountType;

+ 1 - 1
netflix-dao/src/main/resources/mapper/GroupRelationMapper.xml

@@ -250,7 +250,7 @@
     </select>
 
     <select id="selectSpecialGroupsRelationAvailable" resultType="java.lang.Integer">
-        select sum(a1+(#{extractNum}-t1)) from
+        select ifnull(sum(a1+(#{extractNum}-t1)),0) from
                                          (select gt.id,
         (select count(*)
         from groups_relation gr2

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/mange/account/CmsAccountServiceImpl.java

@@ -240,7 +240,7 @@ public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> i
 					}
 					insert.setGoodsId(goodsId);
 					if (goodsId.equals(31l)) {
-						if (part.length > 9) {
+						if (part.length >= 9) {
 							StringBuilder sb = new StringBuilder();
 							String country = part[part.length - 1];
 							if (country.contains("国")) {

+ 3 - 1
netflix-service/src/main/java/com/cyksj/service/mange/group/CmsGroupServiceImpl.java

@@ -420,7 +420,9 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
     public Integer getAvailableAfterPreAccount(Integer available, Long skuId, Integer maxNum, Long goodsId) {
         MapBuilder builder = MapUtils.builder();
         if (goodsId == 26) {
-            builder.field(AccountView::getPreSkuId, skuId);
+            //是否在预备规格集合中
+            String extra_sql = String.format("FIND_IN_SET(%s,a.pre_sku_ids) > 0", skuId);
+            builder.put("extra_sql", extra_sql);
         }
         Number preAccount = beanSearcher.searchCount(AccountView.class, builder
                 .field(AccountView::getGoodsId, goodsId)

+ 48 - 11
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -85,6 +85,7 @@ import com.cyksj.service.telegram.TelegramService;
 import com.cyksj.service.template.TemplateCommonService;
 import com.cyksj.service.user.UserBenefitsService;
 import com.cyksj.service.user.UserBindRelationService;
+import com.cyksj.service.user.UserService;
 import com.cyksj.service.wechat.WeChatService;
 import com.cyksj.task.JobManager;
 import com.ejlchina.searcher.BeanSearcher;
@@ -124,6 +125,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final UserMapper userMapper;
 
+	private final UserService userService;
+
 	private final WeChatService weChatService;
 
 	private final RedisService redisService;
@@ -287,7 +290,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			couponUser = couponStatusRecord(payRequest.getCouponExCode(), payRequest.getCouponId(), payRequest.getUserId(), couponPopularizeDto);
 		}
 		Boolean isNoLogin = payRequest.getIsNoLogin();
-		User user;
+		User user = null;
 		String payOpenId = null;
 		Long relationId = 0L;
 		Boolean isNeedTicket = checkIsNeedGroupsRelation(goodsDon);
@@ -301,11 +304,18 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		}
 		GroupsRelation relation = null;
+		String orderPhone = payRequest.getPhone();
+		if (StrUtil.isNotBlank(orderPhone)) {
+			user = saveOrGetOrderPhoneUser(payRequest);
+			userId = user.getId();
+		}
 		if (userId == null) {
 			user = new User();
 			user.setId(0l);
 		} else {
-			user = userMapper.selectById(userId);
+			if (user == null) {
+				user = userMapper.selectById(userId);
+			}
 			if (user == null) throw BusinessRuntimeException.getGatewayApiCode(GatewayApiCode.CMS_TOKEN_VALID);
 			if (user.getIsBlack()) throw BusinessRuntimeException.getInstance("系统检测操作异常,请稍后再试");
 			payOpenId = user.getOpenId();
@@ -499,7 +509,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		orderDon.setPayTitle(payTitle.toString());
 		//下单手机号
-		orderDon.setPhone(payRequest.getPhone());
+		orderDon.setPhone(orderPhone);
 		this.saveOrUpdate(orderDon);
 
 		if (orderDon.getIsDp()) {
@@ -975,15 +985,19 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		OrderDetailView detail = beanSearcher.searchFirst(OrderDetailView.class, builder.build());
 		//获取对应车票订单 账号密码
-		RenewalView renewalView = beanSearcher.searchFirst(RenewalView.class, MapUtils.builder()
-				.field(RenewalView::getUserId, userId)
-				.field(RenewalView::getRelationId, detail.getRelationId())
-				.onlySelect(RenewalView::getAccount, RenewalView::getPassword)
-				.build());
-		if (renewalView != null) {
-			detail.setAccount(renewalView.getAccount());
-			detail.setPassword(renewalView.getPassword());
+		if (userId != null) {
+			List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+			RenewalView renewalView = beanSearcher.searchFirst(RenewalView.class, MapUtils.builder()
+					.field(RenewalView::getUserId, userIdList).op(Operator.InList)
+					.field(RenewalView::getRelationId, detail.getRelationId())
+					.onlySelect(RenewalView::getAccount, RenewalView::getPassword)
+					.build());
+			if (renewalView != null) {
+				detail.setAccount(renewalView.getAccount());
+				detail.setPassword(renewalView.getPassword());
+			}
 		}
+
 		if (detail.getRelationId() != 0) {
 			detail.setTransport(transportMapper.selectOne(Wrappers.lambdaQuery(OrderDonTransport.class).eq(OrderDonTransport::getOrderId, detail.getId()).last(" limit 1")));
 			detail.setWaybill(waybillMapper.selectOne(Wrappers.lambdaQuery(OrderDonWaybill.class).eq(OrderDonWaybill::getOrderId, detail.getId()).last(" limit 1")));
@@ -2541,4 +2555,27 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		}
 		return sku;
 	}
+
+	public User saveOrGetOrderPhoneUser(OrderPayRequest payRequest) {
+		String orderPhone = payRequest.getPhone();
+		User user = userMapper.selectOne(Wrappers.lambdaQuery(User.class)
+				.eq(User::getLoginPhone, orderPhone).last("limit 1"));
+		if (user == null) {
+			user = new User();
+			StringBuilder name = new StringBuilder();
+			name.append(Constant.DEFAULT_NAME);
+			user.setPopularizeId(payRequest.getPopularizeId());
+			user.setLoginPhone(orderPhone);
+			user.setNickname(String.format("%s%s", name.toString(), RandomUtil.randomString(6)));
+			//默认头像
+			user.setHeadimgurl(Constant.DEFAULT_HEAD_IMG);
+			String registerEnv = null;
+			user.setRegisterEnv(StrUtil.isEmpty(registerEnv) ? User.RegisterEnv.pc.name() : registerEnv);
+			if (StrUtil.isEmpty(user.getShowId())) {
+				user.setShowId(userService.getUserShowId(user.getId()));
+			}
+			userMapper.insert(user);
+		}
+		return user;
+	}
 }

+ 8 - 2
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java

@@ -965,8 +965,14 @@ public class CmsAccountController {
 			}
 		}
 		account.setType(2);
-		if (account.getGoodsId() == 26 && account.getPreSkuId() == null) {
-			throw BusinessRuntimeException.getInstance("请选择对应规格id");
+		if (account.getGoodsId() == 26) {
+			String preSkuIds = account.getPreSkuIds();
+			if (StrUtil.isEmpty(preSkuIds)) {
+				throw BusinessRuntimeException.getInstance("请选择对应规格id");
+			}
+			String[] split = preSkuIds.split(",");
+			String skuSetStr = Arrays.stream(split).distinct().collect(Collectors.joining(","));
+			account.setPreSkuIds(skuSetStr);
 		}
 		accountService.save(account);
 		return GatewayResponse.SUCCESS.newBuilder().toResult();

+ 28 - 3
netflix-web/src/main/java/com/cyksj/web/controller/payment/OrderController.java

@@ -1,8 +1,10 @@
 package com.cyksj.web.controller.payment;
 
+import cn.hutool.core.codec.Base64;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
+import cn.hutool.json.JSONObject;
 import com.alipay.api.response.AlipayFundTransCommonQueryResponse;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
@@ -56,6 +58,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
@@ -124,13 +127,35 @@ public class OrderController {
      * @date 2021-10-11 下午4:56
      */
     @PostMapping("/post/submit")
-    public Result<OrderDon> submit(@Validated @RequestBody OrderPayRequest payRequest) throws Exception {
+    public Result<OrderDon> submit(@Validated @RequestBody OrderPayRequest payRequest, HttpServletResponse response) throws Exception {
         final String methodName = "吊起微信支付";
-        payRequest.setUserId(StpUserUtil.getUserIdAfterLogin());
-        log.info("{}[start] params:{}",methodName,payRequest);
+        Long userId = StpUserUtil.getUserIdAfterLogin();
+        payRequest.setUserId(userId);
+        log.info("{}[start] params:{}", methodName, payRequest);
 
         OrderDon orderDon = orderDonService.submit(payRequest);
 
+        //无登录订单 预留手机号免登录
+        if (userId == null && payRequest.getPopularizeId() != null && StrUtil.isNotBlank(payRequest.getPhone())) {
+            User user = userMapper.selectById(orderDon.getUserId());
+            //写回登陆信息
+            StpUserUtil.login(user.getId());
+            response.addHeader("satoken-user", StpUserUtil.getTokenValue());
+
+            Cookie cookie = new Cookie("satoken-user", StpUserUtil.getTokenValue());
+            cookie.setMaxAge(31536000);
+            cookie.setPath("/");
+            response.addCookie(cookie);
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.putOpt("showId", user.getShowId());
+            jsonObject.putOpt("nickName", user.getNickname());
+
+            Cookie userInfo = new Cookie("info", Base64.encode(jsonObject.toString()));
+            cookie.setMaxAge(31536000);
+            cookie.setPath("/");
+            response.addCookie(userInfo);
+        }
+
         return GatewayResponse.SUCCESS.newBuilder().toResult(orderDon);
     }