From 0baeb5d2b147bf29add1e5373652ae70dd749b69 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期五, 24 三月 2023 21:08:55 +0800
Subject: [PATCH] 更新密码策略功能

---
 Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java |   96 ++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 76 insertions(+), 20 deletions(-)

diff --git a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
index 9b0ada5..5138b90 100644
--- a/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
+++ b/Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
@@ -23,7 +23,6 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.springblade.common.constant.CommonConstant;
-import org.springblade.common.constant.TenantConstant;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
@@ -32,12 +31,12 @@
 import org.springblade.core.tenant.BladeTenantProperties;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.jackson.JsonUtil;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.*;
 import org.springblade.system.cache.DictCache;
 import org.springblade.system.cache.ParamCache;
 import org.springblade.system.cache.SysCache;
+import org.springblade.system.entity.Strategy;
 import org.springblade.system.entity.Tenant;
 import org.springblade.system.enums.DictEnum;
 import org.springblade.system.feign.ISysClient;
@@ -53,11 +52,9 @@
 import org.springblade.system.user.wrapper.UserWrapper;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.DigestUtils;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 import static org.springblade.common.constant.CommonConstant.DEFAULT_PARAM_PASSWORD;
 
@@ -83,19 +80,7 @@
 			user.setTenantId(BladeConstant.ADMIN_TENANT_ID);
 		}
 		String tenantId = user.getTenantId();
-		Tenant tenant = SysCache.getTenant(tenantId);
-		if (Func.isNotEmpty(tenant)) {
-			Integer accountNumber = tenant.getAccountNumber();
-			if (tenantProperties.getLicense()) {
-				String licenseKey = tenant.getLicenseKey();
-				String decrypt = DesUtil.decryptFormHex(licenseKey, TenantConstant.DES_KEY);
-				accountNumber = JsonUtil.parse(decrypt, Tenant.class).getAccountNumber();
-			}
-			Long tenantCount = baseMapper.selectCount(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId));
-			if (accountNumber != null && accountNumber > 0 && accountNumber <= tenantCount) {
-				throw new ServiceException("褰撳墠绉熸埛宸插埌鏈�澶ц处鍙烽搴�!");
-			}
-		}
+		//Tenant tenant = SysCache.getTenant(tenantId);
 		if (Func.isNotEmpty(user.getPassword())) {
 			user.setPassword(DigestUtil.encrypt(user.getPassword()));
 		}
@@ -104,6 +89,28 @@
 			throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount()));
 		}
 		return save(user) && submitUserDept(user);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean submitList(List<User> users) {
+		Boolean flag = true;
+		for (User user : users){
+			if (StringUtil.isBlank(user.getTenantId())) {
+				user.setTenantId(BladeConstant.ADMIN_TENANT_ID);
+			}
+			String tenantId = user.getTenantId();
+			if (Func.isNotEmpty(user.getPassword())) {
+				user.setPassword(DigestUtil.encrypt(user.getPassword()));
+			}
+			Long userCount = baseMapper.selectCount(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, user.getAccount()));
+			if (userCount > 0L && Func.isEmpty(user.getId())) {
+				throw new ServiceException(StringUtil.format("褰撳墠鐢ㄦ埛 [{}] 宸插瓨鍦�!", user.getAccount()));
+			}
+			flag = save(user) && submitUserDept(user);
+
+		}
+		return flag;
 	}
 
 	@Override
