Commit 02cb5205 authored by eddie.woo's avatar eddie.woo

Merge branch 'dev_mysql' of http://code.tech.tax.asia.pwcinternal.com/root/atms into dev_mysql

parents 5c41d6eb bf945c3a
......@@ -23,122 +23,122 @@ public class EbsApiController {
@Resource
private EbsApiService ebsApiService;
@RequestMapping(value = "/queryRemoteServerThenUpdateJE", method = RequestMethod.POST)
public ApiResultDto queryRemoteServerThenUpdateJE(@RequestBody List<JournalEntryQueryDto> items) {
@RequestMapping(value = "/updateJE", method = RequestMethod.POST)
public ApiResultDto updateJE(@RequestBody List<JournalEntryQueryDto> items) {
if (CollectionUtils.isEmpty(items)) {
logger.debug("the queryRemoteServerThenUpdateJE return items is empty");
logger.debug("the updateJE return items is empty");
return ApiResultDto.success(Collections.emptyList());
}
try {
ebsApiService.queryRemoteServerThenUpdateJE(items);
return ApiResultDto.success();
} catch (Exception e) {
logger.error("queryRemoteServerThenUpdateJE error.", e);
logger.error("updateJE error.", e);
}
return ApiResultDto.fail();
}
@RequestMapping(value = "/queryRemoteServerThenUpdateTB", method = RequestMethod.POST)
public ApiResultDto queryRemoteServerThenUpdateTB(@RequestBody List<TrialBalanceQueryDto> items) {
@RequestMapping(value = "/updateTB", method = RequestMethod.POST)
public ApiResultDto updateTB(@RequestBody List<TrialBalanceQueryDto> items) {
if (CollectionUtils.isEmpty(items)) {
logger.debug("the queryRemoteServerThenUpdateTB return items is empty");
logger.debug("the updateTB return items is empty");
return ApiResultDto.success(Collections.emptyList());
}
try {
ebsApiService.queryRemoteServerThenUpdateTB(items);
return ApiResultDto.success();
} catch (Exception e) {
logger.error("queryRemoteServerThenUpdateTB error.", e);
logger.error("updateTB error.", e);
}
return ApiResultDto.fail();
}
@RequestMapping(value = "/queryRemoteServerThenUpdateCF", method = RequestMethod.POST)
public ApiResultDto queryRemoteServerThenUpdateCF(@RequestBody List<CashFlowQueryDto> items) {
@RequestMapping(value = "/updateCF", method = RequestMethod.POST)
public ApiResultDto updateCF(@RequestBody List<CashFlowQueryDto> items) {
if (CollectionUtils.isEmpty(items)) {
logger.debug("the queryRemoteServerThenUpdateCF return items is empty");
logger.debug("the updateCF return items is empty");
return ApiResultDto.success(Collections.emptyList());
}
try {
ebsApiService.queryRemoteServerThenUpdateCF(items);
return ApiResultDto.success();
} catch (Exception e) {
logger.error("queryRemoteServerThenUpdateCF error.", e);
logger.error("updateCF error.", e);
}
return ApiResultDto.fail();
}
@RequestMapping(value = "/queryRemoteServerThenUpdateBS", method = RequestMethod.POST)
public ApiResultDto queryRemoteServerThenUpdateBS(@RequestBody List<BalanceSheetQueryDto> items) {
@RequestMapping(value = "/updateBS", method = RequestMethod.POST)
public ApiResultDto updateBS(@RequestBody List<BalanceSheetQueryDto> items) {
if (CollectionUtils.isEmpty(items)) {
logger.debug("the queryRemoteServerThenUpdateBS return items is empty");
logger.debug("the updateBS return items is empty");
return ApiResultDto.success(Collections.emptyList());
}
try {
ebsApiService.queryRemoteServerThenUpdateBS(items);
return ApiResultDto.success();
} catch (Exception e) {
logger.error("queryRemoteServerThenUpdateBS error.", e);
logger.error("updateBS error.", e);
}
return ApiResultDto.fail();
}
@RequestMapping(value = "/queryRemoteServerThenUpdatePL", method = RequestMethod.POST)
public ApiResultDto queryRemoteServerThenUpdatePL(@RequestBody List<ProfitLossStatementQueryDto> items) {
@RequestMapping(value = "/updatePL", method = RequestMethod.POST)
public ApiResultDto updatePL(@RequestBody List<ProfitLossStatementQueryDto> items) {
if (CollectionUtils.isEmpty(items)) {
logger.debug("the queryRemoteServerThenUpdatePL return items is empty");
logger.debug("the updatePL return items is empty");
return ApiResultDto.success(Collections.emptyList());
}
try {
ebsApiService.queryRemoteServerThenUpdatePL(items);
return ApiResultDto.success();
} catch (Exception e) {
logger.error("queryRemoteServerThenUpdatePL error.", e);
logger.error("updatePL error.", e);
}
return ApiResultDto.fail();
}
@RequestMapping(value = "/queryRemoteServerThenUpdateBSprc", method = RequestMethod.POST)
public ApiResultDto queryRemoteServerThenUpdateBSprc(@RequestBody List<BalanceSheetPrcQueryDto> items) {
@RequestMapping(value = "/updateBSprc", method = RequestMethod.POST)
public ApiResultDto updateBSprc(@RequestBody List<BalanceSheetPrcQueryDto> items) {
if (CollectionUtils.isEmpty(items)) {
logger.debug("the queryRemoteServerThenUpdateBSprc return items is empty");
logger.debug("the updateBSprc return items is empty");
return ApiResultDto.success(Collections.emptyList());
}
try {
ebsApiService.queryRemoteServerThenUpdateBSprc(items);
return ApiResultDto.success();
} catch (Exception e) {
logger.error("queryRemoteServerThenUpdateBSprc error.", e);
logger.error("updateBSprc error.", e);
}
return ApiResultDto.fail();
}
@RequestMapping(value = "/queryRemoteServerThenUpdatePLprc", method = RequestMethod.POST)
public ApiResultDto queryRemoteServerThenUpdatePLprc(@RequestBody List<ProfitLossStatementPrcQueryDto> items) {
@RequestMapping(value = "/updatePLprc", method = RequestMethod.POST)
public ApiResultDto updatePLprc(@RequestBody List<ProfitLossStatementPrcQueryDto> items) {
if (CollectionUtils.isEmpty(items)) {
logger.debug("the queryRemoteServerThenUpdatePL return items is empty");
logger.debug("the updatePLprc return items is empty");
return ApiResultDto.success(Collections.emptyList());
}
try {
ebsApiService.queryRemoteServerThenUpdatePLprc(items);
return ApiResultDto.success();
} catch (Exception e) {
logger.error("queryRemoteServerThenUpdatePLprc error.", e);
logger.error("updatePLprc error.", e);
}
return ApiResultDto.fail();
}
@RequestMapping(value = "/queryRemoteServerThenUpdateOAR", method = RequestMethod.POST)
public ApiResultDto queryRemoteServerThenUpdateOAR(@RequestBody List<OrganizationAccountingRateQueryDto> items) {
@RequestMapping(value = "/updateOAR", method = RequestMethod.POST)
public ApiResultDto updateOAR(@RequestBody List<OrganizationAccountingRateQueryDto> items) {
if (CollectionUtils.isEmpty(items)) {
logger.debug("the queryRemoteServerThenUpdateOAR return items is empty");
logger.debug("the updateOAR return items is empty");
return ApiResultDto.success(Collections.emptyList());
}
try {
ebsApiService.queryRemoteServerThenUpdateOAR(items);
return ApiResultDto.success();
} catch (Exception e) {
logger.error("queryRemoteServerThenUpdateOAR error.", e);
logger.error("updateOAR error.", e);
}
return ApiResultDto.fail();
}
......
package pwc.taxtech.atms.controller;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
......@@ -12,6 +13,7 @@ import pwc.taxtech.atms.constant.enums.EnumServiceType;
import pwc.taxtech.atms.dpo.ReportDto;
import pwc.taxtech.atms.dto.FileDto;
import pwc.taxtech.atms.dto.OperationResultDto;
import pwc.taxtech.atms.dto.ReportAttachDto;
import pwc.taxtech.atms.dto.vatdto.*;
import pwc.taxtech.atms.vat.entity.PeriodCellTemplateConfig;
import pwc.taxtech.atms.vat.entity.PeriodJob;
......@@ -165,9 +167,15 @@ public class ReportController {
return operationResultDto;
}
@RequestMapping(value = "loadAttachList", method = RequestMethod.GET)
public List<PwcReportAttach> loadAttachList(Long col, Long row, String templateId){
return reportService.loadAttachList(col, row, templateId);
@RequestMapping("loadAttachList")
public List<PwcReportAttach> loadAttachList(@RequestBody ReportAttachDto reportAttachDto){
System.out.println("sdsdfsd");
return reportService.loadAttachList(reportAttachDto);
}
@RequestMapping("deleteAttach")
public OperationResultDto deleteAttach(Long id){
return reportService.deleteAttach(id);
}
......
......@@ -13,6 +13,7 @@ import pwc.taxtech.atms.service.impl.RevenueConfService;
import pwc.taxtech.atms.vat.entity.RevenueConfig;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping(value = "api/v1/revenueConf")
......@@ -26,6 +27,11 @@ public class RevenueConfController extends BaseController {
return new CamelPagingResultDto<>(revenueConfService.queryPage(param));
}
@PostMapping("queryAll")
public List<RevenueConfResult> queryAll(@RequestBody RevenueConfParam param) {
return revenueConfService.queryAll(param);
}
@PostMapping("add")
public ApiResultDto addConf(@RequestBody RevConfAddDto addDto) {
revenueConfService.addConfig(addDto);
......@@ -37,5 +43,4 @@ public class RevenueConfController extends BaseController {
revenueConfService.updateConfig(config);
return ApiResultDto.success();
}
}
package pwc.taxtech.atms.controller;
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.RestController;
import pwc.taxtech.atms.dto.input.CamelPagingResultDto;
import pwc.taxtech.atms.dto.revenueDetail.RevenueDetailParam;
import pwc.taxtech.atms.dto.revenueDetail.RevenueDetailResult;
import pwc.taxtech.atms.service.impl.RevenueDetailService;
import javax.annotation.Resource;
@RestController
@RequestMapping(value = "api/v1/revenueDetail")
public class RevenueDetailController extends BaseController {
@Resource
private RevenueDetailService revenueDetailService;
@PostMapping("queryPage")
public CamelPagingResultDto<RevenueDetailResult> queryPage(@RequestBody RevenueDetailParam param) {
return new CamelPagingResultDto<>(revenueDetailService.queryPage(param));
}
}
package pwc.taxtech.atms.dto;
import pwc.taxtech.atms.dto.revenuconf.RevenueConfParam;
public class ReportAttachDto extends RevenueConfParam {
private Long activeCol;
private Long activeRow;
private String activeTemplateId;
public Long getActiveCol() {
return activeCol;
}
public void setActiveCol(Long activeCol) {
this.activeCol = activeCol;
}
public Long getActiveRow() {
return activeRow;
}
public void setActiveRow(Long activeRow) {
this.activeRow = activeRow;
}
public String getActiveTemplateId() {
return activeTemplateId;
}
public void setActiveTemplateId(String activeTemplateId) {
this.activeTemplateId = activeTemplateId;
}
@Override
public String toString() {
return "ReportAttachDto{" +
"activeCol=" + activeCol +
", activeRow=" + activeRow +
", activeTemplateId='" + activeTemplateId + '\'' +
'}';
}
}
package pwc.taxtech.atms.dto.revenueDetail;
import pwc.taxtech.atms.dto.input.CamelPagingDto;
import java.io.Serializable;
public class RevenueDetailParam implements Serializable {
private static final long serialVersionUID = 6544829900689477447L;
private CamelPagingDto pageInfo;
private String accountCode;
private String accountName;
private String type;
private String profitCenterCode;
private String profitCenterName;
private Integer taxOn;
private String productCode;
private String productName;
private Integer category;
private String projectId;
private Integer period;
private String queryDate;
public String getQueryDate() {
return queryDate;
}
public void setQueryDate(String queryDate) {
this.queryDate = queryDate;
}
public String getAccountCode() {
return accountCode;
}
public void setAccountCode(String accountCode) {
this.accountCode = accountCode;
}
public String getAccountName() {
return accountName;
}
public void setAccountName(String accountName) {
this.accountName = accountName;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getProfitCenterCode() {
return profitCenterCode;
}
public void setProfitCenterCode(String profitCenterCode) {
this.profitCenterCode = profitCenterCode;
}
public String getProfitCenterName() {
return profitCenterName;
}
public void setProfitCenterName(String profitCenterName) {
this.profitCenterName = profitCenterName;
}
public Integer getTaxOn() {
return taxOn;
}
public void setTaxOn(Integer taxOn) {
this.taxOn = taxOn;
}
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public Integer getCategory() {
return category;
}
public void setCategory(Integer category) {
this.category = category;
}
public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
}
public Integer getPeriod() {
return period;
}
public void setPeriod(Integer period) {
this.period = period;
}
public CamelPagingDto getPageInfo() {
return this.pageInfo;
}
public void setPageInfo(CamelPagingDto pageInfo) {
this.pageInfo = pageInfo;
}
}
package pwc.taxtech.atms.dto.revenueDetail;
import java.io.Serializable;
import java.math.BigDecimal;
public class RevenueDetailResult implements Serializable {
private static final long serialVersionUID = 8385521700489579616L;
private String subject;
private String account;
private String profitCenter;
private String product;
private String subjectExplain;
private String accountExplain;
private String profitCenterExplain;
private String productExplain;
private BigDecimal amount;
private String type;
private String category;
private String taxOn;
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getProfitCenter() {
return profitCenter;
}
public void setProfitCenter(String profitCenter) {
this.profitCenter = profitCenter;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
public String getSubjectExplain() {
return subjectExplain;
}
public void setSubjectExplain(String subjectExplain) {
this.subjectExplain = subjectExplain;
}
public String getAccountExplain() {
return accountExplain;
}
public void setAccountExplain(String accountExplain) {
this.accountExplain = accountExplain;
}
public String getProfitCenterExplain() {
return profitCenterExplain;
}
public void setProfitCenterExplain(String profitCenterExplain) {
this.profitCenterExplain = profitCenterExplain;
}
public String getProductExplain() {
return productExplain;
}
public void setProductExplain(String productExplain) {
this.productExplain = productExplain;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getTaxOn() {
return taxOn;
}
public void setTaxOn(String taxOn) {
this.taxOn = taxOn;
}
}
......@@ -22,7 +22,7 @@ public class WrapPeriodJobDto {
public static final String STEP_UPDATE_CONFIG = "UpdateConfig";
public static PeriodJob createReportGenJob(String projectId, Integer period, List<Template> templates) {
public static PeriodJob createReportGenJob(String projectId, Integer period, List<Template> templates,List<String> dataValidateArray) {
MyAsserts.assertNotEmpty(templates, Exceptions.NOT_FOUND_TEMPLATE_EXCEPTION);
PeriodJob job = new PeriodJob();
job.setCreateTime(new Date());
......@@ -33,10 +33,12 @@ public class WrapPeriodJobDto {
job.setCurrentStep(STEP_UPDATE_CONFIG);
setStatus(job,STEP_UPDATE_CONFIG,STATUS_BEGIN);
StringBuilder builder = new StringBuilder(STEP_UPDATE_CONFIG);
dataValidateArray.forEach(m ->{
builder.append(",").append(m);
});
templates.forEach(m -> {
builder.append(",").append(m.getCode());
});
job.setStepsCode(builder.toString());
return job;
}
......
......@@ -47,6 +47,12 @@ public class RevenueConfService extends BaseService {
return pageInfo;
}
public List<RevenueConfResult> queryAll(RevenueConfParam param) {
RevenueConfigExample example = new RevenueConfigExample();
example.createCriteria().andOrgIdEqualTo(param.getOrgId()).andStartDateLessThanOrEqualTo(param.getStartDate()).andEndDateGreaterThanOrEqualTo(param.getEndDate());
return revenueConfigMapper.selectByExample(example).stream()
.map( o -> beanUtil.copyProperties(o, new RevenueConfResult())).collect(Collectors.toList());
}
/**
* 新增配置
*
......
package pwc.taxtech.atms.service.impl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import pwc.taxtech.atms.dpo.RevenueDetailDto;
import pwc.taxtech.atms.dto.revenueDetail.RevenueDetailParam;
import pwc.taxtech.atms.dto.revenueDetail.RevenueDetailResult;
import pwc.taxtech.atms.vat.dao.TrialBalanceFinalMapper;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class RevenueDetailService extends BaseService {
@Resource
private TrialBalanceFinalMapper trialBalanceFinalMapper;
/**
* @param param
* @return
*/
public PageInfo<RevenueDetailResult> queryPage(RevenueDetailParam param) {
Page page = PageHelper.startPage(param.getPageInfo().getPageIndex(), param.getPageInfo().getPageSize());
List<RevenueDetailDto> dataList = trialBalanceFinalMapper.queryBalanceWithRevenueConfig(param.getAccountCode(), param.getAccountName(), param.getType(), param.getProfitCenterCode(), param.getProfitCenterName(), param.getTaxOn(), param.getProductCode(), param.getProductName(), param.getCategory(), param.getProjectId(), param.getPeriod(), param.getQueryDate());
PageInfo<RevenueDetailResult> pageInfo = new PageInfo<>(dataList.stream()
.map(o -> beanUtil.copyProperties(o, new RevenueDetailResult())).collect(Collectors.toList()));
pageInfo.setTotal(page.getTotal());
return pageInfo;
}
}
package pwc.taxtech.atms.vat.service.impl;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Workbook;
......@@ -23,6 +27,8 @@ import pwc.taxtech.atms.dao.*;
import pwc.taxtech.atms.dpo.ReportDto;
import pwc.taxtech.atms.dto.FileDto;
import pwc.taxtech.atms.dto.OperationResultDto;
import pwc.taxtech.atms.dto.ReportAttachDto;
import pwc.taxtech.atms.dto.revenuconf.RevenueConfResult;
import pwc.taxtech.atms.dto.vatdto.*;
import pwc.taxtech.atms.entity.*;
import pwc.taxtech.atms.exception.Exceptions;
......@@ -273,12 +279,11 @@ public class ReportServiceImpl extends BaseService {
}
private void updateConfig(String projectId, Integer period, Boolean isMergeManualData, List<Template> templates, PeriodJob job) {
setStatus(job, STATUS_BEGIN);
periodJobMapper.updateByPrimaryKey(job);
List<Long> exceptTemplateIds = templateMapper.getIdsForExceptTemplate();
clearPeriodData(projectId, period, exceptTemplateIds, isMergeManualData);
copyTemplateAndConfigFromAdmin(projectId, templates, period);
setStatus(job, STATUS_END);
periodJobMapper.updateByPrimaryKey(job);
}
private List<Template> getTemplatesByProjectId(String projectId) {
......@@ -489,13 +494,22 @@ public class ReportServiceImpl extends BaseService {
return operationResultDto;
}
List<Template> templates = getTemplatesByProjectId(projectId);
PeriodJob genJob = WrapPeriodJobDto.createReportGenJob(projectId, periodParam, templates);
List<String> dataValidateArray= new ArrayList<String>();
/*dataValidateArray.add("DA001");
dataValidateArray.add("DA002");
dataValidateArray.add("DA003");*/
dataValidateArray.add("DA004");
PeriodJob genJob = WrapPeriodJobDto.createReportGenJob(projectId, periodParam, templates, dataValidateArray);
periodJobMapper.insert(genJob);
new Thread(new Runnable() {
@Override
public void run() {
try {
//进行数据校验
DataValidation(periodParam, projectId,genJob );
updateConfig(projectId, periodParam, isMergeManualData, templates, genJob);
PeriodResources resources = reportGenerator.getPeriodResources(projectId, periodParam,
......@@ -519,6 +533,7 @@ public class ReportServiceImpl extends BaseService {
periodJobMapper.updateByPrimaryKey(genJob);
}
}
}).start();
operationResultDto.setData(new PeriodJobDto().copyFromPeriodJob(genJob));
operationResultDto.setResult(true);
......@@ -528,6 +543,67 @@ public class ReportServiceImpl extends BaseService {
}
return operationResultDto;
}
@Autowired
private TrialBalanceMapper trialBalanceMapper;
@Autowired
private AdjustmentTableMapper adjustmentTableMapper;
@Autowired
private ProfitLossStatementMapper profitLossStatementMapper;
@Autowired
private JournalEntryMapper journalEntryMapper;
/* @Autowired
private CitJour*/
//数据校验
private void DataValidation(Integer periodParam, String projectId, PeriodJob genJob) {
setStatus(genJob,"DA004", STATUS_BEGIN);
//本期余额表
/* TrialBalanceExample trialBalanceExample = new TrialBalanceExample();
TrialBalanceExample.Criteria criteria = trialBalanceExample.createCriteria();
criteria.andProjectIdEqualTo(projectId);
criteria.andPeriodEqualTo(periodParam);
TrialBalance trialBalances = trialBalanceMapper.selectByExample(trialBalanceExample).get(0);
//本期利润表
ProfitLossStatementExample profitLossStatementExample = new ProfitLossStatementExample();
ProfitLossStatementExample.Criteria criteria2 = profitLossStatementExample.createCriteria();
criteria2.andProjectIdEqualTo(projectId);
criteria2.andPeriodEqualTo(periodParam);
ProfitLossStatement profitLossStatements = profitLossStatementMapper.selectByExample(profitLossStatementExample).get(0);*/
//调整表
Map<String, Object> map1 = new HashedMap();
map1.put("projectId", projectId);
map1.put("period", periodParam);
if((periodParam+"").length() == 1){
map1.put("period", "0"+ periodParam);
}else{
map1.put("period", "" + periodParam);
}
List<AdjustmentTable> adjustmentTables = adjustmentTableMapper.selectBeforeAdjustData(map1);
Map<String, Object> map2 = new HashedMap();
map2.put("projectId", projectId);
if((periodParam+"").length() == 1){
map2.put("period", "0"+ periodParam);
}else{
map2.put("period", "" + periodParam);
}
List<JournalEntry> journalEntries = journalEntryMapper.selectNowAdjustData(map2);
for(int i =0; i< adjustmentTables.size(); i++){
for(int j =0; j< journalEntries.size(); j++){
if(journalEntries.get(j).getSegment3().equals(adjustmentTables.get(j).getSegment3()) &&
journalEntries.get(j).getSegment5().equals(adjustmentTables.get(j).getSegment5())&&
journalEntries.get(j).getSegment6().equals(adjustmentTables.get(j).getSegment6()) && journalEntries.get(j).getPeriodJrMinDr() != adjustmentTables.get(j).getPeriodDrMixCr() ){
setStatus(genJob,STATUS_ERROR );
}
}
}
setStatus(genJob, STATUS_END);
periodJobMapper.updateByPrimaryKey(genJob);
}
public List<CellTemplateReferenceDto> getTemplateReferences(int period) {
return new ArrayList<>();
......@@ -1333,17 +1409,37 @@ public class ReportServiceImpl extends BaseService {
pwcReportAttach.setUploadUser(file.getUploadUser());
pwcReportAttach.setFileUrl(file.getFileUrl());
pwcReportAttach.setSize(file.getSize());
pwcReportAttach.setRemarks(file.getRemarks());
pwcReportAttachMapper.insert(pwcReportAttach);
System.out.println("==>>>附件绑定成功");
}
public List<PwcReportAttach> loadAttachList(Long col, Long row, String templateId) {
public List<PwcReportAttach> loadAttachList(ReportAttachDto param) {
PwcReportAttachExample example = new PwcReportAttachExample();
Page page = PageHelper.startPage(param.getPageInfo().getPageIndex(), param.getPageInfo().getPageSize());
PwcReportAttachExample.Criteria criteria = example.createCriteria();
criteria.andColEqualTo(col);
criteria.andRowEqualTo(row);
criteria.andTemplateIdEqualTo(templateId);
criteria.andColEqualTo(param.getActiveCol());
criteria.andRowEqualTo(param.getActiveRow());
criteria.andTemplateIdEqualTo(param.getActiveTemplateId());
example.setOrderByClause("create_time DESC");
/* PageInfo<PwcReportAttach> pageInfo = new PageInfo<PwcReportAttach>();
pageInfo.setTotal(page.getTotal());*/
return pwcReportAttachMapper.selectByExample(example);
}
/**
* 删除附件
* @param id
* @return
*/
public OperationResultDto deleteAttach(Long id) {
PwcReportAttachExample example = new PwcReportAttachExample();
OperationResultDto<Object> objectOperationResultDto = new OperationResultDto<>();
example.createCriteria().andIdEqualTo(id);
int i = pwcReportAttachMapper.deleteByExample(example);
if(i>0){
objectOperationResultDto.setResultMsg("success");
}
return objectOperationResultDto;
}
}
package pwc.taxtech.atms.dpo;
import java.io.Serializable;
import java.math.BigDecimal;
public class RevenueDetailDto implements Serializable {
private static final long serialVersionUID = 3774022182707357862L;
private String subject;
private String account;
private String profitCenter;
private String product;
private String subjectExplain;
private String accountExplain;
private String profitCenterExplain;
private String productExplain;
private BigDecimal amount;
private String type;
private String category;
private String taxOn;
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getProfitCenter() {
return profitCenter;
}
public void setProfitCenter(String profitCenter) {
this.profitCenter = profitCenter;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
public String getSubjectExplain() {
return subjectExplain;
}
public void setSubjectExplain(String subjectExplain) {
this.subjectExplain = subjectExplain;
}
public String getAccountExplain() {
return accountExplain;
}
public void setAccountExplain(String accountExplain) {
this.accountExplain = accountExplain;
}
public String getProfitCenterExplain() {
return profitCenterExplain;
}
public void setProfitCenterExplain(String profitCenterExplain) {
this.profitCenterExplain = profitCenterExplain;
}
public String getProductExplain() {
return productExplain;
}
public void setProductExplain(String productExplain) {
this.productExplain = productExplain;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getTaxOn() {
return taxOn;
}
public void setTaxOn(String taxOn) {
this.taxOn = taxOn;
}
}
package pwc.taxtech.atms.vat.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
......@@ -108,4 +110,5 @@ public interface AdjustmentTableMapper extends MyVatMapper {
int insertBatch(List<AdjustmentTable> rlits);
List<AdjustmentTable> selectBeforeAdjustData(Map<String,Object> map1);
}
\ No newline at end of file
package pwc.taxtech.atms.vat.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
......@@ -109,4 +111,5 @@ public interface JournalEntryMapper extends MyVatMapper {
List<JournalEntry> selectByCondition(@Param("jeCondition")JournalEntryCondition journalEntryCondition);
List<JournalEntry> selectNowAdjustData(Map<String,Object> map2);
}
\ No newline at end of file
package pwc.taxtech.atms.vat.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import pwc.taxtech.atms.MyVatMapper;
import pwc.taxtech.atms.dpo.RevenueDetailDto;
import pwc.taxtech.atms.vat.entity.TrialBalanceFinal;
import pwc.taxtech.atms.vat.entity.TrialBalanceFinalExample;
import java.util.List;
@Mapper
public interface TrialBalanceFinalMapper extends MyVatMapper {
/**
......@@ -105,4 +107,18 @@ public interface TrialBalanceFinalMapper extends MyVatMapper {
* @mbg.generated
*/
int updateByPrimaryKey(TrialBalanceFinal record);
List<RevenueDetailDto> queryBalanceWithRevenueConfig(
@Param("accountCode") String accountCode,
@Param("accountName") String accountName,
@Param("type") String type,
@Param("profitCenterCode") String profitCenterCode,
@Param("profitCenterName") String profitCenterName,
@Param("taxOn") Integer taxOn,
@Param("productCode") String productCode,
@Param("productName") String productName,
@Param("category") Integer category,
@Param("projectId") String projectId,
@Param("period") Integer period,
@Param("queryDate") String queryDate);
}
\ No newline at end of file
......@@ -35,6 +35,8 @@ public class AdjustmentTable extends BaseEntity implements Serializable {
*/
private String organizationId;
/**
* Database Column Remarks:
* 项目ID
......@@ -288,6 +290,14 @@ public class AdjustmentTable extends BaseEntity implements Serializable {
*/
private BigDecimal periodDrBeq;
/**
* 本位币借方发生额-本位币贷方发生额
*/
private BigDecimal periodDrMixCr;
/**
* Database Column Remarks:
* 本位币本期贷方发生额
......@@ -496,6 +506,14 @@ public class AdjustmentTable extends BaseEntity implements Serializable {
return segment3;
}
public BigDecimal getPeriodDrMixCr() {
return periodDrMixCr;
}
public void setPeriodDrMixCr(BigDecimal periodDrMixCr) {
this.periodDrMixCr = periodDrMixCr;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column adjustment_table.segment3
......
......@@ -221,6 +221,15 @@ public class JournalEntry extends BaseEntity implements Serializable {
* @mbg.generated
*/
private String voucherNum;
private BigDecimal periodJrMinDr;
public BigDecimal getPeriodJrMinDr() {
return periodJrMinDr;
}
public void setPeriodJrMinDr(BigDecimal periodJrMinDr) {
this.periodJrMinDr = periodJrMinDr;
}
/**
* Database Column Remarks:
......
......@@ -666,4 +666,35 @@
order by ${orderByClause}
</if>
</select>
<select id ="selectBeforeAdjustData" parameterType="java.util.Map" resultType="pwc.taxtech.atms.vat.entity.AdjustmentTable">
SELECT
max(CASE #{period}
WHEN 0 THEN
0
ELSE
(
t.period_dr_beq - t.period_cr_beq
) END )
periodDrMixCr,
max(t.period),
max(t.project_id),
t.segment3,
t.segment5,
t.segment6
FROM
adjustment_table t
WHERE
1 = 1
<if test="projectId!= '' and projectId != null">
and t.project_id = #{projectId}
</if>
<if test="period !=null and period != '' ">
AND substring(t.period, -2) = ${period}
</if>
group by t.segment3, t.segment5, t.segment6
</select>
</mapper>
\ No newline at end of file
......@@ -1299,4 +1299,25 @@
order by ${orderByClause}
</if>
</select>
<select id ="selectNowAdjustData" parameterType="java.util.Map" resultType="pwc.taxtech.atms.vat.entity.JournalEntry">
SELECT
max(t.entered_dr - t.entered_cr) as periodJrMinDr,
max(t.period),
max(t.project_id),
t.segment3,
t.segment5,
t.segment6
FROM
journal_entry t
where 1 =1 and t.description like '%调表不调账%'
<if test="projectId != null and projectId != '' ">
and t.project_id = #{projectId}
</if>
<if test="period!= null and period != '' ">
and substring(t.period, -2) = ${period}
</if>
group by t.segment3, t.segment5, t.segment6
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pwc.taxtech.atms.vat.dao.TrialBalanceFinalMapper">
<select id="queryBalanceWithRevenueConfig" resultType="pwc.taxtech.atms.dpo.RevenueDetailDto">
select detail.*
from (
select tbf.segment1 as subject,
tbf.segment3 as account,
tbf.segment5 profitCenter,
tbf.segment6 product,
tbf.segment1_name subjectExplain,
tbf.segment3_name accountExplain,
tbf.segment5_name profitCenterExplain,
tbf.segment6_name productExplain,
tbf.period_dr amount,
rc.name type,
rc.revenue_type category,
rc.tax_type taxOn,
case
when tbf.segment3 like '4001%' and rc.id is null then 1
when tbf.segment3 like '4002%' and rc.id is null then 1
when tbf.segment3 like '4010%' and rc.id is null then 1
when tbf.segment3 like '8002%' and rc.id is null then 1
<![CDATA[WHEN rc.id IS NOT NULL and (rc.start_date > #{queryDate} or rc.end_date < #{queryDate}) then 1]]>
<![CDATA[WHEN rc.id IS NOT NULL and rc.start_date <= #{queryDate} and rc.end_date >= #{queryDate} THEN 2]]>
else 3 end as isEmpty
from trial_balance_final as tbf
left join
revenue_config as rc
on
rc.org_id = tbf.organization_id
and
rc.tb_segment3 = tbf.segment3
and
rc.tb_segment5 = tbf.segment5
and
rc.tb_segment6 = tbf.segment6
where
tbf.project_id = #{projectId}
and tbf.period = #{period}
<if test="accountCode != null and accountCode != ''">
and tbf.segment3 like concat('%',#{accountCode},'%')
</if>
<if test="accountName != null and accountName != ''">
and tbf.segment3_name like concat('%',#{accountName},'%')
</if>
<if test="profitCenterCode != null and profitCenterCode != ''">
and tbf.segment5 like concat('%',#{profitCenterCode},'%')
</if>
<if test="profitCenterName != null and profitCenterName != ''">
and tbf.segment5_name like concat('%',#{profitCenterName},'%')
</if>
<if test="productCode != null and productCode != ''">
and tbf.segment6 like concat('%',#{productCode},'%')
</if>
<if test="productName != null and productName != ''">
and tbf.segment6_name like concat('%',#{productName},'%')
</if>
<if test="type != null">
and rc.name = #{type}
</if>
<if test="category != null">
and rc.revenue_type = #{category}
</if>
<if test="taxOn != null">
and rc.tax_type = #{taxOn}
</if>
) as detail
where
<![CDATA[detail.isEmpty < 3]]>
order by detail.isEmpty
</select>
</mapper>
\ No newline at end of file
......@@ -966,6 +966,22 @@ var vatModule = angular.module('app.vat', ['ui.grid', 'ui.grid.selection', 'ui.g
sticky: true
});
$stateProvider.state({
name: 'vat.reductionData.revenueDetail',
url: '/revenueDetail',
views: {
'@vat.reductionData': {
controller: ['$scope', '$stateParams', 'appTranslation',
function ($scope, $stateParams, appTranslation) {
appTranslation.load([appTranslation.vat]);
}],
template: '<vat-revenue-detail></vat-revenue-detail>',
}
},
resolve: scriptDependencyProvider.createDependenciesMap(scriptDependencyProvider.vat),
deepStateRedirect: true,
sticky: true
});
$stateProvider.state({
name: 'vat.reductionData.unbilledInvoice',
url: '/unbilledInvoice',
......
......@@ -1841,8 +1841,6 @@
"extractInvoiceData": "Extract Invoice Data",
"ExtractInvoiceDataTitle": "Extract Invoice Data",
"TBInterCompany": "Inter-Company",
"~MustBeEndOneApp": "I Must be the End One, please!"
"~MustBeEndOneApp": "I Must be the End One, please!",
"dataValidate" : "data Validate"
}
\ No newline at end of file
......@@ -1745,6 +1745,7 @@
"c_vatType": "增值税纳税类型",
"c_year": "申报年",
"caculateData": "数据处理",
"revenueDetail": "收入明细",
"cancelled": "已作废",
"caseNumberColon": "事件号",
"chartData": "数据",
......@@ -2106,6 +2107,31 @@
"RevenueGetOrgError": "获取机构信息失败",
"RevenueAddSuccess": "添加成功",
"RevenueUpdateSuccess": "更新成功",
"dataValidate" : "数据校验",
"RevDetail": "收入明细",
"RevSearchAccountCode": "科目代码",
"RevSearchAccountName": "科目名称",
"RevSearchProfitCenterCode": "利润中心代码",
"RevSearchProfitCenterName": "利润中心名称",
"RevSearchProductCode": "产品代码",
"RevSearchProductName": "产品名称",
"RevSearchType": "收入类型",
"RevSearchCategory": "收入类别",
"RevSearchTaxOn": "计税方法",
"RevDetailSearch": "查询",
"RevDetailReset": "重置",
"RevDetailColSerialNo": "序号",
"RevDetailColSubject": "主体",
"RevDetailColAccount": "科目",
"RevDetailColProfitCenter": "利润中心",
"RevDetailProduct": "产品",
"RevDetailColSubjectExp": "主体说明",
"RevDetailColAccountExp": "科目说明",
"RevDetailColProfitCenterExp": "利润中心说明",
"RevDetailProductExp": "产品说明",
"RevDetailAmount": "发生额",
"RevDetailType": "收入类型",
"RevDetailCategory": "收入类别",
"RevDetailTaxOn": "计税方法",
"~MustBeEndOneApp": "我必须是最后一个!"
}
\ No newline at end of file
......@@ -2338,11 +2338,8 @@
columns: [{caption: '序号', dataField: "xh"},
{caption: '文件名', dataField: "fileName",cellTemplate: function (container, options) {
try {
$('<i class="fa fa-pencil-square-o" style="cursor: pointer"></i>&nbsp;&nbsp;')
.on('click', function () {
location.href = options.data.fileUrl;
});
$('<a href="'+options.data.fileUrl+'" target="_blank" style="cursor: pointer">"'+options.data.fileName+'"</a>&nbsp;&nbsp;')
.appendTo(container);
}
catch (e) {
$log.error(e);
......@@ -2352,15 +2349,25 @@
{caption: '文件大小', dataField: "size"},
{caption: '备注信息', dataField: "remarks"},
{caption: '用户', dataField: "uploadUser"},
{caption: '操作时间', dataField: "createTime"}
{caption: '操作时间', dataField: "createTime"},
{caption : '操作' ,cellTemplate: function (container, options) {
try {
$('<button type="button" class="btn btn-in-grid" onclick = "deleteAttach('+options.data.id + ')"><i class="material-icons middle" style="vertical-align: text-bottom">delete</i>删除</button>&nbsp;&nbsp;')
.appendTo(container);
}
catch (e) {
$log.error(e);
}
} }
],
showBorders: true,
showBorders: true/*,
editing: {
mode: "cell",
allowAdding: false,
allowUpdating: false,
allowDeleting: true
},
allowDeleting: true,
}*/,
onInitialized : function(e){
$scope.dataGrid = e.component;
},
......@@ -2368,27 +2375,61 @@
dataSource: '_gridData'
}
};
window.deleteAttach = function(id, data){
swal({
title: "warning!",
text: "确定删除该附件?",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: $translate.instant('Yes'),
cancelButtonText: $translate.instant('No'),
closeOnConfirm: true,
closeOnCancel: true
},
function (tmpConfirm) {
if (tmpConfirm) {
vatReportService.deleteAttach(id).success(function(res){
if(res.resultMsg == "success"){
$scope.loadAttach();
}
});
}
});
}
//加载附件信息列表
$scope.loadAttach = function () {
$scope._gridData = [];
$scope.activeSheet.pageInfo = $scope.pagingOptions;
if ($scope.activeSheet.activeRow && $scope.activeSheet.activeCol && $scope.activeSheet.activeTemplateId) {
//获取附件信息
vatReportService.loadAttachList($scope.activeSheet).success(function (data) {
var _xh = 0;
for(var i = 0; i< data.length; i++){
var _data = {
xh : i+1,
fileName : data[i].fileName,
size : data[i].size,
remarks : data[i].remarks,
uploadUser : data[i].uploadUser,
createTime : data[i].createTime
if (data) {
var _xh = 0;
for(var i = 0; i< data.length; i++){
/* var _data1 = {
xh : i+1,
fileName : data[i].fileName,
size : data[i].size,
remarks : data[i].remarks,
uploadUser : data[i].uploadUser,
createTime : data[i].createTime,
fileUrl : data[i].
}*/
data[i].xh = i+1;
$scope._gridData.push(data[i]);
_xh = i+1;
}
$scope._gridData.push(_data);
_xh = i+1;
$scope.xh = _xh;
//$scope._gridData = data;
//$scope.pagingOptions.totalItems = data.totalCount;
}else {
SweetAlert.error($translate.instant('SystemError'));
}
$scope.xh = _xh;
//刷新附件列表
// $scope.dataGrid.refresh();
// dataGrid.refresh();
......@@ -2441,7 +2482,8 @@
size : dataSource.data.size,
remarks : dataSource.data.remarks,
uploadUser : dataSource.data.uploadUser,
createTime : dataSource.data.createTime
createTime : dataSource.data.createTime,
fileUrl : dataSource.data.fileUrl
}
$scope._gridData.push(_data);
......@@ -2494,6 +2536,22 @@
}
}
});
//点击分页
/* //刷新页面
$scope.refreshConfigGrid = function () {
$http.post('/revenueConf/queryPage',{pageInfo: $scope.pagingOptions}, apiConfig.createVat())
.success(function (res) {
if (res && res.list) {
$scope.pageConfDataSource = res.list;
$scope.pagingOptions.totalItems = res.pageInfo.totalCount;
}else {
SweetAlert.error($translate.instant('SystemError'));
}
})
};*/
//保存按钮
$scope.uploadCellAttachment = function () {
uploadfile($scope.fileNameWrapper);
......@@ -2504,8 +2562,12 @@
(function () {
//分页的设置
$scope.pagingOptions = {
pageIndex: 1, //当前页码
totalItems: 0, //总数据
pageSize: 20, //每页多少条数据
};
$scope.hidePanel = hidePanel;
$scope.isExpand = true;
$scope.togglePanel = togglePanel;
......
......@@ -280,11 +280,18 @@
<div class="attach-upload" ng-show="tabType===5" style="">
<button style="margin-bottom:20px;" class="btn btn-primary" ng-click="openAddCellAttachmentDialog();">上传文档
</button>
<div class="dt-init-wrapper">
<div id="cellAttachmentDataGrid" dx-data-grid="cellAttachmentDataGirdOptions"
class="dx-widget dx-visibility-change-handler" role="application" aria-label="Data grid"
style="height: 450px;">
</div>
<!-- <div class="page-footer">
<ack-pagination page-options="pagingOptions"
refresh-table="loadAttach()"></ack-pagination>
</div>-->
</div>
</div>
</div>
......
......@@ -500,8 +500,9 @@ constant.vatPermission = {
saveCode: '02.003.002.002'
},
revenueDetailCode:'02.003.004',
caculateDataCode: '02.003.003',
unbilledInvoiceCode: '02.003.004',
},
reportView: {
......@@ -1435,7 +1436,7 @@ constant.fileTypeList = [
{code:2,type:"所有者权益变动表和汇率表"}
];
constant.maxButtonTitleLength = 20;
......
......@@ -196,8 +196,12 @@
return $http.get('/Report/hasManualDataSource/' + projectId+ '/' +period, apiConfig.createVat());
},
loadAttachList : function(activeSheet){
return $http.get('/Report/loadAttachList?col='+ activeSheet.activeCol + "&row=" + activeSheet.activeRow + "&templateId=" +activeSheet.activeTemplateId, apiConfig.createVat());
}
return $http.post('/Report/loadAttachList' , activeSheet, apiConfig.createVat());
},
deleteAttach : function(id){
var config = { isBusyRequest: true };
return $http.get('/Report/deleteAttach?id=' + id, apiConfig.create(config));
}
};
......
citModule.controller('VatRevenueConfigController', ['$scope', '$log', '$translate', '$timeout', 'SweetAlert', '$q',
vatModule.controller('VatRevenueConfigController', ['$scope', '$log', '$translate', '$timeout', 'SweetAlert', '$q',
'$interval','dxDataGridService','$http','apiConfig',
function ($scope, $log, $translate, $timeout, SweetAlert, $q, $interval,dxDataGridService,$http,apiConfig) {
'use strict';
......
......@@ -946,7 +946,9 @@
// }
else if (data[constant.vatPermission.dataManage.caculateDataCode]) {
$state.go('vat.reductionData.caculateData');
} /*else if (data[constant.vatPermission.dataManage.unbilledInvoiceCode]) {
}else if (data[constant.vatPermission.dataManage.revenueDetailCode]){
$state.go('vat.reductionData.revenueDetail');
} /*else if (data[constant.vatPermission.dataManage.unbilledInvoiceCode]) {
$state.go('vat.reductionData.unbilledInvoice');
}*/ else if (data[constant.vatPermission.reportView.bsplCode] || data[constant.vatPermission.reportView.taxReturnCode]) {
$state.go('vat.generateReport');
......
......@@ -103,6 +103,10 @@ function ($scope, $log, $translate, $location, loginContext, enums, vatSessionSe
name: 'caculateData', permission: constant.vatPermission.dataManage.caculateDataCode,
text: $translate.instant('caculateData'), icon: 'fa fa-random', show: true
},
{
name: 'revenueDetail', permission: constant.vatPermission.dataManage.revenueDetailCode,
text: $translate.instant('revenueDetail'), icon: 'fa fa-random', show: true
},
/*{
name: 'accountMapping', permission: constant.vatPermission.dataManage.accountMappingCode,
text: $translate.instant('accountMapping'), icon: 'fa fa-map', show: true
......
......@@ -199,13 +199,27 @@
task.prototype.code =null;
vatReportService.getTemplate(vatSessionService.project.id, constant.serviceType.VAT, vatSessionService.month).then(function (report) {
var result = [];
// result.push({ name: $translate.instant('ProcessData'), items: [new task('GenerateStdTb', 'unstarted')] });
// result.push({ name: $translate.instant('ProcessData'), items: [new task('CompareUnbilled', 'unstarted')] });
// result.push({ name: $translate.instant('ProcessData'), items: [new task('CaculateUnbilled', 'unstarted'), new task('UpdateReportConfig', 'unstarted'), new task('GenerateFinanceReport', 'unstarted')] });
/* var dataValidateItems = [/!*"本期余额表累计数+导入调整表是否等于本期利润表累计数", "本期余额表本期数+导入调整表是否等于本期利润表本期数", "上期利润表本年累进+本期利润表本期数是否等于本期利润表本年累计",*!/ ""];
var dataValidateCode = [/!*'DA001', 'DA002', 'DA003',*!/ ''];*/
//数据配置
result.push({ name: $translate.instant('ProcessData'), items: [new task('UpdateReportConfig', 'unstarted')] });
result[result.length - 1].items.forEach(function (t) { t.seqNo = result.length - 1 });
//数据校验
var reItem = [];
reItem.push( new task(Math.ceil(Math.random()*1000000).toString(), "unstarted","上期导入调整表是否等于本期调整日记账发生额(摘要中包含“调表不调账”关键字)", "DA004"));
result.push({ name: $translate.instant('dataValidate'),isReportTask: true, items : reItem});
fixedRef = [];
if (report && report.data && report.data.data) {
result.push({
......@@ -238,7 +252,6 @@
i++;
taskList = taskList.concat(item.items);
});
$scope.tasks = result;
getInitTaskStatus();
});
......@@ -556,7 +569,8 @@
};
var updateTasksStatus = function(job){
var items = $scope.tasks[1].items;
var items = $scope.tasks;
var tasks = JSON.parse(job.status)
if(job.jobStatus == 'End'){
items.forEach(function(item,index){
item.status = 'completed';
......@@ -565,14 +579,13 @@
$scope.tasks[0].items[0].status = 'completed';
$scope.tasks[0].items[0].text= $translate.instant('completed');
if($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.jobStatus=='Running'|| job.jobStatus=='Error'){
var tasks = JSON.parse(job.status)
var updateConfig = tasks[0];
if(updateConfig.status == 'Error'){
......@@ -583,7 +596,7 @@
$scope.tasks[0].items[0].status = 'processing';
}
$scope.tasks[0].items[0].text= $translate.instant($scope.tasks[0].items[0].status);
items.forEach(function(item,index){
/* items.forEach(function(item,index){
tasks.forEach(function(task){
if(task.code==item.code){
if(task.status == 'Error'){
......@@ -596,12 +609,28 @@
item.text = $translate.instant(item.status);
}
})
});
});*/
if(job.jobStatus == 'Error'){
if($scope.timer)$interval.cancel($scope.timer);
}
}
items.forEach(function(item,index){
item.items.forEach(function (_task, index) {
tasks.forEach(function(task){
if(task.code==_task.code){
if(task.status == 'Error'){
_task.status = 'error';
}else if(task.status == 'End'){
_task.status = 'completed';
}else if(task.status == 'Begin'){
_task.status = 'processing';
}
_task.text = $translate.instant(_task.status);
}
})
})
});
}
var getInitTaskStatus = function(){
......@@ -620,13 +649,11 @@
$interval.cancel($scope.timer);
}
});
},1000);
}
}else{
$log.debug("not running job");
}
});
}
......
......@@ -29,11 +29,11 @@
<script type="text/ng-template" id="group_template">
<div>
<div ng-if="group.items.length > 1" class="task" style="margin-bottom:5px;padding-left:20px;">{{group.name}}</div>
<ul ng-if="group.items.length > 1" ng-repeat="task in group.items track by $index">
<div ng-if="group.items.length >= 1" class="task" style="margin-bottom:5px;padding-left:20px;">{{group.name}}</div>
<ul ng-if="group.items.length >= 1" ng-repeat="task in group.items track by $index">
<li ng-include="'task_template'" />
</ul>
<div ng-if="group.items.length == 1" ng-repeat="task in group.items track by $index" style="height:42px;" ng-include="'task_template'" />
<!-- <div ng-if="group.items.length == 1" ng-repeat="task in group.items track by $index" style="height:42px;" ng-include="'task_template'" />-->
</script>
<script type="text/ng-template" id="task_template">
......
<div class="vat-revenue-detail">
<div class="header-title">
<div style="display:inline-block"><span class="title-name">{{'RevDetail' | translate }}</span></div>
</div>
<div class="content-container">
<div class="header">
<div class="search-panel">
<table class="table borderless table-bottom">
<tr>
<td><span class="lbl-name">{{'RevSearchAccountCode' | translate }}:</span></td>
<td>
<input class="form-control" name="name" ng-model="searchParam.accountCode" maxlength="20">
</td>
<td><span class="lbl-name">{{'RevSearchAccountName' | translate }}:</span>:</td>
<td>
<input class="form-control" name="name" ng-model="searchParam.accountName" maxlength="20">
</td>
<td><span class="lbl-name">{{'RevSearchType' | translate }}:</span></td>
<td>
<div dx-select-box="searchOptions.typeOptions"></div>
</td>
<td ng-show="!hasShowMoreSearchBox">
<button type="button" class="btn btn-primary invoice-btn"
ng-click="searchboxService.search()">查询
</button>
</td>
<td ng-show="!hasShowMoreSearchBox">
<button type="button" class="btn btn-primary invoice-btn"
ng-click="searchboxService.resetBox()">重置
</button>
</td>
<td ng-show="!hasShowMoreSearchBox">
<span class="lbl-name">
<a href="javacript:void(0)" ng-click="searchboxService.showOrHideSearchBox()"><span><i
class="fa fa-chevron-down" aria-hidden="true"></i><span
style="margin-left:3px;">更多查询</span></span></a>
</span>
</td>
</tr>
<tr ng-show="hasShowMoreSearchBox">
</td>
<td><span class="lbl-name">{{'RevSearchProfitCenterCode' | translate }}:</span></td>
<td>
<input class="form-control" name="name" ng-model="searchParam.profitCenterCode" maxlength="20">
</td>
<td><span class="lbl-name">{{'RevSearchProfitCenterName' | translate }}:</span></td>
<td>
<input class="form-control" name="name" ng-model="searchParam.profitCenterName" maxlength="20">
</td>
<td><span class="lbl-name">{{'RevSearchTaxOn' | translate }}:</span></td>
<td>
<div dx-select-box="searchOptions.taxOnOptions"></div>
</td>
</tr>
<tr ng-show="hasShowMoreSearchBox">
<td><span class="lbl-name">{{'RevSearchProductCode' | translate }}:</span></td>
<td>
<input class="form-control" name="name" ng-model="searchParam.productCode" maxlength="20">
</td>
<td><span class="lbl-name">{{'RevSearchProductName' | translate }}:</span></td>
<td>
<input class="form-control" name="name" ng-model="searchParam.productName" maxlength="20">
</td>
<td><span class="lbl-name">{{'RevSearchCategory' | translate }}:</span></td>
<td>
<div dx-select-box="searchOptions.categoryOptions"></div>
</td>
<td>
<button type="button" class="btn btn-primary invoice-btn"
ng-click="searchboxService.search()">查询
</button>
</td>
<td>
<button type="button" class="btn btn-primary invoice-btn"
ng-click="searchboxService.resetBox()">重置
</button>
</td>
<td>
<a href="javascript:void(0);" ng-click="searchboxService.showOrHideSearchBox()">
<span><i class="fa fa-chevron-up" aria-hidden="true"></i><span
style="margin-left:3px;">收起</span></span></a>
</td>
</tr>
</table>
</div>
</div>
<div class="body">
<div class="grid-container">
<div id="invoiceGridContainer" dx-data-grid="revenueGridOptions">
<div data-options="dxTemplate:{ name:'editCellTemplate' }">
</div>
</div>
</div>
<div class="page-footer">
<ack-pagination page-options="pagingOptions"
refresh-table="refreshGrid()"></ack-pagination>
</div>
</div>
</div>
</div>
vatModule.directive('vatRevenueDetail', ['$log', 'browserService', '$translate', 'region', '$timeout',
function ($log, browserService, $translate, region, $timeout) {
$log.debug('vatRevenueDetail.ctor()...');
return {
restrict: 'E',
templateUrl: '/app/vat/reduction/vat-revenue-detail/vat-revenue-detail.html' + '?_=' + Math.random(),
scope: {},
controller: 'vatRevenueDetailController'
}
}
]);
\ No newline at end of file

@border-color: #d4d4d4;
@margin-left: 60px;
@container-width: 970px;
@control-width: 120px;
//sharing
.header {
padding: 15px;
img {
margin-top: 3px;
}
.search-panel {
border: 1px solid #CDCDCD;
border-radius: 5px;
padding: 5px;
.row {
margin: 10px 0;
.filter-item {
display: inline-block;
vertical-align: middle;
height: 32px;
}
.fileter-label {
text-align: right;
height: 32px;
padding-top: 5px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
padding-left: 0;
}
.invoice-btn {
min-width: 90px;
height: 34px;
}
}
.table-bottom {
margin-bottom: 0px !important;
.lbl-name {
word-break: keep-all;
}
td {
vertical-align: middle;
}
}
}
}
.table-bottom {
margin-bottom: 0px !important;
.lbl-name {
word-break: keep-all;
}
td {
vertical-align: middle;
}
}
.red-color {
color: #d04a02;
/*vertical-align: middle;*/
}
.dx-widget {
font-size: 13px;
}
//share
.header-title {
padding: 10px;
.sub-title {
font-family: "Microsoft YaHei";
font-weight: 400;
font-size: 12px;
color: rgb(153, 153, 153);
}
.title-name {
font-family: "Microsoft YaHei Bold", "Microsoft YaHei Regular", "Microsoft YaHei";
font-weight: 700;
font-style: normal;
}
}
.inline-block {
display: inline-block;
.left-side {
display: inline-block;
}
.right-side {
float: right;
display: inline-block;
}
}
.invoice-btn {
min-width: 80px;
height: 28px;
margin-right: 10px;
font-weight: normal;
font-size: 13px;
font-family: 'Microsoft YaHei';
}
.invoice-card {
width: 120px;
height: 130px;
border: 1px dashed @border-color;
border: 1px dashed rgba(0, 0, 0, 0.2);
border-radius: 5px;
background-color: #fff; /*#fbfbfb;*/
text-align: center;
cursor: pointer;
float: left;
margin: 10px;
position: relative;
&:hover {
background-color: #fff !important;
box-shadow: #a06748 1px 1px;
}
//卡片顶部的绝对定位
.dx-checkbox-container {
position: absolute;
left: 59px;
top: -8px;
}
}
.span-btn {
color: #6699CC;
padding: 0px 4px;
cursor: pointer;
font-size: 12px;
}
.borderless td, .borderless th {
border: none !important;
vertical-align: middle !important;
}
.page-footer {
display: inline-block;
float: right;
/*padding-right: 20px;*/
}
.invoice-table-dialog {
.modal-dialog {
min-width: 650px;
.modal-title {
color: red;
}
}
}
.invoiceNumber-link {
cursor: pointer;
/*color:#6699cc;*/
}
.vat-revenue-detail {
height: 100% !important;
padding-top: 0px !important;
position: relative;
font-size: 13px;
.dx-datagrid-group-closed:before {
/* font-family: "ui-grid"; */
font-style: normal;
font-weight: normal;
speak: none;
display: inline-block;
text-decoration: inherit;
width: 1em;
margin-right: .2em;
text-align: center;
font-variant: normal;
text-transform: none;
line-height: 1em;
margin-left: .2em;
content: inherit!important;
}
.header-title {
padding: 10px;
.title-name {
font-family: "Microsoft YaHei Bold", "Microsoft YaHei Regular", "Microsoft YaHei";
font-weight: 700;
font-style: normal;
}
}
.custom-control {
width: @control-width !important;
height: 25px;
line-height: 25px;
}
.btn-search {
width: @control-width !important;
}
.content-container {
height: calc(~'100% - 40px');
position: relative;
.body {
.buttom-row {
padding: 15px;
display: inline-block;
width: 100%;
.left-side {
display: inline-block;
/*padding-left:5px;*/
.select-title {
margin-left: 20px;
}
.select-number {
padding: 0 1px;
color: red;
}
}
.right-side {
float: right;
display: inline-block;
/*padding-right:5px;*/
.btn {
margin-left: 20px;
}
}
}
.grid-container {
padding: 0px 15px;
/*height: 350px;*/
/*height:100%;*/
#invoiceGridContainer {
max-height: 100%;
}
.dx-datagrid-rowsview .dx-row > .dx-master-detail-cell {
padding: 0px !important;
}
.dx-datagrid-nowrap.dx-datagrid-headers .dx-header-row > td > .dx-datagrid-text-content {
white-space: normal !important;
}
.internal-grid-container {
padding: 10px 10px 10px 0;
& > div:first-child {
padding: 0 0 5px 10px;
font-size: 13px;
/*font-weight: bold;*/
}
}
}
}
}
.importVerifyInvoiceModal {
.modal-dialog {
height: 200px;
width: 610px;
}
.modal-footer {
text-align: left;
}
}
}
......@@ -142,6 +142,7 @@ function ($scope, $rootScope, $q, $log, $timeout, $state, $translate, projectSer
constant.vatPermission.dataPreview.inputInvoice.queryCode,
constant.vatPermission.dataManage.caculateDataCode,
constant.vatPermission.dataManage.revenueDetailCode,
// constant.vatPermission.dataManage.accountMappingCode,
// constant.vatPermission.dataManage.goodsMappingCode,
// constant.vatPermission.dataManage.unbilledInvoiceCode,
......@@ -331,6 +332,10 @@ function ($scope, $rootScope, $q, $log, $timeout, $state, $translate, projectSer
name: 'reductionData.caculateData', state: 'reductionData.caculateData', num: 3,
permission: constant.vatPermission.dataManage.caculateDataCode, url: '#/vat/reductionData/caculateData'
});
subMenus.push({
name: 'reductionData.revenueDetail', state: 'reductionData.revenueDetail', num: 3,
permission: constant.vatPermission.dataManage.revenueDetailCode, url: '#/vat/reductionData/revenueDetail'
});
}
else if (data[constant.vatPermission.dataManage.accountMappingCode]) {
$scope.menus.push({
......
......@@ -8,23 +8,23 @@
<span class="vat-subheader" style="margin:0px 20px 0px 0px;font-weight:bold" title="{{projectName}}">{{projectName | limitString:15}}</span>
<!--<span class="vat-subheader" style="margin:0px 20px 0px 0px;font-weight:bold">{{projectName}}</span>-->
<span class="project-statuts-title">
<i id="imgProjectStatus" class="fa fa-lightbulb-o"
<i id="imgProjectStatus" class="fa fa-lightbulb-o"
ng-class="{'project-statuts-title-i-inactive' : layoutVatSession.project.projectStatusList[period] === 10}"
aria-hidden="true" ng-click="showProjectStatus()">&nbsp;&nbsp;{{statusTitle}}</i>
</span>
<!--<i id="imgProjectStatus" class="fa fa-info" aria-hidden="true" ng-click="showProjectStatus()"></i>-->
<i class="fa fa-calendar vat-subheader red-color" style="font-size:20px;"></i>
<i class="fa fa-calendar vat-subheader red-color" style="font-size:20px;"></i>
<input type="text" id="vatDatepicker" class="datepicker vat-subheader" style="border-width:0;outline:none;" readonly="readonly" />
<div id="vat-menu-buttons" style="display:inline-block;">
<a ng-repeat="menu in menus" ui-sref-active="active" ng-click="setReportSession(menu.name);" ui-sref=".{{menu.name}}"
atms-permission permission-control-type="ngIf" permission-code="{{menu.permission}}">{{menu.state | translate}}</a>
</div>
<!--<button class="btn btn-vat-primary" translate="TriggerMessageSchedulerJob" ng-click="triggerSchedulerJob()"></button>-->
</div>
<!--<div id="vat-menu-buttons">
<a ng-repeat="menu in menus" ui-sref-active="active" ui-sref=".{{menu.name}}"><span>{{menu.num}}</span>{{menu.name | translate}}</a>
</div>-->
......@@ -39,24 +39,24 @@
ng-class="[{ 'slideup': menuState === menuStates.collapsing }, { 'slidedown': menuState === menuStates.expanding }, { 'expanded': menuState === menuStates.collapsing || menuState === menuStates.collapsed }]"></div>
<!-- 项目状态 -->
<script type="text/ng-template" id="model-project-status.html" class="model-project-status">
<!--<div class="modal-header">
<!--<div class="modal-header">
<div class="modal-title">
</div>
</div>-->
<div class="modal-body">
<i class="fa fa-times" aria-hidden="true" style="float: right; font-size: 11px; color: #CF2D1B" ng-click="closeModal()"></i>
<i class="fa fa-times" aria-hidden="true" style="float: right; font-size: 11px; color: #CF2D1B" ng-click="closeModal()"></i>
<ul class="ul-status">
<li>
<i class="fa fa-circle" aria-hidden="true" ng-class="{'i-inactive' : layoutVatSession.project.projectStatusList[period] === 10}">&nbsp;&nbsp;&nbsp;{{startStatusText}}</i>
<i class="fa fa-circle" aria-hidden="true" ng-class="{'i-inactive' : layoutVatSession.project.projectStatusList[period] === 10}">&nbsp;&nbsp;&nbsp;{{startStatusText}}</i>
<div class="verticalLine" ng-class="{'verticalLine-inactive' : layoutVatSession.project.projectStatusList[period] === 10}">&nbsp;</div>
</li>
<li ng-click="showSubStatus()">
<i class="fa fa-dot-circle-o" aria-hidden="true" ng-class="{'i-inactive' : layoutVatSession.project.projectStatusList[period] < 20}">&nbsp;&nbsp;&nbsp;{{'ProjectStatusImported' | translate }}</i>
<div class="verticalLine" ng-class="{'verticalLine-inactive' : layoutVatSession.project.projectStatusList[period] < 20, 'verticalLine-add-bottom-line' : displaySubStatus}">&nbsp;</div>
<ul ng-show="displaySubStatus">
<ul ng-show="displaySubStatus">
<li ng-repeat="item in subStatusList track by $index">
<i class="fa fa-check-circle" aria-hidden="true" ng-class="{'i-inactive' : !item.isImported}">&nbsp;&nbsp;{{item.name }}</i>
<div ng-show="$index < subStatusList.length - 1" class="vertical-bottom-line" ng-class="{'verticalLine-inactive' : !item.isImported}">&nbsp;</div>
......@@ -68,12 +68,12 @@
<div class="verticalLine" ng-class="{'verticalLine-inactive' : layoutVatSession.project.projectStatusList[period] < 30}">&nbsp;</div>
</li>
<li>
<i class="fa fa-circle" aria-hidden="true" ng-class="{'i-inactive' : layoutVatSession.project.projectStatusList[period] < 40}">&nbsp;&nbsp;&nbsp;{{'ProjectStatusGenerated' | translate }} </i>
<i class="fa fa-circle" aria-hidden="true" ng-class="{'i-inactive' : layoutVatSession.project.projectStatusList[period] < 40}">&nbsp;&nbsp;&nbsp;{{'ProjectStatusGenerated' | translate }} </i>
<div class="verticalLine" ng-class="{'verticalLine-inactive' : layoutVatSession.project.projectStatusList[period] < 40}">&nbsp;</div>
</li>
<li>
<i class="fa fa-circle" aria-hidden="true" ng-class="{'i-inactive' : layoutVatSession.project.projectStatusList[period] < 50}">
&nbsp;&nbsp;{{'ProjectStatusReportSubmitted' | translate }}
&nbsp;&nbsp;{{'ProjectStatusReportSubmitted' | translate }}
&nbsp;&nbsp;<span ng-show="submitDetailDto.isDone" style="font-size:12px">{{submitDetailDto.finishedData}}</span>
</i>
<div class="verticalLine" ng-class="{'verticalLine-inactive' : layoutVatSession.project.projectStatusList[period] < 50}">&nbsp; </div>
......@@ -93,7 +93,7 @@
<li>
<i class="fa fa-circle" aria-hidden="true" ng-class="{'i-inactive' : layoutVatSession.project.projectStatusList[period] < 100}">&nbsp;&nbsp;&nbsp;{{'ProejctStatusCompleted' | translate }} </i>
</li>
</ul>
</div>
......@@ -102,5 +102,5 @@
</div>-->
</script>
</div>
\ No newline at end of file
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