From 4351e71d782741143a98f86f6648acd16689165f Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 27 May 2022 19:48:02 +0800 Subject: [PATCH] Merge branch 'developer' into hive2.0 --- zq-erp/src/main/java/com/matrix/system/app/action/ApiCommonAction.java | 239 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 218 insertions(+), 21 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/app/action/ApiCommonAction.java b/zq-erp/src/main/java/com/matrix/system/app/action/ApiCommonAction.java index b4d1a24..76fdd77 100644 --- a/zq-erp/src/main/java/com/matrix/system/app/action/ApiCommonAction.java +++ b/zq-erp/src/main/java/com/matrix/system/app/action/ApiCommonAction.java @@ -1,52 +1,68 @@ package com.matrix.system.app.action; -import com.alibaba.fastjson.JSONObject; -import com.matrix.component.redis.RedisClient; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.TypeReference; +import com.matrix.component.tools.HttpCurlUtil; import com.matrix.core.pojo.AjaxResult; -import com.matrix.core.tools.DateUtil; -import com.matrix.core.tools.LogUtil; -import com.matrix.core.tools.StringUtils; -import com.matrix.core.tools.UUIDUtil; +import com.matrix.core.tools.*; import com.matrix.system.app.authority.AppAuthorityManager; -import com.matrix.system.app.dto.LoginDto; -import com.matrix.system.app.dto.PwdResetDto; -import com.matrix.system.app.dto.SmsCodeDto; -import com.matrix.system.app.dto.UploadPhotoDto; +import com.matrix.system.app.dto.*; +import com.matrix.system.app.utils.Sms106Send; import com.matrix.system.app.vo.UserInfoVo; -import com.matrix.system.common.authority.DefaultAuthorityManager; import com.matrix.system.common.authority.strategy.AccountPasswordLogin; import com.matrix.system.common.authority.strategy.LoginStrategy; +import com.matrix.system.common.bean.SysCompany; import com.matrix.system.common.bean.SysUsers; +import com.matrix.system.common.constance.AppConstance; +import com.matrix.system.common.dao.BusParameterSettingsDao; +import com.matrix.system.common.init.LocalCache; +import com.matrix.system.common.init.UserCacheManager; +import com.matrix.system.common.interceptor.HostInterceptor; +import com.matrix.system.common.service.SysCompanyService; import com.matrix.system.common.service.SysUsersService; import com.matrix.system.common.tools.PasswordUtil; +import com.matrix.system.common.tools.UploadUtil; import com.matrix.system.hive.bean.AppVersion; import com.matrix.system.hive.bean.SysShopInfo; import com.matrix.system.hive.plugin.util.CollectionUtils; import com.matrix.system.hive.plugin.util.ImageUtil; import com.matrix.system.hive.service.SysShopInfoService; +import com.matrix.system.shopXcx.api.WeChatApiTools; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; +import net.sf.json.JSONObject; +import org.apache.commons.fileupload.FileUploadException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.File; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; /** * @author wzy * @date 2020-12-21 **/ +@CrossOrigin(origins = "*") @Api(value = "CommonAction", tags = "手机端公共请求类(含登陆)") @RestController @RequestMapping(value = "/api/common") public class ApiCommonAction { + @Autowired + UploadUtil uploadUtil; + @Autowired private SysUsersService sysUsersService; @@ -58,19 +74,31 @@ private AppAuthorityManager authorityManager; @Autowired - private RedisClient redisClient; + private BusParameterSettingsDao busParameterSettingsDao; + + @Autowired + private SysCompanyService sysCompanyService;; + + @Autowired + WeChatApiTools weChatApiTools; + + @Autowired + private UserCacheManager userCacheManager; @Value("${file_storage_path}") private String fileStoragePath; @Value("${static_resource_url}") private String nginxUrl; + @Value("${login_public_key}") + private String publicKey; + @ApiOperation(value = "登陆接口", notes = "手机端登陆接口") @ApiResponses({ @ApiResponse(code = 200, message = "OK", response = UserInfoVo.class) }) @PostMapping(value = "/login") - public AjaxResult login(@RequestBody @Validated LoginDto loginDto) { + public AjaxResult login(@RequestBody @Validated LoginDto loginDto) throws Exception { SysUsers user = new SysUsers(); user.setSuAccount(loginDto.getUsername()); @@ -87,18 +115,19 @@ user.setSuPassword(null); String token = UUIDUtil.getRandomID(); - redisClient.saveValueForever(token, JSONObject.toJSONString(user)); - redisClient.saveValueForever(user.getSuId().toString(), token); + LocalCache.save(token, user); userInfoVo.setId(user.getSuId()); userInfoVo.setName(user.getSuName()); userInfoVo.setRoleName(user.getRoleName()); userInfoVo.setPhoto(user.getSuPhoto()); + String sb = token + "_1" + "_/api/vip/findVipInfoById/972"; AjaxResult result = AjaxResult.buildSuccessInstance("登陆成功"); authorityManager.initUserPower(result,user); result.putInMap("user", userInfoVo); result.putInMap("token", token); + result.putInMap("rasToken", RSAUtils.encryptByPublicKey(sb, publicKey)); return result; } @@ -108,6 +137,8 @@ // 文件保存目录路径 String savePath = fileStoragePath; String abstractPath= DateUtil.dateFormatStr(new Date(),DateUtil.DATE_FORMAT_NO_SPLITE_DD); + savePath=savePath+File.separator+abstractPath; + String fileName =UUIDUtil.getRandomID() + ".png"; @@ -126,16 +157,32 @@ uploadDir.mkdir(); } - ImageUtil.base64ToFile(uploadPhotoDto.getBase64(), savePath+File.separator+abstractPath, fileName); + ImageUtil.base64ToFile(uploadPhotoDto.getBase64(),savePath , fileName); LogUtil.info("fileName : {}", fileName); AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("上传成功"); - ajaxResult.putInMap("file", nginxUrl +"/"+ abstractPath+fileName); + ajaxResult.putInMap("file", nginxUrl + abstractPath+"/"+fileName); return ajaxResult; } + String folderType = "image"; + public final static List<FileType> EXT_LIST = new ArrayList<FileType>(); + static { + EXT_LIST.add(FileType.JPEG); + EXT_LIST.add(FileType.PNG); + } + + @ApiOperation(value = "表单图片上传接口", notes = "表单图片上传接口") + @PostMapping(value = "/uploadImg") + public AjaxResult uploadImg(HttpServletResponse response, MultipartHttpServletRequest request) + throws IOException, FileUploadException, NoSuchAlgorithmException { + Map<String, String> fileMap = uploadUtil.doUpload(request, EXT_LIST, folderType, 1L); + AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("上传成功"); + ajaxResult.putInMap("file", fileMap.get("visitPath")); + return ajaxResult; + } @ApiOperation(value = "短信验证码发送", notes = "短信验证码发送") @@ -148,11 +195,14 @@ return AjaxResult.buildFailInstance("该手机号不存在"); } - String codeExist = redisClient.getCachedValue(smsCodeDto.getTelphone()); + String codeExist = LocalCache.get(smsCodeDto.getTelphone(),new TypeReference<String>(){}); if (StringUtils.isNotBlank(codeExist)) { return AjaxResult.buildFailInstance("请勿重复发送验证码"); } - redisClient.saveValue(smsCodeDto.getTelphone(), "123456", 120); + + Integer code =(int) ((Math.random() * 9 + 1) * 100000); + Sms106Send.sendVerifyCode(smsCodeDto.getTelphone(), code.toString(), 2); + LocalCache.save(smsCodeDto.getTelphone(), code.toString(), 120 * 1000); return AjaxResult.buildSuccessInstance("发送成功"); } @@ -166,7 +216,7 @@ return AjaxResult.buildFailInstance("该手机号不存在"); } - String code = redisClient.getCachedValue(pwdResetDto.getTelphone()); + String code = LocalCache.get(pwdResetDto.getTelphone(),new TypeReference<String>(){}); if (StringUtils.isBlank(code)) { return AjaxResult.buildFailInstance("验证码已失效,请重新发送"); } @@ -181,7 +231,7 @@ int i = sysUsersService.updateUserPassword(user.getSuId(), pwd); if (i > 0) { - redisClient.removeObject(pwdResetDto.getTelphone()); + LocalCache.remove(pwdResetDto.getTelphone()); return AjaxResult.buildSuccessInstance("修改成功"); } return AjaxResult.buildFailInstance("修改失败"); @@ -195,4 +245,151 @@ public AjaxResult findAppVersion() { return AjaxResult.buildSuccessInstance(sysUsersService.findAppVersion()); } + + + @ApiOperation(value = "获取api接口地址", notes = "获取api接口地址") + @GetMapping(value = "/findApiUrl") + public AjaxResult findApiUrl() { + List<UrlDto> data = new ArrayList<>(); + UrlDto urlDto = new UrlDto(); + urlDto.setUrl("http://myapp.jyymatrix.cc"); + urlDto.setName("正式环境"); + data.add(urlDto); + + urlDto = new UrlDto(); + urlDto.setUrl("http://test.hive.jyymatrix.cc"); + urlDto.setName("测试环境"); + data.add(urlDto); + + urlDto = new UrlDto(); + urlDto.setUrl("http://hive.mydoline.com"); + urlDto.setName("美度专线"); + data.add(urlDto); + + urlDto = new UrlDto(); + urlDto.setUrl("http://localhost:8080"); + urlDto.setName("开发环境"); + data.add(urlDto); + + return AjaxResult.buildSuccessInstance(data); + } + + + @ApiOperation(value = "根据企业编码获取对应的请求地址") + @PostMapping(value = "/getUrlByCompanyCode") + public AjaxResult getUrlByCompanyCode(@RequestBody SettingDto codeDto) { + SysCompany query = new SysCompany(); + query.setComCode(codeDto.getCode()); + List<SysCompany> list = sysCompanyService.findByModel(query); + if (CollUtil.isEmpty(list)) { + return new AjaxResult(AjaxResult.STATUS_FAIL, "企业编码有误"); + } + + AjaxResult ajaxResult = new AjaxResult(); + ajaxResult.setStatus(AjaxResult.STATUS_SUCCESS); + ajaxResult.putInMap("url", list.get(0).getComWebUrl()); + return ajaxResult; + } + + @ApiOperation(value = "管理端小程序登录") + @PostMapping(value = "/wxLogin/{code}") + public AjaxResult wxLogin(@PathVariable("code") String code) throws IOException { + if (StrUtil.isBlank(code)) { + return AjaxResult.buildFailInstance("code不存在"); + } + AjaxResult res = new AjaxResult(); + String requrl = weChatApiTools.getManagerXcxLoginUrl(code); + + String resultData = HttpCurlUtil.sendGetHttp(requrl, null); + JSONObject json = JSONObject.fromObject(resultData); + LogUtil.debug("管理端小程序登录获取到登录信息={}", json); + + if (json.containsKey("errcode")) { + res.setStatus(AjaxResult.STATUS_FAIL); + res.setInfo("自动登录失败"); + LogUtil.info("微信登录获取到异常信息errcode"); + return res; + } + + String openId = json.getString("openid"); + res.setStatus(AjaxResult.STATUS_SUCCESS); + res.putInMap("openId", openId); + SysUsers hasBind = sysUsersService.findByOpenId(openId, HostInterceptor.getCompanyId()); + if (hasBind == null) { + res.setInfo("未绑定用户"); + return res; + } + + String token = userCacheManager.saveUserInfo(hasBind); + LogUtil.info("用户token={}", token); + + authorityManager.initUserPower(res, hasBind); + + UserInfoVo userInfoVo = new UserInfoVo(); + if(hasBind.getShopId()!=null){ + SysShopInfo shopInfo = sysShopInfoService.findById(hasBind.getShopId()); + hasBind.setShopName(shopInfo.getShopName()); + userInfoVo.setShopName(shopInfo.getShopShortName()); + } + + userInfoVo.setId(hasBind.getSuId()); + userInfoVo.setName(hasBind.getSuName()); + userInfoVo.setRoleName(hasBind.getRoleName()); + userInfoVo.setPhoto(hasBind.getSuPhoto()); + + res.putInMap("token", token); + res.putInMap("userInfo", userInfoVo); + return res; + } + + @ApiOperation(value = "绑定用户") + @PostMapping(value = "/bindUser") + public AjaxResult bindUser(@RequestBody @Validated LoginDto loginDto) { + SysUsers user = new SysUsers(); + user.setSuAccount(loginDto.getUsername()); + user.setSuPassword(loginDto.getPassword()); + LoginStrategy apLogin = new AccountPasswordLogin(user, sysUsersService); + user = authorityManager.login(apLogin); + user.setSuPassword(null); + user.setOpenIds(null); + String token = userCacheManager.saveUserInfo(user); + + AjaxResult result = AjaxResult.buildSuccessInstance("登陆成功"); + authorityManager.initUserPower(result, user); + + UserInfoVo userInfoVo = new UserInfoVo(); + if(user.getShopId()!=null){ + SysShopInfo shopInfo = sysShopInfoService.findById(user.getShopId()); + user.setShopName(shopInfo.getShopName()); + userInfoVo.setShopName(shopInfo.getShopShortName()); + } + + userInfoVo.setId(user.getSuId()); + userInfoVo.setName(user.getSuName()); + userInfoVo.setRoleName(user.getRoleName()); + userInfoVo.setPhoto(user.getSuPhoto()); + + result.putInMap("token", token); + result.putInMap("userInfo", userInfoVo); + + synchronized (this) { + SysUsers hasBind = sysUsersService.findByOpenId(loginDto.getOpenId(), HostInterceptor.getCompanyId()); + if (hasBind != null) { + if(StrUtil.isNotBlank(hasBind.getOpenIds())) { + List<String> openIds = StrUtil.split(hasBind.getOpenIds(), ','); + openIds.remove(loginDto.getOpenId()); + + sysUsersService.modifyUserOpenId(CollUtil.join(openIds, ","), hasBind.getSuId()); + } + } + + List<String> openIds = StrUtil.split(user.getOpenIds(), ','); + openIds.add(loginDto.getOpenId()); + user.setOpenIds(CollUtil.join(openIds, ",")); + sysUsersService.modifyByModel(user); + } + + return result; + } + } -- Gitblit v1.9.1