添加购买套餐代码

master
bynt 2 years ago
parent cbc1efa1c5
commit 418d391d2f

@ -57,6 +57,11 @@ public enum ResponseCode {
*/
ACCOUNT_DISABLED("1025", "账户已被禁用"),
/**
*
*/
PACKAGE_ERROR("1026", "套餐不存在或已过期"),
/**
*
*/

@ -35,6 +35,10 @@ public class PayTemplateLog implements Serializable {
@ApiModelProperty(value = "购买人用户ID")
private Long userId;
@Column(name = "is_buy_success")
@ApiModelProperty(value = "是否购买成功")
private Boolean isBuySuccess;
@CreationTimestamp
@Column(name = "create_time")
@ApiModelProperty(value = "创建时间")

@ -29,6 +29,7 @@ import com.baiye.modules.system.domain.vo.UserPassVo;
import com.baiye.modules.system.service.DataService;
import com.baiye.modules.system.service.RoleService;
import com.baiye.modules.system.service.UserService;
import com.baiye.modules.system.service.dto.BuyComboDTO;
import com.baiye.modules.system.service.dto.CreateUserDTO;
import com.baiye.modules.system.service.dto.UserQueryCriteria;
import com.baiye.util.ReadExcelUtils;
@ -285,4 +286,11 @@ public class UserController {
public ResponseEntity<Object> downLoadTemplateMove() {
return new ResponseEntity<>(personnelList, HttpStatus.OK);
}
@ApiOperation("购买人员套餐")
@GetMapping("/buyCombo")
public ResponseEntity<Object> buyCombo(@Validated @RequestBody BuyComboDTO buyComboDTO) {
userService.buyPackage(buyComboDTO);
return new ResponseEntity<>(HttpStatus.OK);
}
}

@ -4,8 +4,10 @@ public interface PayTemplateLogService {
/**
*
*
* @param templateId
* @param userId
* @param result
*/
void addPayTemplateLog(Long templateId, Long userId);
void addPayTemplateLog(Long templateId, Long userId, Boolean result);
}

@ -21,4 +21,11 @@ public interface PayTemplateService {
* @return
*/
Object query();
/**
* id
* @param templateId
* @return
*/
PayTemplate findTemplateById(Long templateId);
}

@ -7,6 +7,7 @@ public interface PayTemplateUserService {
/**
*
* @param payTemplateUser
* @return
*/
void add(PayTemplateUser payTemplateUser);
Boolean add(PayTemplateUser payTemplateUser);
}

@ -19,6 +19,7 @@ import cn.hutool.core.date.DateTime;
import com.baiye.model.dto.UserDto;
import com.baiye.model.dto.UserFavorOfExcel;
import com.baiye.modules.system.domain.User;
import com.baiye.modules.system.service.dto.BuyComboDTO;
import com.baiye.modules.system.service.dto.CreateUserDTO;
import com.baiye.modules.system.service.dto.UpdateOrderDto;
import com.baiye.modules.system.service.dto.UserQueryCriteria;
@ -225,4 +226,10 @@ public interface UserService {
* @return
*/
Boolean findIsReview(Long userId);
/**
*
* @param buyComboDTO
*/
void buyPackage(BuyComboDTO buyComboDTO);
}

@ -0,0 +1,24 @@
package com.baiye.modules.system.service.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author Enzo
* @date : 2022/6/7
*/
@Data
public class BuyComboDTO {
@NotNull
@ApiModelProperty(value = "模板id")
private Long templateId;
@NotEmpty
@ApiModelProperty(value = "用户id")
private List<Long> userIds;
}

@ -9,8 +9,6 @@ import com.baiye.modules.system.repository.FormUserRepository;
import com.baiye.modules.system.service.DebtFormService;
import com.baiye.modules.system.service.dto.DebtDto;
import com.baiye.modules.system.service.dto.DebtQueryCriteria;
import com.baiye.modules.system.service.dto.DebtQueryResult;
import com.baiye.modules.system.service.dto.TaskDto;
import com.baiye.modules.system.service.mapstruct.DebtMapper;
import com.baiye.util.PageUtil;
import com.baiye.util.QueryHelp;
@ -24,6 +22,10 @@ import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;
/**
* @author
* @date 2022-6-7
*/
@Service
@RequiredArgsConstructor
@Slf4j

@ -8,6 +8,10 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author yqy
* @date
*/
@Service
@RequiredArgsConstructor
@Slf4j
@ -17,10 +21,11 @@ public class PayTemplateLogServiceImpl implements PayTemplateLogService {
@Override
@Transactional(rollbackFor = Exception.class)
public void addPayTemplateLog(Long templateId, Long userId) {
public void addPayTemplateLog(Long templateId, Long userId, Boolean result) {
PayTemplateLog payTemplateLog = new PayTemplateLog();
if (templateId != null && userId != null){
payTemplateLog.setTemplateId(templateId);
payTemplateLog.setIsBuySuccess(result);
payTemplateLog.setUserId(userId);
payTemplateLogRepository.save(payTemplateLog);
}

@ -6,11 +6,17 @@ import com.baiye.modules.system.repository.PayTemplateRepository;
import com.baiye.modules.system.service.PayTemplateService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.annotations.Cache;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.DecimalFormat;
/**
* @author yqy
* @date
*/
@Service
@RequiredArgsConstructor
@Slf4j
@ -30,6 +36,7 @@ public class PayTemplateServiceImpl implements PayTemplateService {
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = "templateCache", key = "'template:' + #p0.getId()")
public void updatePayTemplate(PayTemplate payTemplate) {
Integer status = payTemplate.getStatus();
PayTemplate updateTemplate = payTemplateRepository.findById(payTemplate.getId()).orElseGet(PayTemplate::new);
@ -43,4 +50,10 @@ public class PayTemplateServiceImpl implements PayTemplateService {
public Object query() {
return payTemplateRepository.findByStatus(DefaultNumberConstants.ZERO_NUMBER);
}
@Override
@Cacheable(value = "templateCache", key = "'template:' + #p0")
public PayTemplate findTemplateById(Long templateId) {
return payTemplateRepository.findById(templateId).orElseGet(PayTemplate::new);
}
}

@ -2,7 +2,6 @@ package com.baiye.modules.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baiye.modules.system.domain.PayTemplate;
import com.baiye.modules.system.domain.PayTemplateUser;
@ -17,6 +16,10 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
* @author yqy
* @date
*/
@Service
@RequiredArgsConstructor
@Slf4j
@ -27,17 +30,17 @@ public class PayTemplateUserServiceImpl implements PayTemplateUserService {
@Override
@Transactional(rollbackFor = Exception.class)
public void add(PayTemplateUser payTemplateUser) {
public Boolean add(PayTemplateUser payTemplateUser) {
Long userId = payTemplateUser.getUserId();
Long payTemplateId = payTemplateUser.getPayTemplateId();
if (userId != null && payTemplateId != null){
if (userId != null && payTemplateId != null) {
List<PayTemplateUser> userList = payTemplateUserRepository.findByUserId(userId);
PayTemplate payTemplate = payTemplateRepository.findById(payTemplateId).orElseGet(PayTemplate::new);
//当前时间
Date createTime = DateUtil.date();
Integer packageDay = payTemplate.getPackageDay();
Date newDate = DateUtil.offset(createTime, DateField.DAY_OF_MONTH, packageDay);
if (CollUtil.isNotEmpty(userList)){
if (CollUtil.isNotEmpty(userList)) {
PayTemplateUser payTemplateUserOne = userList.get(0);
Date endTime = payTemplateUserOne.getEndTime();
//当createTime小于endTime时返回true当大于等于时返回false
@ -45,20 +48,21 @@ public class PayTemplateUserServiceImpl implements PayTemplateUserService {
//修改结束日期
Date newDate2 = DateUtil.offset(payTemplateUserOne.getEndTime(), DateField.DAY_OF_MONTH, packageDay);
payTemplateUserOne.setEndTime(newDate2);
}else {
} else {
//重置开始和结束日期
payTemplateUserOne.setBeginTime(createTime);
payTemplateUserOne.setEndTime(newDate);
}
payTemplateUserRepository.save(payTemplateUserOne);
}else {
return payTemplateUserRepository.save(payTemplateUserOne).getId() != null;
} else {
PayTemplateUser addPayTemplateUser = new PayTemplateUser();
addPayTemplateUser.setPayTemplateId(payTemplateId);
addPayTemplateUser.setUserId(userId);
addPayTemplateUser.setBeginTime(createTime);
addPayTemplateUser.setEndTime(newDate);
payTemplateUserRepository.save(addPayTemplateUser);
return payTemplateUserRepository.save(addPayTemplateUser).getId() != null;
}
}
return Boolean.FALSE;
}
}

@ -21,6 +21,8 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.config.properties.FileProperties;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.exception.BadRequestException;
@ -36,15 +38,12 @@ import com.baiye.modules.system.repository.OrganizeRepository;
import com.baiye.modules.system.repository.OrganizeUserRepository;
import com.baiye.modules.system.repository.RoleRepository;
import com.baiye.modules.system.repository.UserRepository;
import com.baiye.modules.system.service.CompanyService;
import com.baiye.modules.system.service.UserService;
import com.baiye.modules.system.service.dto.CompanyDto;
import com.baiye.modules.system.service.dto.CreateUserDTO;
import com.baiye.modules.system.service.dto.UpdateOrderDto;
import com.baiye.modules.system.service.dto.UserQueryCriteria;
import com.baiye.modules.system.service.*;
import com.baiye.modules.system.service.dto.*;
import com.baiye.modules.system.service.mapstruct.UserMapper;
import com.baiye.service.UserCacheClean;
import com.baiye.util.*;
import com.google.common.collect.ImmutableMap;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
@ -80,9 +79,13 @@ public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final OnlineUserService onlineUserService;
private final OrganizeUserRepository organizeUserRepository;
private final OrganizeRepository organizeRepository;
private final PayTemplateService payTemplateService;
private final PayTemplateLogService payTemplateLogService;
private final PayTemplateUserService payTemplateUserService;
private final OrganizeUserRepository organizeUserRepository;
@Override
@Transactional(rollbackFor = Exception.class)
@ -247,7 +250,7 @@ public class UserServiceImpl implements UserService {
public Boolean findIsReview(Long userId) {
Boolean isReview = null;
User user = userRepository.findById(userId).orElseGet(User::new);
if (!Objects.isNull(user)){
if (!Objects.isNull(user)) {
isReview = user.getIsReview();
}
return isReview;
@ -484,9 +487,7 @@ public class UserServiceImpl implements UserService {
}
@NotBlank String username = user.getUsername();
flushCache(username);
return new HashMap<String, String>(1) {{
put("avatar", file.getName());
}};
return ImmutableMap.of("avatar", file.getName());
}
@Override
@ -530,4 +531,50 @@ public class UserServiceImpl implements UserService {
private void flushCache(String username) {
userCacheClean.cleanUserCache(username);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void buyPackage(BuyComboDTO buyComboDTO) {
List<Long> userIds = buyComboDTO.getUserIds();
Long templateId = buyComboDTO.getTemplateId();
if (CollUtil.isNotEmpty(userIds)
&& ObjectUtil.isNotNull(templateId)) {
Long companyId = SecurityUtils.getCompanyId();
PayTemplate payTemplate =
payTemplateService.findTemplateById(templateId);
if (ObjectUtil.isNull(payTemplate)
|| payTemplate.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
throw new BadRequestException(ResponseCode.PACKAGE_ERROR.getDesc());
}
CompanyDto companyById = companyService.findCompanyById(companyId);
if (ObjectUtil.isNull(companyById)
|| companyById.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
throw new BadRequestException(ResponseCode.ACCOUNT_DISABLED.getDesc());
}
Double balance =
companyById.getUserBalance() != null ?
companyById.getUserBalance() : DefaultNumberConstants.ZERO_NUMBER;
// 计算金额
Double totalAmount = NumberUtil.mul(payTemplate.getAmount(), Double.valueOf(String.valueOf(userIds.size())));
double deductionBalance = NumberUtil.sub(balance, totalAmount);
// 判断余额
if (deductionBalance < DefaultNumberConstants.ZERO_NUMBER) {
throw new BadRequestException(ResponseCode.INSUFFICIENT_ACCOUNT_BALANCE.getDesc());
}
// 扣减余额
companyService.updateUserBalanceByCompanyId(deductionBalance, companyId);
PayTemplateUser templateUser;
for (Long userId : userIds) {
templateUser = new PayTemplateUser();
templateUser.setUserId(userId);
templateUser.setPayTemplateId(templateId);
// 插入信息
Boolean result = payTemplateUserService.add(templateUser);
payTemplateLogService.addPayTemplateLog(templateId, userId, result);
}
}
}
}

Loading…
Cancel
Save