huanglizhi 11 meses atrás
pai
commit
4a049466c5

+ 3 - 3
module-erp/src/main/java/com/hys/app/controller/erp/use/CompanyController.java

@@ -36,7 +36,7 @@ public class CompanyController {
 
     @PostMapping("createCompany")
     @ApiOperation(value = "创建公司")
-    @Log(client = LogClient.admin, detail = "创建名称为[${companyDO.name}]的公司信息")
+//    @Log(client = LogClient.admin, detail = "创建名称为[${companyDO.name}]的公司信息")
     public String createCompany(@Valid @RequestBody CompanyDO companyDO) {
         return companyManager.createCompany(companyDO);
     }
@@ -85,7 +85,7 @@ public class CompanyController {
     }
 
 
-    @PostMapping("checkIdCardOpposite/{type}")
+    @PostMapping("/createCompany/checkIdCardOpposite/{type}")
     @ApiOperation(value = "校验身份证是否合法")
     public Object checkIdCardOpposite(@RequestBody  CompanyQuery query, @PathVariable String type) {
         try {
@@ -114,7 +114,7 @@ public class CompanyController {
         throw new ServiceException("非法请求");
     }
 
-    @PostMapping("checkLicense")
+    @PostMapping("/createCompany/checkLicense")
     @ApiOperation(value = "校验营业执照是否合法")
     public Object checkLicense(@RequestBody  CompanyQuery query) {
         try {

+ 4 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/PayController.java

@@ -26,6 +26,7 @@ import com.hys.app.model.system.dos.RoleDO;
 import com.hys.app.model.system.vo.Menus;
 import com.hys.app.pay.ali.AliPayService;
 import com.hys.app.pay.ali.PayOrder;
+import com.hys.app.pay.ali.UserInfoWx;
 import com.hys.app.pay.wx.WxConfig;
 import com.hys.app.pay.wx.WxPayServiceMy;
 import com.hys.app.service.erp.CompanyErpManager;
@@ -219,6 +220,9 @@ public class PayController extends HttpServlet {
         String openId = wxPayServiceMy.getOpenId(code);
         user.setOpenid(openId);
         adminUserMapper.updateById(user);
+        String accessToken = wxPayServiceMy.getAccessToken(code);
+        String userInfo = wxPayServiceMy.getUserInfo(accessToken, openId);
+        UserInfoWx userInfoWx = JSON.parseObject(JSON.toJSONString(userInfo), UserInfoWx.class);
     }
 
 

+ 3 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/msg/MsgContant.java

@@ -40,4 +40,7 @@ public class MsgContant {
     public static final String DAMAGE_NOTICE_USER_MAIL = "DAMAGE_NOTICE_USER_MAIL";
     public static final String DAMAGE_NOTICE_USER_OFFICIAL = "DAMAGE_NOTICE_USER_OFFICIAL";
 
+    public static final String CHECK_CODE_SMS = "SMS_270860270";
+
+
 }

+ 50 - 11
module-erp/src/main/java/com/hys/app/controller/system/AdminUserManagerController.java

@@ -1,7 +1,12 @@
 package com.hys.app.controller.system;
 
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.hys.app.controller.erp.use.msg.AliSmsUtil;
+import com.hys.app.controller.erp.use.msg.MsgContant;
+import com.hys.app.controller.erp.use.msg.MsgUtilClient;
 import com.hys.app.framework.context.user.AdminUserContext;
 import com.hys.app.framework.exception.ResourceNotFoundException;
 import com.hys.app.framework.exception.ServiceException;
@@ -22,13 +27,18 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 平台管理员控制器
@@ -48,9 +58,13 @@ public class AdminUserManagerController {
     private AdminUserManager adminUserManager;
     @Autowired
     private ValidatorManager validatorManager;
-
     @Autowired
     private CompanyErpManager companyManager;
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    @Autowired
+    MsgUtilClient msgUtilClient;
 
 
     @GetMapping("/login")
@@ -59,16 +73,27 @@ public class AdminUserManagerController {
             @ApiImplicitParam(name = "username", value = "用户名", required = true, dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String", paramType = "query")
     })
-    public AdminLoginVO login(@NotEmpty(message = "用户名不能为空") String username,
-                              @NotEmpty(message = "密码不能为空") String password,
-                              @NotEmpty(message = "登录类型不能为空") String type,
-                              Long companyId) {
-        //验证登录参数是否正确
-        this.validatorManager.validate();
-
-        return adminUserManager.login(username, password, companyId,type);
+    public AdminLoginVO login(String username,
+                              String password,
+                              @NotEmpty(message = "平台登录sys,公司登录com") String type,
+                              String phone,
+                              String checkCodeKey,
+                              String checkCode,
+                              @NotEmpty(message = "账号登录 password 手机登录 phone") String loginType,
+                              String companyName) {
+        if ("password".equals(loginType)) {
+            return adminUserManager.login(username, password, companyName, type);
+        }else if ("phone".equals(loginType)){
+            String code = (String) redisTemplate.opsForValue().get(checkCodeKey);
+            if (!code.equals(checkCode)) {
+                throw new ServiceException("验证码错误");
+            }
+            return adminUserManager.loginByPhone(phone, companyName, type);
+        }
+        throw new ServiceException("不支持的登录类型");
     }
 
+
     @ApiOperation(value = "刷新token")
     @PostMapping("/token")
     @ApiImplicitParam(name = "refresh_token", value = "刷新token", required = true, dataType = "String", paramType = "query")
@@ -137,13 +162,27 @@ public class AdminUserManagerController {
 
 
     @GetMapping("/login/getCompany")
-    public List<CompanyErp> loginGetCompany( String key) {
+    public List<CompanyErp> loginGetCompany(String key) {
         return companyManager.list(new LambdaQueryWrapper<CompanyErp>()
-                .select(CompanyErp::getId,CompanyErp::getName)
+                .select(CompanyErp::getId, CompanyErp::getName)
                 .and(StrUtil.isNotBlank(key), item -> item.like(CompanyErp::getName, key)
                         .or()
                         .like(CompanyErp::getFirstPy, key)
                         .or()
                         .like(CompanyErp::getPinying, key)));
     }
+
+    @GetMapping("/loginGetCheckCode")
+    @ApiOperation(value = "获取验证码")
+    public String getCheckCode(String phone) {
+        Map<String, Object> map = new HashMap<>();
+        String fastUUID = IdUtil.fastUUID();
+        Random random = new Random();
+        int randomNumber = 100000 + random.nextInt(900000);
+        map.put("code", randomNumber);
+        AliSmsUtil.sendSms(phone, MsgContant.CHECK_CODE_SMS, JSON.toJSONString(map));
+        redisTemplate.opsForValue().set(fastUUID, String.valueOf(randomNumber));
+        redisTemplate.expire(fastUUID, 5, TimeUnit.HOURS);
+        return fastUUID;
+    }
 }

+ 2 - 2
module-erp/src/main/java/com/hys/app/framework/security/AdminAccessDecisionManager.java

@@ -48,8 +48,8 @@ public class AdminAccessDecisionManager implements org.springframework.security.
         result = result || matcher.match("/admin/erp/pay/**", url);
         result = result || matcher.match("/weixin", url);
         result = result || matcher.match("/admin/systems/admin-users/login/**", url);
-        result = result || matcher.match("/admin/erp/company/createCompany", url);
-        result = result || matcher.match("/admin/erp/company/createCompany", url);
+        result = result || matcher.match("/admin/erp/company/createCompany/**", url);
+        result = result || matcher.match("/admin/erp/companyPackage/**", url);
         if (result) {
             return;
         }

+ 12 - 0
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyDO.java

@@ -5,9 +5,11 @@ import lombok.Getter;
 import lombok.Setter;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.Map;
 
 /**
@@ -52,6 +54,10 @@ public class CompanyDO {
      */
     private Map idCardMsgOpposite;
 
+    private  String idCardNum;
+
+    private String idCardtime;
+
     /**
      * 统一社会性用代码
      */
@@ -108,4 +114,10 @@ public class CompanyDO {
     @NotNull(message = "套餐不能为空")
     private Long companyPackageId;
 
+    @NotNull(message = "验证码不能为空")
+    private String checkCodeKey;
+
+    @NotNull(message = "验证码不能为空")
+    private String checkCode;
+
 }

+ 5 - 1
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyErp.java

@@ -159,7 +159,11 @@ public class CompanyErp extends BaseDO {
     /**
      * 状态  和使用时间单独开没有任何关系,这个管理员可以随意改动,true和使用时间未到期才能登录使用
      */
-    private Boolean status = false;
+    private Integer status = 0;
 
     private String  failReason ;
+
+    private  String idCardNum;
+
+    private String idCardTime;
 }

+ 1 - 1
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyStatusDO.java

@@ -24,5 +24,5 @@ public class CompanyStatusDO {
      */
     @ApiModelProperty("营业执照")
     @NotBlank(message = "状态不能为空")
-    private Boolean status;
+    private Integer status;
 }

+ 11 - 0
module-erp/src/main/java/com/hys/app/model/erp/entity/CompanyVO.java

@@ -143,4 +143,15 @@ public class CompanyVO  {
     private Integer thisDay;
 
     private Long companyPackageId;
+
+    /**
+     * 状态  和使用时间单独开没有任何关系,这个管理员可以随意改动,true和使用时间未到期才能登录使用
+     */
+    private Integer status = 0;
+
+    private String  failReason ;
+
+    private  String idCardNum;
+
+    private String idCardTime;
 }

+ 17 - 0
module-erp/src/main/java/com/hys/app/pay/ali/UserInfoWx.java

@@ -0,0 +1,17 @@
+package com.hys.app.pay.ali;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+//与阿里交互的对象
+@Data
+public class UserInfoWx {
+    private String openid;
+    private String nickname;
+    private String sex;
+    private String province;
+    private String city;
+    private String headimgurl;
+    private String privilege;
+}

+ 6 - 0
module-erp/src/main/java/com/hys/app/pay/wx/WxConfig.java

@@ -30,4 +30,10 @@ public class WxConfig {
     private String secret;
     @Value("${wxpay.oAuth2Url}")
     private String oAuth2Url;
+
+    @Value("${wxpay.tokenurl}")
+    private String tokenUrl;
+
+    @Value("${wxpay.userInfoUrl}")
+    private String userInfoUrl;
 }

+ 27 - 0
module-erp/src/main/java/com/hys/app/pay/wx/WxPayServiceMy.java

@@ -22,6 +22,8 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.util.UriComponentsBuilder;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpSession;
@@ -156,4 +158,29 @@ public class WxPayServiceMy {
             return null;  // 或者处理错误
         }
     }
+
+
+    public String getAccessToken(String code) {
+        RestTemplate restTemplate = new RestTemplate();
+        String url = UriComponentsBuilder.fromHttpUrl(wxConfig.getTokenUrl())
+                .queryParam("appid", wxConfig.getAppId())
+                .queryParam("secret", wxConfig.getSecret())
+                .queryParam("code", code)
+                .queryParam("grant_type", "authorization_code")
+                .toUriString();
+
+        return restTemplate.getForObject(url, String.class);
+    }
+
+    public String getUserInfo(String accessToken, String openId) {
+        RestTemplate restTemplate = new RestTemplate();
+        String url = UriComponentsBuilder.fromHttpUrl(wxConfig.getUserInfoUrl())
+                .queryParam("access_token", accessToken)
+                .queryParam("openid", openId)
+                .queryParam("lang", "zh_CN")
+                .toUriString();
+
+        return restTemplate.getForObject(url, String.class);
+    }
+
 }

+ 5 - 1
module-erp/src/main/java/com/hys/app/service/erp/impl/CompanyErpManagerImpl.java

@@ -65,6 +65,10 @@ public class CompanyErpManagerImpl extends ServiceImpl<CompanyErpMapper, Company
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String createCompany(CompanyDO companyDO) {
+        String code = (String)redisTemplate.opsForValue().get(companyDO.getCheckCodeKey());
+        if (!code.equals(companyDO.getCheckCode())){
+            throw new ServiceException("验证码错误");
+        }
         CompanyPackage byId = companyPackageManager.getById(companyDO.getCompanyPackageId());
         if (ObjectUtil.isNull(byId)) {
             throw new ServiceException("套餐不存在");
@@ -87,7 +91,7 @@ public class CompanyErpManagerImpl extends ServiceImpl<CompanyErpMapper, Company
         // 使用 Calendar 加上15天
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(currentDate);
-        calendar.add(Calendar.DAY_OF_MONTH, 15);
+        calendar.add(Calendar.DAY_OF_MONTH, byId.getDay());
         convert.setEndUseTime(calendar.getTime());
         convert.setPinying(PinYingUtil.toPinyin(companyDO.getName()));
         String pinyinFirstLetter = PinYingUtil.toPinyinFirstLetter(companyDO.getName());

+ 10 - 1
module-erp/src/main/java/com/hys/app/service/system/AdminUserManager.java

@@ -75,7 +75,7 @@ public interface AdminUserManager {
      * @param password 管理员密码
      * @return
      */
-    AdminLoginVO login(String name, String password,Long companyId,String type);
+    AdminLoginVO login(String name, String password,String companyName,String type);
 
     /**
      * 通过refreshToken重新获取accessToken
@@ -152,4 +152,13 @@ public interface AdminUserManager {
      * @return
      */
     List<AdminUser> getUserByCompany();
+
+    /**
+     *
+     * @param phone
+     * @param companyName
+     * @param type
+     * @return
+     */
+    AdminLoginVO loginByPhone(String phone, String companyName, String type);
 }

+ 103 - 21
module-erp/src/main/java/com/hys/app/service/system/impl/AdminUserManagerImpl.java

@@ -2,6 +2,7 @@ package com.hys.app.service.system.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -264,6 +265,85 @@ public class AdminUserManagerImpl implements AdminUserManager {
         return adminUserMapper.selectOne(wrapper);
     }
 
+
+
+    @Override
+    public AdminLoginVO loginByPhone(String phone, String companyName, String type) {
+        CompanyErp company = null;
+        if ("com".equals(type) && StrUtil.isNotBlank(companyName)) {
+            if (StrUtil.isBlank(companyName)) {
+                throw new ServiceException("非平台工作人员公司必填");
+            }
+            company = companyManager.getOne(new LambdaQueryWrapper<CompanyErp>().eq(CompanyErp::getName,companyName));
+            if (ObjectUtil.isNull(company)) {
+                throw new ServiceException("该公司未注册");
+            }
+            //0
+            if (company.getStatus() != 1) {
+                throw new ServiceException("公司状态异常,限制登录,联系管理员申请解除限制");
+            }
+            if (new Date().compareTo(company.getEndUseTime()) > 0) {
+                throw new ServiceException("该公司使用已到期,请续费");
+            }
+        }
+
+        //查询管理员信息
+        LambdaQueryWrapper<AdminUser> queryWrapper = new LambdaQueryWrapper<AdminUser>()
+                .eq(AdminUser::getPhone, phone)
+                .eq(AdminUser::getUserState, 0);
+        if ("com".equals(type)) {
+            queryWrapper.eq(AdminUser::getCompanyId, company.getId());
+        }else if ("sys".equals(type)){
+            queryWrapper.isNull(AdminUser::getCompanyId);
+            queryWrapper.eq(AdminUser::getFounder,1);
+        }
+
+        AdminUser adminUser = adminUserMapper.selectOne(queryWrapper);
+        //管理员信息不存在
+        if (adminUser == null ) {
+            throw new ServiceException(SystemErrorCode.E918.code(), "账号不存在");
+        }
+        if (adminUser.getFounder() != 1) {
+            if (!adminUser.getCompanyId().equals(company.getId())) {
+                throw new ServiceException("此账号不属于该公司");
+            }
+        }
+//        if ("admin".equals(name) && password.equals(adminUser.getFirstPassword())){
+//            throw new ServiceException("第一次登录需修改密码");
+//        }
+        //返回管理员信息
+        AdminLoginVO adminLoginVO = new AdminLoginVO();
+        adminLoginVO.setUid(adminUser.getId());
+
+        adminLoginVO.setUsername(adminUser.getUsername());
+        adminLoginVO.setCompanyVo(company);
+        adminLoginVO.setDepartment(adminUser.getDepartment());
+        adminLoginVO.setFace(adminUser.getFace());
+        adminLoginVO.setRoleId(adminUser.getRoleId());
+        adminLoginVO.setFounder(adminUser.getFounder());
+        adminLoginVO.setDeptId(adminUser.getDeptId());
+        adminLoginVO.setHasDeptManager(adminUser.getHasDeptManager());
+        // 设置访问token的失效时间维持管理员在线状态
+        if (adminUser.getFounder() != 1) {
+            adminUser.setCompanyId(company.getId());
+        }
+        Token token = createToken(adminUser);
+
+        String accessToken = token.getAccessToken();
+        String refreshToken = token.getRefreshToken();
+
+        adminLoginVO.setAccessToken(accessToken);
+        adminLoginVO.setRefreshToken(refreshToken);
+
+        //记录登录日志
+        addLoginLog(adminUser, phone, null);
+
+        return adminLoginVO;
+    }
+
+
+
+
     /**
      * 管理员登录
      *
@@ -272,16 +352,32 @@ public class AdminUserManagerImpl implements AdminUserManager {
      * @return
      */
     @Override
-    public AdminLoginVO login(String name, String password, Long companyId, String type) {
+    public AdminLoginVO login(String name, String password, String companyName, String type) {
+
+        CompanyErp company = null;
+        if ("com".equals(type) && StrUtil.isNotBlank(companyName)) {
+            if (StrUtil.isBlank(companyName)) {
+                throw new ServiceException("非平台工作人员公司必填");
+            }
+            company = companyManager.getOne(new LambdaQueryWrapper<CompanyErp>().eq(CompanyErp::getName,companyName));
+            if (ObjectUtil.isNull(company)) {
+                throw new ServiceException("该公司未注册");
+            }
+            if (company.getStatus() != 1) {
+                throw new ServiceException("公司状态异常,限制登录,联系管理员申请解除限制");
+            }
+            if (new Date().compareTo(company.getEndUseTime()) > 0) {
+                throw new ServiceException("该公司使用已到期,请续费");
+            }
+        }
 
-        String lowerCase = StringUtil.md5(name + password + companyId).toLowerCase();
         //查询管理员信息
         LambdaQueryWrapper<AdminUser> queryWrapper = new LambdaQueryWrapper<AdminUser>()
                 .eq(AdminUser::getUsername, name)
                 .eq(AdminUser::getUserState, 0);
-        if ("com".equals(type) && ObjectUtil.isNotNull(companyId)) {
-            queryWrapper.eq(AdminUser::getCompanyId, companyId);
-            queryWrapper.eq(AdminUser::getPassword, StringUtil.md5(name + password + companyId).toLowerCase());
+        if ("com".equals(type)) {
+            queryWrapper.eq(AdminUser::getCompanyId, company.getId());
+            queryWrapper.eq(AdminUser::getPassword, StringUtil.md5(name + password + company.getId()).toLowerCase());
         } else {
             queryWrapper.eq(AdminUser::getPassword, StringUtil.md5(name + password).toLowerCase());
         }
@@ -290,26 +386,10 @@ public class AdminUserManagerImpl implements AdminUserManager {
         if (adminUser == null || !StringUtil.equals(adminUser.getUsername(), name)) {
             throw new ServiceException(SystemErrorCode.E918.code(), "管理员账号密码错误");
         }
-        CompanyErp company = null;
         if (adminUser.getFounder() != 1) {
-            if (ObjectUtil.isNull(companyId)) {
-                throw new ServiceException("非平台工作人员公司必填");
-            }
-            company = companyManager.getById(companyId);
-            if (ObjectUtil.isNull(company)) {
-                throw new ServiceException("该公司未注册");
-            }
-            if (!company.getStatus()) {
-                throw new ServiceException("公司状态异常,限制登录,联系管理员申请解除限制");
-            }
-
             if (!adminUser.getCompanyId().equals(company.getId())) {
                 throw new ServiceException("此账号不属于该公司");
             }
-
-            if (new Date().compareTo(company.getEndUseTime()) > 0) {
-                throw new ServiceException("该公司使用已到期,请续费");
-            }
         }
 //        if ("admin".equals(name) && password.equals(adminUser.getFirstPassword())){
 //            throw new ServiceException("第一次登录需修改密码");
@@ -487,6 +567,7 @@ public class AdminUserManagerImpl implements AdminUserManager {
     }
 
 
+
     /**
      * 记录登录日志
      *
@@ -506,6 +587,7 @@ public class AdminUserManagerImpl implements AdminUserManager {
         systemLogs.setSellerId(0L);
         systemLogs.setLevel(LogLevel.important.name());
         systemLogs.setClient(LogClient.admin.name());
+        systemLogs.setCompanyId(AdminUserContext.getCompanyId());
         systemLogsManager.add(systemLogs);
     }
 }

+ 3 - 1
server/src/main/resources/application-local.yml

@@ -74,4 +74,6 @@ wxpay:
   notifyUrl: https://api.raycos.net/index.html
   subMchId: 1639506733
   secret: 13803c1b0d911e023c7da0b300cbce89
-  oAuth2Url: https://api.raycos.net/admin/erp/pay/weixin/callback/openidCode
+  oAuth2Url: https://api.raycos.net/admin/erp/pay/weixin/callback/openidCode
+  tokenurl: https://api.raycos.net/admin/erp/pay/weixin/callback/openidCode
+  userInfoUrl: https://api.weixin.qq.com/sns/userinfo

+ 3 - 1
server/src/main/resources/application-test.yml

@@ -86,4 +86,6 @@ wxpay:
   notifyUrl: https://api.raycos.net/admin/erp/pay/wxpay/notify
   subMchId: 1648546606
   secret: 13803c1b0d911e023c7da0b300cbce89
-  oAuth2Url: https://api.raycos.net/admin/erp/pay/weixin/callback/openidCode
+  oAuth2Url: https://api.raycos.net/admin/erp/pay/weixin/callback/openidCode
+  tokenurl: https://api.raycos.net/admin/erp/pay/weixin/callback/openidCode
+  userInfoUrl: https://api.weixin.qq.com/sns/userinfo