|  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  | import com.matrix.component.redis.RedisClient; | 
|---|
|  |  |  | import com.matrix.core.pojo.AjaxResult; | 
|---|
|  |  |  | 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.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.SysUsers; | 
|---|
|  |  |  | import com.matrix.system.common.dao.BusParameterSettingsDao; | 
|---|
|  |  |  | 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 io.swagger.annotations.Api; | 
|---|
|  |  |  | import io.swagger.annotations.ApiOperation; | 
|---|
|  |  |  | import io.swagger.annotations.ApiResponse; | 
|---|
|  |  |  | import io.swagger.annotations.ApiResponses; | 
|---|
|  |  |  | 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.PostMapping; | 
|---|
|  |  |  | import org.springframework.web.bind.annotation.RequestBody; | 
|---|
|  |  |  | import org.springframework.web.bind.annotation.RequestMapping; | 
|---|
|  |  |  | import org.springframework.web.bind.annotation.RestController; | 
|---|
|  |  |  | 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") | 
|---|
|  |  |  | 
|---|
|  |  |  | private SysShopInfoService sysShopInfoService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private DefaultAuthorityManager authorityManager; | 
|---|
|  |  |  | private AppAuthorityManager authorityManager; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private BusParameterSettingsDao busParameterSettingsDao; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private RedisClient redisClient; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${file_storage_path}") | 
|---|
|  |  |  | private String fileStoragePath; | 
|---|
|  |  |  | @Value("${static_resource_url}") | 
|---|
|  |  |  | private String nginxUrl; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiOperation(value = "登陆接口", notes = "手机端登陆接口") | 
|---|
|  |  |  | @ApiResponses({ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String token = UUIDUtil.getRandomID(); | 
|---|
|  |  |  | redisClient.saveValueForever(token, JSONObject.toJSONString(user)); | 
|---|
|  |  |  | redisClient.saveValueForever(user.getSuId().toString(), token); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | userInfoVo.setId(user.getSuId()); | 
|---|
|  |  |  | userInfoVo.setName(user.getSuName()); | 
|---|
|  |  |  | 
|---|
|  |  |  | userInfoVo.setPhoto(user.getSuPhoto()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | AjaxResult result = AjaxResult.buildSuccessInstance("登陆成功"); | 
|---|
|  |  |  | authorityManager.initUserPower(result,user); | 
|---|
|  |  |  | result.putInMap("user", userInfoVo); | 
|---|
|  |  |  | result.putInMap("token", token); | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiOperation(value = "图片上传接口", notes = "图片上传接口") | 
|---|
|  |  |  | @PostMapping(value = "/uploadPhotoBase64") | 
|---|
|  |  |  | public AjaxResult uploadPhotoBase64(@RequestBody @Validated UploadPhotoDto uploadPhotoDto) { | 
|---|
|  |  |  | // 文件保存目录路径 | 
|---|
|  |  |  | 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"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 文件保存目录URL | 
|---|
|  |  |  | String saveUrl = nginxUrl; | 
|---|
|  |  |  | LogUtil.debug("图片保存目录路径={}",fileStoragePath); | 
|---|
|  |  |  | LogUtil.debug("图片保存目录URL={}",nginxUrl); | 
|---|
|  |  |  | // 保存和访问路径检查 | 
|---|
|  |  |  | if (StringUtils.isBlank(saveUrl) || StringUtils.isBlank(savePath)) { | 
|---|
|  |  |  | return AjaxResult.buildFailInstance("文件上传失败错误代码:001"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 检查目录 | 
|---|
|  |  |  | File uploadDir = new File(savePath); | 
|---|
|  |  |  | if (!uploadDir.isDirectory()) { | 
|---|
|  |  |  | uploadDir.mkdir(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ImageUtil.base64ToFile(uploadPhotoDto.getBase64(),savePath , fileName); | 
|---|
|  |  |  | LogUtil.info("fileName : {}", fileName); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("上传成功"); | 
|---|
|  |  |  | 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 = "短信验证码发送") | 
|---|
|  |  |  | @PostMapping(value = "/sendSmsCode") | 
|---|
|  |  |  | public AjaxResult sendSmsCode(@RequestBody @Validated SmsCodeDto smsCodeDto) { | 
|---|
|  |  |  | SysUsers user = new SysUsers(); | 
|---|
|  |  |  | user.setSuTel(smsCodeDto.getTelphone()); | 
|---|
|  |  |  | List<SysUsers> users = sysUsersService.findByModel(user); | 
|---|
|  |  |  | if (CollectionUtils.isEmpty(users)) { | 
|---|
|  |  |  | return AjaxResult.buildFailInstance("该手机号不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String codeExist = redisClient.getCachedValue(smsCodeDto.getTelphone()); | 
|---|
|  |  |  | if (StringUtils.isNotBlank(codeExist)) { | 
|---|
|  |  |  | return AjaxResult.buildFailInstance("请勿重复发送验证码"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Integer code =(int) ((Math.random() * 9 + 1) * 100000); | 
|---|
|  |  |  | Sms106Send.sendVerifyCode(smsCodeDto.getTelphone(), code.toString(), 2); | 
|---|
|  |  |  | redisClient.saveValue(smsCodeDto.getTelphone(), code.toString(), 120); | 
|---|
|  |  |  | return AjaxResult.buildSuccessInstance("发送成功"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiOperation(value = "重置登陆密码", notes = "重置登陆密码") | 
|---|
|  |  |  | @PostMapping(value = "/resetLoginPwd") | 
|---|
|  |  |  | public AjaxResult resetLoginPwd(@RequestBody @Validated PwdResetDto pwdResetDto) throws UnsupportedEncodingException, NoSuchAlgorithmException { | 
|---|
|  |  |  | SysUsers user = new SysUsers(); | 
|---|
|  |  |  | user.setSuTel(pwdResetDto.getTelphone()); | 
|---|
|  |  |  | List<SysUsers> users = sysUsersService.findByModel(user); | 
|---|
|  |  |  | if (CollectionUtils.isEmpty(users)) { | 
|---|
|  |  |  | return AjaxResult.buildFailInstance("该手机号不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String code = redisClient.getCachedValue(pwdResetDto.getTelphone()); | 
|---|
|  |  |  | if (StringUtils.isBlank(code)) { | 
|---|
|  |  |  | return AjaxResult.buildFailInstance("验证码已失效,请重新发送"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!code.equals(pwdResetDto.getCode())) { | 
|---|
|  |  |  | return AjaxResult.buildFailInstance("验证码错误"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | user = users.get(0); | 
|---|
|  |  |  | user.setSuPassword(pwdResetDto.getNewPwd()); | 
|---|
|  |  |  | String pwd = PasswordUtil.getEncrypUserPwd(user); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int i = sysUsersService.updateUserPassword(user.getSuId(), pwd); | 
|---|
|  |  |  | if (i > 0) { | 
|---|
|  |  |  | redisClient.removeObject(pwdResetDto.getTelphone()); | 
|---|
|  |  |  | return AjaxResult.buildSuccessInstance("修改成功"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return AjaxResult.buildFailInstance("修改失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @ApiOperation(value = "获取app版本", notes = "获取app版本") | 
|---|
|  |  |  | @ApiResponses({ | 
|---|
|  |  |  | @ApiResponse(code = 200, message = "ok", response = AppVersion.class) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | @GetMapping(value = "/findAppVersion") | 
|---|
|  |  |  | public AjaxResult findAppVersion() { | 
|---|
|  |  |  | return AjaxResult.buildSuccessInstance(sysUsersService.findAppVersion()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|