1、收支明细流水号生成方式修正,新增yyyyMMddHHmmss+7位顺序号的流水号的公用生成方式;2、管理端分析页组织总数/用户总数/用户活跃数迁移到system;3、组织管理查询首购记录不展示问题恢复;

This commit is contained in:
gaoqr
2025-09-29 15:32:53 +08:00
parent 00d58afeb1
commit cd466f2777
24 changed files with 258 additions and 205 deletions
@@ -31,10 +31,6 @@ public interface OrganApi {
@Parameter(name = "id", description = "组织编号", required = true, example = "1024")
CommonResult<Boolean> validOrgan(@RequestParam("id") Long id);
@GetMapping(PREFIX + "/total/org")
@Operation(summary = "组织总数查询")
CommonResult<Map<String, Integer>> getOrgTotal();
@PostMapping(PREFIX + "/separate/org")
@Operation(summary = "新增、注销组织数量统计")
CommonResult<Map<String, Object>> getOrgSeparate(@Valid OrgStatisticsReqDTO reqVO);
@@ -73,12 +73,4 @@ public interface AdminUserApi {
@Operation(summary = "通过组织 ID 查询组织管理员用户列表")
@Parameter(name = "organIds", description = "组织id列表", example = "1,3", required = true)
CommonResult<List<OrganAdminUserRespDTO>> getOrganAdminByOrganIds(@RequestParam("id") Collection<Long> organIds);
@GetMapping(PREFIX + "/total/user")
@Operation(summary = "用户总数")
CommonResult<Map<String, Integer>> getUserTotal();
@GetMapping(PREFIX + "/total/userAct")
@Operation(summary = "用户活跃数")
CommonResult<Map<String, Integer>> getUserActTotal();
}
@@ -50,11 +50,6 @@ public class OrganApiImpl implements OrganApi {
return success(true);
}
@Override
public CommonResult<Map<String, Integer>> getOrgTotal() {
return success(organService.orgTotal());
}
@Override
public CommonResult<Map<String, Object>> getOrgSeparate(OrgStatisticsReqDTO reqVO) {
setOrgStatisticsReqVO(reqVO);
@@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.RestController;
import jakarta.annotation.Resource;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static com.cf.imes.framework.common.pojo.CommonResult.success;
@@ -65,15 +64,5 @@ public class AdminUserApiImpl implements AdminUserApi {
return success(userService.getOrganAdminByOrganIds(organIds));
}
@Override
public CommonResult<Map<String, Integer>> getUserTotal() {
return success(userService.userTotal());
}
@Override
public CommonResult<Map<String, Integer>> getUserActTotal() {
return success(userService.userActTotal());
}
}
@@ -0,0 +1,86 @@
package com.cf.imes.module.system.controller.admin.statistics;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageOrgTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserActTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserTotalStatisticRespVO;
import com.cf.imes.module.system.service.organ.OrganService;
import com.cf.imes.module.system.service.user.AdminUserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import static com.cf.imes.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 管理端分析页管理")
@RestController
@RequestMapping("/system/manage/statistic")
@Validated
@Slf4j
public class ManageStatisticsController {
// @Resource
// private OrderSupStatisticsService orderSupStatisticsService;
@Resource
private OrganService organService;
@Resource
private AdminUserService userService;
@GetMapping("/total/org")
@Operation(summary = "组织总数")
public CommonResult<ManageOrgTotalStatisticRespVO> getOrgTotal() {
return success(organService.getOrgTotal());
}
@GetMapping("/total/user")
@Operation(summary = "用户总数")
public CommonResult<ManageUserTotalStatisticRespVO> getUserTotal() {
return success(userService.getUserTotal());
}
@GetMapping("/total/userAct")
@Operation(summary = "用户活跃数")
public CommonResult<ManageUserActTotalStatisticRespVO> getUserActTotal() {
return success(userService.getUserActTotal());
}
// @GetMapping("/total/order")
// @Operation(summary = "生产单总数")
// @PreAuthorize("@ss.hasPermission('homePage:analysis:org-statistic')")
// public CommonResult<Map<String, Integer>> getOrderTotal() {
// return success(orderSupStatisticsService.orderTotal());
// }
//
// @GetMapping("/total/plateArea")
// @Operation(summary = "拆单板件平方数")
// public CommonResult<Map<String, Double>> getPlateAreaTotal() {
// return success(orderSupStatisticsService.plateAreaTotal());
// }
//
// @GetMapping("/separate/order")
// @Operation(summary = "有效、无效生产单数量统计")
// @PreAuthorize("@ss.hasPermission('homePage:analysis:order-count')")
// public CommonResult<Map<String, Object>> getOrderSeparate(@Valid OrderStatisticsReqVO reqVO) {
// return success(orderSupStatisticsService.orderSeparate(reqVO));
// }
//
// @GetMapping("/separate/org")
// @Operation(summary = "新增、注销组织数量统计")
// @PreAuthorize("@ss.hasPermission('homePage:analysis:org-count')")
// public CommonResult<Map<String, Object>> getOrgSeparate(@Valid OrgStatisticsReqDTO reqVO) {
// return organApi.getOrgSeparate(reqVO);
// }
//
// @GetMapping("/warn/org")
// @Operation(summary = "组织过期日期统计")
// public CommonResult<Map<String, List<Object>>> getWarnToOrg() {
// return organApi.getWarnToOrg();
// }
}
@@ -0,0 +1,25 @@
package com.cf.imes.module.system.controller.admin.statistics.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author Gqr
* @since 2025/9/29 14:37
*/
@Schema(description = "管理后台 - 管理端组织总数统计 Response VO")
@Data
public class ManageOrgTotalStatisticRespVO {
@Schema(description = "组织总数")
private Integer orgTotal;
@Schema(description = "当日新增组织数")
private Integer orgAdd;
@Schema(description = "当日删除组织数")
private Integer orgDel;
@Schema(description = "组织沉寂数")
private Integer orgSilent;
}
@@ -0,0 +1,19 @@
package com.cf.imes.module.system.controller.admin.statistics.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author Gqr
* @since 2025/9/29 14:37
*/
@Schema(description = "管理后台 - 管理端用户活跃数统计 Response VO")
@Data
public class ManageUserActTotalStatisticRespVO {
@Schema(description = "用户月活跃数")
private Integer userMonthAct;
@Schema(description = "用户日活跃数")
private Integer userDayAct;
}
@@ -0,0 +1,25 @@
package com.cf.imes.module.system.controller.admin.statistics.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author Gqr
* @since 2025/9/29 14:37
*/
@Schema(description = "管理后台 - 管理端用户总数统计 Response VO")
@Data
public class ManageUserTotalStatisticRespVO {
@Schema(description = "用户总数")
private Integer userTotal;
@Schema(description = "当日新增用户数")
private Integer userTodayAdd;
@Schema(description = "当日删除用户数")
private Integer userTodayDel;
@Schema(description = "用户沉寂数")
private Integer userTodaySilent;
}
@@ -5,8 +5,8 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.Assert.AssertUtils;
import com.cf.imes.framework.common.util.date.LocalDateTimeUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd;
import com.cf.imes.framework.mybatis.core.query.LambdaUpdateWrapperX;
import com.cf.imes.module.system.controller.admin.funds.manualadjust.vo.ManualAdjustAccountBalancePageReqVO;
import com.cf.imes.module.system.controller.admin.funds.manualadjust.vo.ManualAdjustAccountBalanceRespVO;
@@ -72,6 +72,9 @@ public class ManualAdjustAccountBalanceServiceImpl implements ManualAdjustAccoun
@Resource
private IncomeExpenseDetailsMapper incomeExpenseDetailsMapper;
@Resource
private SnowflakeIdWorker3rd snowflakeIdWorker3rd;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createAjustment(ManualAdjustAccountBalanceSaveReqVO saveReqVO) {
@@ -125,7 +128,7 @@ public class ManualAdjustAccountBalanceServiceImpl implements ManualAdjustAccoun
IncomeExpenseDetailsDO incomeExpenseDetailsDO = IncomeExpenseDetailsDO.builder()
.organId(organId)
.orderNo(payOrderDO.getPayNo())
.businessNo(LocalDateTimeUtils.formatNow())
.businessNo(snowflakeIdWorker3rd.nextSerialNo())
.tradeType(TradeTypeEnum.MANUAL_ADJUST.getCode())
.incomeExpenseType(incomeExpenseType)
.cashAmountChange(rechargeAmount)
@@ -191,7 +191,6 @@ public class PurchaseServiceImpl implements PurchaseService {
return purchaseRecordMapper.selectList(new LambdaQueryWrapper<PurchaseRecordDO>()
.in(PurchaseRecordDO::getOrganId, organIds)
.eq(PurchaseRecordDO::getStatus, PurchaseRecordStatusEnum.ACTIVE.getStatus())
.ne(PurchaseRecordDO::getInitial, true)
.eq(PurchaseRecordDO::getDeleted, false));
}
@@ -8,6 +8,7 @@ import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganPageReqVO;
import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganRespVO;
import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganSaveReqVO;
import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganSimpleRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageOrgTotalStatisticRespVO;
import com.cf.imes.module.system.dal.dataobject.organ.OrganizationDO;
import com.cf.imes.module.system.service.organ.handler.OrganInfoHandler;
import com.cf.imes.module.system.service.organ.handler.OrganMenuHandler;
@@ -147,7 +148,7 @@ public interface OrganService {
/**
* 组织总数统计
*/
Map<String, Integer> orgTotal();
ManageOrgTotalStatisticRespVO getOrgTotal();
/**
* 组织新增统计
@@ -27,6 +27,7 @@ import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganPageReqVO;
import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganRespVO;
import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganSaveReqVO;
import com.cf.imes.module.system.controller.admin.organ.vo.organ.OrganSimpleRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageOrgTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.systemconfig.vo.ProcessSchemeConfig;
import com.cf.imes.module.system.controller.admin.tokenconfig.vo.JwtConfig;
import com.cf.imes.module.system.controller.admin.user.vo.user.UserSaveReqVO;
@@ -524,24 +525,20 @@ public class OrganServiceImpl implements OrganService {
}
@Override
public Map<String, Integer> orgTotal() {
Map<String, Integer> map = new HashMap<>();
public ManageOrgTotalStatisticRespVO getOrgTotal() {
ManageOrgTotalStatisticRespVO respVO = new ManageOrgTotalStatisticRespVO();
// 组织总数
Integer orgTotal = organMapper.selectOrgCount();
map.put("orgTotal", orgTotal);
respVO.setOrgTotal(organMapper.selectOrgCount());
// 当日新增数
Integer orgAdd = organMapper.selectOrgCountAdd();
map.put("orgAdd", orgAdd);
respVO.setOrgAdd(organMapper.selectOrgCountAdd());
// 当日状态-删除
Integer orgDel = organMapper.selectOrgCountDel();
map.put("orgDel", orgDel);
respVO.setOrgDel(organMapper.selectOrgCountDel());
// 当日沉寂数 (组织中所有用户30天未登录)
// 获得30天前的时间,赋值时间为0:00:00
Date date = DateUtil.offsetDay(new Date(), -30);
Integer orgSilent = organMapper.selectOrgSilentCount(DateUtil.beginOfDay(date).toLocalDateTime());
map.put("orgSilent", orgSilent);
return map;
respVO.setOrgSilent(organMapper.selectOrgSilentCount(DateUtil.beginOfDay(date).toLocalDateTime()));
return respVO;
}
@Override
@@ -15,10 +15,10 @@ import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.Assert.AssertUtils;
import com.cf.imes.framework.common.util.date.LocalDateTimeUtils;
import com.cf.imes.framework.common.util.json.JsonUtils;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.common.util.validation.ValidationUtils;
import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.pay.config.ChenfengAlipayConfig;
import com.cf.imes.framework.pay.config.ChenfengPayConfig;
@@ -163,6 +163,9 @@ public class PayOrderServiceImpl implements PayOrderService {
@Resource
private TransactionTemplate transactionTemplate;
@Resource
private SnowflakeIdWorker3rd snowflakeIdWorker3rd;
@Override
@Transactional(rollbackFor = Exception.class)
public PayOrderRespDTO productPay(PayProductOrderUnifiedReqVO payProductOrderUnifiedReqVO) {
@@ -206,7 +209,7 @@ public class PayOrderServiceImpl implements PayOrderService {
PreviouProductDelayRespVO previouProductDelayRespVO = productDelayService.getActiveRecordsByProductId(productId, organId);
// 根据购买类型做价格处理
PayProductProcessor payProductProcessor = new PayProductProcessor(productsDO, productsDetailDO, orgInitialPurchaseRecord, previouProductDelayRespVO, organAmount, organId, payConfig, mybatisIdProperties);
PayProductProcessor payProductProcessor = new PayProductProcessor(productsDO, productsDetailDO, orgInitialPurchaseRecord, previouProductDelayRespVO, organAmount, organId, payConfig, mybatisIdProperties, snowflakeIdWorker3rd);
ProductProcessorRespVO productProcessorRespVO = payProductProcessor.processPayment(PayProductChannelCodeEnum.fromType(payProductOrderUnifiedReqVO.getProductChannelCode()));
PayOrderDO payOrder = productProcessorRespVO.getPayOrderDO();
@@ -619,7 +622,7 @@ public class PayOrderServiceImpl implements PayOrderService {
IncomeExpenseDetailsDO incomeExpenseDetailsDO = IncomeExpenseDetailsDO.builder()
.organId(organId)
.orderNo(payNo)
.businessNo(LocalDateTimeUtils.formatNow())
.businessNo(snowflakeIdWorker3rd.nextSerialNo())
.tradeType(TradeTypeEnum.RECHARGE.getCode())
.incomeExpenseType(IncomeExpenseTypeEnum.INCOME.getCode())
.cashAmountChange(price)
@@ -754,7 +757,7 @@ public class PayOrderServiceImpl implements PayOrderService {
IncomeExpenseDetailsDO incomeExpenseDetailsDO = IncomeExpenseDetailsDO.builder()
.organId(organId)
.orderNo(String.valueOf(record.getId()))
.businessNo(LocalDateTimeUtils.formatNow())
.businessNo(snowflakeIdWorker3rd.nextSerialNo())
.tradeType(TradeTypeEnum.PRODUCT.getCode())
.incomeExpenseType(IncomeExpenseTypeEnum.INCOME.getCode())
.cashAmountChange(accountBalanceSpent)
@@ -9,6 +9,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
import com.cf.imes.framework.common.util.date.LocalDateTimeUtils;
import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd;
import com.cf.imes.framework.pay.config.ChenfengPayConfig;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.controller.admin.funds.delay.vo.PreviouProductDelayRespVO;
@@ -76,6 +77,9 @@ public class PayProductProcessor {
// id生成规则配置
private MybatisIdProperties mybatisIdProperties;
// id生成器
private SnowflakeIdWorker3rd snowflakeIdWorker3rd;
// 标记本次订购是否首次
private boolean initialized = false;
@@ -98,7 +102,7 @@ public class PayProductProcessor {
private BigDecimal originalPrice;
public PayProductProcessor(ProductsDO productsDO, ProductsDetailDO productsDetailDO, PurchaseRecordDO orgInitialPurchaseRecord, PreviouProductDelayRespVO previouProductDelayRespVO,
OrganAmountDO organAmountDO, Long organId, ChenfengPayConfig payConfig, MybatisIdProperties mybatisIdProperties) {
OrganAmountDO organAmountDO, Long organId, ChenfengPayConfig payConfig, MybatisIdProperties mybatisIdProperties, SnowflakeIdWorker3rd snowflakeIdWorker3rd) {
this.productsDO = productsDO;
this.productsDetailDO = productsDetailDO;
this.orgInitialPurchaseRecord = orgInitialPurchaseRecord;
@@ -113,6 +117,7 @@ public class PayProductProcessor {
this.organId = organId;
this.payConfig = payConfig;
this.mybatisIdProperties = mybatisIdProperties;
this.snowflakeIdWorker3rd = snowflakeIdWorker3rd;
}
/**
@@ -205,8 +210,8 @@ public class PayProductProcessor {
BigDecimal giftAmount = organAmountDO.getGiftAmount();
IncomeExpenseDetailsDO incomeExpenseDetailsDO = IncomeExpenseDetailsDO.builder()
.organId(organId)
.businessNo(snowflakeIdWorker3rd.nextSerialNo())
.orderNo(String.format(PayConstants.PAY_PRODUCT_DETAIL_BUSINESSNO_PREFIX_FORMAT, organId, purchaseId))
.businessNo(LocalDateTimeUtils.formatNow())
.purchaseId(purchaseRecordDO.getId())
.tradeType(TradeTypeEnum.PRODUCT.getCode())
.incomeExpenseType(IncomeExpenseTypeEnum.EXPENSES.getCode())
@@ -263,7 +268,7 @@ public class PayProductProcessor {
BigDecimal amount = organAmountDO.getAmount();
IncomeExpenseDetailsDO incomeExpenseDetailsDO = IncomeExpenseDetailsDO.builder()
.organId(organId)
.businessNo(LocalDateTimeUtils.formatNow())
.businessNo(snowflakeIdWorker3rd.nextSerialNo())
.orderNo(String.format(PayConstants.PAY_PRODUCT_DETAIL_BUSINESSNO_PREFIX_FORMAT, organId, purchaseId))
.purchaseId(purchaseRecordDO.getId())
.tradeType(TradeTypeEnum.PRODUCT.getCode())
@@ -416,7 +421,7 @@ public class PayProductProcessor {
BigDecimal newGift = gift.subtract(usedGift);
IncomeExpenseDetailsDO incomeExpenseDetailsDO = IncomeExpenseDetailsDO.builder()
.organId(organId)
.businessNo(LocalDateTimeUtils.formatNow())
.businessNo(snowflakeIdWorker3rd.nextSerialNo())
.orderNo(String.format(PayConstants.PAY_PRODUCT_DETAIL_BUSINESSNO_PREFIX_FORMAT, organId, purchaseId))
.purchaseId(purchaseRecordDO.getId())
.tradeType(TradeTypeEnum.PRODUCT.getCode())
@@ -481,7 +486,7 @@ public class PayProductProcessor {
BigDecimal giftAmount = organAmountDO.getGiftAmount();
IncomeExpenseDetailsDO incomeExpenseDetailsDO = IncomeExpenseDetailsDO.builder()
.organId(organId)
.businessNo(LocalDateTimeUtils.formatNow())
.businessNo(snowflakeIdWorker3rd.nextSerialNo())
.orderNo(String.format(PayConstants.PAY_PRODUCT_DETAIL_BUSINESSNO_PREFIX_FORMAT, organId, purchaseId))
.purchaseId(purchaseRecordDO.getId())
.tradeType(TradeTypeEnum.PRODUCT.getCode())
@@ -558,7 +563,7 @@ public class PayProductProcessor {
BigDecimal amount = organAmountDO.getAmount();
IncomeExpenseDetailsDO incomeExpenseDetailsDO = IncomeExpenseDetailsDO.builder()
.organId(organId)
.businessNo(LocalDateTimeUtils.formatNow())
.businessNo(snowflakeIdWorker3rd.nextSerialNo())
.orderNo(String.format(PayConstants.PAY_PRODUCT_DETAIL_BUSINESSNO_PREFIX_FORMAT, organId, purchaseId))
.purchaseId(purchaseId)
.tradeType(TradeTypeEnum.PRODUCT.getCode())
@@ -644,7 +649,7 @@ public class PayProductProcessor {
BigDecimal newGift = gift.subtract(usedGift);
IncomeExpenseDetailsDO incomeExpenseDetailsDO = IncomeExpenseDetailsDO.builder()
.organId(organId)
.businessNo(LocalDateTimeUtils.formatNow())
.businessNo(snowflakeIdWorker3rd.nextSerialNo())
.orderNo(String.format(PayConstants.PAY_PRODUCT_DETAIL_BUSINESSNO_PREFIX_FORMAT, organId, purchaseId))
.purchaseId(purchaseId)
.tradeType(TradeTypeEnum.PRODUCT.getCode())
@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.collection.CollectionUtils;
import com.cf.imes.module.system.api.user.dto.OrganAdminUserRespDTO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserActTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserMobileUpdateReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
@@ -267,12 +269,12 @@ public interface AdminUserService {
/**
* 用户总数统计
*/
Map<String, Integer> userTotal();
ManageUserTotalStatisticRespVO getUserTotal();
/**
* 用户活跃数统计
*/
Map<String, Integer> userActTotal();
ManageUserActTotalStatisticRespVO getUserActTotal();
/**
* 修改密保手机
@@ -28,6 +28,8 @@ import com.cf.imes.module.system.api.logger.dto.LoginLogCreateReqDTO;
import com.cf.imes.module.system.api.sms.dto.code.SmsCodeUseReqDTO;
import com.cf.imes.module.system.api.user.dto.OrganAdminUserRespDTO;
import com.cf.imes.module.system.constants.permission.InternalRoleConstants;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserActTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.statistics.vo.ManageUserTotalStatisticRespVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserMobileUpdateReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import com.cf.imes.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
@@ -753,39 +755,34 @@ public class AdminUserServiceImpl implements AdminUserService {
}
@Override
public Map<String, Integer> userTotal() {
Map<String, Integer> map = new HashMap<>();
public ManageUserTotalStatisticRespVO getUserTotal() {
ManageUserTotalStatisticRespVO respVO = new ManageUserTotalStatisticRespVO();
// 用户总数
Integer userTotal = userMapper.selectUserCount();
map.put("userTotal", userTotal);
respVO.setUserTotal(userMapper.selectUserCount());
// 当日新增数
Integer userTodayAdd = userMapper.selectUserCountAdd();
map.put("userTodayAdd", userTodayAdd);
respVO.setUserTodayAdd(userMapper.selectUserCountAdd());
// 当日状态-停止数
Integer userTodayDel = userMapper.selectUserCountDel();
map.put("userTodayDel", userTodayDel);
respVO.setUserTodayAdd(userMapper.selectUserCountDel());
// 当日沉寂数 (30天未登录)
Date date = DateUtil.offsetDay(new Date(), -30);
Integer userTodaySilent = userMapper.selectUserCountSilent(DateUtil.beginOfDay(date).toLocalDateTime());
map.put("userTodaySilent", userTodaySilent);
respVO.setUserTodayAdd(userMapper.selectUserCountSilent(DateUtil.beginOfDay(date).toLocalDateTime()));
return map;
return respVO;
}
@Override
public Map<String, Integer> userActTotal() {
Map<String, Integer> map = new HashMap<>();
public ManageUserActTotalStatisticRespVO getUserActTotal() {
ManageUserActTotalStatisticRespVO respVO = new ManageUserActTotalStatisticRespVO();
LocalDateTime startTime = getFirstDayOfMonth();
LocalDateTime endTIme = LocalDateTime.of(LocalDate.now(), LocalTime.of(23, 59, 59));
// 用户月活跃数
Integer userMonthAct = userMapper.selectUserActCountTime(startTime, endTIme);
map.put("userMonthAct", userMonthAct);
respVO.setUserMonthAct(userMapper.selectUserActCountTime(startTime, endTIme));
// 用户日活跃数
Integer userDayAct = userMapper.selectUserActCountTime(LocalDateTime.of(LocalDate.now(), LocalTime.of(0, 0, 0)), endTIme);
map.put("userDayAct", userDayAct);
return map;
respVO.setUserDayAct(userMapper.selectUserActCountTime(LocalDateTime.of(LocalDate.now(), LocalTime.of(0, 0, 0)), endTIme));
return respVO;
}
// 获得此月第一天日期
@@ -3,19 +3,14 @@
<mapper namespace="com.cf.imes.module.system.dal.mysql.organ.OrganMapper">
<select id="selectOrgSilentCount" resultType="java.lang.Integer">
WITH NoLoginOrgs AS (
SELECT DISTINCT o.id
FROM system_organization o
LEFT JOIN system_users ul ON o.id = ul.organ_id
AND Date (#{dateTime}) > ul.login_date
AND ul.deleted = 0
WHERE o.deleted =0
)
-- 查询这些沉寂组织的数量
SELECT COUNT(*) AS count
FROM NoLoginOrgs;
FROM system_organization o
LEFT JOIN system_users ul
ON o.id = ul.organ_id
AND ul.deleted = 0
AND DATE(#{dateTime}) &lt;= ul.login_date
WHERE o.deleted = 0
AND ul.id IS NULL;
</select>