Browse Source

支持期初欠款支付

mssql
Yen 3 years ago
parent
commit
5c199b3d37
  1. 9
      src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java
  2. 86
      src/main/java/com/qs/serve/modules/pay/entity/PayHistoryItem.java
  3. 14
      src/main/java/com/qs/serve/modules/pay/mapper/PayHistoryItemMapper.java
  4. 16
      src/main/java/com/qs/serve/modules/pay/service/PayHistoryItemService.java
  5. 31
      src/main/java/com/qs/serve/modules/pay/service/impl/PayHistoryItemServiceImpl.java
  6. 72
      src/main/java/com/qs/serve/modules/pay/service/impl/PayPaymentServiceImpl.java
  7. 1
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

9
src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.bms.entity; package com.qs.serve.modules.bms.entity;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
@ -134,6 +135,14 @@ public class BmsSupplier implements Serializable {
@JsonProperty @JsonProperty
private Boolean delFlag; private Boolean delFlag;
/** 初始化当前欠费 */
@NotNull(message = "初始化当前欠费不能为空")
private BigDecimal initCurAmount;
/** 初始化欠费(历史记录) */
@NotNull(message = "初始化欠费(历史记录)不能为空")
private BigDecimal initHisAmount;
/** 当前用户ID */ /** 当前用户ID */
@TableField(exist = false) @TableField(exist = false)
private String currUserId; private String currUserId;

86
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;
}

14
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<PayHistoryItem> {
}

16
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<PayHistoryItem> {
List<PayHistoryItem> listByPaymentId(Long id);
}

31
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<PayHistoryItemMapper,PayHistoryItem> implements PayHistoryItemService {
@Override
public List<PayHistoryItem> listByPaymentId(Long id) {
LambdaQueryWrapper<PayHistoryItem> lqw = new LambdaQueryWrapper<>();
lqw.eq(PayHistoryItem::getPaymentId,id);
return this.list(lqw);
}
}

