个微激活码

master
yqy 2 years ago
parent c52d732ac2
commit b4e18527e1

@ -0,0 +1,56 @@
package com.baiye.modules.platform.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "tb_activation_record")
@ApiModel(value = "激活码记录表")
@EntityListeners(AuditingEntityListener.class)
@Getter
@Setter
public class ActivationRecord implements Serializable {
private static final long serialVersionUID = 8623354712013889005L;
@Id
@ApiModelProperty(value = "ID")
@Column(name = "activation_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long activationId;
@ApiModelProperty(value = "激活码")
@Column(name = "activation_code")
private String activationCode;
@ApiModelProperty(value = "所属用户ID")
@Column(name = "user_id")
private Long userId;
@ApiModelProperty(value = "激活码类型 1-月卡2-年卡3:季卡")
@Column(name = "code_type")
private Integer codeType;
@ApiModelProperty(value = "创建时间")
@Column(name = "create_time")
@CreationTimestamp
private java.util.Date createTime;
public ActivationRecord(String activationCode, Long userId, Integer codeType) {
this.activationCode = activationCode;
this.userId = userId;
this.codeType = codeType;
}
public ActivationRecord() {
}
}

@ -0,0 +1,128 @@
package com.baiye.modules.platform.httpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baiye.exception.BadRequestException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Component
public class ActivationCodeRequestApi {
@Value("${activation.url}")
private String URL;
public void register(String name, String pwd) {
try {
Map<String, Object> map = new HashMap<>();
map.put("name", name);
map.put("pwd", pwd);
String post = HttpUtil.post(URL + "/api/auth/registerByBaiye", JSONUtil.toJsonStr(map));
JSONObject jsonObject = JSONUtil.parseObj(post);
String status = jsonObject.get("status").toString();
if (!status.equals("200")) throw new BadRequestException("注册失败");
} catch (Exception e) {
throw new BadRequestException("注册失败");
}
}
public JSONArray getActivationCode(int codeNum, int type, String account) {
try {
String url = URL + "/api/activate-code/genActivateCodeByBaiye";
Map<String, Object> map = new HashMap<>();
map.put("codeNum", codeNum);
map.put("type", type);
map.put("account", account);
String response = HttpUtil.get(url, map);
JSONObject jsonObject = JSONUtil.parseObj(response);
String status = jsonObject.get("status").toString();
if (status.equals("200")) {
return JSONUtil.parseArray(jsonObject.get("data"));
} else {
throw new BadRequestException("激活失败");
}
} catch (Exception e) {
throw new BadRequestException("激活失败");
}
}
}

@ -0,0 +1,8 @@
package com.baiye.modules.platform.repository;
import com.baiye.modules.platform.domain.ActivationRecord;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface ActivationCodeRepository extends JpaRepository<ActivationRecord, Long>, JpaSpecificationExecutor<ActivationRecord> {
}

@ -131,4 +131,11 @@ public interface CompanyRepository extends JpaRepository<Company, Long>, JpaSpec
@Modifying
@Query("UPDATE Company set companyType = ?1 where id = ?2")
void updateCompanyTypeById(Integer companyType, Long companyId);
/**
*
*/
@Modifying
@Query("UPDATE Company set isActivation = ?1 where id = ?2")
void updateCompanyIsActivationById(Integer isActivation, Long companyId);
}

@ -0,0 +1,38 @@
package com.baiye.modules.platform.rest;
import com.baiye.http.CommonResponse;
import com.baiye.model.dto.ActivationCodeQueryCriteria;
import com.baiye.model.dto.TaskQueryCriteria;
import com.baiye.modules.platform.service.ActivationCodeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/activationRecord")
@Api(tags = "激活码管理")
public class ActivationCodeController {
private final ActivationCodeService activationCodeService;
@ApiOperation("生成激活码")
@GetMapping("/generate")
public CommonResponse<Object> generateActivationCode(@RequestParam("codeNum") int codeNum, @RequestParam("codeType") int codeType){
activationCodeService.generateActivationCode(codeNum, codeType);
return CommonResponse.createBySuccess();
}
@ApiOperation("查询(分页)")
@GetMapping("/queryAll")
public ResponseEntity<Object> queryAll(ActivationCodeQueryCriteria activationCodeQueryCriteria, Pageable pageable) {
return new ResponseEntity<>(activationCodeService.queryAll(activationCodeQueryCriteria, pageable), HttpStatus.OK);
}
}

@ -0,0 +1,20 @@
package com.baiye.modules.platform.service;
import com.baiye.model.dto.ActivationCodeQueryCriteria;
import org.springframework.data.domain.Pageable;
public interface ActivationCodeService {
/**
*
*
* @param codeNum
* @param codeType 1-2-3: -----:
*/
void generateActivationCode(int codeNum, int codeType);
/**
*
*/
Object queryAll(ActivationCodeQueryCriteria activationCodeQueryCriteria, Pageable pageable);
}

@ -104,4 +104,12 @@ public interface WechatSendMessageService {
* @param id
*/
void deleteId(Long id);
/**
*
* @param namePrefix
* @param name
* @param companyId ID
*/
void register(String namePrefix, String name, Long companyId);
}

@ -0,0 +1,30 @@
package com.baiye.modules.platform.service.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class ActivationCodeDto implements Serializable {
private static final long serialVersionUID = 7917504710223840272L;
/** 防止精度丢失 */
@JsonSerialize(using= ToStringSerializer.class)
private Long activationId;
@ApiModelProperty(value = "激活码")
private String activationCode;
@ApiModelProperty(value = "所属用户ID")
private Long userId;
@ApiModelProperty(value = "激活码类型 1-月卡2-年卡3:季卡")
private Integer codeType;
@ApiModelProperty(value = "创建时间")
private java.util.Date createTime;
}

@ -0,0 +1,86 @@
package com.baiye.modules.platform.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONArray;
import com.baiye.exception.BadRequestException;
import com.baiye.model.dto.ActivationCodeQueryCriteria;
import com.baiye.modules.platform.domain.ActivationRecord;
import com.baiye.modules.platform.domain.Company;
import com.baiye.modules.platform.httpRequest.ActivationCodeRequestApi;
import com.baiye.modules.platform.repository.ActivationCodeRepository;
import com.baiye.modules.platform.repository.CompanyRepository;
import com.baiye.modules.platform.service.ActivationCodeService;
import com.baiye.modules.platform.service.CompanyService;
import com.baiye.modules.platform.service.WechatSendMessageService;
import com.baiye.modules.platform.service.mapstruct.ActivationCodeMapper;
import com.baiye.util.PageUtil;
import com.baiye.util.QueryHelp;
import com.baiye.util.SecurityUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
@RequiredArgsConstructor
public class ActivationCodeServiceImpl implements ActivationCodeService {
private final ActivationCodeRepository activationCodeRepository;
private final CompanyRepository companyRepository;
private final ActivationCodeRequestApi activationCodeRequestApi;
private final ActivationCodeMapper activationCodeMapper;
private final CompanyService companyService;
private final WechatSendMessageService wechatSendMessageService;
@Value("${activation.namePrefix}")
private String namePrefix;
@Override
@Transactional(rollbackFor = Exception.class)
public void generateActivationCode(int codeNum, int codeType) {
Long currentUserId = SecurityUtils.getCurrentUserId();
String name = namePrefix + currentUserId;
Company company = companyRepository.findByUserId(currentUserId);
Integer isActivation = company.getIsActivation();
// 未激活过,先进行注册
if (isActivation == 0) wechatSendMessageService.register(namePrefix, name, company.getId());
// 计费,默认季卡
double price = 300.00;
if (codeType == 2) price = 1080.00;
double totalPrice = company.getUserBalance() - (codeNum * price);
if (totalPrice < 0) throw new BadRequestException("余额不足");
// 生成激活码
JSONArray array = activationCodeRequestApi.getActivationCode(codeNum, codeType, name);
if (CollUtil.isNotEmpty(array)) {
// 扣费
companyService.updateUserBalanceByCompanyId(totalPrice, company.getId());
// 插入激活码记录
List<ActivationRecord> list = new ArrayList<>();
for (Object obj : array) {
ActivationRecord activationRecord = new ActivationRecord((String) obj, currentUserId, codeType);
list.add(activationRecord);
}
activationCodeRepository.saveAll(list);
}
}
@Override
public Object queryAll(ActivationCodeQueryCriteria criteria, Pageable pageable) {
PageRequest pageRequest = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by(Sort.Direction.DESC, "createTime"));
criteria.setUserId(SecurityUtils.getCurrentUserId());
Page<ActivationRecord> page = activationCodeRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageRequest);
return PageUtil.toPage(page.map(activationCodeMapper::toDto));
}
}

