ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -5,8 +5,10 @@ import com.ruoyi.auth.form.LoginBody; import com.ruoyi.auth.form.RegisterBody; import com.ruoyi.auth.service.SysLoginService; import com.ruoyi.auth.utils.JuTongDaSMSUtil; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.JwtUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.redis.service.RedisService; @@ -17,7 +19,6 @@ import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import com.ruoyi.system.api.domain.dto.AppMiniRegisterDTO; import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.Api; @@ -149,6 +150,11 @@ @GetMapping("send-verification-code") @ApiOperation(value = "管理后台-发送验证码") public R<?> changePassword(@RequestParam("username") String username) { Boolean result = redisService.hasKey( CacheConstants.CHANGE_PASSWORD_CAPTCHA_CODE_KEY + username); if (result) { throw new ServiceException("请勿重复发送验证码"); } //校验手机号码 SysUser sysUser = userClient.queryUserByUserName(username).getData(); if (StringUtils.isNull(sysUser)) { @@ -156,9 +162,7 @@ } String code = RandomUtil.randomNumbers(6); try { //TODO 发送短信未配置 // HuaWeiSMSUtil.sendSms(code, sysUser.getUserName(), "8823121426646", // "cf1707ec44694627b1b483b0277e12fd"); JuTongDaSMSUtil.smsSend(sysUser.getUserName(), code, "", ""); } catch (Exception e) { log.error("【修改密码】发送短信失败", e); return R.fail("发送失败"); ruoyi-auth/src/main/java/com/ruoyi/auth/utils/JuTongDaSMSUtil.java
New file @@ -0,0 +1,141 @@ package com.ruoyi.auth.utils; import com.alibaba.nacos.common.utils.StringUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Base64; /** * 聚通达短信发送工具类 * * @author mitao * @date 2024/6/17 */ public class JuTongDaSMSUtil { private static final String UID = "201000"; private static final String PWD = "926893"; private static final String template = "【酒鼎老酒】您的验证码为:${code},该验证码5分钟内有效,请勿泄露于他人!"; public static void main(String[] args) { String moblies = "18283820718"; String content = "123456"; String ext = ""; String attime = ""; String result = JuTongDaSMSUtil.smsSend(moblies, content, ext, attime); System.out.println("result=" + result); } // 发送短信 public static String smsSend(String mobile, String content, String ext, String attime) { String errMess = ""; StringBuffer sendData = new StringBuffer(""); try { sendData.append("uid=").append(UID); // 用户名 String pwd = getMD5(PWD);// 原始密码做MD5加密,32位大写格式 sendData.append("&password=").append(pwd); // 密码 sendData.append("&encode=").append("GBK"); // encode=GBK或者encode=utf8 content = template.replace("${code}", content); String contentBase64 = Base64.getEncoder() .encodeToString(content.getBytes("gbk"));// 先用encode中定义的格式编码,再用base64加密内容 sendData.append("&encodeType=base64"); // 固定 sendData.append("&content=").append(contentBase64); // base64加密后的内容 sendData.append("&mobile=").append(mobile); // 手机号 // sendData.append("&cid=").append("45955855252252555"); // 唯一标识,选填,如果不填系统自动生成作为当前批次的唯一标识 if (!StringUtils.isNotBlank(ext)) { sendData.append("&extNumber=").append(ext); // 扩展 } if (!StringUtils.isNotBlank(attime)) { sendData.append("&schtime=").append(attime); // 定时时间,选填,格式2008-06-09 12:00:00 } errMess = sendPost("https://sms3api.jvtd.cn/jtdsms/smsSend", sendData.toString());// 普通短信 // errMess =sendPost("http://ip:8090/jtdsms/sendData.do", sendData.toString());//个性短信 } catch (Exception e) { errMess = "-601"; } return errMess; } public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } public static String getMD5(String sourceStr) { String resultStr = ""; try { byte[] temp = sourceStr.getBytes(); MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(temp); byte[] b = md5.digest(); for (int i = 0; i < b.length; i++) { char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; char[] ob = new char[2]; ob[0] = digit[(b[i] >>> 4) & 0X0F]; ob[1] = digit[b[i] & 0X0F]; resultStr += new String(ob); } return resultStr; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
@@ -33,7 +33,6 @@ import com.ruoyi.member.domain.MemberLevel; import com.ruoyi.member.mapper.MemberLevelMapper; import com.ruoyi.member.mapper.MemberMapper; import com.ruoyi.member.service.IMemberLevelService; import com.ruoyi.member.service.IMemberPointsService; import com.ruoyi.member.service.IMemberService; import com.ruoyi.member.util.HttpUtils; @@ -506,8 +505,6 @@ @Override public PageDTO<MgtMemberVO> getMemberPage(MgtMemberQuery query) { Page<Member> page = this.lambdaQuery() .select(Member::getId, Member::getNickname, Member::getRealName, Member::getPhone, Member::getIdNumber) .like(StringUtils.isNotBlank(query.getRealName()), Member::getRealName, query.getRealName()) .like(StringUtils.isNotBlank(query.getPhone()), Member::getPhone, query.getPhone()) ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderReturnRequestMapper.xml
@@ -9,8 +9,8 @@ o.order_no, o.member_id, CASE WHEN o.order_from = 4 THEN 2 -- 当order_from为拍卖订单时,orderType赋值为2 ELSE 1 -- 其他情况下,orderType赋值为1 WHEN o.order_from = 4 THEN 2 ELSE 1 END AS orderType, o.order_from FROM @@ -35,10 +35,10 @@ <if test="query.status != null"> AND torr.status = #{query.status} </if> <if test="query.orderType != null and query.orderType== 1"> <if test="query.orderType != null and query.orderType== OrderTypeEnum.MALL_ORDER"> AND o.order_from in (1,2,3) </if> <if test="query.orderType != null and query.orderType== 2"> <if test="query.orderType != null and query.orderType== OrderTypeEnum.AUCTION_ORDER"> AND o.order_from = 4 </if> </where> ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/MgtCouponController.java
@@ -83,8 +83,7 @@ /** * 上架/下架 * * @param dto * @return * @param dto 管理后台-优惠券上架下架数据传输对象 */ @ApiOperation("上架/下架") @PutMapping("/upd-status") ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/ICouponService.java
@@ -43,6 +43,11 @@ */ void updateCoupon(MgtCouponDTO dto); /** * 上架/下架 * * @param dto 管理后台-优惠券上架下架数据传输对象 */ void updStatus(MgtCouponUpdDTO dto); /** ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java
@@ -160,11 +160,16 @@ this.updateById(coupon); } /** * 上架/下架 * * @param dto 管理后台-优惠券上架下架数据传输对象 */ @Override public void updStatus(MgtCouponUpdDTO dto) { this.lambdaUpdate() .set(Coupon::getCouponStatus, dto.getCouponStatus()) .eq(Coupon::getId, dto.getId()); .eq(Coupon::getId, dto.getId()).update(); } /** ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/CustomConfigController.java
@@ -11,7 +11,6 @@ import com.ruoyi.system.service.ICustomConfigService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import java.util.List; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -52,7 +51,7 @@ */ @ApiOperation("获取积分设置") @GetMapping("/points") public R<List<CustomConfigVO>> getPointsConfig() { public R<PointsConfigDTO> getPointsConfig() { return R.ok(iCustomConfigService.getPointsConfig()); } /** @@ -109,8 +108,8 @@ * @return List<CustomConfigVO> */ @ApiOperation("获取售后设置") @PostMapping("/get-after-sale-setting") public R<List<CustomConfigVO>> getAfterSaleSetting() { @GetMapping("/get-after-sale-setting") public R<MgtAfterSaleSettingDTO> getAfterSaleSetting() { return R.ok(iCustomConfigService.getAfterSaleSetting()); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java
@@ -5,7 +5,6 @@ import com.ruoyi.system.domain.dto.MgtAfterSaleSettingDTO; import com.ruoyi.system.domain.dto.PointsConfigDTO; import com.ruoyi.system.domain.vo.CustomConfigVO; import java.util.List; /** * <p> @@ -30,7 +29,7 @@ * * @return List<CustomConfig> */ List<CustomConfigVO> getPointsConfig(); PointsConfigDTO getPointsConfig(); /** * 获取订单说明设置 @@ -58,5 +57,5 @@ * * @return List<CustomConfigVO> */ List<CustomConfigVO> getAfterSaleSetting(); MgtAfterSaleSettingDTO getAfterSaleSetting(); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CustomConfigServiceImpl.java
@@ -10,6 +10,7 @@ import com.ruoyi.system.domain.vo.CustomConfigVO; import com.ruoyi.system.mapper.CustomConfigMapper; import com.ruoyi.system.service.ICustomConfigService; import java.math.BigDecimal; import java.util.List; import java.util.Optional; import org.springframework.stereotype.Service; @@ -70,12 +71,22 @@ * @return List<CustomConfigVO> */ @Override public List<CustomConfigVO> getPointsConfig() { public PointsConfigDTO getPointsConfig() { PointsConfigDTO dto = new PointsConfigDTO(); List<CustomConfig> list = this.lambdaQuery() .in(CustomConfig::getConfigType, ConfigEnum.MEMBER_POINTS_MONEY.getKey(), .in(CustomConfig::getConfigKey, ConfigEnum.MEMBER_POINTS_MONEY.getKey(), ConfigEnum.MEMBER_POINTS_POINTS.getKey()) .eq(CustomConfig::getDelFlag, 0).list(); return BeanUtils.copyList(list, CustomConfigVO.class); for (CustomConfig customConfig : list) { if (ConfigEnum.MEMBER_POINTS_MONEY.getKey().equals(customConfig.getConfigKey())) { dto.setConsumeAmount( BigDecimal.valueOf(Double.parseDouble(customConfig.getConfigValue()))); } if (ConfigEnum.MEMBER_POINTS_POINTS.getKey().equals(customConfig.getConfigKey())) { dto.setPoints(Integer.parseInt(customConfig.getConfigValue())); } } return dto; } /** @@ -126,17 +137,16 @@ } private void handleConfigSetting(String value, ConfigEnum configEnum) { Optional<CustomConfig> receiverNameConfigOptional = getCustomConfigByKey( ConfigEnum.RETURN_ADDRESS_USER_NAME.getKey()); CustomConfig receiverNameConfig = receiverNameConfigOptional.orElseGet(() -> { Optional<CustomConfig> configSettingOptional = getCustomConfigByKey(configEnum.getKey()); CustomConfig configSetting = configSettingOptional.orElseGet(() -> { CustomConfig config = new CustomConfig(); config.setConfigKey(ConfigEnum.RETURN_ADDRESS_USER_NAME.getKey()); config.setConfigType(ConfigEnum.RETURN_ADDRESS_USER_NAME.getKeyType()); config.setConfigName(ConfigEnum.RETURN_ADDRESS_USER_NAME.getKeyName()); config.setConfigKey(configEnum.getKey()); config.setConfigType(configEnum.getKeyType()); config.setConfigName(configEnum.getKeyName()); return config; }); receiverNameConfig.setConfigValue(value); this.saveOrUpdate(receiverNameConfig); configSetting.setConfigValue(value); this.saveOrUpdate(configSetting); } /** @@ -145,12 +155,28 @@ * @return List<CustomConfigVO> */ @Override public List<CustomConfigVO> getAfterSaleSetting() { public MgtAfterSaleSettingDTO getAfterSaleSetting() { MgtAfterSaleSettingDTO dto = new MgtAfterSaleSettingDTO(); List<CustomConfig> list = this.lambdaQuery() .in(CustomConfig::getConfigType, ConfigEnum.RETURN_ADDRESS_USER_NAME, .in(CustomConfig::getConfigKey, ConfigEnum.RETURN_ADDRESS_USER_NAME, ConfigEnum.RETURN_ADDRESS_USER_PHONE, ConfigEnum.RETURN_ADDRESS_USER_ADDRESS, ConfigEnum.RETURN_CYCLE) .eq(CustomConfig::getDelFlag, 0).list(); return BeanUtils.copyList(list, CustomConfigVO.class); for (CustomConfig customConfig : list) { if (ConfigEnum.RETURN_ADDRESS_USER_NAME.getKey().equals(customConfig.getConfigKey())) { dto.setReceiverName(customConfig.getConfigValue()); } if (ConfigEnum.RETURN_ADDRESS_USER_PHONE.getKey().equals(customConfig.getConfigKey())) { dto.setReceiverPhone(customConfig.getConfigValue()); } if (ConfigEnum.RETURN_ADDRESS_USER_ADDRESS.getKey() .equals(customConfig.getConfigKey())) { dto.setReceiverAddress(customConfig.getConfigValue()); } if (ConfigEnum.RETURN_CYCLE.getKey().equals(customConfig.getConfigKey())) { dto.setReturnCycle(Integer.parseInt(customConfig.getConfigValue())); } } return dto; } }