账户下增加呼叫费用

master
wujingtao 2 years ago
parent d0fc5ffb5e
commit 8984826f7c

@ -11,16 +11,14 @@ import com.baiye.modules.settlement.dao.CallCostRepository;
import com.baiye.modules.settlement.entity.CallSettlement; import com.baiye.modules.settlement.entity.CallSettlement;
import com.baiye.modules.settlement.service.CallCostService; 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.PayTemplate;
import com.baiye.modules.system.domain.PayTemplateUser; import com.baiye.modules.system.domain.PayTemplateUser;
import com.baiye.modules.system.domain.User; 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.PayTemplateRepository;
import com.baiye.modules.system.repository.PayTemplateUserRepository; import com.baiye.modules.system.repository.PayTemplateUserRepository;
import com.baiye.modules.system.repository.UserRepository; import com.baiye.modules.system.repository.UserRepository;
import com.baiye.modules.system.service.CompanyService; 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.modules.system.service.dto.CompanyDto;
import com.baiye.util.DateTimeUtil; import com.baiye.util.DateTimeUtil;
import com.baiye.util.RedisUtils; import com.baiye.util.RedisUtils;
@ -49,13 +47,11 @@ public class CallCostServiceImpl implements CallCostService {
private final CallCostRepository callCostRepository; private final CallCostRepository callCostRepository;
private final CompanyService companyService; private final CompanyService companyService;
private final UserRepository userRepository; private final UserRepository userRepository;
private final MessageNotificationRepository messageNotificationRepository;
private final UserMessageService userMessageService;
private final OnlineUserService onlineUserService; private final OnlineUserService onlineUserService;
private final UserReportRepository userReportRepository; private final UserReportRepository userReportRepository;
private final RedisUtils redisUtils; private final RedisUtils redisUtils;
private final SmsUtil smsUtil; 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); 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.setCreateTime(DateUtil.date());
callSettlement.setCompanyId(companyId); callSettlement.setCompanyId(companyId);
callSettlement.setMemberId(userId); callSettlement.setMemberId(userId);
@ -120,10 +121,12 @@ public class CallCostServiceImpl implements CallCostService {
* @param estimateAmountToDay * @param estimateAmountToDay
* @param companyId * @param companyId
* @param companyById * @param companyById
* @param manager
* @param price
* @return * @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(); CallSettlement callSettlement = new CallSettlement();
long userId = info.getUserId(); long userId = info.getUserId();
Double userBalance = companyById.getUserBalance(); Double userBalance = companyById.getUserBalance();
@ -136,8 +139,9 @@ public class CallCostServiceImpl implements CallCostService {
//最近的一次预扣 减金额 //最近的一次预扣 减金额
estimateAmount = callSettlementSort.get(0).getEstimateAmount(); 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) { if (estimateAmount + userBalance > deductAmount + estimateAmountToDay) {
companyService.updateUserBalanceByCompanyId(userBalance + estimateAmount - (deductAmount + estimateAmountToDay), companyId); companyService.updateUserBalanceByCompanyId(userBalance + estimateAmount - (deductAmount + estimateAmountToDay), companyId);
@ -149,8 +153,7 @@ public class CallCostServiceImpl implements CallCostService {
//判断当前公司是否已经短信通知过 //判断当前公司是否已经短信通知过
Object o = redisUtils.get("call_sms:" + companyId); Object o = redisUtils.get("call_sms:" + companyId);
if (o == null || (int) o == 0) { if (o == null || (int) o == 0) {
User one = userRepository.getOne(companyById.getUserId()); smsUtil.sendAliYunSmsNotice(manager.getPhone(), "{\"name\":\"" + manager.getUsername() + "\"}");
smsUtil.sendAliYunSmsNotice(one.getPhone(), "{\"name\":\"" + one.getUsername() + "\"}");
//短信通知后 缓存在redis //短信通知后 缓存在redis
redisUtils.set("call_sms:" + companyId, 1); redisUtils.set("call_sms:" + companyId, 1);
} }
@ -188,7 +191,7 @@ public class CallCostServiceImpl implements CallCostService {
* @param list * @param list
* @return * @return
*/ */
private Double getEstimateAmount(List<UserReport> list) { private Double getEstimateAmount(List<UserReport> list, Double price) {
List<UserReport> sortList = list.stream().sorted(Comparator.comparing(UserReport::getCreateTime).reversed()).collect(Collectors.toList()); List<UserReport> sortList = list.stream().sorted(Comparator.comparing(UserReport::getCreateTime).reversed()).collect(Collectors.toList());
//取最近的7天数据 去最大和最小值求平均数 //取最近的7天数据 去最大和最小值求平均数
List<UserReport> list1; List<UserReport> list1;
@ -201,16 +204,11 @@ public class CallCostServiceImpl implements CallCostService {
int sumScore = 0; int sumScore = 0;
int sumTimes = 0; int sumTimes = 0;
for (int i = 0; i < collect.size(); i++) { for (int i = 1; i < collect.size() - 1; i++) {
if (collect.get(i).equals(collect.get(0)) || collect.get(i).equals(collect.get(collect.size() - 1))) {
continue;
} else {
sumScore += collect.get(i); sumScore += collect.get(i);
sumTimes++; sumTimes++;
} }
return NumberUtil.mul((double) (sumScore / sumTimes), price.doubleValue());
} }
return NumberUtil.mul((double) (sumScore / sumTimes), price);
}
} }

@ -36,9 +36,10 @@ import java.util.Set;
@Entity @Entity
@Getter @Getter
@Setter @Setter
@Table(name="sys_user") @Table(name = "sys_user")
public class User extends BaseEntity implements Serializable { public class User extends BaseEntity implements Serializable {
private static final long serialVersionUID = -8219391143515890251L;
@Id @Id
@Column(name = "user_id") @Column(name = "user_id")
@NotNull(groups = Update.class) @NotNull(groups = Update.class)
@ -49,15 +50,15 @@ public class User extends BaseEntity implements Serializable {
@ManyToMany(fetch = FetchType.EAGER) @ManyToMany(fetch = FetchType.EAGER)
@ApiModelProperty(value = "用户角色") @ApiModelProperty(value = "用户角色")
@JoinTable(name = "sys_users_roles", @JoinTable(name = "sys_users_roles",
joinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "user_id")}, joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")},
inverseJoinColumns = {@JoinColumn(name = "role_id",referencedColumnName = "role_id")}) inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "role_id")})
private Set<Role> roles; private Set<Role> roles;
@ManyToMany(fetch = FetchType.EAGER) @ManyToMany(fetch = FetchType.EAGER)
@ApiModelProperty(value = "用户岗位") @ApiModelProperty(value = "用户岗位")
@JoinTable(name = "sys_users_jobs", @JoinTable(name = "sys_users_jobs",
joinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "user_id")}, joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")},
inverseJoinColumns = {@JoinColumn(name = "job_id",referencedColumnName = "job_id")}) inverseJoinColumns = {@JoinColumn(name = "job_id", referencedColumnName = "job_id")})
private Set<Job> jobs; private Set<Job> jobs;
@ -80,7 +81,7 @@ public class User extends BaseEntity implements Serializable {
@ApiModelProperty(value = "用户性别") @ApiModelProperty(value = "用户性别")
private String gender; private String gender;
@ApiModelProperty(value = "头像真实名称",hidden = true) @ApiModelProperty(value = "头像真实名称", hidden = true)
private String avatarName; private String avatarName;
@ApiModelProperty(value = "头像存储的路径", hidden = true) @ApiModelProperty(value = "头像存储的路径", hidden = true)
@ -112,6 +113,13 @@ public class User extends BaseEntity implements Serializable {
@ApiModelProperty(value = "过期时间") @ApiModelProperty(value = "过期时间")
private Date expirationTime; 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") @Column(name = "is_review")
@ApiModelProperty(value = "是否审核") @ApiModelProperty(value = "是否审核")

@ -387,6 +387,8 @@ public class UserServiceImpl implements UserService {
user.setPhone(resources.getPhone()); user.setPhone(resources.getPhone());
user.setNickName(resources.getNickName()); user.setNickName(resources.getNickName());
user.setGender(resources.getGender()); user.setGender(resources.getGender());
user.setDoubleCallFee(resources.getDoubleCallFee());
user.setRollCallFee(resources.getRollCallFee());
userRepository.save(user); userRepository.save(user);
// 清除缓存 // 清除缓存
delCaches(user.getId(), user.getUsername()); delCaches(user.getId(), user.getUsername());

Loading…
Cancel
Save