diff --git a/dl-module-base/pom.xml b/dl-module-base/pom.xml index f373003a..264e25bd 100644 --- a/dl-module-base/pom.xml +++ b/dl-module-base/pom.xml @@ -15,6 +15,14 @@ 点亮业务基础库 + + + + com.blingblingbang + ueditor + ${ueditor.version} + + cn.iocoder.boot yudao-module-system-biz diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/banner/controller/BannerAPI.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/banner/controller/BannerAPI.java index fe42e48a..eab4611b 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/banner/controller/BannerAPI.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/app/banner/controller/BannerAPI.java @@ -31,8 +31,13 @@ public class BannerAPI { * @date 11:07 2024/9/27 * @param type type **/ - @GetMapping("/get") - public CommonResult getBannerByType(@RequestParam("type") String type) { - return success(baseBannerService.getBannerByType(type)); + @GetMapping("/list") + public CommonResult getBannerByTypeList(@RequestParam("type") String type) { + return success(baseBannerService.getBannerByTypeList(type)); + } + + @GetMapping("/getById") + public CommonResult getBannerById(@RequestParam("id") String id) { + return success(baseBannerService.getBannerById(id)); } } diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/controller/admin/UeditorController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/controller/admin/UeditorController.java new file mode 100644 index 00000000..34e5823e --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/controller/admin/UeditorController.java @@ -0,0 +1,90 @@ +package cn.iocoder.yudao.module.banner.controller.admin; + +import cn.iocoder.yudao.module.infra.api.file.FileApi; +import com.alibaba.fastjson.JSON; +import com.baidu.ueditor.ActionEnter; +import org.springframework.util.ClassUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/ueditor") +public class UeditorController { + + @Resource + private FileApi fileApi; + + //配置ueditor后端上传接口的验证 + @RequestMapping("/config") + public String config(HttpServletRequest request, HttpServletResponse response, String action, MultipartFile[] upfile) throws IOException { + //获取配置文件json内容返回给前端 + if (action.equals("config")) { + request.setCharacterEncoding("utf-8"); + response.setHeader("Content-Type", "text/html"); + //注意path不能含有中文路径,确认该path能指向config.json +// String path = ClassUtils.getDefaultClassLoader().getResource("").getPath() + "config"; + String path = "E:/Workspace/Work/lanan/lanan-system/dl-module-base/target/classes/config/ueditor/config"; + System.out.println("path = " + path); + PrintWriter printWriter = response.getWriter(); + printWriter.write(new ActionEnter(request, path).exec()); + printWriter.flush(); + printWriter.close(); + } + //上传图片 + else if (action.equals("uploadimage")) { + Map result = new HashMap(); + for (MultipartFile multipartFile : upfile) { + //调用系统写好的文件上传方法,并返回给前端上传后的文件路径,组件需要拼接回显 + String upload = fileApi.createFile(multipartFile.getBytes()); + System.out.println("upload = " + upload); + System.out.println("upload.sub= " + upload.substring(upload.lastIndexOf("/"))); + result.put("title", upload.substring(upload.lastIndexOf("/")+1)); + result.put("original", multipartFile.getOriginalFilename()); + result.put("state", "SUCCESS"); + result.put("url", upload); + String jStr = JSON.toJSONString(result); + return jStr; + } + return null; + } + //上传视频 + else if(action.equals("uploadvideo")){ + Map result = new HashMap(); + for (MultipartFile multipartFile : upfile) { + String upload = fileApi.createFile(multipartFile.getBytes()); + System.out.println("upload = " + upload); + System.out.println("upload.sub = " + upload.substring(upload.lastIndexOf("/"))); + result.put("title", upload.substring(upload.lastIndexOf("/")+1)); + result.put("original", multipartFile.getOriginalFilename()); + result.put("state", "SUCCESS"); + result.put("url", upload); + String jStr = JSON.toJSONString(result); + return jStr; + } + }else{ + Map result = new HashMap(); + for (MultipartFile multipartFile : upfile) { + String upload = fileApi.createFile(multipartFile.getBytes()); + System.out.println("upload = " + upload); + System.out.println("upload.sub= " + upload.substring(upload.lastIndexOf("/"))); + result.put("title", upload.substring(upload.lastIndexOf("/")+1)); + result.put("original", multipartFile.getOriginalFilename()); + result.put("state", "SUCCESS"); + result.put("url", upload); + String jStr = JSON.toJSONString(result); + return jStr; + } + } + return null; + } + +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/entity/DlBaseBanner.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/entity/DlBaseBanner.java index 10257122..b0a4b304 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/entity/DlBaseBanner.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/entity/DlBaseBanner.java @@ -45,4 +45,7 @@ public class DlBaseBanner extends TenantBaseDO { /** 跳转链接 */ private String toUrl; + + /** 页面内容 */ + private String content; } \ No newline at end of file diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/mapper/DlBaseBannerMapper.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/mapper/DlBaseBannerMapper.java index b7871e01..ccfc2d30 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/mapper/DlBaseBannerMapper.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/mapper/DlBaseBannerMapper.java @@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 针对表【dl_base_banner(banner图基础库)】的数据库操作Mapper * @@ -25,6 +27,15 @@ public interface DlBaseBannerMapper extends BaseMapper { * @param bannerReqVO 查询对象 **/ IPage queryByPage(@Param("map") DlBannerReqVO bannerReqVO, Page page); + + /** + * 不同小程序用不同的banner,用type分 + * + * @param type type + * @author 小李 + * @date 11:07 2024/9/27 + **/ + List getBannerByTypeList(@Param("type") String type); } diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/service/DlBaseBannerService.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/service/DlBaseBannerService.java index 9b0ad4ae..18d3b399 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/service/DlBaseBannerService.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/service/DlBaseBannerService.java @@ -59,5 +59,5 @@ public interface DlBaseBannerService extends IService { * @date 11:07 2024/9/27 * @param type type **/ - List getBannerByType(String type); + List getBannerByTypeList(String type); } diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/service/impl/DlBaseBannerServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/service/impl/DlBaseBannerServiceImpl.java index ae029a72..6b0be87d 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/service/impl/DlBaseBannerServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/banner/service/impl/DlBaseBannerServiceImpl.java @@ -80,9 +80,8 @@ public class DlBaseBannerServiceImpl extends ServiceImpl getBannerByType(String type) { - List dlBaseBanners = baseMapper.selectList(new LambdaQueryWrapper().eq(DlBaseBanner::getTypeId, type)); - return dlBaseBanners.stream().sorted(Comparator.comparing(DlBaseBanner::getSort)).collect(Collectors.toList()); + public List getBannerByTypeList(String type) { + return baseMapper.getBannerByTypeList(type); } } diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java index 0d62a6b3..e779a574 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/CustomerMainService.java @@ -51,6 +51,14 @@ public interface CustomerMainService extends IService { **/ CustomerMainRespVO getCustomerById(String id); + /** + * 根据userID客户表信息 + * @author vinjor-M + * @date 15:25 2024/9/27 + * @param userId 用户id + **/ + CustomerMain getCustomerByUserId(Long userId); + /** * 获取当前登录用户的客户信息 * @author PQZ diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java index 4b5e9603..cd7c38d9 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CustomerMainServiceImpl.java @@ -213,6 +213,26 @@ public class CustomerMainServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper() + .eq(CustomerMain::getUserId,userId); + List customerList = this.list(queryWrapper); + if(customerList.isEmpty()){ + return null; + }else{ + return customerList.get(0); + } + } + /** * 获取当前登录用户的客户信息 * @@ -222,7 +242,6 @@ public class CustomerMainServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(CustomerMain::getUserId,loginUser.getId()).eq(BaseDO::getDeleted,'0'); diff --git a/dl-module-base/src/main/resources/config/ueditor/config.json b/dl-module-base/src/main/resources/config/ueditor/config.json new file mode 100644 index 00000000..1b23988d --- /dev/null +++ b/dl-module-base/src/main/resources/config/ueditor/config.json @@ -0,0 +1,69 @@ +{ + /* 上传图片配置项 */ + "imageActionName": "uploadimage", /* 执行上传图片的action名称 */ + "imageFieldName": "upfile", /* 提交的图片表单名称 */ + "imageMaxSize": 2048000, /* 上传大小限制,单位B */ + "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp", '.webp'], /* 上传图片格式显示 */ + "imageCompressEnable": true, /* 是否压缩图片,默认是true */ + "imageCompressBorder": 1600, /* 图片压缩最长边限制 */ + "imageInsertAlign": "none", /* 插入的图片浮动方式 */ + "imageUrlPrefix": "http://122.51.230.86:9000/", /* 图片访问路径前缀 */ + "imagePathFormat": "image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ + /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ + /* {time} 会替换成时间戳 */ /* {yyyy} 会替换成四位年份 */ + /* {yy} 会替换成两位年份 */ + /* {mm} 会替换成两位月份 */ + /* {dd} 会替换成两位日期 */ + /* {hh} 会替换成两位小时 */ + /* {ii} 会替换成两位分钟 */ + /* {ss} 会替换成两位秒 */ + /* 非法字符 \ : * ? " < > | */ + /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */ + /* 涂鸦图片上传配置项 */ + "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */ + "scrawlFieldName": "upfile", /* 提交的图片表单名称 */ + "scrawlPathFormat": "image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */ + "scrawlUrlPrefix": "", /* 图片访问路径前缀 */ + "scrawlInsertAlign": "none", /* 截图工具上传 */ + "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */ + "snapscreenPathFormat": "image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */ + "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */ + /* 抓取远程图片配置 */ + "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"], + "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */ + "catcherFieldName": "source", /* 提交的图片列表表单名称 */ + "catcherPathFormat": "image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "catcherUrlPrefix": "", /* 图片访问路径前缀 */ + "catcherMaxSize": 2048000, /* 上传大小限制,单位B */ + "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */ + /* 上传视频配置 */ + "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */ + "videoFieldName": "upfile", /* 提交的视频表单名称 */ + "videoPathFormat": "video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "videoUrlPrefix": "http://122.51.230.86:9000/", /* 视频访问路径前缀 */ + "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */ + "videoAllowFiles": [ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */ + /* 上传文件配置 */ + "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */ + "fileFieldName": "upfile", /* 提交的文件表单名称 */ + "filePathFormat": "file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "fileUrlPrefix": "http://122.51.230.86:9000/", /* 文件访问路径前缀 */ + "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */ + "fileAllowFiles": [ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" ], /* 上传文件格式显示 */ + /* 列出指定目录下的图片 */ + "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */ + "imageManagerListPath": "image/", /* 指定要列出图片的目录 */ + "imageManagerListSize": 20, /* 每次列出文件数量 */ + "imageManagerUrlPrefix": "http://122.51.230.86:9000/", /* 图片访问路径前缀 */ + "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */ + "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */ + /* 列出指定目录下的文件 */ + "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */ + "fileManagerListPath": "file/", /* 指定要列出文件的目录 */ + "fileManagerUrlPrefix": "http://122.51.230.86:9000/", /* 文件访问路径前缀 */ + "fileManagerListSize": 20, /* 每次列出文件数量 */ + "fileManagerAllowFiles": [ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" ] /* 列出的文件类型 */ +} diff --git a/dl-module-base/src/main/resources/mapper/banner/DlBaseBannerMapper.xml b/dl-module-base/src/main/resources/mapper/banner/DlBaseBannerMapper.xml index 37326392..1f6bf1fd 100644 --- a/dl-module-base/src/main/resources/mapper/banner/DlBaseBannerMapper.xml +++ b/dl-module-base/src/main/resources/mapper/banner/DlBaseBannerMapper.xml @@ -5,12 +5,13 @@ - - - - - - + + + + + + + @@ -19,14 +20,22 @@ url, sort, type_id, - to_url - from dl_base_banner dbb where dbb.deleted = '0' + to_url, + content + from dl_base_banner dbb + where dbb.deleted = '0' + + diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/app/controller/LoginController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/app/controller/LoginController.java index 1343772b..c1ba316c 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/app/controller/LoginController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/app/controller/LoginController.java @@ -11,6 +11,9 @@ import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; import cn.iocoder.yudao.module.app.vo.WxLoginBody; +import cn.iocoder.yudao.module.custom.entity.CustomerMain; +import cn.iocoder.yudao.module.custom.service.CustomerMainService; +import cn.iocoder.yudao.module.custom.vo.CustomerMainRespVO; import cn.iocoder.yudao.module.system.api.dict.DictDataApi; import cn.iocoder.yudao.module.system.api.permission.PermissionApi; import cn.iocoder.yudao.module.system.api.permission.RoleApi; @@ -32,6 +35,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; import io.swagger.v3.oas.annotations.Operation; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; @@ -65,20 +69,14 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.*; public class LoginController { @Resource private AdminAuthService loginService; - - - - @Resource private WechatPayConfig wxConfig; - - - @Resource private RestTemplate restTemplate; - @Resource private SecurityProperties securityProperties; + @Autowired + private CustomerMainService customerMainService; @PostMapping("/wxLogin") @TenantIgnore @@ -107,9 +105,12 @@ public class LoginController { if (StringUtils.hasText(decryptResult)) { //如果解析成功,获取token - AuthLoginRespVO loginVO = loginService.wxLoginJc(decryptResult,openId,wxLoginBody.getInviteId()); + AuthLoginRespVO loginVO = loginService.wxLoginRepair(decryptResult,openId,wxLoginBody.getInviteId()); Map map = new HashMap<>(); map.put("token", loginVO.getAccessToken()); + //查会员表里是否有数据 + CustomerMain customerMain = customerMainService.getCustomerByUserId(loginVO.getUserId()); + map.put("ifNeedFill", null==customerMain); return success(map); } else { return error(500, "微信登录失败!"); diff --git a/pom.xml b/pom.xml index edff85f6..71853a32 100644 --- a/pom.xml +++ b/pom.xml @@ -51,6 +51,7 @@ 2.7.18 1.5.5.Final UTF-8 + 1.1.2 diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java index 5a40a5e2..fd51558e 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java @@ -164,7 +164,7 @@ public class YudaoWebSecurityConfigurerAdapter { .antMatchers("/admin-api/system/schoolRegistrationInfo/addWx","/admin-api/system/schoolInstructor/listWx","/admin-api/system/schoolAppointmentInfo/addWx").permitAll() // 驾校 .antMatchers("/admin-api/drivingSchool/system/driveSchoolCourse/list","/admin-api/loginJx","/admin-api/loginSmsCodeJx"," /admin-api/jxInfo/payNotify","/admin-api/drivingSchool/text/list","/admin-api/drivingSchool/system/swiper/list","/admin-api/drivingSchool/system/schoolInfo/list").permitAll() - + .antMatchers("/admin-api/ueditor/*").permitAll() // 检测app首页 .antMatchers("/admin-api/appInspection/appHome/**").permitAll() //检测小程序相关 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java index 8a79beff..fcb9a928 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java @@ -105,4 +105,9 @@ public class UserSaveReqVO { private Long balance; + /** + * 维修小程序openID + */ + private String repairOpenId; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java index 29ca03e1..badc3a6a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java @@ -85,4 +85,15 @@ public interface AdminAuthService { * @return cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginRespVO **/ AuthLoginRespVO wxLoginByUserId(Long userId,String userName); + + /** + * 微信小程序自动注册账号并登录 + * @author vinjor-M + * @date 15:10 2024/9/27 + * @param decryptResult + * @param openId openId + * @param inviteId + * @return cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginRespVO + **/ + AuthLoginRespVO wxLoginRepair(String decryptResult, String openId, Long inviteId); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index 51896acb..c5e64611 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -375,7 +375,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { List jcyh = roleService.getRoleListByCodes(Collections.singletonList("jcyh")); Set ids = new HashSet<>(); ids.add(jcyh.get(0).getId()); - // permissionService.assignUserRole(user.getId(),ids); + permissionService.assignUserRole(user.getId(),ids); }else { //更新 user.setId(wxUser.getId()); @@ -410,4 +410,62 @@ public class AdminAuthServiceImpl implements AdminAuthService { // 生成token return createTokenAfterLoginSuccess(userId, userName, LoginLogTypeEnum.LOGIN_USERNAME); } + + /** + * 微信小程序自动注册账号并登录 + * + * @param decryptResult + * @param openId openId + * @param inviteId + * @return cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthLoginRespVO + * @author vinjor-M + * @date 15:10 2024/9/27 + **/ + @Override + public AuthLoginRespVO wxLoginRepair(String decryptResult, String openId, Long inviteId) { + //字符串转json + JSONObject jsonObject = JSONObject.parseObject(decryptResult); + String phoneNumber = jsonObject.getString("phoneNumber"); + //还可以获取其他信息 + //根据手机号判断数据库中是否有该用户 + AdminUserDO wxUser = userService.getUserByMobileWithoutTenant(phoneNumber); + //如果查不到,则新增,查到了,则更新 + UserSaveReqVO user = new UserSaveReqVO(); + if (wxUser == null) { + // 新增 + user.setUsername(phoneNumber); + user.setNickname(phoneNumber); + user.setMobile(phoneNumber); + user.setPassword(passwordEncoder.encode("123456")); + user.setRepairOpenId(openId); + user.setTenantId(180L); + if (null!=inviteId){ + //绑定上级 + user.setInviteId(inviteId); + //给上级进行积分奖励 +// userBalanceService.inviteRewards(inviteId); + } + user.setDeptId(100L); + Long uid = userService.createUser(user); + wxUser = new AdminUserDO(); + wxUser.setId(uid); + wxUser.setUsername(phoneNumber); + }else { + //更新 + user.setId(wxUser.getId()); + user.setNickname(phoneNumber); + user.setRepairOpenId(openId); + if (ObjectUtil.isEmpty(user.getInviteId())){ + if (null!=inviteId){ + //绑定上级 + user.setInviteId(inviteId); + //给上级进行积分奖励 +// userBalanceService.inviteRewards(inviteId); + } + } + userService.updateUser(user); + } + // 生成token + return createTokenAfterLoginSuccess(wxUser.getId(), wxUser.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL); + } } diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index b29532e3..776f9170 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -185,10 +185,10 @@ debug: false --- #################### 微信公众号、小程序相关配置 #################### wx: mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 -# app-id: wx8653afe16dffec37 # 蓝安 -# secret: ab94673dd0cca78abd0a453d0aac9f98 - app-id: wxb1f71e5e0c5f9ee7 # 点亮 - secret: 2e9864a6b224feb6fba4ab73b70212cd + app-id: wx8653afe16dffec37 # 蓝安 + secret: 0d13b60547b73d844fc95871d9b264dd +# app-id: wxb1f71e5e0c5f9ee7 # 点亮 +# secret: 2e9864a6b224feb6fba4ab73b70212cd # 存储配置,解决 AccessToken 的跨节点的共享 config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 diff --git a/yudao-server/src/main/resources/application.yaml b/yudao-server/src/main/resources/application.yaml index fa3d2809..363a7c96 100644 --- a/yudao-server/src/main/resources/application.yaml +++ b/yudao-server/src/main/resources/application.yaml @@ -231,6 +231,8 @@ yudao: - /admin-api/system/tenant/getListByWebsite - /admin-api/rescue/loginQx - /userClient/repair/wxLogin + - /userClient/base/company/page #查询可提供服务的子公司,不需要登录 + - /userClient/base/company/get #查询可提供服务的子公司详情,不需要登录 websocket: enable: true # websocket的开关 path: /infra/ws # 路径 @@ -286,6 +288,7 @@ yudao: - /userClient/pay/** - /userClient/weChat/** - /userClient/** + - /admin-api/ueditor/** ignore-tables: - system_tenant