Parcourir la source

feat: 廉洁协议签署-以手机号作为是否签署的唯一判断

lixuesong il y a 1 an
Parent
commit
bb849825b3

+ 26 - 15
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -4631,24 +4631,35 @@ public class ApiController {
 	public R<Boolean> signAgreement(@Validated @RequestBody SignAgreementDTO signAgreementDTO) {
 		log.info("小程序签署协议请求:{}", signAgreementDTO);
 
-		Integer userId = SecurityUtils.getUser().getId();
+		String username = SecurityUtils.getUser().getUsername();
 
-		SysUser queryUser = sysUserService.getById(userId);
-		List<Object> signAgreementDTOList = new ArrayList<>();
-		if (StrUtil.isBlank(queryUser.getSignAgreement())) {
-			signAgreementDTOList.add(signAgreementDTO);
-		} else {
-			JSONArray agreements = JSONUtil.parseArray(queryUser.getSignAgreement());
-			signAgreementDTOList.add(signAgreementDTO);
-			signAgreementDTOList.addAll(agreements);
-		}
+		List<SysUser> users = sysUserService.list(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, username));
 
-		SysUser user = new SysUser();
-		user.setUserId(userId);
-		user.setSignAgreement(JSONUtil.toJsonStr(signAgreementDTOList));
-		user.setUpdateTime(LocalDateTime.now());
+		users.forEach(queryUser -> {
+			List<Object> signAgreementDTOList = new ArrayList<>();
+			if (StrUtil.isBlank(queryUser.getSignAgreement())) {
+				signAgreementDTOList.add(signAgreementDTO);
+			} else {
+				JSONArray agreements = JSONUtil.parseArray(queryUser.getSignAgreement());
+				// 如果已存在该协议,则不再重复保存
+				boolean anyMatch = agreements.stream()
+						.map(o -> BeanUtil.toBean(o, SignAgreementDTO.class))
+						.anyMatch(dto -> SignAgreementDTO.SignAgreementType.HONEST_AGREEMENT.equals(dto.getAgreementType()));
+				if (anyMatch) {
+					return;
+				}
+				signAgreementDTOList.add(signAgreementDTO);
+				signAgreementDTOList.addAll(agreements);
+			}
 
-		return R.ok(sysUserService.updateById(user));
+			SysUser user = new SysUser();
+			user.setUserId(queryUser.getUserId());
+			user.setSignAgreement(JSONUtil.toJsonStr(signAgreementDTOList));
+			user.setUpdateTime(LocalDateTime.now());
+			sysUserService.updateById(user);
+		});
+
+		return R.ok();
 	}
 
 	/**