diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/ValidatorUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/ValidatorUtils.java index e98cc09fe7..85dc25bd0d 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/ValidatorUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/validator/ValidatorUtils.java @@ -8,9 +8,13 @@ package com.epmet.commons.tools.validator; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.epmet.commons.tools.dto.form.DingTalkTextMsg; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.ValidateException; import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import org.apache.commons.lang3.StringUtils; import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.support.ResourceBundleMessageSource; @@ -50,8 +54,8 @@ public class ValidatorUtils { List> customerShowGroups = new ArrayList<>(); List> internalGroups = new ArrayList<>(); - if (groups == null || groups.length ==0){ - validate(EpmetErrorCode.CUSTOMER_VALIDATE_ERROR ,object,groups); + if (groups == null || groups.length == 0) { + validate(EpmetErrorCode.CUSTOMER_VALIDATE_ERROR, object, groups); return; } Arrays.asList(groups).forEach(g -> { @@ -65,7 +69,7 @@ public class ValidatorUtils { // 1.校验客户端显示分组 if (!CollectionUtils.isEmpty(customerShowGroups)) { - validate(EpmetErrorCode.CUSTOMER_VALIDATE_ERROR ,object, customerShowGroups.toArray(new Class[customerShowGroups.size()])); + validate(EpmetErrorCode.CUSTOMER_VALIDATE_ERROR, object, customerShowGroups.toArray(new Class[customerShowGroups.size()])); } // 2.内部校验分组 @@ -86,6 +90,7 @@ public class ValidatorUtils { /** * 真正的校验方法 + * * @param object * @param errorCode * @param groups @@ -103,7 +108,50 @@ public class ValidatorUtils { int lastDouhaoIndex = sb.lastIndexOf(","); sb.replace(lastDouhaoIndex, lastDouhaoIndex + 1, ""); - throw new ValidateException(errorCode.getCode(),sb.toString()); + throw new ValidateException(errorCode.getCode(), sb.toString()); } } + + /** + * desc: 校验对象json串必填字段是否有值 + * + * @param jsonString + * @param requiredColumns + * @return java.lang.String 返回未必填的字段 + * @author LiuJanJun + * @date 2020/11/19 9:47 上午 + */ + public static List hasAllRequired(final String jsonString, Set requiredColumns) { + List missColList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(requiredColumns)) { + //验证字段非空 + requiredColumns.forEach(column -> { + //按照必填字段取前台传过来的参数 + Object val = null; + if (StringUtils.isNotBlank(jsonString)) { + JSONObject jsonObject = JSONObject.parseObject(jsonString); + val = jsonObject.get(column.trim()); + } + //如果没有查到那个值,就代表着传过来的字段少了 + if (val == null || StringUtils.isBlank(val.toString())) { + missColList.add(column); + } + }); + } + return missColList; + } + + public static void main(String[] args) { + DingTalkTextMsg form = new DingTalkTextMsg(); + form.setWebHook("1"); + form.setContent("2"); + //form.setAtMobiles(); + //form.setAtAll(); + //form.setSecret(); + Set requiredColumns = new HashSet<>(); + requiredColumns.add("content"); + requiredColumns.add("secret"); + List s = ValidatorUtils.hasAllRequired(JSON.toJSONString(form), requiredColumns); + System.out.println(s); + } } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/CertificationAddFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/CertificationAddFormDTO.java index feef1ee323..da021d64f0 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/CertificationAddFormDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/CertificationAddFormDTO.java @@ -27,6 +27,7 @@ public class CertificationAddFormDTO implements Serializable { /** * 徽章ID */ + @NotBlank(message = "徽章ID不能为空", groups = {CertificationAdd.class}) private String badgeId; /** diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserBadgeController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserBadgeController.java index 6346deb0e4..2765fd9064 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserBadgeController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/UserBadgeController.java @@ -56,6 +56,7 @@ public class UserBadgeController { */ @PostMapping("authbadgerecord") public Result authBadgeRecord(@RequestBody CertificationAddFormDTO certificationAddFormDTO){ + ValidatorUtils.validateEntity(certificationAddFormDTO, CertificationAddFormDTO.CertificationAdd.class); return userBadgeService.authBadgeRecord(certificationAddFormDTO); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java index a3e956ff5c..e85e794e84 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java @@ -8,12 +8,10 @@ import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.PhoneValidatorUtils; +import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.constant.BadgeConstant; import com.epmet.constant.SmsTemplateConstant; -import com.epmet.dao.BadgeDao; -import com.epmet.dao.ResiUserBadgeDao; -import com.epmet.dao.UserBadgeDao; -import com.epmet.dao.UserRoleDao; +import com.epmet.dao.*; import com.epmet.dto.ResiUserBadgeDTO; import com.epmet.dto.UserBadgeCertificateRecordDTO; import com.epmet.dto.form.*; @@ -29,10 +27,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -60,9 +55,11 @@ public class UserBadgeServiceImpl implements UserBadgeService { private ResiUserBadgeDao resiUserBadgeDao; @Autowired private BadgeDao badgeDao; + @Autowired + private BadgeCertificationConfigDao badgeCertificationConfigDao; /** - * @Description 查询已经点亮的徽章 + * @Description 查询已经点亮的徽章 * @Param userBadgeListFormDTO * @author zxc * @date 2020/11/3 1:33 下午 @@ -124,7 +121,7 @@ public class UserBadgeServiceImpl implements UserBadgeService { } }); }); - return userOperListResultDTOS; + return userOperListResultDTOS.stream().sorted(Comparator.comparing(UserOperListResultDTO::getBadgeName)).collect(Collectors.toList()); } /** @@ -218,9 +215,14 @@ public class UserBadgeServiceImpl implements UserBadgeService { @Transactional(rollbackFor = Exception.class) public Result authBadgeRecord(CertificationAddFormDTO certificationAddFormDTO) { log.info(JSON.toJSONString(certificationAddFormDTO)); - if (StringUtils.isNotBlank(certificationAddFormDTO.getMobile())){ + AuthFieldFormDTO authFieldFormDTO = new AuthFieldFormDTO(); + authFieldFormDTO.setCustomerId(certificationAddFormDTO.getCustomerId()); + authFieldFormDTO.setBadgeId(certificationAddFormDTO.getBadgeId()); + + validateParams(certificationAddFormDTO, authFieldFormDTO); + if (StringUtils.isNotBlank(certificationAddFormDTO.getMobile())) { String smsCode = userBadgeRedis.getBadgeSmsCode(certificationAddFormDTO.getMobile()); - if (!StringUtils.isNotBlank(smsCode)){ + if (!StringUtils.isNotBlank(smsCode)) { return new Result().error(EpmetErrorCode.MOBILE_CODE_ERROR.getCode()); } } @@ -228,7 +230,7 @@ public class UserBadgeServiceImpl implements UserBadgeService { List userIds = new ArrayList<>(); userIds.add(certificationAddFormDTO.getUserId()); List userBaseInfoResultDTOS = userBaseInfoService.queryUserBaseInfo(userIds); - if (CollectionUtils.isEmpty(userBaseInfoResultDTOS)){ + if (CollectionUtils.isEmpty(userBaseInfoResultDTOS)) { throw new RenException("查询用户基本信息集合为空......"); } userBadgeDao.updateCertificateRecordIsLast(form.getBadgeId(),form.getUserId()); @@ -245,13 +247,27 @@ public class UserBadgeServiceImpl implements UserBadgeService { return new Result(); } + private void validateParams(CertificationAddFormDTO certificationAddFormDTO, AuthFieldFormDTO authFieldFormDTO) { + List authFieldResultDTOS = this.authField(authFieldFormDTO); + if (CollectionUtils.isEmpty(authFieldResultDTOS)) { + throw new RenException("该徽章配置配置错误"); + } + Set requiredColumns = authFieldResultDTOS.stream() + .filter(o -> NumConstant.ONE_STR.equals(o.getIsRequired())) + .map(AuthFieldResultDTO::getEnName).collect(Collectors.toSet()); + List missColumns = ValidatorUtils.hasAllRequired(JSON.toJSONString(certificationAddFormDTO), requiredColumns); + if (!CollectionUtils.isEmpty(missColumns)) { + throw new RenException(JSON.toJSONString(missColumns).concat("不能为空")); + } + } + /** - * @Description 站内信发送——提交徽章认证 + * @Description 站内信发送——提交徽章认证 * @Param form * @author zxc * @date 2020/11/10 9:04 上午 */ - public void sendMessageByUser(UserBadgeCertificateRecordDTO form){ + public void sendMessageByUser(UserBadgeCertificateRecordDTO form) { List msgList = new ArrayList<>(); UserMessageFormDTO formDTO = new UserMessageFormDTO(); formDTO.setApp(BadgeConstant.RESI);