From 5c199b3d37a36c314d34e0703ce4c61c84d595ca Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 27 Dec 2022 10:44:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9C=9F=E5=88=9D=E6=AC=A0?= =?UTF-8?q?=E6=AC=BE=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serve/modules/bms/entity/BmsSupplier.java | 9 ++ .../modules/pay/entity/PayHistoryItem.java | 86 +++++++++++++++++++ .../pay/mapper/PayHistoryItemMapper.java | 14 +++ .../pay/service/PayHistoryItemService.java | 16 ++++ .../impl/PayHistoryItemServiceImpl.java | 31 +++++++ .../service/impl/PayPaymentServiceImpl.java | 72 +++++++++++++--- .../impl/VtbVerificationServiceImpl.java | 1 - 7 files changed, 216 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/pay/entity/PayHistoryItem.java create mode 100644 src/main/java/com/qs/serve/modules/pay/mapper/PayHistoryItemMapper.java create mode 100644 src/main/java/com/qs/serve/modules/pay/service/PayHistoryItemService.java create mode 100644 src/main/java/com/qs/serve/modules/pay/service/impl/PayHistoryItemServiceImpl.java diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java index 2a1140a7..3192872e 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.bms.entity; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.io.Serializable; import java.util.List; @@ -134,6 +135,14 @@ public class BmsSupplier implements Serializable { @JsonProperty private Boolean delFlag; + /** 初始化当前欠费 */ + @NotNull(message = "初始化当前欠费不能为空") + private BigDecimal initCurAmount; + + /** 初始化欠费(历史记录) */ + @NotNull(message = "初始化欠费(历史记录)不能为空") + private BigDecimal initHisAmount; + /** 当前用户ID */ @TableField(exist = false) private String currUserId; diff --git a/src/main/java/com/qs/serve/modules/pay/entity/PayHistoryItem.java b/src/main/java/com/qs/serve/modules/pay/entity/PayHistoryItem.java new file mode 100644 index 00000000..f0c1fcbb --- /dev/null +++ b/src/main/java/com/qs/serve/modules/pay/entity/PayHistoryItem.java @@ -0,0 +1,86 @@ +package com.qs.serve.modules.pay.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 支付历史明细项 实体类 + * @author YenHex + * @since 2022-12-27 + */ +@Data +@TableName("pay_history_item") +public class PayHistoryItem implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + @TableId(type = IdType.AUTO) + private Long id; + + /** 支付类型 */ + @NotBlank(message = "支付类型不能为空") + @Length(max = 7,message = "支付类型长度不能超过7字") + private String payType; + + /** 支付id */ + @NotNull(message = "支付id不能为空") + private Long paymentId; + + /** 供应商id */ + @NotNull(message = "供应商id不能为空") + private Long supplierId; + + /** 支付金额 */ + @NotNull(message = "支付金额不能为空") + private BigDecimal itemPayAmount; + + /** 备注 */ + @Length(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** 创建时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @TableField(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 创建人 */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** 更新人 */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + +} + diff --git a/src/main/java/com/qs/serve/modules/pay/mapper/PayHistoryItemMapper.java b/src/main/java/com/qs/serve/modules/pay/mapper/PayHistoryItemMapper.java new file mode 100644 index 00000000..7937bb72 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/pay/mapper/PayHistoryItemMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.pay.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.pay.entity.PayHistoryItem; + +/** + * 支付历史明细项 Mapper + * @author YenHex + * @date 2022-12-27 + */ +public interface PayHistoryItemMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/pay/service/PayHistoryItemService.java b/src/main/java/com/qs/serve/modules/pay/service/PayHistoryItemService.java new file mode 100644 index 00000000..5fe75336 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/pay/service/PayHistoryItemService.java @@ -0,0 +1,16 @@ +package com.qs.serve.modules.pay.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.pay.entity.PayHistoryItem; +import java.util.List; +/** + * 支付历史明细项 服务接口 + * @author YenHex + * @date 2022-12-27 + */ +public interface PayHistoryItemService extends IService { + + List listByPaymentId(Long id); + +} + diff --git a/src/main/java/com/qs/serve/modules/pay/service/impl/PayHistoryItemServiceImpl.java b/src/main/java/com/qs/serve/modules/pay/service/impl/PayHistoryItemServiceImpl.java new file mode 100644 index 00000000..890233bf --- /dev/null +++ b/src/main/java/com/qs/serve/modules/pay/service/impl/PayHistoryItemServiceImpl.java @@ -0,0 +1,31 @@ +package com.qs.serve.modules.pay.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.pay.entity.PayHistoryItem; +import com.qs.serve.modules.pay.service.PayHistoryItemService; +import com.qs.serve.modules.pay.mapper.PayHistoryItemMapper; + +import java.util.List; + +/** + * 支付历史明细项 服务实现类 + * @author YenHex + * @since 2022-12-27 + */ +@Slf4j +@Service +@AllArgsConstructor +public class PayHistoryItemServiceImpl extends ServiceImpl implements PayHistoryItemService { + + @Override + public List listByPaymentId(Long id) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(PayHistoryItem::getPaymentId,id); + return this.list(lqw); + } +} + diff --git a/src/main/java/com/qs/serve/modules/pay/service/impl/PayPaymentServiceImpl.java b/src/main/java/com/qs/serve/modules/pay/service/impl/PayPaymentServiceImpl.java index 20c96ed6..a44f2f33 100644 --- a/src/main/java/com/qs/serve/modules/pay/service/impl/PayPaymentServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/pay/service/impl/PayPaymentServiceImpl.java @@ -7,9 +7,11 @@ import com.qs.serve.common.util.AuthContextUtils; import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.bms.service.BmsSupplierService; import com.qs.serve.modules.pay.common.PaymentType; +import com.qs.serve.modules.pay.entity.PayHistoryItem; import com.qs.serve.modules.pay.entity.PayPaymentItem; import com.qs.serve.modules.pay.entity.bo.PayPaymentBo; import com.qs.serve.modules.pay.entity.dto.PayPaymentAmountDto; +import com.qs.serve.modules.pay.service.PayHistoryItemService; import com.qs.serve.modules.pay.service.PayPaymentItemService; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.service.SysUserService; @@ -47,6 +49,7 @@ public class PayPaymentServiceImpl extends ServiceImpl0){ Assert.throwEx("支付不能超过待支付金额!"); } + //截断:添加历史金额支付记录 + BigDecimal supplierHisAmount = supplier.getInitCurAmount(); + PayHistoryItem historyItem = null; + if(supplierHisAmount.compareTo(BigDecimal.ZERO)>0){ + historyItem = new PayHistoryItem(); + if(supplierHisAmount.compareTo(currentAmount)>=0){ + historyItem.setPayType(payType); + historyItem.setSupplierId(paymentBo.getSupplierId()); + historyItem.setItemPayAmount(currentAmount); + historyItem.setRemark(paymentBo.getRemark()); + supplier.setInitCurAmount(supplierHisAmount.subtract(currentAmount)); + currentBalance = BigDecimal.ZERO; + }else { + historyItem.setPayType(payType); + historyItem.setSupplierId(paymentBo.getSupplierId()); + historyItem.setItemPayAmount(supplierHisAmount); + historyItem.setRemark(paymentBo.getRemark()); + supplier.setInitCurAmount(BigDecimal.ZERO); + currentBalance = currentAmount.subtract(supplierHisAmount); + } + + } List verificationSubjectList = amountDto.getVerificationSubjectList(); List paymentItemList = new ArrayList<>(); List verificationSubjectUpdateList = new ArrayList<>(); for (VtbVerificationSubject verificationSubject : verificationSubjectList) { - currentBalance = this.buildPaymentItems(paymentBo, currentBalance, paymentItemList, verificationSubjectUpdateList, verificationSubject); if(currentBalance.compareTo(BigDecimal.ZERO)==0){ break; } + currentBalance = this.buildPaymentItems(paymentBo, currentBalance, paymentItemList, verificationSubjectUpdateList, verificationSubject); } PayPayment payPayment = new PayPayment(); payPayment.setPayType(payType); @@ -88,20 +113,29 @@ public class PayPaymentServiceImpl extends ServiceImpl actIds = paymentItemList.stream().map(PayPaymentItem::getActivityId).distinct().collect(Collectors.toList()); + //保存历史金额 + if(historyItem!=null){ + historyItem.setPaymentId(payPayment.getId()); + payHistoryItemService.save(historyItem); + } //关联活动编码 - List activityList = activityService.listByIds(actIds); - for (PayPaymentItem paymentItem : paymentItemList) { - for (TbsActivity activity : activityList) { - if(activity.getId().equals(paymentItem.getActivityId())){ - paymentItem.setActivityCode(activity.getActivityCode()); - break; + if(paymentItemList.size()>0){ + List actIds = paymentItemList.stream().map(PayPaymentItem::getActivityId).distinct().collect(Collectors.toList()); + List activityList = activityService.listByIds(actIds); + for (PayPaymentItem paymentItem : paymentItemList) { + for (TbsActivity activity : activityList) { + if(activity.getId().equals(paymentItem.getActivityId())){ + paymentItem.setActivityCode(activity.getActivityCode()); + break; + } } + paymentItem.setPaymentId(payPayment.getId()); } - paymentItem.setPaymentId(payPayment.getId()); + paymentItemService.saveBatch(paymentItemList); + } + if(verificationSubjectUpdateList.size()>0){ + verificationSubjectService.updateBatchById(verificationSubjectUpdateList); } - verificationSubjectService.updateBatchById(verificationSubjectUpdateList); - paymentItemService.saveBatch(paymentItemList); return payPayment; } @@ -165,6 +199,9 @@ public class PayPaymentServiceImpl extends ServiceImpl paymentItemList = paymentItemService.listByPaymentId(id); + List historyItemList = payHistoryItemService.listByPaymentId(id); + List historyItemIds = historyItemList.stream().map(PayHistoryItem::getId) + .distinct().collect(Collectors.toList()); List paymentItemIds = paymentItemList.stream().map(PayPaymentItem::getId) .distinct().collect(Collectors.toList()); List verSubjectIds = paymentItemList.stream().map(PayPaymentItem::getVerificationSubjectId) @@ -191,6 +228,7 @@ public class PayPaymentServiceImpl extends ServiceImpl vtbVerificationSubjectList = verificationSubjectService.list(lqw); - BigDecimal totalAmount = BigDecimal.ZERO; + BmsSupplier supplier = supplierService.getById(supplierId); BigDecimal hasAmount = BigDecimal.ZERO; + //添加历史金额支持 + BigDecimal totalAmount = supplier.getInitCurAmount(); + if(totalAmount.compareTo(BigDecimal.ZERO)>0){ + LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); + lqw2.eq(PayHistoryItem::getSupplierId,supplierId); + List historyItems = payHistoryItemService.list(lqw2); + for (PayHistoryItem historyItem : historyItems) { + hasAmount = hasAmount.add(historyItem.getItemPayAmount()); + } + } for (VtbVerificationSubject verificationSubject : vtbVerificationSubjectList) { totalAmount = totalAmount.add(verificationSubject.getUsedAmount()); hasAmount = hasAmount.add(verificationSubject.getPayAmount()); diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java index 73438553..74b6ccdf 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java @@ -108,7 +108,6 @@ public class VtbVerificationServiceImpl extends ServiceImpl