From 82a410d9ec7a5d15eed27e9990cff371feab43a1 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期一, 27 三月 2023 18:25:38 +0800
Subject: [PATCH] 新增编码规则服务

---
 Source/BladeX/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java |  128 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 106 insertions(+), 22 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..96f2490 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
@@ -21,9 +21,8 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
 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;
@@ -51,13 +50,12 @@
 import org.springblade.system.user.service.IUserService;
 import org.springblade.system.user.vo.UserVO;
 import org.springblade.system.user.wrapper.UserWrapper;
+import org.springframework.beans.factory.annotation.Value;
 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;
 
@@ -67,7 +65,7 @@
  * @author Chill
  */
 @Service
-@AllArgsConstructor
+@RequiredArgsConstructor
 public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implements IUserService {
 	private static final String GUEST_NAME = "guest";
 
@@ -75,6 +73,10 @@
 	private final IUserOauthService userOauthService;
 	private final ISysClient sysClient;
 	private final BladeTenantProperties tenantProperties;
+	//鎷垮埌閰嶇疆鐨勮秴绠d
+	@Value("${user-info.id}")
+	private String adminUserId;
+
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
@@ -83,19 +85,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 +94,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
@@ -293,7 +305,40 @@
 		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();
+		//瀵嗙爜闀垮害鏍¢獙
+		if(newPassword1.length() < strategy.getMinPwdLen() || newPassword1.length() > strategy.getMaxPwdLen()){
+			throw new ServiceException("瀵嗙爜涓繀椤诲惈鏈夈��"+strategy.getCombinationNames()+"銆戜腑鐨勩��"+strategy.getRequiredType()+"銆戠瀵嗙爜缁勫悎鏂瑰紡锛屼笖瀵嗙爜闀垮害蹇呴』鍦ㄣ��"+strategy.getMinPwdLen()+"-"+strategy.getMaxPwdLen()+"銆戣寖鍥村唴");
+		}
+		List<String> regexs = sysClient.getRegexByList(Arrays.asList(strategy.getCombinationIds().split(","))).getData();
+		//鍒ゆ柇鏄惁婊¤冻缁勫悎鏂瑰紡涓殑蹇呭~绉嶇被鏁�
+		int reqType = 0;
+		for (int i = 0; i < regexs.size(); i++) {
+			if(reqType>=strategy.getRequiredType()){
+				break;
+			}
+			if(!Func.isEmpty(RegexUtil.findResult(regexs.get(i),newPassword1))){
+				reqType++;
+			}
+		}
+		String resException = "瀵嗙爜涓繀椤诲惈鏈夈��"+strategy.getCombinationNames()+"銆戜腑鐨勩��"+strategy.getRequiredType()+"銆戠绫诲瀷锛岃閲嶆柊杈撳叆瀵嗙爜锛�";
+		if(reqType<strategy.getRequiredType()){
+			throw new ServiceException(resException);
+		}
+		// 鏄惁灞炰簬缁勫悎鏂瑰紡涓殑绫诲瀷
+		String regex = sysClient.getRegex(Arrays.asList(strategy.getCombinationIds().split(","))).getData();
+		regex = "^"+regex+"{"+strategy.getRequiredType()+",}$";
+		boolean result = RegexUtil.find(regex, newPassword1);
+		if(!result){
+			throw new ServiceException(resException);
+		}
+		//淇敼瀵嗙爜鍚屾椂锛屾敼鍙樼敤鎴蜂俊鎭腑鐨勫瘑鐮佷慨鏀圭姸鎬佸瓧娈�,瀵嗙爜淇敼鏃堕棿
+		return this.update(Wrappers.<User>update().lambda()
+			.set(User::getPassword, DigestUtil.hex(DigestUtils.md5DigestAsHex((newPassword1).getBytes())))
+			.set(User::getStrategyUpdateStatus,CommonConstant.TOP_PARENT_ID)
+			.set(User::getPwdUpdateTime,new Date())
+			.eq(User::getId, userId));
 	}
 
 	@Override
@@ -430,4 +475,43 @@
 		return userVO;
 	}
 
+	@Override
+	public Long checkRenAndExpr(Long userId) {
+		//瓒呯骇绠$悊鍛樼洿鎺ヨ繑鍥炰笉闇�瑕佹彁閱掑瘑鐮佷慨鏀�
+		if(adminUserId.equals(userId)){
+			return 0L;
+		}
+		//鑾峰彇鍒板瘑鐮佷慨鏀规椂闂�
+		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();
+		//鏄惁鎻愰啋閫氳繃鏈�鍚庝竴娆′慨鏀瑰瘑鐮佺殑鏃堕棿鍔犱笂杩囨湡鏃堕棿鍑忓幓褰撳墠鏃堕棿锛屽鏋滃皬浜庤繃鏈熸彁閱掓椂闂村氨杩涜鎻愰啋锛屽鏋�<=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;
+	}
+
+	/**
+	 * 鏃堕棿鏍煎紡杞ぉ
+	 * @param date
+	 * @return
+	 */
+	private Long dateToDay(Date date){
+		long time = date.getTime();
+		return time/(1000 * 60 * 60 * 24);
+	}
+
+
 }

--
Gitblit v1.9.3