TRX 1 год назад
Родитель
Сommit
033bb7b230

+ 4 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/ProjectPaySettingDao.java

@@ -2,6 +2,7 @@ package com.zhongshu.card.server.core.dao.projectAbout;
 
 import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
 import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.server.core.domain.paySetting.ProjectPaySetting;
 
 import java.util.List;
@@ -10,9 +11,10 @@ public interface ProjectPaySettingDao extends MongoDao<ProjectPaySetting> {
 
     ProjectPaySetting findTopById(String id);
 
-    ProjectPaySetting findTopByProjectOid(String projectOid);
-
     ProjectPaySetting findTopByProjectOidAndChannelType(String projectOid, PaymentType channelType);
 
     List<ProjectPaySetting> findByProjectOid(String projectOid);
+
+    ProjectPaySetting findTopByProjectOidAndState(String projectOid, DataState state);
+
 }

+ 5 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java

@@ -20,6 +20,8 @@ import org.springframework.data.mongodb.core.mapping.DBRef;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 消费流水
@@ -142,7 +144,7 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "订单是否创建成功")
     private Boolean isCreateSuccess = Boolean.TRUE;
 
-    @Schema(description = "编辑支付设备和方式")
+    @Schema(description = "支付设备和方式")
     private PaymentDeviceType paymentDeviceType;
 
     @Schema(description = "验证参数是否符合要求")
@@ -185,6 +187,8 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "支付耗用的时间")
     private Long payMillis = 0L;
 
+    private List<String> transactionIds = new ArrayList<String>();
+
     //-----------------------退款 start--------------------------
     @Schema(description = "是否退款")
     private Boolean isRefund;

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceInfoServiceImpl.java

@@ -140,7 +140,7 @@ public class DeviceInfoServiceImpl extends SuperService implements DeviceInfoSer
                 return ResultContent.buildFail("projectOid不存在");
             }
             //TODO 放开查询所有的设备
-//            param.setProjectInfoCode(organization.getCode());
+            param.setProjectInfoCode(organization.getCode());
         }
         Page<DeviceInfo> page = deviceInfoDao.page(pageable, param);
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/IndexService.java

