renqianlong 1 ano atrás
pai
commit
a0096ab329

+ 137 - 0
zhongzheng-admin-business/src/main/java/com/zhongzheng/controller/common/CaptchaController.java

@@ -0,0 +1,137 @@
+package com.zhongzheng.controller.common;
+
+import cn.hutool.captcha.AbstractCaptcha;
+import cn.hutool.captcha.CircleCaptcha;
+import cn.hutool.captcha.LineCaptcha;
+import cn.hutool.captcha.ShearCaptcha;
+import cn.hutool.captcha.generator.CodeGenerator;
+import cn.hutool.captcha.generator.MathGenerator;
+import cn.hutool.captcha.generator.RandomGenerator;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.github.xiaoymin.knife4j.annotations.DynamicParameter;
+import com.github.xiaoymin.knife4j.annotations.DynamicResponseParameters;
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.redis.RedisCache;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 验证码操作处理
+ *
+ * @author hjl
+ */
+@Api(tags ="系统操作管理")
+@ApiSupport(order = 1)
+@RestController
+public class CaptchaController {
+
+	// 圆圈干扰验证码
+	@Resource(name = "CircleCaptcha")
+	private CircleCaptcha circleCaptcha;
+	// 线段干扰的验证码
+	@Resource(name = "LineCaptcha")
+	private LineCaptcha lineCaptcha;
+	// 扭曲干扰验证码
+	@Resource(name = "ShearCaptcha")
+	private ShearCaptcha shearCaptcha;
+
+	@Autowired
+	private RedisCache redisCache;
+
+	// 验证码类型
+	@Value("${captcha.captchaType}")
+	private String captchaType;
+	// 验证码类别
+	@Value("${captcha.captchaCategory}")
+	private String captchaCategory;
+	// 数字验证码位数
+	@Value("${captcha.captchaNumberLength}")
+	private int numberLength;
+	// 字符验证码长度
+	@Value("${captcha.captchaCharLength}")
+	private int charLength;
+
+	/**
+	 * 生成验证码
+	 */
+	@ApiOperation("获取验证码")
+	@DynamicResponseParameters(name = "CodeMapModel",properties = {
+			@DynamicParameter(name = "uuid",value = "验证码uuid"),
+			@DynamicParameter(name = "img",value = "验证码图片base64"),
+	})
+	@GetMapping("/captchaImage")
+	public AjaxResult getCode() {
+		// 保存验证码信息
+		String uuid = IdUtil.simpleUUID();
+		String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
+		String code = null;
+		// 生成验证码
+		CodeGenerator codeGenerator;
+		AbstractCaptcha captcha;
+		switch (captchaType) {
+			case "math":
+				codeGenerator = new MathGenerator(numberLength);
+				break;
+			case "char":
+				codeGenerator = new RandomGenerator(charLength);
+				break;
+			default:
+				throw new IllegalArgumentException("验证码类型异常");
+		}
+		switch (captchaCategory) {
+			case "line":
+				captcha = lineCaptcha;
+				break;
+			case "circle":
+				captcha = circleCaptcha;
+				break;
+			case "shear":
+				captcha = shearCaptcha;
+				break;
+			default:
+				throw new IllegalArgumentException("验证码类别异常");
+		}
+		captcha.setGenerator(codeGenerator);
+		captcha.createCode();
+		if ("math".equals(captchaType)) {
+			code = getCodeResult(captcha.getCode());
+		} else if ("char".equals(captchaType)) {
+			code = captcha.getCode();
+		}
+		redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
+		Map<String,Object> map = new HashMap();
+		map.put("uuid", uuid);
+		map.put("img", captcha.getImageBase64());
+		return AjaxResult.success(map);
+	}
+
+	private String getCodeResult(String capStr) {
+		int a = Convert.toInt(StrUtil.sub(capStr, 0, numberLength).trim());
+		char operator = capStr.charAt(numberLength);
+		int b = Convert.toInt(StrUtil.sub(capStr, numberLength + 1, numberLength + 1 + numberLength).trim());
+		switch (operator) {
+			case '*':
+				return a * b + "";
+			case '+':
+				return a + b + "";
+			case '-':
+				return a - b + "";
+			default:
+				return "";
+		}
+	}
+
+}

+ 1 - 21
zhongzheng-admin-business/src/main/java/com/zhongzheng/controller/system/BsSysLoginController.java

@@ -2,25 +2,20 @@ package com.zhongzheng.controller.system;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.github.xiaoymin.knife4j.annotations.ApiSupport;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.domain.entity.SysUser;
 import com.zhongzheng.common.core.domain.model.LoginBody;
-import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.common.utils.ServletUtils;
-import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.framework.web.service.*;
 import com.zhongzheng.modules.bs.company.entity.ClientBsLoginUser;
 import com.zhongzheng.modules.bs.system.domain.BsSysMenu;
 import com.zhongzheng.modules.bs.system.domain.BsSysUser;
 import com.zhongzheng.modules.bs.system.service.IBsSysMenuService;
 import com.zhongzheng.modules.bs.system.service.IBsSysUserService;
-import com.zhongzheng.modules.goods.bo.OldTenantLoginBo;
 import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.vo.SysTenantVo;
-import com.zhongzheng.modules.user.bo.UserBusinessLoginBo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -58,22 +53,7 @@ public class BsSysLoginController
     private ISysTenantService iSysTenantService;
     @Autowired
     private IBsSysUserService iSysUserService;
-    /**
-     * 登录方法
-     *
-     * @param loginBody 登录信息
-     * @return 结果
-     */
-    @ApiOperation("业务系统获取登录token")
-    @GetMapping("/businessToken")
-    public AjaxResult businessToken(UserBusinessLoginBo loginBody)
-    {
-        AjaxResult ajax = AjaxResult.success();
-        // 生成令牌
-        String token = loginService.businessLogin(loginBody);
-        ajax.put(Constants.TOKEN, token);
-        return ajax;
-    }
+
 
     /**
      * 登录方法

+ 2 - 0
zhongzheng-admin-business/src/main/resources/application.yml

@@ -59,6 +59,7 @@ logging:
     org.springframework: warn
   config: classpath:logback.xml
 
+
 # Spring配置
 spring:
   mvc:
@@ -210,6 +211,7 @@ mybatis-plus:
   # 开启多租户
   tenant:
     enabled-tenant: true
+    bs-tenant: true
 # PageHelper分页插件
 pagehelper:
   helperDialect: mysql

+ 0 - 11
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/SecurityUtils.java

@@ -76,17 +76,6 @@ public class SecurityUtils
             throw new CustomException("获取用户信息异常", HttpStatus.HTTP_UNAUTHORIZED);
         }
     }
-//    public static BsSysUser getBsLoginUser()
-//    {
-//        try
-//        {
-//            return (BsSysUser) getAuthentication().getPrincipal();
-//        }
-//        catch (Exception e)
-//        {
-//            throw new CustomException("获取用户信息异常", HttpStatus.HTTP_UNAUTHORIZED);
-//        }
-//    }
 
     /**
      * 获取Authentication

+ 12 - 3
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java

@@ -2,6 +2,7 @@ package com.zhongzheng.framework.config;
 
 import com.zhongzheng.framework.security.filter.JwtAuthenticationTokenFilter;
 import com.zhongzheng.framework.security.handle.AuthenticationEntryPointImpl;
+import com.zhongzheng.framework.security.handle.BsLogoutSuccessHandlerImpl;
 import com.zhongzheng.framework.security.handle.LogoutSuccessHandlerImpl;
 import com.zhongzheng.framework.security.handle.TopLogoutSuccessHandlerImpl;
 import com.zhongzheng.framework.web.service.TopUserDetailsServiceImpl;
@@ -42,7 +43,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
 
     @Value("${mybatis-plus.tenant.enabled-tenant:false}")
     private boolean enabledTenant;
-
+    @Value("${mybatis-plus.tenant.bs-tenant:true}")
+    private boolean bsTenant;
     /**
      * 认证失败处理类
      */
