TRX 1 år sedan
förälder
incheckning
46b05cfb36
18 ändrade filer med 257 tillägg och 53 borttagningar
  1. 12 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/devices/DeviceInfoSearch.java
  2. 4 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountDetailsModel.java
  3. 1 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseRefundParam.java
  4. 0 1
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoPoolQueryParam.java
  5. 2 0
      FullCardClient/src/main/java/com/zhongshu/card/client/service/org/UserAccountService.java
  6. 4 0
      FullCardClient/src/main/java/com/zhongshu/card/client/service/payment/ExpenseFlowService.java
  7. 2 0
      FullCardClient/src/main/java/com/zhongshu/card/client/service/school/DeviceInfoService.java
  8. 9 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/devices/DeviceInfoController.java
  9. 21 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/payment/ExpenseFlowController.java
  10. 7 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/user/UserInfoController.java
  11. 5 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/impl/DeviceInfoDaoImpl.java
  12. 10 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/payment/impl/ExpenseFlowDaoImpl.java
  13. 5 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java
  14. 32 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceInfoServiceImpl.java
  15. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceSyncFromIotService.java
  16. 59 48
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java
  17. 67 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/PayCallService.java
  18. 16 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/user/UserAccountServiceImpl.java

+ 12 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/devices/DeviceInfoSearch.java

@@ -6,6 +6,9 @@ import com.zhongshu.card.client.type.OnLineState;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * @author TRX
  * @date 2024/6/14
@@ -45,4 +48,13 @@ public class DeviceInfoSearch extends SuperSearch {
 
     @Schema(description = "设备IP地址")
     private String ip;
+
+    @Schema(description = "是否查询所有的商户")
+    private Boolean isAllBusinessMain = Boolean.TRUE;
+
+    @Schema(description = "商户oid")
+    private String shopOid;
+
+    @Schema(description = "商户oid集合")
+    private List<String> shopOids = new ArrayList<>();
 }

+ 4 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountDetailsModel.java

@@ -19,4 +19,8 @@ public class UserCountDetailsModel extends UserCountModel {
 
     @Schema(description = "机构信息")
     private List<OrganizationModel> list = new ArrayList<>();
+
+    @Schema(description = "商户列表")
+    private List<UserJoinBusOrgModel> busList = new ArrayList<>();
+
 }

+ 1 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseRefundParam.java