@@ -127,7 +127,7 @@ public class IndexService {
 
         OrganizationUser organizationUser = organizationUserDao.findTopByOrganizationAndUser(organization, userAccount);
         if (ObjectUtils.isEmpty(organizationUser)) {
-            return ResultContent.buildFail("当前用户不是超管用户,登录失败");
+            return ResultContent.buildFail("用户不是超管用户,登录失败");
         }
 
         LoginCommonModel commonModel = new LoginCommonModel();

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

@@ -482,6 +482,19 @@ public class ProjectPaySettingServiceImpl extends SuperService {
         return ResultContent.buildSuccess(paySettingInfo);
     }
 
+    public ResultContent<PaymentType> getProjectPayment(String projectOid) {
+        ProjectPaySetting paySetting = projectPaySettingDao.findTopByProjectOidAndState(
+                projectOid, DataState.Enable);
+        if (ObjectUtils.isEmpty(paySetting)) {
+            return ResultContent.buildFail(String.format("项目未设置可用的支付产品"));
+        }
+        PaymentType paymentType = null;
+        if (paySetting.getChannelType() == PaymentType.WeChat) {
+            paymentType = PaymentType.UserWallet;
+        }
+        return ResultContent.buildSuccess(paymentType);
+    }
+
     /**
      * 更新/初始支付中心的数据
      *

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

@@ -10,6 +10,8 @@ import com.github.microservice.models.hxz.ConsumTransactionsResult;
 import com.github.microservice.models.hxz.QRCodeTransactionModel;
 import com.github.microservice.models.hxz.WxPayResult;
 import com.github.microservice.models.type.OrderFromType;
+import com.github.microservice.pay.client.model.ledger.TransactionLogModel;
+import com.github.microservice.pay.client.ret.ResultState;
 import com.github.microservice.types.payment.PaymentDeviceType;
 import com.github.microservice.types.payment.PaymentType;
 import com.github.microservice.net.ResultContent;
@@ -28,6 +30,8 @@ import com.zhongshu.card.client.service.payment.ExpenseFlowService;
 import com.zhongshu.card.client.type.*;
 import com.zhongshu.card.client.type.school.CardState;
 import com.zhongshu.card.client.utils.DateUtils;
+import com.zhongshu.card.server.core.dao.devices.DevicePermissDao;
+import com.zhongshu.card.server.core.dao.org.OrganizationDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
 import com.zhongshu.card.server.core.dao.payment.ExpenseFlowDao;
 import com.zhongshu.card.server.core.dao.projectAbout.ProjectPaySettingDao;
@@ -35,6 +39,7 @@ import com.zhongshu.card.server.core.dao.school.CardInfoDao;
 import com.zhongshu.card.server.core.dao.devices.DeviceBindDao;
 import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
 import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
+import com.zhongshu.card.server.core.domain.devices.DevicePermiss;
 import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.org.OrganizationRelation;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
@@ -45,6 +50,8 @@ import com.zhongshu.card.server.core.domain.devices.DeviceBind;
 import com.zhongshu.card.server.core.httpRequest.ApiRequestService;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.org.OrganizationServiceImpl;
+import com.zhongshu.card.server.core.service.pay.BalancePayService;
+import com.zhongshu.card.server.core.service.paySetting.ProjectPaySettingServiceImpl;
 import com.zhongshu.card.server.core.service.user.OperationLogsService;
 import com.zhongshu.card.server.core.util.*;
 import com.zhongshu.payment.client.model.param.AmountUpdateParam;
@@ -109,6 +116,18 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
     @Autowired
     ProjectPaySettingDao projectPaySettingDao;
 
+    @Autowired
+    private OrganizationDao organizationDao;
+
+    @Autowired
+    private ProjectPaySettingServiceImpl projectPaySettingService;
+
+    @Autowired
+    private DevicePermissDao devicePermissDao;
+
+    @Autowired
+    private BalancePayService balancePayService;
+
     /**
      * 创建流水
      *
@@ -145,8 +164,11 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         expenseFlow.setDeviceId(deviceId);
         // 支付来源  刷卡  二维码  刷脸
         expenseFlow.setOrderFromType(iotParam.getOrderFromType());
+        // 传过来的参数
         expenseFlow.setParam(iotParam);
+        // 支付来源设备产品类型
         expenseFlow.setPaymentDeviceType(PaymentDeviceType.HxzConsumTransactions);
+
         expenseFlow.setOrderType(OrderState.WAIT_PAYMENT);
 
         // 验证参数、填充数据
@@ -173,28 +195,22 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         if (entity.getMode() != null) {
             if (entity.getMode() == 0) {
                 entity.setOrderModeType(OrderModeType.Consume);
-                // 消费模式
-                PaymentType paymentType = entity.getPaymentType();
-                // 调用支付中心
-                CreateOrderParam param = new CreateOrderParam();
-                param.setProjectOid(entity.getProjectOid());
-                param.setUserId(entity.getUserId());
-                param.setShopId(entity.getShopOid());
-                param.setSchoolId(entity.getSchoolOid());
-                param.setTotal(entity.getPayAmount());
-                param.setOutTradeNo(entity.getPaymentNo());
-                param.setPaymentType(paymentType);
-                String desc = "消费";
-                param.setDescription(desc);
 
+                String desc = "消费";
                 OperationLogsAddParam logsAddParam = initLog(entity.getUserId());
                 logsAddParam.setTitle(desc);
                 logsAddParam.setDataId(entity.getPaymentNo());
                 entity.setPayStartTime(System.currentTimeMillis());
-                ResultContent content = orderPayFeignService.createAndPay(param);
-                if (content.isSuccess()) {
+
+                com.github.microservice.pay.client.ret.ResultContent<List<TransactionLogModel>> resultContent = balancePayService.balancePay(
+                        entity.getProjectOid(), entity.getShopOid(), entity.getUserId(),
+                        entity.getPayAmount(), entity.getPaymentNo(), entity.getRemark()
+                );
+                if (resultContent.getState() == ResultState.Success) {
                     // 关联参数
                     String msg = "支付成功";
+                    List<TransactionLogModel> list = resultContent.getContent();
+                    entity.setTransactionIds(list.stream().map(it -> it.getId()).collect(Collectors.toUnmodifiableList()));
                     entity.setPaymentStatus(msg);
                     entity.setIsPaySuccess(Boolean.TRUE);
                     entity.setPayRemark(msg);
@@ -203,7 +219,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
                     logsAddParam.setLevel(LogsLevel.Low);
                     logsAddParam.setContent(msg);
                 } else {
-                    String msg = content.getMsg();
+                    String msg = resultContent.getMsg();
                     if (StringUtils.isNotEmpty(msg) && msg.contains("Connection reset")) {
                         msg = "调用支付中心失败";
                     }
@@ -301,35 +317,20 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             return;
         }
 
-        // 查询设备绑定德 商户 学校
-        if (StringUtils.isNotEmpty(deviceId)) {
-            DeviceBind deviceBind = deviceBindDao.findTopByDeviceId(deviceId);
-            if (ObjectUtils.isNotEmpty(deviceBind)) {
-                entity.setSchoolOid(deviceBind.getSchoolInfoOid());
-                entity.setShopOid(deviceBind.getShopInfoOid());
-            }
-        }
-
-        if (StringUtils.isEmpty(entity.getSchoolOid())) {
-            entity.setVerifyError("设备未绑定学校");
-            return;
-        }
-
-        if (StringUtils.isEmpty(entity.getShopOid())) {
-            entity.setVerifyError("设备未绑定商户");
+        // 检查设备是否绑定机构
+        if (StringUtils.isEmpty(deviceInfo.getBeLongOid())) {
+            entity.setVerifyError(String.format("设备未绑定机构"));
             return;
         }
+        entity.setShopOid(deviceInfo.getBeLongOid());
 
-        // 查询学校绑定的项目信息
-        OrganizationRelation relation = organizationService.getSchoolRelationProject(entity.getSchoolOid());
-        if (ObjectUtils.isNotEmpty(relation)) {
-            Organization projectOrg = relation.getRelOrganization();
-            if (ObjectUtils.isNotEmpty(projectOrg)) {
-                entity.setProjectCode(projectOrg.getCode());
-                entity.setProjectOid(projectOrg.getOid());
-            }
+        // 填充项目信息
+        String projectOid = deviceInfo.getProjectOid();
+        Organization projectInfo = organizationDao.findTopByOid(projectOid);
+        if (ObjectUtils.isNotEmpty(projectInfo)) {
+            entity.setProjectCode(projectInfo.getCode());
+            entity.setProjectOid(projectInfo.getOid());
         }
-
         // 验证项目信息
         if (StringUtils.isEmpty(entity.getProjectCode())) {
             entity.setVerifyError("未绑定项目信息");
@@ -337,13 +338,13 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         }
 
         // 确定项目的付款方式
-        ProjectPaySetting projectPaySetting = projectPaySettingDao.findTopByProjectOid(entity.getProjectOid());
-        if (ObjectUtils.isEmpty(projectPaySetting) || projectPaySetting.getChannelType() == null) {
-            entity.setVerifyError("项目为配置支付渠道");
+        ResultContent<PaymentType> resultContent = projectPaySettingService.getProjectPayment(entity.getProjectOid());
+        if (resultContent.isFailed()) {
+            entity.setVerifyError(resultContent.getMsg());
             return;
         }
         // 支付方式来自项目配置
-        PaymentType paymentType = projectPaySetting.getChannelType();
+        PaymentType paymentType = resultContent.getContent();
         entity.setPaymentType(paymentType);
         entity.setPaymentWay(paymentType.getRemark());
 
@@ -396,6 +397,19 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             return;
         }
 
+        // 判断设备和用户是否绑定
+        DevicePermiss devicePermiss = devicePermissDao.findTopByUserIdAndDeviceIdAndProjectOid(
+                entity.getUserId(), entity.getDeviceId(), entity.getProjectOid());
+        if (ObjectUtils.isEmpty(devicePermiss)) {
+            entity.setVerifyError("用户没有使用设备权限");
+            return;
+        }
+        if (devicePermiss.getDataState() == null ||
+                devicePermiss.getDataState() != DataState.Enable) {
+            entity.setVerifyError("用户设备权限未启用");
+            return;
+        }
+
         // 消费设备信息
         if (deviceInfo.getDeviceType() != null) {
             entity.setPayType(deviceInfo.getDeviceType().getRemark());