Browse Source

项目更新20220329

VEAR 2 years ago
parent
commit
62b53487c8
30 changed files with 598 additions and 94 deletions
  1. 2 1
      doc/script/prod/run.sh
  2. 9 1
      doc/开发手册.md
  3. 8 0
      src/main/java/org/springblade/common/utils/CommonUtil.java
  4. 62 31
      src/main/java/org/springblade/modules/api/controller/AliPay01Controller.java
  5. 5 5
      src/main/java/org/springblade/modules/api/controller/Api03Controller.java
  6. 6 1
      src/main/java/org/springblade/modules/api/controller/Api04Controller.java
  7. 23 0
      src/main/java/org/springblade/modules/api/controller/TestController.java
  8. 6 0
      src/main/java/org/springblade/modules/api/service/IApiService.java
  9. 9 0
      src/main/java/org/springblade/modules/finance/mapper/OrderConsignMapper.java
  10. 23 0
      src/main/java/org/springblade/modules/finance/mapper/OrderConsignMapper.xml
  11. 20 0
      src/main/java/org/springblade/modules/finance/pay/entity/AlipayProperties.java
  12. 9 0
      src/main/java/org/springblade/modules/finance/service/IOrderConsignService.java
  13. 12 0
      src/main/java/org/springblade/modules/finance/service/impl/OrderConsignServiceImpl.java
  14. 34 23
      src/main/java/org/springblade/modules/finance/service/impl/OrderServiceImpl.java
  15. 3 0
      src/main/java/org/springblade/modules/finance/wrapper/OrderConsignWrapper.java
  16. 121 0
      src/main/java/org/springblade/modules/platform/controller/UserAppController.java
  17. 82 0
      src/main/java/org/springblade/modules/platform/wrapper/UserAppWrapper.java
  18. 12 2
      src/main/java/org/springblade/modules/shopping/controller/BrandsController.java
  19. 4 2
      src/main/java/org/springblade/modules/shopping/controller/CartsController.java
  20. 21 1
      src/main/java/org/springblade/modules/shopping/controller/ConsignConfigController.java
  21. 22 3
      src/main/java/org/springblade/modules/shopping/controller/ConsignController.java
  22. 7 0
      src/main/java/org/springblade/modules/shopping/entity/ConsignConfig.java
  23. 8 0
      src/main/java/org/springblade/modules/shopping/mapper/ConsignConfigMapper.java
  24. 8 0
      src/main/java/org/springblade/modules/shopping/mapper/ConsignConfigMapper.xml
  25. 3 0
      src/main/java/org/springblade/modules/shopping/mapper/ConsignMapper.xml
  26. 7 0
      src/main/java/org/springblade/modules/shopping/service/IConsignConfigService.java
  27. 15 10
      src/main/java/org/springblade/modules/shopping/service/impl/ConsignConfigServiceImpl.java
  28. 8 7
      src/main/java/org/springblade/modules/system/vo/UserAppVO.java
  29. 2 2
      src/main/resources/application-dev.yml
  30. 47 5
      src/main/resources/application-prod.yml

+ 2 - 1
doc/script/prod/liquor.sh → doc/script/prod/run.sh

@@ -26,7 +26,8 @@ is_exist
 if [ $? -eq "0" ]; then
 echo "${APP_NAME} is already running. pid=${pid} ."
 else
-nohup java -Xms1024m -Xmx1024m -jar $APP_NAME --spring.profiles.active=test > /dev/blade/null 2>&1 &
+cp jar/$APP_NAME $APP_NAME
+nohup java -Xms1024m -Xmx1024m -jar $APP_NAME --spring.profiles.active=prod > /dev/blade/null 2>&1 &
 fi
 }
 

+ 9 - 1
doc/开发手册.md

@@ -9,4 +9,12 @@
 
     http://localhost:8800/doc.html
     
-    http://localhost:1888
+    http://localhost:1888
+
+## mysql中不同表的相同字段索引是可以重名的,因为索引文件一表一个;
+
+    命名规则:
+
+    普通索引:idx_字段名
+
+    唯一索引:ux_字段名

+ 8 - 0
src/main/java/org/springblade/common/utils/CommonUtil.java

@@ -16,6 +16,10 @@
  */
 package org.springblade.common.utils;
 
+
+import cn.hutool.core.util.RandomUtil;
+import org.springblade.core.tool.utils.DateUtil;
+
 /**
  * 通用工具类
  *
@@ -23,4 +27,8 @@ package org.springblade.common.utils;
  */
 public class CommonUtil {
 
+	public static String genTimeID(){
+		return DateUtil.format(DateUtil.now(),DateUtil.PATTERN_DATETIME_MINI + "SSS") + RandomUtil.randomNumbers(8);
+	}
+
 }

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

@@ -21,6 +21,7 @@ import lombok.AllArgsConstructor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springblade.common.constant.CommonConstant;
+import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.NotifyUtils;
 import org.springblade.core.log.annotation.ApiLog;
 import org.springblade.core.log.exception.ServiceException;
@@ -57,16 +58,13 @@ public class AliPay01Controller {
 	private static final Logger log = LoggerFactory.getLogger(AliPay01Controller.class);
 
 	//预授权
-	private static final String NOTIFY_URL = "https://wine.gzzzyd.com/api/v1/aliPay/sdk/auth_notify_url";
+	private static final String NOTIFY_URL = "/api/v1/aliPay/sdk/auth_notify_url";
 
 	//抢购
-	private static final String TRADE_URL = "https://wine.gzzzyd.com/api/v1/aliPay/sdk/trade_notify_url";
+	private static final String TRADE_URL = "/api/v1/aliPay/sdk/trade_notify_url";
 
 	//购买
-	//private static final String TRADE_URL = "https://wine.gzzzyd.com/api/v1/aliPay/sdk/order_notify_url";
-
-	//平台支付宝账号
-	private static final String ALIPAY_PID = "2088341967443472";
+	//private static final String TRADE_URL = "/api/v1/aliPay/sdk/order_notify_url";
 
 	@Autowired
 	private AlipayClient client;//支付宝请求sdk客户端
@@ -106,18 +104,18 @@ public class AliPay01Controller {
 			}
 		}
 		if("aliPay".equals(payFor)){
-			JSONObject data = new JSONObject();
-			data.put("out_trade_no", outTradeNo); //商户订单号
-			//产品码, APP支付 QUICK_MSECURITY_PAY, PC支付 FAST_INSTANT_TRADE_PAY, 移动H5支付 QUICK_WAP_PAY
-			data.put("product_code", "QUICK_MSECURITY_PAY");
-			data.put("total_amount", "0.1"); //订单金额
-			data.put("subject", "中宏酒业"); //订单标题
-			//APP支付
-			AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
-			request.setNotifyUrl(TRADE_URL); //异步通知地址
-			request.setBizContent(data.toJSONString()); //业务参数
-			//APP支付
 			try {
+				JSONObject data = new JSONObject();
+				data.put("out_trade_no", outTradeNo); //商户订单号
+				//产品码, APP支付 QUICK_MSECURITY_PAY, PC支付 FAST_INSTANT_TRADE_PAY, 移动H5支付 QUICK_WAP_PAY
+				data.put("product_code", "QUICK_MSECURITY_PAY");
+				data.put("total_amount", "0.1"); //订单金额
+				data.put("subject", "中宏酒业"); //订单标题
+				//APP支付
+				AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
+				request.setNotifyUrl(properties.getDomain() + TRADE_URL); //异步通知地址
+				request.setBizContent(data.toJSONString()); //业务参数
+				//APP支付
 				AlipayTradeAppPayResponse response = client.sdkExecute(request);
 				if (response.isSuccess()){
 					return R.data(response.getBody());
@@ -131,7 +129,7 @@ public class AliPay01Controller {
 		return R.fail("该支付方式暂不支持!");
 	}
 
-	@ApiLog("发起支付-预授权")
+	@ApiLog("绑定订单-预授权")
 	@PostMapping("/pay_002")
 	@ApiOperation(value = "统一收单交易支付接口", notes = "预授权")
 	@ApiOperationSupport(order = 2)
@@ -168,11 +166,11 @@ public class AliPay01Controller {
 		}else{
 			data.put("auth_confirm_mode", "NOT_COMPLETE");//不解冻
 		}
-		data.put("seller_id", ALIPAY_PID); //收款方
+		data.put("seller_id", properties.getPayeeUserId()); //收款方
 		data.put("buyer_id", query.getAlipayUserId()); //买家ID //2088012801069195
 		//APP支付
 		AlipayTradePayRequest request = new AlipayTradePayRequest();
-		request.setNotifyUrl(TRADE_URL); //异步通知地址
+		request.setNotifyUrl(properties.getDomain() + TRADE_URL); //异步通知地址
 		request.setBizContent(data.toJSONString()); //业务参数
 		//APP支付
 		try {
@@ -187,7 +185,10 @@ public class AliPay01Controller {
 			if (response.isSuccess()){
 				return R.data(response.getBody());
 			}else{
-				throw new ServiceException("支付失败!");
+				orderGrantService.remove(Wrappers.<OrderGrant>lambdaQuery()
+					.eq(OrderGrant::getId,orderGrant.getId())
+					.eq(OrderGrant::getStatus, 0));
+				logger.info("订单绑定失败","删除预授权数据");
 			}
 		} catch (AlipayApiException e) {
 			e.printStackTrace();
@@ -195,9 +196,9 @@ public class AliPay01Controller {
 		return R.fail("发起支付失败!");
 	}
 
-	@ApiLog("线上资金授权冻结接口")
+	@ApiLog("发起支付宝预授权")
 	@PostMapping("/pay_003")
-	@ApiOperation(value = "线上资金授权冻结接口", notes = "支付请求")
+	@ApiOperation(value = "线上资金授权冻结接口-调用支付宝预授权", notes = "支付请求")
 	@ApiOperationSupport(order = 3)
 	public R<String> pay003(@ApiParam(value = "用户号", required = true) @RequestParam Long userId,
 							@ApiParam(value = "批次ID", required = true) @RequestParam Long batNo,
@@ -205,22 +206,21 @@ public class AliPay01Controller {
 							@ApiParam(value = "数量", required = true) @RequestParam Integer num) throws AlipayApiException {
 		//1.通过批次号查询金额
 		JSONObject data = new JSONObject();
-		String orderNo = PayKit.generateStr();
+		String orderNo = CommonUtil.genTimeID();
 		data.put("out_order_no", orderNo);
 		data.put("out_request_no", orderNo);
 		data.put("order_title","预授权冻结");
 		data.put("amount", NumberUtil.mul(price, num));
 		data.put("product_code","PRE_AUTH_ONLINE"); //销售产品码。支付宝预授权产品固定为 PRE_AUTH_ONLINE
-		data.put("payee_user_id", ALIPAY_PID);
+		data.put("payee_user_id", properties.getPayeeUserId());
 		data.put("timeout_express","30m");
 		//APP支付
 		AlipayFundAuthOrderAppFreezeRequest request = new AlipayFundAuthOrderAppFreezeRequest();
-		request.setNotifyUrl(NOTIFY_URL); //异步通知地址
+		request.setNotifyUrl(properties.getDomain() + NOTIFY_URL); //异步通知地址
 		request.setBizContent(data.toJSONString()); //业务参数
 		//APP支付
 		AlipayFundAuthOrderAppFreezeResponse response = client.sdkExecute(request);
 		if(response.isSuccess()){
-			//新增数据
 			//查询数据如果已经预授权的
 			String dataDate = DateUtil.format(DateUtil.now(), DateUtil.PATTERN_DATE);
 			OrderGrant grant = new OrderGrant();
@@ -269,8 +269,6 @@ public class AliPay01Controller {
 		return R.fail("授权失败!");
 	}
 
-
-
 	@ApiLog("抢购打款-测试")
 	@PostMapping("/pay_005")
 	@ApiOperation(value = "单笔转账到支付宝账户", notes = "单笔转账到支付宝账户")
@@ -317,6 +315,35 @@ public class AliPay01Controller {
 		return R.fail("打款失败!");
 	}
 
+	@ApiLog("资金解冻")
+	@GetMapping("/pay_unfreeze")
+	@ApiOperation(value = "资金授权解冻", notes = "支付请求")
+	@ApiOperationSupport(order = 3)
+	public R payUnfreeze(@ApiParam(value = "支付宝资金授权订单号", required = true) @RequestParam String authNo,
+						 @ApiParam(value = "解冻金额", required = true) @RequestParam Double amount) throws AlipayApiException {
+		AlipayFundAuthOrderUnfreezeRequest request = new AlipayFundAuthOrderUnfreezeRequest();
+		JSONObject bizContent = new JSONObject();
+		bizContent.put("auth_no",authNo);
+		bizContent.put("out_request_no","outRequestNo123");
+		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.execute(request);
+		if(response.isSuccess()){
+			logger.info("解冻资金成功",response.getBody());
+			return R.fail("解冻资金成功!");
+		}
+		logger.info("解冻资金失败",response.getBody());
+		return R.fail("解冻资金失败!");
+	}
+
 	@GetMapping("/getAlipay_sign")
 	@ApiOperation(value = "获取签名", notes = "获取签名")
 	@ApiOperationSupport(order = 97)
@@ -330,12 +357,13 @@ public class AliPay01Controller {
 			"&product_id=APP_FAST_LOGIN" +
 			"&scope=kuaijie" +
 			"&sign_type=RSA2" +
-			"&target_id=" + PayKit.generateStr();
+			"&target_id=" + CommonUtil.genTimeID();
 		String sign = AlipaySignature.rsaSign(content, properties.getPrivateKey(),"utf-8","RSA2");
 		String urlencoder = URLEncoder.encode(sign,"UTF-8");
 		return R.data(content + "&sign=" + urlencoder);
 	}
 
+	@ApiLog("获取支付宝用户信息")
 	@GetMapping("/setAlipay_userInfo")
 	@ApiOperation(value = "设置用户信息", notes = "设置用户信息")
 	@ApiOperationSupport(order = 97)
@@ -352,6 +380,7 @@ public class AliPay01Controller {
 		return R.status(param.updateById());
 	}
 
+	@ApiLog("预授回调")
 	@RequestMapping(value = "/auth_notify_url", method = {RequestMethod.GET, RequestMethod.POST})
 	@ApiOperation(value = "异步通知相应-预授回调", notes = "异步通知相应")
 	@ApiOperationSupport(order = 99)
@@ -393,6 +422,7 @@ public class AliPay01Controller {
 		return "success";
 	}
 
+	@ApiLog("购买进货回调")
 	@RequestMapping(value = "/trade_notify_url", method = {RequestMethod.GET, RequestMethod.POST})
 	@ApiOperation(value = "异步通知相应-购买进货回调", notes = "异步通知相应")
 	@ApiOperationSupport(order = 100)
@@ -452,6 +482,7 @@ public class AliPay01Controller {
 					User u = userService.getById(user.getUserId());
 					if (u != null && u.getRealName() != null){
 						//向寄售人打款
+						log.info(errMsg + "-向寄售人打款");
 						transfer(user.getAlipayUserId(),u.getRealName(), Double.toString(query.getPrice()));
 					}else{
 						log.info(errMsg + "-修改失败");
@@ -493,7 +524,7 @@ public class AliPay01Controller {
 				e.printStackTrace();
 			}
 			AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
-			model.setOutBizNo(PayKit.generateStr());
+			model.setOutBizNo(CommonUtil.genTimeID());
 			model.setRemark("寄售订单打款");
 			model.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}");
 			model.setBizScene("DIRECT_TRANSFER");

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

@@ -97,7 +97,7 @@ public class Api03Controller extends BladeController {
 
 
 	@GetMapping("/consign-page")
-	@ApiOperationSupport(order = 1)
+	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "抢购专区-查询所有数据", notes = "传入consign")
 	public R<List<ConsignVO>> ConsignPage(@ApiParam(value = "场次开始时间", required = true) @RequestParam String time,
 										  Query query) {
@@ -114,14 +114,14 @@ public class Api03Controller extends BladeController {
 	}
 
 	@GetMapping("/consign-list")
-	@ApiOperationSupport(order = 1)
+	@ApiOperationSupport(order = 3)
 	@ApiOperation(value = "抢购专区-展示两条数据", notes = "传入consign")
 	public R<List<ConsignVO>> ConsignList(@ApiParam(value = "场次ID", required = true) @RequestParam Long id) {
 		return R.data(consignService.selectConsignList(id));
 	}
 
 	@GetMapping("/consign-detailById")
-	@ApiOperationSupport(order = 10)
+	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "浏览商品", notes = "传入consign主键ID")
 	public R<ConsignVO> detail(@ApiParam(value = "抢购主键", required = true) @RequestParam String consignId,
 							   @ApiParam(value = "用户ID", required = true) @RequestParam Long userId) {
@@ -142,7 +142,7 @@ public class Api03Controller extends BladeController {
 			consignVO.setGoodsLabel(vo.getGoodsLabel());
 			consignVO.setTextImg(vo.getTextImg());
 		}
-		int count = orderConsignService.count(Wrappers.<OrderConsign>lambdaQuery().last(" where to_days(create_time)= to_days(now())"));
+		Integer count = orderConsignService.selectUserCount(userId, detail.getConsignConfigId());
 		UserApp userApp = new UserApp();
 		UserApp query = userApp.selectOne(Wrappers.<UserApp>lambdaQuery().eq(UserApp::getUserId,userId));
 		double k = (double)query.getCreditScore() / 100;
@@ -172,7 +172,7 @@ public class Api03Controller extends BladeController {
 	}
 
 	@GetMapping("/consign-turnout")
-	@ApiOperationSupport(order = 12)
+	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "参与人数", notes = "虚拟数")
 	public R turnout() {
 		UserApp userApp = new UserApp();

+ 6 - 1
src/main/java/org/springblade/modules/api/controller/Api04Controller.java

@@ -23,8 +23,10 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.common.cache.UserCache;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.redis.cache.BladeRedis;
@@ -62,6 +64,8 @@ import javax.validation.Valid;
 import java.util.List;
 import java.util.Objects;
 
+import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE;
+
 /**
  * 控制器
  *
@@ -108,6 +112,7 @@ public class Api04Controller extends BladeController {
 		if (flg){
 			//清除缓存
 			bladeRedis.del(String.valueOf(request.getUserId()));
+			CacheUtil.clear(USER_CACHE);
 			return R.success("操作成功");
 		}
 		return R.fail("操作失败");
@@ -383,7 +388,7 @@ public class Api04Controller extends BladeController {
 	@ApiOperation(value = "获取最新版本", notes = "获取最新版本")
 	public R<VersionUpgrade> versionUpgrade() {
 		VersionUpgrade versionUpgrade = versionUpgradeService.getOne(Wrappers.<VersionUpgrade>lambdaQuery()
-			.eq(VersionUpgrade::getStatus ,2).orderByDesc(VersionUpgrade::getSort),false);
+			.eq(VersionUpgrade::getStatus ,2).orderByDesc(VersionUpgrade::getVersionCode).orderByDesc(VersionUpgrade::getSort),false);
 		return R.data(versionUpgrade);
 	}
 

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

@@ -21,17 +21,21 @@ import cn.hutool.core.util.NumberUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.ijpay.core.kit.PayKit;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import org.springblade.common.constant.CommonConstant;
+import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.log.logger.BladeLogger;
 import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.tool.api.R;
 import org.springblade.modules.finance.service.IOrderService;
 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.*;
 
@@ -49,6 +53,8 @@ public class TestController extends BladeController {
 
 	private final IOrderService orderService;
 	private final BladeRedis bladeRedis;
+	@Autowired
+	private BladeLogger logger;
 
 	@GetMapping("/test001")
 	@ApiOperationSupport(order = 1)
@@ -116,6 +122,10 @@ public class TestController extends BladeController {
 		if (type == 4){
 			throw new ServiceException("异常");
 		}
+		for (int i = 0; i < 10; i++) {
+			System.out.println(CommonUtil.genTimeID());
+			System.out.println(PayKit.getSnowflake(1,1).nextId());
+		}
 		return R.success("成功");
 	}
 
@@ -127,4 +137,17 @@ public class TestController extends BladeController {
 		throw new ServiceException("异常");
 	}
 
+	@PostMapping("/test009")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "测试008-日志日志", notes = "返回")
+	@Transactional(rollbackFor = ServiceException.class)
+	public R test009(@ApiParam(value = "type", required = true) @RequestParam(required = false) Integer type) {
+		if(type == 1){
+			logger.info("正常", type.toString());
+		}else{
+			logger.error("正常", type.toString());
+		}
+		return R.data("测试");
+	}
+
 }

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

@@ -29,6 +29,12 @@ import java.util.List;
  */
 public interface IApiService{
 
+	/**
+	 * 获取用户二维码路径
+	 *
+	 * @param code 邀请码
+	 * @return String
+	 */
 	String userCodeUrl(String code);
 
 	/**

+ 9 - 0
src/main/java/org/springblade/modules/finance/mapper/OrderConsignMapper.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.finance.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.modules.finance.entity.OrderConsign;
 import org.springblade.modules.finance.vo.OrderConsignVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -39,4 +40,12 @@ public interface OrderConsignMapper extends BaseMapper<OrderConsign> {
 	 */
 	List<OrderConsignVO> selectOrderConsignPage(IPage page, OrderConsignVO orderConsign);
 
+	/**
+	 * 用户抢购次数
+	 * @param userId 用户ID
+	 * @param consignConfigId 场次
+	 * @return Integer
+	 */
+	Integer selectUserCount(@Param("userId") Long userId, @Param("consignConfigId") Long consignConfigId);
+
 }

+ 23 - 0
src/main/java/org/springblade/modules/finance/mapper/OrderConsignMapper.xml

@@ -25,4 +25,27 @@
         select * from t_order_consign where is_deleted = 0
     </select>
 
+    <select id="selectUserCount" resultType="java.lang.Integer">
+        SELECT
+        count(1)
+        FROM
+        t_order_consign c
+        WHERE
+        to_days(c.create_time) = to_days(now())
+        <if test="userId != null and userId != ''">
+            and c.pay_user_id = #{userId}
+        </if>
+        AND EXISTS (
+        SELECT
+        1
+        FROM
+        t_consign t
+        WHERE
+        t.id = c.consign_id
+        <if test="consignConfigId != null and consignConfigId != ''">
+            and t.consign_config_id = #{consignConfigId}
+        </if>
+        )
+    </select>
+
 </mapper>

+ 20 - 0
src/main/java/org/springblade/modules/finance/pay/entity/AlipayProperties.java

@@ -36,10 +36,30 @@ public class AlipayProperties {
      */
     private String signType;
 
+	private String domain;
+
+	private String payeeUserId;
+
 	private String appCertPath;
 	private String aliPayCertPath;
 	private String aliPayRootCertPath;
 
+	public String getPayeeUserId() {
+		return payeeUserId;
+	}
+
+	public void setPayeeUserId(String payeeUserId) {
+		this.payeeUserId = payeeUserId;
+	}
+
+	public String getDomain() {
+		return domain;
+	}
+
+	public void setDomain(String domain) {
+		this.domain = domain;
+	}
+
 	public String getAppCertPath() {
 		return appCertPath;
 	}

+ 9 - 0
src/main/java/org/springblade/modules/finance/service/IOrderConsignService.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.finance.service;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.springblade.modules.finance.entity.OrderConsign;
 import org.springblade.modules.finance.vo.OrderConsignVO;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -38,4 +39,12 @@ public interface IOrderConsignService extends IService<OrderConsign> {
 	 */
 	IPage<OrderConsignVO> selectOrderConsignPage(IPage<OrderConsignVO> page, OrderConsignVO orderConsign);
 
+
+	/**
+	 * 返回用户当日抢购次数
+	 * @param userId 用户ID
+	 * @return Integer
+	 */
+	Integer selectUserCount(Long userId, Long consignConfigId);
+
 }

+ 12 - 0
src/main/java/org/springblade/modules/finance/service/impl/OrderConsignServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.finance.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.springblade.modules.finance.entity.OrderConsign;
 import org.springblade.modules.finance.vo.OrderConsignVO;
 import org.springblade.modules.finance.mapper.OrderConsignMapper;
@@ -38,4 +39,15 @@ public class OrderConsignServiceImpl extends ServiceImpl<OrderConsignMapper, Ord
 		return page.setRecords(baseMapper.selectOrderConsignPage(page, orderConsign));
 	}
 
+	/**
+	 * 返回用户当日抢购次数
+	 * @param userId 用户ID
+	 * @param consignConfigId 场次
+	 * @return
+	 */
+	@Override
+	public Integer selectUserCount(Long userId, Long consignConfigId){
+		return baseMapper.selectUserCount(userId,consignConfigId);
+	}
+
 }

+ 34 - 23
src/main/java/org/springblade/modules/finance/service/impl/OrderServiceImpl.java

@@ -18,11 +18,15 @@ package org.springblade.modules.finance.service.impl;
 
 import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.core.log.exception.ServiceException;
 import org.springblade.core.log.logger.BladeLogger;
 import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.modules.api.controller.AliPay01Controller;
 import org.springblade.modules.api.request.*;
 import org.springblade.modules.api.response.ConsignResponse;
 import org.springblade.modules.finance.entity.Order;
@@ -35,14 +39,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.shopping.entity.Consign;
-import org.springblade.modules.shopping.entity.Goods;
-import org.springblade.modules.shopping.entity.GoodsSpecs;
-import org.springblade.modules.shopping.entity.SpecItems;
-import org.springblade.modules.shopping.mapper.ConsignMapper;
-import org.springblade.modules.shopping.mapper.GoodsMapper;
-import org.springblade.modules.shopping.mapper.GoodsSpecsMapper;
-import org.springblade.modules.shopping.mapper.SpecItemsMapper;
+import org.springblade.modules.shopping.entity.*;
+import org.springblade.modules.shopping.mapper.*;
 import org.springblade.modules.system.entity.User;
 import org.springblade.modules.system.entity.UserApp;
 import org.springblade.modules.system.mapper.UserMapper;
@@ -66,6 +64,8 @@ import java.util.Objects;
 @Service
 public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
 
+	private static final Logger log = LoggerFactory.getLogger(OrderServiceImpl.class);
+
 	@Autowired
 	private UserMapper userMapper;
 
@@ -84,6 +84,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@Autowired
 	private OrderConsignMapper orderConsignMapper;
 
+	@Autowired
+	private ConsignConfigMapper consignConfigMapper;
+
 	@Autowired
 	private OrderGrantMapper orderGrantMapper;
 
@@ -107,7 +110,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		}
 		User user = userMapper.selectById(query.getUserId());
 		//生成订单号
-		String outTradeNo = PayKit.generateStr();
+		String outTradeNo = CommonUtil.genTimeID();
 		Order order = new Order();
 		order.setTenantId(tenantId);
 		if(user != null){
@@ -198,18 +201,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		if (query.getCreditScore() < 100){
 			throw new ServiceException("您的信誉分不够!");
 		}
+		//获取寄售商品数据
+		Consign consign = consignMapper.selectById(request.getConsignId());
+		if (consign == null){
+			throw new ServiceException("该寄售商品不存在!");
+		}
 		//已抢次数
-		int count = orderConsignMapper.selectCount(Wrappers.<OrderConsign>lambdaQuery().last(" where to_days(create_time)= to_days(now())"));
+		Integer count = orderConsignMapper.selectUserCount(request.getUserId(), consign.getConsignConfigId());
 		//可抢次数
 		float k = (float) (query.getCreditScore() / 100);
 		if(count >= k){
 			throw new ServiceException("您抢购的次数已用完!");
 		}
-		//获取寄售商品数据
-		Consign consign = consignMapper.selectById(request.getConsignId());
-		if (consign == null){
-			throw new ServiceException("该寄售商品不存在!");
-		}
 		if(consign.getIsSale() == 1){
 			throw new ServiceException("订单下架");
 		}
@@ -236,7 +239,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		}
 		User user = userMapper.selectById(query.getUserId());
 		//生成订单号
-		String outTradeNo = PayKit.generateStr();
+		String outTradeNo = CommonUtil.genTimeID();
 		Order order = new Order();
 		order.setTenantId(tenantId);
 		if(user != null){
@@ -356,7 +359,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			throw new ServiceException("您的信誉分不够!");
 		}
 		//已抢次数 (可抢订单数/日)
-		int count = orderConsignMapper.selectCount(Wrappers.<OrderConsign>lambdaQuery().last(" where to_days(create_time)= to_days(now())"));
+		Integer count = orderConsignMapper.selectUserCount(request.getUserId(), request.getConsignConfigId());
 		OrderGrant orderGrant = orderGrantMapper.selectOne(Wrappers.<OrderGrant>lambdaQuery().eq(OrderGrant::getOrderNo, request.getOrderNo()));
 		if (orderGrant != null){
 			if (orderGrant.getStatus() == 2){
@@ -409,7 +412,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		}
 		User user = userMapper.selectById(query.getUserId());
 		//生成订单号
-		String outTradeNo = PayKit.generateStr();
+		String outTradeNo = CommonUtil.genTimeID();
 		Order order = new Order();
 		order.setTenantId(tenantId);
 		if(user != null){
@@ -500,7 +503,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			return false;
 		}
 		if(queryOrder.getPayFlag() == 2){
-			logger.info("订单异常", "订单已支付成功,不能重复发起支付!订单号:" + outTradeNo);
+			log.info("订单异常", "订单已支付成功,不能重复发起支付!订单号:" + outTradeNo);
 			return false;
 		}
 		//更新订单
@@ -518,6 +521,16 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				logger.error("订单异常", "寄售无数据!订单号:" + outTradeNo);
 				return false;
 			}
+			//获取批次配置时间
+			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();
+			Date startDate = DateUtil.parse(startTime, DateUtil.PATTERN_DATE);
+			Date endDate = DateUtil.parse(endTime, DateUtil.PATTERN_DATE);
 			//更新寄售状态为已售出
 			if(queryConsign.getNowStock() == 0){
 				Consign updateConsign = new Consign();
@@ -556,10 +569,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			Double ratioPrice = NumberUtil.mul(query.getConsignPrice(), ratio);
 			Double obtainPrice = NumberUtil.add(query.getConsignPrice(), ratioPrice);
 			consign.setObtainPrice(obtainPrice); //取得价
-			//当前时间 + 寄售天数
-			Date date = cn.hutool.core.date.DateUtil.offsetDay(DateUtil.now(), query.getConsignDays());
-			consign.setStartTime(date);
-			consign.setEndTime(DateUtil.plusMinutes(date,30));
+			consign.setStartTime(startDate);
+			consign.setEndTime(endDate);
 			consign.setSaleDays(0);
 			int j = consignMapper.insert(consign);
 			if(j != 1){

+ 3 - 0
src/main/java/org/springblade/modules/finance/wrapper/OrderConsignWrapper.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.finance.wrapper;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.springblade.common.cache.DictBizCache;
 import org.springblade.common.cache.DictCache;
 import org.springblade.common.enums.DictBizEnum;
@@ -25,6 +26,7 @@ import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.SpringUtil;
 import org.springblade.modules.finance.entity.Order;
 import org.springblade.modules.finance.entity.OrderConsign;
+import org.springblade.modules.finance.service.IOrderConsignService;
 import org.springblade.modules.finance.vo.OrderConsignVO;
 import org.springblade.modules.finance.vo.OrderVO;
 import org.springblade.modules.shopping.entity.Goods;
@@ -87,4 +89,5 @@ public class OrderConsignWrapper extends BaseEntityWrapper<OrderConsign, OrderCo
 		return vo;
 	}
 
+
 }

+ 121 - 0
src/main/java/org/springblade/modules/platform/controller/UserAppController.java

@@ -0,0 +1,121 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.platform.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+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.platform.entity.UserCardInfo;
+import org.springblade.modules.platform.service.IUserCardInfoService;
+import org.springblade.modules.platform.vo.UserCardInfoVO;
+import org.springblade.modules.platform.wrapper.UserAppWrapper;
+import org.springblade.modules.system.entity.UserApp;
+import org.springblade.modules.system.vo.UserAppVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 用户列表 控制器
+ *
+ * @author BladeX
+ * @since 2022-03-28
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("platform/userApp")
+@Api(value = "用户表", tags = "用户表接口")
+public class UserAppController extends BladeController {
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入userApp")
+	public R<UserApp> detail(UserApp userApp) {
+		UserApp detail = userApp.selectOne(Condition.getQueryWrapper(userApp));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 app用户表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入userApp")
+	public R<IPage<UserAppVO>> list(UserApp userApp, Query query) {
+		IPage<UserApp> pages = userApp.selectPage(Condition.getPage(query), Condition.getQueryWrapper(userApp));
+		return R.data(UserAppWrapper.build().pageVO(pages));
+	}
+
+
+	/**
+	 * 新增 app用户表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入userApp")
+	public R save(@Valid @RequestBody UserApp userApp) {
+		return R.status(userApp.insert());
+	}
+
+	/**
+	 * 修改 app用户表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入userApp")
+	public R update(@Valid @RequestBody UserApp userApp) {
+		return R.status(userApp.updateById());
+	}
+
+	/**
+	 * 新增或修改 app用户表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入userApp")
+	public R submit(@Valid @RequestBody UserApp userApp) {
+		return R.status(userApp.insertOrUpdate());
+	}
+
+
+	/**
+	 * 删除 app用户表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		UserApp userApp = new UserApp();
+		List<Long> list = Func.toLongList(ids);
+		list.forEach(userApp::deleteById);
+		return R.status(true);
+	}
+
+
+}

+ 82 - 0
src/main/java/org/springblade/modules/platform/wrapper/UserAppWrapper.java

@@ -0,0 +1,82 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.platform.wrapper;
+
+import org.springblade.common.cache.DictBizCache;
+import org.springblade.common.cache.DictCache;
+import org.springblade.common.enums.DictBizEnum;
+import org.springblade.common.enums.DictEnum;
+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.system.entity.User;
+import org.springblade.modules.system.entity.UserApp;
+import org.springblade.modules.system.service.IUserService;
+import org.springblade.modules.system.vo.UserAppVO;
+
+import java.util.Objects;
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class UserAppWrapper extends BaseEntityWrapper<UserApp, UserAppVO> {
+
+	public static UserAppWrapper build() {
+		return new UserAppWrapper();
+	}
+
+	private static final IUserService userService;
+
+	static {
+		userService = SpringUtil.getBean(IUserService.class);
+	}
+
+	@Override
+	public UserAppVO entityVO(UserApp entity) {
+		UserAppVO vo = Objects.requireNonNull(BeanUtil.copy(entity, UserAppVO.class));
+		User user = userService.getById(vo.getUserId());
+		if (user != null){
+			vo.setRealName(user.getRealName());
+			vo.setUsername(user.getAccount());
+			vo.setCode(user.getCode());
+			vo.setBirthday(user.getBirthday());
+			vo.setName(user.getName());
+			vo.setSexDisplayName(DictCache.getValue(DictEnum.SEX,user.getSex()));
+			vo.setIsAuthDisplayName(DictCache.getValue(DictEnum.YES_NO,vo.getIsAuth()));
+			vo.setStateDisplayName(DictBizCache.getValue(DictBizEnum.USER_STATE, vo.getState()));
+		}
+		return vo;
+	}
+
+	/**
+	 * 信誉分
+	 *
+	 * @param userId 用户
+	 * @param creditScore 信誉积分
+	 * @return boolean
+	 */
+	public boolean creditScore(Long userId, Integer creditScore){
+		UserApp userApp = new UserApp();
+		userApp.setUserId(userId);
+		userApp.setCreditScore(creditScore);
+		return userApp.updateById();
+	}
+
+
+}

+ 12 - 2
src/main/java/org/springblade/modules/shopping/controller/BrandsController.java

@@ -34,6 +34,8 @@ import org.springblade.modules.shopping.vo.BrandsVO;
 import org.springblade.modules.shopping.service.IBrandsService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 品牌表 控制器
  *
@@ -70,6 +72,14 @@ public class BrandsController extends BladeController {
 		return R.data(pages);
 	}
 
+	@GetMapping("/selectList")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入brands")
+	public R<List<Brands>> selectList(Brands brands) {
+		List<Brands> pages = brandsService.list(Condition.getQueryWrapper(brands));
+		return R.data(pages);
+	}
+
 	/**
 	 * 自定义分页 品牌表
 	 */
@@ -111,7 +121,7 @@ public class BrandsController extends BladeController {
 		return R.status(brandsService.saveOrUpdate(brands));
 	}
 
-	
+
 	/**
 	 * 删除 品牌表
 	 */
@@ -122,5 +132,5 @@ public class BrandsController extends BladeController {
 		return R.status(brandsService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+
 }

+ 4 - 2
src/main/java/org/springblade/modules/shopping/controller/CartsController.java

@@ -34,6 +34,8 @@ import org.springblade.modules.shopping.vo.CartsVO;
 import org.springblade.modules.shopping.service.ICartsService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 购物车表 控制器
  *
@@ -111,7 +113,7 @@ public class CartsController extends BladeController {
 		return R.status(cartsService.saveOrUpdate(carts));
 	}
 
-	
+
 	/**
 	 * 删除 购物车表
 	 */
@@ -122,5 +124,5 @@ public class CartsController extends BladeController {
 		return R.status(cartsService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+
 }

+ 21 - 1
src/main/java/org/springblade/modules/shopping/controller/ConsignConfigController.java

@@ -24,11 +24,14 @@ import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
 import org.springblade.common.constant.CacheBizConstant;
+import org.springblade.core.log.annotation.ApiLog;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.modules.shopping.entity.Consign;
+import org.springblade.modules.shopping.service.IConsignService;
 import org.springblade.modules.shopping.wrapper.ConsignConfigWrapper;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -37,6 +40,8 @@ import org.springblade.modules.shopping.vo.ConsignConfigVO;
 import org.springblade.modules.shopping.service.IConsignConfigService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 寄售配置表 控制器
  *
@@ -50,6 +55,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 public class ConsignConfigController extends BladeController {
 
 	private final IConsignConfigService consignConfigService;
+	private final IConsignService consignService;
 	private final BladeRedis bladeRedis;
 
 	/**
@@ -74,6 +80,13 @@ public class ConsignConfigController extends BladeController {
 		return R.data(ConsignConfigWrapper.build().pageVO(pages));
 	}
 
+	@GetMapping("/selectList")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入consignConfig")
+	public R<List<ConsignConfig>> selectList(ConsignConfig consignConfig) {
+		return R.data(consignConfigService.list(Condition.getQueryWrapper(consignConfig)));
+	}
+
 	/**
 	 * 自定义分页 寄售配置表
 	 */
@@ -108,13 +121,20 @@ public class ConsignConfigController extends BladeController {
 	/**
 	 * 新增或修改 寄售配置表
 	 */
+	@ApiLog("新增或修改场次配置")
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入consignConfig")
 	public R submit(@Valid @RequestBody ConsignConfig consignConfig) {
 		//清空缓存
 		bladeRedis.del(CacheBizConstant.CACHE_CONSIGN_CONFIG);
-		return R.status(consignConfigService.saveOrUpdate(consignConfig));
+		boolean flg = consignConfigService.saveOrUpdate(consignConfig);
+		if (consignConfig.getId() != null){
+			//修改寄售表开始和结束时间
+			ConsignConfig query = consignConfigService.getById(consignConfig.getId());
+			consignConfigService.updateConsignTime(query);
+		}
+		return R.status(flg);
 	}
 
 

+ 22 - 3
src/main/java/org/springblade/modules/shopping/controller/ConsignController.java

@@ -16,7 +16,6 @@
  */
 package org.springblade.modules.shopping.controller;
 
-import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -25,12 +24,16 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import org.springblade.core.log.annotation.ApiLog;
 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.Func;
 import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.modules.shopping.entity.ConsignConfig;
 import org.springblade.modules.shopping.entity.Goods;
+import org.springblade.modules.shopping.service.IConsignConfigService;
 import org.springblade.modules.shopping.service.IGoodsService;
 import org.springblade.modules.shopping.wrapper.ConsignWrapper;
 import org.springframework.web.bind.annotation.*;
@@ -40,6 +43,8 @@ import org.springblade.modules.shopping.vo.ConsignVO;
 import org.springblade.modules.shopping.service.IConsignService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.Date;
+
 /**
  * 商品寄售表 控制器
  *
@@ -53,6 +58,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 public class ConsignController extends BladeController {
 
 	private final IConsignService consignService;
+	private final IConsignConfigService consignConfigService;
 	private final IGoodsService goodsService;
 
 	/**
@@ -73,7 +79,8 @@ public class ConsignController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入consign")
 	public R<IPage<ConsignVO>> list(Consign consign, Query query) {
-		IPage<Consign> pages = consignService.page(Condition.getPage(query), Condition.getQueryWrapper(consign));
+		IPage<Consign> pages = consignService.page(Condition.getPage(query),
+			Condition.getQueryWrapper(consign).orderByAsc("start_time"));
 		return R.data(ConsignWrapper.build().pageVO(pages));
 	}
 
@@ -111,6 +118,7 @@ public class ConsignController extends BladeController {
 	/**
 	 * 新增或修改 商品寄售表
 	 */
+	@ApiLog("新增修改寄售商品")
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入consign")
@@ -126,12 +134,23 @@ 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 startTime = ymd + " " + consignConfig.getStartTime();
+				String endTime = ymd + " " + consignConfig.getEndTime();
+				Date startDate = DateUtil.parse(startTime, DateUtil.PATTERN_DATE);
+				Date endDate = DateUtil.parse(endTime, DateUtil.PATTERN_DATE);
+				consign.setStartTime(startDate);
+				consign.setEndTime(endDate);
+			}
+		}
 		consign.setConsignUserId(0L);//0标识系统新增的
 		consign.setConsignState(1);//寄售中/待抢购
 		consign.setConsignFor(1);//寄售来源为商品
 		consign.setConsignDays(0);//寄售天数为0,表示没有限制
 		consign.setConsignType(0);//无
-		consign.setEndTime(DateUtil.offsetHour(consign.getStartTime(), 1)); //开始时间偏移一个小时
 		consign.setNowStock(consign.getTotalNum());//开始库存一样
 		return R.status(consignService.saveOrUpdate(consign));
 	}

+ 7 - 0
src/main/java/org/springblade/modules/shopping/entity/ConsignConfig.java

@@ -52,6 +52,13 @@ public class ConsignConfig implements Serializable {
 	@TableId(value = "id", type = IdType.ASSIGN_ID)
 	@ApiModelProperty(value = "主键ID")
 	private Long id;
+
+	/**
+	 * 标题
+	 */
+	@ApiModelProperty(value = "标题")
+	private String title;
+
 	/**
 	 * 开始时间
 	 */

+ 8 - 0
src/main/java/org/springblade/modules/shopping/mapper/ConsignConfigMapper.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.shopping.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.modules.shopping.entity.ConsignConfig;
 import org.springblade.modules.shopping.vo.ConsignConfigVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -39,4 +40,11 @@ public interface ConsignConfigMapper extends BaseMapper<ConsignConfig> {
 	 */
 	List<ConsignConfigVO> selectConsignConfigPage(IPage page, ConsignConfigVO consignConfig);
 
+	/**
+	 * 批量更新时间
+	 * @param consignConfig 批次配置
+	 * @return boolean
+	 */
+	boolean updateConsignTime(@Param("consignConfig") ConsignConfig consignConfig);
+
 }

+ 8 - 0
src/main/java/org/springblade/modules/shopping/mapper/ConsignConfigMapper.xml

@@ -15,4 +15,12 @@
         select * from t_consign_config where is_deleted = 0
     </select>
 
+    <!--批量更新时间 -->
+    <update id="updateConsignTime" parameterType="org.springblade.modules.shopping.entity.ConsignConfig">
+        UPDATE t_consign t
+        SET t.start_time = concat(date_format(t.start_time, '%Y-%m-%d'),CONCAT(' ',date_format(#{consignConfig.startTime}, '%H:%i:%s'))),
+        t.end_time = concat(date_format(t.start_time, '%Y-%m-%d'),CONCAT(' ',date_format(#{consignConfig.endTime}, '%H:%i:%s')))
+        WHERE t.now_stock > 0 AND t.consign_config_id = #{consignConfig.id};
+    </update>
+
 </mapper>

+ 3 - 0
src/main/java/org/springblade/modules/shopping/mapper/ConsignMapper.xml

@@ -22,6 +22,7 @@
         SELECT * FROM t_consign WHERE is_deleted = 0
     </select>
 
+    <!--抢购-->
     <select id="randomConsign" resultMap="consignResultMap">
         SELECT
         *
@@ -31,6 +32,7 @@
         consign_config_id = #{consignConfigId}
         AND now_stock > 0
         AND is_sale = 2
+        AND TO_DAYS(now()) BETWEEN TO_DAYS(start_time) and TO_DAYS(end_time)
         AND t.id >= (
         RAND() * (SELECT max(id) FROM t_consign)
         )
@@ -38,4 +40,5 @@
         LIMIT 1
     </select>
 
+
 </mapper>

+ 7 - 0
src/main/java/org/springblade/modules/shopping/service/IConsignConfigService.java

@@ -53,4 +53,11 @@ public interface IConsignConfigService extends IService<ConsignConfig> {
 	 */
 	Kv selectCacheConsignConfig();
 
+	/**
+	 * 批量更新时间
+	 * @param consignConfig 批次配置
+	 * @return boolean
+	 */
+	boolean updateConsignTime(ConsignConfig consignConfig);
+
 }

+ 15 - 10
src/main/java/org/springblade/modules/shopping/service/impl/ConsignConfigServiceImpl.java

@@ -69,14 +69,14 @@ public class ConsignConfigServiceImpl extends ServiceImpl<ConsignConfigMapper, C
 		List<ConsignConfig> list = selectCacheList();
 		String todayYmd = DateUtil.format(DateUtil.now(), DateUtil.PATTERN_DATE);
 		for (ConsignConfig consignConfig : list) {
-			String hms = DateUtil.format(consignConfig.getStartTime(), DateUtil.PATTERN_TIME);
-			String startTime = todayYmd + " " + hms;
-			Date startDate = DateUtil.parse(startTime, DateUtil.PATTERN_DATETIME);
-			long seconds = DateUtil.between(DateUtil.now(), startDate).getSeconds();
-			if (seconds > 0) {
-				String endHms = DateUtil.format(consignConfig.getStartTime(), DateUtil.PATTERN_TIME);
-				String endTime = todayYmd + " " + endHms;
-				kv.set("startTime",startTime)
+			String shims = DateUtil.format(consignConfig.getStartTime(), DateUtil.PATTERN_TIME);
+			String hims = DateUtil.format(consignConfig.getEndTime(), DateUtil.PATTERN_TIME);
+			String startTime = todayYmd + " " + shims;
+			String endTime = todayYmd + " " + hims;
+			Date endDate = DateUtil.parse(endTime, DateUtil.PATTERN_DATETIME);
+			long secondEnd = DateUtil.between(DateUtil.now(), endDate).getSeconds();
+			if (secondEnd > 0) {
+				kv.set("startTime", startTime)
 					.set("endTime", endTime)
 					.set("id",consignConfig.getId());
 				return kv;
@@ -87,11 +87,16 @@ public class ConsignConfigServiceImpl extends ServiceImpl<ConsignConfigMapper, C
 		String nextYmd = DateUtil.format(date, DateUtil.PATTERN_DATE);
 		String startTime = nextYmd + " " + DateUtil.format(consignConfig.getStartTime(), DateUtil.PATTERN_TIME);
 		String endHms = DateUtil.format(consignConfig.getEndTime(), DateUtil.PATTERN_TIME);
-		String endTime = todayYmd + " " + endHms;
-		kv.set("startTime",startTime)
+		String endTime = nextYmd + " " + endHms;
+		kv.set("startTime", startTime)
 			.set("endTime", endTime)
 			.set("id",list.get(0).getId());
 		return kv;
 	}
 
+	@Override
+	public boolean updateConsignTime(ConsignConfig consignConfig) {
+		return baseMapper.updateConsignTime(consignConfig);
+	}
+
 }

+ 8 - 7
src/main/java/org/springblade/modules/system/vo/UserAppVO.java

@@ -63,9 +63,12 @@ public class UserAppVO extends UserApp {
 	@JsonIgnore
 	private String parentPath;
 
-	@JsonIgnore
+	@ApiModelProperty(value = "是否有特殊权限")
 	private Integer isAuth;
 
+	@ApiModelProperty(value = "是否有特殊权限")
+	private String isAuthDisplayName;
+
 	@ApiModelProperty(value = "是否认证")
 	private Integer isOauth;
 
@@ -89,15 +92,13 @@ public class UserAppVO extends UserApp {
 	@ApiModelProperty(value = "身份证号")
 	private String idCard;
 
-	/**
-	 * 正面
-	 */
 	@ApiModelProperty(value = "正面")
 	private String positiveUrl;
-	/**
-	 * 反面
-	 */
+
 	@ApiModelProperty(value = "反面")
 	private String negativeUrl;
 
+	@ApiModelProperty("创建时间")
+	private Date createTime;
+
 }

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

@@ -13,7 +13,7 @@ spring:
     #  commandTimeout: 5000
   datasource:
     # MySql
-    url: jdbc:mysql://localhost:3306/t-test?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+    url: jdbc:mysql://127.0.0.1:3306/t-dev?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
     username: root
     password: 123456
     # PostgreSQL
@@ -82,7 +82,7 @@ alipay:
     private-key: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCU4XTbNjnNOmuEnwBEgUBOVLK5CaUiUFKEkVW1/2sTlijARZzLtzwXfbkvzHEhCSu+E+OA1Futbh5HwNAC06bvqYDS+TXrFuZ0LcDaU92lk5Hp/ed8NhRXtm0gss1TS0vebOq+3kejErIvVCg9kNMrYMrmdf8G0+zKlCp3vrfdM37IeLXp3GoOckNzHh/LT7rLd7/9QcdSCPixPSwusrfCusw3H093cuWkV9WX4Go/zHTL9rAEwJPOn36OhyVc1oG113ZJiVg7KgsZGOCJJyh9BvlKq2vuKxnylQwq9Kh5e+BfP2FSWs7a1XMj/79JsZTxztJ9tFqcSXQh99vq1nd1AgMBAAECggEAVglIT5oxoxEcq0J7lBshf2Lg+Z/CR2clmKioYImfZm1DVYGlD/DvECA+kYnS4qV7GthBg+S0qi/V3d9mFgwcD6nj4YfVCets+Dyskz8d+p6iFxf820IhVWL+A4Rwta7wxDQrIGwx9+JJCKLYsmNsNUg1WSNdYqO71oHzXMnhVTmYJ6sKOrrBucyI4Ydu9UbfN+DRRGD9seL+Nxh1V2PPXs4ftk2kRlG18LaTPgFba1g8QBIpGDR9gFqM+DvBHUxAWsPRnL1+q0c6o5Ndk7W5f7Ob1zxF/lgqHudiG38jItkwc7MLMOYjbV5wiJPZc93nsHS1CKPSEX9/snNLnx2LQQKBgQDMyLBVVasfTMQpMjyi+Jof9JLHPiRP3dEHwZECUgfdWhPoidLjK9y1wszmCLrcg01842WufrpbJ1QXs+g8x6+DhLHvcKum1znsvQKWdy/2V6a2eahNHsYi1Qus+N0dFgotfZwfElfkIU/jAwh6OnYPCXQCVmdvoxzmdk81L04d5QKBgQC6HY6EZ8o4mo4CzDss2qxT2oKuiI0clnbDPC9LJzkRBVbHosx6AO+C3RyfREZxMzNhYW3XnozifDyRw6rlvI6toE3l9ku71dJS1aKZwbH/h0rdHXXqDHARYc9rdwCzOM2t2Kve/PgXxCDQdwY/m0deXM22oKdOlb7miz2YTGLaUQKBgEg8qucPNzPtUmztybH7W/LVxUj/RLPfnTLNNyfIY/nTIp6ur3NvL4X2V2z1u2S59IWPeXjaP0aUUvehgNSf4+vSzSmXZxWNamN2MQl+ta6CMM7Bj3rU1jPHTz0O9ICkG6b8Xiwfvl082v9LPJxRLwAS55dDf21D7pflN/+c1kN5AoGARaRHrt3TeojCuONJBUiyERKDseFgxCC9QeLkY3/Cx86yoTMWxlRRSyuHyUTYAwXApSC65GLsntcUJwsLiLmcvfVtEK6vuhKRh/Nuy5ACFfa/Gawrci/DQ43Q+opmFaoctH+OGHuaLfJywO64xNZKx1F8nGjTEgHQlB3oJ3P1zXECgYBW/GRUU+SevGeLjZTZ9WqG+ztseItnmEwmar9tGhR9TNv3vDiL5/fsAfI8ApMiIzDe6+QfS5Lxx5rD6V4Et/zBpsf8JzqP2eDiTe9UiHxDr2v5NIxelf404VZcdRh83u84lCJTa/ZYanFu94UW6h70MHhDWtiWddtFR3EXt5hD9w==
     #支付宝公钥
     alipay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhIxPBQL0OKBc6fcU/9PdVTMA7L2s314oU2w1q06ywQSDdhF3RY1Bo0Eqh4Zg8QpPirFeyAc4rhFjyKZRlngQXrybcAhUfswD86QQGodObe3aA9bbWdXiTt10Q5CBk5GImadNiEW6Adh+0bY5ezf1RbxIjbGDfH6x5gatZnpjPswiHMQnskZtg9JSfE2u8WEKuSaH8yhnkllHpIHWnWvFvXwNVNycXdmDrEe7gIB1yCouNK6/DZ7IQH2AajSuvbxmCqO0MzywEfgvLqE0GFVsKKmXvgJebRAnW9RmGhmrxvEIceXCjR3tbxM9gX8lioDlqKnBootTgAbjIJ5VrPvKPwIDAQAB
-    # 商户支付宝账号
+    # 商户支付宝账号(平台支付宝账号)
     payee-user-id: 2088341967443472
     # 回调域名
     domain: https://wine.gzzzyd.com

+ 47 - 5
src/main/resources/application-prod.yml

@@ -6,7 +6,7 @@ spring:
     ##生产环境推荐使用阿里云高可用redis服务并设置密码
     host: 127.0.0.1
     port: 6379
-    password:
+    password: gzzhkj9988$
     database: 0
     ssl: false
     ##redis 集群环境配置
@@ -14,9 +14,9 @@ spring:
     #  nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
     #  commandTimeout: 5000
   datasource:
-    url: jdbc:mysql://localhost:3306/bladex_boot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
-    username: root
-    password: root
+    url: jdbc:mysql://rm-2vc08fvh37k5837x6.mysql.cn-chengdu.rds.aliyuncs.com:3306/t-prod?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+    username: gzzhkj
+    password: gzzhkj9988$
 
 #第三方登陆
 social:
@@ -32,9 +32,51 @@ blade:
     ##将docker脚本部署的redis服务映射为宿主机ip
     ##生产环境推荐使用阿里云高可用redis服务并设置密码
     address: redis://127.0.0.1:6379
-    password: 123456
+    password: gzzhkj9988$
   #本地文件上传
   file:
     remote-mode: true
     upload-domain: http://localhost:8999
     remote-path: /usr/share/nginx/html
+wxpay:
+  appId: wx3064b51f7bace3c8
+  appSecret: 89e3e5afd8623772bf5a56f460af839a
+  mchId: 1616233610
+  partnerKey: 89e3e5afd8623772bf5a56f460af839a
+  certPath: /usr/local/liquor/cert/apiclient_cert.pem
+  domain: https://wine.gzzzyd.com
+v3:
+  appId: wx3064b51f7bace3c8
+  keyPath: /usr/local/liquor/cert/apiclient_key.pem
+  certPath: /usr/local/liquor/cert/apiclient_cert.pem
+  certP12Path: /usr/local/liquor/cert/apiclient_cert.p12
+  platformCertPath: /usr/local/liquor/cert/wx_cert.pem
+  mchId: 1616233610
+  apiKey3: 89e3e5afd8623772bf5a56f460af839a
+  apiKey: 89e3e5afd8623772bf5a56f460af839a
+  domain: https://wine.gzzzyd.com
+alipay:
+  ijpay:
+    appId: 2021003125657245
+    privateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCU4XTbNjnNOmuEnwBEgUBOVLK5CaUiUFKEkVW1/2sTlijARZzLtzwXfbkvzHEhCSu+E+OA1Futbh5HwNAC06bvqYDS+TXrFuZ0LcDaU92lk5Hp/ed8NhRXtm0gss1TS0vebOq+3kejErIvVCg9kNMrYMrmdf8G0+zKlCp3vrfdM37IeLXp3GoOckNzHh/LT7rLd7/9QcdSCPixPSwusrfCusw3H093cuWkV9WX4Go/zHTL9rAEwJPOn36OhyVc1oG113ZJiVg7KgsZGOCJJyh9BvlKq2vuKxnylQwq9Kh5e+BfP2FSWs7a1XMj/79JsZTxztJ9tFqcSXQh99vq1nd1AgMBAAECggEAVglIT5oxoxEcq0J7lBshf2Lg+Z/CR2clmKioYImfZm1DVYGlD/DvECA+kYnS4qV7GthBg+S0qi/V3d9mFgwcD6nj4YfVCets+Dyskz8d+p6iFxf820IhVWL+A4Rwta7wxDQrIGwx9+JJCKLYsmNsNUg1WSNdYqO71oHzXMnhVTmYJ6sKOrrBucyI4Ydu9UbfN+DRRGD9seL+Nxh1V2PPXs4ftk2kRlG18LaTPgFba1g8QBIpGDR9gFqM+DvBHUxAWsPRnL1+q0c6o5Ndk7W5f7Ob1zxF/lgqHudiG38jItkwc7MLMOYjbV5wiJPZc93nsHS1CKPSEX9/snNLnx2LQQKBgQDMyLBVVasfTMQpMjyi+Jof9JLHPiRP3dEHwZECUgfdWhPoidLjK9y1wszmCLrcg01842WufrpbJ1QXs+g8x6+DhLHvcKum1znsvQKWdy/2V6a2eahNHsYi1Qus+N0dFgotfZwfElfkIU/jAwh6OnYPCXQCVmdvoxzmdk81L04d5QKBgQC6HY6EZ8o4mo4CzDss2qxT2oKuiI0clnbDPC9LJzkRBVbHosx6AO+C3RyfREZxMzNhYW3XnozifDyRw6rlvI6toE3l9ku71dJS1aKZwbH/h0rdHXXqDHARYc9rdwCzOM2t2Kve/PgXxCDQdwY/m0deXM22oKdOlb7miz2YTGLaUQKBgEg8qucPNzPtUmztybH7W/LVxUj/RLPfnTLNNyfIY/nTIp6ur3NvL4X2V2z1u2S59IWPeXjaP0aUUvehgNSf4+vSzSmXZxWNamN2MQl+ta6CMM7Bj3rU1jPHTz0O9ICkG6b8Xiwfvl082v9LPJxRLwAS55dDf21D7pflN/+c1kN5AoGARaRHrt3TeojCuONJBUiyERKDseFgxCC9QeLkY3/Cx86yoTMWxlRRSyuHyUTYAwXApSC65GLsntcUJwsLiLmcvfVtEK6vuhKRh/Nuy5ACFfa/Gawrci/DQ43Q+opmFaoctH+OGHuaLfJywO64xNZKx1F8nGjTEgHQlB3oJ3P1zXECgYBW/GRUU+SevGeLjZTZ9WqG+ztseItnmEwmar9tGhR9TNv3vDiL5/fsAfI8ApMiIzDe6+QfS5Lxx5rD6V4Et/zBpsf8JzqP2eDiTe9UiHxDr2v5NIxelf404VZcdRh83u84lCJTa/ZYanFu94UW6h70MHhDWtiWddtFR3EXt5hD9w==
+    publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhIxPBQL0OKBc6fcU/9PdVTMA7L2s314oU2w1q06ywQSDdhF3RY1Bo0Eqh4Zg8QpPirFeyAc4rhFjyKZRlngQXrybcAhUfswD86QQGodObe3aA9bbWdXiTt10Q5CBk5GImadNiEW6Adh+0bY5ezf1RbxIjbGDfH6x5gatZnpjPswiHMQnskZtg9JSfE2u8WEKuSaH8yhnkllHpIHWnWvFvXwNVNycXdmDrEe7gIB1yCouNK6/DZ7IQH2AajSuvbxmCqO0MzywEfgvLqE0GFVsKKmXvgJebRAnW9RmGhmrxvEIceXCjR3tbxM9gX8lioDlqKnBootTgAbjIJ5VrPvKPwIDAQAB
+    appCertPath: /usr/local/liquor/alipay/appCertPublicKey_2021003125657245.crt
+    aliPayCertPath: /usr/local/liquor/alipay/alipayCertPublicKey_RSA2.crt
+    aliPayRootCertPath: /usr/local/liquor/alipay/alipayRootCert.crt
+    serverUrl: https://openapi.alipay.com/gateway.do
+    domain: https://wine.gzzzyd.com
+  sdk:
+    dev: false #默认false,为true表示使用沙箱环境
+    sign-type: RSA2 #签名算法
+    app-id: 2021003125657245 #应用ID
+    #应用私钥
+    private-key: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCU4XTbNjnNOmuEnwBEgUBOVLK5CaUiUFKEkVW1/2sTlijARZzLtzwXfbkvzHEhCSu+E+OA1Futbh5HwNAC06bvqYDS+TXrFuZ0LcDaU92lk5Hp/ed8NhRXtm0gss1TS0vebOq+3kejErIvVCg9kNMrYMrmdf8G0+zKlCp3vrfdM37IeLXp3GoOckNzHh/LT7rLd7/9QcdSCPixPSwusrfCusw3H093cuWkV9WX4Go/zHTL9rAEwJPOn36OhyVc1oG113ZJiVg7KgsZGOCJJyh9BvlKq2vuKxnylQwq9Kh5e+BfP2FSWs7a1XMj/79JsZTxztJ9tFqcSXQh99vq1nd1AgMBAAECggEAVglIT5oxoxEcq0J7lBshf2Lg+Z/CR2clmKioYImfZm1DVYGlD/DvECA+kYnS4qV7GthBg+S0qi/V3d9mFgwcD6nj4YfVCets+Dyskz8d+p6iFxf820IhVWL+A4Rwta7wxDQrIGwx9+JJCKLYsmNsNUg1WSNdYqO71oHzXMnhVTmYJ6sKOrrBucyI4Ydu9UbfN+DRRGD9seL+Nxh1V2PPXs4ftk2kRlG18LaTPgFba1g8QBIpGDR9gFqM+DvBHUxAWsPRnL1+q0c6o5Ndk7W5f7Ob1zxF/lgqHudiG38jItkwc7MLMOYjbV5wiJPZc93nsHS1CKPSEX9/snNLnx2LQQKBgQDMyLBVVasfTMQpMjyi+Jof9JLHPiRP3dEHwZECUgfdWhPoidLjK9y1wszmCLrcg01842WufrpbJ1QXs+g8x6+DhLHvcKum1znsvQKWdy/2V6a2eahNHsYi1Qus+N0dFgotfZwfElfkIU/jAwh6OnYPCXQCVmdvoxzmdk81L04d5QKBgQC6HY6EZ8o4mo4CzDss2qxT2oKuiI0clnbDPC9LJzkRBVbHosx6AO+C3RyfREZxMzNhYW3XnozifDyRw6rlvI6toE3l9ku71dJS1aKZwbH/h0rdHXXqDHARYc9rdwCzOM2t2Kve/PgXxCDQdwY/m0deXM22oKdOlb7miz2YTGLaUQKBgEg8qucPNzPtUmztybH7W/LVxUj/RLPfnTLNNyfIY/nTIp6ur3NvL4X2V2z1u2S59IWPeXjaP0aUUvehgNSf4+vSzSmXZxWNamN2MQl+ta6CMM7Bj3rU1jPHTz0O9ICkG6b8Xiwfvl082v9LPJxRLwAS55dDf21D7pflN/+c1kN5AoGARaRHrt3TeojCuONJBUiyERKDseFgxCC9QeLkY3/Cx86yoTMWxlRRSyuHyUTYAwXApSC65GLsntcUJwsLiLmcvfVtEK6vuhKRh/Nuy5ACFfa/Gawrci/DQ43Q+opmFaoctH+OGHuaLfJywO64xNZKx1F8nGjTEgHQlB3oJ3P1zXECgYBW/GRUU+SevGeLjZTZ9WqG+ztseItnmEwmar9tGhR9TNv3vDiL5/fsAfI8ApMiIzDe6+QfS5Lxx5rD6V4Et/zBpsf8JzqP2eDiTe9UiHxDr2v5NIxelf404VZcdRh83u84lCJTa/ZYanFu94UW6h70MHhDWtiWddtFR3EXt5hD9w==
+    #支付宝公钥
+    alipay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhIxPBQL0OKBc6fcU/9PdVTMA7L2s314oU2w1q06ywQSDdhF3RY1Bo0Eqh4Zg8QpPirFeyAc4rhFjyKZRlngQXrybcAhUfswD86QQGodObe3aA9bbWdXiTt10Q5CBk5GImadNiEW6Adh+0bY5ezf1RbxIjbGDfH6x5gatZnpjPswiHMQnskZtg9JSfE2u8WEKuSaH8yhnkllHpIHWnWvFvXwNVNycXdmDrEe7gIB1yCouNK6/DZ7IQH2AajSuvbxmCqO0MzywEfgvLqE0GFVsKKmXvgJebRAnW9RmGhmrxvEIceXCjR3tbxM9gX8lioDlqKnBootTgAbjIJ5VrPvKPwIDAQAB
+    # 商户支付宝账号
+    payee-user-id: 2088341967443472
+    # 回调域名
+    domain: https://wine.gzzzyd.com
+    app-cert-path: /usr/local/liquor/alipay/appCertPublicKey_2021003125657245.crt
+    ali-pay-cert-path: /usr/local/liquor/alipay/alipayCertPublicKey_RSA2.crt
+    ali-pay-root-cert-path: /usr/local/liquor/alipay/alipayRootCert.crt