@@ -62,7 +64,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
     @Autowired
     @Lazy
     private TopLogoutSuccessHandlerImpl topLogoutSuccessHandlerImpl;
-
+    /**
+     * 企业b端退出处理类
+     */
+    @Autowired
+    @Lazy
+    private BsLogoutSuccessHandlerImpl bsLogoutSuccessHandler;
     /**
      * token认证过滤器
      */
@@ -184,7 +191,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
         }else{
             httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(topLogoutSuccessHandlerImpl);
         }
-
+        if (bsTenant){
+            httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(bsLogoutSuccessHandler);
+        }
         // 添加JWT filter
         httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
         // 添加CORS filter

+ 1 - 3
zhongzheng-framework/src/main/java/com/zhongzheng/framework/security/filter/JwtAuthenticationTokenFilter.java

@@ -18,7 +18,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
 import org.springframework.stereotype.Component;
 import org.springframework.web.filter.OncePerRequestFilter;
-
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -87,8 +86,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
                             bsTokenService.verifyToken(clientBsLoginUser);
                             UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(clientBsLoginUser, null, null);
                             authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
-                            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
-                        }
+                            SecurityContextHolder.getContext().setAuthentication(authenticationToken);}
 
                     }else{
                         //子系统

+ 56 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/security/handle/BsLogoutSuccessHandlerImpl.java

@@ -0,0 +1,56 @@
+package com.zhongzheng.framework.security.handle;
+
+import cn.hutool.core.lang.Validator;
+import cn.hutool.http.HttpStatus;
+import com.alibaba.fastjson.JSON;
+import com.zhongzheng.common.constant.Constants;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.framework.manager.AsyncManager;
+import com.zhongzheng.framework.manager.factory.AsyncFactory;
+import com.zhongzheng.framework.web.service.BsTokenService;
+import com.zhongzheng.framework.web.service.TokenService;
+import com.zhongzheng.modules.bs.company.entity.ClientBsLoginUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 自定义退出处理类 返回成功
+ * 
+ * @author zhongzheng
+ */
+@Configuration
+public class BsLogoutSuccessHandlerImpl implements LogoutSuccessHandler
+{
+    @Autowired
+    private BsTokenService bsTokenService;
+
+    /**
+     * 退出处理
+     * 
+     * @return
+     */
+    @Override
+    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
+            throws IOException, ServletException
+    {
+            ClientBsLoginUser loginUser = bsTokenService.getLoginUser(request);
+            if (Validator.isNotNull(loginUser))
+            {
+                String userName = loginUser.getUsername();
+                // 删除用户缓存记录
+                bsTokenService.delLoginUser(loginUser.getToken());
+                // 记录用户退出日志
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功"));
+            }
+        ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(HttpStatus.HTTP_OK, "退出成功")));
+    }
+}

+ 0 - 5
zhongzheng-system/src/main/java/com/zhongzheng/modules/bs/company/service/impl/CompanyServiceImpl.java

@@ -192,11 +192,6 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
         ArrayList<Long> companyIdList = new ArrayList<>();
         if (ObjectUtil.isNotEmpty(bo.getAllTypeName())) {
             List<CompanyDepartment> departmentContacts = iCompanyDepartmentService.list(new LambdaQueryWrapper<CompanyDepartment>().eq(CompanyDepartment::getRegisteredContacts, bo.getAllTypeName()).eq(CompanyDepartment::getStatus, 1));
-            CompanyQueryBo companyQueryBo = new CompanyQueryBo();
-            companyQueryBo.setCompanyName(bo.getAllTypeName());
-            List<CompanyVo> companyVos1 = this.queryList(companyQueryBo);
-            List<Long> companyIds = companyVos1.stream().map(CompanyVo::getCompanyId).collect(Collectors.toList());
-            companyIds.addAll(companyIds);
             for (CompanyDepartment companyDepartment : departmentContacts) {
                 Long companyId = companyDepartment.getCompanyId();
                 companyIdList.add(companyId);

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bs/staff/service/impl/StaffCertificateServiceImpl.java

@@ -19,6 +19,7 @@ import com.zhongzheng.modules.bs.staff.domain.Staff;
 import com.zhongzheng.modules.bs.staff.domain.StaffCertificate;
 import com.zhongzheng.modules.bs.staff.service.IStaffService;
 import com.zhongzheng.modules.bs.staff.vo.ExcelStaffCertificateVo;
+import com.zhongzheng.modules.bs.staff.vo.StaffVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -155,6 +156,13 @@ public class StaffCertificateServiceImpl extends ServiceImpl<StaffCertificateMap
             }
         }
         validEntityBeforeSave(add);
