TRX před 1 rokem
rodič
revize
9414e83a3b

+ 0 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/ExcelUserParam.java

@@ -1,7 +1,6 @@
 package com.zhongshu.card.client.model.school;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
-import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;

+ 10 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/model/order/OrderCreateParam.java

@@ -4,6 +4,8 @@ import com.zhongshu.card.client.openApi.base.ProjectCodeParam;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * openAPI 创建订单
  * @author TRX
@@ -15,5 +17,13 @@ public class OrderCreateParam extends ProjectCodeParam {
     @Schema(description = "设备id")
     private String deviceId;
 
+    @Schema(description = "消费号(用于识别上传数据不重复")
+    private String orderNo;
+
+    @Schema(description = "金额,单位:元")
+    private BigDecimal amount;
+
+    @Schema(description = "创建订单用户userId")
+    private String createUserId;
 
 }

+ 2 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/order/ExpenseFlowOpenApiController.java

@@ -6,7 +6,7 @@ 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.service.openAPI.ExpenseFlowOpenApiService;
+import com.zhongshu.card.server.core.service.openAPI.order.OrderOpenApiService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.RestController;
 public class ExpenseFlowOpenApiController {
 
     @Autowired
-    private ExpenseFlowOpenApiService expenseFlowOpenApiService;
+    private OrderOpenApiService expenseFlowOpenApiService;
 
     @Operation(summary = "创建订单", description = "创建订单")
     @RequestMapping(value = {"createOrder"}, method = {RequestMethod.POST})

+ 4 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/impl/OrganizationUserDaoImpl.java

@@ -146,6 +146,10 @@ public class OrganizationUserDaoImpl extends BaseImpl implements OrganizationUse
             criteria.and("isOrg").is(param.getIsOrg());
         }
 
+        if (param.getAddType() != null) {
+            criteria.and("addType").is(param.getAddType());
+        }
+
         // 模糊搜索
         List<Criteria> criterias = new ArrayList<>();
         // 用户名称

+ 3 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/payment/ExpenseFlowDao.java

@@ -24,4 +24,7 @@ public interface ExpenseFlowDao extends MongoDao<ExpenseFlow>, ExpenseFlowDaoExt
     ExpenseFlow findTopByOrderNoOrderByCreateTimeDesc(String orderNo);
 
     ExpenseFlow findTopByRefundNo(String refundNo);
+
+    void deleteByOrderNo(String orderNo);
+
 }

+ 77 - 5
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/ExpenseFlowOpenApiService.java → FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/order/OrderOpenApiService.java

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

+ 13 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java

@@ -731,6 +731,19 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         }
     }
 
+    /**
+     * 删除
+     * @param orderNo
+     * @return
+     */
+    public ResultContent deleteOrderByOrderNo(String orderNo) {
+        if (ObjectUtils.isEmpty(orderNo)) {
+            return ResultContent.buildFail("orderNo为空");
+        }
+        expenseFlowDao.deleteByOrderNo(orderNo);
+        return ResultContent.buildSuccess();
+    }
+
     /**
      * 商户订单查询
      *