Commit 1dce6553 authored by 耿迪迪's avatar 耿迪迪

尾款结算修改

parent 80a13707
......@@ -3,7 +3,7 @@
<!-- 日志存放路径 -->
<property name="root" value="${log.path:-./logs}" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
......
package com.zehong.system.service.impl.debitSettlement;
import com.zehong.common.core.exception.BusinessException;
import com.zehong.common.utils.SecurityUtils;
import com.zehong.system.domain.TAccount;
import com.zehong.system.domain.TCashOperate;
import com.zehong.system.domain.TDebitCredit;
import com.zehong.system.domain.TTradeProject;
import com.zehong.system.mapper.TAccountMapper;
import com.zehong.system.mapper.TCashOperateMapper;
import com.zehong.system.mapper.TTradeProjectMapper;
import com.zehong.system.service.impl.tradeSettlement.AutoSettlePendingPayment;
import io.jsonwebtoken.lang.Collections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
......@@ -24,6 +27,8 @@ import java.util.List;
@Component
public class SettlementDebit {
private static final Logger log = LoggerFactory.getLogger(SettlementDebit.class);
@Resource
private TAccountMapper tAccountMapper;
......@@ -32,8 +37,8 @@ public class SettlementDebit {
private TDebitCredit tDebitCredit;
@Resource
private TTradeProjectMapper tTradeProjectMapper;
@Autowired
private AutoSettlePendingPayment autoSettlePendingPayment;
/**
* 借贷结算
......@@ -91,18 +96,7 @@ public class SettlementDebit {
TAccount account = getAccountInfo(deptId);
//更新可用额度
updateAccount(account,amount,operatorType);
//结算本部尾款
if("0".equals(account.getTransferSwitch())){
List<TTradeProject> pendingPaymentInfo = tTradeProjectMapper.getTradePendingPaymentInfo(deptId);
for(TTradeProject project : pendingPaymentInfo){
if(amount.compareTo(BigDecimal.ZERO) == 0){
return;
}
BigDecimal changeAmount = updatePendingPayment(amount,project);
//重新计算进账金额
amount = amount.subtract(changeAmount);
}
}
autoSettlePendingPayment.autoSettlePendingPayment(amount,account,deptId);
}
......@@ -115,6 +109,7 @@ public class SettlementDebit {
private void updateAccount(TAccount tAccount, BigDecimal amount,String operatorType){
if(amount.compareTo(BigDecimal.ZERO) == 0) return;
tAccount.setAbleAmount(tAccount.getAbleAmount().add(amount));
tAccount.setUpdateTime(new Date());
tAccountMapper.updateTAccount(tAccount);
//更新资金变动日志
TCashOperate operate = OperatorParam(tAccount.getDeptId(),amount,this.tDebitCredit.getDebitId().toString());
......@@ -133,30 +128,13 @@ public class SettlementDebit {
TAccount tAccount = new TAccount();
tAccount.setDeptId(deptId);
List<TAccount> accounts = tAccountMapper.selectTAccountList(tAccount);
assert !Collections.isEmpty(accounts) : "部门资金账户不能为空,部门id:" + deptId;
if(Collections.isEmpty(accounts)){
log.error("交易部门资金账户不能为空,部门id:" + deptId);
throw new BusinessException("交易部门资金账户不能为空!");
}
return accounts.get(0);
}
/**
* 更新尾款信息
* @param incomeAmount 进账金额
* @param project 交易项目
*/
private BigDecimal updatePendingPayment(BigDecimal incomeAmount,TTradeProject project){
//资金变动金额
BigDecimal amount = incomeAmount.compareTo(project.getPendingPayment()) == 1 ? project.getPendingPayment() : incomeAmount;
//尾款
BigDecimal pendingPayment = incomeAmount.compareTo(project.getPendingPayment()) == -1 ? project.getPendingPayment().subtract(incomeAmount) : new BigDecimal("0");
project.setPendingPayment(pendingPayment);
tTradeProjectMapper.updateTTradeProject(project);
//更新资金变动日志
TCashOperate operate = OperatorParam(project.getTradeDeptId(),amount,project.getTradeId().toString());
operate.setOperateType("3");
operate.setDocumentType("4");//1.交易单 2.借支单 3.外部采购单 4.借贷单
cashOperateMapper.insertTCashOperate(operate);
return amount;
}
/**
*
......@@ -171,6 +149,7 @@ public class SettlementDebit {
operate.setOperateAmount(amount.compareTo(BigDecimal.ZERO) == 1?amount:amount.abs());
operate.setOperateTime(new Date());
operate.setRelationDoc(receiptNum);
operate.setOperatePersonId(SecurityUtils.getLoginUser().getUser().getUserId());
return operate;
}
......
package com.zehong.system.service.impl.tradeSettlement;
import com.zehong.common.utils.SecurityUtils;
import com.zehong.system.domain.TAccount;
import com.zehong.system.domain.TCashOperate;
import com.zehong.system.domain.TTradeProject;
import com.zehong.system.mapper.TAccountMapper;
import com.zehong.system.mapper.TCashOperateMapper;
import com.zehong.system.mapper.TTradeProjectMapper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @author geng
* 自动结算交易尾款
*/
@Component
public class AutoSettlePendingPayment {
@Resource
private TTradeProjectMapper tTradeProjectMapper;
@Resource
private TAccountMapper tAccountMapper;
@Resource
private TCashOperateMapper tCashOperateMapper;
/**
* 自动结算本部尾款
* @param incomeAmount 进账金额
* @param account 账户信息
* @param deptId 部门id
*/
public void autoSettlePendingPayment(BigDecimal incomeAmount, TAccount account,Long deptId){
//判断进账金额及本部自动划拨开关是否开启
if(incomeAmount.compareTo(BigDecimal.ZERO) == 1 && "0".equals(account.getTransferSwitch())){
//结算本部尾款
List<TTradeProject> pendingPaymentInfo = tTradeProjectMapper.getTradePendingPaymentInfo(deptId);
for(TTradeProject project : pendingPaymentInfo){
if(incomeAmount.compareTo(BigDecimal.ZERO) == 0){
return;
}
//本部账户结算
BigDecimal amount = settleSelfAccountInfo(incomeAmount,project,account);
//卖方部门账户结算
settleSaleAccountInfo(amount,project);
//重新计算进账金额
incomeAmount = incomeAmount.subtract(amount);
}
}
}
/**
* 本部门账户信息变动
* @param incomeAmount 进账金额
* @param project 交易项目
* @param account 账户信息
* @return
*/
private BigDecimal settleSelfAccountInfo(BigDecimal incomeAmount,TTradeProject project,TAccount account) {
//更新项目尾款信息
BigDecimal amount = incomeAmount.compareTo(project.getPendingPayment()) == 1 ? project.getPendingPayment() : incomeAmount;
//尾款
BigDecimal pendingPayment = incomeAmount.compareTo(project.getPendingPayment()) == -1 ? project.getPendingPayment().subtract(incomeAmount) : new BigDecimal("0");
project.setPendingPayment(pendingPayment);
tTradeProjectMapper.updateTTradeProject(project);
//更新账户信息
account.setAbleAmount(account.getAbleAmount().subtract(amount));
account.setUpdateTime(new Date());
tAccountMapper.updateTAccount(account);
//添加操作记录
TCashOperate operate = new TCashOperate();
operate.setOperateDeptId(project.getTradeDeptId());
operate.setOperateAmount(amount.compareTo(BigDecimal.ZERO) == 1?amount:amount.abs());
operate.setOperateTime(new Date());
operate.setRelationDoc(project.getTradeId().toString());
operate.setOperateType("3");
//1.交易单 2.借支单 3.外部采购单 4.借贷单
operate.setDocumentType("1");
operate.setOperatePersonId(SecurityUtils.getLoginUser().getUser().getUserId());
tCashOperateMapper.insertTCashOperate(operate);
return amount;
}
/**
* 卖方部门结算
* @param amount 进账金额
* @param project 交易项目信息
*/
private void settleSaleAccountInfo(BigDecimal amount,TTradeProject project){
//更新账户信息
TAccount tAccount = new TAccount();
tAccount.setDeptId(project.getApplyDeptId());
List<TAccount> accounts = tAccountMapper.selectTAccountList(tAccount);
TAccount accountInfo = accounts.get(0);
accountInfo.setAbleAmount(accountInfo.getAbleAmount().add(amount));
accountInfo.setUpdateTime(new Date());
tAccountMapper.updateTAccount(accountInfo);
//添加操作记录
TCashOperate operate = new TCashOperate();
operate.setOperateDeptId(project.getApplyDeptId());
operate.setOperateAmount(amount.compareTo(BigDecimal.ZERO) == 1?amount:amount.abs());
operate.setOperateTime(new Date());
operate.setRelationDoc(project.getTradeId().toString());
operate.setOperateType("10");
//1.交易单 2.借支单 3.外部采购单 4.借贷单
operate.setDocumentType("1");
operate.setOperatePersonId(SecurityUtils.getLoginUser().getUser().getUserId());
tCashOperateMapper.insertTCashOperate(operate);
}
}
......@@ -11,6 +11,7 @@ import com.zehong.system.mapper.TTradeProjectMapper;
import io.jsonwebtoken.lang.Collections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
......@@ -38,6 +39,9 @@ public class SettlePendingPayment {
@Resource
private TCashOperateMapper cashOperateMapper;
@Autowired
private AutoSettlePendingPayment autoSettlePendingPayment;
/**
* 可用账户结算
*/
......@@ -77,21 +81,9 @@ public class SettlePendingPayment {
*/
private void settleSellerAbleAmount(BigDecimal incomeAmount) {
TAccount account = getAccountInfo(this.tradeProject.getApplyDeptId());
//判断是否有进账
if(incomeAmount.compareTo(BigDecimal.ZERO) == 1 && "0".equals(account.getTransferSwitch())){
//结算本部尾款
List<TTradeProject> pendingPaymentInfo = tTradeProjectMapper.getTradePendingPaymentInfo(this.tradeProject.getApplyDeptId());
for(TTradeProject project : pendingPaymentInfo){
if(incomeAmount.compareTo(BigDecimal.ZERO) == 0){
return;
}
BigDecimal amount = updatePendingPayment(incomeAmount,project);
//重新计算进账金额
incomeAmount = incomeAmount.subtract(amount);
}
}
//更新可用额度
updateAccount(account,incomeAmount);
autoSettlePendingPayment.autoSettlePendingPayment(incomeAmount,account,this.tradeProject.getApplyDeptId());
}
/**
......@@ -119,6 +111,7 @@ public class SettlePendingPayment {
private void updateAccount(TAccount tAccount,BigDecimal amount){
if(amount.compareTo(BigDecimal.ZERO) == 0) return;
tAccount.setAbleAmount(tAccount.getAbleAmount().add(amount));
tAccount.setUpdateTime(new Date());
tAccountMapper.updateTAccount(tAccount);
//更新资金变动日志
TCashOperate operate = new TCashOperate();
......@@ -129,34 +122,8 @@ public class SettlePendingPayment {
//1.交易单 2.借支单 3.外部采购单 4.借贷单
operate.setDocumentType("1");
operate.setOperateType(amount.compareTo(BigDecimal.ZERO) == 1 ? "1" : "2");
//TODO 操作人
operate.setOperatePersonId(SecurityUtils.getLoginUser().getUser().getUserId());
cashOperateMapper.insertTCashOperate(operate);
}
/**
* 更新尾款信息
* @param incomeAmount 进账金额
* @param project 交易项目
*/
private BigDecimal updatePendingPayment(BigDecimal incomeAmount,TTradeProject project){
//资金变动金额
BigDecimal amount = incomeAmount.compareTo(project.getPendingPayment()) == 1 ? project.getPendingPayment() : incomeAmount;
//尾款
BigDecimal pendingPayment = incomeAmount.compareTo(project.getPendingPayment()) == -1 ? project.getPendingPayment().subtract(incomeAmount) : new BigDecimal("0");
project.setPendingPayment(pendingPayment);
tTradeProjectMapper.updateTTradeProject(project);
//更新资金变动日志
TCashOperate operate = new TCashOperate();
operate.setOperateDeptId(project.getTradeDeptId());
operate.setOperateAmount(amount.compareTo(BigDecimal.ZERO) == 1?amount:amount.abs());
operate.setOperateTime(new Date());
operate.setRelationDoc(project.getTradeId().toString());
operate.setOperateType("3");
operate.setDocumentType("1");//1.交易单 2.借支单 3.外部采购单 4.借贷单
cashOperateMapper.insertTCashOperate(operate);
return amount;
}
}
......@@ -11,6 +11,7 @@ import com.zehong.system.mapper.TTradeProjectMapper;
import io.jsonwebtoken.lang.Collections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
......@@ -37,6 +38,9 @@ public class SettlementTrade {
@Resource
private TCashOperateMapper cashOperateMapper;
@Autowired
private AutoSettlePendingPayment autoSettlePendingPayment;
/**
* 可用账户结算
*/
......@@ -89,19 +93,7 @@ public class SettlementTrade {
BigDecimal incomeAmount = this.tradeProject.getDealPrice().subtract(this.tradeProject.getPendingPayment());
//更新可用额度
updateAccount(account,incomeAmount);
//判断是否有进账
if(incomeAmount.compareTo(BigDecimal.ZERO) == 1 && "0".equals(account.getTransferSwitch())){
//结算本部尾款
List<TTradeProject> pendingPaymentInfo = tTradeProjectMapper.getTradePendingPaymentInfo(this.tradeProject.getApplyDeptId());
for(TTradeProject project : pendingPaymentInfo){
if(incomeAmount.compareTo(BigDecimal.ZERO) == 0){
return;
}
BigDecimal amount = updatePendingPayment(incomeAmount,project);
//重新计算进账金额
incomeAmount = incomeAmount.subtract(amount);
}
}
autoSettlePendingPayment.autoSettlePendingPayment(incomeAmount,account,this.tradeProject.getApplyDeptId());
}
/**
......@@ -129,6 +121,7 @@ public class SettlementTrade {
private void updateAccount(TAccount tAccount,BigDecimal amount){
if(amount.compareTo(BigDecimal.ZERO) == 0) return;
tAccount.setAbleAmount(tAccount.getAbleAmount().add(amount));
tAccount.setUpdateTime(new Date());
tAccountMapper.updateTAccount(tAccount);
//更新资金变动日志
TCashOperate operate = OperatorParam(tAccount.getDeptId(),amount,this.tradeProject.getTradeId().toString());
......@@ -174,6 +167,7 @@ public class SettlementTrade {
operate.setOperateAmount(amount.compareTo(BigDecimal.ZERO) == 1?amount:amount.abs());
operate.setOperateTime(new Date());
operate.setRelationDoc(receiptNum);
operate.setOperatePersonId(SecurityUtils.getLoginUser().getUser().getUserId());
return operate;
}
......
......@@ -269,11 +269,12 @@
<span v-if="scope.row.operateType == '2'">交易支出</span>
<span v-if="scope.row.operateType == '3'">交易尾款扣除项目</span>
<span v-if="scope.row.operateType == '4'">采购(报销)支出</span>
<span v-if="scope.row.operateType == '9'">借支支出</span>
<span v-if="scope.row.operateType == '5'">出借-支出</span>
<span v-if="scope.row.operateType == '6'">借款-收入</span>
<span v-if="scope.row.operateType == '7'">还款-支出</span>
<span v-if="scope.row.operateType == '8'">还款进账-收入</span>
<span v-if="scope.row.operateType == '9'">借支支出</span>
<span v-if="scope.row.operateType == '10'">交易尾款收入项目</span>
</template>
</el-table-column>
<el-table-column label="金额" align="center" prop="operateAmount" />
......
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