@@ -13,6 +13,7 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 @NoArgsConstructor
 public class ExpenseRefundParam {
+
     @Schema(description = "数据ID")
     private String id;
 

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

@@ -18,7 +18,6 @@ import lombok.NoArgsConstructor;
 public class CardInfoPoolQueryParam {
 
     @Schema(description = "项目oid")
-    @NotEmpty(message = "projectOid不能为空")
     private String projectOid;
 
     @Schema(description = "搜索的卡号")

+ 2 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/service/org/UserAccountService.java

@@ -57,6 +57,8 @@ public interface UserAccountService {
 
     ResultContent<UserCountDetailsModel> getCurrentDetail(AuthTypeParam param);
 
+    ResultContent<UserCountDetailsModel> getBusCurrentDetail(AuthTypeParam param);
+
     ResultContent<UserCountDetailsModel> getCurrentDetailAndOrgs(AuthTypeParam param);
 
     ResultContent<UserCountModel> getUserDetail(String userId);

+ 4 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/service/payment/ExpenseFlowService.java

@@ -18,9 +18,13 @@ public interface ExpenseFlowService {
 
     ResultContent<Page<ExpenseFlowModel>> page(ExpenseFlowSearch param, Pageable pageable);
 
+    ResultContent<Page<ExpenseFlowModel>> busPage(ExpenseFlowSearch param, Pageable pageable);
+
     // 统计用户的消费金额
     ResultContent<ExpenseFlowCount> countUserPayment(ExpenseFlowSearch param);
 
+    ResultContent<ExpenseFlowCount> countBusPayment(ExpenseFlowSearch param);
+
     ResultContent<ExpenseFlowModel> getDetail(String id);
 
     ResultContent<ExpenseFlowModel> getDetailByPaymentNo(String paymentNo);

+ 2 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/service/school/DeviceInfoService.java

@@ -20,6 +20,8 @@ public interface DeviceInfoService {
 
     ResultContent<Page<DeviceInfoModel>> page(DeviceInfoSearch param, Pageable pageable);
 
+    ResultContent<Page<DeviceInfoModel>> busPage(DeviceInfoSearch param, Pageable pageable);
+
     ResultContent deleteDeviceInfo(String id);
 
     ResultContent<DeviceInfoMoreModel> getDeviceDetail(String id);

+ 9 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/devices/DeviceInfoController.java

@@ -80,6 +80,15 @@ public class DeviceInfoController {
         return deviceInfoService.page(param, pageable);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "设备列表-分页查询(商户小程序用)", description = "设备列表-分页查询")
+    @RequestMapping(value = {"busPage"}, method = {RequestMethod.POST})
+    public ResultContent<Page<DeviceInfoModel>> busPage(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) DeviceInfoSearch param) {
+        return deviceInfoService.busPage(param, pageable);
+    }
+
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "修改设备信息", description = "修改设备信息")
     @RequestMapping(value = "updateDevice", method = {RequestMethod.POST})

+ 21 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/payment/ExpenseFlowController.java

@@ -54,6 +54,15 @@ public class ExpenseFlowController {
         return expenseFlowService.page(param, pageable);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "消费列表-分页查询(商户的 小程序端用)", description = "消费列表-分页查询")
+    @RequestMapping(value = {"busPage"}, method = {RequestMethod.POST})
+    public ResultContent<Page<ExpenseFlowModel>> busPage(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) ExpenseFlowSearch param) {
+        return expenseFlowService.busPage(param, pageable);
+    }
+
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "消费详情", description = "消费详情")
     @RequestMapping(value = "getDetail", method = {RequestMethod.POST})
@@ -71,6 +80,16 @@ public class ExpenseFlowController {
         return expenseFlowService.countUserPayment(param);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "统计消费总数(商户的)", description = "统计消费总数")
+    @RequestMapping(value = {"countBusPayment"}, method = {RequestMethod.POST})
+    public ResultContent<ExpenseFlowCount> countBusPayment(@RequestBody ExpenseFlowSearch param) {
+        param.setIsPaySuccess(Boolean.TRUE);
+        param.setOrderModeType(OrderModeType.Consume);
+        param.setUserId("");
+        return expenseFlowService.countBusPayment(param);
+    }
+
 
     //------------------------商户订单相关功能 start--------------------------
 
@@ -100,7 +119,8 @@ public class ExpenseFlowController {
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "商户小程序首页统计", description = "商户小程序首页统计")
     @RequestMapping(value = {"businessMainPageStatistic"}, method = {RequestMethod.POST})
-    public ResultContent<BusinessMainStatisticModel> businessMainPageStatistic(@RequestBody StatisticSearch param) {
+    public ResultContent<BusinessMainStatisticModel> businessMainPageStatistic(
+            @RequestBody StatisticSearch param) {
         return expenseFlowService.businessMainPageStatistic(param);
     }
 

+ 7 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/user/UserInfoController.java

@@ -48,6 +48,13 @@ public class UserInfoController {
         return userAccountService.getCurrentDetail(param);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "得到当前用户信息(基本信息)", description = "得到当前用户信息(基本信息)")
+    @RequestMapping(value = {"getBusCurrentDetail"}, method = {RequestMethod.POST})
+    public ResultContent<UserCountDetailsModel> getBusCurrentDetail(@RequestBody AuthTypeParam param) {
+        return userAccountService.getBusCurrentDetail(param);
+    }
+
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "得到当前用户在当前机构的信息", description = "得到当前用户在当前机构的信息")
     @RequestMapping(value = {"getCurrentUserOrg"}, method = {RequestMethod.GET})

+ 5 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/impl/DeviceInfoDaoImpl.java

@@ -7,6 +7,7 @@ import com.zhongshu.card.server.core.dao.devices.extend.DeviceInfoDaoExtend;
 import com.zhongshu.card.server.core.domain.school.Area;
 import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 import com.zhongshu.card.server.core.util.CommonUtil;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -59,6 +60,10 @@ public class DeviceInfoDaoImpl extends BaseImpl implements DeviceInfoDaoExtend {
             criteria.and("createTime").gte(param.getStartTime()).and("createTime").lte(param.getEndTime());
         }
 
+        if (ObjectUtils.isNotEmpty(param.getShopOids())) {
+            criteria.and("beLongOid").in(param.getShopOids());
+        }
+
         // 模糊搜索
         List<Criteria> criterias = new ArrayList<>();
         if (StringUtils.isNotEmpty(param.getDeviceId())) {

+ 10 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/payment/impl/ExpenseFlowDaoImpl.java

@@ -24,6 +24,7 @@ import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -99,7 +100,7 @@ public class ExpenseFlowDaoImpl extends BaseImpl implements ExpenseFlowDaoExtend
 
         // 商户集合
         if (ObjectUtils.isNotEmpty(param.getShopOids())) {
-            criteria.and("shopOids").in(param.getShopOids());
+            criteria.and("shopOid").in(param.getShopOids());
         }
 
         // 退款状态
@@ -222,7 +223,13 @@ public class ExpenseFlowDaoImpl extends BaseImpl implements ExpenseFlowDaoExtend
         if (countObjs.size() > 0) {
             countObjs.stream().forEach(it -> {
                 String name = (String) it.get(fieldName);
+                if (StringUtils.isEmpty(name)) {
+                    Object _id = it.get("_id");
+                    name = String.valueOf(_id);
+                }
                 BigDecimal amount = CommonUtil.getBigDecimalByObj(it.get("count"));
+                // 单位分,转为 元
+                amount = amount.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
                 map.put(name, amount);
             });
         }
@@ -256,6 +263,8 @@ public class ExpenseFlowDaoImpl extends BaseImpl implements ExpenseFlowDaoExtend
                 return CommonUtil.getBigDecimalByObj(obj);
             }).collect(Collectors.toList());
             number = numbers.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
