|
|
@ -2,6 +2,7 @@ package com.ccsens.ptccsens.service; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil; |
|
|
|
import cn.hutool.core.lang.Snowflake; |
|
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
|
import com.ccsens.ptccsens.bean.dto.FinanceDto; |
|
|
|
import com.ccsens.ptccsens.bean.po.*; |
|
|
|
import com.ccsens.ptccsens.bean.vo.FinanceVo; |
|
|
@ -19,6 +20,7 @@ import org.springframework.transaction.annotation.Propagation; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
@ -49,7 +51,7 @@ public class FinanceService implements IFinanceService { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public FinanceVo.FinanceItem getByTask(FinanceDto.TaskId param, Long userId) { |
|
|
|
public FinanceVo.FinanceItem getByTask(FinanceDto.TaskId param) { |
|
|
|
FinanceVo.FinancePrepare prepare = financeDao.getPrepareByTaskId(param.getTaskDetailId()); |
|
|
|
List<FinanceVo.FinanceExpense> expenses = financeDao.getExpenseByTaskId(param.getTaskDetailId()); |
|
|
|
final FinanceVo.FinanceItem item = new FinanceVo.FinanceItem(); |
|
|
@ -88,15 +90,20 @@ public class FinanceService implements IFinanceService { |
|
|
|
if (CollectionUtil.isEmpty(proMembers)) { |
|
|
|
throw new BaseException(BasicsCodeError.NOT_MEMBER_SHEET); |
|
|
|
} |
|
|
|
// 查找对应的预算信息
|
|
|
|
PluFinanceExample financeExample = new PluFinanceExample(); |
|
|
|
financeExample.createCriteria().andTaskIdEqualTo(param.getTaskDetailId()); |
|
|
|
financeExample.setOrderByClause("id desc limit 1"); |
|
|
|
List<PluFinance> pluFinances = pluFinanceMapper.selectByExample(financeExample); |
|
|
|
log.info("财务预算信息:{}", pluFinances); |
|
|
|
if (CollectionUtil.isEmpty(pluFinances)) { |
|
|
|
throw new BaseException(BasicsCodeError.FINANCE_NOT_FOUND); |
|
|
|
PluFinance pluFinance = null; |
|
|
|
if (param.getTaskDetailId() != null && param.getTaskDetailId() != 0) { |
|
|
|
// 查找对应的预算信息
|
|
|
|
PluFinanceExample financeExample = new PluFinanceExample(); |
|
|
|
financeExample.createCriteria().andTaskIdEqualTo(param.getTaskDetailId()); |
|
|
|
financeExample.setOrderByClause("id desc limit 1"); |
|
|
|
List<PluFinance> pluFinances = pluFinanceMapper.selectByExample(financeExample); |
|
|
|
log.info("财务预算信息:{}", pluFinances); |
|
|
|
if (CollectionUtil.isEmpty(pluFinances)) { |
|
|
|
throw new BaseException(BasicsCodeError.FINANCE_NOT_FOUND); |
|
|
|
} |
|
|
|
pluFinance = pluFinances.get(0); |
|
|
|
} |
|
|
|
|
|
|
|
// 计算总金额和发票金额是否一致
|
|
|
|
if (CollectionUtil.isNotEmpty(param.getInvoiceList())) { |
|
|
|
long invoiceTotal = 0L; |
|
|
@ -113,7 +120,7 @@ public class FinanceService implements IFinanceService { |
|
|
|
apply.setId(snowflake.nextId()); |
|
|
|
apply.setMemberId(proMembers.get(0).getId()); |
|
|
|
apply.setTaskId(param.getTaskDetailId()); |
|
|
|
apply.setFinanceId(pluFinances.get(0).getId()); |
|
|
|
apply.setFinanceId(pluFinance == null ? 0 : pluFinance.getId()); |
|
|
|
apply.setApplyTime(System.currentTimeMillis()); |
|
|
|
apply.setInvoice(CollectionUtil.isEmpty(param.getInvoiceList()) ? BasicsConstant.Finance.INVOICE_UPLOAD_NO : BasicsConstant.Finance.INVOICE_UPLOAD_YES); |
|
|
|
pluFinanceApplyMapper.insertSelective(apply); |
|
|
@ -208,4 +215,55 @@ public class FinanceService implements IFinanceService { |
|
|
|
List<FinanceVo.PersonalHistory> list = financeDao.queryPersonalHistory(param, userId); |
|
|
|
return new PageInfo<>(list); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<FinanceVo.MemberFinance> queryMemberFinance(FinanceDto.MemberFinance param, Long userId) { |
|
|
|
|
|
|
|
List<FinanceVo.MemberFinance> memberFinances = financeDao.queryMemberFinance(param.getProjectId(), userId); |
|
|
|
if (CollectionUtil.isEmpty(memberFinances)) { |
|
|
|
return memberFinances; |
|
|
|
} |
|
|
|
long total = 0; |
|
|
|
for (FinanceVo.MemberFinance memberFinance: memberFinances) { |
|
|
|
total += memberFinance.getMoney(); |
|
|
|
} |
|
|
|
long finalTotal = total; |
|
|
|
memberFinances.forEach(memberFinance -> { |
|
|
|
// BigDecimal.ROUND_HALF_DOWN:五舍六入,ROUND_HALF_UP:四舍五入,为避免超过100%,选择了五舍六入
|
|
|
|
memberFinance.setPercentage(new BigDecimal(memberFinance.getMoney()*100.0/ finalTotal).setScale(2, BigDecimal.ROUND_HALF_DOWN)); |
|
|
|
}); |
|
|
|
return memberFinances; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<FinanceVo.TaskExpense> queryTaskExpense(FinanceDto.TaskExpense param, Long userId) { |
|
|
|
List<FinanceVo.TaskExpense> taskExpenses = financeDao.queryTaskExpense(param.getProjectId(), userId); |
|
|
|
long total = 0; |
|
|
|
for (FinanceVo.TaskExpense taskExpense: taskExpenses) { |
|
|
|
total += taskExpense.getMoney(); |
|
|
|
} |
|
|
|
long finalTotal = total; |
|
|
|
taskExpenses.forEach(taskExpense -> { |
|
|
|
// BigDecimal.ROUND_HALF_DOWN:五舍六入,ROUND_HALF_UP:四舍五入,为避免超过100%,选择了五舍六入
|
|
|
|
taskExpense.setPercentage(new BigDecimal(taskExpense.getMoney()*100.0/ finalTotal).setScale(2, BigDecimal.ROUND_HALF_DOWN)); |
|
|
|
}); |
|
|
|
return taskExpenses; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<FinanceVo.RowExpense> queryRowExpense(FinanceDto.RowExpense param, Long userId) { |
|
|
|
List<FinanceVo.RowExpense> rowExpenses = financeDao.queryRowExpense(param.getProjectId(), userId); |
|
|
|
long total = 0; |
|
|
|
for (FinanceVo.RowExpense rowExpense: rowExpenses) { |
|
|
|
total += rowExpense.getMoney(); |
|
|
|
} |
|
|
|
long finalTotal = total; |
|
|
|
rowExpenses.forEach(rowExpense -> { |
|
|
|
// BigDecimal.ROUND_HALF_DOWN:五舍六入,ROUND_HALF_UP:四舍五入,为避免超过100%,选择了五舍六入
|
|
|
|
rowExpense.setPercentage(new BigDecimal(rowExpense.getMoney()*100.0/ finalTotal).setScale(2, BigDecimal.ROUND_HALF_DOWN)); |
|
|
|
}); |
|
|
|
return rowExpenses; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|