diff --git a/src/main/java/com/qs/serve/modules/goods/entity/dto/TbsCenterDto.java b/src/main/java/com/qs/serve/modules/goods/entity/dto/TbsCenterDto.java index 75a371d7..ed1b20ef 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/dto/TbsCenterDto.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/dto/TbsCenterDto.java @@ -3,12 +3,14 @@ package com.qs.serve.modules.goods.entity.dto; import lombok.AllArgsConstructor; import lombok.Data; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + /** * @author YenHex * @since 2022/11/10 */ @Data -@AllArgsConstructor public class TbsCenterDto { String id; @@ -19,4 +21,18 @@ public class TbsCenterDto { String centerType; + /** 费用占比率,单位百分位(该成本中心在费用中占比) */ + @NotNull(message = "费用占比率不能为空") + private BigDecimal centerRate; + + /** 费用占比金额(该成本中心在费用金额) */ + @NotNull(message = "费用占比率不能为空") + private BigDecimal centerAmount; + + public TbsCenterDto(String id, String centerCode, String centerName, String centerType) { + this.id = id; + this.centerCode = centerCode; + this.centerName = centerName; + this.centerType = centerType; + } } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenter.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenter.java index 6366352c..9bd00790 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenter.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenter.java @@ -51,6 +51,8 @@ public class TbsActivityCenter implements Serializable { @NotNull(message = "费用额度不能为空") private BigDecimal centerAmount; + private BigDecimal usedAmount; + /** 成本中心类型 center, customer, diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java index 0a8a7e6f..67efe9b0 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java @@ -85,6 +85,13 @@ public class TbsActivityCenterGoods implements Serializable { @Length(max = 50,message = "成本中心名称长度不能超过50字") private String centerName; + /** 费用额度 */ + @NotNull(message = "费用额度不能为空") + private BigDecimal centerAmount; + + /** 费用占比 */ + @NotNull(message = "费用占比不能为空") + private BigDecimal centerRate; /** 目标类型(brand、category、series、spu、sku) */ @NotBlank(message = "目标类型(brand、category、series、spu、sku)不能为空") diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java index ca1714e1..c49119f7 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivitySubject.java @@ -58,6 +58,9 @@ public class TbsActivitySubject implements Serializable { @NotNull(message = "费用额度不能为空") private BigDecimal amount; + /** 费用额度 */ + private BigDecimal usedAmount; + /** 场次 */ @NotNull(message = "场次不能为空") private Integer countSession; diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityCenterGoodsService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityCenterGoodsService.java index 677e69d8..9d15d099 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityCenterGoodsService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityCenterGoodsService.java @@ -2,7 +2,7 @@ package com.qs.serve.modules.tbs.service; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; - +import java.util.List; /** * 活动成本中心配比项 服务接口 * @author YenHex @@ -10,5 +10,8 @@ import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; */ public interface TbsActivityCenterGoodsService extends IService { + + List listByActivityId(Long activityId); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityCenterService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityCenterService.java index ff23cbe6..47db98fc 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityCenterService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityCenterService.java @@ -3,6 +3,8 @@ package com.qs.serve.modules.tbs.service; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.tbs.entity.TbsActivityCenter; +import java.util.List; + /** * 活动成本中心项 服务接口 * @author YenHex @@ -10,5 +12,7 @@ import com.qs.serve.modules.tbs.entity.TbsActivityCenter; */ public interface TbsActivityCenterService extends IService { + List listByActivity(Long activityId); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivitySubjectService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivitySubjectService.java index 986a72b9..d7459704 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsActivitySubjectService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsActivitySubjectService.java @@ -3,6 +3,8 @@ package com.qs.serve.modules.tbs.service; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.tbs.entity.TbsActivitySubject; +import java.util.List; + /** * 活动科目项 服务接口 * @author YenHex @@ -10,5 +12,12 @@ import com.qs.serve.modules.tbs.entity.TbsActivitySubject; */ public interface TbsActivitySubjectService extends IService { + /** + * 通过活动id获取列表 + * @param activityId + * @return + */ + List listByActivityId(Long activityId); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityCenterGoodsServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityCenterGoodsServiceImpl.java index 8dbcd5c2..2d690fe3 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityCenterGoodsServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityCenterGoodsServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.tbs.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; @@ -8,6 +9,8 @@ import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; import com.qs.serve.modules.tbs.service.TbsActivityCenterGoodsService; import com.qs.serve.modules.tbs.mapper.TbsActivityCenterGoodsMapper; +import java.util.List; + /** * 活动成本中心配比项 服务实现类 * @author YenHex @@ -18,5 +21,11 @@ import com.qs.serve.modules.tbs.mapper.TbsActivityCenterGoodsMapper; @AllArgsConstructor public class TbsActivityCenterGoodsServiceImpl extends ServiceImpl implements TbsActivityCenterGoodsService { + @Override + public List listByActivityId(Long activityId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TbsActivityCenterGoods::getActivityId,activityId); + return this.list(lqw); + } } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityCenterServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityCenterServiceImpl.java index 8b7662ec..705d43a9 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityCenterServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityCenterServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.tbs.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; @@ -8,6 +9,8 @@ import com.qs.serve.modules.tbs.entity.TbsActivityCenter; import com.qs.serve.modules.tbs.service.TbsActivityCenterService; import com.qs.serve.modules.tbs.mapper.TbsActivityCenterMapper; +import java.util.List; + /** * 活动成本中心项 服务实现类 * @author YenHex @@ -18,5 +21,11 @@ import com.qs.serve.modules.tbs.mapper.TbsActivityCenterMapper; @AllArgsConstructor public class TbsActivityCenterServiceImpl extends ServiceImpl implements TbsActivityCenterService { + @Override + public List listByActivity(Long activityId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TbsActivityCenter::getActivityId,activityId); + return this.list(lqw); + } } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java index 207c10c3..8b5a8e16 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java @@ -29,11 +29,9 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDate; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; -import java.util.List; + /** * 费用活动 服务实现类 * @author YenHex @@ -76,7 +74,7 @@ public class TbsActivityServiceImpl extends ServiceImpl implements TbsActivitySubjectService { + @Override + public List listByActivityId(Long activityId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TbsActivitySubject::getActivityId,activityId); + return this.list(lqw); + } } diff --git a/src/main/java/com/qs/serve/modules/vtb/common/VtbFundFlowType.java b/src/main/java/com/qs/serve/modules/vtb/common/VtbFundFlowType.java new file mode 100644 index 00000000..5594ad7c --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/common/VtbFundFlowType.java @@ -0,0 +1,19 @@ +package com.qs.serve.modules.vtb.common; + +/** + * @author YenHex + * @since 2022/11/25 + */ +public interface VtbFundFlowType { + + /** + * 核销 + */ + String Verification = "verification"; + + /** + * 释放费用 + */ + String Release = "release"; + +} diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationCenterGoods.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbFundFlow.java similarity index 80% rename from src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationCenterGoods.java rename to src/main/java/com/qs/serve/modules/vtb/entity/VtbFundFlow.java index cfd29741..f41efa16 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationCenterGoods.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/VtbFundFlow.java @@ -17,13 +17,13 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.NotBlank; /** - * 核销费用项 实体类 + * 核销流水 实体类 * @author YenHex - * @since 2022-11-24 + * @since 2022-11-25 */ @Data -@TableName("vtb_verification_center_goods") -public class VtbVerificationCenterGoods implements Serializable { +@TableName("vtb_fund_flow") +public class VtbFundFlow implements Serializable { private static final long serialVersionUID = 1L; @@ -31,14 +31,13 @@ public class VtbVerificationCenterGoods implements Serializable { @TableId(type = IdType.AUTO) private Long id; + /** 核销类型 */ + private String fundType; + /** 核销id */ @NotNull(message = "核销id不能为空") private Long verificationId; - /** 核销状态 */ - @NotNull(message = "核销状态不能为空") - private Integer verification_state; - /** 成本明细编码 */ @NotBlank(message = "成本明细编码不能为空") @Length(max = 30,message = "成本明细编码长度不能超过30字") @@ -53,59 +52,47 @@ public class VtbVerificationCenterGoods implements Serializable { private Long activityId; /** 科目id */ - @NotNull(message = "科目id不能为空") private Long subjectId; /** 科目编码 */ - @NotBlank(message = "科目编码不能为空") @Length(max = 50,message = "科目编码长度不能超过50字") private String subjectCode; /** 科目名称 */ - @NotBlank(message = "科目名称不能为空") @Length(max = 50,message = "科目名称长度不能超过50字") private String subjectName; /** 成本中心类型 */ - @NotBlank(message = "成本中心类型不能为空") @Length(max = 50,message = "成本中心类型长度不能超过50字") private String centerType; /** 成本中心id */ - @NotBlank(message = "成本中心id不能为空") @Length(max = 32,message = "成本中心id长度不能超过32字") private String centerId; /** 成本中心编码 */ - @NotBlank(message = "成本中心编码不能为空") @Length(max = 50,message = "成本中心编码长度不能超过50字") private String centerCode; /** 成本中心名称 */ - @NotBlank(message = "成本中心名称不能为空") @Length(max = 50,message = "成本中心名称长度不能超过50字") private String centerName; /** 已用费用 */ - @NotNull(message = "已用费用不能为空") private BigDecimal usedAmount; /** 目标类型(brand、category、series、spu、sku) */ - @NotBlank(message = "目标类型(brand、category、series、spu、sku)不能为空") @Length(max = 30,message = "目标类型(brand、category、series、spu、sku)长度不能超过30字") private String targetType; /** 目标id */ - @NotNull(message = "目标id不能为空") private Long targetId; /** 目标编码 */ - @NotBlank(message = "目标编码不能为空") @Length(max = 30,message = "目标编码长度不能超过30字") private String targetCode; /** 目标名称 */ - @NotBlank(message = "目标名称不能为空") @Length(max = 30,message = "目标名称长度不能超过30字") private String targetName; @@ -151,5 +138,9 @@ public class VtbVerificationCenterGoods implements Serializable { @JsonProperty private String delFlag; + /** 临时金额,统计该项可传入金额 */ + @TableField(exist = false) + private BigDecimal tempBalance; + } diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java index 410c494d..ed6f5ee6 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java @@ -35,6 +35,10 @@ public class VtbVerificationSubject implements Serializable { @NotNull(message = "核算id不能为空") private Long verificationId; + /** 核销状态 */ + @NotNull(message = "核销状态不能为空") + private Integer verificationState; + /** 费用申请id */ @NotNull(message = "费用申请id不能为空") private Long costApplyId; diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationCenterGoodsBo.java b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbFundFlowBo.java similarity index 82% rename from src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationCenterGoodsBo.java rename to src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbFundFlowBo.java index 6c90a97f..48f1d19b 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationCenterGoodsBo.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbFundFlowBo.java @@ -16,12 +16,12 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.NotBlank; /** - * 核销费用项 Bo + * 核销流水 Bo * @author YenHex - * @since 2022-11-24 + * @since 2022-11-25 */ @Data -public class VtbVerificationCenterGoodsBo implements Serializable { +public class VtbFundFlowBo implements Serializable { private static final long serialVersionUID = 1L; @@ -33,6 +33,7 @@ public class VtbVerificationCenterGoodsBo implements Serializable { private Long verificationId; /** 核销状态 */ + @NotNull(message = "核销状态不能为空") private Integer verificationState; /** 成本明细编码 */ @@ -49,59 +50,47 @@ public class VtbVerificationCenterGoodsBo implements Serializable { private Long activityId; /** 科目id */ - @NotNull(message = "科目id不能为空") private Long subjectId; /** 科目编码 */ - @NotBlank(message = "科目编码不能为空") @Length(max = 50,message = "科目编码长度不能超过50字") private String subjectCode; /** 科目名称 */ - @NotBlank(message = "科目名称不能为空") @Length(max = 50,message = "科目名称长度不能超过50字") private String subjectName; /** 成本中心类型 */ - @NotBlank(message = "成本中心类型不能为空") @Length(max = 50,message = "成本中心类型长度不能超过50字") private String centerType; /** 成本中心id */ - @NotBlank(message = "成本中心id不能为空") @Length(max = 32,message = "成本中心id长度不能超过32字") private String centerId; /** 成本中心编码 */ - @NotBlank(message = "成本中心编码不能为空") @Length(max = 50,message = "成本中心编码长度不能超过50字") private String centerCode; /** 成本中心名称 */ - @NotBlank(message = "成本中心名称不能为空") @Length(max = 50,message = "成本中心名称长度不能超过50字") private String centerName; /** 已用费用 */ - @NotNull(message = "已用费用不能为空") private BigDecimal usedAmount; /** 目标类型(brand、category、series、spu、sku) */ - @NotBlank(message = "目标类型(brand、category、series、spu、sku)不能为空") @Length(max = 30,message = "目标类型(brand、category、series、spu、sku)长度不能超过30字") private String targetType; /** 目标id */ - @NotNull(message = "目标id不能为空") private Long targetId; /** 目标编码 */ - @NotBlank(message = "目标编码不能为空") @Length(max = 30,message = "目标编码长度不能超过30字") private String targetCode; /** 目标名称 */ - @NotBlank(message = "目标名称不能为空") @Length(max = 30,message = "目标名称长度不能超过30字") private String targetName; diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/so/VtbVerificationCenterGoodsSo.java b/src/main/java/com/qs/serve/modules/vtb/entity/so/VtbFundFlowSo.java similarity index 93% rename from src/main/java/com/qs/serve/modules/vtb/entity/so/VtbVerificationCenterGoodsSo.java rename to src/main/java/com/qs/serve/modules/vtb/entity/so/VtbFundFlowSo.java index 90d272ab..928a0108 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/so/VtbVerificationCenterGoodsSo.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/so/VtbFundFlowSo.java @@ -16,12 +16,12 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.NotBlank; /** - * 核销费用项 查询参数 + * 核销流水 查询参数 * @author YenHex - * @since 2022-11-24 + * @since 2022-11-25 */ @Data -public class VtbVerificationCenterGoodsSo implements Serializable { +public class VtbFundFlowSo implements Serializable { private static final long serialVersionUID = 1L; @@ -32,7 +32,7 @@ public class VtbVerificationCenterGoodsSo implements Serializable { private Long verificationId; /** 核销状态 */ - private Integer verficarionState; + private Integer verificationState; /** 成本明细编码 */ private String centerGoodsCode; diff --git a/src/main/java/com/qs/serve/modules/vtb/mapper/VtbFundFlowMapper.java b/src/main/java/com/qs/serve/modules/vtb/mapper/VtbFundFlowMapper.java new file mode 100644 index 00000000..3bfab78f --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/mapper/VtbFundFlowMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.vtb.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.vtb.entity.VtbFundFlow; + +/** + * 核销流水 Mapper + * @author YenHex + * @date 2022-11-25 + */ +public interface VtbFundFlowMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/vtb/mapper/VtbVerificationCenterGoodsMapper.java b/src/main/java/com/qs/serve/modules/vtb/mapper/VtbVerificationCenterGoodsMapper.java deleted file mode 100644 index 5b7c3951..00000000 --- a/src/main/java/com/qs/serve/modules/vtb/mapper/VtbVerificationCenterGoodsMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.qs.serve.modules.vtb.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.qs.serve.modules.vtb.entity.VtbVerificationCenterGoods; - -/** - * 核销费用项 Mapper - * @author YenHex - * @date 2022-11-24 - */ -public interface VtbVerificationCenterGoodsMapper extends BaseMapper { - -} - diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbFundFlowService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbFundFlowService.java new file mode 100644 index 00000000..c19ee0b8 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbFundFlowService.java @@ -0,0 +1,37 @@ +package com.qs.serve.modules.vtb.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.modules.vtb.entity.VtbFundFlow; + +import java.util.List; + +/** + * 核销流水 服务接口 + * @author YenHex + * @date 2022-11-25 + */ +public interface VtbFundFlowService extends IService { + + /** + * 获取相关活动列表 + * @param activityId 不能空 + * @param fundTypes 可空 + * @return + */ + List listByActivity(Long activityId,String... fundTypes); + + /** + * 判断释放 + * @param activityId + * @return + */ + boolean hasRelease(Long activityId); + + /** + * 刷新活动金额 + * @param activityId + */ + void flushActivityAmount(Long activityId); + +} + diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationCenterGoodsService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationCenterGoodsService.java deleted file mode 100644 index c9ac41b5..00000000 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationCenterGoodsService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.qs.serve.modules.vtb.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.qs.serve.modules.vtb.entity.VtbVerificationCenterGoods; - -/** - * 核销费用项 服务接口 - * @author YenHex - * @date 2022-11-24 - */ -public interface VtbVerificationCenterGoodsService extends IService { - -} - diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationChannelPointService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationChannelPointService.java index 2e0e36fc..b74ed20d 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationChannelPointService.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationChannelPointService.java @@ -9,6 +9,6 @@ import com.qs.serve.modules.vtb.entity.VtbVerificationChannelPoint; * @date 2022-11-24 */ public interface VtbVerificationChannelPointService extends IService { - + void removeByVerificationId(Long verificationId); } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationChannelService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationChannelService.java index 6d5c1e1a..bb02d834 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationChannelService.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationChannelService.java @@ -9,6 +9,6 @@ import com.qs.serve.modules.vtb.entity.VtbVerificationChannel; * @date 2022-11-24 */ public interface VtbVerificationChannelService extends IService { - + void removeByVerificationId(Long verificationId); } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java index df67fcc8..a9363fd1 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java @@ -17,5 +17,18 @@ public interface VtbVerificationService extends IService { */ void commit(VtbVerificationBo vtbVerificationBo); + /** + * 审核通过回调 + * @param verificationId + */ + void successCommit(Long verificationId); + + /** + * 检测释放正在核销 + * @param activityId + * @return + */ + boolean checkCommitting(Long activityId); + } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectService.java index ebb0a793..4e51cd6f 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectService.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationSubjectService.java @@ -3,6 +3,8 @@ package com.qs.serve.modules.vtb.service; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; +import java.util.List; + /** * 核销科目费用 服务接口 * @author YenHex @@ -10,5 +12,9 @@ import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; */ public interface VtbVerificationSubjectService extends IService { + List listByVerificationId(Long verificationId); + + void removeByVerificationId(Long verificationId); + } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbFundFlowServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbFundFlowServiceImpl.java new file mode 100644 index 00000000..d95841ab --- /dev/null +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbFundFlowServiceImpl.java @@ -0,0 +1,139 @@ +package com.qs.serve.modules.vtb.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.entity.TbsActivityCenter; +import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; +import com.qs.serve.modules.tbs.entity.TbsActivitySubject; +import com.qs.serve.modules.tbs.service.*; +import com.qs.serve.modules.vtb.common.VtbFundFlowType; +import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import com.qs.serve.modules.vtb.entity.VtbFundFlow; +import com.qs.serve.modules.vtb.service.VtbFundFlowService; +import com.qs.serve.modules.vtb.mapper.VtbFundFlowMapper; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 核销流水 服务实现类 + * @author YenHex + * @since 2022-11-25 + */ +@Slf4j +@Service +@AllArgsConstructor +public class VtbFundFlowServiceImpl extends ServiceImpl implements VtbFundFlowService { + + private final TbsActivityService activityService; + private final TbsActivitySubjectService activitySubjectService; + private final TbsActivityCenterService activityCenterService; + private final TbsActivityCenterGoodsService activityCenterGoodsService; + + @Override + public List listByActivity(Long activityId,String... fundTypes) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(VtbFundFlow::getActivityId,activityId); + if(CollectionUtil.isNotEmpty(fundTypes)){ + lqw.in(VtbFundFlow::getFundType, Arrays.asList(fundTypes)); + } + return this.list(lqw); + } + + @Override + public boolean hasRelease(Long activityId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(VtbFundFlow::getActivityId,activityId); + lqw.eq(VtbFundFlow::getFundType, VtbFundFlowType.Release); + return this.count(lqw)>0L; + } + + @Override + public void flushActivityAmount(Long activityId) { + List allFunFlow = this.listByActivity(activityId); + List activitySubjectList = activitySubjectService.listByActivityId(activityId); + List activityCenterList = activityCenterService.listByActivity(activityId); + List activityCenterGoodsList = activityCenterGoodsService.listByActivityId(activityId); + //总使用额 + BigDecimal activityUsedAmount = BigDecimal.ZERO; + for (VtbFundFlow fundFlow : allFunFlow) { + activityUsedAmount = activityUsedAmount.add(fundFlow.getUsedAmount()); + } + TbsActivity activity = new TbsActivity(); + activity.setId(activityId); + activity.setUsedAmount(activityUsedAmount); + activityService.updateById(activity); + //更新其它明细 + Map> fundFlowMapBySubject = allFunFlow.stream().collect(Collectors.groupingBy(VtbFundFlow::getSubjectId)); + for (Long subjectId : fundFlowMapBySubject.keySet()) { + List fundFlowList = fundFlowMapBySubject.get(subjectId); + if(fundFlowList != null){ + //更新科目 + BigDecimal subjectTotal = BigDecimal.ZERO; + for (VtbFundFlow fundFlow : fundFlowList) { + subjectTotal = subjectTotal.add(fundFlow.getUsedAmount()); + } + TbsActivitySubject currActivitySubject = null; + for (TbsActivitySubject activitySubject : activitySubjectList) { + if(activitySubject.getSubjectId().equals(subjectId)){ + currActivitySubject = activitySubject; + } + } + TbsActivitySubject activitySubject = new TbsActivitySubject(); + activitySubject.setId(currActivitySubject.getId()); + activitySubject.setUsedAmount(subjectTotal); + this.activitySubjectService.updateById(activitySubject); + //更新成本中心 + Map> fundFlowMapByCenter = fundFlowList.stream().collect(Collectors.groupingBy(VtbFundFlow::getCenterId)); + for (String centerId : fundFlowMapByCenter.keySet()) { + List centerFundFlowList = fundFlowMapByCenter.get(centerId); + if(centerFundFlowList==null){ + continue; + } + BigDecimal totalCenterAmount = BigDecimal.ZERO; + for (VtbFundFlow fundFlow : centerFundFlowList) { + totalCenterAmount = totalCenterAmount.add(fundFlow.getUsedAmount()); + } + for (TbsActivityCenter activityCenter : activityCenterList) { + if(activityCenter.getSubjectId().equals(subjectId)&&activityCenter.getCenterId().equals(centerId)){ + TbsActivityCenter centerParam = new TbsActivityCenter(); + centerParam.setId(activityCenter.getId()); + centerParam.setUsedAmount(totalCenterAmount); + this.activityCenterService.updateById(centerParam); + } + } + //更新成本中心的商品项 + List updateCenterGoodsList = new ArrayList<>(); + for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { + BigDecimal goodsAmount = BigDecimal.ZERO; + for (VtbFundFlow fundFlow : centerFundFlowList) { + if(fundFlow.getTargetType().equals(centerGoods.getTargetType())&&fundFlow.getTargetId().equals(centerGoods.getTargetId())){ + goodsAmount = goodsAmount.add(fundFlow.getUsedAmount()); + } + } + if(goodsAmount.compareTo(BigDecimal.ZERO)>0){ + TbsActivityCenterGoods centerGoodsParam = new TbsActivityCenterGoods(); + centerGoodsParam.setId(centerGoods.getId()); + centerGoodsParam.setUsedAmount(goodsAmount); + updateCenterGoodsList.add(centerGoodsParam); + } + } + if(CollectionUtil.isNotEmpty(updateCenterGoodsList)){ + activityCenterGoodsService.updateBatchById(updateCenterGoodsList); + } + } + } + } + + } +} + diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationCenterGoodsServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationCenterGoodsServiceImpl.java deleted file mode 100644 index bb3966b1..00000000 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationCenterGoodsServiceImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.qs.serve.modules.vtb.service.impl; - -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.vtb.entity.VtbVerificationCenterGoods; -import com.qs.serve.modules.vtb.service.VtbVerificationCenterGoodsService; -import com.qs.serve.modules.vtb.mapper.VtbVerificationCenterGoodsMapper; - -/** - * 核销费用项 服务实现类 - * @author YenHex - * @since 2022-11-24 - */ -@Slf4j -@Service -@AllArgsConstructor -public class VtbVerificationCenterGoodsServiceImpl extends ServiceImpl implements VtbVerificationCenterGoodsService { - -} - diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationChannelPointServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationChannelPointServiceImpl.java index ce95ab41..7d1329d3 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationChannelPointServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationChannelPointServiceImpl.java @@ -1,6 +1,9 @@ package com.qs.serve.modules.vtb.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.modules.vtb.entity.VtbVerificationChannel; +import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -17,6 +20,11 @@ import com.qs.serve.modules.vtb.mapper.VtbVerificationChannelPointMapper; @Service @AllArgsConstructor public class VtbVerificationChannelPointServiceImpl extends ServiceImpl implements VtbVerificationChannelPointService { - + @Override + public void removeByVerificationId(Long verificationId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(VtbVerificationChannelPoint::getVerificationId,verificationId); + this.remove(lqw); + } } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationChannelServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationChannelServiceImpl.java index c2ca93fb..59d0efe9 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationChannelServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationChannelServiceImpl.java @@ -1,6 +1,8 @@ package com.qs.serve.modules.vtb.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -18,5 +20,11 @@ import com.qs.serve.modules.vtb.mapper.VtbVerificationChannelMapper; @AllArgsConstructor public class VtbVerificationChannelServiceImpl extends ServiceImpl implements VtbVerificationChannelService { + @Override + public void removeByVerificationId(Long verificationId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(VtbVerificationChannel::getVerificationId,verificationId); + this.remove(lqw); + } } 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 96b31b40..482dc757 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 @@ -1,26 +1,34 @@ package com.qs.serve.modules.vtb.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.common.util.CopierUtil; import com.qs.serve.modules.bms.entity.BmsSubject; import com.qs.serve.modules.bms.service.BmsSubjectService; -import com.qs.serve.modules.tbs.entity.TbsActivity; -import com.qs.serve.modules.tbs.entity.TbsCostApply; -import com.qs.serve.modules.tbs.service.TbsActivityService; -import com.qs.serve.modules.tbs.service.TbsCostApplyService; +import com.qs.serve.modules.tbs.entity.*; +import com.qs.serve.modules.tbs.service.*; +import com.qs.serve.modules.vtb.common.VtbFundFlowType; +import com.qs.serve.modules.vtb.common.VtbVerificationState; +import com.qs.serve.modules.vtb.entity.VtbFundFlow; +import com.qs.serve.modules.vtb.entity.VtbVerification; import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; import com.qs.serve.modules.vtb.entity.bo.VtbVerificationBo; import com.qs.serve.modules.vtb.entity.bo.VtbVerificationChannelBo; import com.qs.serve.modules.vtb.entity.bo.VtbVerificationChannelPointBo; import com.qs.serve.modules.vtb.entity.bo.VtbVerificationSubjectBo; +import com.qs.serve.modules.vtb.mapper.VtbVerificationMapper; +import com.qs.serve.modules.vtb.service.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import com.qs.serve.modules.vtb.entity.VtbVerification; -import com.qs.serve.modules.vtb.service.VtbVerificationService; -import com.qs.serve.modules.vtb.mapper.VtbVerificationMapper; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.util.List; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; /** * 核销 服务实现类 @@ -32,36 +40,100 @@ import java.util.List; @AllArgsConstructor public class VtbVerificationServiceImpl extends ServiceImpl implements VtbVerificationService { - private final TbsActivityService activityService; private final TbsCostApplyService costApplyService; + private final TbsActivityService activityService; + private final TbsActivitySubjectService activitySubjectService; + private final TbsActivityCenterService activityCenterService; + private final TbsActivityCenterGoodsService activityCenterGoodsService; + private final BmsSubjectService subjectService; + private final VtbVerificationChannelService verificationChannelService; + private final VtbVerificationChannelPointService verificationChannelPointService; + private final VtbVerificationSubjectService verificationSubjectService; + private final VtbFundFlowService fundFlowService; + @Override + @Transactional(rollbackFor = Exception.class) public void commit(VtbVerificationBo verificationBo) { TbsActivity activity = activityService.getById(verificationBo.getActivityId()); TbsCostApply costApply = costApplyService.getById(activity.getCostApplyId()); - //todo 检测是否有拦截 + //todo 结束的活动不支持核销 + boolean hasRelease = fundFlowService.hasRelease(activity.getId()); + if(hasRelease){ + Assert.throwEx("费用已释放"); + } + boolean isCommitting = this.checkCommitting(activity.getId()); + if(isCommitting){ + Assert.throwEx("该活动核销中"); + } VtbVerification verification = new VtbVerification(); - verification.setId(verification.getId()); + verification.setId(verificationBo.getId()); verification.setActivityId(verificationBo.getActivityId()); verification.setAttachIds(verificationBo.getAttachIds()); verification.setRemark(verificationBo.getRemark()); - this.saveOrUpdate(verification); - - List channelBoList = verificationBo.getChannelList(); List pointBoList = verificationBo.getPointList(); + if(CollectionUtil.isNotEmpty(channelBoList)){ + }else if (CollectionUtil.isNotEmpty(pointBoList)){ + + } + List verificationSubjects = validCreateVeriSubject(verificationBo, activity, costApply); + //保存 + this.saveOrUpdate(verification); + //移除历史提交记录 + if(verificationBo.getId()!=null){ + verificationChannelService.removeByVerificationId(verificationBo.getId()); + verificationChannelPointService.removeByVerificationId(verificationBo.getId()); + verificationSubjectService.removeByVerificationId(verificationBo.getId()); + } + //保存科目费用 + verificationSubjects.forEach(obj->obj.setVerificationId(verification.getId())); + verificationSubjectService.saveBatch(verificationSubjects); + } + + /** + * 校验和生成核销费用 + * @param verificationBo + * @param activity + * @param costApply + * @return + */ + private List validCreateVeriSubject(VtbVerificationBo verificationBo, TbsActivity activity, TbsCostApply costApply) { + List verificationSubjects = new ArrayList<>(); + List activitySubjects = activitySubjectService.listByActivityId(activity.getId()); + List existFundFlowList = fundFlowService.listByActivity(activity.getId(), VtbFundFlowType.Verification); + //校验余额 + Map> funFlowListMap = existFundFlowList.stream().collect(Collectors.groupingBy(VtbFundFlow::getSubjectId)); List subjectBoList = verificationBo.getSubjectList(); for (VtbVerificationSubjectBo subjectBo : subjectBoList) { //忽略金额为0的数据 - if(subjectBo.getAmount()==null||subjectBo.getAmount().compareTo(BigDecimal.ZERO)<1){ + if (subjectBo.getAmount() == null || subjectBo.getAmount().compareTo(BigDecimal.ZERO) < 1) { continue; } BmsSubject subject = subjectService.getById(subjectBo.getSubjectId()); - + //判断是否超额 + TbsActivitySubject currentActivitySubject = null; + for (TbsActivitySubject activitySubject : activitySubjects) { + if (activitySubject.getSubjectId().equals(subject.getId())) { + currentActivitySubject = activitySubject; + break; + } + } + List subjectFundFlowItems = funFlowListMap.get(subject.getId()); + BigDecimal totalSubjectUsedAmount = BigDecimal.ZERO; + if (CollectionUtil.isNotEmpty(subjectFundFlowItems)) { + for (VtbFundFlow subjectFundFlowItem : subjectFundFlowItems) { + totalSubjectUsedAmount = totalSubjectUsedAmount.add(subjectFundFlowItem.getUsedAmount()); + } + } + totalSubjectUsedAmount = totalSubjectUsedAmount.add(subjectBo.getAmount()); + if (totalSubjectUsedAmount.compareTo(currentActivitySubject.getAmount()) > 0) { + Assert.throwEx("费用类型[" + subject.getSubjectName() + "]超额"); + } + //保存费用结果 VtbVerificationSubject verificationSubject = new VtbVerificationSubject(); - verificationSubject.setVerificationId(verification.getId()); verificationSubject.setCostApplyId(costApply.getId()); verificationSubject.setActivityId(activity.getId()); verificationSubject.setSubjectId(subject.getId()); @@ -71,11 +143,110 @@ public class VtbVerificationServiceImpl extends ServiceImpl verificationSubjects = verificationSubjectService.listByVerificationId(verification.getId()); + List activityCenterGoodsAllList = activityCenterGoodsService.listByActivityId(verification.getActivityId()); + List addFundFlowList = new ArrayList<>(); + //生成费用流水记录 + Map> centerGoodsMapBySubject = activityCenterGoodsAllList.stream() + .collect(Collectors.groupingBy(TbsActivityCenterGoods::getSubjectId)); + for (VtbVerificationSubject verificationSubject : verificationSubjects) { + List addFundFlowListOfSubject = new ArrayList<>(); + Long subjectId = verificationSubject.getSubjectId(); + BigDecimal usedAmount = verificationSubject.getUsedAmount(); + BigDecimal subtractAmount = verificationSubject.getUsedAmount(); + List activityCenterGoodsOfSubject = centerGoodsMapBySubject.get(subjectId); + //统计前面项合计金额 + BigDecimal totalPrefixAmount = BigDecimal.ZERO; + //统计不匹配金额 + BigDecimal unMatchAmount = BigDecimal.ZERO; + for (int i = 0; i < activityCenterGoodsOfSubject.size(); i++) { + TbsActivityCenterGoods centerGoods = activityCenterGoodsOfSubject.get(i); + BigDecimal currentTimeAmount; + if(i==activityCenterGoodsOfSubject.size()-1){ + currentTimeAmount = usedAmount.subtract(totalPrefixAmount); + }else { + currentTimeAmount = usedAmount.multiply(centerGoods.getCenterGoodsRate()) + .multiply(centerGoods.getCenterRate()) + //四舍五入保留两位小数 + .divide(new BigDecimal(10000), RoundingMode.HALF_UP).setScale(2); + //防止费率为0情况 + if(currentTimeAmount.compareTo(BigDecimal.ZERO)==0){ + continue; + } + } + //可用金额 + BigDecimal allowBalance = centerGoods.getCenterGoodsAmount().subtract(centerGoods.getUsedAmount()); + if(allowBalance.compareTo(BigDecimal.ZERO)==0){ + log.debug("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue()); + unMatchAmount.add(currentTimeAmount); + continue; + } + BigDecimal tempBalance = BigDecimal.ZERO; + //如果不够减 + if(allowBalance.compareTo(currentTimeAmount)<1){ + //统计不匹配金额 + unMatchAmount = unMatchAmount.add(currentTimeAmount.subtract(allowBalance)); + log.debug("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue()); + currentTimeAmount = allowBalance; + }else { + tempBalance = allowBalance.subtract(currentTimeAmount); + } + VtbFundFlow fundFlow = CopierUtil.copy(centerGoods,new VtbFundFlow()); + fundFlow.setId(null); + fundFlow.setUsedAmount(currentTimeAmount); + fundFlow.setFundType(VtbFundFlowType.Release); + fundFlow.setVerificationId(verificationId); + fundFlow.setTempBalance(tempBalance); + addFundFlowListOfSubject.add(fundFlow); + } + //todo 1400元 44次 33行 + //打乱顺序,保存前平摊费用 + Collections.shuffle(addFundFlowListOfSubject); + for (VtbFundFlow fundFlow : addFundFlowListOfSubject) { + if(unMatchAmount.compareTo(BigDecimal.ZERO)>0){ + BigDecimal tmpBalance = fundFlow.getTempBalance(); + if(tmpBalance.compareTo(BigDecimal.ZERO)>0){ + if(tmpBalance.compareTo(unMatchAmount)>0){ + BigDecimal resultBalance = fundFlow.getUsedAmount().add(unMatchAmount); + fundFlow.setUsedAmount(resultBalance); + break; + }else { + unMatchAmount = unMatchAmount.subtract(fundFlow.getTempBalance()); + BigDecimal resultBalance = fundFlow.getUsedAmount().add(tmpBalance); + fundFlow.setUsedAmount(resultBalance); + } + } + }else { + break; + } + } + if(unMatchAmount.compareTo(BigDecimal.ZERO)>0){ + log.error("异常数据,费用核销[{}]超额:{}",verificationId,unMatchAmount.doubleValue()); + } + addFundFlowList.addAll(addFundFlowListOfSubject); } + fundFlowService.saveBatch(addFundFlowList); + //更新已用费用记录 + fundFlowService.flushActivityAmount(verification.getActivityId()); } + + @Override + public boolean checkCommitting(Long activityId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(VtbVerification::getActivityId,activityId); + lqw.eq(VtbVerification::getVerificationState, VtbVerificationState.Commit.getCode()); + return this.count(lqw)>0; + } } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationSubjectServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationSubjectServiceImpl.java index 353e30bb..338938f3 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationSubjectServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationSubjectServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.vtb.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; @@ -8,6 +9,8 @@ import com.qs.serve.modules.vtb.entity.VtbVerificationSubject; import com.qs.serve.modules.vtb.service.VtbVerificationSubjectService; import com.qs.serve.modules.vtb.mapper.VtbVerificationSubjectMapper; +import java.util.List; + /** * 核销科目费用 服务实现类 * @author YenHex @@ -18,5 +21,19 @@ import com.qs.serve.modules.vtb.mapper.VtbVerificationSubjectMapper; @AllArgsConstructor public class VtbVerificationSubjectServiceImpl extends ServiceImpl implements VtbVerificationSubjectService { + @Override + public List listByVerificationId(Long verificationId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(VtbVerificationSubject::getVerificationId,verificationId); + return this.list(lqw); + } + + @Override + public void removeByVerificationId(Long verificationId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(VtbVerificationSubject::getVerificationId,verificationId); + this.remove(lqw); + } + }