Commit 5efd8791 by zhangkb

新建指标服务组件

parents
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**|mybatis/mapping/|mybatis/mapping/" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>indicators</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/main/resources=UTF-8
encoding//src/test/java=UTF-8
encoding/<project>=UTF-8
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
#indicators
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.keymobile</groupId>
<artifactId>indicators</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<description>Indicators Demo</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.5.0</version>
</dependency>
<!-- <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<scope>provided</scope>
</dependency> -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- <version>8.0.15</version> -->
</dependency>
<!-- mXparser -->
<dependency>
<groupId>org.mariuszgromada.math</groupId>
<artifactId>MathParser.org-mXparser</artifactId>
<version>4.2.0</version>
</dependency>
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-bom</artifactId>
<version>${spring-security.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<resources>
<resource>
<directory>lib</directory>
<targetPath>BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.yml</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<finalName>indicators</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.keymobile.indicators;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableSwagger2
@SpringBootApplication
@EnableFeignClients
@EnableAutoConfiguration(exclude = {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})
public class IndicatorsApplication {
public static void main(String[] args) {
SpringApplication.run(IndicatorsApplication.class, args);
}
}
package com.keymobile.indicators.api;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.keymobile.indicators.model.entity.T1;
import com.keymobile.indicators.service.T1Service;
import io.swagger.annotations.ApiOperation;
@RestController
@RequestMapping(value = "/test")
public class TestCtrl {
@Autowired
private T1Service t1Service;
@ApiOperation(value = "获取所有", notes = "获取所有")
@PostMapping(value = "/getAll")
public List<T1> getAll(){
return t1Service.getAll();
}
}
package com.keymobile.indicators.api.indicators;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.keymobile.indicators.model.indicators.DeriveIndicators;
import com.keymobile.indicators.service.indicators.DeriveIndicatorsService;
import io.swagger.annotations.ApiOperation;
@RestController
@RequestMapping(value = "/deriveIndicatorsCtrl")
public class DeriveIndicatorsCtrl {
@Autowired
private DeriveIndicatorsService derIndecatorsService;
@ApiOperation(value = "新增/修改衍生指标", notes = "新增/修改衍生指标")
@PostMapping(value = "/saveOrUpdateDerIndi")
public String saveOrUpdateDerIndicators(@RequestParam String operator,
@RequestBody DeriveIndicators derIndicators) throws Exception{
return derIndecatorsService.saveOrUpdate(derIndicators, operator);
}
@ApiOperation(value = "删除衍生指标", notes = "删除衍生指标")
@PostMapping(value = "/deleteDerIndicators")
public void deleteDerIndicators(@RequestParam String derIndiId) throws Exception{
derIndecatorsService.delete(derIndiId);
}
@ApiOperation(value = "获取衍生指标列表", notes = "获取衍生指标列表")
@PostMapping(value = "/getDerIndicatorsList")
public List<DeriveIndicators> getDerIndicatorsList(@RequestParam(required=false) String keyword)throws Exception{
return derIndecatorsService.getDerIndicatorsList(keyword);
}
@ApiOperation(value = "获取衍生指标详情", notes = "获取衍生指标详情")
@PostMapping(value = "/getDerIndicatorsDetial")
public DeriveIndicators getDerIndicatorsDetail(@RequestParam String id) throws Exception{
return derIndecatorsService.getDerIndicatorsDetail(id);
}
@ApiOperation(value = "获取衍生指标关联的原生指标共同的维度", notes = "获取衍生指标关联的原生指标共同的维度")
@PostMapping(value = "/getSameDim")
public List<String> getSameDim(@RequestParam String indiDefIdString) throws Exception{
return derIndecatorsService.getSameDim(indiDefIdString);
}
@ApiOperation(value = "计算衍生指标的值", notes = "计算衍生指标的值")
@PostMapping(value = "/calculate")
public double calculateDeriveIndicators(@RequestParam String derIndiId,
@RequestBody Map<String,Object> dimValues) throws Exception{
return derIndecatorsService.calculateDeriveIndicators(derIndiId, dimValues);
}
@ApiOperation(value = "对标单元获取指标报表", notes = "对标单元获取指标报表")
@PostMapping(value = "/getIndicatorsReport")
public Map<String,Object> getIndicatorsReport(@RequestParam String StandardUnitId,
@RequestParam String compareIndiIds,
@RequestBody List<String> compareDims,@RequestParam String year)throws Exception{
return derIndecatorsService.getIndicatorsReport(StandardUnitId, compareIndiIds, compareDims, year);
}
}
package com.keymobile.indicators.api.indicators;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.keymobile.indicators.model.indicators.IndicatorsDef;
import com.keymobile.indicators.model.indicators.IndicatorsDim;
import com.keymobile.indicators.service.indicators.IndicatorsService;
import io.swagger.annotations.ApiOperation;
@RestController
@RequestMapping(value = "/indicatorsCtrl")
public class IndicatorsCtrl {
@Autowired
private IndicatorsService indicatorsService;
@ApiOperation(value = "新增/修改指标", notes = "新增/修改指标")
@PostMapping(value = "/saveOrUpdateIndiDef")
public String saveOrUpdateIndicators(
@RequestBody IndicatorsDef indiDef,
@RequestParam String operator)throws Exception{
return indicatorsService.saveOrUpdateIndiDef(indiDef,operator);
}
@ApiOperation(value = "新增/修改维度(isUpdate:false(新增) true(修改))", notes = "新增/修改维度")
@PostMapping(value = "/saveOrUpdateIndiDim")
public String saveOrUpdateDim(@RequestBody List<IndicatorsDim> indiDims,
@RequestParam String indiDefId,
@RequestParam String operator,
@RequestParam String isUpdate) throws Exception{
return indicatorsService.saveOrUpdateDim(indiDefId, indiDims, operator, isUpdate);
}
@ApiOperation(value = "判断原生指标能否修改 true:能 false:不能", notes = "判断原生指标能否修改 true:能 false:不能")
@PostMapping(value = "/canBeUpdate")
public boolean canBeUpdate(@RequestParam String indicatorsId) throws Exception{
return indicatorsService.canBeUpdate(indicatorsId);
}
@ApiOperation(value = "删除指标", notes = "删除指标")
@PostMapping(value = "/deleteIndicators")
public String delete(@RequestParam String indicatorsId)throws Exception{
return indicatorsService.delete(indicatorsId);
}
@ApiOperation(value = "获取指标列表", notes = "获取指标列表")
@PostMapping(value = "/getIndiDefList")
public List<IndicatorsDef> getIndiDefList(@RequestParam(required=false) String keyword)throws Exception{
return indicatorsService.getIndicatorsDefList(keyword);
}
@ApiOperation(value = "获取指标详情", notes = "获取指标详情")
@PostMapping(value = "/getIndiDefDetail")
public Map<String,Object> getIndiDefDetail(@RequestParam String indiDefId)throws Exception{
return indicatorsService.getIndicatorsDefDetail(indiDefId);
}
@ApiOperation(value = "获取上传文件表头", notes = "获取上传文件表头")
@PostMapping(value = "/getUploadExcelHead")
public List<Map<String,Object>> getUploadExcelHead(
@RequestParam("file") MultipartFile file)throws Exception{
try (InputStream is = file.getInputStream()){
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
return indicatorsService.getUploadExcelHead(xssfWorkbook);
}
}
@ApiOperation(value = "判断上传文件表头和指标映射字段是否符合", notes = "判断上传文件表头和指标映射字段是否符合")
@PostMapping(value = "/isCorrespondence")
public String isCorrespondence(@RequestParam String indiDefId,
@RequestParam("file") MultipartFile file)throws Exception{
try (InputStream is = file.getInputStream()){
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
return indicatorsService.isCorrespondence(indiDefId, xssfWorkbook);
}
}
@ApiOperation(value = "上传解析指标数据", notes = "上传解析指标数据")
@PostMapping(value = "/importIndiData")
public String importIndicatorsData(@RequestParam String indiDefId,
@RequestParam("file") MultipartFile file)throws Exception{
try (InputStream is = file.getInputStream()){
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
return indicatorsService.importIndicatorsData(indiDefId, xssfWorkbook);
}
}
@ApiOperation(value = "查询指标值", notes = "查询指标值")
@PostMapping(value = "/queryIndiValue")
public Map<String,Object> queryIndicatorsValue(@RequestParam String indiDefId,
@RequestBody Map<String,Object> dimValue)throws Exception{
return indicatorsService.queryIndicatorsValue(indiDefId, dimValue,false);
}
@ApiOperation(value = "获取未审批指标值", notes = "获取未审批指标值")
@PostMapping(value = "/getUnApplyIndiValue")
public Map<String,Object> getUnApplyIndiValue() throws Exception{
return indicatorsService.getUnApplyIndiValueList();
}
@ApiOperation(value = "审批指标值", notes = "审批指标值")
@PostMapping(value = "/applyIndiValue")
public void applyIndicatorsValue(@RequestBody List<String> indiValueId) throws Exception{
indicatorsService.applyIndicatorsValue(indiValueId);
}
}
package com.keymobile.indicators.conf;
import feign.auth.BasicAuthRequestInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeignClientConfig {
@Value("${security.authUser}")
private String authUser;
@Value("${security.authPwd}")
private String authPwd;
@Bean
public BasicAuthRequestInterceptor getBasicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor(authUser, authPwd);
}
}
\ No newline at end of file
package com.keymobile.indicators.conf;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
@Configuration
public class MongoDBConfig extends AbstractMongoConfiguration {
@Value("${mongodb.uri}")
private String host;
@Value("${mongodb.database}")
private String database;
@Value("${mongodb.username}")
private String user;
@Value("${mongodb.password}")
private String pswd;
@Value("${mongodb.maxConnectionIdleTime}")
private Integer maxConnectionIdleTime = 60000;
@Override
protected String getDatabaseName() {
return database;
}
@Bean
public MongoDbFactory mongoDbFactory() {
return new SimpleMongoDbFactory(this.mongoClient(), this.getDatabaseName());
}
@Bean
public GridFsTemplate gridFsTemplate() throws Exception {
return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter());
}
@Bean
public GridFSBucket getGridFSBuckets() {
MongoDatabase db = mongoDbFactory().getDb();
return GridFSBuckets.create(db);
}
@Override
public MongoClient mongoClient() {
String uri = String.format("mongodb://%s:%s@%s/%s", user, pswd, host, database);
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.maxConnectionIdleTime(maxConnectionIdleTime);
MongoClientURI clientURI = new MongoClientURI(uri, builder);
return new MongoClient(clientURI);
}
}
package com.keymobile.indicators.conf;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* redis配置类
*/
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisConfig {
@Bean
RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
template.setValueSerializer(serializer);
//使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
}
}
package com.keymobile.indicators.conf;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration
@MapperScan(basePackages = "com.keymobile.indicators.model.mapper", sqlSessionTemplateRef = "secondSqlSessionTemplate")
public class SecondDatasourceConf {
@Primary //指定主库
@Bean
@ConfigurationProperties(prefix = "spring.datasource.second")
public DataSource secondDatasource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory secondSqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(secondDatasource());
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapping/*Mapper.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean
public DataSourceTransactionManager secondTxMananger() {
return new DataSourceTransactionManager(secondDatasource());
}
@Bean
public SqlSessionTemplate secondSqlSessionTemplate() throws Exception {
return new SqlSessionTemplate(secondSqlSessionFactory());
}
}
package com.keymobile.indicators.conf;
import javax.sql.DataSource;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private static final String USERSQUERY = "select concat(user_name, ':', user_id, ':', user_dname), password, true \n" +
"from auth_user where user_name = ?";
private static final String ROLESQUERY = "select t1.user_name, concat(concat('ROLE_', t1.author_name), ':', GROUP_CONCAT(COALESCE(t2.domain_id, '*'))) as role_name \n" +
"from \n" +
" (select a.user_name, d.author_name\n" +
" from auth_user a, auth_user_roles b, auth_role_authors c, auth_author d\n" +
" where a.user_id = b.user_id and b.role_id = c.role_id and c.author_id = d.author_id\n" +
" and a.user_name = substring_index(?, ':', 1)) t1\n" +
" left join\n" +
" (select a.user_name, c.domain_id\n" +
" from auth_user a, auth_user_domains b, auth_domain c\n" +
" where a.user_id = b.user_id and b.domain_id = c.domain_id) t2\n" +
"on t1.user_name = t2.user_name \n" +
"group by t1.author_name";
@Value("${security.permit}")
private boolean permit;
@Autowired
private DataSource dataSource;
@Autowired
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().usersByUsernameQuery(USERSQUERY).authoritiesByUsernameQuery(ROLESQUERY)
.dataSource(dataSource).passwordEncoder(new SHA1PasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
if (permit) {
http.httpBasic().and().authorizeRequests().anyRequest().permitAll();
}
else {
http.httpBasic().and().authorizeRequests().anyRequest().authenticated();
}
http.headers().frameOptions().disable();
http.csrf().disable();
}
class SHA1PasswordEncoder implements PasswordEncoder {
@Override
public String encode(CharSequence charSequence) {
return DigestUtils.sha1Hex(charSequence.toString());
}
@Override
public boolean matches(CharSequence charSequence, String s) {
return DigestUtils.sha1Hex(charSequence.toString()).equals(s);
}
}
}
package com.keymobile.indicators.model.entity;
public class T1 {
private String var2;
private String var31;
private String var5;
private String var6;
private String var7;
private String var10;
private String var11;
private String var12;
private String var13;
public String getVar2() {
return var2;
}
public void setVar2(String var2) {
this.var2 = var2;
}
public String getVar31() {
return var31;
}
public void setVar31(String var31) {
this.var31 = var31;
}
public String getVar5() {
return var5;
}
public void setVar5(String var5) {
this.var5 = var5;
}
public String getVar6() {
return var6;
}
public void setVar6(String var6) {
this.var6 = var6;
}
public String getVar7() {
return var7;
}
public void setVar7(String var7) {
this.var7 = var7;
}
public String getVar10() {
return var10;
}
public void setVar10(String var10) {
this.var10 = var10;
}
public String getVar11() {
return var11;
}
public void setVar11(String var11) {
this.var11 = var11;
}
public String getVar12() {
return var12;
}
public void setVar12(String var12) {
this.var12 = var12;
}
public String getVar13() {
return var13;
}
public void setVar13(String var13) {
this.var13 = var13;
}
@Override
public String toString() {
return "T1 [var2=" + var2 + ", var31=" + var31 + ", var5=" + var5 + ", var6=" + var6 + ", var7=" + var7
+ ", var10=" + var10 + ", var11=" + var11 + ", var12=" + var12 + ", var13=" + var13 + "]";
}
}
package com.keymobile.indicators.model.indicators;
import java.io.Serializable;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 衍生指标
*/
@Document(collection="indi_derive")
public class DeriveIndicators implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String id;
private String derName;
private String derCnName;
private String derUnit;//计算单位
private String derFormula;
private String indiDefIds;
private String dimNames;
private String derFormulaDesc;//公式中文描述
private String status;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
private String creator;
private String updator;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDerName() {
return derName;
}
public void setDerName(String derName) {
this.derName = derName;
}
public String getDerCnName() {
return derCnName;
}
public void setDerCnName(String derCnName) {
this.derCnName = derCnName;
}
public String getDerUnit() {
return derUnit;
}
public void setDerUnit(String derUnit) {
this.derUnit = derUnit;
}
public String getDerFormula() {
return derFormula;
}
public void setDerFormula(String derFormula) {
this.derFormula = derFormula;
}
public String getIndiDefIds() {
return indiDefIds;
}
public void setIndiDefIds(String indiDefIds) {
this.indiDefIds = indiDefIds;
}
public String getDimNames() {
return dimNames;
}
public void setDimNames(String dimNames) {
this.dimNames = dimNames;
}
public String getDerFormulaDesc() {
return derFormulaDesc;
}
public void setDerFormulaDesc(String derFormulaDesc) {
this.derFormulaDesc = derFormulaDesc;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getUpdator() {
return updator;
}
public void setUpdator(String updator) {
this.updator = updator;
}
}
package com.keymobile.indicators.model.indicators;
import java.io.Serializable;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 指标定义表
*/
@Document(collection="indi_def")
public class IndicatorsDef implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String id;
private String indiName;
private String indiCnName;
private int valueMapping = -1;
private String valueMappingName;
private String indiUnit;
private String dataType;
private String status;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
private String creator;
private String updator;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getIndiName() {
return indiName;
}
public void setIndiName(String indiName) {
this.indiName = indiName;
}
public String getIndiCnName() {
return indiCnName;
}
public void setIndiCnName(String indiCnName) {
this.indiCnName = indiCnName;
}
public int getValueMapping() {
return valueMapping;
}
public void setValueMapping(int valueMapping) {
this.valueMapping = valueMapping;
}
public String getValueMappingName() {
return valueMappingName;
}
public void setValueMappingName(String valueMappingName) {
this.valueMappingName = valueMappingName;
}
public String getIndiUnit() {
return indiUnit;
}
public void setIndiUnit(String indiUnit) {
this.indiUnit = indiUnit;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getUpdator() {
return updator;
}
public void setUpdator(String updator) {
this.updator = updator;
}
}
package com.keymobile.indicators.model.indicators;
import java.io.Serializable;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 指标维度表
*/
@Document(collection="indi_dim")
public class IndicatorsDim implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String id;
private String dimName;
private String dimCnName;
private String dimType;
private int dimMapping = -1;
private String dimMappingName;
private String dataType;
private int sort;
private String indiDefId;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
private String creator;
private String updator;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDimName() {
return dimName;
}
public void setDimName(String dimName) {
this.dimName = dimName;
}
public String getDimCnName() {
return dimCnName;
}
public void setDimCnName(String dimCnName) {
this.dimCnName = dimCnName;
}
public String getDimType() {
return dimType;
}
public void setDimType(String dimType) {
this.dimType = dimType;
}
public int getDimMapping() {
return dimMapping;
}
public void setDimMapping(int dimMapping) {
this.dimMapping = dimMapping;
}
public String getDimMappingName() {
return dimMappingName;
}
public void setDimMappingName(String dimMappingName) {
this.dimMappingName = dimMappingName;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
public String getIndiDefId() {
return indiDefId;
}
public void setIndiDefId(String indiDefId) {
this.indiDefId = indiDefId;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getUpdator() {
return updator;
}
public void setUpdator(String updator) {
this.updator = updator;
}
}
package com.keymobile.indicators.model.mapper;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.keymobile.indicators.model.entity.T1;
@Repository
public interface T1Mapper {
List<T1> selAll();
}
package com.keymobile.indicators.persistence.indicators;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.keymobile.indicators.model.indicators.DeriveIndicators;
public interface DeriveIndicatorsRepository extends MongoRepository<DeriveIndicators,String>{
//判断原生指标是否关联了衍生指标
public List<DeriveIndicators> findByIndiDefIdsLike(String indiDefId);
public List<DeriveIndicators> findByDerNameLikeOrDerCnNameLike(String name,String cnName);
}
package com.keymobile.indicators.persistence.indicators;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.keymobile.indicators.model.indicators.IndicatorsDef;
public interface IndicatorsDefRepository extends MongoRepository<IndicatorsDef,String>{
public List<IndicatorsDef> findByStatus(String status);
public List<IndicatorsDef> findByIndiNameLikeOrIndiCnNameLikeAndStatus(String name,String cnName,String status);
}
package com.keymobile.indicators.persistence.indicators;
import java.util.List;
import java.util.Optional;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.keymobile.indicators.model.indicators.IndicatorsDim;
public interface IndicatorsDimRepository extends MongoRepository<IndicatorsDim,String>{
public void deleteByIndiDefId(String indiDefId);
public List<IndicatorsDim> findByIndiDefId(String indiDefId);
public Optional<IndicatorsDim> findByIndiDefIdAndDimMappingName(String indiDefId,String dimMappindName);
public Optional<IndicatorsDim> findByIndiDefIdAndDimCnName(String indiDefId,String dimCnName);
}
package com.keymobile.indicators.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.keymobile.indicators.model.entity.T1;
import com.keymobile.indicators.model.mapper.T1Mapper;
@Service
public class T1Service {
@Autowired
private T1Mapper t1Mapper;
public List<T1> getAll(){
return t1Mapper.selAll();
}
}
package com.keymobile.indicators.service.indicators;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.apache.commons.lang.StringUtils;
import org.mariuszgromada.math.mxparser.Expression;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.keymobile.indicators.model.indicators.DeriveIndicators;
import com.keymobile.indicators.model.indicators.IndicatorsDef;
import com.keymobile.indicators.model.indicators.IndicatorsDim;
import com.keymobile.indicators.persistence.indicators.DeriveIndicatorsRepository;
import com.keymobile.indicators.persistence.indicators.IndicatorsDefRepository;
import com.keymobile.indicators.persistence.indicators.IndicatorsDimRepository;
@Service
public class DeriveIndicatorsService {
private Logger logger = LoggerFactory.getLogger(DeriveIndicatorsService.class);
@Autowired
private DeriveIndicatorsRepository derIndicatorsRepo;
@Autowired
private IndicatorsDimRepository indicatorsDimRepo;
@Autowired
private IndicatorsService indicatorsService;
@Autowired
private IndicatorsDefRepository indicatorsDefRepo;
//新增/修改衍生指标
public String saveOrUpdate(DeriveIndicators derIndicators,String operator)throws Exception {
//新增
if(StringUtils.isBlank(derIndicators.getId())) {
derIndicators.setCreateTime(new Date());
derIndicators.setCreator(operator);
derIndicators.setUpdateTime(new Date());
derIndicators.setUpdator(operator);
}else {
derIndicators.setUpdateTime(new Date());
derIndicators.setUpdator(operator);
}
derIndicators.setStatus("0");
if(StringUtils.isBlank(derIndicators.getDimNames())) {
derIndicators.setDimNames("地区;年份");
}
derIndicatorsRepo.save(derIndicators);
return derIndicators.getId();
}
//删除衍生指标
public void delete(String id) throws Exception{
derIndicatorsRepo.deleteById(id);
}
//获取衍生列表
public List<DeriveIndicators> getDerIndicatorsList(String keyword)throws Exception{
if(StringUtils.isBlank(keyword)) {
return derIndicatorsRepo.findAll();
}
return derIndicatorsRepo.findByDerNameLikeOrDerCnNameLike(keyword, keyword);
}
//获取衍生指标详情
public DeriveIndicators getDerIndicatorsDetail(String id) throws Exception{
Optional<DeriveIndicators> deriveIndi = derIndicatorsRepo.findById(id);
if(deriveIndi.isPresent()) {
return deriveIndi.get();
}
return null;
}
//根据衍生指标关联的原生指标获取共同的维度
public List<String> getSameDim(String indiDefIdString) throws Exception{
if(indiDefIdString.endsWith(";")) {
indiDefIdString = indiDefIdString.substring(0, indiDefIdString.length()-1);
}
String[] indiDefIds = indiDefIdString.split(";");
List<String> retainList = new ArrayList<>();
for(int i=0;i<indiDefIds.length;i++) {
//根据原生指标定义id获取维度名称
List<String> dimNameList = this.getIndiDefDimNames(indiDefIds[i]);
if(i==0) {
if(dimNameList.isEmpty()) {
break;
}else {
retainList.addAll(dimNameList);
continue;
}
}
retainList.retainAll(dimNameList);
if(retainList.isEmpty()) {
break;
}
}
return retainList;
}
//计算衍生指标值
public double calculateDeriveIndicators(String derIndiId,Map<String,Object> dimValues) throws Exception{
//根据衍生指标id获取衍生指标
Optional<DeriveIndicators> derIndicators = derIndicatorsRepo.findById(derIndiId);
//获取衍生指标计算公式
String derFormula = derIndicators.get().getDerFormula();
logger.info("未替换公式:"+derFormula);
//获取衍生指标关联的原生指标id
String indiDefIdsString = derIndicators.get().getIndiDefIds();
if(indiDefIdsString.endsWith(";")) {
indiDefIdsString = indiDefIdsString.substring(0, indiDefIdsString.length()-1);
}
String[] indiDefIds = indiDefIdsString.split(";");
for(String indiDefId : indiDefIds) {
Map<String,Object> resultMap = indicatorsService.queryIndicatorsValue(indiDefId, dimValues, true);
Object count = resultMap.get("count");
//替换公式中的原生指标id为对应的值
derFormula = derFormula.replace(indiDefId, count.toString());
}
logger.info("替换后的公式:"+derFormula);
Expression e = new Expression(derFormula);
double result = (double) Math.round((e.calculate()) * 100) / 100;
return result;
}
public Map<String,Object> getIndicatorsReport(String StandardUnitId,
String compareIndiIds,List<String> compareDims,String year) throws Exception{
Map<String,Object> reportMap = new HashMap<>();
reportMap.put("StandardUnitId", StandardUnitId);
//拆分年份维度
String[] yearDim = year.split(":");
if(compareIndiIds.endsWith(";")) {
compareIndiIds = compareIndiIds.substring(0, compareIndiIds.length()-1);
}
String[] compareIndiId = compareIndiIds.split(";");
List<Map<String,Object>> indiReportList = new ArrayList<>();
for(String indiId : compareIndiId) {
Map<String,Object> indiReport = new HashMap<>();
String[] inId = indiId.split(":");
//如果是原生指标
if("0".equals(inId[1])) {
//根据原生指标id获取原生指标详情
Optional<IndicatorsDef> indiDef = indicatorsDefRepo.findById(inId[0]);
indiReport.put("indicatorsName", indiDef.get().getIndiCnName());
List<Map<String,Object>> resultList = new ArrayList<>();
String unit = indiDef.get().getIndiUnit();
for(String compareDim : compareDims) {
if(compareDim.endsWith(";")) {
compareDim = compareDim.substring(0, compareDim.length()-1);
}
String[] compDim = compareDim.split(":");
String dimCnName = compDim[0];
String[] dimValues = compDim[1].split(";");
for(String dimValue : dimValues) {
Map<String,Object> queryMap = new HashMap<>();
queryMap.put(dimCnName, dimValue);
queryMap.put(yearDim[0],yearDim[1]);
Map<String,Object> resultMap = new HashMap<>();
resultMap.put("dimValue", dimValue);
resultMap.put("unit", unit);
Map<String,Object> result = indicatorsService.queryIndicatorsValue(
inId[0], queryMap, true);
resultMap.put("result", result.get("count"));
resultList.add(resultMap);
}
}
indiReport.put("resultList", resultList);
indiReportList.add(indiReport);
}else {
//根据衍生指标id获取衍生指标详情
Optional<DeriveIndicators> derIndicators = derIndicatorsRepo.findById(inId[0]);
indiReport.put("indicatorsName", derIndicators.get().getDerCnName());
List<Map<String,Object>> resultList = new ArrayList<>();
//获取单位
String unit = derIndicators.get().getDerUnit();
for(String compareDim : compareDims) {
if(compareDim.endsWith(";")) {
compareDim = compareDim.substring(0, compareDim.length()-1);
}
String[] compDim = compareDim.split(":");
String dimCnName = compDim[0];
String[] dimValues = compDim[1].split(";");
for(String dimValue : dimValues) {
Map<String,Object> queryMap = new HashMap<>();
queryMap.put(dimCnName, dimValue);
queryMap.put(yearDim[0],yearDim[1]);
Map<String,Object> resultMap = new HashMap<>();
resultMap.put("dimValue", dimValue);
resultMap.put("unit", unit);
double result = this.calculateDeriveIndicators(inId[0], queryMap);
resultMap.put("result", result);
resultList.add(resultMap);
}
}
indiReport.put("resultList", resultList);
indiReportList.add(indiReport);
}
}
reportMap.put("report", indiReportList);
return reportMap;
}
private List<String> getIndiDefDimNames(String indiDefId){
List<String> result = new ArrayList<>();
List<IndicatorsDim> dims = indicatorsDimRepo.findByIndiDefId(indiDefId);
for(IndicatorsDim dim : dims) {
result.add(dim.getDimMappingName());
}
return result;
}
}
package com.keymobile.indicators.service.indicators;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.keymobile.indicators.conf.MongoDBConfig;
import com.keymobile.indicators.model.indicators.IndicatorsDef;
import com.keymobile.indicators.model.indicators.IndicatorsDim;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
@Service
public class IndicatorsExcelService {
private Logger logger = LoggerFactory.getLogger(IndicatorsExcelService.class);
@Autowired
private MongoDBConfig mongoDbConfig;
@Value("${mongodb.database}")
private String database;
//获取上传文件的excel头
public Map<String,Object> getUploadExcelHead(XSSFWorkbook xssfWorkbook)throws Exception{
int startDataRow = 0;//开始读excel数据的行号
Map<String,Object> result = new HashMap<>();
List<Map<String,Object>> cellDetailList = new ArrayList<>();
List<String> cellList = new ArrayList<>();
result.put("cellDetailList", cellDetailList);
result.put("cellList", cellList);
for(XSSFSheet excelSheet : xssfWorkbook) {
XSSFRow xssfRow = excelSheet.getRow(startDataRow);
int i = 0;
while(StringUtils.isNotBlank(this.getCellValue(i,xssfRow))) {
Map<String,Object> excelHead = new HashMap<>();
excelHead.put("name", this.getCellValue(i,xssfRow));
excelHead.put("index", i);
cellDetailList.add(excelHead);
cellList.add(this.getCellValue(i,xssfRow));
i++;
}
break;
}
result.put("cellDetailList", cellDetailList);
result.put("cellList", cellList);
return result;
}
public String importIndicatorsData(IndicatorsDef indiDef,List<IndicatorsDim> dimList,
XSSFWorkbook xssfWorkbook)throws Exception{
StringBuilder message = new StringBuilder("");
List<DBObject> datas = new ArrayList<>();
//excel读取
int startDataRow = 1;//开始读excel数据的行号
for(XSSFSheet excelSheet : xssfWorkbook) {
//抽取工作表内容
for (int rowNum = startDataRow; rowNum <= excelSheet.getLastRowNum(); rowNum++) {
/*创建DBObject对象,通过该对象来向集合中添加记录 */
DBObject doc = new BasicDBObject();
doc.put("inId", indiDef.getId());
XSSFRow xssfRow = excelSheet.getRow(rowNum);
//获取值映射列index
int indiValueMapping = indiDef.getValueMapping();
String indiValue = getCellValue(indiValueMapping,xssfRow);//指标值
if(StringUtils.isBlank(indiValue)) {
break;
}
doc.put("value", indiValue);
doc.put("status", "1");//未生效(待审批)
for(IndicatorsDim dim : dimList) {
//获取映射名
String dimName = dim.getDimName();
//获取映射index
int indiDimMapping = dim.getDimMapping();
String dimValue = getCellValue(indiDimMapping,xssfRow);//维度值
doc.put(dimName,dimValue);
}
datas.add(doc);
}
}
if(!datas.isEmpty()) {
this.addIndicatorData(datas);
}
return message.toString();
}
//
private void addIndicatorData(List<DBObject> datas) throws Exception{
MongoClient client = mongoDbConfig.mongoClient();
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
DB dataBase = client.getDB(database);
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
DBCollection collection = dataBase.getCollection("indi_data");
collection.insert(datas);
client.close();
}
//获取列值
private String getCellValue(int cellIndex,XSSFRow xssfRow) {
String cellValue = "";
try {
//如果是字符串列
cellValue = xssfRow.getCell(cellIndex) == null ?
"" : xssfRow.getCell(cellIndex).getStringCellValue();
} catch (Exception e) {
try {
if(HSSFDateUtil.isCellDateFormatted(xssfRow.getCell(cellIndex))) {
//如果是日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
cellValue = sdf.format(xssfRow.getCell(cellIndex).getDateCellValue());// 日期
}else {
//如果是数据列
DecimalFormat decimalFormat = new DecimalFormat("###################.###########");
cellValue = xssfRow.getCell(cellIndex) == null ?
"" : String.valueOf(decimalFormat.format(xssfRow.getCell(cellIndex).getNumericCellValue()));
}
} catch (Exception e2) {
try {
cellValue = xssfRow.getCell(cellIndex) == null ?
"" : xssfRow.getCell(cellIndex).getCellFormula();
} catch (Exception e3) {
cellValue = xssfRow.getCell(cellIndex) == null ?
"" : String.valueOf(xssfRow.getCell(cellIndex).getBooleanCellValue());
}
}
}
return cellValue;
}
}
mongodb:
uri: 139.198.127.54:9017
database: dev0
username: root
password: dataPlatform
maxConnectionIdleTime: 600000
spring:
application:
name: indicators
jpa:
hibernate:
ddl-auto: update
datasource:
url: jdbc:mysql://139.198.127.54:9306/gzcbdev?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
username: test
password: test
hikari:
maximum-pool-size: 3
second:
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://139.198.127.54:9306/dev0?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
username: test
password: test
servlet:
multipart:
max-file-size: 20Mb
max-request-size: 100Mb
session:
store-type: redis
redis:
namespace: dataplatformdev
redis:
host: 139.198.127.54
port: 9379
server:
port: 8667
eureka:
client:
registerWithEureka: true
region: default
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: http://192.168.0.230:8081/eureka/
enabled: false
instance:
prefer-ip-address: true
hostname: 192.168.0.230
security:
permit: true
authUser: root
authPwd: pwd
mybatis:
type-aliases-package: com.keymobile.indicators.model.entity
\ No newline at end of file
spring:
profiles:
active: ${spring.profiles.active:test}
\ No newline at end of file
spring:
application:
name: indicators
profiles:
active: test
cloud:
config:
uri: http://localhost:8082
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.keymobile.indicators.model.mapper.T1Mapper">
<select id="selAll" resultType="com.keymobile.indicators.model.entity.T1">
select * from T1
</select>
</mapper>
\ No newline at end of file
package com.keymobile.indicators;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}
Manifest-Version: 1.0
Implementation-Title: indicators
Implementation-Version: 0.0.1-SNAPSHOT
Built-By: Administrator
Implementation-Vendor-Id: com.keymobile
Build-Jdk: 1.8.0_131
Implementation-URL: https://projects.spring.io/spring-boot/#/spring-bo
ot-starter-parent/indicators
Created-By: Maven Integration for Eclipse
#Generated by Maven Integration for Eclipse
#Mon Apr 13 15:47:04 CST 2020
version=0.0.1-SNAPSHOT
groupId=com.keymobile
m2e.projectName=indicators
m2e.projectLocation=F\:\\coding\\indicators
artifactId=indicators
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.keymobile</groupId>
<artifactId>indicators</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<description>Indicators Demo</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.5.0</version>
</dependency>
<!-- <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<scope>provided</scope>
</dependency> -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- <version>8.0.15</version> -->
</dependency>
<!-- mXparser -->
<dependency>
<groupId>org.mariuszgromada.math</groupId>
<artifactId>MathParser.org-mXparser</artifactId>
<version>4.2.0</version>
</dependency>
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-bom</artifactId>
<version>${spring-security.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<resources>
<resource>
<directory>lib</directory>
<targetPath>BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.yml</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<finalName>indicators</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
mongodb:
uri: 139.198.127.54:9017
database: dev0
username: root
password: dataPlatform
maxConnectionIdleTime: 600000
spring:
application:
name: indicators
jpa:
hibernate:
ddl-auto: update
datasource:
url: jdbc:mysql://139.198.127.54:9306/gzcbdev?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
username: test
password: test
hikari:
maximum-pool-size: 3
second:
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://139.198.127.54:9306/dev0?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
username: test
password: test
servlet:
multipart:
max-file-size: 20Mb
max-request-size: 100Mb
session:
store-type: redis
redis:
namespace: dataplatformdev
redis:
host: 139.198.127.54
port: 9379
server:
port: 8667
eureka:
client:
registerWithEureka: true
region: default
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: http://192.168.0.230:8081/eureka/
enabled: false
instance:
prefer-ip-address: true
hostname: 192.168.0.230
security:
permit: true
authUser: root
authPwd: pwd
mybatis:
type-aliases-package: com.keymobile.indicators.model.entity
\ No newline at end of file
spring:
profiles:
active: ${spring.profiles.active:test}
\ No newline at end of file
spring:
application:
name: indicators
profiles:
active: test
cloud:
config:
uri: http://localhost:8082
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.keymobile.indicators.model.mapper.T1Mapper">
<select id="selAll" resultType="com.keymobile.indicators.model.entity.T1">
select * from T1
</select>
</mapper>
\ No newline at end of file
#Created by Apache Maven 3.6.1
version=0.0.1-SNAPSHOT
groupId=com.keymobile
artifactId=indicators
com\keymobile\indicators\service\T1Service.class
com\keymobile\indicators\service\indicators\DeriveIndicatorsService.class
com\keymobile\indicators\api\indicators\IndicatorsCtrl.class
com\keymobile\indicators\conf\MongoDBConfig.class
com\keymobile\indicators\conf\SecurityConfig.class
com\keymobile\indicators\persistence\indicators\IndicatorsDefRepository.class
com\keymobile\indicators\conf\FeignClientConfig.class
com\keymobile\indicators\service\indicators\IndicatorsExcelService.class
com\keymobile\indicators\api\indicators\DeriveIndicatorsCtrl.class
com\keymobile\indicators\model\indicators\IndicatorsDef.class
com\keymobile\indicators\model\indicators\DeriveIndicators.class
com\keymobile\indicators\persistence\indicators\IndicatorsDimRepository.class
com\keymobile\indicators\persistence\indicators\DeriveIndicatorsRepository.class
com\keymobile\indicators\model\indicators\IndicatorsDim.class
com\keymobile\indicators\IndicatorsApplication.class
com\keymobile\indicators\conf\RedisConfig.class
com\keymobile\indicators\conf\SecurityConfig$SHA1PasswordEncoder.class
com\keymobile\indicators\api\TestCtrl.class
com\keymobile\indicators\model\mapper\T1Mapper.class
com\keymobile\indicators\service\indicators\IndicatorsService.class
com\keymobile\indicators\model\entity\T1.class
com\keymobile\indicators\conf\SecondDatasourceConf.class
F:\coding\indicators\src\main\java\com\keymobile\indicators\api\indicators\DeriveIndicatorsCtrl.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\model\indicators\IndicatorsDim.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\service\indicators\IndicatorsExcelService.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\conf\MongoDBConfig.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\model\mapper\T1Mapper.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\service\indicators\DeriveIndicatorsService.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\service\indicators\IndicatorsService.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\service\T1Service.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\model\indicators\IndicatorsDef.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\persistence\indicators\IndicatorsDimRepository.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\model\indicators\DeriveIndicators.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\api\TestCtrl.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\IndicatorsApplication.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\conf\SecurityConfig.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\conf\RedisConfig.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\conf\SecondDatasourceConf.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\conf\FeignClientConfig.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\model\entity\T1.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\persistence\indicators\DeriveIndicatorsRepository.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\persistence\indicators\IndicatorsDefRepository.java
F:\coding\indicators\src\main\java\com\keymobile\indicators\api\indicators\IndicatorsCtrl.java
F:\coding\indicators\src\test\java\com\keymobile\indicators\AppTest.java
-------------------------------------------------------------------------------
Test set: com.keymobile.indicators.AppTest
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.115 s - in com.keymobile.indicators.AppTest
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment