소스 검색

Merge branch 'dev' of http://113.31.163.91:7777/quanshu/mp-server into
dev

Conflicts:
mp-service/src/main/java/com/qs/mp/user/service/IUserTicketOrderService.java

guanglong 3 년 전
부모
커밋
b75e08c0f6

+ 1 - 3
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/ChannelWithdrawMgrController.java

@@ -58,9 +58,7 @@ public class ChannelWithdrawMgrController extends BaseApiController {
     String name = param.getString("name");
     Date startDay = param.getDate("startDay");
     Date endDay = param.getDate("endDay");
-    if (null != endDay) {
-      endDay = DateUtils.addDays(endDay, 1);
-    }
+
     startPage();
     List<ChannelWithdrawVO> withdrawList = channelWithdrawService.listWithdrawVO(new QueryWrapper<ChannelWithdraw>()
         .eq(null != status && status != 0, "t1.status", status)

+ 1 - 5
mp-admin/src/main/java/com/qs/mp/web/controller/api/common/UserController.java

@@ -432,11 +432,7 @@ public class UserController extends BaseApiController {
 
   public static void main(String[] args) {
     UserController userController = new UserController();
-    BASE64Encoder encoder = new BASE64Encoder();
-    String sessionKey = encoder.encode("f7a104e09d6c2e55445be2a45c4ab551".getBytes(
-        StandardCharsets.UTF_8));
-    System.out.println(sessionKey);
-    System.out.println(userController.weixinDecrypt("1U2iT7fucPip+hYDO+fcksOJCyFMIzxe5qXKGPbLZVfz2kwlKkbRDbfjECRHtjg0yFiTXpHuvR9gBShL9Id7p8KO1w2Y2vhgj5idU/VYSOhF7IRyXEObDApMCs4JSWuS997hIl/JMX3N43IHC99Ak5aeTuk4UHtvHeJsTYfvNKrp7c4fDt0n9yX9MJijsoOjFQ/TFh0jJuWKpzS2QwhdGg==", sessionKey, "C9Kc2ibw/cy7U0Vv6vneOg=="));
+    System.out.println(userController.weixinDecrypt("qvNE+SHdiP2GTbmNaqahrhhLw7EZetcMhUMV9yPXHxBbWOMcZ5gFxOGliXC9uojyC0NDUXCUi1xvFVDKMYREQ7rLXXrZIkB1jEleJNuUb9kO3LCDRucvbGAbVwm2EsTNsd5VbqI3fKdu0IOxmmSAWCLZNGXZBlki4ke62lI+ASg6dPohQmmCux8jwD2Js3ZnDQN2mb0JPRT68Qj716gYvA==", "QJ/WdeFANTIfIErOCJ2jNg==", "60YJmIckq4kaXp88wAGGHA=="));
   }
 
 }

+ 48 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserShareController.java

@@ -0,0 +1,48 @@
+package com.qs.mp.web.controller.api.user;
+
+import com.alibaba.fastjson.JSONObject;
+import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.core.domain.AjaxResult.Type;
+import com.qs.mp.framework.service.IWxUrlLinkService;
+import com.qs.mp.utils.SecurityUtils;
+import com.qs.mp.web.controller.common.BaseApiController;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @auther zhongcp
+ * @create 2022-02-28 16:17:48
+ * @describe 用户分享前端控制器
+ */
+@Api("用户分享调用API")
+@RestController
+@RequestMapping("/api/v1/mp/user/share")
+@Component
+public class UserShareController extends BaseApiController {
+
+	@Autowired
+	private IWxUrlLinkService wxUrlLinkService;
+
+	@Value("${wx-user.appId}")
+	private String userAppId;
+
+	/**
+	 * 生成盲票详情小程序码
+	 *
+	 * @return
+	 */
+	@PostMapping("/code/generate")
+	public AjaxResult generateInviteCode(@RequestBody  JSONObject jsonObject) {
+		String boxId = jsonObject.getString("boxId"); // 票组ID
+		String type = jsonObject.getString("type"); // 分享类型,channel/user
+		Long userId = SecurityUtils.getUserId();
+		String rst = wxUrlLinkService.generateCode("pages/lucky/index", "boxId=" + boxId + "&suid=" + userId + "&type=" + type, userAppId);
+		return new AjaxResult(Type.SUCCESS, "", rst);
+	}
+}

+ 12 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketController.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.admin.domain.Ticket;
 import com.qs.mp.admin.domain.TicketAwardsPrize;
 import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.domain.TicketPackage;
 import com.qs.mp.admin.domain.param.TicketBoxParam;
 import com.qs.mp.admin.domain.param.TicketParam;
 import com.qs.mp.admin.domain.vo.TicketBoxListVO;
@@ -14,12 +15,15 @@ import com.qs.mp.admin.domain.vo.TicketListVO;
 import com.qs.mp.admin.domain.vo.TicketVO;
 import com.qs.mp.admin.service.ITicketAwardsPrizeService;
 import com.qs.mp.admin.service.ITicketBoxService;
+import com.qs.mp.admin.service.ITicketPackageService;
 import com.qs.mp.admin.service.ITicketService;
 import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.common.enums.TicketBoxStatusEnum;
+import com.qs.mp.common.enums.TicketPkgStatusEnum;
 import com.qs.mp.common.enums.TicketStatusEnum;
+import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.user.domain.UserTicketOrderItem;
 import com.qs.mp.user.service.IUserHitPrizeService;
@@ -60,6 +64,9 @@ public class UserTicketController extends BaseApiController {
   @Autowired
   private IUserHitPrizeService userHitPrizeService;
 
+  @Autowired
+  private ITicketPackageService ticketPackageService;
+
   @Autowired
   private MapperFacade mapperFacade;
 
@@ -121,6 +128,11 @@ public class UserTicketController extends BaseApiController {
     /*if (ticket.getStatus() == TicketStatusEnum.CASHED) {
       return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1017);
     }*/
+    TicketPackage ticketPackage = ticketPackageService.getById(ticket.getPkgId());
+    if (ticketPackage.getStatus() != TicketPkgStatusEnum.SOLD) {
+      LogUtil.error(logger, "盲票未激活。ticketId:{0},pkgId:{1}", new Object[]{ticket.getTicketId(), ticket.getPkgId()});
+      return AjaxResult.error("盲票未激活");
+    }
 
     TicketBox ticketBox = ticketBoxService.getById(ticket.getBoxId());
 

+ 3 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketOrderController.java

@@ -26,6 +26,7 @@ import com.qs.mp.user.domain.UserTicketOrder;
 import com.qs.mp.user.domain.param.TicketOrderParam;
 import com.qs.mp.user.domain.vo.TicketOrderSettleVO;
 import com.qs.mp.user.domain.vo.UserCouponVO;
+import com.qs.mp.user.domain.vo.UserShareVO;
 import com.qs.mp.user.service.IUserCouponService;
 import com.qs.mp.user.service.IUserTicketOrderService;
 import com.qs.mp.utils.SecurityUtils;
@@ -151,13 +152,13 @@ public class UserTicketOrderController extends BaseApiController {
    */
   @PostMapping("/order/submit")
   @ApiOperation(value = "提交订单" , notes = "在订单确认页面提交")
-  public AjaxResult submit(@RequestBody UserTicketOrder order) {
+  public AjaxResult submit(@RequestBody UserShareVO userShareVO) {
     Long userId = SecurityUtils.getLoginUser().getUserId();
     TicketOrderSettleVO orderSettleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
     if (null == orderSettleVO) {
       return AjaxResult.error("订单已过期,请重新下单");
     }
-    String orderId = userTicketOrderService.submitOrder(userId, orderSettleVO);
+    String orderId = userTicketOrderService.submitOrder(userId, orderSettleVO, userShareVO);
     JSONObject jsonObject = new JSONObject();
     jsonObject.put("orderId", orderId);
     if (orderSettleVO.getPayAmt() > 0) {

+ 208 - 0
mp-common/src/main/java/com/qs/mp/common/utils/DateUtils.java

@@ -1,10 +1,17 @@
 package com.qs.mp.common.utils;
 
 import java.lang.management.ManagementFactory;
+import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.joda.time.DateTime;
 import org.joda.time.Days;
@@ -12,6 +19,8 @@ import org.joda.time.Months;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 
+import com.alibaba.fastjson.JSON;
+
 /**
  * 时间工具类
  *
@@ -235,4 +244,203 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         }
         return null;
     }
+    
+    // 首页统计日期处理
+    /** 
+     * @Title: getDateOfWeek 
+     * @Description: 获取两个时间内所有周之间的时间段,并且获得是今年第几周
+     * @param start_time    开始时间 
+     * @param end_time      结束时间 
+     */  
+    public static List<Map<String,Object>> getDateOfWeek(Date startTime, Date endTime) {
+    	List<Map<String,Object>> rtnList = new ArrayList<Map<String,Object>>();
+    	try {  
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
+            
+            Calendar startCalendar = Calendar.getInstance();  
+            startCalendar.setTime(startTime);  
+            
+            Calendar endCalendar = Calendar.getInstance();  
+            endCalendar.setTime(endTime);  
+            
+            String firstWeekDay = getFirstDayOfWeek(startTime);  // 取得开始日期指定日期所在周的第一天
+	        String lastWeekDay = getLastDayOfWeek(endTime);      // 取得结束日期指定日期所在周的最后一天
+	        
+            // 开始日期所在的周
+            int startWeekOfYear = startCalendar.get(Calendar.WEEK_OF_YEAR);  
+            System.out.println("startWeekOfYear == " +startWeekOfYear);
+            
+            //截止日期所在的周
+            int endWeekOfYear = endCalendar.get(Calendar.WEEK_OF_YEAR);  
+            System.out.println("currentWeekOfYear_e == " +endWeekOfYear);
+              
+            int j = 12;  
+            for (int i=0; i < endWeekOfYear; i++) {  
+            	
+            	 //只取两个日期之间的周  
+                if(startWeekOfYear > endWeekOfYear - i){  
+                    break;  
+                }  
+                int dayOfWeek = endCalendar.get(Calendar.DAY_OF_WEEK) - 2;  
+                
+                System.out.println("dayOfWeek == " +dayOfWeek);
+            	List<String> list = new ArrayList<>();
+                
+                endCalendar.add(Calendar.DATE, - dayOfWeek); //得到本周的第一天  
+                String s_date = sdf.format(endCalendar.getTime());  
+                
+                Long startTIme = endCalendar.getTimeInMillis();   
+                
+                endCalendar.add(Calendar.DATE, 6);  //得到本周的最后一天  
+                String e_date = sdf.format(endCalendar.getTime());  
+               
+                //结束时间转换成时间戳
+                Long endTIme = endCalendar.getTimeInMillis();
+               
+                //定义一个一天的时间戳时长
+                Long oneDay = 1000 * 60 * 60 * 24L;
+                Long time = startTIme;
+                //循环得出
+                while (time <= endTIme) {
+                    list.add(new SimpleDateFormat("yyyy-MM-dd").format(new Date(time)));
+                    time += oneDay;
+                }
+                endCalendar.add(Calendar.DATE, -j); //减去增加的日期  
+                System.out.println("");
+                //只取两个日期之间的周
+	            if(compareDate(firstWeekDay, s_date) && compareDate(s_date, lastWeekDay)
+	            		&& compareDate(firstWeekDay, e_date) && compareDate(e_date, lastWeekDay)){
+	            	//超过选择的日期,按选择日期来算
+	            	if(!compareDate(sdf.format(startTime), s_date)){
+	 	            	s_date = sdf.format(startTime);
+	 	            }
+	            	if(!compareDate(e_date, sdf.format(endTime))){
+	 	            	e_date = sdf.format(endTime);
+	 	            }
+	            	 Calendar yearCalendar = Calendar.getInstance();  
+	            	 Date sDate = sdf.parse(s_date);
+	            	 yearCalendar.setTime(sDate);  
+	            	int year = yearCalendar.get(Calendar.YEAR);  
+	            	String s = year+ "年的第" + (endWeekOfYear - i) + "周" + "(" + s_date + "至" + e_date + ")";     
+	                System.out.println(s);  
+	                System.out.println("包含的日期 = " +list.toString());
+	                Map<String,Object> map = new HashMap<String,Object>();
+	                map.put("start", s_date);
+	                map.put("end", e_date);
+	                map.put("year", year);
+	                map.put("week", endWeekOfYear - i);
+	                map.put("dayList", list);
+	                rtnList.add(map);
+	            }
+               
+            }  
+              
+        } catch (Exception e) {  
+            e.printStackTrace();  
+        }
+    	return rtnList;
+    }
+    
+    
+    
+    /** 
+   	 * 取得指定日期所在周的第一天 
+   	 */ 
+   	 public static String getFirstDayOfWeek(Date date) { 
+		try {
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+			Calendar c = new GregorianCalendar(); 
+		   	c.setFirstDayOfWeek(Calendar.MONDAY); 
+		   	c.setTime(date); 
+		   	c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday 
+		   	return sdf.format(c.getTime()); 
+		} catch (Exception e) {
+			e.printStackTrace();
+			return "";
+		}
+        
+	   	
+   	 }
+ 
+   	 /** 
+   	 * 取得指定日期所在周的最后一天 
+   	 */ 
+   	 public static String getLastDayOfWeek(Date date) { 
+   		try {
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+			Calendar c = new GregorianCalendar(); 
+		   	c.setFirstDayOfWeek(Calendar.MONDAY); 
+		   	c.setTime(date); 
+		   	c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday 
+		   	return sdf.format(c.getTime()); 
+		} catch (Exception e) {
+			e.printStackTrace();
+			return "";
+		}
+   	 }
+   	 
+   	/**
+ 	 * compareDate方法
+ 	 * <p>方法说明:
+ 	 * 		比较endDate是否是晚于startDate;
+ 	 * 			如果是,返回true, 否则返回false
+ 	 * </p>
+ 	 */
+  	public static boolean compareDate(String startDate, String endDate) {
+ 		try {
+ 			DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ 			java.util.Date date1 = dateFormat.parse(startDate);
+ 			java.util.Date date2 = dateFormat.parse(endDate);
+ 			if (date1.getTime() > date2.getTime())
+ 				return false;
+ 			return true; //startDate时间上早于endDate
+ 			
+ 		} catch (Exception e) {
+ 			return false; 
+ 		}
+ 	}
+
+
+    /**
+     * @param cntDateBeg 开始时间
+     * @param cntDateEnd 结束时间
+     * @return
+     */
+    public static List<String> addDates(String cntDateBeg, String cntDateEnd) {
+        List<String> list = new ArrayList<>();
+        //拆分成数组
+        String[] dateBegs = cntDateBeg.split("-");
+        String[] dateEnds = cntDateEnd.split("-");
+        //开始时间转换成时间戳
+        Calendar start = Calendar.getInstance();
+        start.set(Integer.valueOf(dateBegs[0]), Integer.valueOf(dateBegs[1]) - 1, Integer.valueOf(dateBegs[2]));
+        Long startTIme = start.getTimeInMillis();
+        //结束时间转换成时间戳
+        Calendar end = Calendar.getInstance();
+        end.set(Integer.valueOf(dateEnds[0]), Integer.valueOf(dateEnds[1]) - 1, Integer.valueOf(dateEnds[2]));
+        Long endTime = end.getTimeInMillis();
+        //定义一个一天的时间戳时长
+        Long oneDay = 1000 * 60 * 60 * 24L;
+        Long time = startTIme;
+        //循环得出
+        while (time <= endTime) {
+            list.add(new SimpleDateFormat("yyyy-MM-dd").format(new Date(time)));
+            time += oneDay;
+        }
+        return list;
+    }
+    
+    
+    public static void main(String[] args) throws Exception {
+//      List<String> list = addDates("2022-02-01", "2022-03-31");
+//      list.forEach(i ->
+//              System.out.println(i)
+//      );
+    	DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        String start_time = "2022-02-02";
+		String end_time = "2022-04-11";
+		List<Map<String,Object>> lsit = getDateOfWeek(dateFormat.parse(start_time), dateFormat.parse(end_time));  
+		System.out.println(JSON.toJSONString(lsit));
+
+  }
 }

+ 10 - 1
mp-service/src/main/java/com/qs/mp/framework/service/IWxUrlLinkService.java

@@ -25,11 +25,20 @@ public interface IWxUrlLinkService {
   String generateUrlSchema(String path, String query, String appId);
 
   /**
-   * 生成小程序码,返回的是base64字符串
+   * 生成小程序码(每个小程序限制10w个),返回图片名
    * @param path
    * @param scene
    * @param appId
    * @return
    */
   String generateCode(String path, String scene, String appId);
+
+  /**
+   * 生成小程序码(不受限制),返回图片名
+   * @param path
+   * @param scene
+   * @param appId
+   * @return
+   */
+  String generateUnlimitCode(String path, String scene, String appId);
 }

+ 31 - 1
mp-service/src/main/java/com/qs/mp/framework/service/impl/WxUrlLinkServiceImpl.java

@@ -106,7 +106,7 @@ public class WxUrlLinkServiceImpl implements IWxUrlLinkService {
     InputStream in = HttpUtils.sendImagePost(
         "https://api.weixin.qq.com/wxa/getwxacode?access_token=" + accessToken,
         JSON.toJSONString(param));
-    LogUtil.info(logger, "小程序链接获取,path:{0},scene:{1}",
+    LogUtil.info(logger, "小程序获取,path:{0},scene:{1}",
         new Object[]{path, scene});
 //    JSONObject jsonObject = JSON.parseObject(res);
     if (null == in) {
@@ -124,4 +124,34 @@ public class WxUrlLinkServiceImpl implements IWxUrlLinkService {
     }
     return uuid;
   }
+
+  @Override
+  public String generateUnlimitCode(String path, String scene, String appId) {
+    Map<String, Object> param = new HashMap<String, Object>();
+    param.put("page", path); // 页面路径
+    param.put("scene", scene); // 参数
+//    param.put("check_path", true);// 为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);为 false 时允许小程序未发布或者 page 不存在
+//    param.put("env_version", "release");
+    // 获取access_token
+    String accessToken = appTokenService.getAccessToken(appId);
+    InputStream in = HttpUtils.sendImagePost(
+        "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken,
+        JSON.toJSONString(param));
+    LogUtil.info(logger, "小程序码生成,path:{0},scene:{1}",
+        new Object[]{path, scene});
+//    JSONObject jsonObject = JSON.parseObject(res);
+    if (null == in) {
+      LogUtil.error(logger, "小程序码生成错误");
+      return null;
+    }
+    // 上传图片
+    String fileName = "s/" + UUIDUtils.newId();
+    try {
+      QcloudFileUtils.putStream(in, fileName, publicBucketName, ContentType.IMAGE_JPEG.getMimeType());
+    } catch (Exception e) {
+      LogUtil.error(logger, e, "小程序码获取错误");
+      return null;
+    }
+    return fileName;
+  }
 }

+ 1 - 1
mp-service/src/main/java/com/qs/mp/mq/impl/PulsarConsumerImpl.java

@@ -55,7 +55,7 @@ public class PulsarConsumerImpl implements PulsarConsumer {
       LogUtil.error(logger, "收到盲票支付成功消息,订单结佣状态不是未结佣,忽略消息。orderId=" + orderId);
       return;
     }
-    // 先更新状态,防并发。如果最后生成失败了,暂时人工重新触发
+    // 先更新状态,防并发。
     boolean rst = userTicketOrderService.update(new LambdaUpdateWrapper<UserTicketOrder>().set(UserTicketOrder::getCommStatus, CommStatusEnum.DOING)
         .eq(UserTicketOrder::getOrderId, orderId).eq(UserTicketOrder::getCommStatus, CommStatusEnum.NO));
     if (!rst) {

+ 6 - 0
mp-service/src/main/java/com/qs/mp/user/domain/UserTicketOrder.java

@@ -92,6 +92,12 @@ public class UserTicketOrder implements Serializable {
   @TableField("coupon_info")
   private String couponInfo;
 
+  /**
+   * 分享信息
+   */
+  @TableField("share_info")
+  private String shareInfo;
+
   /**
    * 订单状态;-1 已取消 0:待付款 1:已完成
    */

+ 16 - 0
mp-service/src/main/java/com/qs/mp/user/domain/vo/UserShareVO.java

@@ -0,0 +1,16 @@
+package com.qs.mp.user.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @author zhongcp
+ * @Date 2022/3/31
+ */
+@Data
+public class UserShareVO {
+  private Long suid; // 分享者uid
+  private String type; // 分享者类型
+
+  public static final String SHARE_TYPE_USER = "user"; // 用户分享
+  public static final String SHARE_TYPE_SITE = "site"; // 经销商分享
+}

+ 6 - 1
mp-service/src/main/java/com/qs/mp/user/service/IUserTicketOrderService.java

@@ -7,8 +7,12 @@ import com.qs.mp.user.domain.UserTicketOrder;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.user.domain.vo.TicketOrderSettleVO;
+<<<<<<< HEAD
 import com.qs.mp.user.domain.vo.UserDeliverOrderVO;
 
+=======
+import com.qs.mp.user.domain.vo.UserShareVO;
+>>>>>>> branch 'dev' of http://113.31.163.91:7777/quanshu/mp-server
 import java.util.List;
 
 /**
@@ -25,9 +29,10 @@ public interface IUserTicketOrderService extends IService<UserTicketOrder> {
    * 提交盲票购买订单
    * @param userId
    * @param orderSettleVO
+   * @param userShareVO
    * @return
    */
-  String submitOrder(Long userId, TicketOrderSettleVO orderSettleVO);
+  String submitOrder(Long userId, TicketOrderSettleVO orderSettleVO, UserShareVO userShareVO);
 
   /**
    * 批量取消一个票组(线上)的订单(恢复优惠券、票组销量)

+ 28 - 5
mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderServiceImpl.java

@@ -3,7 +3,6 @@ package com.qs.mp.user.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qs.mp.admin.domain.Ticket;
@@ -43,6 +42,7 @@ import com.qs.mp.user.domain.UserTicketOrder;
 import com.qs.mp.user.domain.UserTicketOrderItem;
 import com.qs.mp.user.domain.vo.TicketOrderSettleVO;
 import com.qs.mp.user.domain.vo.UserCouponVO;
+import com.qs.mp.user.domain.vo.UserShareVO;
 import com.qs.mp.user.mapper.UserTicketOrderMapper;
 import com.qs.mp.user.service.IUserCouponService;
 import com.qs.mp.user.service.IUserTicketOrderItemService;
@@ -109,16 +109,16 @@ public class UserTicketOrderServiceImpl extends
 
   @Override
   @Transactional
-  public String submitOrder(Long userId, TicketOrderSettleVO orderSettleVO) {
+  public String submitOrder(Long userId, TicketOrderSettleVO orderSettleVO, UserShareVO userShareVO) {
     if (StringUtils.isBlank(orderSettleVO.getTicketId())) {
-      return createOnlineOrder(userId, orderSettleVO);
+      return createOnlineOrder(userId, orderSettleVO, userShareVO);
     }
 
     // 线下票不需锁库存,待付款成功后再更新票组销量
     return createOfflineOrder(userId, orderSettleVO);
   }
 
-  private String createOnlineOrder(Long userId, TicketOrderSettleVO orderSettleVO) {
+  private String createOnlineOrder(Long userId, TicketOrderSettleVO orderSettleVO, UserShareVO userShareVO) {
     // 线上票更新票组销量,防止超卖
     TicketBox ticketBox = ticketBoxService.getById(orderSettleVO.getBoxId());
     if (ticketBox.getStatus() == TicketBoxStatusEnum.PUT_OFF
@@ -163,7 +163,30 @@ public class UserTicketOrderServiceImpl extends
     ChannelUserRel channelUserRel = channelUserRelService.getOne(
         new LambdaQueryWrapper<ChannelUserRel>()
             .eq(ChannelUserRel::getUserId, userId));
-    userTicketOrder.setChannelId(null == channelUserRel ? null : channelUserRel.getChannelId());
+    if (null != channelUserRel) {
+      userTicketOrder.setChannelId(channelUserRel.getChannelId());
+    } else {
+      // 没被绑定,看有没有分享者
+      if (null != userShareVO.getSuid() && 0 != userShareVO.getSuid()) {
+        if (UserShareVO.SHARE_TYPE_USER.equals(userShareVO.getType())) {
+          ChannelUserRel channelShareUserRel = channelUserRelService.getOne(
+              new LambdaQueryWrapper<ChannelUserRel>()
+                  .eq(ChannelUserRel::getUserId, userShareVO.getSuid()));
+          if (null != channelShareUserRel) {
+            userTicketOrder.setChannelId(channelShareUserRel.getChannelId());
+            userTicketOrder.setShareInfo(JSONObject.toJSONString(userShareVO));
+          }
+        } else if (UserShareVO.SHARE_TYPE_SITE.equals(userShareVO.getType())) {
+          Channel channel = channelService.getOne(
+              new LambdaQueryWrapper<Channel>()
+                  .eq(Channel::getUserId, userShareVO.getSuid()));
+          if (null != channel) {
+            userTicketOrder.setChannelId(channel.getChannelId());
+            userTicketOrder.setShareInfo(JSONObject.toJSONString(userShareVO));
+          }
+        }
+      }
+    }
     save(userTicketOrder);
 
     for (int i = 0; i < orderSettleVO.getOrderNum(); i++) {

+ 2 - 1
mp-service/src/main/resources/mapper/user/UserTicketOrderMapper.xml

@@ -15,6 +15,7 @@
         <result column="memo" property="memo" />
         <result column="resource" property="resource" />
         <result column="coupon_info" property="couponInfo" />
+        <result column="share_info" property="shareInfo" />
         <result column="status" property="status" />
         <result column="comm_status" property="commStatus" />
         <result column="channel_id" property="channelId" />
@@ -24,7 +25,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        order_id, user_id, title, box_id, order_amt, discount_amt, pay_amt, ticket_num, memo, resource, coupon_info, status, comm_status, channel_id, created_time, updated_time
+        order_id, user_id, title, box_id, order_amt, discount_amt, pay_amt, ticket_num, memo, resource, coupon_info, share_info, status, comm_status, channel_id, created_time, updated_time
     </sql>