@@ -286,6 +293,7 @@
 
 	@Override
 	public boolean updatePassword(Long userId, String oldPassword, String newPassword, String newPassword1) {
+		String hex = DigestUtil.hex(DigestUtils.md5DigestAsHex((newPassword1).getBytes()));
 		User user = getById(userId);
 		if (!newPassword.equals(newPassword1)) {
 			throw new ServiceException("璇疯緭鍏ユ纭殑纭瀵嗙爜!");
@@ -293,7 +301,21 @@
 		if (!user.getPassword().equals(DigestUtil.hex(oldPassword))) {
 			throw new ServiceException("鍘熷瘑鐮佷笉姝g‘!");
 		}
-		return this.update(Wrappers.<User>update().lambda().set(User::getPassword, DigestUtil.hex(newPassword)).eq(User::getId, userId));
+		//鑾峰彇鐢ㄦ埛閲囩敤鐨勫瘑鐮佺瓥鐣�
+		Strategy strategy = sysClient.getByUserId(userId).getData();
+		String resException = "瀵嗙爜涓繀椤诲惈鏈夈��"+strategy.getCombinationIds()+"銆戜腑鐨勩��"+strategy.getRequiredType()+"銆戠瀵嗙爜缁勫悎鏂瑰紡锛屼笖瀵嗙爜闀垮害蹇呴』鍦ㄣ��"+strategy.getMinPwdLen()+"-"+strategy.getMaxPwdLen()+"銆戣寖鍥村唴";
+		//瀵嗙爜闀垮害鏍¢獙
+		if(newPassword1.length() < strategy.getMinPwdLen() || newPassword1.length() > strategy.getMaxPwdLen()){
+			throw new ServiceException(resException);
+		}
+		//鏌ヨ瀵嗙爜绛栫暐鍙栧��
+		String regex = sysClient.getRegex(Arrays.asList(strategy.getCombinationIds().split(","))).getData();
+		System.out.println("===============regex================"+regex);
+		regex = "^"+regex+"$";
+		String result = RegexUtil.findResult(regex, newPassword);
+		System.out.println(result);
+		return this.update(Wrappers.<User>update().lambda().set(User::getPassword, DigestUtil.hex(DigestUtils.md5DigestAsHex((newPassword1).getBytes()))).eq(User::getId, userId));
+		//return true;
 	}
 
 	@Override
@@ -430,4 +452,38 @@
 		return userVO;
 	}
 
+	@Override
+	public Long checkRenAndExpr(Long userId) {
+		//鑾峰彇鍒板瘑鐮佷慨鏀规椂闂�
+		Date pwdUpdateTime = this.getOne(Wrappers.<User>query().eq("ID", userId)).getPwdUpdateTime();
+		Long pwdupdateday = 0L;
+		if(!Func.isEmpty(pwdUpdateTime)){
+			pwdupdateday = dateToDay(pwdUpdateTime);
+		}
+		Strategy strategy = sysClient.getByUserId(userId).getData();
+		System.out.println("褰撳墠鏃堕棿=================="+dateToDay(new Date()));
+		System.out.println("瀵嗙爜淇敼鏃堕棿======================"+pwdupdateday);
+		System.out.println("鎻愰啋鏃堕棿======================"+strategy.getReminderTime());
+		System.out.println("杩囨湡鏃堕棿======================="+strategy.getExpirationTime());
+		//鏄惁鎻愰啋閫氳繃鏈�鍚庝竴娆′慨鏀瑰瘑鐮佺殑鏃堕棿鍔犱笂杩囨湡鏃堕棿鍑忓幓褰撳墠鏃堕棿锛屽鏋滃皬浜庤繃鏈熸彁閱掓椂闂村氨杩涜鎻愰啋锛屽鏋�<=0灏辨彁閱掑繀椤讳慨鏀瑰瘑鐮�
+		long reminder = pwdupdateday+strategy.getExpirationTime()-dateToDay(pwdUpdateTime);
+		//蹇呴』鍘讳慨鏀瑰瘑鐮�
+		if(reminder<=0){
+			return -1L;
+		}
+		//鎻愰啋鐢ㄦ埛杩樻湁澶氫箙杩囨湡
+		if(reminder<=strategy.getReminderTime()){
+			long res = (strategy.getReminderTime()+pwdupdateday)-dateToDay(new Date());
+			return res;
+		}
+		//浠h〃姝e父鐘舵�佽繕鏈埌鎻愰啋涓庤繃鏈熸椂闂达紝鏃笉鎻愰啋涔熶笉瑕佹眰淇敼
+		return 0L;
+	}
+
+	private Long dateToDay(Date date){
+		long time = date.getTime();
+		return time/(1000 * 60 * 60 * 24);
+	}
+
+
 }

--
Gitblit v1.9.3