From 21fb470052fc8538b1103c182487467c562d9978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E9=B9=8F=E8=BE=89?= <18322780655@163.com> Date: Thu, 11 Jul 2024 11:35:35 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=91=E9=80=81?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cons/rest/TbProskuConController.java | 2 +- .../controller/TbUserInfoController.java | 53 ++++++++++++ .../cashier/service/TbUserInfoService.java | 3 + .../java/cn/ysk/cashier/utils/StringUtil.java | 86 +++++++++++++++++++ .../ysk/cashier/utils/ValidateCodeUtil.java | 76 ++++++++++++++++ .../src/main/resources/config/application.yml | 6 ++ 6 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/utils/StringUtil.java create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/utils/ValidateCodeUtil.java diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java index 0c091571..7311119b 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/cons/rest/TbProskuConController.java @@ -52,7 +52,7 @@ public class TbProskuConController { } catch (BadRequestException be) { throw new Exception(be.getMessage()); }catch (Exception e){ - throw new Exception("系统异常"); + throw new Exception("相同商品耗材信息不允许添加"); } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java index 2e06cb39..cdd310e2 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java @@ -16,18 +16,30 @@ package cn.ysk.cashier.controller; import cn.ysk.cashier.annotation.Log; +import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.pojo.TbUserInfo; import cn.ysk.cashier.service.TbUserInfoService; import cn.ysk.cashier.dto.TbUserInfoQueryCriteria; +import cn.ysk.cashier.utils.JSONUtil; +import cn.ysk.cashier.utils.RedisUtils; +import cn.ysk.cashier.utils.StringUtil; +import cn.ysk.cashier.utils.ValidateCodeUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; import java.io.IOException; +import java.util.Objects; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** @@ -75,4 +87,45 @@ public class TbUserInfoController { tbUserInfoService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } + + @Autowired + ValidateCodeUtil validateCodeUtil; + + @Autowired + RedisUtils redisUtils; + + @GetMapping("sendMsg") + public Object sendMsg(){ + Object o= SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + if(Objects.isNull(o)){ + throw new BadRequestException("用户登录信息失效"); + } + JSONObject object=JSON.parseObject(JSON.toJSONString(o)); + if(Objects.isNull(object)){ + throw new BadRequestException("用户登录信息失效"); + } + String regex="^\\d{11}$"; + + if(!object.containsKey("username")||Objects.isNull(object.getString("username"))|| + !object.getString("username").matches(regex) + ){ + throw new BadRequestException("用户登录信息失效"); + } + String phone=object.getString("username"); + + String tempcode="SMS_244665149"; + + String random = StringUtil.random(6); + try { + validateCodeUtil.requestValidateCodeAli(phone, random,tempcode); + redisUtils.set(phone.concat("#").concat(tempcode),random,300L); + return "{\n" + + " \"code\": 0,\n" + + " \"msg\": \"成功\"\n" + + "}"; + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + + } } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/TbUserInfoService.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/TbUserInfoService.java index 58b86039..9ac0c4e8 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/TbUserInfoService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/TbUserInfoService.java @@ -80,4 +80,7 @@ public interface TbUserInfoService { * @throws IOException / */ void download(List all, HttpServletResponse response) throws IOException; + + + } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/utils/StringUtil.java b/eladmin-system/src/main/java/cn/ysk/cashier/utils/StringUtil.java new file mode 100644 index 00000000..fe193ecf --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/utils/StringUtil.java @@ -0,0 +1,86 @@ +package cn.ysk.cashier.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Random; + +/** + * @author lyf + */ +public class StringUtil { + /** + * 生成指定长度的随机数 + * @param length + * @return + */ + public static String genRandomNum(int length) { + int maxNum = 36; + int i; + int count = 0; + char[] str = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', + 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; + StringBuffer pwd = new StringBuffer(""); + Random r = new Random(); + while (count < length) { + i = Math.abs(r.nextInt(maxNum)); + pwd.append(str[i]); + count++; + } + return pwd.toString(); + } + + /** + * 生成订单号 + * + * @return + */ + public static synchronized String getBillno() { + StringBuilder billno = new StringBuilder(); + + // 日期(格式:20080524) + SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + billno.append(format.format(new Date())); + return billno.toString(); + } + public static JSONArray stringChangeList(String listString){ + // 使用Fastjson将JSON字符串转换为JSONArray对象 + return JSON.parseArray(listString); + + } + + public static String random(int length) { + Random random = new Random(); + String result = ""; + for (int i = 0; i < length; i++) { + result += random.nextInt(10); + } + return result; + } + + private static final String CHINESE_CHARS = "你我他她它们这里那里多少是否好坏快慢上下左右前后高低大小长短方圆胖瘦黑白红绿蓝黄紫粉红桔红橙黄棕灰褐"; + + // 生成随机中文昵称 + public static String generateRandomNickname(int length) { + StringBuilder sb = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < length; i++) { + int index = random.nextInt(CHINESE_CHARS.length()); + char randomChar = CHINESE_CHARS.charAt(index); + sb.append(randomChar); + } + return desensitizeNickname(sb.toString()); + } + + // 对昵称进行脱敏处理 + public static String desensitizeNickname(String nickname) { + if (nickname == null || nickname.length() != 5) { + return nickname; + } + return nickname.charAt(0) + "***" + nickname.charAt(4); + } + +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/utils/ValidateCodeUtil.java b/eladmin-system/src/main/java/cn/ysk/cashier/utils/ValidateCodeUtil.java new file mode 100644 index 00000000..6c08585c --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/utils/ValidateCodeUtil.java @@ -0,0 +1,76 @@ +package cn.ysk.cashier.utils; + +import com.aliyun.dysmsapi20170525.Client; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.aliyun.teaopenapi.models.Config; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; + +/** + * 获取验证码相关工具 + * @author 12847 + */ +@Component +public class ValidateCodeUtil { + /** + * 阿里云key + */ + @Value("${aliyun.keyid}") + private String ACCESSKEYID; + /** + * 阿里云secret + */ + @Value("${aliyun.keysecret}") + private String ACCESSKEYSECRET; + /** + * 十小时 + */ + protected static final long MILLIS_MINUTE = 10 *60 * 60 *1000; + + @Autowired + private HttpServletRequest request; + + + /** + * 获取验证码(阿里云) + */ + public SendSmsResponse requestValidateCodeAli(String phone, String checkCode,String templateCode) throws Exception { + Client client = null; + try { + client = createClient(); + } catch (Exception e) { + e.printStackTrace(); + } + // 1.发送短信 + com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest() + .setSignName("银收客") + .setTemplateCode(templateCode) + .setTemplateParam("{\"code\":" +"'"+checkCode +"'"+"}") + .setPhoneNumbers(phone); + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + try { + assert client != null; + return client.sendSmsWithOptions(sendSmsRequest, runtime); + } catch (Exception e) { + throw new Exception(e.getMessage()); + } + + } + /** + * 发送短信(阿里云) + * + * @return + * @throws Exception + */ + public Client createClient() throws Exception { + Config config = new Config(); + config.accessKeyId = ACCESSKEYID; + config.accessKeySecret = ACCESSKEYSECRET; + return new com.aliyun.dysmsapi20170525.Client(config); + } + + +} diff --git a/eladmin-system/src/main/resources/config/application.yml b/eladmin-system/src/main/resources/config/application.yml index fffba41c..79bfa777 100644 --- a/eladmin-system/src/main/resources/config/application.yml +++ b/eladmin-system/src/main/resources/config/application.yml @@ -72,3 +72,9 @@ mybatis-plus: global-config: db-config: id-type: auto +aliyun: + keyid: LTAI5tPdEfYSZcqHbjCrtPRD + keysecret: DZjyHBq3nTujF0NMLxnZgsecU8ZCvy + oss: + bucketname: cashier-oss + endpoint: oss-cn-beijing.aliyuncs.com From 11b3af610417cf36683e6b14d18409dd09232af0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E9=B9=8F=E8=BE=89?= <18322780655@163.com> Date: Thu, 11 Jul 2024 13:34:28 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=91=E9=80=81?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1,=E8=AE=BE=E7=BD=AE=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eladmin-system/pom.xml | 7 +++ .../controller/TbUserInfoController.java | 62 +++++++++++++++++-- .../cashier/pojo/shop/TbMerchantAccount.java | 4 ++ .../repository/TbUserInfoRepository.java | 2 + .../shop/TbMerchantAccountRepository.java | 3 + 5 files changed, 74 insertions(+), 4 deletions(-) diff --git a/eladmin-system/pom.xml b/eladmin-system/pom.xml index 4c7b7ef9..8984287d 100644 --- a/eladmin-system/pom.xml +++ b/eladmin-system/pom.xml @@ -128,6 +128,13 @@ + + com.aliyun + dysmsapi20170525 + 2.0.21 + + + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java index cdd310e2..9fbe1b22 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/TbUserInfoController.java @@ -18,12 +18,12 @@ package cn.ysk.cashier.controller; import cn.ysk.cashier.annotation.Log; import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.pojo.TbUserInfo; +import cn.ysk.cashier.pojo.shop.TbMerchantAccount; +import cn.ysk.cashier.repository.TbUserInfoRepository; +import cn.ysk.cashier.repository.shop.TbMerchantAccountRepository; import cn.ysk.cashier.service.TbUserInfoService; import cn.ysk.cashier.dto.TbUserInfoQueryCriteria; -import cn.ysk.cashier.utils.JSONUtil; -import cn.ysk.cashier.utils.RedisUtils; -import cn.ysk.cashier.utils.StringUtil; -import cn.ysk.cashier.utils.ValidateCodeUtil; +import cn.ysk.cashier.utils.*; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.aliyun.dysmsapi20170525.models.SendSmsResponse; @@ -38,6 +38,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; import java.io.IOException; +import java.util.Map; import java.util.Objects; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -128,4 +129,57 @@ public class TbUserInfoController { } } + + + @Autowired + TbMerchantAccountRepository tbMerchantAccountRepository; + + + @RequestMapping(value = "modfiyUserInfo",method = RequestMethod.POST) + public ResponseEntity modfiyUserInfo(@RequestBody Map map){ + Object o= SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + if(Objects.isNull(o)){ + throw new BadRequestException("用户登录信息失效"); + } + JSONObject object=JSON.parseObject(JSON.toJSONString(o)); + if(Objects.isNull(object)){ + throw new BadRequestException("用户登录信息失效"); + } + String regex="^\\d{11}$"; + + if(!object.containsKey("username")||Objects.isNull(object.getString("username"))|| + !object.getString("username").matches(regex) + ){ + throw new BadRequestException("用户登录信息失效"); + } + + String tempcode="SMS_244665149"; + String phone=object.getString("username"); + Object redisCode= redisUtils.get(phone.concat("#").concat(tempcode)); + if(Objects.isNull(redisCode)){ + throw new BadRequestException("短信验证码已过期"); + } + + + String code= map.get("code"); + + if(!redisCode.toString().equals(code)){ + throw new BadRequestException("短信验证码错误"); + } + redisUtils.del(phone.concat("#").concat(tempcode)); + String pwd= map.get("pwd"); + + TbMerchantAccount account= tbMerchantAccountRepository.findByAccount(phone); + if(Objects.isNull(account)){ + throw new BadRequestException("账户不存在"); + } + + account.setPwd(MD5Utils.md5(pwd.concat(account.getAccount()).concat(account.getId().toString()))); + account.setUpdatedAt(System.currentTimeMillis()); + tbMerchantAccountRepository.save(account); + + + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + + } } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbMerchantAccount.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbMerchantAccount.java index f2518932..83b4a4b5 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbMerchantAccount.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbMerchantAccount.java @@ -127,6 +127,10 @@ public class TbMerchantAccount implements Serializable { @ApiModelProperty(value = "updatedAt") private Long updatedAt; + @Column(name = "`pwd`") + @ApiModelProperty(value = "操作密码") + private String pwd; + public void copy(TbMerchantAccount source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/TbUserInfoRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/TbUserInfoRepository.java index 8c57c7c3..eb0554df 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/TbUserInfoRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/TbUserInfoRepository.java @@ -25,4 +25,6 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; * @date 2023-11-13 **/ public interface TbUserInfoRepository extends JpaRepository, JpaSpecificationExecutor { + + } \ No newline at end of file diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/shop/TbMerchantAccountRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/shop/TbMerchantAccountRepository.java index 791d9373..3c1369b5 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/shop/TbMerchantAccountRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/shop/TbMerchantAccountRepository.java @@ -38,4 +38,7 @@ public interface TbMerchantAccountRepository extends JpaRepository