Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
I
indicators
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhangkb
indicators
Commits
2ff61850
Commit
2ff61850
authored
Apr 17, 2020
by
张祺
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
移除mongodb代码
parent
a66fa4e1
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1445 additions
and
1452 deletions
+1445
-1452
DeriveIndicatorsCtrl.java
...obile/indicators/api/indicators/DeriveIndicatorsCtrl.java
+70
-70
IndicatorsCtrl.java
...m/keymobile/indicators/api/indicators/IndicatorsCtrl.java
+119
-119
MongoDBConfig.java
...ain/java/com/keymobile/indicators/conf/MongoDBConfig.java
+63
-63
DeriveIndicators.java
...ymobile/indicators/model/indicators/DeriveIndicators.java
+119
-119
IndicatorsDef.java
.../keymobile/indicators/model/indicators/IndicatorsDef.java
+127
-127
IndicatorsDim.java
.../keymobile/indicators/model/indicators/IndicatorsDim.java
+119
-119
DeriveIndicatorsRepository.java
...rs/persistence/indicators/DeriveIndicatorsRepository.java
+15
-15
IndicatorsDefRepository.java
...ators/persistence/indicators/IndicatorsDefRepository.java
+13
-13
IndicatorsDimRepository.java
...ators/persistence/indicators/IndicatorsDimRepository.java
+18
-18
DeriveIndicatorsService.java
...ndicators/service/indicators/DeriveIndicatorsService.java
+231
-231
IndicatorsExcelService.java
...indicators/service/indicators/IndicatorsExcelService.java
+152
-152
IndicatorsService.java
...bile/indicators/service/indicators/IndicatorsService.java
+399
-399
application-test.yml
src/main/resources/application-test.yml
+0
-7
No files found.
src/main/java/com/keymobile/indicators/api/indicators/DeriveIndicatorsCtrl.java
View file @
2ff61850
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.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);
//
}
//
}
src/main/java/com/keymobile/indicators/api/indicators/IndicatorsCtrl.java
View file @
2ff61850
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.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);
//
}
//
//
}
src/main/java/com/keymobile/indicators/conf/MongoDBConfig.java
View file @
2ff61850
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 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);
//
}
//
//
}
src/main/java/com/keymobile/indicators/model/indicators/DeriveIndicators.java
View file @
2ff61850
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_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;
//
}
//
}
src/main/java/com/keymobile/indicators/model/indicators/IndicatorsDef.java
View file @
2ff61850
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
;
//添加基础指标编号和公式属性
private
String
indiCode
;
private
String
indiFormula
;
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
;
}
public
String
getIndiCode
()
{
return
indiCode
;
}
public
void
setIndiCode
(
String
indiCode
)
{
this
.
indiCode
=
indiCode
;
}
public
String
getIndiFormula
()
{
return
indiFormula
;
}
public
void
setIndiFormula
(
String
indiFormula
)
{
this
.
indiFormula
=
indiFormula
;
}
}
//
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;
//
//
//添加基础指标编号和公式属性
//
private String indiCode;
//
private String indiFormula;
//
//
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;
//
}
//
public String getIndiCode() {
//
return indiCode;
//
}
//
public void setIndiCode(String indiCode) {
//
this.indiCode = indiCode;
//
}
//
public String getIndiFormula() {
//
return indiFormula;
//
}
//
public void setIndiFormula(String indiFormula) {
//
this.indiFormula = indiFormula;
//
}
//
}
src/main/java/com/keymobile/indicators/model/indicators/IndicatorsDim.java
View file @
2ff61850
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.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;
//
}
//
//
//
}
src/main/java/com/keymobile/indicators/persistence/indicators/DeriveIndicatorsRepository.java
View file @
2ff61850
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.DeriveIndicators;
//
//
public interface DeriveIndicatorsRepository extends MongoRepository<DeriveIndicators,String>{
//
//
//判断原生指标是否关联了衍生指标
//
public List<DeriveIndicators> findByIndiDefIdsLike(String indiDefId);
//
//
public List<DeriveIndicators> findByDerNameLikeOrDerCnNameLike(String name,String cnName);
//
}
src/main/java/com/keymobile/indicators/persistence/indicators/IndicatorsDefRepository.java
View file @
2ff61850
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 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);
//
}
src/main/java/com/keymobile/indicators/persistence/indicators/IndicatorsDimRepository.java
View file @
2ff61850
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.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);
//
}
src/main/java/com/keymobile/indicators/service/indicators/DeriveIndicatorsService.java
View file @
2ff61850
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.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;
//
}
//
}
src/main/java/com/keymobile/indicators/service/indicators/IndicatorsExcelService.java
View file @
2ff61850
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
;
}
}
//
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;
//
}
//
}
src/main/java/com/keymobile/indicators/service/indicators/IndicatorsService.java
View file @
2ff61850
package
com
.
keymobile
.
indicators
.
service
.
indicators
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Optional
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.bson.types.ObjectId
;
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.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
;
import
com.mongodb.BasicDBObject
;
import
com.mongodb.DB
;
import
com.mongodb.DBCollection
;
import
com.mongodb.DBCursor
;
import
com.mongodb.DBObject
;
import
com.mongodb.MongoClient
;
@Service
public
class
IndicatorsService
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
IndicatorsService
.
class
);
@Value
(
"${mongodb.database}"
)
private
String
database
;
@Autowired
private
MongoDBConfig
mongoDbConfig
;
@Autowired
private
IndicatorsDefRepository
indicatorsDefRepo
;
@Autowired
private
IndicatorsDimRepository
indicatorsDimRepo
;
@Autowired
private
IndicatorsExcelService
indiExcelService
;
@Autowired
private
DeriveIndicatorsRepository
derIndicatorsRepo
;
//保存或者修改维度
public
String
saveOrUpdateDim
(
String
indiDefId
,
List
<
IndicatorsDim
>
indiDims
,
String
operator
,
String
isUpdate
)
throws
Exception
{
Date
time
=
new
Date
();
StringBuilder
message
=
new
StringBuilder
(
""
);
//新增
if
(
"false"
.
equals
(
isUpdate
))
{
//保存指标维度
for
(
int
i
=
0
;
i
<
indiDims
.
size
();
i
++)
{
indiDims
.
get
(
i
).
setCreateTime
(
time
);
indiDims
.
get
(
i
).
setCreator
(
operator
);
indiDims
.
get
(
i
).
setUpdateTime
(
time
);
indiDims
.
get
(
i
).
setUpdator
(
operator
);
indiDims
.
get
(
i
).
setDimName
(
"dim"
+
i
);
indiDims
.
get
(
i
).
setSort
(
i
);
indiDims
.
get
(
i
).
setIndiDefId
(
indiDefId
);
}
if
(!
indiDims
.
isEmpty
())
{
indicatorsDimRepo
.
saveAll
(
indiDims
);
}
}
else
{
//TODO:考虑维度被删除或者添加新的维度情况
Iterator
<
IndicatorsDim
>
it
=
indiDims
.
iterator
();
while
(
it
.
hasNext
())
{
IndicatorsDim
updateDim
=
it
.
next
();
//如果是新增维度
if
(
StringUtils
.
isBlank
(
updateDim
.
getId
()))
{
//判断是否同名
Optional
<
IndicatorsDim
>
hasSameDim
=
indicatorsDimRepo
.
findByIndiDefIdAndDimCnName
(
indiDefId
,
updateDim
.
getDimCnName
());
if
(
hasSameDim
.
isPresent
())
{
message
.
append
(
"该指标存在同名维度:"
+
updateDim
.
getDimCnName
());
it
.
remove
();
continue
;
}
//获取基础指标关联代的维度
List
<
IndicatorsDim
>
dbIndiDims
=
indicatorsDimRepo
.
findByIndiDefId
(
indiDefId
);
updateDim
.
setDimName
(
"dim"
+
dbIndiDims
.
size
());
updateDim
.
setSort
(
dbIndiDims
.
size
());
updateDim
.
setCreateTime
(
time
);
updateDim
.
setCreator
(
operator
);
updateDim
.
setUpdateTime
(
time
);
updateDim
.
setUpdator
(
operator
);
}
else
{
Optional
<
IndicatorsDim
>
dbIndiDim
=
indicatorsDimRepo
.
findById
(
updateDim
.
getId
());
if
(!
dbIndiDim
.
isPresent
())
{
logger
.
info
(
"not exist the dimension where id:"
+
updateDim
.
getId
());
message
.
append
(
"不存在id:"
+
updateDim
.
getId
()+
" 的维度;"
);
it
.
remove
();
}
else
{
updateDim
.
setUpdateTime
(
time
);
updateDim
.
setUpdator
(
operator
);
if
(
dbIndiDim
.
get
().
getDimMapping
()!=-
1
)
{
updateDim
.
setDimMapping
(
dbIndiDim
.
get
().
getDimMapping
());
}
}
}
updateDim
.
setIndiDefId
(
indiDefId
);
}
if
(!
indiDims
.
isEmpty
())
{
indicatorsDimRepo
.
saveAll
(
indiDims
);
}
}
return
message
.
toString
();
}
//判断原生指标能否被修改
public
boolean
canBeUpdate
(
String
indiDefId
)
throws
Exception
{
boolean
canUpdate
=
true
;
MongoClient
client
=
mongoDbConfig
.
mongoClient
();
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
DB
dataBase
=
client
.
getDB
(
database
);
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
DBCollection
collection
=
dataBase
.
getCollection
(
"indi_data"
);
DBObject
query
=
new
BasicDBObject
();
query
.
put
(
"inId"
,
indiDefId
);
try
(
DBCursor
cursor
=
collection
.
find
(
query
))
{
while
(
cursor
.
hasNext
())
{
canUpdate
=
false
;
break
;
}
}
client
.
close
();
return
canUpdate
;
}
//保存或者修改指标定义
public
String
saveOrUpdateIndiDef
(
IndicatorsDef
indiDef
,
String
operator
)
throws
Exception
{
Date
time
=
new
Date
();
//新增
if
(
StringUtils
.
isBlank
(
indiDef
.
getId
()))
{
//保存指标定义
indiDef
.
setCreateTime
(
time
);
indiDef
.
setCreator
(
operator
);
indiDef
.
setUpdateTime
(
time
);
indiDef
.
setUpdator
(
operator
);
indiDef
.
setStatus
(
"0"
);
indiDef
=
indicatorsDefRepo
.
save
(
indiDef
);
}
else
{
//暂时不修改指标和维度的映射
indiDef
.
setUpdateTime
(
time
);
indiDef
.
setUpdator
(
operator
);
//根据指标定义id获取指标定义详情
Optional
<
IndicatorsDef
>
dbIndiDef
=
indicatorsDefRepo
.
findById
(
indiDef
.
getId
());
if
(
dbIndiDef
.
isPresent
())
{
if
(
dbIndiDef
.
get
().
getValueMapping
()!=-
1
)
{
indiDef
.
setValueMapping
(
dbIndiDef
.
get
().
getValueMapping
());
}
indiDef
=
indicatorsDefRepo
.
save
(
indiDef
);
}
else
{
return
"not exist the indicators where id:"
+
indiDef
.
getId
();
}
}
return
indiDef
.
getId
();
}
//删除指标
public
String
delete
(
String
indicatorsId
)
throws
Exception
{
//判断原生指标是否关联了衍生指标
List
<
DeriveIndicators
>
deriveIndiList
=
derIndicatorsRepo
.
findByIndiDefIdsLike
(
indicatorsId
);
if
(!
deriveIndiList
.
isEmpty
())
{
return
"该指标已经关联衍生指标,无法删除"
;
}
//删除指标定义
indicatorsDefRepo
.
deleteById
(
indicatorsId
);
//删除维度
indicatorsDimRepo
.
deleteByIndiDefId
(
indicatorsId
);
//删除对应的指标数据
MongoClient
client
=
mongoDbConfig
.
mongoClient
();
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
DB
dataBase
=
client
.
getDB
(
database
);
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
DBCollection
collection
=
dataBase
.
getCollection
(
"indi_data"
);
DBObject
removeCon
=
new
BasicDBObject
();
removeCon
.
put
(
"inId"
,
indicatorsId
);
collection
.
remove
(
removeCon
);
return
"删除成功"
;
}
//获取指标列表
public
List
<
IndicatorsDef
>
getIndicatorsDefList
(
String
keyword
)
throws
Exception
{
if
(
StringUtils
.
isBlank
(
keyword
)){
return
indicatorsDefRepo
.
findByStatus
(
"0"
);
}
else
{
return
indicatorsDefRepo
.
findByIndiNameLikeOrIndiCnNameLikeAndStatus
(
keyword
,
keyword
,
"0"
);
}
}
//获取指标详情
public
Map
<
String
,
Object
>
getIndicatorsDefDetail
(
String
indiDefId
)
throws
Exception
{
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
result
.
put
(
"def"
,
""
);
result
.
put
(
"dimList"
,
new
ArrayList
<>());
//根据指标定义id获取指标定义详情
Optional
<
IndicatorsDef
>
dbIndiDef
=
indicatorsDefRepo
.
findById
(
indiDefId
);
if
(
dbIndiDef
.
isPresent
())
{
result
.
put
(
"def"
,
dbIndiDef
.
get
());
//根据定义id获取维度
List
<
IndicatorsDim
>
dimList
=
indicatorsDimRepo
.
findByIndiDefId
(
indiDefId
);
if
(!
dimList
.
isEmpty
())
{
result
.
put
(
"dimList"
,
dimList
);
}
return
result
;
}
logger
.
info
(
"not exist indicatorsDef where id:"
+
indiDefId
);
return
null
;
}
//根据上传excel获取表头数据
@SuppressWarnings
(
"unchecked"
)
public
List
<
Map
<
String
,
Object
>>
getUploadExcelHead
(
XSSFWorkbook
xssfWorkbook
)
throws
Exception
{
return
(
List
<
Map
<
String
,
Object
>>)
indiExcelService
.
getUploadExcelHead
(
xssfWorkbook
).
get
(
"cellDetailList"
);
}
//根据上传的excel文件和指标id判断该指标是否对应这个上传文件
@SuppressWarnings
(
"unchecked"
)
public
String
isCorrespondence
(
String
indiDefId
,
XSSFWorkbook
xssfWorkbook
)
throws
Exception
{
StringBuilder
message
=
new
StringBuilder
();
//获取excel表头list
List
<
String
>
excelHead
=
(
List
<
String
>)
indiExcelService
.
getUploadExcelHead
(
xssfWorkbook
)
.
get
(
"cellList"
);
//查询指标对应的值映射名
Optional
<
IndicatorsDef
>
dbIndiDef
=
indicatorsDefRepo
.
findById
(
indiDefId
);
if
(
dbIndiDef
.
isPresent
())
{
String
valueNameMapping
=
dbIndiDef
.
get
().
getValueMappingName
();
if
(
StringUtils
.
isBlank
(
valueNameMapping
))
{
message
.
append
(
"指标:"
+
dbIndiDef
.
get
().
getIndiName
()+
" 没有配置值映射;"
);
}
else
{
if
(!
excelHead
.
contains
(
valueNameMapping
))
{
message
.
append
(
"上传文件指标值映射名称:"
+
valueNameMapping
+
" 在excel不存在;"
);
}
}
//根据指标定义id获取指标维度
List
<
IndicatorsDim
>
dimList
=
indicatorsDimRepo
.
findByIndiDefId
(
indiDefId
);
for
(
IndicatorsDim
dim
:
dimList
)
{
if
(
StringUtils
.
isBlank
(
dim
.
getDimMappingName
()))
{
message
.
append
(
"指标:"
+
dbIndiDef
.
get
().
getIndiName
()+
" 的维度:"
+
dim
.
getDimCnName
()+
" 没有配置维度映射;"
);
}
else
{
if
(!
excelHead
.
contains
(
dim
.
getDimMappingName
()))
{
message
.
append
(
"上传文件指标维度映射名称:"
+
dim
.
getDimMappingName
()+
" 在excel不存在;"
);
}
}
}
}
else
{
message
.
append
(
"不存在id:"
+
indiDefId
+
" 的指标定义;"
);
}
if
(
StringUtils
.
isBlank
(
message
.
toString
()))
{
message
.
append
(
"true"
);
}
return
message
.
toString
();
}
//导入指标值
public
String
importIndicatorsData
(
String
indiDefId
,
XSSFWorkbook
xssfWorkbook
)
throws
Exception
{
//判断上传文件和指标映射字段是否符合
String
message
=
this
.
isCorrespondence
(
indiDefId
,
xssfWorkbook
);
if
(
"true"
.
equals
(
message
))
{
Optional
<
IndicatorsDef
>
indiDef
=
indicatorsDefRepo
.
findById
(
indiDefId
);
if
(
indiDef
.
isPresent
())
{
List
<
IndicatorsDim
>
dimList
=
indicatorsDimRepo
.
findByIndiDefId
(
indiDefId
);
return
indiExcelService
.
importIndicatorsData
(
indiDef
.
get
(),
dimList
,
xssfWorkbook
);
}
}
return
message
;
}
//根据指标定义id和维度值查询指标值
public
Map
<
String
,
Object
>
queryIndicatorsValue
(
String
indiDefId
,
Map
<
String
,
Object
>
dimValue
,
boolean
isDimCnName
)
throws
Exception
{
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
List
<
DBObject
>
resultList
=
new
ArrayList
<>();
result
.
put
(
"count"
,
0
);
result
.
put
(
"resultList"
,
resultList
);
MongoClient
client
=
mongoDbConfig
.
mongoClient
();
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
DB
dataBase
=
client
.
getDB
(
database
);
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
DBCollection
collection
=
dataBase
.
getCollection
(
"indi_data"
);
DBObject
query
=
new
BasicDBObject
();
query
.
put
(
"inId"
,
indiDefId
);
//query.put("status", "0");//有效值
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
dimValue
.
entrySet
())
{
//如果map中是key是中文名
if
(
isDimCnName
)
{
Optional
<
IndicatorsDim
>
dimOp
=
indicatorsDimRepo
.
findByIndiDefIdAndDimMappingName
(
indiDefId
,
entry
.
getKey
());
query
.
put
(
dimOp
.
get
().
getDimName
(),
entry
.
getValue
());
}
else
{
query
.
put
(
entry
.
getKey
(),
entry
.
getValue
());
}
}
int
valueCount
=
0
;
try
(
DBCursor
cursor
=
collection
.
find
(
query
))
{
while
(
cursor
.
hasNext
())
{
DBObject
dbo
=
cursor
.
next
();
resultList
.
add
(
dbo
);
valueCount
+=
Integer
.
parseInt
(
dbo
.
get
(
"value"
).
toString
());
}
}
client
.
close
();
result
.
put
(
"count"
,
valueCount
);
result
.
put
(
"resultList"
,
resultList
);
return
result
;
}
//审批指标值
public
void
applyIndicatorsValue
(
List
<
String
>
indiValueId
)
throws
Exception
{
MongoClient
client
=
mongoDbConfig
.
mongoClient
();
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
DB
dataBase
=
client
.
getDB
(
database
);
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
DBCollection
collection
=
dataBase
.
getCollection
(
"indi_data"
);
DBObject
query
=
new
BasicDBObject
();
for
(
String
id
:
indiValueId
)
{
query
.
put
(
"_id"
,
new
ObjectId
(
id
));
DBObject
queryResult
=
collection
.
findOne
(
query
);
queryResult
.
put
(
"status"
,
"0"
);
collection
.
findAndModify
(
query
,
queryResult
);
}
client
.
close
();
}
//获取未审批的指标值
@SuppressWarnings
(
"unchecked"
)
public
Map
<
String
,
Object
>
getUnApplyIndiValueList
()
throws
Exception
{
Map
<
String
,
Object
>
result
=
new
HashMap
<>();
MongoClient
client
=
mongoDbConfig
.
mongoClient
();
List
<
Map
<
String
,
Object
>>
resultList
=
new
ArrayList
<>();
result
.
put
(
"total"
,
0
);
result
.
put
(
"resultList"
,
resultList
);
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
DB
dataBase
=
client
.
getDB
(
database
);
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
DBCollection
collection
=
dataBase
.
getCollection
(
"indi_data"
);
DBObject
query
=
new
BasicDBObject
();
query
.
put
(
"status"
,
"1"
);
List
<
String
>
distinctIndiDefIds
=
collection
.
distinct
(
"inId"
,
query
);
for
(
String
indiDefId
:
distinctIndiDefIds
)
{
Map
<
String
,
Object
>
unApplyIndiValueMap
=
new
HashMap
<>();
//根据原始指标id获取原始指标详细信息
Map
<
String
,
Object
>
indiDefDetail
=
this
.
getIndicatorsDefDetail
(
indiDefId
);
List
<
DBObject
>
unApplyValueList
=
new
ArrayList
<>();
DBObject
unApplyQuery
=
new
BasicDBObject
();
unApplyQuery
.
put
(
"status"
,
"1"
);
unApplyQuery
.
put
(
"inId"
,
indiDefId
);
try
(
DBCursor
cursor
=
collection
.
find
(
unApplyQuery
))
{
while
(
cursor
.
hasNext
())
{
DBObject
dbo
=
cursor
.
next
();
ObjectId
_id
=
(
ObjectId
)
dbo
.
get
(
"_id"
);
dbo
.
put
(
"_id"
,
_id
.
toHexString
());
unApplyValueList
.
add
(
dbo
);
}
}
unApplyIndiValueMap
.
put
(
"indiDef"
,
indiDefDetail
);
unApplyIndiValueMap
.
put
(
"unApplyList"
,
unApplyValueList
);
resultList
.
add
(
unApplyIndiValueMap
);
}
client
.
close
();
result
.
put
(
"total"
,
resultList
.
size
());
result
.
put
(
"resultList"
,
resultList
);
return
result
;
}
}
//
package com.keymobile.indicators.service.indicators;
//
//
import java.util.ArrayList;
//
import java.util.Date;
//
import java.util.HashMap;
//
import java.util.Iterator;
//
import java.util.List;
//
import java.util.Map;
//
import java.util.Optional;
//
//
import org.apache.commons.lang.StringUtils;
//
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//
import org.bson.types.ObjectId;
//
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.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;
//
import com.mongodb.BasicDBObject;
//
import com.mongodb.DB;
//
import com.mongodb.DBCollection;
//
import com.mongodb.DBCursor;
//
import com.mongodb.DBObject;
//
import com.mongodb.MongoClient;
//
//
@Service
//
public class IndicatorsService {
//
//
private Logger logger = LoggerFactory.getLogger(IndicatorsService.class);
//
//
@Value("${mongodb.database}")
//
private String database;
//
//
@Autowired
//
private MongoDBConfig mongoDbConfig;
//
@Autowired
//
private IndicatorsDefRepository indicatorsDefRepo;
//
@Autowired
//
private IndicatorsDimRepository indicatorsDimRepo;
//
@Autowired
//
private IndicatorsExcelService indiExcelService;
//
@Autowired
//
private DeriveIndicatorsRepository derIndicatorsRepo;
//
//
//保存或者修改维度
// public String saveOrUpdateDim(String indiDefId,List<IndicatorsDim> indiDims,
//
String operator, String isUpdate) throws Exception{
//
Date time = new Date();
//
StringBuilder message = new StringBuilder("");
//
//新增
//
if("false".equals(isUpdate)) {
//
//保存指标维度
//
for(int i=0;i<indiDims.size();i++) {
//
indiDims.get(i).setCreateTime(time);
//
indiDims.get(i).setCreator(operator);
//
indiDims.get(i).setUpdateTime(time);
//
indiDims.get(i).setUpdator(operator);
//
indiDims.get(i).setDimName("dim"+i);
//
indiDims.get(i).setSort(i);
//
indiDims.get(i).setIndiDefId(indiDefId);
//
}
//
if(!indiDims.isEmpty()) {
//
indicatorsDimRepo.saveAll(indiDims);
//
}
//
}else {
//
//TODO:考虑维度被删除或者添加新的维度情况
//
Iterator<IndicatorsDim> it=indiDims.iterator();
//
while(it.hasNext()) {
//
IndicatorsDim updateDim = it.next();
//
//如果是新增维度
//
if(StringUtils.isBlank(updateDim.getId())) {
//
//判断是否同名
//
Optional<IndicatorsDim> hasSameDim = indicatorsDimRepo.findByIndiDefIdAndDimCnName(
//
indiDefId, updateDim.getDimCnName());
//
if(hasSameDim.isPresent()) {
//
message.append("该指标存在同名维度:"+updateDim.getDimCnName());
//
it.remove();
//
continue;
//
}
//
//
//获取基础指标关联代的维度
//
List<IndicatorsDim> dbIndiDims = indicatorsDimRepo.findByIndiDefId(indiDefId);
//
//
updateDim.setDimName("dim"+dbIndiDims.size());
//
updateDim.setSort(dbIndiDims.size());
//
updateDim.setCreateTime(time);
//
updateDim.setCreator(operator);
//
updateDim.setUpdateTime(time);
//
updateDim.setUpdator(operator);
//
}else {
//
Optional<IndicatorsDim> dbIndiDim = indicatorsDimRepo.findById(updateDim.getId());
//
if(!dbIndiDim.isPresent()) {
//
logger.info("not exist the dimension where id:"+updateDim.getId());
//
message.append("不存在id:"+updateDim.getId()+" 的维度;");
//
it.remove();
//
}else {
//
updateDim.setUpdateTime(time);
//
updateDim.setUpdator(operator);
//
if(dbIndiDim.get().getDimMapping()!=-1) {
//
updateDim.setDimMapping(dbIndiDim.get().getDimMapping());
//
}
//
}
//
}
//
updateDim.setIndiDefId(indiDefId);
//
}
//
if(!indiDims.isEmpty()) {
//
indicatorsDimRepo.saveAll(indiDims);
//
}
//
}
//
return message.toString();
//
}
//
//
//判断原生指标能否被修改
//
public boolean canBeUpdate(String indiDefId) throws Exception{
//
boolean canUpdate = true;
//
//
MongoClient client = mongoDbConfig.mongoClient();
//
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
//
DB dataBase = client.getDB(database);
//
//
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
//
DBCollection collection = dataBase.getCollection("indi_data");
//
//
DBObject query = new BasicDBObject();
//
query.put("inId", indiDefId);
//
try (DBCursor cursor = collection.find(query)) {
//
while (cursor.hasNext()) {
//
canUpdate = false;
//
break;
//
}
//
}
//
client.close();
//
return canUpdate;
//
}
//
//
//保存或者修改指标定义
//
public String saveOrUpdateIndiDef(IndicatorsDef indiDef,String operator)throws Exception{
//
Date time = new Date();
//
//新增
//
if(StringUtils.isBlank(indiDef.getId())) {
//
//保存指标定义
//
indiDef.setCreateTime(time);
//
indiDef.setCreator(operator);
//
indiDef.setUpdateTime(time);
//
indiDef.setUpdator(operator);
//
indiDef.setStatus("0");
//
indiDef = indicatorsDefRepo.save(indiDef);
//
}else {
//
//暂时不修改指标和维度的映射
//
indiDef.setUpdateTime(time);
//
indiDef.setUpdator(operator);
//
//根据指标定义id获取指标定义详情
//
Optional<IndicatorsDef> dbIndiDef = indicatorsDefRepo.findById(indiDef.getId());
//
if(dbIndiDef.isPresent()) {
//
if(dbIndiDef.get().getValueMapping()!=-1) {
//
indiDef.setValueMapping(dbIndiDef.get().getValueMapping());
//
}
//
indiDef = indicatorsDefRepo.save(indiDef);
//
}else {
//
return "not exist the indicators where id:"+indiDef.getId();
//
}
//
}
//
return indiDef.getId();
//
}
//
//
//删除指标
//
public String delete(String indicatorsId)throws Exception {
//
//判断原生指标是否关联了衍生指标
//
List<DeriveIndicators> deriveIndiList = derIndicatorsRepo.findByIndiDefIdsLike(indicatorsId);
//
if(!deriveIndiList.isEmpty()) {
//
return "该指标已经关联衍生指标,无法删除";
//
}
//
//删除指标定义
//
indicatorsDefRepo.deleteById(indicatorsId);
//
//删除维度
//
indicatorsDimRepo.deleteByIndiDefId(indicatorsId);
//
//
//删除对应的指标数据
//
MongoClient client = mongoDbConfig.mongoClient();
//
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
//
DB dataBase = client.getDB(database);
//
//
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
//
DBCollection collection = dataBase.getCollection("indi_data");
//
//
DBObject removeCon = new BasicDBObject();
//
removeCon.put("inId", indicatorsId);
//
//
collection.remove(removeCon);
//
//
return "删除成功";
//
}
//
//
//获取指标列表
//
public List<IndicatorsDef> getIndicatorsDefList(String keyword)throws Exception{
//
if(StringUtils.isBlank(keyword)){
//
return indicatorsDefRepo.findByStatus("0");
//
}else {
//
return indicatorsDefRepo.findByIndiNameLikeOrIndiCnNameLikeAndStatus(keyword, keyword,"0");
//
}
//
}
//
//
//获取指标详情
//
public Map<String,Object> getIndicatorsDefDetail(String indiDefId)throws Exception{
//
Map<String,Object> result = new HashMap<>();
//
result.put("def", "");
//
result.put("dimList", new ArrayList<>());
//
//根据指标定义id获取指标定义详情
//
Optional<IndicatorsDef> dbIndiDef = indicatorsDefRepo.findById(indiDefId);
//
if(dbIndiDef.isPresent()) {
//
result.put("def", dbIndiDef.get());
//
//根据定义id获取维度
//
List<IndicatorsDim> dimList = indicatorsDimRepo.findByIndiDefId(indiDefId);
//
if(!dimList.isEmpty()) {
//
result.put("dimList",dimList);
//
}
//
return result;
//
}
//
logger.info("not exist indicatorsDef where id:"+indiDefId);
//
return null;
//
}
//
//
//根据上传excel获取表头数据
//
@SuppressWarnings("unchecked")
//
public List<Map<String,Object>> getUploadExcelHead(XSSFWorkbook xssfWorkbook)throws Exception{
//
return (List<Map<String,Object>>)indiExcelService.getUploadExcelHead(xssfWorkbook).get("cellDetailList");
//
}
//
//
//根据上传的excel文件和指标id判断该指标是否对应这个上传文件
//
@SuppressWarnings("unchecked")
//
public String isCorrespondence(String indiDefId,XSSFWorkbook xssfWorkbook)throws Exception {
//
StringBuilder message = new StringBuilder();
//
//
//获取excel表头list
//
List<String> excelHead = (List<String>)indiExcelService.getUploadExcelHead(xssfWorkbook)
//
.get("cellList");
//
//
//查询指标对应的值映射名
//
Optional<IndicatorsDef> dbIndiDef = indicatorsDefRepo.findById(indiDefId);
//
if(dbIndiDef.isPresent()) {
//
String valueNameMapping = dbIndiDef.get().getValueMappingName();
//
if(StringUtils.isBlank(valueNameMapping)) {
//
message.append("指标:"+dbIndiDef.get().getIndiName()+" 没有配置值映射;");
//
}else {
//
if(!excelHead.contains(valueNameMapping)) {
//
message.append("上传文件指标值映射名称:"+valueNameMapping+" 在excel不存在;");
//
}
//
}
//
//根据指标定义id获取指标维度
//
List<IndicatorsDim> dimList = indicatorsDimRepo.findByIndiDefId(indiDefId);
//
for(IndicatorsDim dim : dimList) {
//
if(StringUtils.isBlank(dim.getDimMappingName())) {
//
message.append("指标:"+dbIndiDef.get().getIndiName()+" 的维度:"+
//
dim.getDimCnName()+" 没有配置维度映射;");
//
}else {
//
if(!excelHead.contains(dim.getDimMappingName())) {
//
message.append("上传文件指标维度映射名称:"+dim.getDimMappingName()+" 在excel不存在;");
//
}
//
}
//
}
//
}else {
//
message.append("不存在id:"+indiDefId+" 的指标定义;");
//
}
//
if(StringUtils.isBlank(message.toString())) {
//
message.append("true");
//
}
//
return message.toString();
//
}
//
//
//导入指标值
//
public String importIndicatorsData(String indiDefId,XSSFWorkbook xssfWorkbook)throws Exception {
//
//判断上传文件和指标映射字段是否符合
//
String message = this.isCorrespondence(indiDefId, xssfWorkbook);
//
if("true".equals(message)) {
//
Optional<IndicatorsDef> indiDef = indicatorsDefRepo.findById(indiDefId);
//
if(indiDef.isPresent()) {
//
List<IndicatorsDim> dimList = indicatorsDimRepo.findByIndiDefId(indiDefId);
//
return indiExcelService.importIndicatorsData(indiDef.get(), dimList, xssfWorkbook);
//
}
//
}
//
return message;
//
}
//
//
//根据指标定义id和维度值查询指标值
//
public Map<String,Object> queryIndicatorsValue(String indiDefId,
//
Map<String,Object> dimValue, boolean isDimCnName)throws Exception {
//
Map<String,Object> result = new HashMap<>();
//
List<DBObject> resultList = new ArrayList<>();
//
result.put("count", 0);
//
result.put("resultList", resultList);
//
//
MongoClient client = mongoDbConfig.mongoClient();
//
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
//
DB dataBase = client.getDB(database);
//
//
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
//
DBCollection collection = dataBase.getCollection("indi_data");
//
//
DBObject query = new BasicDBObject();
//
query.put("inId", indiDefId);
//
//query.put("status", "0");//有效值
//
for(Map.Entry<String, Object> entry : dimValue.entrySet()) {
//
//如果map中是key是中文名
//
if(isDimCnName) {
//
Optional<IndicatorsDim> dimOp = indicatorsDimRepo
//
.findByIndiDefIdAndDimMappingName(indiDefId, entry.getKey());
//
query.put(dimOp.get().getDimName(),entry.getValue());
//
}else {
//
query.put(entry.getKey(),entry.getValue());
//
}
//
}
//
//
int valueCount = 0;
//
try (DBCursor cursor = collection.find(query)) {
//
while (cursor.hasNext()) {
//
DBObject dbo = cursor.next();
//
resultList.add(dbo);
//
valueCount += Integer.parseInt(dbo.get("value").toString());
//
}
//
}
//
client.close();
//
result.put("count", valueCount);
//
result.put("resultList", resultList);
//
return result;
//
}
//
//
//审批指标值
//
public void applyIndicatorsValue(List<String> indiValueId) throws Exception{
//
MongoClient client = mongoDbConfig.mongoClient();
//
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
//
DB dataBase = client.getDB(database);
//
//
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
//
DBCollection collection = dataBase.getCollection("indi_data");
//
//
DBObject query = new BasicDBObject();
//
for(String id : indiValueId) {
//
query.put("_id", new ObjectId(id));
//
DBObject queryResult = collection.findOne(query);
//
//
queryResult.put("status", "0");
//
collection.findAndModify(query, queryResult);
//
}
//
client.close();
//
}
//
//
//获取未审批的指标值
//
@SuppressWarnings("unchecked")
//
public Map<String,Object> getUnApplyIndiValueList() throws Exception{
//
Map<String,Object> result = new HashMap<>();
//
MongoClient client = mongoDbConfig.mongoClient();
//
//
List<Map<String,Object>> resultList = new ArrayList<>();
//
result.put("total", 0);
//
result.put("resultList", resultList);
//
//
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
//
DB dataBase = client.getDB(database);
//
//
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
//
DBCollection collection = dataBase.getCollection("indi_data");
//
DBObject query = new BasicDBObject();
//
query.put("status", "1");
//
List<String> distinctIndiDefIds = collection.distinct("inId",query);
//
for(String indiDefId : distinctIndiDefIds) {
//
Map<String,Object> unApplyIndiValueMap = new HashMap<>();
//
//根据原始指标id获取原始指标详细信息
//
Map<String,Object> indiDefDetail = this.getIndicatorsDefDetail(indiDefId);
//
List<DBObject> unApplyValueList = new ArrayList<>();
//
//
DBObject unApplyQuery = new BasicDBObject();
//
unApplyQuery.put("status", "1");
//
unApplyQuery.put("inId", indiDefId);
//
try (DBCursor cursor = collection.find(unApplyQuery)) {
//
while (cursor.hasNext()) {
//
DBObject dbo = cursor.next();
//
ObjectId _id = (ObjectId) dbo.get("_id");
//
dbo.put("_id", _id.toHexString());
//
unApplyValueList.add(dbo);
//
}
//
}
//
unApplyIndiValueMap.put("indiDef",indiDefDetail);
//
unApplyIndiValueMap.put("unApplyList",unApplyValueList);
//
resultList.add(unApplyIndiValueMap);
//
}
//
client.close();
//
result.put("total", resultList.size());
//
result.put("resultList", resultList);
//
return result;
//
}
//
}
src/main/resources/application-test.yml
View file @
2ff61850
mongodb
:
uri
:
139.198.127.54:9017
database
:
dev0
username
:
root
password
:
dataPlatform
maxConnectionIdleTime
:
600000
spring
:
application
:
name
:
indicators
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment