Long 1 месяц назад
Родитель
Сommit
e25a84e7fc

+ 29 - 0
fs-admin-saas/src/main/java/com/fs/his/controller/FsCompanyController.java

@@ -1,6 +1,8 @@
 package com.fs.his.controller;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
@@ -117,6 +119,33 @@ public class FsCompanyController extends BaseController {
         List<OptionsVO> list = companyService.selectAllCompanyList(depId);
         return R.ok().put("data",list);
     }
+
+    /**
+     * 查询当前租户员工账户使用统计
+     */
+    @PreAuthorize("@ss.hasPermi('his:company:list')")
+    @GetMapping("/accountStats")
+    public AjaxResult accountStats(HttpServletRequest request) {
+        // 1. 汇总所有公司的限制用户数量
+        Integer usedCount = companyService.selectSumLimitUserCount();
+
+        // 2. 切主库,查租户购买的员工账户配额
+        DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.MASTER.name());
+        String code = request.getHeader("tenant-code");
+        TenantInfo tenantInfo = tenantInfoMapper.getTenByCode(code);
+
+        // 3. 计算剩余
+        int purchased = tenantInfo != null ? tenantInfo.getAccountNum() : 0;
+        int used = usedCount != null ? usedCount : 0;
+        int remaining = Math.max(purchased - used, 0);
+
+        Map<String, Integer> result = new HashMap<>();
+        result.put("purchasedCount", purchased);
+        result.put("usedCount", used);
+        result.put("remainingCount", remaining);
+        return AjaxResult.success(result);
+    }
+
     /**
      * 导出诊所管理列表
      */

+ 3 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyMapper.java

@@ -145,6 +145,9 @@ public interface CompanyMapper
 
     @Select("select count(1) from company")
     Integer selectCompanyCount();
+
+    @Select("select COALESCE(SUM(limit_user_count), 0) from company where is_del=0")
+    Integer selectSumLimitUserCount();
     @Select("select * from company where app_id=#{appId} limit 1")
     Company selectCompanyByAppId(String appId);
     @Select("update company set money=money+#{tuiMoney} where company_id=#{companyId} ")

+ 2 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyService.java

@@ -97,6 +97,8 @@ public interface ICompanyService
 
     Integer selectCompanyCount();
 
+    Integer selectSumLimitUserCount();
+
     void addCompanyTuiMoney(FsStoreOrder order);
 
 

+ 5 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -628,6 +628,11 @@ public class CompanyServiceImpl implements ICompanyService
         return companyMapper.selectCompanyCount();
     }
 
+    @Override
+    public Integer selectSumLimitUserCount() {
+        return companyMapper.selectSumLimitUserCount();
+    }
+
     @Override
     @Transactional
     public void addCompanyTuiMoney(FsStoreOrder order) {

+ 1 - 0
fs-service/src/main/java/com/fs/tenant/domain/TenantInfo.java

@@ -57,6 +57,7 @@ public class TenantInfo {
     private Integer qwUserCount;
 
     @Excel(name = "到期时间", dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date expireTime;
 
     @Excel(name = "归属代理")

+ 5 - 0
fs-service/src/main/java/com/fs/tenant/service/impl/TenantInfoServiceImpl.java

@@ -167,6 +167,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
             if (tenantInfo.getBalance() == null) {
                 tenantInfo.setBalance(BigDecimal.ZERO);
             }
+            // 新增租户时员工账户数强制设为 0
+            tenantInfo.setAccountNum(0);
             int result = baseMapper.insertTenantInfo(tenantInfo);
             refreshTenantInfoCodeCache(tenantInfo);
 
@@ -229,6 +231,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
     @Override
     public int updateTenantInfo(TenantInfo tenantInfo)
     {
+        // 修改租户时不更新员工账户数,设为 null 跳过 MyBatis 动态 SQL
+        tenantInfo.setAccountNum(null);
+
         String oldTenantCode = null;
         if (StringUtils.isNotEmpty(Collections.singleton(tenantInfo.getId()))) {
             TenantInfo oldTenantInfo = baseMapper.selectTenantInfoById(tenantInfo.getId().toString());