From 063d6464ff582def3cac16dddd355c696f0aa3a7 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Thu, 29 Aug 2024 17:39:31 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=88=86=E6=9E=90=E9=A1=B5=E6=9D=BF?= =?UTF-8?q?=E6=9D=90=E4=BF=A1=E6=81=AF=E5=90=8D=E7=A7=B0=E8=A7=84=E8=8C=83?= =?UTF-8?q?=EF=BC=9B2=E3=80=81=E6=96=B0=E5=A2=9E=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81=E7=A0=81=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/vo/order/OrderGoodsPlateRespVO.java | 2 +- .../order/OrderStatisticsServiceImpl.java | 64 ++++++++++++------ .../lib/ureport-core-2.3.0-SNAPSHOT.jar | Bin 904164 -> 904164 bytes .../system/enums/DictTypeConstants.java | 1 + .../controller/admin/auth/AuthController.java | 13 +++- .../admin/auth/vo/AuthLoginSmsCheckReqVO.java | 30 ++++++++ .../system/service/auth/AdminAuthService.java | 8 +++ .../service/auth/AdminAuthServiceImpl.java | 16 +++++ .../system/service/sms/SmsCodeService.java | 7 ++ .../service/sms/SmsCodeServiceImpl.java | 25 ++++++- .../src/main/resources/application.yaml | 3 +- 11 files changed, 144 insertions(+), 25 deletions(-) create mode 100644 cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/vo/AuthLoginSmsCheckReqVO.java diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsPlateRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsPlateRespVO.java index 5396f1470..e3cc50467 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsPlateRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsPlateRespVO.java @@ -27,7 +27,7 @@ public class OrderGoodsPlateRespVO implements Comparable private String color; @Schema(description = "纹路") - private Integer texture; + private Boolean texture; @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) private BigDecimal width; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java index c5d0ae2cf..7af9befd8 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderStatisticsServiceImpl.java @@ -33,6 +33,7 @@ import com.cf.imes.module.system.api.dict.DictDataApi; import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO; import com.cf.imes.module.system.enums.DictTypeConstants; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -290,12 +291,10 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService { seriesItem.put("id", entry.getKey()); // 材质-商品名称-颜色-纹理-宽-高-厚-品牌 OrderGoodsPlateRespVO orderGoodsPlateRespVO = entry.getValue(); - // 获取纹路描述 - DictDataRespDTO grainDTO = dictDataApi.getDictData(DictTypeConstants.GRAIN_TYPE, String.valueOf(orderGoodsPlateRespVO.getTexture())).getData(); - String texture = ObjectUtil.isNotNull(grainDTO) ? grainDTO.getLabel() : ""; - seriesItem.put("name", orderGoodsPlateRespVO.getMaterial() + "-" + orderGoodsPlateRespVO.getGoodsName() + - "-" + orderGoodsPlateRespVO.getColor() + "-" + texture + "-" + stripTrailingZeros(orderGoodsPlateRespVO.getWidth()) + - "×" + stripTrailingZeros(orderGoodsPlateRespVO.getHeight()) + "×" + stripTrailingZeros(orderGoodsPlateRespVO.getThickness()) + "-" + orderGoodsPlateRespVO.getBrand()); + String specification = formatGoodsName('x', stripTrailingZeros(orderGoodsPlateRespVO.getWidth()), + stripTrailingZeros(orderGoodsPlateRespVO.getHeight()), stripTrailingZeros(orderGoodsPlateRespVO.getThickness())); + String goodsName = formatGoodsName('-', orderGoodsPlateRespVO.getMaterial(), orderGoodsPlateRespVO.getGoodsName(), orderGoodsPlateRespVO.getColor(), getTextureFromDict(orderGoodsPlateRespVO.getTexture()), specification, orderGoodsPlateRespVO.getBrand()); + seriesItem.put("name", goodsName); series.add(seriesItem); } resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, reqVO.getUnit())).toList()); @@ -362,12 +361,10 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService { seriesItem.put("id", entry.getKey()); // 材质-商品名称-颜色-纹理-宽-高-厚-品牌 OrderGoodsPlateRespVO orderGoodsPlateRespVO = entry.getValue(); - // 获取纹路描述 - DictDataRespDTO grainDTO = dictDataApi.getDictData(DictTypeConstants.GRAIN_TYPE, String.valueOf(orderGoodsPlateRespVO.getTexture())).getData(); - String texture = ObjectUtil.isNotNull(grainDTO) ? grainDTO.getLabel() : ""; - seriesItem.put("name", orderGoodsPlateRespVO.getMaterial() + "-" + orderGoodsPlateRespVO.getGoodsName() + - "-" + orderGoodsPlateRespVO.getColor() + "-" + texture + "-" + stripTrailingZeros(orderGoodsPlateRespVO.getWidth()) + - "×" + stripTrailingZeros(orderGoodsPlateRespVO.getHeight()) + "×" + stripTrailingZeros(orderGoodsPlateRespVO.getThickness()) + "-" + orderGoodsPlateRespVO.getBrand()); + String specification = formatGoodsName('x', stripTrailingZeros(orderGoodsPlateRespVO.getWidth()), + stripTrailingZeros(orderGoodsPlateRespVO.getHeight()), stripTrailingZeros(orderGoodsPlateRespVO.getThickness())); + String goodsName = formatGoodsName('-', orderGoodsPlateRespVO.getMaterial(), orderGoodsPlateRespVO.getGoodsName(), orderGoodsPlateRespVO.getColor(), getTextureFromDict(orderGoodsPlateRespVO.getTexture()), specification, orderGoodsPlateRespVO.getBrand()); + seriesItem.put("name", goodsName); series.add(seriesItem); } resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, reqVO.getUnit())).toList()); @@ -485,9 +482,10 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService { } // 任意取一个类型 PlateGoodDO plateGoodDO = plateGoodDOList.get(0); - seriesItem.put("name", plateGoodDO.getMaterial() + "-" + plateGoodDO.getGoodsName() + - "-" + plateGoodDO.getColor() + "-" + getTextureFromDict(plateGoodDO) + "-" + stripTrailingZeros(BigDecimal.valueOf(plateGoodDO.getWidth())) + - "×" + stripTrailingZeros(BigDecimal.valueOf(plateGoodDO.getHeight())) + "×" + stripTrailingZeros(BigDecimal.valueOf(plateGoodDO.getThickness())) + "-" + plateGoodDO.getBrand()); + String specification = formatGoodsName('x', stripTrailingZeros(BigDecimal.valueOf(plateGoodDO.getWidth())), + stripTrailingZeros(BigDecimal.valueOf(plateGoodDO.getHeight())), stripTrailingZeros(BigDecimal.valueOf(plateGoodDO.getThickness()))); + String goodsName = formatGoodsName('-', plateGoodDO.getMaterial(), plateGoodDO.getGoodsName(), plateGoodDO.getColor(), getTextureFromDict(plateGoodDO.getTexture()), specification, plateGoodDO.getBrand()); + seriesItem.put("name", goodsName); series.add(seriesItem); } resultMap.put(DATELIST_FIELD_NAME, dateList.stream().map(date -> generateDateRangeAxis(date, unit)).toList()); @@ -498,18 +496,44 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService { return resultMap; } + /** + * 板材信息用-连接 + * + * @param connChar 连接符 + * @param texts 信息内容 + * @return 为空时不带connChar + */ + private String formatGoodsName(char connChar, String... texts) { + StringBuilder sb = new StringBuilder(); + for (String text : texts) { + if (StringUtils.isNotEmpty(text)) { + sb.append(text).append(connChar); + } + } + // 移除最后一个 - + if (sb.length() > 0 && sb.charAt(sb.length() - 1) == connChar) { + sb.deleteCharAt(sb.length() - 1); + } + return sb.toString(); + } + + /** * 根据纹路枚举获取字典中纹路描述 - * @param plateGoodDO + * + * @param texture * @return */ - private String getTextureFromDict(PlateGoodDO plateGoodDO) { + private String getTextureFromDict(Boolean texture) { + if (ObjectUtil.isNull(texture)) { + return "无"; + } // 获取纹路描述 - DictDataRespDTO grainDTO = dictDataApi.getDictData(DictTypeConstants.GRAIN_TYPE, String.valueOf(plateGoodDO.getTexture())).getData(); + DictDataRespDTO grainDTO = dictDataApi.getDictData(DictTypeConstants.PLATE_TEXTURE_TYPE, String.valueOf(texture)).getData(); if (ObjectUtil.isNotNull(grainDTO)) { - return grainDTO.getLabel(); + return Objects.equals("是", grainDTO.getLabel()) ? "有" : "无"; } else { - return ""; + return "无"; } } diff --git a/cf-module-report/cf-module-report-biz/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar b/cf-module-report/cf-module-report-biz/src/main/resources/lib/ureport-core-2.3.0-SNAPSHOT.jar index ed9ae8b6d3535ebdde2f2e9e8b98ec52ecdc2c07..ce94db844d365974151b1272f76f8aa338465bcf 100644 GIT binary patch delta 14252 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 delta 14252 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 z loginCheck( @Param("mobile") @NotEmpty(message = "手机号不能为空") @Mobile String mobile) { return success(authService.loginCheck(mobile)); } + @PostMapping("/login/sms/check") + @PermitAll + @Operation(summary = "校验登录验证码") + @OperateLog(enable = false) + public CommonResult loginSmsCheck(@Valid @RequestBody AuthLoginSmsCheckReqVO reqVO) { + return success(authService.loginSmsCheck(reqVO)); + } + @PostMapping("/logout") @PermitAll @Operation(summary = "登出系统") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/vo/AuthLoginSmsCheckReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/vo/AuthLoginSmsCheckReqVO.java new file mode 100644 index 000000000..79f8853a1 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/auth/vo/AuthLoginSmsCheckReqVO.java @@ -0,0 +1,30 @@ +package com.cf.imes.module.system.controller.admin.auth.vo; + +import com.cf.imes.framework.common.validation.Mobile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + +@Schema(description = "管理后台 - 短信验证码校验 ReqVo") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthLoginSmsCheckReqVO { + + @Schema(description = "手机号码", example = "15601691300") + @Length(min = 11, max = 11, message = "手机号长度必须 11 位") + @Mobile + @NotEmpty(message = "手机号不能为空") + private String mobile; + + @Schema(description = "验证码", example = "123456") + @Length(min = 6, max = 6, message = "验证码长度必须 6 位") + @NotEmpty(message = "短信验证码不能为空") + private String smsCaptchaVerification; +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthService.java index d6d9acf26..7b9c3f191 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthService.java @@ -2,6 +2,7 @@ package com.cf.imes.module.system.service.auth; import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginRespVO; +import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginSmsCheckReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthSmsLoginReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthSmsSendReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthSocialLoginReqVO; @@ -41,6 +42,13 @@ public interface AdminAuthService { */ boolean loginCheck(String mobile); + /** + * 登录短信验证码校验 + * + * @return true正确,false错误 + */ + boolean loginSmsCheck(AuthLoginSmsCheckReqVO reqVO); + /** * 基于 token 退出登录 * diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java index 469ea9859..218a60a1a 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java @@ -14,6 +14,7 @@ import com.cf.imes.module.system.api.social.dto.SocialUserBindReqDTO; import com.cf.imes.module.system.api.social.dto.SocialUserRespDTO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginRespVO; +import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginSmsCheckReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthSmsLoginReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthSmsSendReqVO; import com.cf.imes.module.system.controller.admin.auth.vo.AuthSocialLoginReqVO; @@ -165,6 +166,21 @@ public class AdminAuthServiceImpl implements AdminAuthService { return false; } + @Override + public boolean loginSmsCheck(AuthLoginSmsCheckReqVO reqVO) { + String mobile = reqVO.getMobile(); + // 查询账号 + AdminUserDO user = userService.getUserUniqueByUserName(mobile); + // 校验用户是否存在 + if (user == null) { + createLoginLog(null, mobile, LoginLogTypeEnum.LOGIN_USERNAME, LoginResultEnum.BAD_CREDENTIALS); + return false; + } + // 校验验证码正确性 + smsCodeService.validateSmsCode(reqVO); + return true; + } + @Override public void sendSmsCode(AuthSmsSendReqVO reqVO) { // 登录场景,验证是否存在 diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/sms/SmsCodeService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/sms/SmsCodeService.java index 6e3bd3734..2a90d2591 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/sms/SmsCodeService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/sms/SmsCodeService.java @@ -4,6 +4,7 @@ import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.module.system.api.sms.dto.code.SmsCodeSendReqDTO; import com.cf.imes.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import com.cf.imes.module.system.api.sms.dto.code.SmsCodeValidateReqDTO; +import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginSmsCheckReqVO; import javax.validation.Valid; @@ -37,4 +38,10 @@ public interface SmsCodeService { */ void validateSmsCode(@Valid SmsCodeValidateReqDTO reqDTO); + /** + * 检查验证码是否有效 + * + * @param reqVO + */ + void validateSmsCode(@Valid AuthLoginSmsCheckReqVO reqVO); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/sms/SmsCodeServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/sms/SmsCodeServiceImpl.java index 7c93141e2..d02a7e364 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/sms/SmsCodeServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/sms/SmsCodeServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil; import com.cf.imes.module.system.api.sms.dto.code.SmsCodeSendReqDTO; import com.cf.imes.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import com.cf.imes.module.system.api.sms.dto.code.SmsCodeValidateReqDTO; +import com.cf.imes.module.system.controller.admin.auth.vo.AuthLoginSmsCheckReqVO; import com.cf.imes.module.system.dal.dataobject.sms.SmsCodeDO; import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO; import com.cf.imes.module.system.dal.mysql.sms.SmsCodeMapper; @@ -138,7 +139,7 @@ public class SmsCodeServiceImpl implements SmsCodeService { @Override public void useSmsCode(SmsCodeUseReqDTO reqDTO) { // 非修改手机号的场景时校验手机号是否存在 - AdminUserDO user = userService.getUserByUsernameAndOrganId(reqDTO.getMobile(), null); + AdminUserDO user = userService.getUserUniqueByUserName(reqDTO.getMobile()); if (ObjectUtil.isNull(user) && ObjectUtil.notEqual(SmsSceneEnum.USER_UPDATE_MOBILE.getScene(), reqDTO.getScene())) { throw ServiceExceptionUtil.exception(ErrorCodeConstants.AUTH_MOBILE_NOT_EXISTS); } @@ -159,6 +160,28 @@ public class SmsCodeServiceImpl implements SmsCodeService { } } + @Override + public void validateSmsCode(AuthLoginSmsCheckReqVO reqVO) { + String mobile = reqVO.getMobile(); + // 非修改手机号的场景时校验手机号是否存在 + AdminUserDO user = userService.getUserUniqueByUserName(mobile); + if (ObjectUtil.isNull(user)) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.AUTH_MOBILE_NOT_EXISTS); + } + String smsCodeKey = String.format(RedisKeyConstants.SMS_CAPTCHA_VERIFICATION, mobile); + Object keyObj = redisTemplate.opsForValue().get(smsCodeKey); + if (ObjectUtil.isNotNull(keyObj)) { + // 校验码存在 + if (ObjectUtil.notEqual(String.valueOf(keyObj), reqVO.getSmsCaptchaVerification())) { + // 验证码不正确 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.SMS_CODE_NOT_CORRECT); + } + } else { + // 提示验证码不存在 + throw ServiceExceptionUtil.exception(ErrorCodeConstants.SMS_CODE_NOT_FOUND); + } + } + @Override public void validateSmsCode(SmsCodeValidateReqDTO reqDTO) { validateSmsCode0(reqDTO.getMobile(), reqDTO.getCode(), reqDTO.getScene()); diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml b/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml index 13d7cee08..ff3b4969c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml @@ -161,7 +161,8 @@ chenfeng: - /admin-api/system/auth/logout - /admin-api/system/auth/sms-code - /admin-api/system/user/reset-password - - /admin-api/system/auth/check + - /admin-api/system/auth/login/check + - /admin-api/system/auth/login/sms/check - /rpc-api/** #- /admin-api/system/** #- /rpc-api/system/organ/valid # 防止递归。避免调用 /rpc-api/system/organ/valid 接口时,又去触发 /rpc-api/system/organ/valid 去校验