+            // 单位分,转为 元
+            number = number.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
         }
         // 总金额
         expenseFlowCount.setPayAmount(number);

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

@@ -187,9 +187,11 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "支付耗用的时间")
     private Long payMillis = 0L;
 
+    @Schema(description = "支付账单流水ID集合")
     private List<String> transactionIds = new ArrayList<String>();
 
     //-----------------------退款 start--------------------------
+
     @Schema(description = "是否退款")
     private Boolean isRefund;
 
@@ -214,4 +216,7 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "退款处理备注")
     private String refuseRemark;
 
+    @Schema(description = "退款账单流量")
+    private List<String> refundTransactionIds = new ArrayList<String>();
+
 }

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

@@ -6,6 +6,7 @@ import com.zhongshu.card.client.model.devices.*;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultMessage;
 import com.zhongshu.card.client.model.org.OrganizationMiniModel;
+import com.zhongshu.card.client.model.org.UserJoinBusOrgModel;
 import com.zhongshu.card.client.model.school.AreaModel;
 import com.zhongshu.card.client.model.school.AreaSimpleModel;
 import com.zhongshu.card.client.service.school.DeviceInfoService;
@@ -146,6 +147,37 @@ public class DeviceInfoServiceImpl extends SuperService implements DeviceInfoSer
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
     }
 
+    @Override
+    public ResultContent<Page<DeviceInfoModel>> busPage(DeviceInfoSearch param, Pageable pageable) {
+        // 完善所属项目
+        String projectOid = param.getProjectOid();
+        if (StringUtils.isEmpty(projectOid)) {
+            projectOid = getCurrentProjectOid();
+        }
+        param.setProjectOid(projectOid);
+        if (StringUtils.isEmpty(projectOid)) {
+            return ResultContent.buildFail("projectOid不能为空");
+        }
+
+        List<String> shopOids = new ArrayList<String>();
+        if (param.getIsAllBusinessMain() != null && param.getIsAllBusinessMain()) {
+            List<UserJoinBusOrgModel> list = organizationServiceImpl.getUserAboutShopList(getCurrentUserId());
+            if (ObjectUtils.isNotEmpty(list)) {
+                shopOids = list.stream().map(it -> it.getBusOid()).collect(Collectors.toList());
+            }
+        } else {
+            if (StringUtils.isNotEmpty(param.getShopOid())) {
+                shopOids.add(param.getShopOid());
+            }
+        }
+        if (ObjectUtils.isEmpty(shopOids)) {
+            return ResultContent.buildFail("关联商户不存在");
+        }
+        param.setShopOids(shopOids);
+        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/devices/DeviceSyncFromIotService.java

@@ -106,7 +106,7 @@ public class DeviceSyncFromIotService {
         bindMap.put("onLineState", CommonUtil.getEnumByName(OnLineState.class, param.getOnLineState()));
         commonService.updateData(where, bindMap, DevicePermiss.class.getSimpleName());
 
-        log.info("syncDeviceOnLineState");
+        log.info("同步在线状态syncDeviceOnLineState: {}", param.getDeviceId());
         return ResultContent.buildSuccess();
     }
 

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

@@ -20,6 +20,7 @@ import com.github.microservice.types.OrderModeType;
 import com.github.microservice.types.OrderState;
 import com.zhongshu.card.client.model.base.SuperSearch;
 import com.zhongshu.card.client.model.operLogs.OperationLogsAddParam;
+import com.zhongshu.card.client.model.org.UserJoinBusOrgModel;
 import com.zhongshu.card.client.model.payment.ExpenseFlowCount;
 import com.zhongshu.card.client.model.payment.ExpenseFlowModel;
 import com.zhongshu.card.client.model.payment.ExpenseFlowSearch;
@@ -494,6 +495,22 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
     }
 
