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

修改支付和抢购功能等

VEAR 2 лет назад
Родитель
Сommit
2823c42551

+ 5 - 0
src/main/java/org/springblade/common/constant/CommonConstant.java

@@ -149,4 +149,9 @@ public interface CommonConstant {
 	 */
 	String DEFAULT_CONDIGN_TURNOUT = "default:consign:turnout";
 
+	/**
+	 * 最大可抢次数
+	 */
+	String DEFAULT_CONDIGN_COUNT = "default:consign:count";
+
 }

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

@@ -18,6 +18,7 @@ import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.common.cache.ParamCache;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.NotifyUtils;
@@ -207,7 +208,17 @@ public class AliPay01Controller {
 							@ApiParam(value = "批次ID", required = true) @RequestParam Long batNo,
 							@ApiParam(value = "金额", required = true) @RequestParam Double price,
 							@ApiParam(value = "数量", required = true) @RequestParam Integer num) throws AlipayApiException {
-
+		UserApp userApp = new UserApp();
+		UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId,userId));
+		double k = (double)query.getCreditScore() / 100;
+		int scoreCount = NumberUtil.roundDown(k, 2).intValue();
+		Integer consignCount = Integer.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_COUNT));
+		if (scoreCount > consignCount){
+			scoreCount = consignCount;
+		}
+		if (scoreCount <= num){
+			return R.fail("预授数量不能大于单场可抢次数!");
+		}
 		//1.通过批次号和用户id查询是有在预授权的数据
 		JSONObject data = new JSONObject();
 		String orderNo = CommonUtil.genTimeID();
@@ -509,28 +520,12 @@ public class AliPay01Controller {
 				return "error";
 			}
 			String body = request.getParameter("body");
-			log.info(errMsg + "-body" + body);
+			log.info(errMsg + "-body" + body);
 			OrderGrant query = orderGrantService.getOne(Wrappers.<OrderGrant>lambdaQuery().eq(OrderGrant::getAuthNo, body));
 			if (query == null){
 				log.info(errMsg + "-预授权无数据");
 				return "error";
 			}
