|
|
@@ -1,18 +1,26 @@
|
|
|
-package com.zhongshu.card.server.core.service.openAPI;
|
|
|
+package com.zhongshu.card.server.core.service.openAPI.order;
|
|
|
|
|
|
import com.github.microservice.components.data.base.util.PageEntityUtil;
|
|
|
import com.github.microservice.net.ResultContent;
|
|
|
import com.github.microservice.types.OrderModeType;
|
|
|
import com.github.microservice.types.OrderState;
|
|
|
+import com.github.microservice.types.deviceUse.OrderFromType;
|
|
|
+import com.github.microservice.types.payment.ChargeableType;
|
|
|
+import com.zhongshu.card.client.model.payment.CreateOrderParam;
|
|
|
import com.zhongshu.card.client.model.payment.ExpenseFlowSearch;
|
|
|
import com.zhongshu.card.client.openApi.model.ExpenseFlowOpenApiModel;
|
|
|
import com.zhongshu.card.client.openApi.model.order.OrderCreateParam;
|
|
|
import com.zhongshu.card.client.openApi.params.ExpenseFlowOpenApiSearch;
|
|
|
import com.zhongshu.card.client.openApi.params.PaymentNoParam;
|
|
|
+import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
|
|
|
+import com.zhongshu.card.server.core.dao.org.UserCountDao;
|
|
|
import com.zhongshu.card.server.core.dao.payment.ExpenseFlowDao;
|
|
|
+import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
|
|
|
+import com.zhongshu.card.server.core.domain.org.UserAccount;
|
|
|
import com.zhongshu.card.server.core.domain.payment.ExpenseFlow;
|
|
|
import com.zhongshu.card.server.core.service.base.CommonService;
|
|
|
import com.zhongshu.card.server.core.service.base.SuperService;
|
|
|
+import com.zhongshu.card.server.core.service.payment.ExpenseFlowServiceImpl;
|
|
|
import com.zhongshu.card.server.core.util.BeanUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
@@ -23,6 +31,8 @@ import org.springframework.data.domain.PageRequest;
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+
|
|
|
/**
|
|
|
* 订单相关的 openAPI
|
|
|
*
|
|
|
@@ -31,7 +41,7 @@ import org.springframework.stereotype.Service;
|
|
|
*/
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
-public class ExpenseFlowOpenApiService extends SuperService {
|
|
|
+public class OrderOpenApiService extends SuperService {
|
|
|
|
|
|
@Autowired
|
|
|
private ExpenseFlowDao expenseFlowDao;
|
|
|
@@ -39,6 +49,15 @@ public class ExpenseFlowOpenApiService extends SuperService {
|
|
|
@Autowired
|
|
|
private CommonService commonService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private DeviceInfoDao deviceInfoDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExpenseFlowServiceImpl expenseFlowService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserCountDao userCountDao;
|
|
|
+
|
|
|
/**
|
|
|
* 创建订单
|
|
|
* @param param
|
|
|
@@ -50,11 +69,64 @@ public class ExpenseFlowOpenApiService extends SuperService {
|
|
|
if (resultContent.isFailed()) {
|
|
|
return ResultContent.buildFail(resultContent.getMsg());
|
|
|
}
|
|
|
+ if (StringUtils.isEmpty(param.getOrderNo())) {
|
|
|
+ return ResultContent.buildFail("orderNo不能为空");
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(param.getDeviceId())) {
|
|
|
+ return ResultContent.buildFail("deviceId不能为空");
|
|
|
+ }
|
|
|
+ DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(param.getDeviceId());
|
|
|
+ if (ObjectUtils.isEmpty(deviceInfo)) {
|
|
|
+ return ResultContent.buildFail("设备不存在");
|
|
|
+ }
|
|
|
+ if (!deviceInfo.getProjectInfoCode().equals(projectCode)) {
|
|
|
+ return ResultContent.buildFail(String.format("设备不属定项目:%s", projectCode));
|
|
|
+ }
|
|
|
+ if (param.getAmount() == null || BigDecimal.ZERO.compareTo(param.getAmount()) >= 0) {
|
|
|
+ return ResultContent.buildFail("消费金额不能为空或小于等于0");
|
|
|
+ }
|
|
|
+ String mqttDataId = param.getOrderNo();
|
|
|
+ ExpenseFlow expenseFlow = expenseFlowService.init(mqttDataId);
|
|
|
+ if (ObjectUtils.isEmpty(expenseFlow)) {
|
|
|
+ return ResultContent.buildFail("订单生成失败,请稍后再试");
|
|
|
+ }
|
|
|
String projectOid = resultContent.getContent();
|
|
|
+ UserAccount userAccount = null;
|
|
|
+ if (StringUtils.isNotEmpty(param.getCreateUserId())) {
|
|
|
+ userAccount = userCountDao.findTopByUserId(param.getCreateUserId());
|
|
|
+ if (ObjectUtils.isEmpty(userAccount)) {
|
|
|
+ return ResultContent.buildFail("创建订单用户不存在");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ExpenseFlow tempOrderNo = expenseFlowDao.findTopByOrderNoOrderByCreateTimeDesc(param.getOrderNo());
|
|
|
+ if (ObjectUtils.isNotEmpty(tempOrderNo)) {
|
|
|
+ return ResultContent.buildFail(String.format("消费号已存在:%s", param.getOrderNo()));
|
|
|
+ }
|
|
|
+ String amount = param.getAmount().toPlainString();
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- return ResultContent.buildSuccess();
|
|
|
+ CreateOrderParam orderParam = new CreateOrderParam();
|
|
|
+ orderParam.setDeviceId(deviceInfo.getDeviceId());
|
|
|
+ if (userAccount != null) {
|
|
|
+ orderParam.setUserId(userAccount.getUserId());
|
|
|
+ }
|
|
|
+ orderParam.setOrderNo(param.getOrderNo());
|
|
|
+ orderParam.setAmount(amount);
|
|
|
+ // 扫码下单
|
|
|
+ orderParam.setOrderFromType(OrderFromType.OpenApi);
|
|
|
+ // 是否可以匿名消费
|
|
|
+ orderParam.setIsAnonymous(Boolean.TRUE);
|
|
|
+ // 是否是浮动计费 计费方式
|
|
|
+ orderParam.setChargeableType(ChargeableType.Specified);
|
|
|
+ // 不指定支付方式
|
|
|
+ orderParam.setAppointPaymentType(Boolean.FALSE);
|
|
|
+ // 创建订单 (判断是否创建成功)
|
|
|
+ ResultContent<ExpenseFlow> content = expenseFlowService.createOrder(orderParam, expenseFlow);
|
|
|
+ expenseFlow = expenseFlowService.saveInfo(expenseFlow);
|
|
|
+ if (!expenseFlow.getVerifyParamIsSuccess()) {
|
|
|
+ expenseFlowService.deleteOrderByOrderNo(expenseFlow.getOrderNo());
|
|
|
+ return ResultContent.buildFail(expenseFlow.getVerifyParamMsg());
|
|
|
+ }
|
|
|
+ return expenseFlowService.getOrderPayDetail(expenseFlow.getId());
|
|
|
}
|
|
|
|
|
|
/**
|