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