+        if (ObjectUtil.isNotEmpty(bo.getStaffId())){
+            StaffVo staffVo = iStaffService.queryById(bo.getStaffId());
+            add.setCompanyId(staffVo.getCompanyId());
+            add.setCompanyName(staffVo.getCompanyName());
+            add.setDepartmentId(staffVo.getDepartmentId());
+            add.setDepartmentName(staffVo.getDepartmentName());
+        }
         add.setCreateTime(DateUtils.getNowTime());
         add.setUpdateTime(DateUtils.getNowTime());
         return this.save(add);

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bs/staff/service/impl/StaffServiceImpl.java

@@ -299,6 +299,8 @@ public class StaffServiceImpl extends ServiceImpl<StaffMapper, Staff> implements
             List<StaffEmergencyContact> staffEmergencyContactList = iStaffEmergencyContactService.list(new LambdaQueryWrapper<StaffEmergencyContact>().eq(StaffEmergencyContact::getStaffId, item.getStaffId()));
             List<StaffContractArchives> staffContractArchivesList = iStaffContractArchivesService.list(new LambdaQueryWrapper<StaffContractArchives>().eq(StaffContractArchives::getStaffId, item.getStaffId()));
             List<StaffCertificate> staffCertificateList = iStaffCertificateService.list(new LambdaQueryWrapper<StaffCertificate>().eq(StaffCertificate::getStaffId, item.getStaffId()).eq(StaffCertificate::getStatus, 1));
+            item.setDegree(staffEduBgList.stream().map(StaffEduBg::getDegree).collect(Collectors.toList()).toString().replace("[","").replace("]",""));
+            item.setMajor(staffEduBgList.stream().map(StaffEduBg::getMajor).collect(Collectors.toList()).toString().replace("[","").replace("]",""));
             item.setStaffCertificateCount((staffCertificateList.size()));
             item.setStaffEduBgList(staffEduBgList);
             item.setStaffBankInfoList(staffBankInfoList);
@@ -338,6 +340,8 @@ public class StaffServiceImpl extends ServiceImpl<StaffMapper, Staff> implements
                 CompanyOrderBusinessConfigGoodsVo companyGoodsVo = bsGoodsPackageList.get(0);
                 if (!staffVos.isEmpty()) {
                     staffVos.forEach(item -> {
+                        List<StaffEduBg> staffEduBgs = iStaffEduBgService.list(new LambdaQueryWrapper<StaffEduBg>().eq(StaffEduBg::getStaffId, item.getStaffId()).eq(StaffEduBg::getStatus, 1));
+                        item.setDegree(staffEduBgs.stream().map(StaffEduBg::getDegree).collect(Collectors.toList()).toString().replace("[","").replace("]",""));
                         item.setCourseSubjectList(companyGoodsVo.getCourseSubjectList());
                     });
                 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/bs/staff/vo/StaffVo.java

@@ -161,7 +161,7 @@ public class StaffVo {
 	/** 标签 */
 	@Excel(name = "学历")
 	@ApiModelProperty("学历")
-	private Long degree;
+	private String degree;
 	/** 标签 */
 	@Excel(name = "专业")
 	@ApiModelProperty("专业")