Просмотр исходного кода

修改抢购接口、后续优化代码等

VEAR 2 лет назад
Родитель
Сommit
81d99b571e
17 измененных файлов с 232 добавлено и 136 удалено
  1. 4 4
      src/main/java/org/springblade/modules/api/controller/AliPay01Controller.java
  2. 7 4
      src/main/java/org/springblade/modules/api/controller/Api04Controller.java
  3. 15 14
      src/main/java/org/springblade/modules/api/controller/Api05Controller.java
  4. 12 0
      src/main/java/org/springblade/modules/api/controller/TestController.java
  5. 2 2
      src/main/java/org/springblade/modules/api/service/ITradeService.java
  6. 2 6
      src/main/java/org/springblade/modules/api/service/impl/ApiServiceImpl.java
  7. 18 4
      src/main/java/org/springblade/modules/api/service/impl/TradeServiceImpl.java
  8. 7 7
      src/main/java/org/springblade/modules/api/task/ConsignSchedulingTask.java
  9. 1 1
      src/main/java/org/springblade/modules/finance/service/IOrderService.java
  10. 72 81
      src/main/java/org/springblade/modules/finance/service/impl/OrderServiceImpl.java
  11. 1 1
      src/main/java/org/springblade/modules/platform/mapper/UserRecomMapper.xml
  12. 2 9
      src/main/java/org/springblade/modules/shopping/controller/ConsignController.java
  13. 21 1
      src/main/java/org/springblade/modules/shopping/mapper/ConsignMapper.java
  14. 38 2
      src/main/java/org/springblade/modules/shopping/mapper/ConsignMapper.xml
  15. 2 0
      src/main/java/org/springblade/modules/shopping/service/IConsignService.java
  16. 5 0
      src/main/java/org/springblade/modules/shopping/service/impl/ConsignServiceImpl.java
  17. 23 0
      src/main/java/org/springblade/modules/shopping/wrapper/ConsignWrapper.java

+ 4 - 4
src/main/java/org/springblade/modules/api/controller/AliPay01Controller.java