72
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.entity.BmsSupplier;
import com.qs.serve.modules.bms.service.BmsSupplierService; import com.qs.serve.modules.bms.service.BmsSupplierService;
import com.qs.serve.modules.pay.common.PaymentType; 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.PayPaymentItem;
import com.qs.serve.modules.pay.entity.bo.PayPaymentBo; import com.qs.serve.modules.pay.entity.bo.PayPaymentBo;
import com.qs.serve.modules.pay.entity.dto.PayPaymentAmountDto; 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.pay.service.PayPaymentItemService;
import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.sys.service.SysUserService;
@ -47,6 +49,7 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme
private PayPaymentItemService paymentItemService; private PayPaymentItemService paymentItemService;
private VtbVerificationSubjectService verificationSubjectService; private VtbVerificationSubjectService verificationSubjectService;
private TbsActivityService activityService; private TbsActivityService activityService;
private PayHistoryItemService payHistoryItemService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -66,14 +69,36 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme
if(currentAmount.compareTo(allowAmount)>0){ if(currentAmount.compareTo(allowAmount)>0){
Assert.throwEx("支付不能超过待支付金额!"); 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<VtbVerificationSubject> verificationSubjectList = amountDto.getVerificationSubjectList(); List<VtbVerificationSubject> verificationSubjectList = amountDto.getVerificationSubjectList();
List<PayPaymentItem> paymentItemList = new ArrayList<>(); List<PayPaymentItem> paymentItemList = new ArrayList<>();
List<VtbVerificationSubject> verificationSubjectUpdateList = new ArrayList<>(); List<VtbVerificationSubject> verificationSubjectUpdateList = new ArrayList<>();
for (VtbVerificationSubject verificationSubject : verificationSubjectList) { for (VtbVerificationSubject verificationSubject : verificationSubjectList) {
currentBalance = this.buildPaymentItems(paymentBo, currentBalance, paymentItemList, verificationSubjectUpdateList, verificationSubject);
if(currentBalance.compareTo(BigDecimal.ZERO)==0){ if(currentBalance.compareTo(BigDecimal.ZERO)==0){
break; break;
} }
currentBalance = this.buildPaymentItems(paymentBo, currentBalance, paymentItemList, verificationSubjectUpdateList, verificationSubject);
} }
PayPayment payPayment = new PayPayment(); PayPayment payPayment = new PayPayment();
payPayment.setPayType(payType); payPayment.setPayType(payType);
@ -88,20 +113,29 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme
payPayment.setPayTime(LocalDateTime.now()); payPayment.setPayTime(LocalDateTime.now());
payPayment.setErpCode(paymentBo.getErpCode()); payPayment.setErpCode(paymentBo.getErpCode());
this.save(payPayment); this.save(payPayment);
List<Long> actIds = paymentItemList.stream().map(PayPaymentItem::getActivityId).distinct().collect(Collectors.toList()); //保存历史金额
if(historyItem!=null){
historyItem.setPaymentId(payPayment.getId());
payHistoryItemService.save(historyItem);
}
//关联活动编码 //关联活动编码
List<TbsActivity> activityList = activityService.listByIds(actIds); if(paymentItemList.size()>0){
for (PayPaymentItem paymentItem : paymentItemList) { List<Long> actIds = paymentItemList.stream().map(PayPaymentItem::getActivityId).distinct().collect(Collectors.toList());
for (TbsActivity activity : activityList) { List<TbsActivity> activityList = activityService.listByIds(actIds);
if(activity.getId().equals(paymentItem.getActivityId())){ for (PayPaymentItem paymentItem : paymentItemList) {
paymentItem.setActivityCode(activity.getActivityCode()); for (TbsActivity activity : activityList) {
break; 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; return payPayment;
} }
@ -165,6 +199,9 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme
Assert.throwEx("已取消,请勿重复提交"); Assert.throwEx("已取消,请勿重复提交");
} }
List<PayPaymentItem> paymentItemList = paymentItemService.listByPaymentId(id); List<PayPaymentItem> paymentItemList = paymentItemService.listByPaymentId(id);
List<PayHistoryItem> historyItemList = payHistoryItemService.listByPaymentId(id);
List<Long> historyItemIds = historyItemList.stream().map(PayHistoryItem::getId)
.distinct().collect(Collectors.toList());
List<Long> paymentItemIds = paymentItemList.stream().map(PayPaymentItem::getId) List<Long> paymentItemIds = paymentItemList.stream().map(PayPaymentItem::getId)
.distinct().collect(Collectors.toList()); .distinct().collect(Collectors.toList());
List<Long> verSubjectIds = paymentItemList.stream().map(PayPaymentItem::getVerificationSubjectId) List<Long> verSubjectIds = paymentItemList.stream().map(PayPaymentItem::getVerificationSubjectId)
@ -191,6 +228,7 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme
payPayment.setCancelFlag(1); payPayment.setCancelFlag(1);
this.updateById(payPayment); this.updateById(payPayment);
paymentItemService.removeBatchByIds(paymentItemIds); paymentItemService.removeBatchByIds(paymentItemIds);
payHistoryItemService.removeBatchByIds(historyItemIds);
verificationSubjectService.updateBatchById(verificationSubjectUpdateList); verificationSubjectService.updateBatchById(verificationSubjectUpdateList);
} }
@ -201,8 +239,18 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme
lqw.eq(VtbVerificationSubject::getPayFinishedFlag,0); lqw.eq(VtbVerificationSubject::getPayFinishedFlag,0);
lqw.eq(VtbVerificationSubject::getEffectiveFlag,1); lqw.eq(VtbVerificationSubject::getEffectiveFlag,1);
List<VtbVerificationSubject> vtbVerificationSubjectList = verificationSubjectService.list(lqw); List<VtbVerificationSubject> vtbVerificationSubjectList = verificationSubjectService.list(lqw);
BigDecimal totalAmount = BigDecimal.ZERO; BmsSupplier supplier = supplierService.getById(supplierId);
BigDecimal hasAmount = BigDecimal.ZERO; BigDecimal hasAmount = BigDecimal.ZERO;
//添加历史金额支持
BigDecimal totalAmount = supplier.getInitCurAmount();
if(totalAmount.compareTo(BigDecimal.ZERO)>0){
LambdaQueryWrapper<PayHistoryItem> lqw2 = new LambdaQueryWrapper<>();
lqw2.eq(PayHistoryItem::getSupplierId,supplierId);
List<PayHistoryItem> historyItems = payHistoryItemService.list(lqw2);
for (PayHistoryItem historyItem : historyItems) {
hasAmount = hasAmount.add(historyItem.getItemPayAmount());
}
}
for (VtbVerificationSubject verificationSubject : vtbVerificationSubjectList) { for (VtbVerificationSubject verificationSubject : vtbVerificationSubjectList) {
totalAmount = totalAmount.add(verificationSubject.getUsedAmount()); totalAmount = totalAmount.add(verificationSubject.getUsedAmount());
hasAmount = hasAmount.add(verificationSubject.getPayAmount()); hasAmount = hasAmount.add(verificationSubject.getPayAmount());

1
src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

@ -108,7 +108,6 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
fundFlow.setActivityId(activity.getId()); fundFlow.setActivityId(activity.getId());
fundFlow.setUsedAmount(releaseAmount); fundFlow.setUsedAmount(releaseAmount);
fundFlowService.save(fundFlow); fundFlowService.save(fundFlow);
//todo 恢复预算
} }

Loading…
Cancel
Save