清空图片和管理员总收入字段处理

This commit is contained in:
tianfeng 2025-12-11 18:14:41 +08:00
parent dbcd7b1c84
commit 341629cdcb
12 changed files with 138 additions and 30 deletions

View File

@ -13,6 +13,8 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import java.math.BigDecimal;
/** /**
* 工资账户 Client API. * 工资账户 Client API.
*/ */
@ -44,4 +46,11 @@ public interface UserSalaryAccountClientApi {
@PostMapping("/running-water") @PostMapping("/running-water")
ResultResponse<PageResult<SalaryRunningWaterDTO>> queryRunningWater( ResultResponse<PageResult<SalaryRunningWaterDTO>> queryRunningWater(
@RequestBody SalaryRunningWaterQueryInnerCmd cmd); @RequestBody SalaryRunningWaterQueryInnerCmd cmd);
/**
* 查询用户累计收入.
*/
@GetMapping("/total-income")
ResultResponse<BigDecimal> getTotalIncome(@RequestParam("userId") Long userId, @RequestParam("salaryType") String salaryType);
} }

View File

@ -81,14 +81,22 @@ public class UpdateUserProfileCmdExe {
ResponseAssert.notNull(CommonErrorCode.UPDATE_FAILURE, updateUserProfile); ResponseAssert.notNull(CommonErrorCode.UPDATE_FAILURE, updateUserProfile);
updateUserProfile.setId(userProfile.getId()); updateUserProfile.setId(userProfile.getId());
// 处理背景照片 // 处理背景照片如果传入非null则更新包括空列表
if (CollectionUtils.isNotEmpty(cmd.getBackgroundPhotos())) { if (cmd.getBackgroundPhotos() != null) {
updateUserProfile.setBackgroundPhotos(userProfileAppConvertor.toPhotoItems(cmd.getBackgroundPhotos())); updateUserProfile.setBackgroundPhotos(
CollectionUtils.isNotEmpty(cmd.getBackgroundPhotos())
? userProfileAppConvertor.toPhotoItems(cmd.getBackgroundPhotos())
: CollectionUtils.newArrayList()
);
} }
// 处理个人形象照片 // 处理个人形象照片如果传入非null则更新包括空列表
if (CollectionUtils.isNotEmpty(cmd.getPersonalPhotos())) { if (cmd.getPersonalPhotos() != null) {
updateUserProfile.setPersonalPhotos(userProfileAppConvertor.toPhotoItems(cmd.getPersonalPhotos())); updateUserProfile.setPersonalPhotos(
CollectionUtils.isNotEmpty(cmd.getPersonalPhotos())
? userProfileAppConvertor.toPhotoItems(cmd.getPersonalPhotos())
: CollectionUtils.newArrayList()
);
} }
updateUserProfile.setUserNickname( updateUserProfile.setUserNickname(
@ -258,10 +266,14 @@ public class UpdateUserProfileCmdExe {
} }
/** /**
* 处理照片状态新照片设置为待审核已存在照片保持原状态. * 处理照片状态新照片设置为待审核已存在照片保持原状态空列表表示清空照片.
*/ */
private void processPhotoStatus(List<PhotoItem> newPhotos, List<PhotoItem> originalPhotos) { private void processPhotoStatus(List<PhotoItem> newPhotos, List<PhotoItem> originalPhotos) {
if (CollectionUtils.isEmpty(newPhotos)) { if (newPhotos == null) {
return;
}
if (newPhotos.isEmpty()) {
return; return;
} }

View File

@ -16,6 +16,7 @@ import com.red.circle.other.infra.database.rds.service.sys.AdministratorService;
import com.red.circle.other.infra.database.rds.service.team.AdminRechargeAgentRelationService; import com.red.circle.other.infra.database.rds.service.team.AdminRechargeAgentRelationService;
import com.red.circle.other.inner.endpoint.user.user.UserProfileClient; import com.red.circle.other.inner.endpoint.user.user.UserProfileClient;
import com.red.circle.other.inner.model.dto.user.UserProfileDTO; import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
import com.red.circle.wallet.inner.endpoint.salary.UserSalaryAccountClient;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -34,6 +35,7 @@ public class RechargeUserServiceImpl implements RechargeUserService {
private final UserProfileClient userProfileClient; private final UserProfileClient userProfileClient;
private final AdministratorService administratorService; private final AdministratorService administratorService;
private final AdminRechargeAgentRelationService adminRechargeAgentRelationService; private final AdminRechargeAgentRelationService adminRechargeAgentRelationService;
private final UserSalaryAccountClient userSalaryAccountClient;
@Override @Override
public PageResult<RechargePageVO> getRechargePage(PageUserIdCmd page, AppExtCommand cmd) { public PageResult<RechargePageVO> getRechargePage(PageUserIdCmd page, AppExtCommand cmd) {
@ -51,18 +53,18 @@ public class RechargeUserServiceImpl implements RechargeUserService {
} }
List<Long> collect = pagedRechargeAgency.getRecords().stream().toList(); List<Long> collect = pagedRechargeAgency.getRecords().stream().toList();
Map<Long, BigDecimal> userMonthlyAmountMap = getThisMonthRechargeAmount(collect);
Map<Long, BigDecimal> userLastMonthAmountMap = getLastMonthRechargeAmount(collect); Map<Long, BigDecimal> userLastMonthAmountMap = getLastMonthRechargeAmount(collect);
List<RechargePageVO> list = pagedRechargeAgency.getRecords().stream().map(userId -> { List<RechargePageVO> list = pagedRechargeAgency.getRecords().stream().map(userId -> {
UserProfileDTO body = userProfileClient.getByUserId(userId).getBody(); UserProfileDTO body = userProfileClient.getByUserId(userId).getBody();
BigDecimal totalIncome = userSalaryAccountClient.getTotalIncome(userId, "ADMIN_SALARY").getBody();
return new RechargePageVO() return new RechargePageVO()
.setUserId(userId) .setUserId(userId)
.setAccount(body.getAccount()) .setAccount(body.getAccount())
.setUserNickname(body.getUserNickname()) .setUserNickname(body.getUserNickname())
.setUserAvatar(body.getUserAvatar()) .setUserAvatar(body.getUserAvatar())
.setThisMonth(userMonthlyAmountMap.get(userId)) .setTotalIncome(totalIncome != null ? totalIncome : BigDecimal.ZERO)
.setLastMonth(userLastMonthAmountMap.get(userId)); .setThisMonthRecharge(userLastMonthAmountMap.get(userId));
}).toList(); }).toList();
PageResult<RechargePageVO> result = PageResult.newPageResult(list.size()); PageResult<RechargePageVO> result = PageResult.newPageResult(list.size());
@ -88,11 +90,6 @@ public class RechargeUserServiceImpl implements RechargeUserService {
return userMonthlyRechargeClient.getMonthlyRechargeSummary(collect).getBody(); return userMonthlyRechargeClient.getMonthlyRechargeSummary(collect).getBody();
} }
private Map<Long, BigDecimal> getThisMonthRechargeAmount(List<Long> collect) {
List<UserMonthlyRechargeDTO> recharges = userMonthlyRechargeClient.listThisMonthByIds(collect).getBody();
return getLongBigDecimalMap(recharges);
}
private Map<Long, BigDecimal> getLastMonthRechargeAmount(List<Long> collect) { private Map<Long, BigDecimal> getLastMonthRechargeAmount(List<Long> collect) {
List<UserMonthlyRechargeDTO> recharges = userMonthlyRechargeClient.listLastMonthByIds(collect).getBody(); List<UserMonthlyRechargeDTO> recharges = userMonthlyRechargeClient.listLastMonthByIds(collect).getBody();
return getLongBigDecimalMap(recharges); return getLongBigDecimalMap(recharges);

View File

@ -33,13 +33,13 @@ public class RechargePageVO implements Serializable {
private String userNickname; private String userNickname;
/** /**
* 这个月金额 * 累计收入
*/ */
private BigDecimal thisMonth; private BigDecimal totalIncome;
/** /**
* 上个月金额 * 本月收入
*/ */
private BigDecimal lastMonth; private BigDecimal thisMonthRecharge;
} }

View File

@ -227,12 +227,16 @@ public class UserRunProfileServiceImpl implements UserRunProfileService {
update.set("hobby", userRunProfile.getHobby()); update.set("hobby", userRunProfile.getHobby());
} }
if (CollectionUtils.isNotEmpty(userRunProfile.getBackgroundPhotos())) { if (userRunProfile.getBackgroundPhotos() != null) {
update.set("backgroundPhotos", userRunProfile.getBackgroundPhotos()); update.set("backgroundPhotos",CollectionUtils.isNotEmpty(userRunProfile.getBackgroundPhotos()) ?
userRunProfile.getBackgroundPhotos() :
CollectionUtils.newArrayList() );
} }
if (CollectionUtils.isNotEmpty(userRunProfile.getPersonalPhotos())) { if (CollectionUtils.isNotEmpty(userRunProfile.getPersonalPhotos())) {
update.set("personalPhotos", userRunProfile.getPersonalPhotos()); update.set("personalPhotos", CollectionUtils.isNotEmpty(userRunProfile.getPersonalPhotos()) ?
userRunProfile.getPersonalPhotos() :
CollectionUtils.newArrayList() );
} }
if (CollectionUtils.isNotEmpty(userRunProfile.getCpList())) { if (CollectionUtils.isNotEmpty(userRunProfile.getCpList())) {

View File

@ -275,14 +275,24 @@ public class UserProfileGatewayImpl implements UserProfileGateway {
baseInfo.setAccountStatus(userProfile.getCheckStatus()); baseInfo.setAccountStatus(userProfile.getCheckStatus());
} }
// 转换图片列表为JSON存储到MySQL // 处理背景照片如果传入非null则更新包括空列表
if (CollectionUtils.isNotEmpty(userProfile.getBackgroundPhotos())) { if (userProfile.getBackgroundPhotos() != null) {
baseInfo.setBackgroundPhoto(JSON.toJSONString(userProfile.getBackgroundPhotos())); baseInfo.setBackgroundPhoto(
CollectionUtils.isNotEmpty(userProfile.getBackgroundPhotos())
? JSON.toJSONString(userProfile.getBackgroundPhotos())
: "[]"
);
} }
if (CollectionUtils.isNotEmpty(userProfile.getPersonalPhotos())) {
baseInfo.setPersonalPhoto(JSON.toJSONString(userProfile.getPersonalPhotos())); // 处理个人形象照片如果传入非null则更新包括空列表
if (userProfile.getPersonalPhotos() != null) {
baseInfo.setPersonalPhoto(
CollectionUtils.isNotEmpty(userProfile.getPersonalPhotos() )
? JSON.toJSONString(userProfile.getPersonalPhotos())
: "[]"
);
} }
baseInfoService.updateSelectiveById(baseInfo); baseInfoService.updateSelectiveById(baseInfo);
userRunProfileService.updateSelectiveById( userRunProfileService.updateSelectiveById(
userProfileInfraConvertor.toUserRunProfile(userProfile)); userProfileInfraConvertor.toUserRunProfile(userProfile));

View File

@ -0,0 +1,34 @@
package com.red.circle.wallet.app.command.salary.query;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.red.circle.wallet.domain.salary.SalaryType;
import com.red.circle.wallet.infra.database.rds.entity.salary.SalaryAccountRunningWater;
import com.red.circle.wallet.infra.database.rds.service.salary.SalaryAccountRunningWaterService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.List;
/**
* 查询工资账户累计收入.
*/
@Component
@RequiredArgsConstructor
public class SalaryTotalIncomeQryExe {
private final SalaryAccountRunningWaterService salaryAccountRunningWaterService;
public BigDecimal execute(Long userId, SalaryType salaryType) {
LambdaQueryWrapper<SalaryAccountRunningWater> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SalaryAccountRunningWater::getUserId, userId)
.eq(SalaryAccountRunningWater::getSalaryType, salaryType.getCode())
.eq(SalaryAccountRunningWater::getType, 0);
List<SalaryAccountRunningWater> records = salaryAccountRunningWaterService.list(wrapper);
return records.stream()
.map(SalaryAccountRunningWater::getAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
}

View File

@ -7,12 +7,16 @@ import com.red.circle.wallet.app.command.salary.SalaryTransferGoldCmdExe;
import com.red.circle.wallet.app.command.salary.SalaryWithdrawRefundCmdExe; import com.red.circle.wallet.app.command.salary.SalaryWithdrawRefundCmdExe;
import com.red.circle.wallet.app.command.salary.query.SalaryAccountBalanceQryExe; import com.red.circle.wallet.app.command.salary.query.SalaryAccountBalanceQryExe;
import com.red.circle.wallet.app.command.salary.query.SalaryRunningWaterQryExe; import com.red.circle.wallet.app.command.salary.query.SalaryRunningWaterQryExe;
import com.red.circle.wallet.app.command.salary.query.SalaryTotalIncomeQryExe;
import com.red.circle.wallet.app.dto.clientobject.*; import com.red.circle.wallet.app.dto.clientobject.*;
import com.red.circle.wallet.app.dto.cmd.*; import com.red.circle.wallet.app.dto.cmd.*;
import com.red.circle.wallet.domain.salary.SalaryType; import com.red.circle.wallet.domain.salary.SalaryType;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Objects;
/** /**
* 工资账户服务实现. * 工资账户服务实现.
*/ */
@ -26,6 +30,7 @@ public class SalaryAccountServiceImpl implements SalaryAccountService {
private final SalaryWithdrawRefundCmdExe salaryWithdrawRefundCmdExe; private final SalaryWithdrawRefundCmdExe salaryWithdrawRefundCmdExe;
private final SalaryExchangeGoldCmdExe salaryExchangeGoldCmdExe; private final SalaryExchangeGoldCmdExe salaryExchangeGoldCmdExe;
private final SalaryTransferGoldCmdExe salaryTransferGoldCmdExe; private final SalaryTransferGoldCmdExe salaryTransferGoldCmdExe;
private final SalaryTotalIncomeQryExe salaryTotalIncomeQryExe;
@Override @Override
public SalaryAccountBalanceCO getBalance(Long userId, String salaryType) { public SalaryAccountBalanceCO getBalance(Long userId, String salaryType) {
@ -56,4 +61,9 @@ public class SalaryAccountServiceImpl implements SalaryAccountService {
public UserBankExchangeGoldResultCO exchangeGold(SalaryWithdrawCmd cmd) { public UserBankExchangeGoldResultCO exchangeGold(SalaryWithdrawCmd cmd) {
return salaryExchangeGoldCmdExe.execute(cmd); return salaryExchangeGoldCmdExe.execute(cmd);
} }
@Override
public BigDecimal getTotalIncome(Long userId, String salaryType) {
return salaryTotalIncomeQryExe.execute(userId, Objects.requireNonNull(SalaryType.of(salaryType)));
}
} }

View File

@ -4,6 +4,8 @@ import com.red.circle.framework.dto.PageResult;
import com.red.circle.wallet.app.dto.clientobject.*; import com.red.circle.wallet.app.dto.clientobject.*;
import com.red.circle.wallet.app.dto.cmd.*; import com.red.circle.wallet.app.dto.cmd.*;
import java.math.BigDecimal;
/** /**
* 工资账户服务. * 工资账户服务.
*/ */
@ -43,5 +45,14 @@ public interface SalaryAccountService {
UserBankWithdrawResultCO transferGold(SalaryWithdrawCmd cmd); UserBankWithdrawResultCO transferGold(SalaryWithdrawCmd cmd);
UserBankExchangeGoldResultCO exchangeGold(SalaryWithdrawCmd cmd); UserBankExchangeGoldResultCO exchangeGold(SalaryWithdrawCmd cmd);
/**
* 查询用户累计收入.
*
* @param userId 用户ID
* @param salaryType 工资类型
* @return 累计收入
*/
BigDecimal getTotalIncome(Long userId, String salaryType);
} }

View File

@ -16,6 +16,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
/** /**
* 工资账户 Client Endpoint. * 工资账户 Client Endpoint.
*/ */
@ -48,4 +50,9 @@ public class UserSalaryAccountClientEndpoint implements UserSalaryAccountClientA
SalaryRunningWaterQueryInnerCmd cmd) { SalaryRunningWaterQueryInnerCmd cmd) {
return ResultResponse.success(userSalaryAccountClientService.queryRunningWater(cmd)); return ResultResponse.success(userSalaryAccountClientService.queryRunningWater(cmd));
} }
@Override
public ResultResponse<BigDecimal> getTotalIncome(Long userId, String salaryType) {
return ResultResponse.success(userSalaryAccountClientService.getTotalIncome(userId, salaryType));
}
} }

View File

@ -8,6 +8,8 @@ import com.red.circle.wallet.inner.model.dto.SalaryAccountBalanceDTO;
import com.red.circle.wallet.inner.model.dto.SalaryIssueResultDTO; import com.red.circle.wallet.inner.model.dto.SalaryIssueResultDTO;
import com.red.circle.wallet.inner.model.dto.SalaryRunningWaterDTO; import com.red.circle.wallet.inner.model.dto.SalaryRunningWaterDTO;
import java.math.BigDecimal;
/** /**
* 工资账户 Inner Service. * 工资账户 Inner Service.
*/ */
@ -32,4 +34,9 @@ public interface UserSalaryAccountClientService {
* 查询流水. * 查询流水.
*/ */
PageResult<SalaryRunningWaterDTO> queryRunningWater(SalaryRunningWaterQueryInnerCmd cmd); PageResult<SalaryRunningWaterDTO> queryRunningWater(SalaryRunningWaterQueryInnerCmd cmd);
/**
* 查询用户累计收入.
*/
BigDecimal getTotalIncome(Long userId, String salaryType);
} }

View File

@ -17,6 +17,7 @@ import com.red.circle.wallet.inner.model.dto.SalaryIssueResultDTO;
import com.red.circle.wallet.inner.model.dto.SalaryRunningWaterDTO; import com.red.circle.wallet.inner.model.dto.SalaryRunningWaterDTO;
import com.red.circle.wallet.inner.service.salary.UserSalaryAccountClientService; import com.red.circle.wallet.inner.service.salary.UserSalaryAccountClientService;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -67,4 +68,10 @@ public class UserSalaryAccountClientServiceImpl implements UserSalaryAccountClie
return pageResult; return pageResult;
} }
@Override
public BigDecimal getTotalIncome(Long userId, String salaryType) {
BigDecimal totalIncome = salaryAccountService.getTotalIncome(userId, salaryType);
return totalIncome != null ? totalIncome : BigDecimal.ZERO;
}
} }