From 8984826f7c4f0be5ec7cd95d2e32e66fa1656552 Mon Sep 17 00:00:00 2001 From: wujingtao Date: Fri, 10 Jun 2022 11:11:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=A6=E6=88=B7=E4=B8=8B=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=91=BC=E5=8F=AB=E8=B4=B9=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CallCostServiceImpl.java | 42 +++++++++---------- .../com/baiye/modules/system/domain/User.java | 20 ++++++--- .../system/service/impl/UserServiceImpl.java | 2 + 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/settlement/service/impl/CallCostServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/settlement/service/impl/CallCostServiceImpl.java index 03e78816..d2919ac9 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/settlement/service/impl/CallCostServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/settlement/service/impl/CallCostServiceImpl.java @@ -11,16 +11,14 @@ import com.baiye.modules.settlement.dao.CallCostRepository; import com.baiye.modules.settlement.entity.CallSettlement; import com.baiye.modules.settlement.service.CallCostService; -import com.baiye.modules.system.domain.MessageNotification; import com.baiye.modules.system.domain.PayTemplate; import com.baiye.modules.system.domain.PayTemplateUser; import com.baiye.modules.system.domain.User; -import com.baiye.modules.system.repository.MessageNotificationRepository; import com.baiye.modules.system.repository.PayTemplateRepository; import com.baiye.modules.system.repository.PayTemplateUserRepository; import com.baiye.modules.system.repository.UserRepository; import com.baiye.modules.system.service.CompanyService; -import com.baiye.modules.system.service.UserMessageService; +import com.baiye.modules.system.service.OrganizeService; import com.baiye.modules.system.service.dto.CompanyDto; import com.baiye.util.DateTimeUtil; import com.baiye.util.RedisUtils; @@ -49,13 +47,11 @@ public class CallCostServiceImpl implements CallCostService { private final CallCostRepository callCostRepository; private final CompanyService companyService; private final UserRepository userRepository; - private final MessageNotificationRepository messageNotificationRepository; - private final UserMessageService userMessageService; private final OnlineUserService onlineUserService; private final UserReportRepository userReportRepository; private final RedisUtils redisUtils; private final SmsUtil smsUtil; - private final double price = 0.18; + private final OrganizeService organizeService; /** * 计算当天的通话时长和费用 @@ -98,10 +94,15 @@ public class CallCostServiceImpl implements CallCostService { //账户余额 CompanyDto companyById = companyService.findCompanyById(companyId); + int callMode = organizeService.getOrganizeByUserId(userId).getCallMode(); + //公司账号 + User manager = userRepository.getOne(companyById.getUserId()); + double price = callMode == 0 ? manager.getDoubleCallFee() : manager.getRollCallFee(); + //今日计算预扣 - double estimateAmountToDay = getEstimateAmount(list); + double estimateAmountToDay = getEstimateAmount(list, price); - CallSettlement callSettlement = deduction(info, durationToday, estimateAmountToDay, companyId, companyById); + CallSettlement callSettlement = deduction(info, durationToday, estimateAmountToDay, companyId, companyById, manager, price); callSettlement.setCreateTime(DateUtil.date()); callSettlement.setCompanyId(companyId); callSettlement.setMemberId(userId); @@ -120,10 +121,12 @@ public class CallCostServiceImpl implements CallCostService { * @param estimateAmountToDay 今日 预扣金额 * @param companyId * @param companyById 公司信息 + * @param manager 公司账号信息 + * @param price 呼叫单价 * @return */ - public CallSettlement deduction(PayTemplateUser info, Long durationToday, Double estimateAmountToDay, Long companyId, CompanyDto companyById) { + private CallSettlement deduction(PayTemplateUser info, Long durationToday, Double estimateAmountToDay, Long companyId, CompanyDto companyById, User manager, Double price) { CallSettlement callSettlement = new CallSettlement(); long userId = info.getUserId(); Double userBalance = companyById.getUserBalance(); @@ -136,8 +139,9 @@ public class CallCostServiceImpl implements CallCostService { //最近的一次预扣 减金额 estimateAmount = callSettlementSort.get(0).getEstimateAmount(); } - double deductAmount = NumberUtil.mul(durationToday.intValue(), price); + + double deductAmount = NumberUtil.mul(durationToday.intValue(), price.doubleValue()); //余额足够 if (estimateAmount + userBalance > deductAmount + estimateAmountToDay) { companyService.updateUserBalanceByCompanyId(userBalance + estimateAmount - (deductAmount + estimateAmountToDay), companyId); @@ -149,8 +153,7 @@ public class CallCostServiceImpl implements CallCostService { //判断当前公司是否已经短信通知过 Object o = redisUtils.get("call_sms:" + companyId); if (o == null || (int) o == 0) { - User one = userRepository.getOne(companyById.getUserId()); - smsUtil.sendAliYunSmsNotice(one.getPhone(), "{\"name\":\"" + one.getUsername() + "\"}"); + smsUtil.sendAliYunSmsNotice(manager.getPhone(), "{\"name\":\"" + manager.getUsername() + "\"}"); //短信通知后 缓存在redis redisUtils.set("call_sms:" + companyId, 1); } @@ -188,7 +191,7 @@ public class CallCostServiceImpl implements CallCostService { * @param list * @return */ - private Double getEstimateAmount(List list) { + private Double getEstimateAmount(List list, Double price) { List sortList = list.stream().sorted(Comparator.comparing(UserReport::getCreateTime).reversed()).collect(Collectors.toList()); //取最近的7天数据 去最大和最小值求平均数 List list1; @@ -201,16 +204,11 @@ public class CallCostServiceImpl implements CallCostService { int sumScore = 0; int sumTimes = 0; - for (int i = 0; i < collect.size(); i++) { - if (collect.get(i).equals(collect.get(0)) || collect.get(i).equals(collect.get(collect.size() - 1))) { - continue; - } else { - sumScore += collect.get(i); - sumTimes++; - } + for (int i = 1; i < collect.size() - 1; i++) { + sumScore += collect.get(i); + sumTimes++; } - return NumberUtil.mul((double) (sumScore / sumTimes), price); + return NumberUtil.mul((double) (sumScore / sumTimes), price.doubleValue()); } - } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/User.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/User.java index 42638a97..354f69af 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/User.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/domain/User.java @@ -36,9 +36,10 @@ import java.util.Set; @Entity @Getter @Setter -@Table(name="sys_user") +@Table(name = "sys_user") public class User extends BaseEntity implements Serializable { + private static final long serialVersionUID = -8219391143515890251L; @Id @Column(name = "user_id") @NotNull(groups = Update.class) @@ -49,15 +50,15 @@ public class User extends BaseEntity implements Serializable { @ManyToMany(fetch = FetchType.EAGER) @ApiModelProperty(value = "用户角色") @JoinTable(name = "sys_users_roles", - joinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "user_id")}, - inverseJoinColumns = {@JoinColumn(name = "role_id",referencedColumnName = "role_id")}) + joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")}, + inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "role_id")}) private Set roles; @ManyToMany(fetch = FetchType.EAGER) @ApiModelProperty(value = "用户岗位") @JoinTable(name = "sys_users_jobs", - joinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "user_id")}, - inverseJoinColumns = {@JoinColumn(name = "job_id",referencedColumnName = "job_id")}) + joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")}, + inverseJoinColumns = {@JoinColumn(name = "job_id", referencedColumnName = "job_id")}) private Set jobs; @@ -80,7 +81,7 @@ public class User extends BaseEntity implements Serializable { @ApiModelProperty(value = "用户性别") private String gender; - @ApiModelProperty(value = "头像真实名称",hidden = true) + @ApiModelProperty(value = "头像真实名称", hidden = true) private String avatarName; @ApiModelProperty(value = "头像存储的路径", hidden = true) @@ -112,6 +113,13 @@ public class User extends BaseEntity implements Serializable { @ApiModelProperty(value = "过期时间") private Date expirationTime; + @Column(name = "double_call_fee") + @ApiModelProperty(value = "双呼费用") + private Double doubleCallFee; + + @Column(name = "roll_call_fee") + @ApiModelProperty(value = "点呼费用") + private Double rollCallFee; @Column(name = "is_review") @ApiModelProperty(value = "是否审核") diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java index a6f468be..49adfa93 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java @@ -387,6 +387,8 @@ public class UserServiceImpl implements UserService { user.setPhone(resources.getPhone()); user.setNickName(resources.getNickName()); user.setGender(resources.getGender()); + user.setDoubleCallFee(resources.getDoubleCallFee()); + user.setRollCallFee(resources.getRollCallFee()); userRepository.save(user); // 清除缓存 delCaches(user.getId(), user.getUsername());