-			log.info(errMsg, "修改授权信息 == " + query);
-			OrderGrant grantUpdate = new OrderGrant();
-			grantUpdate.setId(query.getId());
-			if (query.getNowNum() == 1){
-				grantUpdate.setStatus(2);//解冻
-				grantUpdate.setNowNum(0);
-				grantUpdate.setUnfreezeTime(DateUtil.now());//解冻时间
-			}else{
-				//状态不变
-				grantUpdate.setNowNum(query.getNowNum() - 1);//减少数量
-			}
-			boolean flg = orderGrantService.updateById(grantUpdate);
-			if (!flg){
-				log.info(errMsg + "-修改失败");
-				return "error";
-			}
 			//寄售来源为后台 不打款 订单的打款 2是订单
 			if (consign.getConsignFor() == 2){
 				//获取寄售人信息

+ 20 - 7
src/main/java/org/springblade/modules/api/controller/Api03Controller.java

@@ -35,7 +35,6 @@ import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.modules.api.service.IApiService;
 import org.springblade.modules.finance.entity.Order;
 import org.springblade.modules.finance.entity.OrderGrant;
@@ -142,11 +141,18 @@ public class Api03Controller extends BladeController {
 			consignVO.setGoodsLabel(vo.getGoodsLabel());
 			consignVO.setTextImg(vo.getTextImg());
 		}
+		/**
+		 * 1 去 useID 和 场次id  ----(预授权表)(有数据  或不有.)
+		 *   1.1  有。。。该预授单的状态---==1---加  订单表--是否有 该用户,该场次-的订单-4-(完成)--数量(剩余可抢)》1
+		 *   4
+		 */
 		Kv kv = consignGrant(userId, consignVO.getConsignConfigId());
 		Integer isGrant = kv.getInt("isGrant");
 		consignVO.setIsGrant(isGrant);
 		consignVO.setOrderNo(kv.getStr("orderNo"));
-		if ( 3 == isGrant){
+		consignVO.setScoreCount(kv.getInt("scoreCount"));
+		consignVO.setEnableCount(kv.getInt("enableCount"));
+		if (3 == isGrant){
 			return R.data(consignVO,"您本场抢购次数已用完!");
 		}
 		return R.data(consignVO);
@@ -154,11 +160,9 @@ public class Api03Controller extends BladeController {
 
 	/**
 	 * 查询用户预授权数据
-	 *
 	 * isGrant
 	 * 	为2 已授权 需要返回授权订单号
 	 *  为1 未授权 返回的为空
-	 *
 	 * @param userId 用户
 	 * @param consignConfigId 场次
 	 * @return Kv
@@ -170,15 +174,22 @@ public class Api03Controller extends BladeController {
 		UserApp userApp = new UserApp();
 		UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId,userId));
 		log.info("用户【" + userId + "】基本数据:" + query.toString());
+		//应该查询所有授权的数包含:已授权 + 解冻 (应该是当天 + 场次 + 用户)
 		List<OrderGrant> selectGrantList = orderGrantService.selectGrant(consignConfigId, userId);
 		log.info("用户【" + userId + "】授权数据:" + selectGrantList);
 		log.info("用户【" + userId + "】userApp.getIsAuth() :" + userApp.getIsAuth());
 		log.info("用户【" + userId + "】为普通用户,判断信誉积分数据");
 		double k = (double)query.getCreditScore() / 100;
 		Integer scoreCount = NumberUtil.roundDown(k, 2).intValue();
+		Integer consignCount = Integer.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_COUNT));
+		if (scoreCount > consignCount){
+			scoreCount = consignCount;
+		}
 		log.info("用户【" + userId + "】为信誉分可抢次数为:" + scoreCount);
 		int enableCount = scoreCount - count; //信誉分可抢次数 - 已抢次数 = 可抢次数
 		log.info("用户【" + userId + "】为实际可抢次数为:" + enableCount);
+		kv.put("scoreCount", scoreCount);
+		kv.put("enableCount", enableCount);
 		if (enableCount <= 0){
 			kv.put("isGrant", 3);
 			kv.put("orderNo", "");
@@ -188,19 +199,21 @@ public class Api03Controller extends BladeController {
 		//授权订单总条数
 		int grantCount = 0;
 		List<String> authNos = new ArrayList<>();
-		//查已授权的数据
+		//授权订单号
 		String orderNo = "";
 		for (OrderGrant orderGrant: selectGrantList) {
 			grantCount = grantCount + orderGrant.getNum();
 			authNos.add(orderGrant.getAuthNo());
+			//获取剩余的授权数量
 			if (orderGrant.getNowNum() > 0){
 				orderNo = orderGrant.getOrderNo();
 			}
 		}
+		log.info("查询用户【" + userId + "】在场次【" + consignConfigId + "】是否有已授权成功的授权总数量:" + grantCount);
 		if (selectGrantList.size() > 0){
+			//有已授权的数据 查询关联的已授权的订单数
 			List<Order> list = orderService.list(Wrappers.<Order>lambdaQuery().in(Order::getGrantNo, authNos));
-			log.info("查询用户【" + userId + "】在场次【" + consignConfigId + "】是否有已授权成功的订单数据条数:" + list.size());
-			log.info("查询用户【" + userId + "】在场次【" + consignConfigId + "】是否有已授权成功的授权数量:" + grantCount);
+			log.info("查询用户【" + userId + "】在场次【" + consignConfigId + "】成功是否有已授权的订单数据条数:" + list.size());
 			//该授权号订单条数 小于 授权总数量 则为已授权
 			if (list.size() < grantCount){
 				kv.put("isGrant", 2);

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

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.api.controller;
 
+import cn.hutool.core.util.PhoneUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@@ -208,6 +209,9 @@ public class Api04Controller extends BladeController {
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "添加用户地址", notes = "添加用户地址")
 	public R userAddressSave(@Valid @RequestBody AddressSaveRequest request) {
+		if(StringUtil.isNotBlank(request.getPhone()) && !PhoneUtil.isMobile(request.getPhone())){
+			return R.fail("请输入正确的手机号");
+		}
 		if(Objects.isNull(request.getUserId())){
 			return R.fail("请求参数错误!");
 		}
@@ -237,6 +241,9 @@ public class Api04Controller extends BladeController {
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "修改用户收货地址", notes = "修改用户地址")
 	public R userAddressUpdate(@Valid @RequestBody AddressUpdateRequest request) {
+		/*if(StringUtil.isNotBlank(request.getPhone()) && !PhoneUtil.isMobile(request.getPhone())){
+			return R.fail("请输入正确的手机号");
+		}*/
 		UserAddress userAddress = Objects.requireNonNull(BeanUtil.copy(request, UserAddress.class));
 		userAddress.setUpdateTime(DateUtil.now());
 		if (userAddress.getDefaultState() == 2){

+ 119 - 2
src/main/java/org/springblade/modules/api/controller/Api05Controller.java

@@ -16,7 +16,11 @@
  */
 package org.springblade.modules.api.controller;
 
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
+import com.alipay.api.request.AlipayTradePayRequest;
+import com.alipay.api.response.AlipayTradePayResponse;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@@ -24,20 +28,29 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+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;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.core.tool.utils.WebUtil;
 import org.springblade.modules.api.request.OrderCommonSaveRequest;
 import org.springblade.modules.api.request.OrderConsignRandomRequest;
 import org.springblade.modules.api.request.OrderTakeRequest;
 import org.springblade.modules.api.response.ConsignResponse;
+import org.springblade.modules.api.service.IApiService;
+import org.springblade.modules.api.service.impl.ApiServiceImpl;
 import org.springblade.modules.auth.utils.TokenUtil;
 import org.springblade.modules.finance.entity.Order;
+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.OrderVO;
 import org.springblade.modules.finance.wrapper.OrderWrapper;
@@ -47,6 +60,7 @@ import org.springblade.modules.shopping.vo.ConsignVO;
 import org.springblade.modules.shopping.wrapper.ConsignWrapper;
 import org.springblade.modules.system.entity.UserApp;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -64,11 +78,19 @@ import java.util.List;
 @Api(value = "订单模块", tags = "05.订单模块")
 public class Api05Controller extends BladeController {
 
+	private static final Logger log = LoggerFactory.getLogger(ApiServiceImpl.class);
+
 	private final IOrderService orderService;
 	private final IConsignService consignService;
+	private final IOrderGrantService orderGrantService;
+	//抢购
+	private static final String TRADE_URL = "/api/v1/aliPay/sdk/trade_notify_url";
 	@Autowired
 	private AlipayClient client;//支付宝请求sdk客户端
 
+	@Autowired
+	private AlipayProperties properties;//支付宝sdk配置
+
 	@PostMapping("/finance/order-commonSave")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "购买商品", notes = "传入用户ID")
@@ -89,6 +111,7 @@ public class Api05Controller extends BladeController {
 	@PostMapping("/finance/order-consignRandom")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "寄售抢购", notes = "抢购订单")
+	@Transactional(rollbackFor = Exception.class)
 	public R consignRandom(@RequestBody OrderConsignRandomRequest request) {
 		String tenantId = WebUtil.getRequest().getHeader(TokenUtil.TENANT_HEADER_KEY);
 		UserApp userApp = new UserApp();
@@ -102,14 +125,42 @@ public class Api05Controller extends BladeController {
 		if (query.getCreditScore() < 100){
 			return R.fail("您的信誉分不够");
 		}
+		if (StringUtil.isEmpty(query.getAlipayUserId())) {
+			return R.fail("请绑定支付宝打款账号");
+		}
+		//判断用户授权
 		ConsignResponse response = orderService.consignGrant(query, request.getConsignConfigId(), request.getOrderNo());
-		if (response.getStatus() == 2){ //已授权则生成订单
+		if (response.getStatus() == 2){
+			//已授权则生成订单
 			String outTradeNo = orderService.consignOrderInsert(request, tenantId);
 			if (!StringUtil.isEmpty(outTradeNo)){
+				OrderGrant orderGrant = orderGrantService.getOne(Wrappers.<OrderGrant>lambdaQuery().eq(OrderGrant::getOrderNo, request.getOrderNo()));
+				OrderGrant grantUpdate = new OrderGrant();
+				grantUpdate.setId(orderGrant.getId());
+				if (orderGrant.getNowNum() == 1){
+					grantUpdate.setStatus(2);//解冻
+					grantUpdate.setNowNum(0);
+					grantUpdate.setUnfreezeTime(DateUtil.now());//解冻时间
+				}else{
+					//状态不变
+					grantUpdate.setNowNum(orderGrant.getNowNum() - 1);//减少数量
+				}
+				boolean flg = orderGrantService.updateById(grantUpdate);
+				if (!flg){
+					log.info("修改失败");
+				}
+				//重新查询返回是否授权
+				response = orderService.consignGrant(query, request.getConsignConfigId(), request.getOrderNo());
+				//返回订单号
 				response.setOutTradeNo(outTradeNo);
-				return R.data(response);
+				R res = orderConsign(outTradeNo, request.getOrderNo());
+				if (res.isSuccess()){//是否发起统一收单
+					return R.data(response);
+				}
+				log.info("已结订单");
 			}
 		}
+		//判断用户授权
 		return R.data(response);
 	}
 
@@ -175,4 +226,70 @@ public class Api05Controller extends BladeController {
 		return R.status(orderService.orderEnd(orderId,userId));
 	}
 
+
+	/**
+	 * 预授支付
+	 *
+	 * @param outTradeNo 订单号
+	 * @param orderNo 授权
+	 * @return
+	 */
+	public R orderConsign(String outTradeNo, String orderNo) {
+		Order order = orderService.getOne(Wrappers.<Order>lambdaQuery().eq(Order::getOutTradeNo, outTradeNo));
+		if (order == null){
+			return R.fail("请求参数错误!");
+		}
+		OrderGrant orderGrant = orderGrantService.getOne(Wrappers.<OrderGrant>lambdaQuery().eq(OrderGrant::getOrderNo, orderNo));
+		if (orderGrant == null) {
+			return R.fail("请求参数错误!");
+		}
+		//获取数量
+		Integer nowNum = orderGrant.getNowNum();
+		UserApp userApp = new UserApp();
+		UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId, orderGrant.getUserId()));
+		JSONObject data = new JSONObject();
+		data.put("out_trade_no", outTradeNo);
+		data.put("total_amount", orderGrant.getPrice());
+		data.put("subject", "中宏酒业");
+		data.put("product_code", "PRE_AUTH_ONLINE");
+		data.put("auth_no", orderGrant.getAuthNo());
+		data.put("body", orderGrant.getAuthNo());
+		if (nowNum == 1){
+			data.put("auth_confirm_mode", "COMPLETE"); //解冻
+		}else{
+			data.put("auth_confirm_mode", "NOT_COMPLETE");//不解冻
+		}
+		data.put("seller_id", properties.getPayeeUserId()); //收款方
+		data.put("buyer_id", query.getAlipayUserId()); //买家ID //2088012801069195
+		//APP支付
+		AlipayTradePayRequest request = new AlipayTradePayRequest();
+		request.setNotifyUrl(properties.getDomain() + TRADE_URL); //异步通知地址
+		request.setBizContent(data.toJSONString()); //业务参数
+		//APP支付
+		try {
+			Order update = new Order();
+			update.setId(order.getId());
+			update.setGrantNo(orderGrant.getAuthNo());
+			boolean flg = orderService.updateById(update);
+			if (!flg){
+				log.info("订单绑定失败 + update.toString()");
+			}
+
+			//普通模式 使用 execute
+			//证书使用 使用 certificateExecute
+			AlipayTradePayResponse response = client.certificateExecute(request);
+			if (response.isSuccess()){
+				return R.data(response.getBody());
+			}else{
+				orderGrantService.remove(Wrappers.<OrderGrant>lambdaQuery()
+					.eq(OrderGrant::getId,orderGrant.getId())
+					.eq(OrderGrant::getStatus, 0));
+				log.info("订单绑定失败 + 删除预授权数据");
+			}
+		} catch (AlipayApiException e) {
+			e.printStackTrace();
+		}
+		return R.fail("发起支付失败!");
+	}
+
 }

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

@@ -39,6 +39,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.modules.finance.service.IOrderService;
 import org.springblade.modules.resource.utils.SmsUtil;
+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;
@@ -66,6 +67,7 @@ public class TestController extends BladeController {
 
 	private final IOrderService orderService;
 	private final IUserService userService;
+	private final IConsignService consignService;
 	private final BladeRedis bladeRedis;
 	@Autowired
 	private BladeLogger logger;
@@ -192,6 +194,15 @@ public class TestController extends BladeController {
 		return R.data(userApp);
 	}
 
+	@PostMapping("/test013")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "测试013-进货扣除积分", notes = "进货扣除积分")
+	public R test013(@RequestParam(required = false) String outNo,
+					 @RequestParam(required = false) String payCode) {
+		orderService.payCommonSuccess(outNo, payCode);
+		return R.success("");
+	}
+
 	private SmsCode jheSms(String phone){
 		SmsCode smsCode = new SmsCode();
 		Map<String, String> params = SmsUtil.getValidateParams();

+ 1 - 0
src/main/java/org/springblade/modules/api/service/IApiService.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.api.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.modules.shopping.vo.SpecItemsVO;
 import org.springblade.modules.system.vo.UserAppVO;
 

+ 22 - 0
src/main/java/org/springblade/modules/api/service/impl/ApiServiceImpl.java

@@ -22,6 +22,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.springblade.common.constant.CacheBizConstant;
 import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.modules.api.service.IApiService;
+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.platform.entity.UserAddress;
 import org.springblade.modules.platform.entity.UserCardInfo;
 import org.springblade.modules.platform.service.IUserAddressService;
@@ -30,6 +33,7 @@ import org.springblade.modules.resource.builder.oss.OssBuilder;
 import org.springblade.modules.resource.service.IAttachService;
 import org.springblade.modules.shopping.entity.GoodsSpecs;
 import org.springblade.modules.shopping.entity.SpecItems;
+import org.springblade.modules.shopping.service.IConsignService;
 import org.springblade.modules.shopping.service.IGoodsSpecsService;
 import org.springblade.modules.shopping.service.ISpecItemsService;
 import org.springblade.modules.shopping.vo.SpecItemsVO;
@@ -52,6 +56,8 @@ import java.util.List;
 @Service
 public class ApiServiceImpl implements IApiService {
 
+
+
 	@Autowired
 	private OssBuilder ossBuilder;
 
@@ -70,9 +76,23 @@ public class ApiServiceImpl implements IApiService {
 	@Autowired
 	private IUserCardInfoService userCardInfoService;
 
+	@Autowired
+	private IOrderService orderService;
+
+	@Autowired
+	private IOrderGrantService orderGrantService;
+
+	@Autowired
+	private IOrderConsignService orderConsignService;
+
+	@Autowired
+	private IConsignService consignService;
+
 	@Autowired
 	private BladeRedis bladeRedis;
 
+
+
 	@Override
 	public String userCodeUrl(String code){
 		try {
@@ -149,4 +169,6 @@ public class ApiServiceImpl implements IApiService {
 		});
 		return list;
 	}
+
+
 }

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

@@ -26,6 +26,8 @@ import org.springblade.modules.api.request.OrderTakeRequest;
 import org.springblade.modules.finance.vo.OrderVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.modules.shopping.entity.Consign;
+import org.springblade.modules.system.entity.User;
 import org.springblade.modules.system.entity.UserApp;
 
 /**

+ 4 - 1
src/main/java/org/springblade/modules/finance/service/impl/OrderGrantServiceImpl.java

@@ -17,6 +17,7 @@
 package org.springblade.modules.finance.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.modules.finance.entity.OrderGrant;
 import org.springblade.modules.finance.vo.OrderGrantVO;
 import org.springblade.modules.finance.mapper.OrderGrantMapper;
@@ -46,7 +47,9 @@ public class OrderGrantServiceImpl extends ServiceImpl<OrderGrantMapper, OrderGr
 		List<OrderGrant> list = baseMapper.selectList(Wrappers.<OrderGrant>lambdaQuery()
 			.eq(OrderGrant::getBatNo,batNo)
 			.eq(OrderGrant::getUserId, userId)
-			.eq(OrderGrant::getStatus, 1) //查询已经做预授权的
+				.ne(OrderGrant::getStatus, 0) //不能为0;
+				.eq(OrderGrant::getDataDate, DateUtil.format(DateUtil.now(), DateUtil.PATTERN_DATE))
+			//.eq(OrderGrant::getStatus, 1) //查询已经做预授权的 改为删除当日全部
 		);
 		//查询正在做预授权的数据
 		return list;

+ 99 - 21
src/main/java/org/springblade/modules/finance/service/impl/OrderServiceImpl.java

@@ -25,12 +25,14 @@ import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.log.logger.BladeLogger;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
 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.request.*;
 import org.springblade.modules.api.response.ConsignResponse;
+import org.springblade.modules.api.service.IApiService;
 import org.springblade.modules.finance.entity.Order;
 import org.springblade.modules.finance.entity.OrderConsign;
 import org.springblade.modules.finance.entity.OrderGoods;
@@ -41,6 +43,8 @@ import org.springblade.modules.finance.vo.OrderVO;
 import org.springblade.modules.finance.mapper.OrderMapper;
 import org.springblade.modules.finance.service.IOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.modules.platform.entity.UserTicket;
+import org.springblade.modules.platform.service.IUserTicketService;
 import org.springblade.modules.shopping.entity.*;
 import org.springblade.modules.shopping.mapper.*;
 import org.springblade.modules.system.entity.User;
@@ -95,6 +99,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@Autowired
 	private IOrderService orderService;
 
+	@Autowired
+	private IUserTicketService userTicketService;
+
+
 	private BladeLogger logger;
 
 	@Override
@@ -104,7 +112,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public synchronized String commonOrderInsert(OrderCommonSaveRequest request, String tenantId) {
+	public  String commonOrderInsert(OrderCommonSaveRequest request, String tenantId) {
 		UserApp userApp = new UserApp();
 		UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId,request.getUserId()));
 		if (query == null){
@@ -188,6 +196,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		if (i != 1){
 			throw new ServiceException("操作失败!");
 		}
+
 		return outTradeNo;
 
 	}
@@ -436,8 +445,52 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			orderConsign.setConsignPrice(consign.getConsignPrice());
 			int j = orderConsignMapper.insert(orderConsign);
 			if(j != 1){
-				throw new ServiceException("购买失败!");
+				throw new ServiceException("抢单失败!");
 			}
+
+			if(user != null){
+				//扣除用户绿色积分 添加明细
+				//寄售金额 * 3% =  绿色积分的
+				Double c = NumberUtil.mul(consign.getConsignPrice(), Double.valueOf(0.03));
+				Double ratioTicket = NumberUtil.roundDown(c , 2).doubleValue();
+				UserApp userApp = new UserApp();
+				UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId,user.getId()));
+				Double ticket = NumberUtil.sub(userApp.getTicket() - c).doubleValue();
+				//用户减去绿色积分(酒票)
+				UserApp param = new UserApp();
+				param.setId(query.getId());
+				param.setTicket(ticket);
+				flg = param.updateById();
+				if (flg){
+					//添加积分明细(酒票) 寄售扣除3%的手续费
+					UserTicket userTicket = new UserTicket();
+					userTicket.setDataSrc(2);//酒票转让
+					userTicket.setServesRatio(0.03);
+					userTicket.setTicket(ratioTicket);
+					userTicket.setUserId(query.getUserId());
+					userTicket.setUserTicket(query.getTicket());
+					userTicket.setTicketType(2);//支出
+					userTicket.setCreateTime(DateUtil.now());
+					userTicket.setDataId(consign.getId()); //寄售ID
+					userTicket.setDataRemarks("进货扣除");
+					userTicket.setLastTicket(ticket); //最后酒票数
+					userTicketService.save(userTicket);
+				}
+			}
+
+			/**
+			 * 1 生成订单
+			 * 2 调用确认接口----统一收单接口
+			 * 3 你收到支付宝的回调----去打款(商户给用户打款.)、
+			 * 4 打款完成----去改变 (订单表---单个抢购订单状态--完成--寄售中)
+			 * 4.1 去改变( 预授单表)  ---1 单----stauts --2
+			 *   ------------------------5 单--- num --5 -1 4
+			 * 5 返回数给前端app  ---同时告诉app  用户是需要再次做预授
+			 */
+			/*R res = apiService.orderConsign(outTradeNo, request.getOrderNo());
+			if (!res.isSuccess()){
+				throw new ServiceException("抢单失败!");
+			}*/
 			return outTradeNo;
 		}
 		return "";
@@ -455,6 +508,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		log.info("用户【" + query.getUserId() + "】为普通用户,判断信誉积分数据");
 		double k = (double)query.getCreditScore() / 100; //可抢次数
 		int scoreCount = NumberUtil.roundDown(k, 2).intValue();
+		Integer consignCount = Integer.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_COUNT));
+		//最多只能抢次数
+		if (scoreCount > consignCount){
+			scoreCount = consignCount;
+		}
 		log.info("用户【" + query.getUserId() + "】为信誉分可抢次数为:" + scoreCount);
 		int num = scoreCount - count;
 		if (num <= 0){
@@ -470,11 +528,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				return response;
 			}
 			List<Order> list = orderService.list(Wrappers.<Order>lambdaQuery().in(Order::getGrantNo, orderNo));
+			log.info("用户【" + query.getUserId() + "】授权订单号【" + orderNo +"】已授权的关联的订单数为:" + list.size());
+			log.info("用户【" + query.getUserId() + "】授权订单号【" + orderNo +"】的数量:" + orderGrant.getNum());
 			//如果剩余次数为大于等于1
 			//  订单表  --     预授表 -- 5  --3   --2
-			if(list.size() < orderGrant.getNum() && orderGrant.getStatus() == 1){
+			if(list.size() < orderGrant.getNum()){
 				response.setStatus(2);//已授权
-				response.setNum(orderGrant.getNum()); //剩余已授权的次数
+				response.setNum(orderGrant.getNowNum()); //剩余已授权的次数
 				return response;
 			}
 		}
@@ -513,10 +573,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			ConsignConfig consignConfig = consignConfigMapper.selectById(queryConsign.getConsignConfigId());
 			//当前时间 + 寄售天数
 			Date date = cn.hutool.core.date.DateUtil.offsetDay(DateUtil.now(), query.getConsignDays());
-			//获取年月日
 			String ymd = DateUtil.format(date, DateUtil.PATTERN_DATE);
-			String startTime = ymd + " " + consignConfig.getStartTime();
-			String endTime = ymd + " " + consignConfig.getEndTime();
+			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_DATE);
 			Date endDate = DateUtil.parse(endTime, DateUtil.PATTERN_DATE);
 			//更新寄售状态为已售出
@@ -574,20 +635,34 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			logger.error("订单异常", "订单回调失败!订单号:" + outTradeNo);
 			throw new ServiceException("订单回调失败!");
 		}
