|
@@ -1,13 +1,25 @@
|
|
|
package com.fs.company.service.impl;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.fs.common.annotation.RepeatSubmit;
|
|
|
+import com.fs.common.core.domain.R;
|
|
|
+import com.fs.common.exception.CustomException;
|
|
|
+import com.fs.company.domain.*;
|
|
|
+import com.fs.company.dto.CompBuySmsDTO;
|
|
|
+import com.fs.company.mapper.*;
|
|
|
import com.fs.company.vo.CompanySmsListVO;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.http.util.Asserts;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import com.fs.company.mapper.CompanySmsMapper;
|
|
|
-import com.fs.company.domain.CompanySms;
|
|
|
import com.fs.company.service.ICompanySmsService;
|
|
|
+import org.springframework.transaction.annotation.Propagation;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
/**
|
|
|
* 公司短信Service业务层处理
|
|
@@ -15,12 +27,24 @@ import com.fs.company.service.ICompanySmsService;
|
|
|
* @author fs
|
|
|
* @date 2023-01-09
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class CompanySmsServiceImpl implements ICompanySmsService
|
|
|
{
|
|
|
@Autowired
|
|
|
private CompanySmsMapper companySmsMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private CompanyMapper companyMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CompanySmsPackageMapper companySmsPackageMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CompanySmsOrderMapper companySmsOrderMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CompanyMoneyLogsMapper companyMoneyLogsMapper;
|
|
|
/**
|
|
|
* 查询公司短信
|
|
|
*
|
|
@@ -119,4 +143,97 @@ public class CompanySmsServiceImpl implements ICompanySmsService
|
|
|
public CompanySms selectCompanySmsByCompanyIdForUpdate(Long companyId) {
|
|
|
return companySmsMapper.selectCompanySmsByCompanyIdForUpdate(companyId);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 公司充值短信套餐
|
|
|
+ *
|
|
|
+ * @param compBuySmsDTO 请求参数
|
|
|
+ * @return CompanySmsOrder 订单数据
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Throwable.class,propagation = Propagation.REQUIRED)
|
|
|
+ public CompanySmsOrder buySms(CompBuySmsDTO compBuySmsDTO) {
|
|
|
+ String companyId = compBuySmsDTO.getCompanyId();
|
|
|
+ String packageId = compBuySmsDTO.getPackageId();
|
|
|
+ log.info("开始购买短信服务,公司ID:{},套餐ID:{}", companyId, packageId);
|
|
|
+
|
|
|
+ Company company = companyMapper.selectCompanyByIdForUpdate(Long.valueOf(companyId));
|
|
|
+ Asserts.notNull(company,"该公司没有不存在!");
|
|
|
+ log.info("查询公司信息,公司ID:{},公司信息:{}", companyId, company);
|
|
|
+
|
|
|
+ CompanySmsPackage companySmsPackage = companySmsPackageMapper.selectCompanySmsPackageById(Long.valueOf(packageId));
|
|
|
+ Asserts.notNull(companySmsPackage, "该套餐不存在!");
|
|
|
+ log.info("查询短信套餐信息,套餐ID:{},套餐信息:{}", packageId, companySmsPackage);
|
|
|
+
|
|
|
+ if(ObjectUtil.notEqual(companySmsPackage.getStatus(),1L)){
|
|
|
+ log.error("购买短信套餐失败,套餐已禁用,套餐ID:{}", packageId);
|
|
|
+ throw new CustomException("该套餐已经禁用!");
|
|
|
+ }
|
|
|
+ if(ObjectUtil.isNull(company.getMoney())){
|
|
|
+ company.setMoney(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ObjectUtil.isNull(companySmsPackage.getPrice())){
|
|
|
+ companySmsPackage.setPrice(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查公司余额是否足够
|
|
|
+ if(ObjectUtil.equal(company.getMoney().compareTo(companySmsPackage.getPrice()),-1)) {
|
|
|
+ log.error("购买短信套餐失败,公司余额不足,公司ID:{},当前余额:{},套餐价格:{}", companyId, company.getMoney(), companySmsPackage.getPrice());
|
|
|
+ throw new CustomException("当前公司余额不足以完成支付本次购买!");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 创建订单
|
|
|
+ CompanySmsOrder order = new CompanySmsOrder();
|
|
|
+ order.setCompanyId(Long.valueOf(companyId));
|
|
|
+ order.setPackageId(Long.valueOf(packageId));
|
|
|
+ order.setSmsCount(companySmsPackage.getSmsCount());
|
|
|
+ order.setPrice(companySmsPackage.getPrice());
|
|
|
+ order.setPayMoney(companySmsPackage.getPrice());
|
|
|
+ order.setOrderCode(IdUtil.getSnowflake(0, 0).nextIdStr());
|
|
|
+ order.setStatus(1);
|
|
|
+ order.setPayTime(new Date());
|
|
|
+ companySmsOrderMapper.insertCompanySmsOrder(order);
|
|
|
+
|
|
|
+
|
|
|
+ // 套餐数量变化
|
|
|
+ CompanySms companySms = companySmsMapper.selectCompanySmsByCompanyIdForUpdate(Long.valueOf(companyId));
|
|
|
+ if(ObjectUtil.isNull(companySms)){
|
|
|
+ companySms = new CompanySms();
|
|
|
+ companySms.setCompanyId(Long.valueOf(companyId));
|
|
|
+ companySms.setRemainSmsCount(companySmsPackage.getSmsCount());
|
|
|
+ companySms.setTotalSmsCount(companySmsPackage.getSmsCount());
|
|
|
+ companySmsMapper.insertCompanySms(companySms);
|
|
|
+ log.info("首次购买短信,插入公司短信余量记录,公司ID:{}", companyId);
|
|
|
+ } else {
|
|
|
+ companySms.setRemainSmsCount(companySms.getRemainSmsCount() + companySmsPackage.getSmsCount());
|
|
|
+ companySms.setTotalSmsCount(companySms.getTotalSmsCount() + companySmsPackage.getSmsCount());
|
|
|
+ companySmsMapper.updateCompanySms(companySms);
|
|
|
+ log.info("更新公司短信余量记录,公司ID:{},更新后短信余量:{}", companyId, companySms.getRemainSmsCount());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 公司余额扣减
|
|
|
+ company.setMoney(company.getMoney().subtract(companySmsPackage.getPrice()));
|
|
|
+ companyMapper.updateCompany(company);
|
|
|
+ log.info("更新公司余额,公司ID:{},更新后余额:{}", companyId, company.getMoney());
|
|
|
+
|
|
|
+
|
|
|
+ // 新增公司账户记录
|
|
|
+ CompanyMoneyLogs companyMoneyLogs = new CompanyMoneyLogs();
|
|
|
+ companyMoneyLogs.setCompanyId(Long.valueOf(companyId));
|
|
|
+ companyMoneyLogs.setMoney(companySmsPackage.getPrice());
|
|
|
+ companyMoneyLogs.setBalance(company.getMoney());
|
|
|
+
|
|
|
+ companyMoneyLogs.setRemark("短信充值");
|
|
|
+
|
|
|
+ companyMoneyLogs.setBusinessId(String.valueOf(order.getOrderId()));
|
|
|
+ companyMoneyLogs.setLogsType(11);
|
|
|
+
|
|
|
+ companyMoneyLogsMapper.insertCompanyMoneyLogs(companyMoneyLogs);
|
|
|
+ log.info("插入公司账户记录,公司ID:{},业务ID(订单ID):{}", companyId, order.getOrderId());
|
|
|
+ log.info("购买短信服务成功,订单号:{}", order.getOrderCode());
|
|
|
+
|
|
|
+ return order;
|
|
|
+ }
|
|
|
}
|