Commit 5b3df9e0 authored by eddie.woo's avatar eddie.woo

merge

parents c4501047 fd4a320a
package pwc.taxtech.atms.dto.vatdto; package pwc.taxtech.atms.dto.vatdto;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Select;
import pwc.taxtech.atms.common.util.MyAsserts; import pwc.taxtech.atms.common.util.MyAsserts;
import pwc.taxtech.atms.entity.Project; import pwc.taxtech.atms.entity.Project;
import pwc.taxtech.atms.entity.Template; import pwc.taxtech.atms.entity.Template;
...@@ -27,9 +34,8 @@ public class WrapPeriodJobDto { ...@@ -27,9 +34,8 @@ public class WrapPeriodJobDto {
job.setProjectId(projectId); job.setProjectId(projectId);
job.setPeriod(period); job.setPeriod(period);
job.setId(UUID.randomUUID().toString()); job.setId(UUID.randomUUID().toString());
job.setStatus(STATUS_BEGIN);
job.setCurrentStep(STEP_UPDATE_CONFIG); job.setCurrentStep(STEP_UPDATE_CONFIG);
setStatus(job,STEP_UPDATE_CONFIG,STATUS_BEGIN);
StringBuilder builder = new StringBuilder(STEP_UPDATE_CONFIG); StringBuilder builder = new StringBuilder(STEP_UPDATE_CONFIG);
templates.forEach(m -> { templates.forEach(m -> {
builder.append(",").append(m.getCode()); builder.append(",").append(m.getCode());
...@@ -38,4 +44,53 @@ public class WrapPeriodJobDto { ...@@ -38,4 +44,53 @@ public class WrapPeriodJobDto {
job.setStepsCode(builder.toString()); job.setStepsCode(builder.toString());
return job; return job;
} }
@Getter
@Setter
public static class Task {
String code;
String status;
}
public static List<Task> fromJson(String taskJson) {
return JSON.parseObject(taskJson, new TypeReference<List<Task>>() {});
}
public static String toJson(List<Task> tasks) {
return JSON.toJSONString(tasks);
}
public static void setStatus(PeriodJob periodJob, String code, String status) {
List<Task> list;
if (StringUtils.isBlank(periodJob.getStatus())) {
list = new ArrayList<>();
} else {
list = fromJson(periodJob.getStatus());
}
Task t = new Task();
t.code = code;
t.status = status;
boolean contains = false;
for (Task m : list) {
if (m.code.equals(t.code)) {
m.status = status;
contains = true;
break;
}
}
if(!contains)list.add(t);
periodJob.setStatus(toJson(list));
}
public static void setStatus(PeriodJob periodJob, String status) {
List<Task> list;
if (StringUtils.isBlank(periodJob.getStatus())) {
list = new ArrayList<>();
} else {
list = fromJson(periodJob.getStatus());
}
list.get(list.size()-1).status=status;
periodJob.setStatus(toJson(list));
}
} }
...@@ -44,6 +44,7 @@ import java.util.stream.Collectors; ...@@ -44,6 +44,7 @@ import java.util.stream.Collectors;
import static pwc.taxtech.atms.common.util.SpringContextUtil.reportMapper; import static pwc.taxtech.atms.common.util.SpringContextUtil.reportMapper;
import static pwc.taxtech.atms.constant.Constant.EMPTY; import static pwc.taxtech.atms.constant.Constant.EMPTY;
import static pwc.taxtech.atms.dto.vatdto.WrapPeriodJobDto.*;
@Component @Component
public class ReportGeneratorImpl { public class ReportGeneratorImpl {
...@@ -86,320 +87,312 @@ public class ReportGeneratorImpl { ...@@ -86,320 +87,312 @@ public class ReportGeneratorImpl {
return periodResources; return periodResources;
} }
@Transactional
public void updateWorkbookCaclsValueToDb(String projectId, Integer period, Workbook workbook, PeriodResources resources, public void updateWorkbookCaclsValueToDb(String projectId, Integer period, Workbook workbook, PeriodResources resources,
Boolean isMergeMunual, PeriodJob job) { Boolean isMergeMunual, PeriodJob job) {
for (int i = 0; i < workbook.getNumberOfSheets(); i++) { for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
Sheet sheet = workbook.getSheetAt(i); Sheet sheet = workbook.getSheetAt(i);
String code = sheet.getSheetName(); String code = sheet.getSheetName();
logger.info("-------------------------------------Begin Job [{}]------------------------------------------------------",code); logger.info("-------------------------------------Begin Job [{}]------------------------------------------------------", code);
job.setCurrentStep(code); setStatus(job,code,STATUS_BEGIN);
periodJobMapper.updateByPrimaryKey(job);
try { Optional<PeriodTemplate> periodTemplate = resources.getPeriodTemplates().stream()
Optional<PeriodTemplate> periodTemplate = resources.getPeriodTemplates().stream() .filter(a -> a.getCode().equals(code))
.filter(a -> a.getCode().equals(code)) .findFirst();
.findFirst();
Long templateId; Long templateId;
if (periodTemplate.isPresent()) { if (periodTemplate.isPresent()) {
templateId = periodTemplate.get().getTemplateId(); templateId = periodTemplate.get().getTemplateId();
} else { } else {
templateId = 0L; templateId = 0L;
} }
if (templateId > 0) { if (templateId > 0) {
PeriodReport report = new PeriodReport(); PeriodReport report = new PeriodReport();
Long reportId = distributedIdService.nextId(); Long reportId = distributedIdService.nextId();
report.setId(reportId); report.setId(reportId);
report.setTemplateId(templateId); report.setTemplateId(templateId);
report.setPeriod(period); report.setPeriod(period);
report.setProjectId(projectId); report.setProjectId(projectId);
report.setCreateBy("Admin"); report.setCreateBy("Admin");
report.setCreateTime(new Date()); report.setCreateTime(new Date());
report.setUpdateBy("Admin"); report.setUpdateBy("Admin");
report.setUpdateTime(new Date()); report.setUpdateTime(new Date());
report.setProjectId(projectId); report.setProjectId(projectId);
reportMapper.insertSelective(report); reportMapper.insertSelective(report);
List<PeriodCellTemplateConfig> periodCellTemplateConfigs = resources.getPeriodCellTemplateConfigs().stream()
.filter(a -> a.getReportTemplateId().equals(templateId) && a.getDataSourceType().equals(CellDataSourceType.Formula.getCode()))
.collect(Collectors.toList());
//update formulablock table reportid field List<PeriodCellTemplateConfig> periodCellTemplateConfigs = resources.getPeriodCellTemplateConfigs().stream()
List<Long> cellTemplateConfigIds = periodCellTemplateConfigs.stream() .filter(a -> a.getReportTemplateId().equals(templateId) && a.getDataSourceType().equals(CellDataSourceType.Formula.getCode()))
.map(PeriodCellTemplateConfig::getCellTemplateId) .collect(Collectors.toList());
.collect(Collectors.toList());
if (cellTemplateConfigIds.size() > 0) {
periodFormulaBlockMapper.updateReportId(reportId, cellTemplateConfigIds, period, projectId);
}
for (PeriodCellTemplateConfig periodCellTemplateConfig : periodCellTemplateConfigs) { //update formulablock table reportid field
List<Long> cellTemplateConfigIds = periodCellTemplateConfigs.stream()
PeriodFormulaBlockExample periodFormulaBlockExample2 = new PeriodFormulaBlockExample(); .map(PeriodCellTemplateConfig::getCellTemplateId)
periodFormulaBlockExample2.createCriteria() .collect(Collectors.toList());
.andProjectIdEqualTo(projectId) if (cellTemplateConfigIds.size() > 0) {
.andCellTemplateIdEqualTo(periodCellTemplateConfig.getCellTemplateId()) periodFormulaBlockMapper.updateReportId(reportId, cellTemplateConfigIds, period, projectId);
.andReportIdEqualTo(reportId) }
.andPeriodEqualTo(period);
List<PeriodFormulaBlock> periodFormulaBlocks = periodFormulaBlockMapper.selectByExample(periodFormulaBlockExample2);
//TODO:如果formula 为 ND(100) +ND(22) ,需要使用正则表达式拆分出自定义公式,然后根据自定义公式取formulablock 的数据进行替换
String regex = "[A-Z]*\\([\\-A-Za-z0-9\\\"\\,\\.\\u4e00-\\u9fa5\\%]*\\)";
Pattern p = Pattern.compile(regex);
String sourceFormula = StringUtils.isNotBlank(periodCellTemplateConfig.getKeyValueParsedFormula()) ?
periodCellTemplateConfig.getKeyValueParsedFormula() :
periodCellTemplateConfig.getFormula();
String resultFormula = StringUtils.isNotBlank(periodCellTemplateConfig.getKeyValueParsedFormula()) ?
periodCellTemplateConfig.getKeyValueParsedFormula() :
periodCellTemplateConfig.getFormula();
Matcher m = p.matcher(sourceFormula);
Boolean isFind = false;
while (m.find()) {
isFind = true;
//如果有些公式无法用正则匹配,可以做特殊处理
String findStr = m.group();
Optional<PeriodFormulaBlock> formulaBlock = periodFormulaBlocks.stream()
.filter(a -> a.getFormulaExpression().equals(findStr))
.findFirst();
if (formulaBlock.isPresent()) {
resultFormula = resultFormula.replace(findStr, formulaBlock.get().getData());
}
}
//如果有正则匹配就进行更新公式解析 for (PeriodCellTemplateConfig periodCellTemplateConfig : periodCellTemplateConfigs) {
if (isFind) {
periodCellTemplateConfig.setParsedFormula(StringUtils.isNotBlank(resultFormula) ? resultFormula : null); PeriodFormulaBlockExample periodFormulaBlockExample2 = new PeriodFormulaBlockExample();
if (periodCellTemplateConfig.getFormula() != null && !periodCellTemplateConfig.getFormula().contains("BB(")) periodFormulaBlockExample2.createCriteria()
periodCellTemplateConfig.setFormula(StringUtils.isNotBlank(periodCellTemplateConfig.getFormula()) ? resultFormula : null); .andProjectIdEqualTo(projectId)
periodCellTemplateConfigMapper.updateByPrimaryKeySelective(periodCellTemplateConfig); .andCellTemplateIdEqualTo(periodCellTemplateConfig.getCellTemplateId())
.andReportIdEqualTo(reportId)
.andPeriodEqualTo(period);
List<PeriodFormulaBlock> periodFormulaBlocks = periodFormulaBlockMapper.selectByExample(periodFormulaBlockExample2);
//TODO:如果formula 为 ND(100) +ND(22) ,需要使用正则表达式拆分出自定义公式,然后根据自定义公式取formulablock 的数据进行替换
String regex = "[A-Z]*\\([\\-A-Za-z0-9\\\"\\,\\.\\u4e00-\\u9fa5\\%]*\\)";
Pattern p = Pattern.compile(regex);
String sourceFormula = StringUtils.isNotBlank(periodCellTemplateConfig.getKeyValueParsedFormula()) ?
periodCellTemplateConfig.getKeyValueParsedFormula() :
periodCellTemplateConfig.getFormula();
String resultFormula = StringUtils.isNotBlank(periodCellTemplateConfig.getKeyValueParsedFormula()) ?
periodCellTemplateConfig.getKeyValueParsedFormula() :
periodCellTemplateConfig.getFormula();
Matcher m = p.matcher(sourceFormula);
Boolean isFind = false;
while (m.find()) {
isFind = true;
//如果有些公式无法用正则匹配,可以做特殊处理
String findStr = m.group();
Optional<PeriodFormulaBlock> formulaBlock = periodFormulaBlocks.stream()
.filter(a -> a.getFormulaExpression().equals(findStr))
.findFirst();
if (formulaBlock.isPresent()) {
resultFormula = resultFormula.replace(findStr, formulaBlock.get().getData());
} }
}
String regexNormalCell = "[A-Z]{1,2}((?!0)[0-9]{1,3})"; //如果有正则匹配就进行更新公式解析
p = Pattern.compile(regexNormalCell); if (isFind) {
m = p.matcher(sourceFormula); periodCellTemplateConfig.setParsedFormula(StringUtils.isNotBlank(resultFormula) ? resultFormula : null);
while (m.find()) { if (periodCellTemplateConfig.getFormula() != null && !periodCellTemplateConfig.getFormula().contains("BB("))
//如果找到普通单元格的公式,就去workbook里查找对应的格子取数据,然后放到DataSource,作为普通单元格数据源的数据 periodCellTemplateConfig.setFormula(StringUtils.isNotBlank(periodCellTemplateConfig.getFormula()) ? resultFormula : null);
//找到一个格子就加一条数据 periodCellTemplateConfigMapper.updateByPrimaryKeySelective(periodCellTemplateConfig);
String findStr = m.group();//A12,A13,A15,how to get A and 12 or A and 13 }
String regexColumn = "[A-Z]{1,2}";
Pattern pp = Pattern.compile(regexColumn); String regexNormalCell = "[A-Z]{1,2}((?!0)[0-9]{1,3})";
Matcher mm = pp.matcher(findStr); p = Pattern.compile(regexNormalCell);
while (mm.find()) { m = p.matcher(sourceFormula);
String colStr = mm.group(); while (m.find()) {
int colNum = FormulaHelper.excelColStrToNum(colStr, colStr.length()); //如果找到普通单元格的公式,就去workbook里查找对应的格子取数据,然后放到DataSource,作为普通单元格数据源的数据
int rowNum = Integer.parseInt(StringUtils.removeStart(findStr, colStr)); //找到一个格子就加一条数据
Row row = sheet.getRow(rowNum - 1); String findStr = m.group();//A12,A13,A15,how to get A and 12 or A and 13
if (row != null) { String regexColumn = "[A-Z]{1,2}";
Cell cell = row.getCell(colNum - 1); Pattern pp = Pattern.compile(regexColumn);
if (cell != null) { Matcher mm = pp.matcher(findStr);
//开始取值然后存放到DataSource while (mm.find()) {
PeriodDataSource dataSource = new PeriodDataSource(); String colStr = mm.group();
dataSource.setId(distributedIdService.nextId()); int colNum = FormulaHelper.excelColStrToNum(colStr, colStr.length());
dataSource.setColumnIndex(colNum - 1); int rowNum = Integer.parseInt(StringUtils.removeStart(findStr, colStr));
dataSource.setRowIndex(rowNum - 1); Row row = sheet.getRow(rowNum - 1);
if (((XSSFCell) cell).getRawValue() != "#VALUE!") { if (row != null) {
dataSource.setAmount(new BigDecimal( Cell cell = row.getCell(colNum - 1);
((XSSFCell) cell).getRawValue() != null ? if (cell != null) {
((XSSFCell) cell).getRawValue() //开始取值然后存放到DataSource
: (StringUtils.isNotBlank(cell.getStringCellValue())) ? PeriodDataSource dataSource = new PeriodDataSource();
cell.getStringCellValue() dataSource.setId(distributedIdService.nextId());
: Double.toString(cell.getNumericCellValue()))); dataSource.setColumnIndex(colNum - 1);
} else { dataSource.setRowIndex(rowNum - 1);
dataSource.setAmount(new BigDecimal("0.0")); if (((XSSFCell) cell).getRawValue() != "#VALUE!") {
} dataSource.setAmount(new BigDecimal(
dataSource.setName("ReportDataSource"); ((XSSFCell) cell).getRawValue() != null ?
dataSource.setDescription(findStr); ((XSSFCell) cell).getRawValue()
dataSource.setCreateTime(new Date()); : (StringUtils.isNotBlank(cell.getStringCellValue())) ?
dataSource.setUpdateTime(new Date()); cell.getStringCellValue()
dataSource.setCreateBy("Admin"); : Double.toString(cell.getNumericCellValue())));
dataSource.setUpdateBy("Admin"); } else {
dataSource.setPeriod(period); dataSource.setAmount(new BigDecimal("0.0"));
dataSource.setCellTemplateId(periodCellTemplateConfig.getCellTemplateId());
dataSource.setType(FormulaDataSourceType.Report.getCode());
dataSource.setProjectId(projectId);
periodDataSourceMapper.insertSelective(dataSource);
//这里有个问题就是DataSource的数据有了,但是celldatasource的数据没有,后面无法关联celldata和DataSource
//解决办法就是 在存DataSource的时候就先把celldata的数据加好
//然后把celldatasource的数据也加好
//然后在外面去更新celldata和celldatasource的数据
//还有就是把公式里的数据源放到内存,在所有算完之后再统一加数据源
} }
dataSource.setName("ReportDataSource");
dataSource.setDescription(findStr);
dataSource.setCreateTime(new Date());
dataSource.setUpdateTime(new Date());
dataSource.setCreateBy("Admin");
dataSource.setUpdateBy("Admin");
dataSource.setPeriod(period);
dataSource.setCellTemplateId(periodCellTemplateConfig.getCellTemplateId());
dataSource.setType(FormulaDataSourceType.Report.getCode());
dataSource.setProjectId(projectId);
periodDataSourceMapper.insertSelective(dataSource);
//这里有个问题就是DataSource的数据有了,但是celldatasource的数据没有,后面无法关联celldata和DataSource
//解决办法就是 在存DataSource的时候就先把celldata的数据加好
//然后把celldatasource的数据也加好
//然后在外面去更新celldata和celldatasource的数据
//还有就是把公式里的数据源放到内存,在所有算完之后再统一加数据源
} }
} }
} }
}
Optional<PeriodCellTemplate> tempPeriodCellTemplate = resources.getPeriodCellTemplates().stream() Optional<PeriodCellTemplate> tempPeriodCellTemplate = resources.getPeriodCellTemplates().stream()
.filter(a -> a.getCellTemplateId().equals(periodCellTemplateConfig.getCellTemplateId())) .filter(a -> a.getCellTemplateId().equals(periodCellTemplateConfig.getCellTemplateId()))
.findFirst(); .findFirst();
if (tempPeriodCellTemplate.isPresent()) { if (tempPeriodCellTemplate.isPresent()) {
PeriodCellData cellData = new PeriodCellData(); PeriodCellData cellData = new PeriodCellData();
Long cellDataId = distributedIdService.nextId(); Long cellDataId = distributedIdService.nextId();
cellData.setId(cellDataId); cellData.setId(cellDataId);
cellData.setReportId(reportId); cellData.setReportId(reportId);
cellData.setCellTemplateId(tempPeriodCellTemplate.get().getCellTemplateId()); cellData.setCellTemplateId(tempPeriodCellTemplate.get().getCellTemplateId());
String data; String data;
if (sheet.getRow(tempPeriodCellTemplate.get().getRowIndex()) != null if (sheet.getRow(tempPeriodCellTemplate.get().getRowIndex()) != null
&& sheet.getRow(tempPeriodCellTemplate.get().getRowIndex()) && sheet.getRow(tempPeriodCellTemplate.get().getRowIndex())
.getCell(tempPeriodCellTemplate.get().getColumnIndex()) != null) { .getCell(tempPeriodCellTemplate.get().getColumnIndex()) != null) {
Cell cell = sheet.getRow(tempPeriodCellTemplate.get().getRowIndex()) Cell cell = sheet.getRow(tempPeriodCellTemplate.get().getRowIndex())
.getCell(tempPeriodCellTemplate.get().getColumnIndex()); .getCell(tempPeriodCellTemplate.get().getColumnIndex());
data = ((XSSFCell) cell).getRawValue(); data = ((XSSFCell) cell).getRawValue();
if (data != null && data.equals("#VALUE!")) { if (data != null && data.equals("#VALUE!")) {
data = "0.0"; data = "0.0";
} }
//evaluator.evaluate(cell); //evaluator.evaluate(cell);
// if (cell.getCellTypeEnum().equals(CellType.NUMERIC)||cell.getCellTypeEnum().equals(CellType.FORMULA)) { // if (cell.getCellTypeEnum().equals(CellType.NUMERIC)||cell.getCellTypeEnum().equals(CellType.FORMULA)) {
// data = Double.toString(cell.getNumericCellValue()); // data = Double.toString(cell.getNumericCellValue());
// } else { // } else {
// data = cell.getStringCellValue(); // data = cell.getStringCellValue();
// } // }
} else { } else {
data = "0.0"; data = "0.0";
} }
if (StringUtils.isNotBlank(data)) { if (StringUtils.isNotBlank(data)) {
Pattern pattern = Pattern.compile("[0-9.]*"); Pattern pattern = Pattern.compile("[0-9.]*");
Matcher isNum = pattern.matcher(data); Matcher isNum = pattern.matcher(data);
if (isNum.matches()) { if (isNum.matches()) {
cellData.setData(new BigDecimal(data).toString()); cellData.setData(new BigDecimal(data).toString());
} else {
cellData.setData(data);
}
} else { } else {
cellData.setData(data); cellData.setData(data);
} }
} else {
cellData.setData(data);
}
//cellData.setData(new BigDecimal(data).toString()); //cellData.setData(new BigDecimal(data).toString());
// PeriodFormulaBlockExample periodFormulaBlockExample = new PeriodFormulaBlockExample(); // PeriodFormulaBlockExample periodFormulaBlockExample = new PeriodFormulaBlockExample();
// periodFormulaBlockExample.createCriteria().andPeriodEqualTo(period) // periodFormulaBlockExample.createCriteria().andPeriodEqualTo(period)
// .andCellTemplateIdEqualTo(tempPeriodCellTemplate.get().getCellTemplateId()); // .andCellTemplateIdEqualTo(tempPeriodCellTemplate.get().getCellTemplateId());
if (StringUtils.isBlank(resultFormula)) { if (StringUtils.isBlank(resultFormula)) {
resultFormula = null; resultFormula = null;
} }
// if (isFind) { // if (isFind) {
cellData.setFormulaExp(resultFormula); cellData.setFormulaExp(resultFormula);
// } else { // } else {
// cellData.setFormulaExp(EMPTY); // cellData.setFormulaExp(EMPTY);
// } // }
cellData.setCreateBy("Admin"); cellData.setCreateBy("Admin");
cellData.setCreateTime(new Date()); cellData.setCreateTime(new Date());
cellData.setUpdateBy("Admin"); cellData.setUpdateBy("Admin");
cellData.setUpdateTime(new Date()); cellData.setUpdateTime(new Date());
cellData.setProjectId(projectId); cellData.setProjectId(projectId);
cellData.setPeriod(period); cellData.setPeriod(period);
//after insert celldata, insert the celldatasource for link celldata and datasource //after insert celldata, insert the celldatasource for link celldata and datasource
PeriodDataSourceExample dataSourceExample = new PeriodDataSourceExample(); PeriodDataSourceExample dataSourceExample = new PeriodDataSourceExample();
dataSourceExample.createCriteria().andPeriodEqualTo(period).andProjectIdEqualTo(projectId) dataSourceExample.createCriteria().andPeriodEqualTo(period).andProjectIdEqualTo(projectId)
.andCellTemplateIdEqualTo(tempPeriodCellTemplate.get().getCellTemplateId()).andTypeNotEqualTo(10); .andCellTemplateIdEqualTo(tempPeriodCellTemplate.get().getCellTemplateId()).andTypeNotEqualTo(10);
List<PeriodDataSource> dataSourceList = SpringContextUtil.periodDataSourceMapper.selectByExample(dataSourceExample); List<PeriodDataSource> dataSourceList = SpringContextUtil.periodDataSourceMapper.selectByExample(dataSourceExample);
for (int ii = 0; ii < dataSourceList.size(); ii++) { for (int ii = 0; ii < dataSourceList.size(); ii++) {
PeriodDataSource dataSource = dataSourceList.get(ii); PeriodDataSource dataSource = dataSourceList.get(ii);
PeriodCellDataSource cellDataSource = new PeriodCellDataSource();
cellDataSource.setId(distributedIdService.nextId());
cellDataSource.setCellTemplateId(tempPeriodCellTemplate.get().getCellTemplateId());
cellDataSource.setCellDataId(cellDataId);
cellDataSource.setDataSourceId(dataSource.getId());
cellDataSource.setCreateTime(new Date());
cellDataSource.setUpdateTime(new Date());
cellDataSource.setPeriod(period);
cellDataSource.setProjectId(projectId);
SpringContextUtil.periodCellDataSourceMapper.insertSelective(cellDataSource);
}
periodCellDataMapper.insertSelective(cellData);
}
}
if (isMergeMunual) {
List<PeriodCellTemplateConfig> keyInCellTemplateConfigs = resources.getPeriodCellTemplateConfigs().stream()
.filter(a -> a.getReportTemplateId().equals(templateId) && a.getDataSourceType().equals(CellDataSourceType.KeyIn.getCode()))
.collect(Collectors.toList());
for (PeriodCellTemplateConfig keyInCellTemplateConfig : keyInCellTemplateConfigs) {
PeriodDataSourceExample dataSourceExample = new PeriodDataSourceExample();
dataSourceExample.createCriteria().andPeriodEqualTo(period).andProjectIdEqualTo(projectId)
.andCellTemplateIdEqualTo(keyInCellTemplateConfig.getCellTemplateId()).andTypeEqualTo(10);
List<PeriodDataSource> dataSourceList = SpringContextUtil.periodDataSourceMapper.selectByExample(dataSourceExample);
if (!dataSourceList.isEmpty() && dataSourceList.size() == 1) {
PeriodCellDataExample cellDataExample = new PeriodCellDataExample();
cellDataExample.createCriteria().andPeriodEqualTo(period).andProjectIdEqualTo(projectId)
.andCellTemplateIdEqualTo(keyInCellTemplateConfig.getCellTemplateId());
List<PeriodCellData> cellDataList = periodCellDataMapper.selectByExample(cellDataExample);
if (cellDataList.size() == 1) {
PeriodCellData cellData = cellDataList.get(0);
PeriodDataSource dataSource = dataSourceList.get(0);
cellData.setData(dataSource.getAmount() + "");
if (StringUtils.isEmpty(cellData.getFormulaExp().trim()))
cellData.setFormulaExp(dataSource.getAmount() + "");
PeriodCellDataSource cellDataSource = new PeriodCellDataSource(); PeriodCellDataSource cellDataSource = new PeriodCellDataSource();
cellDataSource.setId(distributedIdService.nextId()); cellDataSource.setId(distributedIdService.nextId());
cellDataSource.setCellTemplateId(tempPeriodCellTemplate.get().getCellTemplateId()); cellDataSource.setCellTemplateId(keyInCellTemplateConfig.getCellTemplateId());
cellDataSource.setCellDataId(cellDataId); cellDataSource.setCellDataId(cellData.getId());
cellDataSource.setDataSourceId(dataSource.getId()); cellDataSource.setDataSourceId(dataSource.getId());
cellDataSource.setCreateTime(new Date()); cellDataSource.setCreateTime(new Date());
cellDataSource.setUpdateTime(new Date()); cellDataSource.setUpdateTime(new Date());
cellDataSource.setPeriod(period); cellDataSource.setPeriod(period);
cellDataSource.setProjectId(projectId); cellDataSource.setProjectId(projectId);
SpringContextUtil.periodCellDataSourceMapper.insertSelective(cellDataSource); SpringContextUtil.periodCellDataSourceMapper.insertSelective(cellDataSource);
} periodCellDataMapper.updateByPrimaryKeySelective(cellData);
} else if (cellDataList.isEmpty()) {
periodCellDataMapper.insertSelective(cellData); PeriodCellData cellData = new PeriodCellData();
} Long cellDataId = distributedIdService.nextId();
} cellData.setId(cellDataId);
cellData.setReportId(reportId);
cellData.setCellTemplateId(keyInCellTemplateConfig.getCellTemplateId());
if (isMergeMunual) { cellData.setCreateBy("Admin");
List<PeriodCellTemplateConfig> keyInCellTemplateConfigs = resources.getPeriodCellTemplateConfigs().stream() cellData.setCreateTime(new Date());
.filter(a -> a.getReportTemplateId().equals(templateId) && a.getDataSourceType().equals(CellDataSourceType.KeyIn.getCode())) cellData.setUpdateBy("Admin");
.collect(Collectors.toList()); cellData.setUpdateTime(new Date());
cellData.setProjectId(projectId);
for (PeriodCellTemplateConfig keyInCellTemplateConfig : keyInCellTemplateConfigs) { cellData.setPeriod(period);
PeriodDataSourceExample dataSourceExample = new PeriodDataSourceExample();
dataSourceExample.createCriteria().andPeriodEqualTo(period).andProjectIdEqualTo(projectId) PeriodDataSource dataSource = dataSourceList.get(0);
.andCellTemplateIdEqualTo(keyInCellTemplateConfig.getCellTemplateId()).andTypeEqualTo(10); cellData.setData(dataSource.getAmount() + "");
List<PeriodDataSource> dataSourceList = SpringContextUtil.periodDataSourceMapper.selectByExample(dataSourceExample); cellData.setFormulaExp(dataSource.getAmount() + "");
if (!dataSourceList.isEmpty() && dataSourceList.size() == 1) {
PeriodCellDataExample cellDataExample = new PeriodCellDataExample();
cellDataExample.createCriteria().andPeriodEqualTo(period).andProjectIdEqualTo(projectId)
.andCellTemplateIdEqualTo(keyInCellTemplateConfig.getCellTemplateId());
List<PeriodCellData> cellDataList = periodCellDataMapper.selectByExample(cellDataExample);
if (cellDataList.size() == 1) {
PeriodCellData cellData = cellDataList.get(0);
PeriodDataSource dataSource = dataSourceList.get(0);
cellData.setData(dataSource.getAmount() + "");
if (StringUtils.isEmpty(cellData.getFormulaExp().trim()))
cellData.setFormulaExp(dataSource.getAmount() + "");
PeriodCellDataSource cellDataSource = new PeriodCellDataSource();
cellDataSource.setId(distributedIdService.nextId());
cellDataSource.setCellTemplateId(keyInCellTemplateConfig.getCellTemplateId());
cellDataSource.setCellDataId(cellData.getId());
cellDataSource.setDataSourceId(dataSource.getId());
cellDataSource.setCreateTime(new Date());
cellDataSource.setUpdateTime(new Date());
cellDataSource.setPeriod(period);
cellDataSource.setProjectId(projectId);
SpringContextUtil.periodCellDataSourceMapper.insertSelective(cellDataSource);
periodCellDataMapper.updateByPrimaryKeySelective(cellData);
}else if(cellDataList.isEmpty()){
PeriodCellData cellData = new PeriodCellData();
Long cellDataId = distributedIdService.nextId();
cellData.setId(cellDataId);
cellData.setReportId(reportId);
cellData.setCellTemplateId(keyInCellTemplateConfig.getCellTemplateId());
cellData.setCreateBy("Admin");
cellData.setCreateTime(new Date());
cellData.setUpdateBy("Admin");
cellData.setUpdateTime(new Date());
cellData.setProjectId(projectId);
cellData.setPeriod(period);
PeriodDataSource dataSource = dataSourceList.get(0);
cellData.setData(dataSource.getAmount() + "");
cellData.setFormulaExp(dataSource.getAmount() + "");
PeriodCellDataSource cellDataSource = new PeriodCellDataSource();
cellDataSource.setId(distributedIdService.nextId());
cellDataSource.setCellTemplateId(keyInCellTemplateConfig.getCellTemplateId());
cellDataSource.setCellDataId(cellData.getId());
cellDataSource.setDataSourceId(dataSource.getId());
cellDataSource.setCreateTime(new Date());
cellDataSource.setUpdateTime(new Date());
cellDataSource.setPeriod(period);
cellDataSource.setProjectId(projectId);
SpringContextUtil.periodCellDataSourceMapper.insertSelective(cellDataSource);
periodCellDataMapper.insert(cellData);
}else {
logger.warn("should not be !!!");
}
PeriodCellDataSource cellDataSource = new PeriodCellDataSource();
cellDataSource.setId(distributedIdService.nextId());
cellDataSource.setCellTemplateId(keyInCellTemplateConfig.getCellTemplateId());
cellDataSource.setCellDataId(cellData.getId());
cellDataSource.setDataSourceId(dataSource.getId());
cellDataSource.setCreateTime(new Date());
cellDataSource.setUpdateTime(new Date());
cellDataSource.setPeriod(period);
cellDataSource.setProjectId(projectId);
SpringContextUtil.periodCellDataSourceMapper.insertSelective(cellDataSource);
periodCellDataMapper.insert(cellData);
} else {
logger.warn("should not be !!!");
} }
} }
} }
} }
} catch (Exception e) {
e.printStackTrace();
job.setStatus(WrapPeriodJobDto.STATUS_ERROR);
job.setErrorMsg("cacals report for code " + code + " failed with msg "+e.getMessage());
throw e;
} finally {
periodJobMapper.updateByPrimaryKey(job);
} }
setStatus(job,code,STATUS_END);
logger.info("-------------------------------------End Job [{}]------------------------------------------------------",code); periodJobMapper.updateByPrimaryKey(job);
logger.info("-------------------------------------End Job [{}]------------------------------------------------------", code);
} }
} }
private List<PeriodReport> createReportsByTemplates(Workbook workbook, List<PeriodTemplate> periodTemplateList, String projectId, Integer period) { private List<PeriodReport> createReportsByTemplates(Workbook
workbook, List<PeriodTemplate> periodTemplateList, String projectId, Integer period) {
List<PeriodReport> reports = new ArrayList<>(); List<PeriodReport> reports = new ArrayList<>();
for (int i = 0; i < workbook.getNumberOfSheets(); i++) { for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
Sheet sheet = workbook.getSheetAt(i); Sheet sheet = workbook.getSheetAt(i);
...@@ -500,14 +493,16 @@ public class ReportGeneratorImpl { ...@@ -500,14 +493,16 @@ public class ReportGeneratorImpl {
return periodTemplateMapper.selectByExample(periodTemplateExample); return periodTemplateMapper.selectByExample(periodTemplateExample);
} }
private List<PeriodCellTemplate> queryPeriodCellTemplates(String projectId, Integer period, List<Long> periodTemplateIdList) { private List<PeriodCellTemplate> queryPeriodCellTemplates(String projectId, Integer
period, List<Long> periodTemplateIdList) {
PeriodCellTemplateExample periodCellTemplateExample = new PeriodCellTemplateExample(); PeriodCellTemplateExample periodCellTemplateExample = new PeriodCellTemplateExample();
if (periodTemplateIdList.isEmpty()) periodTemplateIdList.add(Long.MAX_VALUE); if (periodTemplateIdList.isEmpty()) periodTemplateIdList.add(Long.MAX_VALUE);
periodCellTemplateExample.createCriteria().andProjectIdEqualTo(projectId).andReportTemplateIdIn(periodTemplateIdList).andPeriodEqualTo(period); periodCellTemplateExample.createCriteria().andProjectIdEqualTo(projectId).andReportTemplateIdIn(periodTemplateIdList).andPeriodEqualTo(period);
return periodCellTemplateMapper.selectByExample(periodCellTemplateExample); return periodCellTemplateMapper.selectByExample(periodCellTemplateExample);
} }
private List<PeriodCellTemplateConfig> queryPeriodCellTemplateConfigs(String projectId, Integer period, List<Long> periodTemplateIdList) { private List<PeriodCellTemplateConfig> queryPeriodCellTemplateConfigs(String projectId, Integer
period, List<Long> periodTemplateIdList) {
PeriodCellTemplateConfigExample periodCellTemplateConfigExample = new PeriodCellTemplateConfigExample(); PeriodCellTemplateConfigExample periodCellTemplateConfigExample = new PeriodCellTemplateConfigExample();
periodCellTemplateConfigExample.createCriteria().andProjectIdEqualTo(projectId).andReportTemplateIdIn(periodTemplateIdList).andPeriodEqualTo(period); periodCellTemplateConfigExample.createCriteria().andProjectIdEqualTo(projectId).andReportTemplateIdIn(periodTemplateIdList).andPeriodEqualTo(period);
return periodCellTemplateConfigMapper.selectByExample(periodCellTemplateConfigExample); return periodCellTemplateConfigMapper.selectByExample(periodCellTemplateConfigExample);
...@@ -590,7 +585,8 @@ public class ReportGeneratorImpl { ...@@ -590,7 +585,8 @@ public class ReportGeneratorImpl {
workbook.addToolPack(udfToolpack); workbook.addToolPack(udfToolpack);
} }
public List<CellCalcInfoDto> getCellCalcInfo(List<Long> templateIdList, Integer periodParam, String projectId) { public List<CellCalcInfoDto> getCellCalcInfo(List<Long> templateIdList, Integer periodParam, String
projectId) {
//already finished by 20180711 //already finished by 20180711
int period = 0; int period = 0;
if (periodParam != null) { if (periodParam != null) {
...@@ -633,7 +629,8 @@ public class ReportGeneratorImpl { ...@@ -633,7 +629,8 @@ public class ReportGeneratorImpl {
return cellCalcInfoDtos; return cellCalcInfoDtos;
} }
private void fixedPCTParsedFormula(List<PeriodCellTemplateConfigExtendDto> periodCellTemplateConfigExtendDtos, String projectId, int period) { private void fixedPCTParsedFormula
(List<PeriodCellTemplateConfigExtendDto> periodCellTemplateConfigExtendDtos, String projectId, int period) {
Map<String, List<PCTEntity>> formulaMapToPCT = new HashMap<>(); Map<String, List<PCTEntity>> formulaMapToPCT = new HashMap<>();
Map<PeriodCellTemplateConfig, List<String>> configMapToPCTs = new HashMap<>(); Map<PeriodCellTemplateConfig, List<String>> configMapToPCTs = new HashMap<>();
Set<PCTEntity> parameter = new HashSet<>(); Set<PCTEntity> parameter = new HashSet<>();
......
...@@ -42,6 +42,8 @@ import java.util.regex.Matcher; ...@@ -42,6 +42,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static pwc.taxtech.atms.dto.vatdto.WrapPeriodJobDto.*;
@Component @Component
public class ReportServiceImpl { public class ReportServiceImpl {
private final static Logger logger = LoggerFactory.getLogger(ReportServiceImpl.class); private final static Logger logger = LoggerFactory.getLogger(ReportServiceImpl.class);
...@@ -244,23 +246,16 @@ public class ReportServiceImpl { ...@@ -244,23 +246,16 @@ public class ReportServiceImpl {
} }
@Transactional private void updateConfig(String projectId, Integer period, Boolean isMergeManualData, List<Template> templates, PeriodJob job) {
public void updateConfig(String projectId, Integer period, Boolean isMergeManualData, List<Template> templates, PeriodJob job) { setStatus(job, STATUS_BEGIN);
try { periodJobMapper.updateByPrimaryKey(job);
job.setStatus(WrapPeriodJobDto.STATUS_BEGIN);
List<Long> exceptTemplateIds = templateMapper.getIdsForExceptTemplate();
clearPeriodData(projectId, period, exceptTemplateIds, isMergeManualData);
copyTemplateAndConfigFromAdmin(projectId, templates, period); List<Long> exceptTemplateIds = templateMapper.getIdsForExceptTemplate();
clearPeriodData(projectId, period, exceptTemplateIds, isMergeManualData);
copyTemplateAndConfigFromAdmin(projectId, templates, period);
} catch (Exception ex) { setStatus(job, STATUS_END);
job.setStatus(WrapPeriodJobDto.STATUS_ERROR); periodJobMapper.updateByPrimaryKey(job);
job.setErrorMsg("error update config with projectId " + projectId + " period" + period);
logger.error(ex.getMessage(), ex);
} finally {
periodJobMapper.updateByPrimaryKey(job);
}
} }
private List<Template> getTemplatesByProjectId(String projectId) { private List<Template> getTemplatesByProjectId(String projectId) {
...@@ -452,13 +447,13 @@ public class ReportServiceImpl { ...@@ -452,13 +447,13 @@ public class ReportServiceImpl {
public OperationResultDto generateData(String projectId, EnumServiceType serviceType, Boolean isMergeManualData, public OperationResultDto generateData(String projectId, EnumServiceType serviceType, Boolean isMergeManualData,
Integer periodParam, Integer reportType, Optional<String> generator) { Integer periodParam, Integer reportType, Optional<String> generator) {
OperationResultDto operationResultDto = new OperationResultDto(); OperationResultDto operationResultDto = new OperationResultDto();
MyAsserts.assertEq(serviceType, EnumServiceType.VAT, new NotFoundException()); MyAsserts.assertEq(serviceType, EnumServiceType.VAT, new NotFoundException());
PeriodJobExample example = new PeriodJobExample(); PeriodJobExample example = new PeriodJobExample();
example.createCriteria().andProjectIdEqualTo(projectId).andPeriodEqualTo(periodParam) example.createCriteria().andProjectIdEqualTo(projectId).andPeriodEqualTo(periodParam)
.andStatusEqualTo(WrapPeriodJobDto.STATUS_BEGIN); .andStatusEqualTo(WrapPeriodJobDto.STATUS_BEGIN);
MyAsserts.assertEmpty(periodJobMapper.selectByExample(example), Exceptions.TASK_HAS_BEGINNING); MyAsserts.assertEmpty(periodJobMapper.selectByExample(example), Exceptions.TASK_HAS_BEGINNING);
String status = periodApprovalMapper.getStatusByProjectIdAndPeriod(projectId, periodParam); String status = periodApprovalMapper.getStatusByProjectIdAndPeriod(projectId, periodParam);
MyAsserts.assertTrue(status == null || status.equals(Constant.APPROVAL_DISAGREED), Exceptions.REPORT_IN_PROCESS_OR_AGREED_EXCEPTION); MyAsserts.assertTrue(status == null || status.equals(Constant.APPROVAL_DISAGREED), Exceptions.REPORT_IN_PROCESS_OR_AGREED_EXCEPTION);
try { try {
if (serviceType.equals(EnumServiceType.VAT) && (periodParam == null || periodParam <= 0)) { if (serviceType.equals(EnumServiceType.VAT) && (periodParam == null || periodParam <= 0)) {
...@@ -489,13 +484,9 @@ public class ReportServiceImpl { ...@@ -489,13 +484,9 @@ public class ReportServiceImpl {
evaluator.evaluateAll(); evaluator.evaluateAll();
reportGenerator.updateWorkbookCaclsValueToDb(projectId, periodParam, workbook, resources, isMergeManualData, genJob); reportGenerator.updateWorkbookCaclsValueToDb(projectId, periodParam, workbook, resources, isMergeManualData, genJob);
genJob.setStatus(WrapPeriodJobDto.STATUS_END);
periodJobMapper.updateByPrimaryKey(genJob);
} catch (Exception e) { } catch (Exception e) {
genJob.setStatus(WrapPeriodJobDto.STATUS_ERROR); setStatus(genJob, STATUS_ERROR);
genJob.setErrorMsg("Sever error "+e.getMessage()); genJob.setErrorMsg("Sever error " + e.getMessage());
periodJobMapper.updateByPrimaryKey(genJob); periodJobMapper.updateByPrimaryKey(genJob);
e.printStackTrace(); e.printStackTrace();
} }
......
jdbc_url=jdbc:oracle:thin:@10.158.230.144:11521:XE jdbc_url=jdbc:oracle:thin:@10.158.230.144:11521:XE
jdbc_user=TAX_ADMIN jdbc_user=tax_admin_longi
jdbc_password=taxadmin2018 jdbc_password=tax_admin_longi
#jdbc_password=111111 #jdbc_password=111111
jdbc_admin_db=tax_admin jdbc_admin_db=tax_admin_longi
#jdbc_url=jdbc:oracle:thin:@10.158.230.144:11521:XE #jdbc_url=jdbc:oracle:thin:@10.158.230.144:11521:XE
#jdbc_user=tax_admin_longi #jdbc_user=tax_admin_longi
......
...@@ -2579,6 +2579,8 @@ ...@@ -2579,6 +2579,8 @@
$scope.agreeApproval =function(){ $scope.agreeApproval =function(){
vatApproveService.checkTask(vatSessionService.approvalInfo.instanceId,'agreed',$scope.comment).success(function(){ vatApproveService.checkTask(vatSessionService.approvalInfo.instanceId,'agreed',$scope.comment).success(function(){
vatCommonService.setProjectStatus(vatSessionService.project.id, vatSessionService.month, constant.ProjectStatusEnum.Completed
, constant.DictionaryDictKey.WFDataProcess, enums.FinishStatusEnum.Finished);
$("#ApprovalComment").modal('hide'); $("#ApprovalComment").modal('hide');
}); });
} }
......
...@@ -570,6 +570,8 @@ ...@@ -570,6 +570,8 @@
item.status = 'completed'; item.status = 'completed';
if($scope.timer){ if($scope.timer){
$interval.cancel($scope.timer); $interval.cancel($scope.timer);
vatCommonService.setProjectStatus(vatSessionService.project.id, vatSessionService.month, constant.ProjectStatusEnum.Generated
, constant.DictionaryDictKey.WFDataProcess, enums.FinishStatusEnum.Finished);
} }
}else if(job.status == 'Begin'){ }else if(job.status == 'Begin'){
item.status = 'processing'; item.status = 'processing';
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment