Bläddra i källkod

Merge remote-tracking branch 'origin/dev' into dev

hmp 4 år sedan
förälder
incheckning
a53f84c299

+ 2 - 2
ldt-core/src/main/java/org/springblade/common/enums/FrozenType.java

@@ -15,8 +15,8 @@ import lombok.Getter;
 @AllArgsConstructor
 @Getter
 public enum FrozenType {
-	POINT("POINT", "积分"),
-	BALANCE("BALANCE", "余额"),
+	POINT("POINT", "渠道积分"),
+	BALANCE("BALANCE", "普通积分"),
 	;
 
 	@EnumValue

+ 30 - 20
ldt-core/src/main/java/org/springblade/common/utils/OtpUtils.java

@@ -9,6 +9,7 @@ import javax.crypto.spec.SecretKeySpec;
 import java.lang.reflect.UndeclaredThrowableException;
 import java.math.BigInteger;
 import java.security.GeneralSecurityException;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -16,18 +17,26 @@ import java.util.Objects;
 
 /**
  * @author: lianghanqiang
- * @description:	TOP 一次性加密口令
+ * @description: TOP 一次性加密口令
  * @since: 8/2/21 -- 10:48 AM
  */
 public class OtpUtils {
-//	649957
+	//	649957
 	public static void main(String[] args) {
-		System.out.println(generateMyTOTP("1430417679637835778"));
+		Date date = new Date();
+		System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(date));
+		System.out.println(date.getTime());
+		System.out.println(generateMyTOTP("1430417679637835778", date.getTime()));
+		System.out.println("----------------------------------------");
+		date.setTime(date.getTime() + 60 * 1000);
+		System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(date));
+		System.out.println(date.getTime());
+		System.out.println(generateMyTOTP("1430417679637835778", date.getTime()));
 	}
 
 	/**
-	 * 	id变形常量
-	 * */
+	 * id变形常量
+	 */
 	private static final Long TRANSFORM_PARAMS = 95963L;
 
 	/**
@@ -76,15 +85,14 @@ public class OtpUtils {
 	 * @param id
 	 * @return String
 	 */
-	public static String generateMyTOTP(String id) {
-		Assert.notBlank(id,()-> new ServiceException(ResCode.ID_NOT_NULL));
-		long now = new Date().getTime();
+	public static String generateMyTOTP(String id, long now) {
+		Assert.notBlank(id, () -> new ServiceException(ResCode.ID_NOT_NULL));
+		//long now = new Date().getTime();
 		String time = Long.toHexString(timeFactor(now)).toUpperCase();
 		return generateTOTP(id + SECRET_KEY, time);
 	}
 
 
-
 	/**
 	 * 获取动态因子
 	 *
@@ -163,21 +171,23 @@ public class OtpUtils {
 
 
 	/**
-	 * 	校验口令
-	 * */
-	public static boolean validate(String id,String code) {
-		String s = generateMyTOTP(id);
-		return Objects.equals(s,code);
+	 * 校验口令
+	 */
+	public static boolean validate(String id, String code) {
+		Date date = new Date();
+		String current = generateMyTOTP(id, date.getTime());
+		String before = generateMyTOTP(id, date.getTime() + 60 * 1000);
+		return Objects.equals(current, code) || Objects.equals(before, code);
 	}
 
 
 	/**
-	 * 	根据code获取用户Id
-	 * */
-	public static Map<String,String> decodeParams(String code) {
-		return new HashMap<String,String>(){{
-			put(PARAMS_ID,code.substring(0,19));
-			put(PARAMS_SECRET,code.substring(code.length()-6));
+	 * 根据code获取用户Id
+	 */
+	public static Map<String, String> decodeParams(String code) {
+		return new HashMap<String, String>() {{
+			put(PARAMS_ID, code.substring(0, 19));
+			put(PARAMS_SECRET, code.substring(code.length() - 6));
 		}};
 	}
 

+ 11 - 1
ldt-core/src/main/java/org/springblade/gateway/web_gateway/controller/PressureTestController.java

@@ -32,6 +32,7 @@ import org.springblade.wx.constant.MiniProgramType;
 import org.springblade.wx.service.WeChatService;
 import org.springblade.yeePay.common.YeePayConst;
 import org.springblade.yeePay.common.YeepayApiConstant;
+import org.springblade.yeePay.service.YeePayService;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.util.Assert;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -39,6 +40,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
@@ -62,6 +64,7 @@ public class PressureTestController {
 	private Trade trade;
 	private ConfigForShop configForShop;
 	private WeChatService weChatService;
+	private YeePayService yeePayService;
 
 	@PostMapping("/userBalanceWithdraw")
 	@ApiOperation(value = "用户余额提现(结算)")
@@ -133,7 +136,7 @@ public class PressureTestController {
 		clientTradeDto.setOpenId("ocWnO5eEuHMhl7RV_ebnp_Ff9A0M");
 		clientTradeDto.setShopId(1440871712886366210L);*/
 
-		synchronized (clientTradeDto.getUserId().toString().intern()){
+		synchronized (clientTradeDto.getUserId().toString().intern()) {
 			LoginUser loginUser = loginUserService.getById(clientTradeDto.getUserId());
 			Assert.notNull(loginUser, () -> {
 				throw new ServiceException(ResCode.USER_NOT_FOUNT);
@@ -201,4 +204,11 @@ public class PressureTestController {
 		weChatService.sendTemplateMessage(openId, MessageTemplate.PAYMENT_NOTICE, content, configForShop.getPaymentPage(), MiniProgramType.SHOP);
 	}
 
+	@PostMapping("/deCodeNotifyData")
+	@ApiModelProperty("回调消息解密")
+	public R deCodeNotifyData(HttpServletRequest request) {
+		JSONObject jsonObject = yeePayService.deCodeNotifyData(request.getParameterMap().get("cipherText")[0]);
+		return R.data(jsonObject.toJSONString());
+	}
+
 }

+ 86 - 24
ldt-core/src/main/java/org/springblade/ldt/bills/controller/FrozenRecController.java

@@ -16,32 +16,44 @@
  */
 package org.springblade.ldt.bills.controller;
 
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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 com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-import javax.validation.Valid;
-
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.common.aop.core.TenantAop;
+import org.springblade.common.constant.Salesman;
+import org.springblade.common.utils.ExcelWriteUtil;
+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.springframework.web.bind.annotation.*;
-import org.springframework.web.bind.annotation.RequestParam;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.ldt.bills.entity.FrozenRec;
+import org.springblade.ldt.bills.service.IFrozenRecService;
 import org.springblade.ldt.bills.vo.FrozenRecVO;
 import org.springblade.ldt.bills.wrapper.FrozenRecWrapper;
-import org.springblade.ldt.bills.service.IFrozenRecService;
-import org.springblade.core.boot.ctrl.BladeController;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.Date;
+import java.util.Map;
 
 /**
- *  控制器
+ * 控制器
  *
  * @author BladeX
  * @since 2021-10-30
  */
+@Slf4j
 @RestController
 @AllArgsConstructor
 @RequestMapping("ldt_bills/frozenrec")
@@ -62,19 +74,19 @@ public class FrozenRecController extends BladeController {
 	}
 
 	/**
-	 * 分页 
+	 * 分页
 	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "分页", notes = "传入frozenRec")
-	public R<IPage<FrozenRecVO>> list(FrozenRec frozenRec, Query query) {
-		IPage<FrozenRec> pages = frozenRecService.page(Condition.getPage(query), Condition.getQueryWrapper(frozenRec));
-		return R.data(FrozenRecWrapper.build().pageVO(pages));
-	}
+//	@GetMapping("/list")
+//	@ApiOperationSupport(order = 2)
+//	@ApiOperation(value = "分页", notes = "传入frozenRec")
+//	public R<IPage<FrozenRecVO>> list(FrozenRec frozenRec, Query query) {
+//		IPage<FrozenRec> pages = frozenRecService.page(Condition.getPage(query), Condition.getQueryWrapper(frozenRec));
+//		return R.data(FrozenRecWrapper.build().pageVO(pages));
+//	}
 
 
 	/**
-	 * 自定义分页 
+	 * 自定义分页
 	 */
 	@GetMapping("/page")
 	@ApiOperationSupport(order = 3)
@@ -85,7 +97,7 @@ public class FrozenRecController extends BladeController {
 	}
 
 	/**
-	 * 新增 
+	 * 新增
 	 */
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
@@ -95,7 +107,7 @@ public class FrozenRecController extends BladeController {
 	}
 
 	/**
-	 * 修改 
+	 * 修改
 	 */
 	@PostMapping("/update")
 	@ApiOperationSupport(order = 5)
@@ -105,7 +117,7 @@ public class FrozenRecController extends BladeController {
 	}
 
 	/**
-	 * 新增或修改 
+	 * 新增或修改
 	 */
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
@@ -114,9 +126,9 @@ public class FrozenRecController extends BladeController {
 		return R.status(frozenRecService.saveOrUpdate(frozenRec));
 	}
 
-	
+
 	/**
-	 * 删除 
+	 * 删除
 	 */
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 7)
@@ -125,5 +137,55 @@ public class FrozenRecController extends BladeController {
 		return R.status(frozenRecService.deleteLogic(Func.toLongList(ids)));
 	}
 
-	
+	/**
+	 * 分页 冻结记录
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入frozenRec")
+	public R<IPage<FrozenRecVO>> list(FrozenRec frozenRec, Query query, Date createTimeStart, Date createTimeEnd, String key) {
+		QueryWrapper<FrozenRec> queryWrapper = Condition.getQueryWrapper(frozenRec);
+		//添加创建时间条件
+		if (createTimeStart != null && createTimeEnd != null) {
+			queryWrapper.lambda().between(FrozenRec::getCreateTime, createTimeStart, createTimeEnd);
+		}
+		//添加关键字key查询条件
+		if (StringUtils.isNotBlank(key)) {
+			queryWrapper.lambda().and(wq -> {
+				wq.eq(FrozenRec::getId, key);
+			});
+		}
+		//循环查询
+		return R.data(FrozenRecWrapper.build().pageVO(frozenRecService.page(Condition.getPage(query), queryWrapper)));
+	}
+
+	/**
+	 * 生成列表
+	 */
+	@PostMapping("/generateList")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "生成列表", notes = "传入frozenRec")
+	@TenantAop(salesman = Salesman.roleName)
+	public void generateList(FrozenRec frozenRec, Query query, Date createTimeStart, Date createTimeEnd,
+							 String key,
+							 @RequestParam String keyValue,
+							 HttpServletResponse response) {
+		try {
+			R<IPage<FrozenRecVO>> page = this.list(frozenRec, query, createTimeStart, createTimeEnd, key);
+			//判断是否为空
+			if (ObjectUtils.isNotEmpty(page) && ObjectUtils.isNotEmpty(page.getData()) && ObjectUtils.isNotEmpty(page.getData().getRecords())) {
+				//键值对
+				Map<String, String> titleMap = JSONObject.parseObject(keyValue, Map.class);
+				if (ObjectUtils.isNotEmpty(titleMap)) {
+					//写入到Excel
+					ExcelWriteUtil.writeToResponse(response, DateUtil.now(), "冻结记录表", titleMap, page.getData().getRecords(), FrozenRecVO.class);
+					return;
+				}
+			}
+		} catch (Exception e) {
+			log.error(e.getMessage());
+		}
+	}
+
+
 }

+ 5 - 1
ldt-core/src/main/java/org/springblade/ldt/bills/entity/FrozenRec.java

@@ -66,11 +66,15 @@ public class FrozenRec extends BaseEntity {
 	 */
 	@ApiModelProperty(value = "冻结用户id")
 	private Long userId;
-
 	/**
 	 * 冻结状态
 	 */
 	@ApiModelProperty(value = "冻结状态")
 	private FrozenSatus frozenSatus;
+	/**
+	 * 冻结用户名
+	 */
+	@ApiModelProperty(value = "冻结用户名")
+	private String userName;
 
 }

+ 1 - 0
ldt-core/src/main/java/org/springblade/ldt/bills/service/impl/FrozenRecServiceImpl.java

@@ -55,6 +55,7 @@ public class FrozenRecServiceImpl extends BaseServiceImpl<FrozenRecMapper, Froze
 		FrozenRec frozenRec = new FrozenRec();
 		frozenRec.setFrozenNum(handlePrice);
 		frozenRec.setUserId(user.getId());
+		frozenRec.setUserName(user.getNickName());
 		frozenRec.setTradeNo(bills.getId());
 		frozenRec.setFrozenType(type);
 		frozenRec.setStatus(1);

+ 0 - 5
ldt-core/src/main/java/org/springblade/ldt/notice/entity/NoticeManagementContent.java

@@ -67,9 +67,4 @@ public class NoticeManagementContent extends TenantEntity {
 	@ApiModelProperty(value = "发送人类型(商户,平台,商家)")
 	private SenderType senderType;
 
-	@TableField(typeHandler = JacksonTypeHandler.class)
-	@ApiModelProperty(value = "指定接收人类型:平台(商户,商家,C端用户)、商场(商家,会员)、商家(会员)")
-	private ReceiverType[] receiverTypes;
-
-
 }

+ 1 - 0
ldt-core/src/main/java/org/springblade/ldt/notice/vo/NoticeManagementContentVO.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.ldt.notice.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;

+ 25 - 0
ldt-core/src/main/resources/application-prod.yml

@@ -1,5 +1,30 @@
 #数据源配置
 spring:
+  rabbitmq:
+    host: 139.159.240.119
+    port: 5672
+    virtual-host: ldt
+    connection-timeout: 15000
+    # 发送确认
+    publisher-confirm-type: simple
+    # 路由失败回调
+    publisher-returns: true
+    template:
+      # 必须设置成true 消息路由失败通知监听者,而不是将消息丢弃
+      mandatory: true
+    listener:
+      simple:
+        # 每次从RabbitMQ获取的消息数量
+        prefetch: 1
+        default-requeue-rejected: false
+        # 每个队列启动的消费者数量
+        concurrency: 1
+        # 每个队列最大的消费者数量
+        max-concurrency: 1
+        # 手动签收ACK
+        acknowledge-mode: manual
+    username: admin
+    password: admin
   redis:
     ##redis 单机环境配置
     ##将docker脚本部署的redis服务映射为宿主机ip

+ 3 - 1
ldt-core/src/main/resources/application.yml

@@ -24,7 +24,7 @@ spring:
       #validation-query: select 1 from dual
       validation-query-timeout: 2000
       initial-size: 5
-      max-active: 200
+      max-active: 500
       min-idle: 5
       max-wait: 60000
       test-on-borrow: false
@@ -261,5 +261,7 @@ crypto:
     - /payment/csurl/
     - /withdraw/callback/
     - /withdraw/csurl/
+    - /pressure_test/scanPay
+    - /pressure_test/deCodeNotifyData