@ -74,6 +74,7 @@ public class CompanyServiceImpl implements CompanyService {
byUserId.setApplicationTime(DateUtil.date());
byUserId.setCompanyCode(byUserId.getCompanyName().trim());
byUserId.setSonUserNum(100);
byUserId.setIsActivation(DefaultNumberConstants.ZERO_NUMBER);
userRepository.updateStatusById(Boolean.FALSE, SecurityUtils.getCurrentUserId());
return companyMapper.toDto(companyRepository.save(byUserId));
}
@ -107,6 +108,7 @@ public class CompanyServiceImpl implements CompanyService {
Company company = new Company();
BeanUtil.copyProperties(companyDto, company);
company.setSonUserNum(100);
company.setIsActivation(DefaultNumberConstants.ZERO_NUMBER);
return companyMapper.toDto(companyRepository.save(company));
}

@ -19,7 +19,10 @@ import cn.hutool.core.util.ObjectUtil;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.exception.BadRequestException;
import com.baiye.model.enums.ResponseCode;
import com.baiye.modules.platform.domain.Company;
import com.baiye.modules.platform.domain.WechatSendMessage;
import com.baiye.modules.platform.httpRequest.ActivationCodeRequestApi;
import com.baiye.modules.platform.repository.CompanyRepository;
import com.baiye.modules.platform.repository.WechatSendMessageRepository;
import com.baiye.modules.platform.service.WechatSendMessageService;
import com.baiye.modules.platform.service.dto.WechatSendMessageDto;
@ -30,6 +33,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
@ -51,6 +55,8 @@ public class WechatSendMessageServiceImpl implements WechatSendMessageService {
private final WechatSendMessageRepository wechatSendMessageRepository;
private final WechatSendMessageMapper wechatSendMessageMapper;
private final CompanyRepository companyRepository;
private final ActivationCodeRequestApi activationCodeRequestApi;
@Override
public Map<String, Object> queryAll(WechatSendMessageQueryCriteria criteria, Pageable pageable) {
@ -148,4 +154,20 @@ public class WechatSendMessageServiceImpl implements WechatSendMessageService {
wechatSendMessageRepository.deleteById(id);
}
/**
* Propagation.REQUIRES_NEW:
* 1/
* 2
* 3service,springTransactionInterceptor,-generateActivationCoderegister(),
* thisregister().
*/
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public void register(String namePrefix, String name, Long companyId) {
String pwd = namePrefix + "123456";
activationCodeRequestApi.register(name, pwd);
// 修改公司激活状态
companyRepository.updateCompanyIsActivationById(DefaultNumberConstants.ONE_NUMBER, companyId);
}
}

@ -0,0 +1,12 @@
package com.baiye.modules.platform.service.mapstruct;
import com.baiye.model.base.BaseMapper;
import com.baiye.modules.platform.domain.ActivationRecord;
import com.baiye.modules.platform.domain.Label;
import com.baiye.modules.platform.service.dto.ActivationCodeDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ActivationCodeMapper extends BaseMapper<ActivationCodeDto, ActivationRecord> {
}

@ -197,3 +197,9 @@ ocean:
ad-back:
url: cb.tuoz.net/api/ad-platform/tag
token: 4f41de7d-97a3-4a40-b682-b9fc73b92459
activation:
url: http://81.69.250.46:18877
namePrefix: by_
# url: fission-server.xhuatea.com
# namePrefix: by_zs_

@ -195,3 +195,7 @@ ocean:
ad-back:
url: cb.tuoz.net/api/ad-platform/tag
token: 4f41de7d-97a3-4a40-b682-b9fc73b92459
activation:
url: fission-server.xhuatea.com
namePrefix: by_

@ -0,0 +1,14 @@
package com.baiye.model.dto;
import com.baiye.annotation.Query;
import lombok.Data;
@Data
public class ActivationCodeQueryCriteria {
@Query
private String activationCode;
@Query
private Long userId;
}

@ -134,4 +134,8 @@ public class BaseCompany extends BaseEntity implements Serializable {
@ApiModelProperty("子用户数量")
@Column(name = "son_user_num")
private Integer sonUserNum;
@ApiModelProperty("公司是否激活 0:未激活 1:激活过")
@Column(name = "is_activation")
private Integer isActivation;
}

Loading…
Cancel
Save