+    @Override
+    public ResultContent<Page<ExpenseFlowModel>> busPage(ExpenseFlowSearch param, Pageable pageable) {
+        param.setIsPaySuccess(Boolean.TRUE);
+        param.setOrderModeType(OrderModeType.Consume);
+
+        initSearchProjectOid(param);
+        // 用户搜索的商户
+        List<String> shopOids = getSearchAllShopOid(param);
+        if (ObjectUtils.isEmpty(shopOids)) {
+            return ResultContent.buildFail("请选择查询商户或所有的");
+        }
+        param.setShopOids(shopOids);
+        Page<ExpenseFlow> page = expenseFlowDao.page(pageable, param);
+        return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
+    }
+
     private void initSearchProjectOid(SuperSearch param) {
         if (param != null) {
             String projectOid = param.getProjectOid();
@@ -519,11 +536,11 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
 
         initSearchProjectOid(param);
         // 用户搜索的商户
-//        List<String> shopOids = getSearchAllShopOid(param);
-//        if (ObjectUtils.isEmpty(shopOids)) {
-//            return ResultContent.buildFail("请选择查询商户或所有的");
-//        }
-//        param.setShopOids(shopOids);
+        List<String> shopOids = getSearchAllShopOid(param);
+        if (ObjectUtils.isEmpty(shopOids)) {
+            return ResultContent.buildFail("请选择查询商户或所有的");
+        }
+        param.setShopOids(shopOids);
         Page<ExpenseFlow> page = expenseFlowDao.page(pageable, param);
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
     }
@@ -537,11 +554,15 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
     public List<String> getSearchAllShopOid(ExpenseFlowSearch param) {
         List<String> shopOids = new ArrayList<String>();
         if (param.getIsAllBusinessMain() != null && param.getIsAllBusinessMain()) {
-            // 查询当前用户所有的商户信息
-            List<Organization> orgs = organizationService.getUserAllOrgs(getCurrentUserId(), AuthType.BusinessMain);
-            if (ObjectUtils.isNotEmpty(orgs)) {
-                shopOids = orgs.stream().map(it -> it.getOid()).collect(Collectors.toList());
+            List<UserJoinBusOrgModel> list = organizationService.getUserAboutShopList(getCurrentUserId());
+            if (ObjectUtils.isNotEmpty(list)) {
+                shopOids = list.stream().map(it -> it.getBusOid()).collect(Collectors.toList());
             }
+//            // 查询当前用户所有的商户信息
+//            List<Organization> orgs = organizationService.getUserAllOrgs(getCurrentUserId(), AuthType.BusinessMain);
+//            if (ObjectUtils.isNotEmpty(orgs)) {
+//                shopOids = orgs.stream().map(it -> it.getOid()).collect(Collectors.toList());
+//            }
         } else {
             if (StringUtils.isNotEmpty(param.getShopOid())) {
                 shopOids.add(param.getShopOid());
@@ -561,6 +582,18 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         return ResultContent.buildSuccess(expenseFlowDao.countUserPayment(param));
     }
 
+    @Override
+    public ResultContent<ExpenseFlowCount> countBusPayment(ExpenseFlowSearch param) {
+        initSearchProjectOid(param);
+        // 用户搜索的商户
+        List<String> shopOids = getSearchAllShopOid(param);
+        if (ObjectUtils.isEmpty(shopOids)) {
+            return ResultContent.buildFail("请选择查询商户或所有的");
+        }
+        param.setShopOids(shopOids);
+        return ResultContent.buildSuccess(expenseFlowDao.countUserPayment(param));
+    }
+
     /**
      * 统计用户今天支付的总金额
      *
@@ -589,11 +622,11 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
 
         initSearchProjectOid(param);
 //        // 用户搜索的商户
-//        List<String> shopOids = getSearchAllShopOid(param);
-//        if (ObjectUtils.isEmpty(shopOids)) {
-//            return ResultContent.buildFail("请选择查询商户或所有的");
-//        }
-//        param.setShopOids(shopOids);
+        List<String> shopOids = getSearchAllShopOid(param);
+        if (ObjectUtils.isEmpty(shopOids)) {
+            return ResultContent.buildFail("请选择查询商户或所有的");
+        }
+        param.setShopOids(shopOids);
         ExpenseFlowCount flowCount = expenseFlowDao.countBuinessMainPayment(param);
         return ResultContent.buildSuccess(flowCount);
     }
@@ -611,13 +644,15 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         param.setIsPaySuccess(Boolean.TRUE);
         param.setOrderModeType(OrderModeType.Consume);
         BeanUtils.copyProperties(statisticSearch, param);
-
+        // 查询当前项目的
         initSearchProjectOid(param);
-//        List<String> shopOids = getSearchAllShopOid(param);
-//        if (ObjectUtils.isEmpty(shopOids)) {
-//            return ResultContent.buildFail("请选择查询商户或所有的");
-//        }
-//        param.setShopOids(shopOids);
+
+        List<String> shopOids = getSearchAllShopOid(param);
+        if (ObjectUtils.isEmpty(shopOids)) {
+            return ResultContent.buildFail("请选择查询商户或所有的");
+        }
+        param.setShopOids(shopOids);
+        log.info("shopOids; {}", shopOids);
 
         param.setYear(DateUtils.getCurrentYear());
         // 统计模型,按 月、周
@@ -728,34 +763,11 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         if (expenseFlow.getOrderType() == OrderState.HAVE_PAID) {
             return ResultContent.buildFail(String.format("订单状态不是已支付状态,不能退款"));
         }
-        // 调用支付中心退款
-        AmountUpdateParam updateParam = new AmountUpdateParam();
-        updateParam.setOid(expenseFlow.getProjectOid());
-        updateParam.setUserId(expenseFlow.getUserId());
-        updateParam.setShopId(expenseFlow.getShopOid());
-        updateParam.setSchoolId(expenseFlow.getSchoolOid());
-        updateParam.setTotal(expenseFlow.getPayAmount());
-        updateParam.setOutTradeNo(expenseFlow.getPaymentNo());
-
-        // 调用支付中心退款
-        ResultContent content = walletFeignService.refund(updateParam);
-        expenseFlow.setIsRefund(Boolean.TRUE);
-        expenseFlow.setRefundRemark(param.getRemark());
-        expenseFlow.setRefundTime(System.currentTimeMillis());
-        if (content.isSuccess()) {
-            // 申请人
-            expenseFlow.setApplicant(getCurrentUserId());
-            // 退款人
-            expenseFlow.setRefundUserId(getCurrentUserId());
-            expenseFlow.setRefundAMount(expenseFlow.getPayAmount());
-            expenseFlow.setOrderType(OrderState.REFUNDED);
-            expenseFlow.setRefundState(RefundState.Refunded);
-            expenseFlow.setRefuseRemark("退款成功");
-            expenseFlowDao.save(expenseFlow);
-            return ResultContent.buildSuccess();
-        } else {
-            return ResultContent.buildFail(String.format("%s", content.getMsg()));
+        ResultContent resultContent = payCallService.refund(expenseFlow, param);
+        if (resultContent.isFailed()) {
+            return ResultContent.buildFail(resultContent.getMsg());
         }
+        return ResultContent.buildSuccess();
     }
 
     public ExpenseFlowModel toModel(ExpenseFlow entity) {
@@ -766,7 +778,6 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             // 卡片信息
 
             // 用户信息
-
         }
         return model;
     }

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

@@ -6,13 +6,17 @@ import com.github.microservice.pay.client.ret.ResultState;
 import com.github.microservice.types.OrderState;
 import com.github.microservice.types.payment.PaymentType;
 import com.zhongshu.card.client.model.operLogs.OperationLogsAddParam;
+import com.zhongshu.card.client.model.payment.ExpenseRefundParam;
 import com.zhongshu.card.client.type.LogsLevel;
 import com.zhongshu.card.client.type.MessageType;
+import com.zhongshu.card.client.type.RefundState;
+import com.zhongshu.card.server.core.dao.payment.ExpenseFlowDao;
 import com.zhongshu.card.server.core.domain.payment.ExpenseFlow;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.pay.BalancePayService;
 import com.zhongshu.card.server.core.service.user.OperationLogsService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -35,6 +39,9 @@ public class PayCallService extends SuperService {
     @Autowired
     private BalancePayService balancePayService;
 
+    @Autowired
+    ExpenseFlowDao expenseFlowDao;
+
     /**
      * 统一调用支付服务
      *
@@ -100,6 +107,12 @@ public class PayCallService extends SuperService {
         return ResultContent.buildSuccess();
     }
 
+    /**
+     * 查询余额
+     *
+     * @param entity
+     * @return
+     */
     public BigDecimal queryBalance(ExpenseFlow entity) {
         BigDecimal balance = BigDecimal.ZERO;
         if (entity.getPaymentType() == PaymentType.UserWallet) {
@@ -114,4 +127,58 @@ public class PayCallService extends SuperService {
         return balance;
     }
 
+    /**
+     * 退款
+     *
+     * @param entity
+     * @return
+     */
+    public ResultContent refund(ExpenseFlow entity, ExpenseRefundParam param) {
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail("数据为空");
+        }
+        if (entity.getPaymentType() == PaymentType.UserWallet) {
+            ResultContent<List<TransactionLogModel>> resultContent = walletRefund(entity, param);
+            if (resultContent.isSuccess()) {
+                entity.setIsRefund(Boolean.TRUE);
+                entity.setRefundRemark(param.getRemark());
+                entity.setRefundTime(System.currentTimeMillis());
+
+                List<TransactionLogModel> list = resultContent.getContent();
+                if (ObjectUtils.isNotEmpty(list)) {
+                    entity.setRefundTransactionIds(list.stream().map(it -> it.getId()).collect(Collectors.toUnmodifiableList()));
+                }
+                // 申请人
+                entity.setApplicant(getCurrentUserId());
+                // 退款人
+                entity.setRefundUserId(getCurrentUserId());
+                entity.setRefundAMount(entity.getPayAmount());
+                entity.setOrderType(OrderState.REFUNDED);
+                entity.setRefundState(RefundState.Refunded);
+                entity.setRefuseRemark("退款成功");
+                expenseFlowDao.save(entity);
+            } else {
+                return ResultContent.buildFail(resultContent.getMsg());
+            }
+        }
+        return ResultContent.buildFail("不支持退款");
+    }
+
+    /**
+     * 钱包退款
+     *
+     * @param entity
+     * @return
+     */
+    public ResultContent<List<TransactionLogModel>> walletRefund(ExpenseFlow entity, ExpenseRefundParam param) {
+        com.github.microservice.pay.client.ret.ResultContent<List<TransactionLogModel>> resultContent = balancePayService.refund(
+                entity.getProjectOid(), entity.getShopOid(), entity.getUserId(),
+                entity.getPaymentNo(), entity.getPayAmount(), param.getRemark());
+        if (resultContent.getState() == ResultState.Success) {
+            return ResultContent.buildSuccess(resultContent.getContent());
+        } else {
+            return ResultContent.buildFail(String.format("退款失败:%s", resultContent.getMsg()));
+        }
+    }
+
 }

+ 16 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/user/UserAccountServiceImpl.java

@@ -29,6 +29,7 @@ import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.org.OrganizationUser;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
 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.org.OrganizationUserServiceImpl;
 import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
 import com.zhongshu.card.server.core.service.school.DictInfoServiceImpl;
@@ -63,7 +64,7 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
     UserCountDao userCountDao;
 
     @Autowired
-    OrganizationService organizationService;
+    OrganizationServiceImpl organizationService;
 
     @Autowired
     OrganizationManagerServiceImpl organizationManagerService;
@@ -435,6 +436,20 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
         return ResultContent.buildSuccess(model);
     }
 
+    public ResultContent<UserCountDetailsModel> getBusCurrentDetail(AuthTypeParam param) {
+        UserCountDetailsModel model = new UserCountDetailsModel();
+        UserAccount userAccount = userCountDao.findTopByUserId(getCurrentUserId());
+        if (ObjectUtils.isNotEmpty(userAccount)) {
+            UserCountModel model1 = toModel(userAccount);
+            BeanUtils.copyProperties(model1, model, "oid");
+
+            // 用户加入的商户列表
+            List<UserJoinBusOrgModel> busModels = organizationService.getUserAboutShopList(userAccount.getUserId());
+            model.setBusList(busModels);
+        }
+        return ResultContent.buildSuccess(model);
+    }
+
     /**
      * 得到当前的用户信息 (包含机构信息)
      *