| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546 |
- package com.dk.mdm.service.mac;
- import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
- import com.dk.common.exception.BaseBusinessException;
- import com.dk.common.infrastructure.annotaiton.Pagination;
- import com.dk.common.infrastructure.constant.Constant;
- import com.dk.common.infrastructure.enums.ErrorCodeEnum;
- import com.dk.common.response.ResponseCodeEnum;
- import com.dk.common.response.ResponseResultUtil;
- import com.dk.common.response.ResponseResultVO;
- import com.dk.mdm.mapper.ivt.InboundMapper;
- import com.dk.mdm.mapper.ivt.OutboundMapper;
- import com.dk.mdm.mapper.mac.AccountItemMapper;
- import com.dk.mdm.mapper.mac.OtherPayableMapper;
- import com.dk.mdm.mapper.mac.OtherReceivableMapper;
- import com.dk.mdm.mapper.mst.MoneyAccountItemMapper;
- import com.dk.mdm.mapper.mst.MoneyAccountMapper;
- import com.dk.mdm.model.pojo.ivt.Inbound;
- import com.dk.mdm.model.pojo.ivt.Outbound;
- import com.dk.mdm.model.pojo.mac.Account;
- import com.dk.mdm.mapper.mac.AccountMapper;
- import com.dk.common.service.BaseService;
- import com.dk.common.mapper.BaseMapper;
- import com.dk.mdm.model.pojo.mac.AccountItem;
- import com.dk.mdm.model.pojo.mac.OtherPayable;
- import com.dk.mdm.model.pojo.mac.OtherReceivable;
- import com.dk.mdm.model.pojo.mst.MoneyAccount;
- import com.dk.mdm.model.query.mac.AccountItemQuery;
- import com.dk.mdm.model.response.mac.AccountItemResponse;
- import com.dk.mdm.model.response.mac.AccountResponse;
- import com.dk.mdm.service.mst.MoneyAccountService;
- import org.springframework.stereotype.Service;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.transaction.annotation.Transactional;
- import java.math.BigDecimal;
- import java.util.List;
- import java.util.Map;
- import java.util.UUID;
- @Service
- @Transactional
- public class AccountService extends BaseService<Account> {
- @Override
- public String getPrimaryKey() {
- return "object_id";
- }
- @Override
- public BaseMapper<Account> getRepository() {
- return accountMapper;
- }
- @Autowired
- private AccountMapper accountMapper;
- @Autowired
- private AccountItemMapper accountItemMapper;
- @Autowired
- private MoneyAccountService moneyAccountService;
- @Autowired
- private MoneyAccountMapper moneyAccountMapper;
- @Autowired
- private MoneyAccountItemMapper moneyAccountItemMapper;
- @Autowired
- private OutboundMapper outboundMapper;
- @Autowired
- private InboundMapper inboundMapper;
- @Autowired
- private OtherReceivableMapper otherReceivableMapper;
- @Autowired
- private OtherPayableMapper otherPayableMapper;
- /**
- * @desc : 查看来源单据,总单加明细
- * @author : 姜永辉
- * @date : 2024/3/6 10:36
- */
- public ResponseResultVO selectById(String id) {
- //根据id查询
- AccountResponse accountResponse = accountMapper.selectById(id);
- List<AccountItemResponse> accountItemResponses = accountItemMapper.getReceivableAccountItem(new AccountItemQuery().setObjectId(id));
- accountResponse.setList(accountItemResponses);
- return ResponseResultUtil.success(accountResponse);
- }
- /**
- * @desc : 只查询总单, 不包含总单加明细
- * @author : 姜永辉
- * @date : 2024/3/6 10:36
- */
- public ResponseResultVO selectAccountById(String id) {
- //根据id查询
- AccountResponse accountResponse = accountMapper.selectById(id);
- return ResponseResultUtil.success(accountResponse);
- }
- /**
- * @desc : 查询明细的总数量
- * @author : 姜永辉
- * @date : 2024/3/6 10:36
- */
- public ResponseResultVO countByCond(AccountItemQuery accountItemQuery) {
- //根据id查询
- Long aLong = accountItemMapper.countByCond(accountItemQuery);
- return ResponseResultUtil.success(aLong);
- }
- /**
- * @desc : 查询应收账款明细
- * @author : 付斌
- * @date : 2024-02-28 13:25
- */
- @Pagination
- public ResponseResultVO<?> getReceivableAccountItem(AccountItemQuery accountItemQuery) {
- List<AccountItemResponse> accountItemResponse = accountItemMapper.getReceivableAccountItem(accountItemQuery);
- return ResponseResultUtil.success(accountItemResponse);
- }
- /**
- * @desc : 查询应付账款明细
- * @author : 付斌
- * @date : 2024-02-28 13:25
- */
- @Pagination
- public ResponseResultVO<?> getPayableAccountItem(AccountItemQuery accountItemQuery) {
- List<AccountItemResponse> accountItemResponse = accountItemMapper.getPayableAccountItem(accountItemQuery);
- return ResponseResultUtil.success(accountItemResponse);
- }
- /********************* 账款部分共通方法 begin **********************/
- /**
- * @desc : 获取账款总表,没有则新建(客户)
- * @author : 付斌
- * @date : 2024-03-23 16:32
- */
- public Account getCusAccountForUpdate(String objectId) {
- return getAccountForUpdate(objectId, Constant.ObjectType.CUS.getName());
- }
- /**
- * @desc : 获取账款总表,没有则新建(供应商)
- * @author : 付斌
- * @date : 2024-03-23 16:32
- */
- public Account getSupAccountForUpdate(String objectId) {
- return getAccountForUpdate(objectId, Constant.ObjectType.SUP.getName());
- }
- /**
- * @desc : 更新总帐上收款类字段
- * @author : 付斌
- * @date : 2024-03-22 11:08
- */
- public void updateReceipt(String objectId) {
- Account accountForUpdate = accountMapper.selectByIdForUpdate(objectId);
- Map<String, Object> mapSumAmtRecPay = accountItemMapper.getSumAmtRecPay(objectId);
- BigDecimal sumAmtRec = new BigDecimal(mapSumAmtRecPay.get("sumAmtRec").toString());
- // 可退金额 = 总收款额-应收应款额+优惠金额
- BigDecimal sumReceiptResidue = sumAmtRec.subtract(accountForUpdate.getReceivableHandle()).add(accountForUpdate.getReceivableWaive());
- // 如果可退金额小于0 ,则提示余额不足
- if (sumReceiptResidue.compareTo(BigDecimal.ZERO) == -1) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.RESIDUE_NO_LESS.getMessage());
- }
- // 更新账款总表上的收款总额和可用金额
- Account accountUpdate = new Account();
- accountUpdate.setReceipt(sumAmtRec).setReceiptResidue(sumReceiptResidue).setObjectId(objectId);
- super.updateByUuid(accountUpdate);
- }
- /**
- * @desc : 更新总帐上付款类字段
- * @author : 付斌
- * @date : 2024-03-22 11:08
- */
- public void updatePayment(String objectId) {
- Account accountForUpdate = accountMapper.selectByIdForUpdate(objectId);
- Map<String, Object> mapSumAmtRecPay = accountItemMapper.getSumAmtRecPay(objectId);
- BigDecimal sumAmtPay = new BigDecimal(mapSumAmtRecPay.get("sumAmtPay").toString());
- // 可退金额 = 总收款额-应收应款额+优惠金额
- BigDecimal sumPaymentResidue = sumAmtPay.subtract(accountForUpdate.getPayableHandle()).add(accountForUpdate.getPayableWaive());
- // 如果可退金额小于0 ,则提示余额不足
- if (sumPaymentResidue.compareTo(BigDecimal.ZERO) == -1) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.RESIDUE_NO_LESS.getMessage());
- }
- // 更新账款总表上的收款总额和可用金额
- Account accountUpdate = new Account();
- accountUpdate.setPayment(sumAmtPay).setPaymentResidue(sumPaymentResidue).setObjectId(objectId);
- super.updateByUuid(accountUpdate);
- }
- /**
- * @desc : 更新资金账户余额
- * @author : 付斌
- * @date : 2024-03-22 11:08
- */
- public void updateMac(String macId) {
- if(macId == null){
- return;
- }
- // 查询当前账户流水合计
- Map<String, Object> mapSumAmtInflow = moneyAccountItemMapper.getSumAmtInflow(macId);
- BigDecimal sumAmtInflow = new BigDecimal(mapSumAmtInflow.get("sumAmtInflow").toString());
- // 更新资金账户
- MoneyAccount moneyAccountForUpdate = moneyAccountMapper.selectByIdForUpdate(macId);
- // 如果账户不允许为负数
- if(!moneyAccountForUpdate.getFlgNegative()) {
- // 如果余额小于0 ,则提示余额不足
- if (sumAmtInflow.compareTo(BigDecimal.ZERO) == -1) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.RESIDUE_NO_LESS.getMessage());
- }
- }
- // 更新账款总表上的收款总额和可用金额
- MoneyAccount moneyAccountUpdate = new MoneyAccount();
- moneyAccountUpdate.setBalance(sumAmtInflow).setMacId(macId);
- moneyAccountService.updateByUuid(moneyAccountUpdate);
- }
- /**
- * @desc : 应收记账
- * @author : 付斌
- * @date : 2024-03-22 11:08
- */
- public void accReceivable(String invoiceId, String biznisType) {
- // 账款明细
- AccountItem accountItemInsert = new AccountItem();
- // 账务对象Id
- String objectId = null;
- if ("t_psi_outbound".equals(biznisType)) {
- Outbound outbound = outboundMapper.selectByIdForUpdate(invoiceId);
- objectId = outbound.getCusId();
- // 当前单据已经记账
- if (outbound.getReceivableId() != null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISACC.getMessage());
- }
- // 账务日期不能为空
- if (outbound.getOutDate() == null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ACC_DATE_ISNULL.getMessage());
- }
- // 插入账款明细
- accountItemInsert.setAccItemType(Constant.accItemType.YING_SHOU.getName())
- .setObjectId(objectId).setOrgId(outbound.getOrgId()).setStaffId(outbound.getStaffId())
- .setAccDate(outbound.getOutDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName())
- .setAmtShould(outbound.getOutAmt()).setAmtResidue(outbound.getOutAmt())
- .setBiznisType(biznisType).setBiznisId(outbound.getOutId()).setBiznisNo(outbound.getOutNo())
- .setMakeStaff(outbound.getMakeStaff()).setCpId(outbound.getCpId());
- accountItemMapper.insert(accountItemInsert);
- // 更新源单上的账款明细Id
- LambdaUpdateWrapper<Outbound> updateWrapper = new LambdaUpdateWrapper<>();
- updateWrapper.set(Outbound::getReceivableId, UUID.fromString(accountItemInsert.getItemId())).eq(Outbound::getOutId, UUID.fromString(invoiceId));
- outboundMapper.update(null, updateWrapper);
- }
- // 其他收入单
- else if ("t_mac_other_receivable".equals(biznisType)) {
- OtherReceivable otherReceivable = otherReceivableMapper.selectByIdForUpdate(invoiceId);
- objectId = otherReceivable.getObjectId();
- // 当前单据已经记账
- if (otherReceivable.getAccItemId() != null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISACC.getMessage());
- }
- // 账务日期不能为空
- if (otherReceivable.getAccDate() == null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ACC_DATE_ISNULL.getMessage());
- }
- // 插入账款明细
- accountItemInsert.setAccItemType(Constant.accItemType.YING_SHOU.getName())
- .setObjectId(objectId).setOrgId(otherReceivable.getOrgId()).setStaffId(otherReceivable.getStaffId())
- .setAccDate(otherReceivable.getAccDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName())
- .setAmtShould(otherReceivable.getSumAmtReceivable()).setAmtResidue(otherReceivable.getSumAmtReceivable())
- .setBiznisType(biznisType).setBiznisId(otherReceivable.getReceivableId()).setBiznisNo(otherReceivable.getReceivableNo())
- .setMakeStaff(otherReceivable.getMakeStaff()).setCpId(otherReceivable.getCpId());
- accountItemMapper.insert(accountItemInsert);
- // 更新源单上的账款明细Id
- LambdaUpdateWrapper<OtherReceivable> updateWrapper = new LambdaUpdateWrapper<>();
- updateWrapper.set(OtherReceivable::getAccItemId, UUID.fromString(accountItemInsert.getItemId())).eq(OtherReceivable::getReceivableId, UUID.fromString(invoiceId));
- otherReceivableMapper.update(null, updateWrapper);
- }
- // 更新账款总表上的总应收账款和总剩余应收
- Account accountForUpdate = getCusAccountForUpdate(objectId);
- Account accountUpdate = new Account();
- accountUpdate.setReceivable(accountForUpdate.getReceivable().add(accountItemInsert.getAmtShould()))
- .setReceivableResidue(accountForUpdate.getReceivableResidue().add(accountItemInsert.getAmtShould()))
- .setObjectId(objectId);
- super.updateByUuid(accountUpdate);
- }
- /**
- * @desc : 应收反记账
- * @author : 付斌
- * @date : 2024-03-22 11:08
- */
- public void reverseReceivable(String invoiceId, String biznisType) {
- // 更新账款明细应收收款
- AccountItem accountItemForUpdate = null;
- // 账务对象Id
- String objectId = null;
- if ("t_psi_outbound".equals(biznisType)) {
- Outbound outbound = outboundMapper.selectByIdForUpdate(invoiceId);
- objectId = outbound.getCusId();
- // 当前单据已经记账
- if (outbound.getReceivableId() == null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISREVERSE.getMessage());
- }
- accountItemForUpdate = accountItemMapper.selectByIdForUpdate(outbound.getReceivableId());
- // 如果核销金额不为0,说明当前单据已核销
- if (accountItemForUpdate.getAmtHandle().compareTo(BigDecimal.ZERO) != 0) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISHANDLE.getMessage());
- }
- // 将源单上的账款明细Id更为null
- LambdaUpdateWrapper<Outbound> updateWrapper = new LambdaUpdateWrapper<>();
- updateWrapper.set(Outbound::getReceivableId, null).eq(Outbound::getOutId, UUID.fromString(invoiceId));
- outboundMapper.update(null, updateWrapper);
- }
- // 其他收入单
- else if ("t_mac_other_receivable".equals(biznisType)) {
- OtherReceivable otherReceivable = otherReceivableMapper.selectByIdForUpdate(invoiceId);
- objectId = otherReceivable.getObjectId();
- // 当前单据已经记账
- if (otherReceivable.getAccItemId() == null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISREVERSE.getMessage());
- }
- accountItemForUpdate = accountItemMapper.selectByIdForUpdate(otherReceivable.getAccItemId());
- // 如果核销金额不为0,说明当前单据已核销
- if (accountItemForUpdate.getAmtHandle().compareTo(BigDecimal.ZERO) != 0) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISHANDLE.getMessage());
- }
- // 更新源单上的账款明细Id
- LambdaUpdateWrapper<OtherReceivable> updateWrapper = new LambdaUpdateWrapper<>();
- updateWrapper.set(OtherReceivable::getAccItemId, null).eq(OtherReceivable::getReceivableId, UUID.fromString(invoiceId));
- otherReceivableMapper.update(null, updateWrapper);
- }
- // 删除账款明细
- accountItemMapper.deleteById(accountItemForUpdate.getItemId());
- // 更新账款总表上的总应收账款和总剩余应收
- Account accountForUpdate = getCusAccountForUpdate(objectId);
- Account accountUpdate = new Account();
- accountUpdate.setReceivable(accountForUpdate.getReceivable().subtract(accountItemForUpdate.getAmtShould()))
- .setReceivableResidue(accountForUpdate.getReceivableResidue().subtract(accountItemForUpdate.getAmtShould()))
- .setObjectId(objectId);
- super.updateByUuid(accountUpdate);
- }
- /**
- * @desc : 应付记账
- * @author : 付斌
- * @date : 2024-03-22 11:08
- */
- public void accPayable(String invoiceId, String biznisType) {
- // 账款明细
- AccountItem accountItemInsert = new AccountItem();
- // 账务对象Id
- String objectId = null;
- if ("t_psi_inbound".equals(biznisType)) {
- Inbound inbound = inboundMapper.selectByIdForUpdate(invoiceId);
- objectId = inbound.getSupId();
- // 当前单据已经记账
- if (inbound.getReceivableId() != null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISACC.getMessage());
- }
- // 账务日期不能为空
- if (inbound.getIntoDate() == null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ACC_DATE_ISNULL.getMessage());
- }
- // 插入账款明细
- accountItemInsert.setAccItemType(Constant.accItemType.YING_FU.getName())
- .setObjectId(objectId).setOrgId(inbound.getOrgId()).setStaffId(inbound.getStaffId())
- .setAccDate(inbound.getIntoDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName())
- .setAmtShould(inbound.getIntoAmt()).setAmtResidue(inbound.getIntoAmt())
- .setBiznisType(biznisType).setBiznisId(inbound.getIntoId()).setBiznisNo(inbound.getIntoNo())
- .setMakeStaff(inbound.getMakeStaff()).setCpId(inbound.getCpId());
- accountItemMapper.insert(accountItemInsert);
- // 更新源单上的账款明细Id
- LambdaUpdateWrapper<Inbound> updateWrapper = new LambdaUpdateWrapper<>();
- updateWrapper.set(Inbound::getReceivableId, UUID.fromString(accountItemInsert.getItemId())).eq(Inbound::getIntoId, UUID.fromString(invoiceId));
- inboundMapper.update(null, updateWrapper);
- }
- // 其他支出单
- else if ("t_mac_other_payable".equals(biznisType)) {
- OtherPayable otherPayable = otherPayableMapper.selectByIdForUpdate(invoiceId);
- objectId = otherPayable.getObjectId();
- // 当前单据已经记账
- if (otherPayable.getAccItemId() != null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISACC.getMessage());
- }
- // 账务日期不能为空
- if (otherPayable.getAccDate() == null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ACC_DATE_ISNULL.getMessage());
- }
- // 插入账款明细
- accountItemInsert.setAccItemType(Constant.accItemType.YING_SHOU.getName())
- .setObjectId(objectId).setOrgId(otherPayable.getOrgId()).setStaffId(otherPayable.getStaffId())
- .setAccDate(otherPayable.getAccDate()).setRecStatus(Constant.recStatuse.QUE_DING.getName())
- .setAmtShould(otherPayable.getSumAmtPayable()).setAmtResidue(otherPayable.getSumAmtPayable())
- .setBiznisType(biznisType).setBiznisId(otherPayable.getPayableId()).setBiznisNo(otherPayable.getPayableNo())
- .setMakeStaff(otherPayable.getMakeStaff()).setCpId(otherPayable.getCpId());
- accountItemMapper.insert(accountItemInsert);
- // 更新源单上的账款明细Id
- LambdaUpdateWrapper<OtherPayable> updateWrapper = new LambdaUpdateWrapper<>();
- updateWrapper.set(OtherPayable::getAccItemId, UUID.fromString(accountItemInsert.getItemId())).eq(OtherPayable::getPayableId, UUID.fromString(invoiceId));
- otherPayableMapper.update(null, updateWrapper);
- }
- // 更新账款总表上的总应收账款和总剩余应收
- Account accountForUpdate = getSupAccountForUpdate(objectId);
- Account accountUpdate = new Account();
- accountUpdate.setPayable(accountForUpdate.getPayable().add(accountItemInsert.getAmtShould()))
- .setPayableResidue(accountForUpdate.getPayableResidue().add(accountItemInsert.getAmtShould()))
- .setObjectId(objectId);
- super.updateByUuid(accountUpdate);
- }
- /**
- * @desc : 应付反记账
- * @author : 付斌
- * @date : 2024-03-22 11:08
- */
- public void reversePayable(String invoiceId, String biznisType) {
- // 更新账款明细应收收款
- AccountItem accountItemForUpdate = null;
- // 账务对象Id
- String objectId = null;
- if ("t_psi_inbound".equals(biznisType)) {
- Inbound inbound = inboundMapper.selectByIdForUpdate(invoiceId);
- objectId = inbound.getSupId();
- // 当前单据已经记账
- if (inbound.getReceivableId() == null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISREVERSE.getMessage());
- }
- accountItemForUpdate = accountItemMapper.selectByIdForUpdate(inbound.getReceivableId());
- // 如果核销金额不为0,说明当前单据已核销
- if (accountItemForUpdate.getAmtHandle().compareTo(BigDecimal.ZERO) != 0) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISHANDLE.getMessage());
- }
- // 将入库单上的账款明细Id更为null
- LambdaUpdateWrapper<Inbound> updateWrapper = new LambdaUpdateWrapper<>();
- updateWrapper.set(Inbound::getReceivableId, null).eq(Inbound::getIntoId, UUID.fromString(invoiceId));
- inboundMapper.update(null, updateWrapper);
- }
- // 其他支出单
- else if ("t_mac_other_payable".equals(biznisType)) {
- OtherPayable otherPayable = otherPayableMapper.selectByIdForUpdate(invoiceId);
- objectId = otherPayable.getObjectId();
- // 当前单据已经记账
- if (otherPayable.getAccItemId() == null) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISREVERSE.getMessage());
- }
- accountItemForUpdate = accountItemMapper.selectByIdForUpdate(otherPayable.getAccItemId());
- // 如果核销金额不为0,说明当前单据已核销
- if (accountItemForUpdate.getAmtHandle().compareTo(BigDecimal.ZERO) != 0) {
- throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.CURRENT_INVOICE_ISHANDLE.getMessage());
- }
- // 更新源单上的账款明细Id
- LambdaUpdateWrapper<OtherPayable> updateWrapper = new LambdaUpdateWrapper<>();
- updateWrapper.set(OtherPayable::getAccItemId, null).eq(OtherPayable::getPayableId, UUID.fromString(invoiceId));
- otherPayableMapper.update(null, updateWrapper);
- }
- // 删除账款明细
- accountItemMapper.deleteById(accountItemForUpdate.getItemId());
- // 更新账款总表上的总应收账款和总剩余应收
- Account accountForUpdate = getSupAccountForUpdate(objectId);
- Account accountUpdate = new Account();
- accountUpdate.setPayable(accountForUpdate.getPayable().subtract(accountItemForUpdate.getAmtShould()))
- .setPayableResidue(accountForUpdate.getPayableResidue().subtract(accountItemForUpdate.getAmtShould()))
- .setObjectId(objectId);
- super.updateByUuid(accountUpdate);
- }
- /**
- * @desc : 获取应收,收款汇总(制单员权限)
- * @author : 中兴
- * @date : 2024-04-03 16:32
- */
- public ResponseResultVO<?> getReceivableAccountSum(AccountItemQuery accountItemQuery){
- Map<String, Object> receivableAccountMap= accountItemMapper.getReceivableAccountSum(accountItemQuery);
- return ResponseResultUtil.success(receivableAccountMap);
- }
- /********************* 账款部分共通方法 end **********************/
- /********************* 账款部分私有方法 begin **********************/
- /**
- * @desc : 获取账款总表,没有则新建(私有方法)
- * @author : 付斌
- * @date : 2024-03-23 16:32
- */
- private Account getAccountForUpdate(String objectId, String objectType) {
- // 查询账款总表
- Account accountForUpdate = accountMapper.selectByIdForUpdate(objectId);
- // 没有账款对象,需要新建
- if (accountForUpdate == null) {
- accountForUpdate = new Account();
- accountForUpdate.setObjectId(objectId).setObjectType(objectType);
- accountMapper.insert(accountForUpdate);
- accountForUpdate = accountMapper.selectByIdForUpdate(objectId);
- }
- return accountForUpdate;
- }
- /********************* 账款部分私有方法 end **********************/
- }
|