commit 2cedd64270e0f558fb9013644a77d6f841a0769f Author: JOETION <1322874562@qq.com> Date: Wed Jan 20 18:26:47 2021 +0800 初始化提交 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f8a4036 --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +target/ +**/target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +*.iml +.idea +modules/log +modules/logs +.project +.settings +.classpath +logs diff --git a/README.md b/README.md new file mode 100644 index 0000000..3a2a5b1 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +协同办公应用端 \ No newline at end of file diff --git a/cooperop-app-base/pom.xml b/cooperop-app-base/pom.xml new file mode 100644 index 0000000..d890f88 --- /dev/null +++ b/cooperop-app-base/pom.xml @@ -0,0 +1,159 @@ + + + 4.0.0 + + + business.chaoran + cooperop-app + 1.0-SNAPSHOT + + + business.chaoran + cooperop-app-base + 0.0.1-SNAPSHOT + cooperop-app-base + Demo project for Spring Boot + + + + + + business.chaoran + cooperop-app-common + + + + business.chaoran + web + + + + + business.chaoran + cooperop-base-message + + + + + org.springframework.boot + spring-boot-starter + + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + org.springframework.boot + spring-boot-starter-amqp + + + + + org.projectlombok + lombok + + + + + mysql + mysql-connector-java + + + + + com.baomidou + mybatis-plus-boot-starter + + + + + com.alibaba + druid-spring-boot-starter + + + + + com.alibaba + fastjson + + + + + io.springfox + springfox-boot-starter + + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + + org.mybatis.generator + mybatis-generator-maven-plugin + 1.3.2 + + src/main/resources/mybatis-generator/generatorConfig.xml + true + true + + + + Generate MyBatis Artifacts + deploy + + generate + + + + + + org.mybatis.generator + mybatis-generator-core + 1.3.2 + + + mysql + mysql-connector-java + 8.0.20 + runtime + + + + + org.springframework.boot + spring-boot-maven-plugin + + + cooperop-app-base-${project.version} + + diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/CooperopAppBaseApplication.java b/cooperop-app-base/src/main/java/business/cooperop/base/CooperopAppBaseApplication.java new file mode 100644 index 0000000..124b8c1 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/CooperopAppBaseApplication.java @@ -0,0 +1,19 @@ +package business.cooperop.base; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import springfox.documentation.oas.annotations.EnableOpenApi; + +@SpringBootApplication +@EnableOpenApi +@EnableDiscoveryClient +@MapperScan("business.cooperop.base.mapper") +public class CooperopAppBaseApplication { + + public static void main(String[] args) { + SpringApplication.run(CooperopAppBaseApplication.class, args); + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/config/BusConfig.java b/cooperop-app-base/src/main/java/business/cooperop/base/config/BusConfig.java new file mode 100644 index 0000000..0bd36e5 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/config/BusConfig.java @@ -0,0 +1,76 @@ +package business.cooperop.base.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.TopicExchange; +import org.springframework.amqp.support.converter.ContentTypeDelegatingMessageConverter; +import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 消息设置 + * 监听 company_application_popedom表的操作 + */ +@Configuration +@Slf4j +public class BusConfig { + + public static final String QUEUE_NAME = "event-organization"; + public static final String EXCHANGE_NAME = "spring-boot-exchange"; + public static final String ROUTING_KEY = "organization-popedom"; + + /** + * 设置消息队列 + * + * @return + */ + @Bean + Queue queue() { + log.info("queue name:{}", QUEUE_NAME); + return new Queue(QUEUE_NAME, false); + } + + /** + * 设置主题交换机 + * + * @return + */ + @Bean + TopicExchange exchange() { + log.info("exchange:{}", EXCHANGE_NAME); + return new TopicExchange(EXCHANGE_NAME); + } + + /** + * 绑定队列到主题交换机,并设置关联键 + * + * @param queue + * @param exchange + * @return + */ + @Bean + Binding binding(Queue queue, TopicExchange exchange) { + log.info("binding {} to {} with {}", queue, exchange, ROUTING_KEY); + return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY); + } + + /** + * 设置消息体用jackson序列化 + * + * @return + */ + @Bean + public MessageConverter messageConverter() { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + return new ContentTypeDelegatingMessageConverter(new Jackson2JsonMessageConverter(objectMapper)); + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/config/EmailConfig.java b/cooperop-app-base/src/main/java/business/cooperop/base/config/EmailConfig.java new file mode 100644 index 0000000..5805ab8 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/config/EmailConfig.java @@ -0,0 +1,29 @@ +package business.cooperop.base.config; + +import business.cooperop.base.message.InternalMessage; +import business.cooperop.base.message.InternalMessageImpl; +import business.cooperop.base.message.email.service.EmailService; +import business.cooperop.base.message.email.service.impl.EmailServiceImpl; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 天下风云出我辈, 一入代码岁月催 + * + * @Author: deadline + * @Date: 2020-12-22 16:13 + */ +@Configuration +public class EmailConfig { + + @Bean + public EmailService emailService() { + return new EmailServiceImpl(); + } + + @Bean + public InternalMessage internalMessage(){ + return new InternalMessageImpl(); + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/config/GlobalCorsConfig.java b/cooperop-app-base/src/main/java/business/cooperop/base/config/GlobalCorsConfig.java new file mode 100644 index 0000000..54abc23 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/config/GlobalCorsConfig.java @@ -0,0 +1,36 @@ +package business.cooperop.base.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + + +/** + * 全局跨域配置 + * @Author: deadline + * @Date: 2020-12-30 11:01 + */ +@Configuration +public class GlobalCorsConfig { + + /** + * 允许跨域调用的过滤器 + */ + @Bean + public CorsFilter corsFilter() { + CorsConfiguration config = new CorsConfiguration(); + //允许所有域名进行跨域调用 + config.addAllowedOrigin("*"); + //允许跨越发送cookie + config.setAllowCredentials(true); + //放行全部原始头信息 + config.addAllowedHeader("*"); + //允许所有请求方法跨域调用 + config.addAllowedMethod("*"); + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); + return new CorsFilter(source); + } +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/config/MybatisConfig.java b/cooperop-app-base/src/main/java/business/cooperop/base/config/MybatisConfig.java new file mode 100644 index 0000000..db94003 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/config/MybatisConfig.java @@ -0,0 +1,27 @@ +package business.cooperop.base.config; + +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * mybatis配置类, 指定扫描位置, 并开启事务 + * + * @Author: deadline + * @Date: 2020-12-29 14:09 + */ +@Configuration +public class MybatisConfig { + + // mybatis分页插件 + @Bean + public PaginationInterceptor paginationInterceptor() { + PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); + //你的最大单页限制数量,默认 500 条,小于 0 如 -1 不受限制 + paginationInterceptor.setLimit(10); //设置每次查询10条数据 + return paginationInterceptor; + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/config/SwaggerConfig.java b/cooperop-app-base/src/main/java/business/cooperop/base/config/SwaggerConfig.java new file mode 100644 index 0000000..3fb7a0a --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/config/SwaggerConfig.java @@ -0,0 +1,43 @@ +package business.cooperop.base.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +/** + * swagger配置类 + * @Author: deadline + * @Date: 2021-01-04 20:55 + */ +@Configuration +public class SwaggerConfig { + Boolean swaggerEnabled = true; + + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()) + // 是否开启 + .enable(swaggerEnabled).select() + // 扫描的路径包 + .apis(RequestHandlerSelectors.basePackage("business.cooperop.base")) + // 指定路径处理PathSelectors.any()代表所有的路径 + .paths(PathSelectors.any()).build().pathMapping("/"); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("连锁ERP管理端API") + .description("springboot | swagger") + // 作者信息 + .contact(new Contact("成都超然祥润科技有电公司", "chaoran.crtech.cn:8848/nacos", "crtech.163.com")) + .version("1.0.0") + .build(); + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/controller/ApplicationController.java b/cooperop-app-base/src/main/java/business/cooperop/base/controller/ApplicationController.java new file mode 100644 index 0000000..48102bd --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/controller/ApplicationController.java @@ -0,0 +1,145 @@ +package business.cooperop.base.controller; + +import business.cooperop.base.dto.AuthNodeDto; +import business.cooperop.base.entity.ApplicationGrade; +import business.cooperop.base.entity.ApplicationPopedom; +import business.cooperop.base.entity.base.ResultPage; +import business.cooperop.base.service.IProductService; +import business.cooperop.base.vo.PopedomVo; +import business.cooperop.common.constant.ResultCode; +import business.cooperop.common.result.Result; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Author: deadline + * @Date: 2020-12-29 12:01 + */ +@Api(tags = {"应用管理API"}) +@RestController +@RequestMapping("/app_manager") +public class ApplicationController { + + @Autowired + IProductService applicationService; + + @ApiOperation("获取权限树") + @PostMapping("/getTree") + public Result getTree() { + List result = applicationService.getTree(); + return Result.success(result); + } + + @ApiOperation("添加应用或节点, 若添加应用会同时添加该应用的根节点") + @PostMapping("/addAppChildren") + public Result addAppChildren(@RequestBody PopedomVo popedomVo) { + boolean isSuccess = applicationService.addAppChildren(popedomVo); + if (isSuccess) { + return Result.success(); + } + return Result.failed(); + } + + @ApiOperation("更新应用信息或子节点信息") + @PostMapping("/updateAppChildren") + public Result updateAppChildren(@RequestBody PopedomVo popedomVo) { + boolean isSuccess = applicationService.updateAppChildren(popedomVo); + if (isSuccess) { + return Result.success(); + } + return Result.failed(); + } + + @ApiOperation("删除应用, 会删除该应用所有子节点") + @PostMapping("/delApplication") + public Result delApplication(@RequestParam("applicationCode") String applicationCode) { + boolean isSuccess = applicationService.delApplication(applicationCode); + if (isSuccess) { + return Result.success(); + } + return Result.failed(); + } + + @ApiOperation("根据传入节点id, 查询应用或权限节点信息") + @PostMapping("/getAppChildrenInfo") + public Result getAppChildrenInfo(@RequestParam("popedomId") String popedomId) { + ApplicationPopedom popedom = applicationService.getAppChildrenInfo(popedomId); + return Result.success(popedom); + } + + @ApiOperation("删除应用子节点") + @PostMapping("/delAppChildren") + public Result delAppChildren(@RequestParam("id") String id) { + boolean isSuccess = applicationService.delAppChildren(null, id); + if (isSuccess) { + return Result.success(); + } + return Result.failed(); + } + + @ApiOperation("添加应用权限节点时, 获取下一个节点的id") + @PostMapping("/getNextNodeId") + public Result getNextNodeId(@RequestParam(name = "parentId", defaultValue = "") String parentId) { + AuthNodeDto nextNode = applicationService.getNextNodeId(parentId); + if (nextNode == null) { + return Result.failed(); + } + return Result.success(nextNode); + } + + + @ApiOperation("添加应用等级") + @PostMapping("/addAppGrade") + public Result addAppGrade(@RequestBody ApplicationGrade applicationGrade) { + int i = applicationService.addAppGrade(applicationGrade); + if (i > 0) { + return Result.success(); + } + return Result.failed(); + } + + @ApiOperation("根据应用code查询应用所有等级") + @GetMapping("/appGradeList") + public Result appGradeList(@RequestParam("applicationCode") String applicationCode, + @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, + @RequestParam(value = "pageSize", defaultValue = "25") int pageSize) { + IPage pageInfo = applicationService.appGradeList(applicationCode, pageNum, pageSize); + if (pageInfo != null) { + return new ResultPage(ResultCode.SUCCESS, pageInfo, pageInfo.getRecords()); + } + return Result.failed(); + } + + @ApiOperation("根据传入参数获取单个应用等级信息") + @GetMapping("/getAppGrade") + public Result getAppGrade(@RequestParam("applicationCode") String applicationCode, + @RequestParam("grade") int grade) { + ApplicationGrade appGrade = applicationService.getAppGrade(applicationCode, grade); + if (appGrade != null) { + return Result.success(appGrade); + } + return Result.failed(); + } + + @ApiOperation("更新应用等级信息") + @PutMapping("/updateAppGrade") + public Result updateAppGrade(@RequestBody ApplicationGrade applicationGrade) { + int i = applicationService.updateAppGrade(applicationGrade); + if (i > 0) { + return Result.success(); + } + return Result.failed(); + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/controller/CompanyController.java b/cooperop-app-base/src/main/java/business/cooperop/base/controller/CompanyController.java new file mode 100644 index 0000000..6145633 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/controller/CompanyController.java @@ -0,0 +1,40 @@ +package business.cooperop.base.controller; + +/* + ********************************************** + * DATE PERSON REASON + * 2021-01-13 FXY Created + ********************************************** + */ + +import business.cooperop.base.entity.Company; +import business.cooperop.base.service.ICompanyService; +import business.cooperop.common.result.Result; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Optional; + +@RestController +@RequestMapping("/company") +public class CompanyController{ + + @Autowired + ICompanyService iCompanyService; + + @GetMapping("/getCompanyList") + public Result getCompanyList(){ + return Result.success(iCompanyService.getAllCompany()); + } + + @GetMapping("/getCompanyInfo") + public Result getCompanyInfo(@RequestParam("companyId")String companyId){ + return Result.success(iCompanyService.getCompany(companyId)); + } + + @GetMapping("/saveCompany") + public Result insertCompany(@RequestBody Company company){ + Optional.ofNullable(company).orElseThrow() + return Result.success(iCompanyService.saveCompany(company)); + } +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/controller/PageRequest.java b/cooperop-app-base/src/main/java/business/cooperop/base/controller/PageRequest.java new file mode 100644 index 0000000..44b32a6 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/controller/PageRequest.java @@ -0,0 +1,35 @@ +package business.cooperop.base.controller; + +/* + ********************************************** + * DATE PERSON REASON + * 2021-01-12 FXY Created + ********************************************** + */ + + +import lombok.Getter; +import lombok.Setter; + +import javax.servlet.http.HttpServletRequest; +import java.util.Optional; + +@Getter +@Setter +public abstract class PageRequest { + + private Integer page = null; + + private Integer size = null; + + private static final String PAGE = "page"; + + private static final String SIZE = "size"; + + //计算分页参数和数据库类型 + protected void calcRequestParams(HttpServletRequest request) { + this.page = Integer.parseInt(Optional.ofNullable(request.getParameter(PAGE)).orElseGet(() -> "1")); + this.size = Integer.parseInt(Optional.ofNullable(request.getParameter(SIZE)).orElseGet(() -> "10")); + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/controller/UserController.java b/cooperop-app-base/src/main/java/business/cooperop/base/controller/UserController.java new file mode 100644 index 0000000..360ad83 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/controller/UserController.java @@ -0,0 +1,44 @@ +package business.cooperop.base.controller; + +import business.cooperop.base.entity.User; +import business.cooperop.base.service.IUserService; +import business.cooperop.common.constant.ResultCode; +import business.cooperop.common.exception.DefaultException; +import business.cooperop.common.result.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Optional; + +/** + * @Author: deadline + * @Date: 2021-01-05 10:12 + */ +@Api(tags = {"用户管理"}) +@RestController +@RequestMapping("/user_manager") +public class UserController { + + @Autowired + IUserService userService; + + @ApiOperation("获取用户信息") + @PostMapping("/getUserInfo") + public Result getUserInfo(@RequestParam(name = "userId") String userId) { + User user = userService.getUserInfo(userId); + if (user == null) { + return Result.failed("用户不存在"); + } + return Result.success(user); + } + + @ApiOperation("根据账号获取用户信息") + @GetMapping("/getUser") + public Result getUser(@RequestParam(name = "username") String username) { + Optional.ofNullable(username).orElseThrow(() -> DefaultException.simple(ResultCode.PARAM_IS_INVALID)); + return Result.success(userService.getUserByUsername(username)); + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/controller/advice/AdviceController.java b/cooperop-app-base/src/main/java/business/cooperop/base/controller/advice/AdviceController.java new file mode 100644 index 0000000..da7ba24 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/controller/advice/AdviceController.java @@ -0,0 +1,25 @@ +package business.cooperop.base.controller.advice; + +import business.cooperop.common.result.Result; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * @Author: deadline + * @Date: 2021-01-04 15:39 + */ +@Slf4j +@RestControllerAdvice +public class AdviceController { + + @ResponseStatus(HttpStatus.OK) + @ExceptionHandler(Exception.class) + public Result exceptionHandler(Exception exception) { + log.error("发生异常: {}", exception); + return Result.failed(exception.getMessage()); + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/dto/AuthNodeDto.java b/cooperop-app-base/src/main/java/business/cooperop/base/dto/AuthNodeDto.java new file mode 100644 index 0000000..6cb52a4 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/dto/AuthNodeDto.java @@ -0,0 +1,38 @@ +package business.cooperop.base.dto; + +import business.cooperop.base.entity.ApplicationPopedom; +import business.cooperop.common.utils.BeanUtilsV2; +import lombok.Data; + +import java.util.List; + +/** + * 权限节点, 用于构建前端展示应用权限树 + * + * @Author: deadline + * @Date: 2020-12-29 15:08 + */ +@Data +public class AuthNodeDto { + + private String applicationCode; + private String id; + private String name; + private String title; + private String parentId; + private String url; + private String icon; + private Integer isMenu; + private Integer orderNo; + private String description; + + public AuthNodeDto(ApplicationPopedom popedom) { + BeanUtilsV2.copyProperties(popedom, this); + } + + // 存放节点下的节点 + private List children; + + public AuthNodeDto() { + } +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/Application.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/Application.java new file mode 100644 index 0000000..e0a76ba --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/Application.java @@ -0,0 +1,23 @@ +package business.cooperop.base.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.util.Date; + +@Data +public class Application { + + @TableId + private String code; + + private String name; + + private Integer type; + + private Date deployedTime; + + private Integer orderNo; + + private String description; +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/ApplicationGrade.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/ApplicationGrade.java new file mode 100644 index 0000000..eff0860 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/ApplicationGrade.java @@ -0,0 +1,16 @@ +package business.cooperop.base.entity; + +import lombok.Data; + +@Data +public class ApplicationGrade { + private Boolean isFree; + + private String applicationCode; + + private Integer grade; + + private String description; + + private String name; +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/ApplicationGradePopedom.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/ApplicationGradePopedom.java new file mode 100644 index 0000000..47271df --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/ApplicationGradePopedom.java @@ -0,0 +1,12 @@ +package business.cooperop.base.entity; + +import lombok.Data; + +@Data +public class ApplicationGradePopedom { + private String applicationCode; + + private Short grade; + + private String popedomId; +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/ApplicationPopedom.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/ApplicationPopedom.java new file mode 100644 index 0000000..7bbbde6 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/ApplicationPopedom.java @@ -0,0 +1,40 @@ +package business.cooperop.base.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +@Data +public class ApplicationPopedom { + + @TableId + private String id; + + private String applicationCode; + + private String name; + + private String parentId; + + private String url; + + private String icon; + + private Integer isMenu; + + private Integer orderNo; + + private String path; + + private String redirect; + + private String component; + + private String title; + + private Boolean alwaysShow; + + private Boolean hidden; + + private String description; + +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/Company.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/Company.java new file mode 100644 index 0000000..8777910 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/Company.java @@ -0,0 +1,76 @@ +package business.cooperop.base.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class Company { + + @TableId + private String id; + + private String name; + + private String registerId; + + private String ownerId; + + private Date registryTime; + + private String businessLicense; + + private String lastModifier; + + private Date lastModifyTime; + + private String province; + + private String city; + + private String county; + + private String street; + + private BigDecimal longitude; + + private BigDecimal latitude; + + private Byte state; + + private String grade; + + private String contacter; + + private String mobile; + + private String tel; + + private String email; + + private String weixin; + + private Boolean isFranchiser; + + private Boolean isIsv; + + private String serviceTime; + + private String hotlinePhone; + + private String logo; + + private String logoW; + + private String icpNo; + + private String shortName; + + private String address; + + private String description; + + private String photo; +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyApplicationLicense.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyApplicationLicense.java new file mode 100644 index 0000000..a7f1558 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyApplicationLicense.java @@ -0,0 +1,22 @@ +package business.cooperop.base.entity; + +import lombok.Data; + +import java.util.Date; + +@Data +public class CompanyApplicationLicense{ + private String franchiserId; + + private Date expireDate; + + private Boolean isForever; + + private String state; + + private String companyId; + + private String applicationCode; + + private Integer grade; +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyApplicationPopedom.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyApplicationPopedom.java new file mode 100644 index 0000000..0049c60 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyApplicationPopedom.java @@ -0,0 +1,20 @@ +package business.cooperop.base.entity; + +import lombok.Data; + +@Data +public class CompanyApplicationPopedom { + private String applicationCode; + + private String companyId; + + private String popedomId; + + public CompanyApplicationPopedom(ApplicationPopedom applicationPopedom) { + this.applicationCode=applicationPopedom.getApplicationCode(); + this.popedomId=applicationPopedom.getId(); + } + + public CompanyApplicationPopedom() { + } +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyRole.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyRole.java new file mode 100644 index 0000000..b63e03f --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyRole.java @@ -0,0 +1,21 @@ +package business.cooperop.base.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +@Data +public class CompanyRole { + + @TableId + private String id; + + private String companyId; + + private String name; + + private String remark; + + + + +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyRolePopedom.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyRolePopedom.java new file mode 100644 index 0000000..a8ee0d1 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyRolePopedom.java @@ -0,0 +1,14 @@ +package business.cooperop.base.entity; + +import lombok.Data; + +@Data +public class CompanyRolePopedom { + private String companyId; + + private String roleId; + + private String applicationCode; + + private String popedomId; +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyRoleUser.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyRoleUser.java new file mode 100644 index 0000000..54aca5f --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyRoleUser.java @@ -0,0 +1,11 @@ +package business.cooperop.base.entity; + +import lombok.Data; + +@Data +public class CompanyRoleUser{ + private Boolean isDefault; + private String roleId; + private String userId; + private String companyId; +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyUser.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyUser.java new file mode 100644 index 0000000..ba0120c --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/CompanyUser.java @@ -0,0 +1,22 @@ +package business.cooperop.base.entity; + +import lombok.Data; + +@Data +public class CompanyUser { + private String companyId; + + private String userId; + + private String organizationId; + + private String empNo; + + private String position; + + private Boolean isDefault; + + private Boolean state; + + private String mobile; +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/User.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/User.java new file mode 100644 index 0000000..19c65c0 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/User.java @@ -0,0 +1,49 @@ +package business.cooperop.base.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.util.Date; + +@Data +public class User { + + @TableId + private String id; + + private String name; + + private String mobile; + + private String email; + + private String nickName; + + private String photo; + + @JsonIgnore + private String lastModifier; + + @JsonIgnore + private Date lastModifyTime; + + @JsonIgnore + private Byte state; + + @JsonIgnore + private String identity; + + private String avatar; + + private String signature; + + @JsonIgnore + private String password; + + private String username; + + private Date registryTime; + + private String introduce; +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/entity/base/ResultPage.java b/cooperop-app-base/src/main/java/business/cooperop/base/entity/base/ResultPage.java new file mode 100644 index 0000000..1eae9b1 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/entity/base/ResultPage.java @@ -0,0 +1,72 @@ +package business.cooperop.base.entity.base; + +/* + ********************************************** + * DATE PERSON REASON + * 2021-01-12 FXY Created + ********************************************** + */ + + +import business.cooperop.common.constant.ResultCode; +import business.cooperop.common.result.Result; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ResultPage extends Result { + + //总的数据条数 + private long totalElements; + + //总页数 + private long totalPages; + + //当前页数 + private long number; + + //每页大小 + private long size; + + //当前页查询出的数据条数 + private long numberOfElements; + + //是否是第一页数据 + private boolean first; + + //是否是最后一页数据 + private boolean last; + + //是否有上一页数据 + private boolean previous; + + //是否有下一页数据 + private boolean next; + + + public ResultPage(IPage iPage) { + this.first = iPage.getCurrent() == 1; + this.number = iPage.getCurrent(); + this.totalElements = iPage.getTotal(); + //每页条数*当前页==总条数,则表示是最后一页 + this.last = iPage.getCurrent() == iPage.getPages(); + this.previous = iPage.getCurrent() != 1; + this.next = iPage.getCurrent() != iPage.getPages(); + this.totalPages = iPage.getPages(); + this.numberOfElements = iPage.getRecords().size(); + this.size = iPage.getSize(); + } + + public ResultPage(ResultCode resultCode, IPage iPage) { + this(iPage); + this.setResultCode(resultCode); + } + + public ResultPage(ResultCode resultCode, IPage iPage, Object data) { + this(resultCode, iPage); + this.setData(data); + } +} + diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/events/EventSender.java b/cooperop-app-base/src/main/java/business/cooperop/base/events/EventSender.java new file mode 100644 index 0000000..4c9ebe6 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/events/EventSender.java @@ -0,0 +1,31 @@ +package business.cooperop.base.events; + +import business.cooperop.base.config.BusConfig; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.support.converter.MessageConverter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +@Slf4j +public class EventSender { + + @Autowired + private RabbitTemplate rabbitTemplate; + + @Autowired + private MessageConverter messageConverter; + + @PostConstruct + public void init() { + rabbitTemplate.setMessageConverter(messageConverter); + } + + public void send(String routingKey, Object object) { + log.info("routingKey:{}=>message:{}", routingKey, object); + rabbitTemplate.convertAndSend(BusConfig.EXCHANGE_NAME, routingKey, object); + } +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/filter/NacosRegisterConfig.java b/cooperop-app-base/src/main/java/business/cooperop/base/filter/NacosRegisterConfig.java new file mode 100644 index 0000000..d7b77e9 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/filter/NacosRegisterConfig.java @@ -0,0 +1,56 @@ +package business.cooperop.base.filter; + +/* + ********************************************** + * DATE PERSON REASON + * 2020-12-24 FXY Created + ********************************************** + */ + +import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.context.annotation.Configuration; + +import javax.management.MBeanServer; +import javax.management.ObjectName; +import javax.management.Query; +import java.lang.management.ManagementFactory; +import java.util.Set; + +//@Configuration +@Slf4j +public class NacosRegisterConfig implements ApplicationRunner { + + @Autowired(required = false) + private NacosAutoServiceRegistration registration; + + private Integer port; + + public NacosRegisterConfig() { + try { + this.port = Integer.parseInt(getTomcatPort()); + } catch (Exception e) { + log.error("获取tomcat端口出错了,原因:{}", e.toString()); + } + } + + @Override + public void run(ApplicationArguments args) { + if (registration != null && port != null) { + registration.setPort(port); + registration.start(); + } + } + + //获取tomcat端口 + private String getTomcatPort() throws Exception { + MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer(); + Set objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"), Query.match(Query.attr("protocol"), Query.value("HTTP/1.1"))); + String port = objectNames.iterator().next().getKeyProperty("port"); + return port; + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/filter/WebServerMvcConfigurerAdapter.java b/cooperop-app-base/src/main/java/business/cooperop/base/filter/WebServerMvcConfigurerAdapter.java new file mode 100644 index 0000000..58fa00a --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/filter/WebServerMvcConfigurerAdapter.java @@ -0,0 +1,26 @@ +package business.cooperop.base.filter; + +import com.springboot.cloud.common.web.interceptor.UserInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + + +/** + * 正式环境运行去掉注释 + */ +//@Configuration +public class WebServerMvcConfigurerAdapter implements WebMvcConfigurer { + +// @Bean + public HandlerInterceptor userInterceptor() { + return new UserInterceptor(); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(userInterceptor()); + } +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationGradeMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationGradeMapper.java new file mode 100644 index 0000000..a554997 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationGradeMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.ApplicationGrade; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ApplicationGradeMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationGradePopedomMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationGradePopedomMapper.java new file mode 100644 index 0000000..31ed9c7 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationGradePopedomMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.ApplicationGradePopedom; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ApplicationGradePopedomMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationMapper.java new file mode 100644 index 0000000..80bdf17 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.Application; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ApplicationMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationPopedomMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationPopedomMapper.java new file mode 100644 index 0000000..4108c77 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/ApplicationPopedomMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.ApplicationPopedom; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ApplicationPopedomMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyApplicationLicenseMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyApplicationLicenseMapper.java new file mode 100644 index 0000000..e844a16 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyApplicationLicenseMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.CompanyApplicationLicense; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CompanyApplicationLicenseMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyApplicationPopedomMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyApplicationPopedomMapper.java new file mode 100644 index 0000000..1f46dbe --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyApplicationPopedomMapper.java @@ -0,0 +1,7 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.CompanyApplicationPopedom; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface CompanyApplicationPopedomMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyMapper.java new file mode 100644 index 0000000..40ba849 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.Company; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CompanyMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyRoleMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyRoleMapper.java new file mode 100644 index 0000000..4519da2 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyRoleMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.CompanyRole; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CompanyRoleMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyRolePopedomMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyRolePopedomMapper.java new file mode 100644 index 0000000..1e13658 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyRolePopedomMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.CompanyRolePopedom; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CompanyRolePopedomMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyRoleUserMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyRoleUserMapper.java new file mode 100644 index 0000000..f34d7c0 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyRoleUserMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.CompanyRole; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CompanyRoleUserMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyUserMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyUserMapper.java new file mode 100644 index 0000000..a73a7ec --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/CompanyUserMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.CompanyUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CompanyUserMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/mapper/UserMapper.java b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/UserMapper.java new file mode 100644 index 0000000..ff62c47 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/mapper/UserMapper.java @@ -0,0 +1,9 @@ +package business.cooperop.base.mapper; + +import business.cooperop.base.entity.User; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserMapper extends BaseMapper { +} \ No newline at end of file diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/message/InternalMessage.java b/cooperop-app-base/src/main/java/business/cooperop/base/message/InternalMessage.java new file mode 100644 index 0000000..0c7af87 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/message/InternalMessage.java @@ -0,0 +1,24 @@ +package business.cooperop.base.message; + +//import business.cooperop.base.entity.Message; +import org.springframework.context.annotation.Bean; + +import java.util.Map; + +/** + * 内部消息接口 + * @author inaisen + */ +public interface InternalMessage { + + /** + * 设置内部消息接口 + */ +// void settingInternalMessage(Message message); + /** + * 查询内部消息接口 + */ + void queryInternalMessage(); + + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/message/InternalMessageImpl.java b/cooperop-app-base/src/main/java/business/cooperop/base/message/InternalMessageImpl.java new file mode 100644 index 0000000..cc56d49 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/message/InternalMessageImpl.java @@ -0,0 +1,32 @@ +package business.cooperop.base.message; + +/*import business.cooperop.base.entity.Message; +import business.cooperop.base.mapper.InrernalMessageMapper;*/ + +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 内部消息接口实现 + * @author inaisen + */ +public class InternalMessageImpl implements InternalMessage { + + @Autowired +// private InrernalMessageMapper inrernalMessageMapper; + + /** + * 设置内部消息 + */ + /*@Override + public void settingInternalMessage(Message message) { + inrernalMessageMapper.settingInternalMessage(message); + }*/ + + /** + * 查询内部消息 + */ + @Override + public void queryInternalMessage() { + + } +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/service/ICompanyService.java b/cooperop-app-base/src/main/java/business/cooperop/base/service/ICompanyService.java new file mode 100644 index 0000000..13e458a --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/service/ICompanyService.java @@ -0,0 +1,46 @@ +package business.cooperop.base.service; + +/* + ********************************************** + * DATE PERSON REASON + * 2021-01-13 FXY Created + ********************************************** + */ + + +import business.cooperop.base.entity.Company; + +import java.util.List; +import java.util.Map; + +public interface ICompanyService { + + /** + * 获取所有公司列表 + * @return + */ + List getAllCompany(); + + /** + * 获取指定公司信息 + * @param companyId + * @return + */ + Company getCompany(String companyId); + + /** + * 保存公司信息 + * @param company + * @return + */ + boolean saveCompany(Company company); + + + /** + * 保存公司许可证 + * @param params + * @return + */ + boolean addCompanyLicense(Map params); + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/service/IProductService.java b/cooperop-app-base/src/main/java/business/cooperop/base/service/IProductService.java new file mode 100644 index 0000000..27c86a9 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/service/IProductService.java @@ -0,0 +1,109 @@ +package business.cooperop.base.service; + +import business.cooperop.base.dto.AuthNodeDto; +import business.cooperop.base.entity.ApplicationGrade; +import business.cooperop.base.entity.ApplicationPopedom; +import business.cooperop.base.vo.PopedomVo; +import com.baomidou.mybatisplus.core.metadata.IPage; + +import java.util.List; + +/** + * 应用管理service + * + * @Author: deadline + * @Date: 2020-12-29 12:02 + */ +public interface IProductService { + + /** + * 获取应用权限树 + * + * @return + */ + List getTree(); + + /** + * 新增应用或应用子权限节点 + * + * @param popedomVo + * @return + */ + boolean addAppChildren(PopedomVo popedomVo); + + /** + * 更新应用或子节点信息 + * + * @param popedomVo + * @return + */ + boolean updateAppChildren(PopedomVo popedomVo); + + /** + * 删除应用, 会同时删除所有子节点 + * + * @param applicationCode + * @return + */ + boolean delApplication(String applicationCode); + + /** + * 查询应用权限信息 + * + * @param popedomId + * @return + */ + ApplicationPopedom getAppChildrenInfo(String popedomId); + + /** + * 删除应用下的子权限 + * + * @param applicationCode + * @param id + * @return + */ + boolean delAppChildren(String applicationCode, String id); + + /** + * 根据传入父id, 获取下一个子节点id + * + * @param parentId + * @return + */ + AuthNodeDto getNextNodeId(String parentId); + + + /** + * 添加应用等级 + * + * @param applicationGrade + * @return + */ + int addAppGrade(ApplicationGrade applicationGrade); + + /** + * 根据应用code查询应用所有等级 + * + * @param applicationCode + * @return + */ + IPage appGradeList(String applicationCode, int pageNum, int pageSize); + + /** + * 根据传入参数获取单个应用等级信息 + * + * @param applicationCode + * @param grade + * @return + */ + ApplicationGrade getAppGrade(String applicationCode, int grade); + + /** + * 更新应用等级信息 + * + * @param applicationGrade + * @return + */ + int updateAppGrade(ApplicationGrade applicationGrade); + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/service/IUserService.java b/cooperop-app-base/src/main/java/business/cooperop/base/service/IUserService.java new file mode 100644 index 0000000..5dc5311 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/service/IUserService.java @@ -0,0 +1,28 @@ +package business.cooperop.base.service; + + +import business.cooperop.base.entity.User; + +/** + * 用户管理service + * @Author: deadline + * @Date: 2021-01-05 10:14 + */ +public interface IUserService { + + /** + * 获取用户信息 + * + * @param userId + * @return + */ + User getUserInfo(String userId); + + /** + * 根据账号获取用户信息 + * @param username + * @return + */ + User getUserByUsername(String username); + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/service/impl/CompanyServiceImpl.java b/cooperop-app-base/src/main/java/business/cooperop/base/service/impl/CompanyServiceImpl.java new file mode 100644 index 0000000..ca93ee9 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/service/impl/CompanyServiceImpl.java @@ -0,0 +1,102 @@ +package business.cooperop.base.service.impl; + +/* + ********************************************** + * DATE PERSON REASON + * 2021-01-13 FXY Created + ********************************************** + */ + +import business.cooperop.base.config.BusConfig; +import business.cooperop.base.entity.*; +import business.cooperop.base.events.EventSender; +import business.cooperop.base.mapper.*; +import business.cooperop.base.service.ICompanyService; +import business.cooperop.common.constant.ResultCode; +import business.cooperop.common.exception.DefaultException; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class CompanyServiceImpl extends ServiceImpl implements ICompanyService { + + @Autowired + CompanyApplicationPopedomMapper companyApplicationPopedomMapper; + + @Autowired + ApplicationPopedomMapper applicationPopedomMapper; + + @Autowired + ApplicationGradePopedomMapper applicationGradePopedomMapper; + + @Autowired + CompanyApplicationLicenseMapper companyApplicationLicenseMapper; + + @Autowired + EventSender eventSender; + + @Override + public List getAllCompany() { + return list(); + } + + @Override + public Company getCompany(String companyId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("id", companyId); + return getOne(wrapper); + } + + @Override + @Transactional + public boolean saveCompany(Company company) { + return saveOrUpdate(company); + } + + @Override + @Transactional + public boolean addCompanyLicense(Map params) { + Optional.ofNullable(params).orElseThrow(() -> DefaultException.simple(ResultCode.PARAM_NOT_COMPLETE)); + String companyId = (String) Optional.ofNullable(params.get("companyId")).orElseGet(String::new); + String applicationCode = (String) Optional.ofNullable(params.get("applicationCode")).orElseGet(String::new); + Integer grade = (Integer) Optional.ofNullable(params.get("grade")).orElseGet(() -> -Integer.MAX_VALUE); + Date expireDate = (Date) Optional.ofNullable(params.get("expireDate")).orElseGet(Date::new); + List selectedPopedomIds = (List) Optional.ofNullable(params.get("selectedPopedomId")).orElseGet(ArrayList::new); + + //添加许可证信息 + CompanyApplicationLicense companyApplicationLicense = new CompanyApplicationLicense(); + companyApplicationLicense.setApplicationCode(applicationCode); + companyApplicationLicense.setCompanyId(companyId); + companyApplicationLicense.setExpireDate(expireDate); + companyApplicationLicense.setIsForever(false); + companyApplicationLicense.setState("1"); + companyApplicationLicense.setGrade(grade); + companyApplicationLicenseMapper.insert(companyApplicationLicense); + + //-1表示自定义功能 + if (grade == -1) { + List applicationPopedoms = applicationPopedomMapper.selectBatchIds(selectedPopedomIds); + List companyApplicationPopedoms = applicationPopedoms.stream().map(a -> new CompanyApplicationPopedom(a)).collect(Collectors.toList()); + companyApplicationPopedoms.stream().forEach(a -> companyApplicationPopedomMapper.insert(a)); + eventSender.send(BusConfig.ROUTING_KEY,companyApplicationPopedoms); + } else { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("grade", grade).eq("application_code", applicationCode); + List applicationGradePopedoms = applicationGradePopedomMapper.selectList(wrapper); + List applicationPopedoms = applicationPopedomMapper.selectBatchIds(applicationGradePopedoms.stream().map(a -> a.getPopedomId()).collect(Collectors.toList())); + List companyApplicationPopedoms = applicationPopedoms.stream().map(a -> new CompanyApplicationPopedom(a)).collect(Collectors.toList()); + companyApplicationPopedoms.stream().forEach(a -> companyApplicationPopedomMapper.insert(a)); + //发送消息 + eventSender.send(BusConfig.ROUTING_KEY,companyApplicationPopedoms); + } + + return false; + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/service/impl/ProductServiceImpl.java b/cooperop-app-base/src/main/java/business/cooperop/base/service/impl/ProductServiceImpl.java new file mode 100644 index 0000000..4da9aab --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/service/impl/ProductServiceImpl.java @@ -0,0 +1,296 @@ +package business.cooperop.base.service.impl; + +import business.cooperop.base.dto.AuthNodeDto; +import business.cooperop.base.entity.Application; +import business.cooperop.base.entity.ApplicationGrade; +import business.cooperop.base.entity.ApplicationPopedom; +import business.cooperop.base.mapper.ApplicationGradeMapper; +import business.cooperop.base.mapper.ApplicationMapper; +import business.cooperop.base.mapper.ApplicationPopedomMapper; +import business.cooperop.base.service.IProductService; +import business.cooperop.base.vo.PopedomVo; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: deadline + * @Date: 2020-12-29 14:08 + */ +@Service +@Transactional +public class ProductServiceImpl extends ServiceImpl implements IProductService { + + + @Autowired + ApplicationMapper applicationMapper; + + @Autowired + ApplicationGradeMapper applicationGradeMapper; + + /** + * 获取应用权限树 + * + * @return + */ + @Override + public List getTree() { + // 取得所有权限列表 + List nodeAll = list().stream().map(a -> new AuthNodeDto(a)).collect(Collectors.toList()); + + // 存放去除顶级节点之后的所有节点 + List newNodesAll = new ArrayList<>(); + + // 找出所有父节点 + List topNodes = new ArrayList<>(); + nodeAll.stream().forEach(node -> { + if (StringUtils.isEmpty(node.getParentId())) { + topNodes.add(node); + } else { + newNodesAll.add(node); + } + }); + + // 循环递归找出所有子节点 + for (AuthNodeDto node : topNodes) { + List child = findChildrenNode(newNodesAll, node.getId()); + node.setChildren(child); + } + + // 节点排序 + nodeSort(topNodes); + return topNodes; + } + + /** + * 根据传入参数, 找到父节点的所有子节点 + * + * @param resource 全量节点 + * @param parent_id 父节点id + * @return + */ + private List findChildrenNode(List resource, String parent_id) { + // 子节点 + List childList = new ArrayList<>(); + + // 找出传入parent_id的所有子节点 + resource.stream().forEach(node -> { + if (parent_id.equals(node.getParentId())) { + childList.add(node); + } + }); + + // 没有子节点直接返回 + if (childList.isEmpty()) { + return childList; + } + + // 子节点排序 + nodeSort(childList); + + // 循环递归找出子节点中所有的子节点 + for (AuthNodeDto node : childList) { + List child = findChildrenNode(resource, node.getId()); + node.setChildren(child); + } + return childList; + } + + /** + * 节点排序, 根据order_no + * + * @param nodes + */ + private void nodeSort(List nodes) { + nodes.sort((n1, n2) -> { + Integer orderN1 = n1.getOrderNo(); + Integer orderN2 = n2.getOrderNo(); + if (orderN1 == null || orderN2 == null) { + return 0; + } + return orderN1.compareTo(orderN2); + }); + } + + /** + * 新增应用或应用子权限节点 + * + * @param popedomVo + * @return + */ + @Override + public boolean addAppChildren(PopedomVo popedomVo) { + ApplicationPopedom applicationPopedom = popedomVo.convertApplicationPopedom(); + + // 添加节点 + if (popedomVo.getType() == null) { + return save(applicationPopedom); + } + + // 添加应用 + Application application = popedomVo.convertApplication(); + applicationMapper.insert(application); + // 同时添加应用根节点 + return save(applicationPopedom); + } + + /** + * 修改应用或子权限节点信息 + * + * @param popedomVo + * @return + */ + @Override + public boolean updateAppChildren(PopedomVo popedomVo) { + ApplicationPopedom applicationPopedom = popedomVo.convertApplicationPopedom(); + + // 更新节点 + if (popedomVo.getType() == null) { + return updateById(applicationPopedom); + } + + // 更新应用信息 + Application application = popedomVo.convertApplication(); + applicationMapper.updateById(application); + return updateById(applicationPopedom); + } + + /** + * 删除应用, 会同时删除所有子节点 + * + * @param applicationCode + * @return + */ + @Override + public boolean delApplication(String applicationCode) { + // 删除应用 + applicationMapper.deleteById(applicationCode); + // 删除子节点 + return delAppChildren(applicationCode, null); + } + + /** + * 查询应用权限信息 + * + * @param popedomId + * @return + */ + @Override + public ApplicationPopedom getAppChildrenInfo(String popedomId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("id", popedomId); + return getOne(wrapper); + } + + /** + * 删除应用下的子权限 + * + * @param applicationCode + * @param id + * @return + */ + @Override + public boolean delAppChildren(String applicationCode, String id) { + QueryWrapper wrapper = new QueryWrapper<>(); + if (StringUtils.isEmpty(id)) { + wrapper.eq("application_code", applicationCode); + } else { + wrapper.eq("application_code", applicationCode).eq("id", id); + } + return remove(wrapper); + } + + /** + * 根据传入父id, 获取下一个子节点id + * + * @param parentId + * @return + */ + @Override + public AuthNodeDto getNextNodeId(String parentId) { + QueryWrapper wrapper = new QueryWrapper<>(); + if (StringUtils.isEmpty(parentId)) { + wrapper.eq("parent_id", null).or().eq("parent_id", ""); + } else { + wrapper.eq("parent_id", parentId); + } + wrapper.orderByDesc("id"); + + AuthNodeDto authNodeDto = new AuthNodeDto(getOne(wrapper)); + + // 如果获取到的最大id节点为空, 说名下一个添加的节点为第一个节点 + if (authNodeDto == null || StringUtils.isEmpty(authNodeDto.getId())) { + authNodeDto = new AuthNodeDto(); + authNodeDto.setId(parentId + "01"); + authNodeDto.setOrderNo(1); + return authNodeDto; + } + Integer id = Integer.valueOf(authNodeDto.getId()) + 1; + authNodeDto.setId("0" + id); + return authNodeDto; + } + + + /** + * 添加应用等级 + * + * @param applicationGrade + * @return + */ + @Override + public int addAppGrade(ApplicationGrade applicationGrade) { + return applicationGradeMapper.insert(applicationGrade); + } + + /** + * 根据应用code查询应用所有等级 + * + * @param applicationCode + * @return + */ + @Override + public IPage appGradeList(String applicationCode, int pageNum, int pageSize) { + IPage page = new Page<>(pageNum, pageSize); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("application_code", applicationCode); + IPage pageInfo = applicationGradeMapper.selectPage(page, wrapper); + return pageInfo; + } + + /** + * 根据传入参数获取单个应用等级信息 + * + * @param applicationCode + * @param grade + * @return + */ + @Override + public ApplicationGrade getAppGrade(String applicationCode, int grade) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("application_code", applicationCode).eq("grade", grade); + return applicationGradeMapper.selectOne(wrapper); + } + + /** + * 更新应用等级信息 + * + * @param applicationGrade + * @return + */ + @Override + public int updateAppGrade(ApplicationGrade applicationGrade) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("application_code", applicationGrade.getApplicationCode()).eq("grade", applicationGrade.getGrade()); + return applicationGradeMapper.update(applicationGrade, wrapper); + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/service/impl/UserServiceImpl.java b/cooperop-app-base/src/main/java/business/cooperop/base/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..3143709 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/service/impl/UserServiceImpl.java @@ -0,0 +1,39 @@ +package business.cooperop.base.service.impl; + +import business.cooperop.base.entity.User; +import business.cooperop.base.mapper.UserMapper; +import business.cooperop.base.service.IUserService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 用户管理service实现类 + * + * @Author: deadline + * @Date: 2021-01-05 10:14 + */ +@Service +public class UserServiceImpl extends ServiceImpl implements IUserService { + + /** + * 获取用户信息 + * + * @param userId + * @return + */ + @Override + public User getUserInfo(String userId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("id", userId); + return getOne(wrapper); + } + + @Override + public User getUserByUsername(String username) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("username", username); + return getOne(wrapper); + } + +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/vo/CompanyVO.java b/cooperop-app-base/src/main/java/business/cooperop/base/vo/CompanyVO.java new file mode 100644 index 0000000..daf11db --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/vo/CompanyVO.java @@ -0,0 +1,19 @@ +package business.cooperop.base.vo; + + +import lombok.Data; + +/** + * @author china + */ +@Data +public class CompanyVO { + private int limit; + private int start; + private String name; + private String businessLicense; + private String address; + private String mobile; + private String tel; + private String icpNo; +} diff --git a/cooperop-app-base/src/main/java/business/cooperop/base/vo/PopedomVo.java b/cooperop-app-base/src/main/java/business/cooperop/base/vo/PopedomVo.java new file mode 100644 index 0000000..7ffcbf2 --- /dev/null +++ b/cooperop-app-base/src/main/java/business/cooperop/base/vo/PopedomVo.java @@ -0,0 +1,72 @@ +package business.cooperop.base.vo; + +import business.cooperop.base.entity.Application; +import business.cooperop.base.entity.ApplicationPopedom; +import lombok.Data; + +import java.util.Date; + +/** + * 节点实体类, 用于接收传入参数 + * @Author: deadline + * @Date: 2021-01-04 20:04 + */ +@Data +public class PopedomVo { + private String applicationCode; + private String id; + private String name; + private String parentId; + private Integer type; + private String url; + private String icon; + private Integer isMenu; + private Integer orderNo; + private String description; + private String path; + private String redirect; + private String component; + private String title; + private Boolean alwaysShow; + private Boolean hidden; + + /** + * 将popedom vo转换为application po + * @return + */ + public Application convertApplication() { + Application application = new Application(); + application.setCode(this.applicationCode); + application.setName(this.name); + application.setType(this.type); + application.setDescription(this.description); + application.setDeployedTime(new Date()); + application.setOrderNo(this.orderNo); + return application; + } + + /** + * 将popedom vo转换为applicationPopedom po + * @return + */ + public ApplicationPopedom convertApplicationPopedom() { + ApplicationPopedom applicationPopedom = new ApplicationPopedom(); + applicationPopedom.setApplicationCode(this.applicationCode); + applicationPopedom.setId(this.id); + applicationPopedom.setName(this.name); + applicationPopedom.setParentId(this.parentId); + applicationPopedom.setUrl(this.url); + applicationPopedom.setIcon(this.icon); + applicationPopedom.setIsMenu(this.isMenu); + applicationPopedom.setOrderNo(this.orderNo); + applicationPopedom.setDescription(this.description); + applicationPopedom.setPath(this.path); + applicationPopedom.setRedirect(this.redirect); + applicationPopedom.setComponent(this.component); + applicationPopedom.setTitle(this.title); + applicationPopedom.setAlwaysShow(this.alwaysShow); + applicationPopedom.setHidden(this.hidden); + return applicationPopedom; + } + +} diff --git a/cooperop-app-base/src/main/resources/application.yml b/cooperop-app-base/src/main/resources/application.yml new file mode 100644 index 0000000..1c6acb3 --- /dev/null +++ b/cooperop-app-base/src/main/resources/application.yml @@ -0,0 +1,88 @@ +server: + port: 8088 + +# QQ邮箱 +spring: + mail: + host: smtp.qq.com #发送邮件服务器 + username: 943359729@qq.com #发送邮件的邮箱地址 + password: gemhokyelabnbfdb #客户端授权码,不是邮箱密码,这个在qq邮箱设置里面自动生成的 + properties.mail.smtp.port: 465 #端口号465或587 + from: 943359729@qq.com # 发送邮件的地址,和上面username一致 + properties.mail.smtp.starttls.enable: true + properties.mail.smtp.starttls.required: true + properties.mail.smtp.ssl.enable: true + default-encoding: utf-8 +# 网易邮箱 +#spring: +# mail: +# host: smtp.163.com #发送邮件服务器 +# username: imayfly1997@163.com #发送邮件的邮箱地址 +# password: GLMMWPUOLRFOWYBU #客户端授权码,不是邮箱密码,网易的是自己设置的 +# properties.mail.smtp.port: 994 #465或者994 +# from: imayfly1997@163.com # 发送邮件的地址,和上面username一致 +# properties.mail.smtp.starttls.enable: true +# properties.mail.smtp.starttls.required: true +# properties.mail.smtp.ssl.enable: true +# default-encoding: utf-8 + + # 连接池 + datasource: + # 填写你数据库的url、登录名、密码和数据库名 + url: jdbc:mysql://chaoran.crtech.cn:3506/xin_cloudauth?useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=CTT&allowPublicKeyRetrieval=true + username: root + password: www.Crtech2018.cn + druid: + # 连接池的配置信息 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + validationQuery: SELECT 1 + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + poolPreparedStatements: true + maxPoolPreparedStatementPerConnectionSize: 20 + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + filters: stat,wall,slf4j + # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 + connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 + # 配置DruidStatFilter + web-stat-filter: + enabled: true + url-pattern: "/*" + exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" + # 配置DruidStatViewServlet + stat-view-servlet: + enabled: true + url-pattern: "/druid/*" + # IP白名单(没有配置或者为空,则允许所有访问) + allow: 127.0.0.1 + # IP黑名单 (存在共同时,deny优先于allow) + deny: all + # 禁用HTML页面上的“Reset All”功能 + reset-enable: false + # 登录名 + login-username: crtech + # 登录密码 + login-password: Crtech@2020 + driver-class-name: com.mysql.cj.jdbc.Driver + +# pagehelper +#pagehelper: +# helperDialect: mysql +# reasonable: true +# supportMethodsArguments: true +# params: count=countSql + +logging: + level: + bussiness.cooperop.base.mapper: debug diff --git a/cooperop-app-base/src/main/resources/bootstrap.yml b/cooperop-app-base/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..cb74b59 --- /dev/null +++ b/cooperop-app-base/src/main/resources/bootstrap.yml @@ -0,0 +1,10 @@ +spring: + application: + name: app-base + cloud: + nacos: + discovery: + server-addr: ${REGISTER_HOST:localhost}:${REGISTER_PORT:8848} + config: + server-addr: ${REGISTER_HOST:localhost}:${REGISTER_PORT:8848} + file-extension: yml diff --git a/cooperop-app-base/src/main/resources/logback-spring.xml b/cooperop-app-base/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..c453993 --- /dev/null +++ b/cooperop-app-base/src/main/resources/logback-spring.xml @@ -0,0 +1,51 @@ + + + logback-spring + + + + + + + + + + ${pattern} + + + + + + + ${pattern-color} + + + + + + + ${LOG_HOME}/all.%d.%i.log + + + 10MB + + + 1 + + + + ${pattern} + + + + + + + + + + + + + + diff --git a/cooperop-app-base/src/main/resources/mybatis-generator/generatorConfig.xml b/cooperop-app-base/src/main/resources/mybatis-generator/generatorConfig.xml new file mode 100644 index 0000000..39d6fff --- /dev/null +++ b/cooperop-app-base/src/main/resources/mybatis-generator/generatorConfig.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
diff --git a/cooperop-app-base/src/test/java/business/cooperop/base/AuthTests.java b/cooperop-app-base/src/test/java/business/cooperop/base/AuthTests.java new file mode 100644 index 0000000..52cf789 --- /dev/null +++ b/cooperop-app-base/src/test/java/business/cooperop/base/AuthTests.java @@ -0,0 +1,31 @@ +package business.cooperop.base; + +import business.cooperop.base.controller.ApplicationController; +import business.cooperop.base.service.IUserService; +import business.cooperop.common.result.Result; +import com.alibaba.fastjson.JSONArray; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +/** + * @Author: deadline + * @Date: 2020-12-29 17:00 + */ +@SpringBootTest +public class AuthTests { + + @Autowired + ApplicationController authController; + + @Autowired + IUserService iUserService; + + @Test + public void getTreeTest() { + Result result = authController.getTree(); + String json = JSONArray.toJSONString(result); + System.out.println(json); + } + +} diff --git a/cooperop-app-base/src/test/java/business/cooperop/base/CooperopAppBaseApplicationTests.java b/cooperop-app-base/src/test/java/business/cooperop/base/CooperopAppBaseApplicationTests.java new file mode 100644 index 0000000..53b7994 --- /dev/null +++ b/cooperop-app-base/src/test/java/business/cooperop/base/CooperopAppBaseApplicationTests.java @@ -0,0 +1,59 @@ +package business.cooperop.base; + +//import business.cooperop.base.entity.Message; +import business.cooperop.base.message.InternalMessage; +import business.cooperop.base.message.InternalMessageImpl; +import business.cooperop.base.message.email.service.EmailService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.lang.reflect.Array; +import java.util.*; + +//@RunWith(SpringRunner.class) +@SpringBootTest +class CooperopAppBaseApplicationTests { + + @Autowired + private EmailService emailService; + @Autowired + private InternalMessage InternalMessage; + + private static String to = "943359729@qq.com"; + + @Test + public void sendSimpleEmail(){ + String content = "你好,恭喜你..."; + emailService.sendSimpleMail(new String[]{to},"祝福邮件",content); + } + + @Test + public void sendMimeEmail(){ + String content = "你好,欢迎注册网站,请点击链接激活"; + emailService.sendHtmlMail(new String[]{to},"激活邮件",content); + } + + @Test + public void sendAttachment(){ + emailService.sendAttachmentsMail(new String[]{to},"关于java体系图","你好, 这是Java体系图","G:\\测试图片\\01.jpg", "G:\\测试图片\\02.jpg"); + } + @Test + public void sendInternalMessage(){ + /*Message message = new Message(); + message.setTitle("系统通知"); + message.setType("T"); + message.setTarget("A"); + message.setContent("系统通知"); + message.setState(1); + message.setCreate_time(new Date()); + message.setCreate_user("admin"); + message.setStart_time(new Date()); + Calendar curr = Calendar.getInstance(); + curr.set(Calendar.MONTH,curr.get(Calendar.MONTH)+1); //增加一月 + Date date=curr.getTime(); + message.setEnd_time(date); + InternalMessage.settingInternalMessage(message);*/ + } + +} diff --git a/cooperop-app-common/pom.xml b/cooperop-app-common/pom.xml new file mode 100644 index 0000000..ddaf91d --- /dev/null +++ b/cooperop-app-common/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + + business.chaoran + cooperop-app + 1.0-SNAPSHOT + + + business.chaoran + cooperop-app-common + 1.0-SNAPSHOT + + + + + + com.esotericsoftware + reflectasm + + + + + diff --git a/cooperop-app-common/src/main/java/business/cooperop/common/constant/Base.java b/cooperop-app-common/src/main/java/business/cooperop/common/constant/Base.java new file mode 100644 index 0000000..e50679d --- /dev/null +++ b/cooperop-app-common/src/main/java/business/cooperop/common/constant/Base.java @@ -0,0 +1,17 @@ +package business.cooperop.common.constant; + +/** + * 系统基础常量 + * + * @author FXY + *

+ * 2018年1月23日 + */ +public class Base { + + public static final String ROLE_ADMIN = "admin"; + + public static final String CURRENT_USER = "current_user"; + + public static final String CURRENT_COMPANY = "current_company"; +} diff --git a/cooperop-app-common/src/main/java/business/cooperop/common/constant/ResultCode.java b/cooperop-app-common/src/main/java/business/cooperop/common/constant/ResultCode.java new file mode 100644 index 0000000..8a0f8af --- /dev/null +++ b/cooperop-app-common/src/main/java/business/cooperop/common/constant/ResultCode.java @@ -0,0 +1,106 @@ +package business.cooperop.common.constant; + +/** + * api接口返回 code和message + * + * @author FXY + *

+ * 2018年1月23日 + */ +public enum ResultCode { + + /* 成功状态码 */ + SUCCESS(0, "成功"), + ERROR(1, "失败"), + + /* 参数错误:10001-19999 */ + PARAM_IS_INVALID(10001, "参数无效"), + PARAM_IS_BLANK(10002, "参数为空"), + PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"), + PARAM_NOT_COMPLETE(10004, "参数缺失"), + + + /* 用户错误:20001-29999*/ + USER_NOT_LOGGED_IN(20001, "用户未登录"), + USER_LOGIN_ERROR(20002, "账号或密码错误"), + USER_ACCOUNT_FORBIDDEN(20003, "账号已被禁用"), + USER_NOT_EXIST(20004, "用户不存在"), + USER_HAS_EXISTED(20005, "用户已存在"), + USER_Register_ERROR(20006, "用户注册错误"), + + /* 业务错误:30001-39999 */ + SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001, "某业务出现问题"), + //菜单 + MENU_ROOT_ELEMENT_NUM_MAX(30002, "一级菜单数量达到最大"), + MENU_TERMINAL_ELEMENT_NUM_MAX(30003, "二级菜单数量达到最大"), + MENU_LEVEL_PROMOTION(30004, "微信规定:一级菜单最多3个,二级菜单最多7个。最高二级层次菜单"), + MENU_ROOT_ELEMENT_CLOSED(30005, "对应的一级菜单未打开"), + //模板消息 + TEMPLATE_MESSAGE_ACTIVE_NUM_MAX(30006, "模板消息激活数量已达最大"), + + /* 系统错误:40001-49999 */ + SYSTEM_INNER_ERROR(40001, "系统繁忙,请稍后重试"), + + /* 数据错误:50001-599999 */ + RESULE_DATA_NONE(50001, "数据未找到"), + DATA_IS_WRONG(50002, "数据有误"), + DATA_ALREADY_EXISTED(50003, "数据已存在"), + + /* 接口错误:60001-69999 */ + INTERFACE_INNER_INVOKE_ERROR(60001, "内部系统接口调用异常"), + INTERFACE_OUTTER_INVOKE_ERROR(60002, "外部系统接口调用异常"), + INTERFACE_FORBID_VISIT(60003, "该接口禁止访问"), + INTERFACE_ADDRESS_INVALID(60004, "接口地址无效"), + INTERFACE_REQUEST_TIMEOUT(60005, "接口请求超时"), + INTERFACE_EXCEED_LOAD(60006, "接口负载过高"), + + /* 权限错误:70001-79999 */ + PERMISSION_NO_ACCESS(70001, "无访问权限"), + + /* 文件上传 */ + UPLOAD_ERROR(80001, "上传失败"), + + SESSION_TIME_OUT(90001, "Session超时"); + + + private Integer code; + + private String message; + + ResultCode(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer code() { + return this.code; + } + + public String message() { + return this.message; + } + + public static String getMessage(String name) { + for (ResultCode item : ResultCode.values()) { + if (item.name().equals(name)) { + return item.message; + } + } + return name; + } + + public static Integer getCode(String name) { + for (ResultCode item : ResultCode.values()) { + if (item.name().equals(name)) { + return item.code; + } + } + return null; + } + + @Override + public String toString() { + return this.name(); + } + +} diff --git a/cooperop-app-common/src/main/java/business/cooperop/common/exception/BaseException.java b/cooperop-app-common/src/main/java/business/cooperop/common/exception/BaseException.java new file mode 100644 index 0000000..bee1230 --- /dev/null +++ b/cooperop-app-common/src/main/java/business/cooperop/common/exception/BaseException.java @@ -0,0 +1,45 @@ +package business.cooperop.common.exception; + +import business.cooperop.common.constant.ResultCode; + +/** + * 自定义异常 + * + * @author FXY + *

+ * 2018年1月23日 + */ +public abstract class BaseException extends RuntimeException { + + private static final long serialVersionUID = 3506744187536228284L; + + private Integer errCode; + private String errMsg; + + public Integer getErrCode() { + return errCode; + } + + public void setErrCode(Integer errCode) { + this.errCode = errCode; + } + + public String getErrMsg() { + return errMsg; + } + + public void setErrMsg(String errMsg) { + this.errMsg = errMsg; + } + + public BaseException(Integer errCode, String errMsg) { + this.errCode = errCode; + this.errMsg = errMsg; + } + + public BaseException(ResultCode resultCode){ + this.errCode=resultCode.code(); + this.errMsg=resultCode.message(); + } + +} diff --git a/cooperop-app-common/src/main/java/business/cooperop/common/exception/DefaultException.java b/cooperop-app-common/src/main/java/business/cooperop/common/exception/DefaultException.java new file mode 100644 index 0000000..36e478b --- /dev/null +++ b/cooperop-app-common/src/main/java/business/cooperop/common/exception/DefaultException.java @@ -0,0 +1,27 @@ +package business.cooperop.common.exception; + +/* + ********************************************** + * DATE PERSON REASON + * 2020/10/23 FXY Created + ********************************************** + */ + + +import business.cooperop.common.constant.ResultCode; + +/** + * 默认异常实现 + */ +public class DefaultException extends BaseException { + + + public DefaultException(Integer errCode, String errMsg) { + super(errCode, errMsg); + } + + //根据枚举建立异常 + public static DefaultException simple(ResultCode resultCode) { + return new DefaultException(resultCode.code(), resultCode.message()); + } +} diff --git a/cooperop-app-common/src/main/java/business/cooperop/common/result/ParameterInvalidItem.java b/cooperop-app-common/src/main/java/business/cooperop/common/result/ParameterInvalidItem.java new file mode 100644 index 0000000..22245bb --- /dev/null +++ b/cooperop-app-common/src/main/java/business/cooperop/common/result/ParameterInvalidItem.java @@ -0,0 +1,32 @@ +package business.cooperop.common.result; + +/** + * Controller参数校验 错误返回封装 + * + * @author FXY + *

+ * 2018年1月23日 + */ +public class ParameterInvalidItem { + + private String fieldName; + + private String message; + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/cooperop-app-common/src/main/java/business/cooperop/common/result/Result.java b/cooperop-app-common/src/main/java/business/cooperop/common/result/Result.java new file mode 100644 index 0000000..3e23564 --- /dev/null +++ b/cooperop-app-common/src/main/java/business/cooperop/common/result/Result.java @@ -0,0 +1,114 @@ +package business.cooperop.common.result; + + + +import business.cooperop.common.constant.ResultCode; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +/** + * api接口数据返回封装 + * + * @author FXY + *

+ * 2018年1月23日 + */ +public class Result implements Serializable { + + private static final long serialVersionUID = -4762928619495260423L; + + private Integer code; + + private String msg; + + private Object data; + + public Result() { + } + + public Result(Integer code, String msg) { + this.code = code; + this.msg = msg; + } + + public static Result success() { + Result result = new Result(); + result.setResultCode(ResultCode.SUCCESS); + return result; + } + + public static Result success(Object data) { + Result result = new Result(); + result.setResultCode(ResultCode.SUCCESS); + result.setData(data); + return result; + } + + public static Result failed() { + Result result = new Result(); + result.setResultCode(ResultCode.SYSTEM_INNER_ERROR); + return result; + } + + // 带消息的失败返回结果 + public static Result failed(String msg) { + Result result = new Result(); + result.setResultCode(ResultCode.SYSTEM_INNER_ERROR); + result.setMsg(msg); + return result; + } + + public static Result error(ResultCode resultCode) { + Result result = new Result(); + result.setResultCode(resultCode); + return result; + } + + public static Result error(ResultCode resultCode, Object data) { + Result result = new Result(); + result.setResultCode(resultCode); + result.setData(data); + return result; + } + + public void setResultCode(ResultCode code) { + this.code = code.code(); + this.msg = code.message(); + } + + + public Map simple() { + Map simple = new HashMap(); + this.data = simple; + + return simple; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + +} diff --git a/cooperop-app-common/src/main/java/business/cooperop/common/utils/BeanUtilsV2.java b/cooperop-app-common/src/main/java/business/cooperop/common/utils/BeanUtilsV2.java new file mode 100644 index 0000000..9c06b74 --- /dev/null +++ b/cooperop-app-common/src/main/java/business/cooperop/common/utils/BeanUtilsV2.java @@ -0,0 +1,258 @@ +package business.cooperop.common.utils; + +/* + ********************************************** + * DATE PERSON REASON + * 2020/9/4 FXY Created + ********************************************** + */ + + +import com.esotericsoftware.reflectasm.MethodAccess; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + + +/** + * 待重写 + */ + +public class BeanUtilsV2 { + + /** + * 通过 ASM反射 速度比 Spring BeanUtils.copyProperties(source,target) 快一倍 + * 类型不同可以转换 + * 大小写可以忽略 + * 下划线 _ 被忽略 + * fxy备注:需要操纵字节码,服务器没有性能瓶颈的情况下慎用! + * + * @param source 数据源 + * @param target 目标是数据 + * @param + * @return + */ + public static T copyPropertiesASM(Object source, Object target) { + MethodAccess sourceMethodAccess = CacheMethodAccess.getMethodAccess(source.getClass()); + MethodAccess targetMethodAccess = CacheMethodAccess.getMethodAccess(target.getClass()); + Map sourceGet = CacheAsmFiledMethod.getMethod("get", source.getClass()); + Map targetSet = CacheAsmFiledMethod.getMethod("set", target.getClass()); + CacheFieldMap.getFieldMap(target.getClass()).keySet().forEach((it) -> { + String sourceIndex = sourceGet.get(it); + if (sourceIndex != null) { + Object value = sourceMethodAccess.invoke(source, sourceIndex); + String setIndex = targetSet.get(it); + targetMethodAccess.invoke(target, setIndex, value); + } + }); + return (T) target; + } + + /** + * 模仿Spring中 BeanUtils.copyProperties(source,target) + * 目前仅支持整形到布尔类型的单向转换 + * 但是 + * 大小写可以忽略 + * 下划线 _ 被忽略 + * + * @param source + * @param target + * @param + * @return + */ + public static T copyProperties(Object source, Object target) { + Map sourceMap = CacheFieldMap.getFieldMap(source.getClass()); + CacheFieldMap.getFieldMap(target.getClass()).values().forEach((it) -> { + Field field = sourceMap.get(it.getName().toLowerCase().replace("_", "")); + if (field != null) { + it.setAccessible(true); + field.setAccessible(true); + try { + if (field.getType() == Integer.class && it.getType() == Boolean.class) { + it.set(target, (Integer) field.get(source) == 1 ? true : false); + } else { + it.set(target, field.get(source)); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } finally { + + //及时关闭访问权限 + field.setAccessible(false); + it.setAccessible(false); + } + } + }); + return (T) target; + } + + /** + * @param source 源对象 + * @param target 目标对象 + * @param ignores 需要忽略的字段数组元素 + * @param 返回赋了值的目标对象 + * 目前不同类型之间的转换,仅支持整形向布尔类型的单向转换 + * @return + */ + public static T copyProperties(Object source, Object target, String... ignores) { + Map sourceMap = CacheFieldMap.getFieldMap(source.getClass(), ignores); + CacheFieldMap.getFieldMap(target.getClass()).values().forEach((it) -> { + Field field = sourceMap.get(it.getName().toLowerCase().replace("_", "")); + if (field != null) { + it.setAccessible(true); + field.setAccessible(true); + try { + if (field.getType() == Integer.class && it.getType() == Boolean.class) { + it.set(target, (Integer) field.get(source) == 1 ? true : false); + } else { + it.set(target, field.get(source)); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } finally { + field.setAccessible(false); + it.setAccessible(false); + } + } + }); + return (T) target; + } + + + /** + * Asm方式缓存变量域到map中,待优化 + * 可以将加锁操作换做无阻塞的并发容器 + */ + private static class CacheAsmFiledMethod { + private static Map> cacheGetMethod = new HashMap<>(); + private static Map> cacheSetMethod = new HashMap<>(); + + private static Map getMethod(String type, Class clazz) { + MethodAccess methodAccess = CacheMethodAccess.getMethodAccess(clazz); + Map allFields = CacheFieldMap.getFieldMap(clazz); + Map result = null; + if (type.equals("get")) { + result = cacheGetMethod.get(clazz.getName()); + } else if (type.equals("set")) { + result = cacheSetMethod.get(clazz.getName()); + } + if (result == null) { + synchronized (CacheAsmFiledMethod.class) { + if (result == null) { + Map set = new HashMap<>(); + Map get = new HashMap<>(); + allFields.values().forEach((it) -> { + //判断是否是静态 + if (!Modifier.isStatic(it.getModifiers())) { + //首字母大写 + char[] f = it.getName().toCharArray(); + f[0] -= 32; + String fieldName = new String(f); + get.put(fieldName.toLowerCase().replace("_", ""), "get" + fieldName); + set.put(fieldName.toLowerCase().replace("_", ""), "set" + fieldName); + } + }); + cacheGetMethod.put(clazz.getName(), get); + cacheSetMethod.put(clazz.getName(), set); + if (type.equals("get")) { + result = cacheGetMethod.get(clazz.getName()); + } else if (type.equals("set")) { + result = cacheSetMethod.get(clazz.getName()); + } + } + } + } + return result; + } + } + + /** + * 缓存方法访问权限容器,加锁操作待优化 + */ + private static class CacheMethodAccess { + + private CacheMethodAccess() { + } + + private static Map cache = new HashMap<>(); + + private static MethodAccess getMethodAccess(Class clazz) { + MethodAccess result = cache.get(clazz.getName()); + if (result == null) { + synchronized (CacheMethodAccess.class) { + if (result == null) { + cache.put(clazz.getName(), MethodAccess.get(clazz)); + result = cache.get(clazz.getName()); + } + } + } + return result; + } + } + + /** + * 缓存所有域到map中,加锁操作待优化 + */ + private static class CacheFieldMap { + private static Map> cacheMap = new HashMap<>(); + + private static Map getFieldMap(Class clazz) { + Map result = cacheMap.get(clazz.getName()); + if (result == null) { + synchronized (CacheFieldMap.class) { + if (result == null) { + List allFields = getAllFields(clazz); + Map fieldMap = allFields.stream().collect(Collectors.toMap(field -> field.getName().toLowerCase().replace("_", ""), Function.identity())); + cacheMap.put(clazz.getName(), fieldMap); + result = cacheMap.get(clazz.getName()); + } + } + } + return result; + } + + + /** + * 每次反射完成后将数据存放在内存中 + * + * @param clazz + * @param ignores + * @return + */ + private static Map getFieldMap(Class clazz, String... ignores) { + Map result = cacheMap.get(clazz.getName()); + List list = Arrays.asList(ignores); + if (result == null) { + synchronized (CacheFieldMap.class) { + if (result == null) { + List allFields = getAllFields(clazz); + Map fieldMap = allFields.stream().filter(a -> !(list.contains(a.getName()))).collect(Collectors.toMap(field -> field.getName().toLowerCase().replace("_", ""), Function.identity())); + cacheMap.put(clazz.getName(), fieldMap); + result = cacheMap.get(clazz.getName()); + } + } + } + return result; + } + + } + + /** + * 得到包括继承而来的所有域 + * + * @param clazz + * @return + */ + private static List getAllFields(Class clazz) { + List fieldList = new ArrayList<>(); + while (clazz != null && !clazz.getName().toLowerCase().equals("java.lang.object")) { + fieldList.addAll(Arrays.asList(clazz.getDeclaredFields())); + clazz = clazz.getSuperclass(); + } + return fieldList; + } + +} diff --git a/cooperop-app-ioc/pom.xml b/cooperop-app-ioc/pom.xml new file mode 100644 index 0000000..454852c --- /dev/null +++ b/cooperop-app-ioc/pom.xml @@ -0,0 +1,101 @@ + + + 4.0.0 + + + cooperop-app + business.chaoran + 1.0-SNAPSHOT + + + business.chaoran + cooperop-app-ioc + 1.0-SNAPSHOT + + + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + org.projectlombok + lombok + true + + + + business.chaoran + cooperop-app-common + + + + business.chaoran + cooperop-base-cache + + + + + + + internal + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-logging + + + + + + + true + + + + external + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + org.springframework.boot + spring-boot-starter-logging + + + + + javax.servlet + javax.servlet-api + 3.1.0 + + + + + + diff --git a/cooperop-app-ioc/src/main/java/business/cooperop/ioc/config/BeanFactory.java b/cooperop-app-ioc/src/main/java/business/cooperop/ioc/config/BeanFactory.java new file mode 100644 index 0000000..572cbb1 --- /dev/null +++ b/cooperop-app-ioc/src/main/java/business/cooperop/ioc/config/BeanFactory.java @@ -0,0 +1,76 @@ +package business.cooperop.ioc.config; + +/* + ********************************************** + * DATE PERSON REASON + * 2020/9/14 FXY Created + ********************************************** + */ + + +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.alibaba.fastjson.support.config.FastJsonConfig; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import com.alibaba.fastjson.support.spring.FastJsonViewResponseBodyAdvice; +import org.springframework.boot.autoconfigure.http.HttpMessageConverters; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.web.client.RestTemplate; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +public class BeanFactory { + + @Bean + public RestTemplate generateTemplate() { + return new RestTemplate(); + } + + + //json过滤配置 + + /** + * @see com.fasterxml.jackson.annotation.JsonView + * @return + */ + @Bean + public FastJsonViewResponseBodyAdvice FastJsonViewResponseBodyAdvice() { + FastJsonViewResponseBodyAdvice advice = new FastJsonViewResponseBodyAdvice(); + return advice; + } + + //springboot webmvc自动注入converters + + /** + * @see com.fasterxml.jackson.annotation.JsonView + * @return + */ + @Bean + public HttpMessageConverters configureMessageConverters() { + FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); + + FastJsonConfig fastJsonConfig = new FastJsonConfig(); + + fastJsonConfig.setSerializerFeatures( + SerializerFeature.PrettyFormat, SerializerFeature.WriteNullStringAsEmpty, + SerializerFeature.DisableCircularReferenceDetect + ); + + + List fastMediaTypes = new ArrayList<>(); + fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); + + fastConverter.setFastJsonConfig(fastJsonConfig); + fastConverter.setSupportedMediaTypes(fastMediaTypes); + + return new HttpMessageConverters(fastConverter); + } + + +} + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..6ad259b --- /dev/null +++ b/pom.xml @@ -0,0 +1,146 @@ + + + 4.0.0 + pom + + + + business.chaoran + cooperop-demo-base + 1.0-SNAPSHOT + + + business.chaoran + cooperop-app + 1.0-SNAPSHOT + + + cooperop-app-common + cooperop-app-ioc + cooperop-app-base + + + + 1.0-SNAPSHOT + 1.0-SNAPSHOT + 1.0-SNAPSHOT + Hoxton.SR8 + 2.2.3.RELEASE + 3.4.0 + 1.3.0 + 1.2.4 + 1.11.7 + 2.8.6 + 1.2.73 + 1.4.0 + 3.0.0 + UTF-8 + UTF-8 + 1.8 + 1.8 + 0.0.1-SNAPSHOT + + + + + + + + business.chaoran + web + ${xin.cloud} + + + + + business.chaoran + cooperop-app-common + ${app-common.version} + + + + + business.chaoran + cooperop-base-cache + ${base-cache.version} + + + + + business.chaoran + cooperop-base-message + ${base-message.version} + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.version} + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + com.esotericsoftware + reflectasm + ${asm.version} + + + + + com.google.code.gson + gson + ${gson.version} + + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + io.springfox + springfox-boot-starter + ${swagger.version} + + + + +