-		//更新用户数据
-		UserApp userApp = new UserApp();
-		UserApp queryUserApp = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId,queryOrder.getUserId()));
-		if (queryUserApp == null){
-			logger.error("订单异常", "获取用户信息失败!订单号:" + outTradeNo);
-			throw new ServiceException("获取用户信息失败!");
-		}
-		userApp.setId(queryUserApp.getId());
-		Double ticket = NumberUtil.add(queryUserApp.getTicket(), queryOrder.getTotalTicket());
-		userApp.setTicket(ticket);
-		boolean flg = userApp.updateById();
-		if (!flg){
-			logger.error("订单异常", "更新用户信息失败!订单号:" + outTradeNo);
-			throw new ServiceException("更新用户信息失败!");
+		if (queryOrder.getOrderType() == 1 && queryOrder.getPayFlag() == 1){
+			//更新用户数据
+			UserApp userApp = new UserApp();
+			UserApp queryUserApp = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId,queryOrder.getUserId()));
+			if (queryUserApp == null){
+				logger.error("订单异常", "获取用户信息失败!订单号:" + outTradeNo);
+				throw new ServiceException("获取用户信息失败!");
+			}
+			userApp.setId(queryUserApp.getId());
+			Double ticket = NumberUtil.add(queryUserApp.getTicket(), queryOrder.getTotalTicket());
+			userApp.setTicket(ticket);
+			boolean flg = userApp.updateById();
+			if (!flg){
+				logger.error("订单异常", "更新用户信息失败!订单号:" + outTradeNo);
+				throw new ServiceException("更新用户信息失败!");
+			}
+			UserTicket userTicket = new UserTicket();
+			userTicket.setDataSrc(1);//1.订单
+			userTicket.setServesRatio(0D);
+			userTicket.setTicket(queryOrder.getTotalTicket());
+			userTicket.setUserId(queryUserApp.getUserId());
+			userTicket.setUserTicket(queryUserApp.getTicket());
+			userTicket.setTicketType(1);//收入
+			userTicket.setCreateTime(DateUtil.now());
+			userTicket.setDataId(queryOrder.getId()); //订单号
+			userTicket.setDataRemarks("赠送积分");
+			userTicket.setLastTicket(ticket); //最后酒票数
+			userTicketService.save(userTicket);
 		}
 		return true;
 	}
