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

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

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

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

@@ -114,6 +114,11 @@ public interface CommonConstant {
 	 */
 	String DEFAULT_SERVERS_RATIO = "user:default:servesRatio";
 
+	/**
+	 * 默认积分手续费
+	 */
+	String DEFAULT_SCORE_RATIO = "default:score:ratio";
+
 	/**
 	 * 广告轮播默认条数
 	 */

+ 5 - 0
src/main/java/org/springblade/common/enums/DictBizEnum.java

@@ -107,6 +107,11 @@ public enum DictBizEnum {
 	 */
 	IS_CONFIRM("is_confirm"),
 
+	/**
+	 * 授权状态
+	 */
+	AUTH_STATE("auth_state"),
+
 	;
 
 	final String name;

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

@@ -283,16 +283,20 @@ public class AliPay01Controller {
 	@ApiOperation(value = "资金授权操作查询接口", notes = "支付请求")
 	@ApiOperationSupport(order = 3)
 	public R pay004(@ApiParam(value = "订单号", required = true) @RequestParam String outTradeNo,
-					@ApiParam(value = "查询明细,1查询冻结明细,2查询解冻明细,3查询支付明细时", required = true) @RequestParam Integer type) throws AlipayApiException {
+					@ApiParam(value = "查询明细,1查询冻结明细,2查询解冻明细,3查询支付明细时", required = true)
+					@RequestParam Integer type) throws AlipayApiException {
 		JSONObject data = new JSONObject();
 		if(type == 1){ //查询冻结明细
-			data.put("auth_no",outTradeNo);
+			data.put("auth_no", outTradeNo);
+			data.put("out_order_no", outTradeNo);
 			data.put("operation_type","FREEZE");
 		}else if(type == 2){ //查询解冻明细
-			data.put("auth_no",outTradeNo);
+			data.put("auth_no", outTradeNo);
+			data.put("out_order_no", outTradeNo);
 			data.put("operation_type","UNFREEZE");
 		}else if(type == 3){ //查询支付明细时
-			data.put("auth_no",outTradeNo);
+			data.put("auth_no", outTradeNo);
+			data.put("out_order_no", outTradeNo);
 			data.put("operation_type","PAY");
 		}else{
 			return R.fail("参数错误!");

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

@@ -54,4 +54,11 @@ public interface ITradeService {
 	 */
 	void orderGrant(List<OrderGrant> list);
 
+	/**
+	 * 解冻用户预授权金额
+	 * @param authNo 授权号
+	 * @param amount 金额
+	 * @return boolean
+	 */
+	boolean payUnfreeze(String authNo, Double amount);
 }

+ 36 - 0
src/main/java/org/springblade/modules/api/service/impl/TradeServiceImpl.java

@@ -13,10 +13,12 @@ import com.alipay.api.request.AlipayFundTransUniTransferRequest;
 import com.alipay.api.response.AlipayFundAuthOrderUnfreezeResponse;
 import com.alipay.api.response.AlipayFundTransUniTransferResponse;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import io.swagger.annotations.ApiParam;
 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;
@@ -34,6 +36,7 @@ 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 org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -215,4 +218,37 @@ public class TradeServiceImpl implements ITradeService {
 		}
 	}
 
+	public boolean payUnfreeze(String authNo, Double amount){
+		try{
+			AlipayFundAuthOrderUnfreezeRequest request = new AlipayFundAuthOrderUnfreezeRequest();
+			JSONObject bizContent = new JSONObject();
+			String out_request_no = CommonUtil.genTimeID();
+			bizContent.put("auth_no", authNo);
+			bizContent.put("out_request_no",out_request_no);
+			bizContent.put("amount", amount);
+			bizContent.put("remark","解冻资金");
+			JSONObject extraParam = new JSONObject();
+			JSONObject unfreezeBizInfo = new JSONObject();
+			unfreezeBizInfo.put("bizComplete",true);
+			extraParam.put("unfreezeBizInfo",unfreezeBizInfo);
+			bizContent.put("extra_param",extraParam);
+			// 设置整体请求参数
+			request.setBizContent(bizContent.toString());
+			// 使用execute方法发起请求
+			AlipayFundAuthOrderUnfreezeResponse response = client.certificateExecute(request);
+			if(response.isSuccess()){
+				logger.info("解冻资金成功", response.getBody());
+				OrderGrant orderGrant = new OrderGrant();
+				orderGrant.setStatus(2);
+				orderGrant.setUnfreezeTime(DateUtil.now());
+				orderGrantService.update(orderGrant, Wrappers.<OrderGrant>lambdaQuery().eq(OrderGrant::getAuthNo,authNo));
+				return true;
+			}
+			logger.info("解冻资金失败", response.getBody());
+		} catch (AlipayApiException e) {
+			e.printStackTrace();
+		}
+		return false;
+	}
+
 }

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

@@ -159,9 +159,25 @@ public class ConsignSchedulingTask implements SchedulingConfigurer {
 			//sign.setObtainPrice(consign.getConsignPrice()); //不能更新用户取得价
 			sign.setPremiumPrice(consignPrice);
 			sign.setConsignConfigId(configNowId);
+			//状态为寄售中,价格不相等的数据更新时间和场次
 			consignService.update(sign, Wrappers.<Consign>lambdaQuery()
 				.eq(Consign::getConsignConfigId, configId)
-				.eq(Consign::getConsignState, 1));//寄售中才变动
+				.eq(Consign::getConsignState, 1) //寄售中才变动
+				.ne(Consign::getConsignPrice, consign.getConsignPrice()));
+			/**
+			 * 查询寄售数据中平台需要兜底的数据,
+			 * 	1、目的把寄售状态改为待付款
+			 * 	2、状态为1:寄售中
+			 * 	3、剩余数量为 1
+			 * 	4、寄售价台的寄售价相等的数据
+			 */
+			Consign platform = new Consign();
+			platform.setConsignState(2);//待付款
+			platform.setNowStock(0);//被平台抢
+			consignService.update(platform, Wrappers.<Consign>lambdaQuery()
+				.eq(Consign::getConsignConfigId, configId)
+				.eq(Consign::getConsignState, 1) //寄售中才变动
+				.eq(Consign::getConsignPrice, consign.getConsignPrice()));
 		}
 		List<Long> ids = new ArrayList<>();
 		List<Consign> batchList = new ArrayList<>();

+ 7 - 5
src/main/java/org/springblade/modules/finance/controller/OrderGrantController.java

@@ -27,6 +27,7 @@ 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.Func;
+import org.springblade.modules.finance.wrapper.OrderGrantWrapper;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.modules.finance.entity.OrderGrant;
@@ -65,9 +66,10 @@ public class OrderGrantController extends BladeController {
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入orderGrant")
-	public R<IPage<OrderGrant>> list(OrderGrant orderGrant, Query query) {
-		IPage<OrderGrant> pages = orderGrantService.page(Condition.getPage(query), Condition.getQueryWrapper(orderGrant));
-		return R.data(pages);
+	public R<IPage<OrderGrantVO>> list(OrderGrant orderGrant, Query query) {
+		IPage<OrderGrant> pages = orderGrantService.page(Condition.getPage(query),
+			Condition.getQueryWrapper(orderGrant));
+		return R.data(OrderGrantWrapper.build().pageVO(pages));
 	}
 
 	/**
@@ -111,7 +113,7 @@ public class OrderGrantController extends BladeController {
 		return R.status(orderGrantService.saveOrUpdate(orderGrant));
 	}
 
-	
+
 	/**
 	 * 删除 订单预授权表
 	 */
@@ -122,5 +124,5 @@ public class OrderGrantController extends BladeController {
 		return R.status(orderGrantService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+
 }

+ 4 - 0
src/main/java/org/springblade/modules/finance/service/impl/OrderServiceImpl.java

@@ -267,6 +267,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			}
 		}
 		/************************************平台单单处理-结束**************************************/
+		//为交割的寄售商品没有选择提货
+		if (consign.getIsDelivery() == 0){
+			throw new ServiceException("寄售商品未交割!");
+		}
 		//扣除用户绿色积分 添加明细
 		//寄售金额 * 3% =  绿色积分的
 		Double score = NumberUtil.mul(consign.getConsignPrice(), Double.valueOf(0.03));

+ 11 - 0
src/main/java/org/springblade/modules/finance/vo/OrderGrantVO.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.finance.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import org.springblade.modules.finance.entity.OrderGrant;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -31,6 +32,16 @@ import io.swagger.annotations.ApiModel;
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "OrderGrantVO对象", description = "订单预授权表")
 public class OrderGrantVO extends OrderGrant {
+
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty(value = "授权状态")
+	private String statusDisplayName;
+
+	@ApiModelProperty(value = "账号")
+	private String account;
+
+	@ApiModelProperty(value = "姓名")
+	private String realName;
+
 }

+ 13 - 0
src/main/java/org/springblade/modules/finance/wrapper/OrderGrantWrapper.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.modules.finance.wrapper;
 
+import org.springblade.common.cache.DictBizCache;
+import org.springblade.common.enums.DictBizEnum;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.DateUtil;
@@ -23,6 +25,8 @@ import org.springblade.core.tool.utils.SpringUtil;
 import org.springblade.modules.finance.entity.OrderGrant;
 import org.springblade.modules.finance.service.IOrderGrantService;
 import org.springblade.modules.finance.vo.OrderGrantVO;
+import org.springblade.modules.system.entity.User;
+import org.springblade.modules.system.service.IUserService;
 
 import java.util.Objects;
 
@@ -39,13 +43,22 @@ public class OrderGrantWrapper extends BaseEntityWrapper<OrderGrant, OrderGrantV
 
 	public static IOrderGrantService orderGrantService;
 
+	public static IUserService userService;
+
 	static {
 		orderGrantService = SpringUtil.getBean(IOrderGrantService.class);
+		userService = SpringUtil.getBean(IUserService.class);
 	}
 
 	@Override
 	public OrderGrantVO entityVO(OrderGrant entity) {
 		OrderGrantVO vo = Objects.requireNonNull(BeanUtil.copy(entity, OrderGrantVO.class));
+		User user = userService.getById(vo.getUserId());
+		if (!Objects.isNull(user)){
+			vo.setAccount(user.getAccount());
+			vo.setRealName(user.getRealName());
+		}
+		vo.setStatusDisplayName(DictBizCache.getValue(DictBizEnum.AUTH_STATE,vo.getStatus()));
 		return vo;
 	}
 

+ 2 - 2
src/main/java/org/springblade/modules/platform/entity/UserTicket.java

@@ -80,9 +80,9 @@ public class UserTicket implements Serializable {
 	private Double servesRatio;
 
 	/**
-	 * 来源:1订单 2抢购 3其他
+	 * 来源:1订单 2抢购 3用户转积分
 	 */
-	@ApiModelProperty(value = "来源:1订单 2抢购 3其他")
+	@ApiModelProperty(value = "来源:1订单 2抢购 3用户转积分")
 	private Integer dataSrc;
 	/**
 	 * 来源记录ID

+ 3 - 0
src/main/java/org/springblade/modules/platform/vo/UserTicketVO.java

@@ -46,4 +46,7 @@ public class UserTicketVO extends UserTicket {
 	@ApiModelProperty(value = "酒票类型:1:收入 2:支出")
 	private String ticketTypeDisplayName;
 
+	@ApiModelProperty(value = "对方账号")
+	private String account;
+
 }

+ 15 - 0
src/main/java/org/springblade/modules/platform/wrapper/UserTicketWrapper.java

@@ -20,8 +20,11 @@ import org.springblade.common.cache.DictBizCache;
 import org.springblade.common.enums.DictBizEnum;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.SpringUtil;
 import org.springblade.modules.platform.entity.UserTicket;
 import org.springblade.modules.platform.vo.UserTicketVO;
+import org.springblade.modules.system.entity.User;
+import org.springblade.modules.system.service.IUserService;
 
 import java.util.Objects;
 
@@ -36,11 +39,23 @@ public class UserTicketWrapper extends BaseEntityWrapper<UserTicket, UserTicketV
 		return new UserTicketWrapper();
 	}
 
+	private static final IUserService userService;
+
+	static {
+		userService = SpringUtil.getBean(IUserService.class);
+	}
+
 	@Override
 	public UserTicketVO entityVO(UserTicket entity) {
 		UserTicketVO vo = Objects.requireNonNull(BeanUtil.copy(entity, UserTicketVO.class));
 		vo.setTicketTypeDisplayName(DictBizCache.getValue(DictBizEnum.TICKET_TYPE,vo.getTicketType()));
 		vo.setDataSrcDisplayName(DictBizCache.getValue(DictBizEnum.DATA_SRC,vo.getDataSrc()));
+		if (3 == entity.getDataSrc()){
+			User user = userService.getById(entity.getDataId());
+			if (!Objects.isNull(user)){
+				vo.setAccount(user.getAccount());
+			}
+		}
 		return vo;
 	}
 

+ 15 - 4
src/main/java/org/springblade/modules/shopping/wrapper/ConsignWrapper.java

@@ -91,22 +91,33 @@ public class ConsignWrapper extends BaseEntityWrapper<Consign, ConsignVO> {
 
 	/**
 	 * 寄售溢价计算
-	 *
+	 * 	1、默认为1
 	 * @param price 金额
 	 * @param days 天数
 	 * @return Double
 	 */
 	public Double consignPrice(Double price, Integer days){
-		Double ratio = 0d;
-		if(2 == days){
+		Double ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_CONDIGN_RATIO_T1));;
+		/*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);
 	}
 
+	/**
+	 * 获取寄售手续费
+	 *
+	 * @param score
+	 * @return Double
+	 */
+	public Double getScore(Double score){
+		Double ratio = Double.valueOf(ParamCache.getValue(CommonConstant.DEFAULT_SCORE_RATIO));;
+		return NumberUtil.roundDown(NumberUtil.mul(score, ratio) , 2).doubleValue();
+	}
+
 }