@@ -229,7 +229,7 @@ public class AliPay01Controller {
 		if(query.getState() != 1){
 			return R.fail("该账号已冻结!");
 		}
-		Consign consign = consignService.randomConsign(batNo,userId);
+		Consign consign = consignService.queryConsign(batNo, userId);
 		if (consign == null){
 			return R.fail("亲,好物已抢完欢迎再来!");
 		}
@@ -526,7 +526,7 @@ public class AliPay01Controller {
 		String out_trade_no = request.getParameter("out_trade_no");//获取请求参数中的商户订单号
 		log.info(errMsg, "out_trade_no == " + out_trade_no);
 		Order order = orderService.getOne(Wrappers.<Order>lambdaQuery().eq(Order::getOutTradeNo, out_trade_no));
-		if (order == null){
+		if (Objects.isNull(order)){
 			log.info(errMsg + "-订单无数据");
 			return "error";
 		}
@@ -534,7 +534,7 @@ public class AliPay01Controller {
 			log.info(errMsg, "寄售订单 == " + order.getOrderType());
 			//查询寄售订单信息
 			OrderConsign orderConsign  = orderConsignService.getOne(Wrappers.<OrderConsign>lambdaQuery().eq(OrderConsign::getOutTradeNo, out_trade_no));
-			if (orderConsign == null){
+			if (Objects.isNull(orderConsign)){
 				log.info(errMsg + "-寄售订单无数据");
 				return "error";
 			}
@@ -542,7 +542,7 @@ public class AliPay01Controller {
 			Double price = orderConsign.getConsignPrice();
 			//查询寄售订单中的寄售人
 			Consign consign  = consignService.getOne(Wrappers.<Consign>lambdaQuery().eq(Consign::getId, orderConsign.getConsignId()));
-			if (consign == null){
+			if (Objects.isNull(consign)){
 				log.info(errMsg + "-寄售无数据");
 				return "error";
 			}

+ 7 - 4
src/main/java/org/springblade/modules/api/controller/Api04Controller.java

@@ -289,10 +289,10 @@ public class Api04Controller extends BladeController {
 	public R<List<UserRecomVO>> userRecomPage(@ApiParam(value = "用户ID", required = true) @RequestParam Long userId,
 											  @ApiParam(value = "类型:1团队成员(默认)、2直推记录", required = true) @RequestParam Integer type, Query query) {
 		if (type == 2){
-			IPage<UserRecomVO> list = userRecomService.selectUserRecomVoPage(Condition.getPage(query),null, userId);
+			IPage<UserRecomVO> list = userRecomService.selectUserRecomVoPage(Condition.getPage(query), userId,null);
 			return R.data(list.getRecords());
 		}
-		IPage<UserRecomVO> list = userRecomService.selectUserRecomVoPage(Condition.getPage(query),userId, null);
+		IPage<UserRecomVO> list = userRecomService.selectUserRecomVoPage(Condition.getPage(query), userId, userId);
 		return R.data(list.getRecords());
 	}
 
@@ -302,9 +302,12 @@ public class Api04Controller extends BladeController {
 	public R<TeamResponse> teamAndRecomByUserId(@ApiParam(value = "用户ID", required = true) @RequestParam Long userId) {
 		TeamResponse response = new TeamResponse();
 		UserApp userApp = new UserApp();
-		Integer teamNum = userApp.selectCount(Condition.getQueryWrapper(userApp).lambda().like(UserApp::getParentPath, userId));
+		//团队不包含直推人数
+		Integer teamNum = userApp.selectCount(Condition.getQueryWrapper(userApp).lambda()
+			.like(UserApp::getParentPath, userId).ne(UserApp::getParentId, userId));
 		userApp.setParentId(userId);
-		Integer recomNum = userApp.selectCount(Condition.getQueryWrapper(userApp).lambda().eq(UserApp::getParentId, userId));
+		Integer recomNum = userApp.selectCount(Condition.getQueryWrapper(userApp).lambda()
+			.eq(UserApp::getParentId, userId));
 		response.setTeamNum(teamNum);
 		response.setRecomNum(recomNum);
 		return R.data(response);

+ 15 - 14
src/main/java/org/springblade/modules/api/controller/Api05Controller.java

@@ -33,6 +33,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
@@ -44,15 +45,12 @@ import org.springblade.modules.api.request.OrderTakeRequest;
 import org.springblade.modules.api.response.ConsignResponse;
 import org.springblade.modules.auth.utils.TokenUtil;
 import org.springblade.modules.finance.entity.Order;
-import org.springblade.modules.finance.entity.OrderConsign;
 import org.springblade.modules.finance.entity.OrderGrant;
 import org.springblade.modules.finance.pay.entity.AlipayProperties;
 import org.springblade.modules.finance.service.IOrderConsignService;
 import org.springblade.modules.finance.service.IOrderGrantService;
 import org.springblade.modules.finance.service.IOrderService;
-import org.springblade.modules.finance.vo.OrderConsignVO;
 import org.springblade.modules.finance.vo.OrderVO;
-import org.springblade.modules.finance.wrapper.OrderConsignWrapper;
 import org.springblade.modules.finance.wrapper.OrderWrapper;
 import org.springblade.modules.shopping.entity.Consign;
 import org.springblade.modules.shopping.service.IConsignService;
@@ -144,16 +142,17 @@ public class Api05Controller extends BladeController {
 				boolean flg = orderGrantService.thaw(orderGrant);
 				if (!flg){
 					log.info("授权授权信息修改失败");
+					throw new ServiceException("亲!请重新抢单");
 				}
 				//重新查询返回是否授权
 				response = orderService.consignGrant(query, request.getConsignConfigId(), request.getOrderNo());
 				//返回订单号
 				response.setOutTradeNo(outTradeNo);
-				R res = orderConsign(outTradeNo, request.getOrderNo());
-				if (res.isSuccess()){//是否发起统一收单
+				flg = orderConsign(outTradeNo, request.getOrderNo());
+				if (flg){//是否发起统一收单
 					return R.data(response);
 				}
-				log.info("已结订单");
+				throw new ServiceException("亲!请重新抢单");
 			}
 		}
 		//判断用户授权
@@ -168,7 +167,7 @@ public class Api05Controller extends BladeController {
 									  Query query) {
 		Order order = new Order();
 		order.setUserId(userId);
-		//order.setOrderType(1);//普通订单
+		order.setOrderType(1);//普通订单
 		if(!StringUtil.isEmpty(payFlag)){
 			if(payFlag != 0){
 				order.setPayFlag(payFlag); //订单状态
@@ -225,21 +224,22 @@ public class Api05Controller extends BladeController {
 	}
 
 	/**
-	 * 预授支付
+	 * 预支付统一收单
+	 *
 	 * @param outTradeNo 订单号
 	 * @param orderNo 授权
 	 * @return R
 	 */
-	public R orderConsign(String outTradeNo, String orderNo) {
+	public boolean orderConsign(String outTradeNo, String orderNo) {
 		//查询抢购订单数据
 		Order order = orderService.getOne(Wrappers.<Order>lambdaQuery().eq(Order::getOutTradeNo, outTradeNo));
 		if (ObjectUtil.isNull(order)){
-			return R.fail("请求参数错误!");
+			return false;
 		}
 		//通过授权号查询用户授权信息
 		OrderGrant orderGrant = orderGrantService.getOne(Wrappers.<OrderGrant>lambdaQuery().eq(OrderGrant::getOrderNo, orderNo));
 		if (ObjectUtil.isNull(orderGrant)) {
-			return R.fail("请求参数错误!");
+			return false;
 		}
 		//获取剩余预售授权数量
 		Integer nowNum = orderGrant.getNowNum();
@@ -267,6 +267,7 @@ public class Api05Controller extends BladeController {
 		request.setBizContent(data.toJSONString()); //业务参数
 		//APP支付
 		try {
+			//订单绑定授权号
 			Order update = new Order();
 			update.setId(order.getId());
 			update.setGrantNo(orderGrant.getAuthNo());
@@ -278,8 +279,8 @@ public class Api05Controller extends BladeController {
 			//证书使用 使用 certificateExecute
 			AlipayTradePayResponse response = client.certificateExecute(request);
 			if (response.isSuccess()){
-				orderService.payConsignSuccess(outTradeNo);
-				return R.data(response.getBody());
+				orderService.payConsignSuccess(order);
+				return true;
 			}else{
 				orderGrantService.remove(Wrappers.<OrderGrant>lambdaQuery()
 					.eq(OrderGrant::getId,orderGrant.getId())
@@ -289,7 +290,7 @@ public class Api05Controller extends BladeController {
 		} catch (AlipayApiException e) {
 			e.printStackTrace();
 		}
-		return R.fail("发起支付失败!");
+		return false;
 	}
 
 }

+ 12 - 0
src/main/java/org/springblade/modules/api/controller/TestController.java

@@ -204,6 +204,18 @@ public class TestController extends BladeController {
 		return R.success("");
 	}
 
+	@PostMapping("/test014")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "测试014-积分", notes = "进货扣除积分")
+	public R test013(@RequestParam(required = false) Double creditScore) {
+		double k = creditScore / 100; //可抢次数
+		int scoreCount = NumberUtil.roundDown(k, 2).intValue();
+		return R.data(scoreCount);
+	}
+
+
+
+
 	private SmsCode jheSms(String phone){
 		SmsCode smsCode = new SmsCode();
 		Map<String, String> params = SmsUtil.getValidateParams();

+ 2 - 2
src/main/java/org/springblade/modules/api/service/ITradeService.java

@@ -41,11 +41,11 @@ public interface ITradeService {
 
 	/**
 	 * 寄售用户
-	 *
+	 * 平台收取用户订单
 	 * @param consignId 用户ID
 	 * @return List
 	 */
-	List<Consign> consign(Long consignId);
+	boolean platformReceipt(Long consignId);
 
 	/**
 	 * 预授解冻

+ 2 - 6
src/main/java/org/springblade/modules/api/service/impl/ApiServiceImpl.java

@@ -108,10 +108,6 @@ public class ApiServiceImpl implements IApiService {
 
 	@Override
 	public UserAppVO getUserAppVo(Long userId) {
-		UserAppVO redisVo = bladeRedis.get(String.valueOf(userId));
-		if (redisVo != null){
-			return redisVo;
-		}
 		UserApp userApp = new UserApp();
 		UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, userId));
 		if (query == null){
@@ -119,7 +115,8 @@ public class ApiServiceImpl implements IApiService {
 		}
 		UserAppVO vo = UserWrapper.build().entityVo(query);
 		//团队人数
-		Integer teamNum = userApp.selectCount(Wrappers.<UserApp>lambdaQuery().like(UserApp::getParentPath, userId));
+		Integer teamNum = userApp.selectCount(Wrappers.<UserApp>lambdaQuery().like(UserApp::getParentPath, userId)
+			.ne(UserApp::getParentId,userId));
 		vo.setTeamNum (teamNum);
 		int count = userAddressService.count(Wrappers.<UserAddress>lambdaQuery().eq(UserAddress::getUserId,userId));
 		vo.setIsAddress(1);
@@ -135,7 +132,6 @@ public class ApiServiceImpl implements IApiService {
 			vo.setNegativeUrl(userCardInfo.getNegativeUrl());
 			vo.setPositiveUrl(userCardInfo.getPositiveUrl());
 		}
-		bladeRedis.setEx(String.valueOf(vo),vo, CacheBizConstant.CACHE_TIME);
 		return vo;
 	}
 

+ 18 - 4
src/main/java/org/springblade/modules/api/service/impl/TradeServiceImpl.java

@@ -17,25 +17,25 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.log.logger.BladeLogger;
-import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.modules.api.controller.AliPay01Controller;
 import org.springblade.modules.api.service.ITradeService;
 import org.springblade.modules.finance.entity.OrderConsign;
 import org.springblade.modules.finance.entity.OrderGrant;
-import org.springblade.modules.finance.entity.UserTrade;
 import org.springblade.modules.finance.pay.entity.AlipayProperties;
 import org.springblade.modules.finance.service.IOrderConsignService;
 import org.springblade.modules.finance.service.IOrderGrantService;
 import org.springblade.modules.finance.service.IOrderService;
 import org.springblade.modules.shopping.entity.Consign;
+import org.springblade.modules.shopping.service.IConsignService;
 import org.springblade.modules.system.entity.User;
 import org.springblade.modules.system.entity.UserApp;
 import org.springblade.modules.system.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -46,6 +46,9 @@ public class TradeServiceImpl implements ITradeService {
 	@Autowired
 	private IOrderService orderService;
 
+	@Autowired
+	private IConsignService consignService;
+
 	@Autowired
 	private IOrderConsignService orderConsignService;
 
@@ -158,8 +161,19 @@ public class TradeServiceImpl implements ITradeService {
 	}
 
 	@Override
-	public List<Consign> consign(Long consignId) {
-		return null;
+	public boolean platformReceipt(Long consignId) {
+		//查询未抢的单
+		List<Consign> list = consignService.list(Wrappers.<Consign>lambdaQuery()
+			.eq(Consign::getConsignConfigId, consignId)
+			.eq(Consign::getConsignType,2) //寄售
+			.eq(Consign::getIsDelivery,1)  //未交割
+			.eq(Consign::getConsignFor,2)  //订单
+		);
+		list.forEach(item -> {
+			item.setConsignState(2);//待付款
+		});
+		//更新为待付款, 变为已寄售(后台打钱)
+		return consignService.updateBatchById(list);
 	}
 
 	@Override

+ 7 - 7
src/main/java/org/springblade/modules/api/task/ConsignSchedulingTask.java

@@ -96,7 +96,7 @@ public class ConsignSchedulingTask implements SchedulingConfigurer {
 		log.info(TASK_NAME + "获取场次数据: " + consignConfig);
 		if (consignConfig != null){
 			ConsignConfig config = new ConsignConfig();
-			//加上增益时间
+			//场次开始时间和结束时间都加上增益时间
 			String startDate = DateUtil.format(consignConfig.getStartTime(), PATTERN_TIME);
 			String endDate = DateUtil.format(consignConfig.getEndTime(), PATTERN_TIME);
 			//是否取下一天
@@ -144,11 +144,11 @@ public class ConsignSchedulingTask implements SchedulingConfigurer {
 		List<Consign> list = consignService.list(Wrappers.<Consign>lambdaQuery()
 			.eq(Consign::getConsignFor,1) //后台
 			.eq(Consign::getIsSale, 2) //上线
-			.eq(Consign::getIsDelivery,1)
+			.eq(Consign::getIsDelivery,1) //是否交割
 			.eq(Consign::getConsignConfigId, configId)); //没有交割
 		Double ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T1));
 		if (list.size() > 0){
-			//通过场次Id更新时间等数据
+			//通过场次Id更新用户单时间等数据
 			Consign consign = list.get(0);
 			Double ratioPrice = NumberUtil.mul(consign.getConsignPrice(),ratio);
 			Double consignPrice = NumberUtil.add(consign.getConsignPrice(),ratioPrice);
@@ -156,7 +156,7 @@ public class ConsignSchedulingTask implements SchedulingConfigurer {
 			sign.setStartTime(startDate);
 			sign.setEndTime(endTime);
 			sign.setConsignPrice(consignPrice);
-			sign.setObtainPrice(consign.getConsignPrice());
+			//sign.setObtainPrice(consign.getConsignPrice()); //不能更新用户取得价
 			sign.setPremiumPrice(consignPrice);
 			sign.setConsignConfigId(configNowId);
 			consignService.update(sign, Wrappers.<Consign>lambdaQuery()
@@ -165,8 +165,8 @@ public class ConsignSchedulingTask implements SchedulingConfigurer {
 		}
 		List<Long> ids = new ArrayList<>();
 		List<Consign> batchList = new ArrayList<>();
+		//把原数据逻辑删除, 新增数据
 		for (Consign consin: list ) {
-			//通过场次Id更新时间等数据
 			Consign consign = list.get(0);
 			Consign sign = new Consign();
 			BeanUtil.copyProperties(consign,sign);
@@ -176,8 +176,8 @@ public class ConsignSchedulingTask implements SchedulingConfigurer {
 			Double ratioPrice = NumberUtil.mul(consign.getConsignPrice(),ratio);
 			Double consignPrice = NumberUtil.add(consign.getConsignPrice(),ratioPrice);
 			sign.setConsignPrice(consignPrice);
-			sign.setNowStock(sign.getTotalNum());
-			sign.setObtainPrice(consign.getConsignPrice());
+			sign.setNowStock(sign.getTotalNum()); //初始金额等于总金额
+			sign.setObtainPrice(consign.getObtainPrice());//进货价 == 取得价
 			sign.setPremiumPrice(consignPrice);
 			sign.setCreateTime(DateUtil.date());
 			sign.setConsignConfigId(configNowId);

+ 1 - 1
src/main/java/org/springblade/modules/finance/service/IOrderService.java

@@ -76,7 +76,7 @@ public interface IOrderService extends IService<Order> {
 	 * 2.如果是抢购而且是寄售类型consignType为寄售则添加寄售数据
 	 * @return boolean
 	 */
-	boolean payConsignSuccess(String outTradeNo);
+	boolean payConsignSuccess(Order order);
 
 	/**
 	 * 订单完成

+ 72 - 81
src/main/java/org/springblade/modules/finance/service/impl/OrderServiceImpl.java

@@ -50,6 +50,7 @@ import org.springblade.modules.platform.mapper.UserScoresMapper;
 import org.springblade.modules.platform.service.IUserTicketService;
 import org.springblade.modules.shopping.entity.*;
 import org.springblade.modules.shopping.mapper.*;
+import org.springblade.modules.shopping.wrapper.ConsignWrapper;
 import org.springblade.modules.system.entity.User;
 import org.springblade.modules.system.entity.UserApp;
 import org.springblade.modules.system.mapper.UserMapper;
@@ -236,9 +237,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@Transactional(rollbackFor = Exception.class)
 	public String consignOrderInsert(OrderConsignRandomRequest request, UserApp userApp, String tenantId) {
 		/************************************用户寄售单处理-开始**************************************/
-		//优先获取用户寄售单 todo
-		Consign consign = consignMapper.randomConsign(request.getConsignConfigId(),request.getUserId());
-		Boolean flag = true;
+		//优先获取用户寄售单
+		Consign consign = consignMapper.randomConsign(request.getConsignConfigId(), request.getUserId());
+		boolean flag = true;
 		//循环获取用户订单,判断当前订单是否已经抢到了,如果抢到了那么就换一单
 		while (flag){
 			//判断用户寄售单是否为空
@@ -259,28 +260,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		/************************************用户寄售单处理-结束**************************************/
 		/************************************平台单单处理-开始**************************************/
 		if(ObjectUtil.isNull(consign)){//当没有获取到用户寄售单时进入品台单获取流程
-			//获取平台单
-			flag = true;
-			while (flag){
-				//判断用户寄售单是否为空
-				if(ObjectUtil.isNotNull(consign)){
-					//通过寄售id获取redis是否为空
-					Object o = bladeRedis.get(String.valueOf(consign.getId()));
-					if(ObjectUtil.isNull(o)){//判断redis中是否有其他人在使用
-						//将当前订单号放入redis中,防止其他用户抢到同一单号
-						bladeRedis.setEx(String.valueOf(consign.getId()), Integer.parseInt("1"), 30L);
-						flag = false;//跳出循环,使用当前单号来进行订单创建
-					}else{//如果存在则重新获取订单进行创建
-						//获取平淡订单 todo
-						consign = consignMapper.randomConsign(request.getConsignConfigId(),request.getUserId());
-					}
-				}else{//如果用户寄售单为空那么跳出当前循环重新获取平台单
-					throw new ServiceException("亲,好物已抢完欢迎再来!");
-				}
+			consign = consignMapper.platformConsign(request.getConsignConfigId(), request.getConsignId());
+			//数据量判断
+			if (Objects.isNull(consign)){
+				throw new ServiceException("亲,好物已抢完欢迎再来!");
 			}
 		}
 		/************************************平台单单处理-结束**************************************/
-
 		//扣除用户绿色积分 添加明细
 		//寄售金额 * 3% =  绿色积分的
 		Double score = NumberUtil.mul(consign.getConsignPrice(), Double.valueOf(0.03));
@@ -291,12 +277,36 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		}
 		//查询商品信息
 		Goods goods = goodsMapper.selectById(consign.getGoodsId());
-		if (goods == null){
+		if (Objects.isNull(goods)){
 			throw new ServiceException("商品不存在!");
 		}
 		User user = userMapper.selectById(request.getUserId());
-		//生成订单号
 		String outTradeNo = CommonUtil.genTimeID();
+		boolean flg = createOrder(userApp, user,request,consign,tenantId,goods,score,ratioTicket,outTradeNo);
+		if (flg){
+			return outTradeNo;
+		}
+		return "";
+	}
+
+	/**
+	 * 1、创建订单
+	 * 2、创建订单详情
+	 * 3、创建寄售订单
+	 * 4、修改用户积分
+	 * 5、添加积分明细
+	 * @return boolean
+	 */
+	private boolean createOrder(UserApp userApp,
+								User user,
+								OrderConsignRandomRequest request,
+								Consign consign,
+								String tenantId,
+								Goods goods,
+								Double score,
+								Double ratioTicket,
+								String outTradeNo){
+		//创建订单号
 		Order order = new Order();
 		order.setTenantId(tenantId);
 		if(user != null){
@@ -305,7 +315,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		order.setOutTradeNo(outTradeNo);
 		order.setUserId(request.getUserId());
 		order.setOrderType(3);//寄售订单
-		order.setPayFlag(1); //待付款
+		order.setPayFlag(4); //寄售订单 变为已完成
 		order.setPayFee(consign.getConsignPrice());
 		order.setTotalFee(consign.getConsignPrice());
 		order.setUserAddress(request.getUserAddress());
@@ -328,33 +338,39 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			if (!flg){
 				throw new ServiceException("操作失败!");
 			}
-			//添加寄售订单数据
+			//创建寄售订单数据
 			OrderConsign orderConsign = new OrderConsign();
 			orderConsign.setTotalNum(1);//默认寄售数量为1
-			//判断来源为寄售
+			/**
+			 * 抢到用户单
+			 * 1、更新用户单状态
+			 * 2、创建新的用户单
+			 */
+			Consign updateConsign = new Consign();
 			if(consign.getConsignFor() == 2){
-				//更新寄售状态
-				Consign updateConsign = new Consign();
 				updateConsign.setId(consign.getId());
-				updateConsign.setConsignState(2); //
+				updateConsign.setConsignState(2); //待付款
 				updateConsign.setConsignType(request.getConsignType());//修改寄售类型(寄售方式)
 				updateConsign.setNowStock(0); //当前库存为0
-				int c =  consignMapper.updateById(updateConsign);
-				if (c != 1){
-					throw new ServiceException("操作失败!");
-				}
 			}else if(consign.getConsignFor() == 1){
-				//来源为后台
-				//todo 数量为1是减少库存数客户到达一定的数修改寄售状态为已寄售
-				//寄售状态为还是寄售中
-				Consign updateConsign = new Consign();
+				/**
+				 * 抢到平台单
+				 * 	1、变为待确认状态
+				 * 	2、剩余数量为大于1时 寄售状态为还是寄售中 等于1是为已完成
+				 * 	3、传新的用户单
+				 */
 				updateConsign.setId(consign.getId());
 				updateConsign.setConsignType(request.getConsignType());
-				updateConsign.setNowStock(consign.getNowStock() - 1);
-				int c =  consignMapper.updateById(updateConsign);
-				if (c != 1){
-					throw new ServiceException("操作失败!");
+				if (consign.getNowStock() == 1){
+					updateConsign.setNowStock(0);
+				}else{
+					updateConsign.setNowStock(consign.getNowStock() - 1);
 				}
+				orderConsign.setIsConfirm(5);
+			}
+			int c =  consignMapper.updateById(updateConsign);
+			if (c != 1){
+				throw new ServiceException("亲!请重新抢单");
 			}
 			orderConsign.setConsignId(consign.getId()); //寄售ID
 			orderConsign.setOutTradeNo(outTradeNo);
@@ -376,6 +392,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			if(j != 1){
 				throw new ServiceException("抢单失败!");
 			}
+			//更新用户绿色积分并添加明细
 			if(user != null){
 				Double ticket = NumberUtil.sub(userApp.getTicket() - score).doubleValue();
 				//用户减去绿色积分(酒票)
@@ -419,9 +436,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			userAppUpdate.setId(userApp.getId());
 			userAppUpdate.setCreditScore(userApp.getCreditScore() + consignScore);
 			userAppUpdate.updateById();
-			return outTradeNo;
 		}
-		return "";
+		return true;
 	}
 
 	@Override
@@ -532,14 +548,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	}
 
 	@Override
-	public boolean payConsignSuccess(String outTradeNo) {
-		Order queryOrder = baseMapper.selectOne(Wrappers.<Order>lambdaQuery().eq(Order::getOutTradeNo, outTradeNo));
-		log.info("订单数据:" + queryOrder);
-		if (queryOrder == null){
-			logger.error("订单异常", "无法获取订单数据!订单号:" + outTradeNo);
-			return false;
-		}
-		log.info("订单数据金额:" + queryOrder.getPayFee());
+	public boolean payConsignSuccess(Order queryOrder) {
+		String outTradeNo = queryOrder.getOutTradeNo();
+		//寄售订单
 		if(queryOrder.getOrderType() == 3){
 			//选择寄售方式为寄售则生成新的寄售
 			OrderConsign query = orderConsignMapper.selectOne(Wrappers.<OrderConsign>lambdaQuery().eq(OrderConsign::getOutTradeNo, outTradeNo));
@@ -547,22 +558,16 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				logger.error("订单异常", "无订单数据!订单号:" + outTradeNo);
 				return false;
 			}
+			//查询所抢的寄售订单
 			Consign queryConsign = consignMapper.selectById(query.getConsignId());
-			if(queryConsign == null){ //后台的数据为0或者寄售的
+			if(Objects.isNull(queryConsign)){ //后台的数据为0或者寄售的
 				logger.error("订单异常", "寄售无数据!订单号:" + outTradeNo);
 				return false;
 			}
-			//获取批次配置时间
+			//新建寄售单
 			ConsignConfig consignConfig = consignConfigMapper.selectById(queryConsign.getConsignConfigId());
-			//当前时间 + 寄售天数
-			Date date = cn.hutool.core.date.DateUtil.offsetDay(DateUtil.now(), 1);
-			String ymd = DateUtil.format(date, DateUtil.PATTERN_DATE);
-			String st = DateUtil.format(consignConfig.getStartTime(), DateUtil.PATTERN_TIME);
-			String et = DateUtil.format(consignConfig.getEndTime(), DateUtil.PATTERN_TIME);
-			String startTime = ymd + " " + st;
-			String endTime = ymd + " " + et;
-			Date startDate = DateUtil.parse(startTime, DateUtil.PATTERN_DATETIME);
-			Date endDate = DateUtil.parse(endTime, DateUtil.PATTERN_DATETIME);
+			Date startDate = cn.hutool.core.date.DateUtil.offsetDay(consignConfig.getStartTime(), 1);
+			Date endDate = cn.hutool.core.date.DateUtil.offsetDay(consignConfig.getEndTime(), 1);
 			Consign consign = new Consign();
 			consign.setOrderId(queryOrder.getId()); //保存来源的订单ID
 			consign.setConsignFor(2);//寄售订单
@@ -578,40 +583,26 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			consign.setGoodsId(query.getGoodsId());
 			consign.setGoodsName(query.getGoodsName());
 			consign.setTitle(query.getGoodsName());
-			Double ratio = 0d;
-			if(query.getConsignDays() == 2){
-				ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T2));
-			}else if(query.getConsignDays() == 3){
-				ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T3));
-			}else {
-				ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T1));
-			}
-
-			Double ratioPrice = NumberUtil.mul(query.getConsignPrice(), ratio);
-			Double obtainPrice = NumberUtil.add(query.getConsignPrice(), ratioPrice);
-			log.info("寄售订单数据金额 ratioPrice:" + ratioPrice);
-			log.info("寄售订单数据金额 obtainPrice:" + obtainPrice);
+			Double consignPrice = ConsignWrapper.build().consignPrice(query.getConsignPrice(), query.getConsignDays());
 			consign.setObtainPrice(query.getConsignPrice()); //取得价为抢购别人的价格
-			consign.setConsignPrice(obtainPrice);//抢购价
+			consign.setConsignPrice(consignPrice);//抢购价
 			consign.setStartTime(startDate);
 			consign.setEndTime(endDate);
 			consign.setSaleDays(0);
-			log.info("寄售订单数据金额 consign:" + consign);
 			int j = consignMapper.insert(consign);
 			if(j != 1){
 				logger.error("订单异常", "订单变为寄售失败!订单号:" + outTradeNo);
-				throw new ServiceException("订单变为寄售失败");
+				throw new ServiceException("亲!请重新抢单");
 			}
 			//更新寄售状态为已售出
 			if(queryConsign.getNowStock() == 0){
 				Consign updateConsign = new Consign();
 				updateConsign.setId(query.getConsignId());
 				updateConsign.setConsignState(3);//已售出
-				updateConsign.setPremiumPrice(obtainPrice);//溢售价 抢购人的取得价
 				int k =	consignMapper.updateById(updateConsign);
 				if(k != 1){
 					logger.error("订单异常", "更新寄售状态!订单号:" + outTradeNo);
-					throw new ServiceException("更新寄售状态失败");
+					throw new ServiceException("亲!请重新抢单");
 				}
 			}
 		}

+ 1 - 1
src/main/java/org/springblade/modules/platform/mapper/UserRecomMapper.xml

@@ -46,7 +46,7 @@
             and a.parent_id = #{parentId}
         </if>
         <if test="parentPath!=null and parentPath != ''">
-            and a.parent_path LIKE concat(concat('%', #{parentPath}),'%')
+            and a.parent_path LIKE concat(concat('%', #{parentPath}),'%') and a.parent_id != #{parentId}
         </if>
     </select>
 

+ 2 - 9
src/main/java/org/springblade/modules/shopping/controller/ConsignController.java

@@ -149,15 +149,8 @@ public class ConsignController extends BladeController {
 		if (consign.getConsignConfigId() != null){
 			ConsignConfig consignConfig = consignConfigService.getById(consign.getConsignConfigId());
 			if (consignConfig != null){
-				String ymd = DateUtil.format(DateUtil.now(), DateUtil.PATTERN_DATE);
-				String st = DateUtil.format(consignConfig.getStartTime(), DateUtil.PATTERN_TIME);
-				String et = DateUtil.format(consignConfig.getEndTime(), DateUtil.PATTERN_TIME);
-				String startTime = ymd + " " + st;
-				String endTime = ymd + " " + et;
-				Date startDate = DateUtil.parse(startTime, DateUtil.PATTERN_DATETIME);
-				Date endDate = DateUtil.parse(endTime, DateUtil.PATTERN_DATETIME);
-				consign.setStartTime(startDate);
-				consign.setEndTime(endDate);
+				consign.setStartTime(consignConfig.getStartTime());
+				consign.setEndTime(consignConfig.getEndTime());
 			}
 		}
 		return R.status(consignService.updateById(consign));

+ 21 - 1
src/main/java/org/springblade/modules/shopping/mapper/ConsignMapper.java

@@ -40,10 +40,30 @@ public interface ConsignMapper extends BaseMapper<Consign> {
 	 */
 	List<ConsignVO> selectConsignPage(IPage page, ConsignVO consign);
 
+
+
+	/**
+	 * 查询是否有单可抢
+	 * @param consignConfigId 批次ID
+	 * @param userId 用户ID
+	 * @return Consign
+	 */
+	Consign queryConsign(@Param("consignConfigId") Long consignConfigId, @Param("userId") Long userId);
+
 	/**
-	 * 获取随机数
+	 * 获取用户单
 	 * @param consignConfigId 批次ID
+	 * @param userId 用户ID
 	 * @return Consign
 	 */
 	Consign randomConsign(@Param("consignConfigId") Long consignConfigId, @Param("userId") Long userId);
+
+
+	/**
+	 * 获取平台单
+	 * @param consignConfigId 批次ID
+	 * @param consignId 寄售ID
+	 * @return Consign
+	 */
+	Consign platformConsign(@Param("consignConfigId") Long consignConfigId, @Param("consignId") Long consignId);
 }

+ 38 - 2
src/main/java/org/springblade/modules/shopping/mapper/ConsignMapper.xml

@@ -22,6 +22,23 @@
         SELECT * FROM t_consign WHERE is_deleted = 0
     </select>
 
+    <!--查询是否有单可抢-->
+    <select id="queryConsign" resultMap="consignResultMap">
+        SELECT
+        *
+        FROM
+        t_consign t
+        WHERE
+        consign_config_id = #{consignConfigId}
+        AND t.now_stock > 0
+        AND is_sale = 2
+        AND consign_state = 1
+        AND is_deleted = 0
+        AND consign_user_id != #{userId}
+        AND TO_DAYS(now()) BETWEEN TO_DAYS(start_time) and TO_DAYS(end_time)
+        LIMIT 1
+    </select>
+
     <!--抢购  AND TO_DAYS(now()) BETWEEN TO_DAYS(start_time) and TO_DAYS(end_time)-->
     <select id="randomConsign" resultMap="consignResultMap">
         SELECT
@@ -34,12 +51,31 @@
         AND is_sale = 2
         AND consign_state = 1
         AND is_deleted = 0
+        AND consign_for = 2
         AND consign_user_id != #{userId}
         AND TO_DAYS(now()) BETWEEN TO_DAYS(start_time) and TO_DAYS(end_time)
         AND t.id >= (
-        RAND() * (SELECT max(id) FROM t_consign)
+            RAND() * (SELECT min(id) FROM t_consign)
         )
-        order by t.consign_for desc
+        LIMIT 1
+    </select>
+
+
+    <!--获取平台单-->
+    <select id="platformConsign" resultMap="consignResultMap">
+        SELECT
+        *
+        FROM
+        t_consign t
+        WHERE
+        consign_config_id = #{consignConfigId}
+        AND t.now_stock > 0
+        AND is_sale = 2
+        AND consign_state = 1
+        AND consign_for = 1
+        AND is_deleted = 0
+        AND TO_DAYS(now()) BETWEEN TO_DAYS(start_time) and TO_DAYS(end_time)
+        AND t.id = #{consignId}
         LIMIT 1
     </select>
 

+ 2 - 0
src/main/java/org/springblade/modules/shopping/service/IConsignService.java

@@ -50,6 +50,8 @@ public interface IConsignService extends IService<Consign> {
 	List<ConsignVO> selectConsignList(Long consignConfigId);
 
 
+	Consign queryConsign(Long consignConfigId, Long userId);
+
 	/**
 	 * 获取随机数
 	 * @param consignConfigId 批次ID

+ 5 - 0
src/main/java/org/springblade/modules/shopping/service/impl/ConsignServiceImpl.java

@@ -57,6 +57,11 @@ public class ConsignServiceImpl extends ServiceImpl<ConsignMapper, Consign> impl
 		return ConsignWrapper.build().listVO(list);
 	}
 
+	@Override
+	public Consign queryConsign(Long consignConfigId, Long userId) {
+		return baseMapper.queryConsign(consignConfigId,userId);
+	}
+
 	@Override
 	public Consign randomConsign(Long consignConfigId, Long userId) {
 		return baseMapper.randomConsign(consignConfigId,userId);

+ 23 - 0
src/main/java/org/springblade/modules/shopping/wrapper/ConsignWrapper.java

@@ -16,9 +16,12 @@
  */
 package org.springblade.modules.shopping.wrapper;
 
+import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.springblade.common.cache.DictBizCache;
 import org.springblade.common.cache.DictCache;
+import org.springblade.common.cache.ParamCache;
+import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.enums.DictBizEnum;
 import org.springblade.common.enums.DictEnum;
 import org.springblade.core.mp.support.BaseEntityWrapper;
@@ -86,4 +89,24 @@ public class ConsignWrapper extends BaseEntityWrapper<Consign, ConsignVO> {
 		return vo;
 	}
 
+	/**
+	 * 寄售溢价计算
+	 *
+	 * @param price 金额
+	 * @param days 天数
+	 * @return Double
+	 */
+	public Double consignPrice(Double price, Integer days){
+		Double ratio = 0d;
+		if(2 == days){
+			ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T2));
+		}else if(3 == days){
+			ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T3));
+		}else {
+			ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T1));
+		}
+		Double ratioPrice = NumberUtil.mul(price, ratio);
+		return NumberUtil.add(price, ratioPrice);
+	}
+
 }