@@ -607,4 +682,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		return i == 1;
 	}
 
+
+
+
 }

+ 6 - 0
src/main/java/org/springblade/modules/shopping/vo/ConsignVO.java

@@ -80,4 +80,10 @@ public class ConsignVO extends Consign {
 	@ApiModelProperty(value = "图文详情")
 	private String textImg;
 
+	@ApiModelProperty(value = "信誉分可数")
+	private Integer scoreCount;
+
+	@ApiModelProperty(value = "可抢订单数")
+	private Integer enableCount;
+
 }

+ 2 - 2
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java

@@ -551,7 +551,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 			userTicket.setTicketType(2);//支出
 			userTicket.setCreateTime(DateUtil.now());
 			userTicket.setDataId(transferId);
-			userTicket.setDataRemarks("酒票转出");
+			userTicket.setDataRemarks("积分转出");
 			userTicket.setLastTicket(userLastTicket);
 			userTicketService.save(userTicket);
 			if (flg){
@@ -564,7 +564,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 				transfer.setUserTicket(transferUserApp.getTicket());
 				transfer.setTicketType(1);//收入
 				transfer.setDataId(userId);
-				transfer.setDataRemarks("酒票转入");
+				transfer.setDataRemarks("积分转入");
 				transfer.setLastTicket(transferLastTicket);
 				userTicketService.save(transfer);
 				return true;

+ 1 - 1
src/main/resources/application-dev.yml

@@ -12,7 +12,7 @@ spring:
     #  nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
     #  commandTimeout: 5000
   datasource:
-    # MySql
+    # MySql 39.108.56.127:3306/t-test
     url: jdbc:mysql://39.108.56.127:3306/t-test?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
     username: root
     password: 123456