diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/purchase/PurchaseRecordMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/purchase/PurchaseRecordMapper.java index e998401e7..ecf1a64bc 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/purchase/PurchaseRecordMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/funds/purchase/PurchaseRecordMapper.java @@ -4,9 +4,18 @@ import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO; import org.apache.ibatis.annotations.Mapper; +import java.math.BigDecimal; + /** * 购买记录 Mapper */ @Mapper public interface PurchaseRecordMapper extends BaseMapperX { + /** + * 查询机构下可开票的金额 + * + * @param organId + * @return + */ + BigDecimal getInvoicingAmount(Long organId); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java index 2287e21e6..7772d418e 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/organamount/OrganAmountServiceImpl.java @@ -13,7 +13,7 @@ import com.cf.imes.module.executor.api.funds.ExecutorFundsApi; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.AllOrganAmountRespVO; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganAmountRespVO; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganRechargeAmountRespVO; -import com.cf.imes.module.system.controller.admin.funds.purchase.PurchaseService; +import com.cf.imes.module.system.service.funds.purchase.PurchaseService; import com.cf.imes.module.system.controller.admin.funds.purchase.vo.OrgEarliestPurchaseProductRespVO; import com.cf.imes.module.system.dal.dataobject.funds.organamount.OrganAmountDO; import com.cf.imes.module.system.dal.dataobject.funds.products.ProductsDetailDO; @@ -63,38 +63,38 @@ public class OrganAmountServiceImpl implements OrganAmountService { @Override public OrganRechargeAmountRespVO recharge(Long organId, BigDecimal price, BigDecimal gift) { OrganAmountDO organAmountDO = organAmountMapper.selectOne(new LambdaQueryWrapper().eq(OrganAmountDO::getOrganId, organId)); + BigDecimal newAmount = organAmountDO.getAmount().add(price); + BigDecimal newGift = null; + if (ObjectUtil.isNotNull(gift)) { + newGift = organAmountDO.getGiftAmount().add(gift); + } int updated = organAmountMapper.update(new LambdaUpdateWrapperX() .eq(OrganAmountDO::getOrganId, organId) .eq(OrganAmountDO::getVersion, organAmountDO.getVersion()) - .setIfPresent(OrganAmountDO::getGiftAmount, gift) - .set(OrganAmountDO::getAmount, organAmountDO.getAmount().add(price)) + .set(OrganAmountDO::getGiftAmount, newGift) + .set(OrganAmountDO::getAmount, newAmount) .set(OrganAmountDO::getVersion, organAmountDO.getVersion() + 1)); // 1. 首次更新失败,认为出现并发,再查一次再更新 if (updated == 0) { organAmountDO = organAmountMapper.selectOne(new LambdaQueryWrapper().eq(OrganAmountDO::getOrganId, organId)); + newAmount = organAmountDO.getAmount().add(price); + newGift = organAmountDO.getGiftAmount().add(gift); + updated = organAmountMapper.update(new LambdaUpdateWrapperX() .eq(OrganAmountDO::getOrganId, organId) .eq(OrganAmountDO::getVersion, organAmountDO.getVersion()) - .setIfPresent(OrganAmountDO::getGiftAmount, gift) - .set(OrganAmountDO::getAmount, organAmountDO.getAmount().add(price)) + .set(OrganAmountDO::getGiftAmount, newGift) + .set(OrganAmountDO::getAmount, newAmount) .set(OrganAmountDO::getVersion, organAmountDO.getVersion() + 1)); // 2. 第二次更新失败,资金表可能不存在 if (updated == 0) { throw exception(ORGAN_RECHARGE_AMOUNT_UPDATE_ERROR); } else { - // 可用余额:现金+赠送金+支付价格 - BigDecimal availableAmount = organAmountDO.getAmount().add(price).add(organAmountDO.getGiftAmount()); - // 现金余额:现金+支付价格 - BigDecimal amount = organAmountDO.getAmount().add(price); - return new OrganRechargeAmountRespVO(availableAmount, amount, organAmountDO.getGiftAmount()); + return new OrganRechargeAmountRespVO(newAmount.add(newGift), newAmount, newGift); } } else { - // 可用余额:现金+赠送金+支付价格 - BigDecimal availableAmount = organAmountDO.getAmount().add(price).add(organAmountDO.getGiftAmount()); - // 现金余额:现金+支付价格 - BigDecimal amount = organAmountDO.getAmount().add(price); - return new OrganRechargeAmountRespVO(availableAmount, amount, organAmountDO.getGiftAmount()); + return new OrganRechargeAmountRespVO(newAmount.add(newGift), newAmount, newGift); } } @@ -169,6 +169,9 @@ public class OrganAmountServiceImpl implements OrganAmountService { organAmountRespVO.setGiftDuration(productsDetailDO.getGiftDuration()); organAmountRespVO.setGiftDurationUnit(productsDetailDO.getGiftDurationUnit()); } + + // 查询可开票金额 + organAmountRespVO.setInvoiceableAmount(purchaseService.getInvoicingAmount(organId)); return organAmountRespVO; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/purchase/PurchaseService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/purchase/PurchaseService.java similarity index 79% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/purchase/PurchaseService.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/purchase/PurchaseService.java index c8c8048d3..0f3a86a8d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/purchase/PurchaseService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/purchase/PurchaseService.java @@ -1,8 +1,10 @@ -package com.cf.imes.module.system.controller.admin.funds.purchase; +package com.cf.imes.module.system.service.funds.purchase; import com.cf.imes.module.system.controller.admin.funds.purchase.vo.OrgEarliestPurchaseProductRespVO; import com.cf.imes.module.system.dal.dataobject.funds.purchase.PurchaseRecordDO; +import java.math.BigDecimal; + /** * @author 软件购买接口 */ @@ -37,4 +39,12 @@ public interface PurchaseService { * @return */ OrgEarliestPurchaseProductRespVO getOrgEarliestProductDetail(Long organId); + + /** + * 查询可开票金额 + * + * @param organId + * @return + */ + BigDecimal getInvoicingAmount(Long organId); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/purchase/PurchaseServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/purchase/PurchaseServiceImpl.java similarity index 91% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/purchase/PurchaseServiceImpl.java rename to cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/purchase/PurchaseServiceImpl.java index 4c422721f..dd797965c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/purchase/PurchaseServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/funds/purchase/PurchaseServiceImpl.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.controller.admin.funds.purchase; +package com.cf.imes.module.system.service.funds.purchase; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -12,6 +12,7 @@ import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -58,4 +59,9 @@ public class PurchaseServiceImpl implements PurchaseService { } return null; } + + @Override + public BigDecimal getInvoicingAmount(Long organId) { + return purchaseRecordMapper.getInvoicingAmount(organId); + } } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/pay/PayOrderServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/pay/PayOrderServiceImpl.java index 12ce864aa..a1144c497 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/pay/PayOrderServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/pay/PayOrderServiceImpl.java @@ -26,7 +26,7 @@ import com.cf.imes.framework.pay.core.enums.order.PayOrderStatusRespEnum; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.system.controller.admin.funds.organamount.vo.OrganRechargeAmountRespVO; import com.cf.imes.module.system.controller.admin.funds.products.vo.product.ProductProcessorRespVO; -import com.cf.imes.module.system.controller.admin.funds.purchase.PurchaseService; +import com.cf.imes.module.system.service.funds.purchase.PurchaseService; import com.cf.imes.module.system.controller.admin.pay.vo.PayProductOrderUnifiedReqVO; import com.cf.imes.module.system.controller.admin.pay.vo.PayRechargeOrderReqVO; import com.cf.imes.module.system.dal.dataobject.funds.organamount.OrganAmountDO; @@ -272,7 +272,7 @@ public class PayOrderServiceImpl implements PayOrderService { * @return */ private BigDecimal calcGiftAmount(Long rechargeActivityId, BigDecimal rechargeAmount) { - BigDecimal totalGift = BigDecimal.ZERO; + BigDecimal totalGift = null; if (ObjectUtil.isNull(rechargeActivityId)) { return totalGift; } diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/purchase/PurchaseMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/purchase/PurchaseMapper.xml new file mode 100644 index 000000000..cb17f577c --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/funds/purchase/PurchaseMapper.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file