账户下增加呼叫费用

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.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<UserReport> list) {
private Double getEstimateAmount(List<UserReport> list, Double price) {
List<UserReport> sortList = list.stream().sorted(Comparator.comparing(UserReport::getCreateTime).reversed()).collect(Collectors.toList());
//取最近的7天数据 去最大和最小值求平均数
List<UserReport> 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());
}
}

@ -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<Role> 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<Job> 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 = "是否审核")

@ -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());

Loading…
Cancel
Save