package com.ruoyi.account.controller;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.account.api.model.AgentApplication;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.api.model.UserChangeLog;
import com.ruoyi.account.dto.AgentQuery;
import com.ruoyi.account.api.model.VipSettingDto;
import com.ruoyi.account.service.AgentApplicationService;
import com.ruoyi.account.service.AppUserService;
import com.ruoyi.account.service.UserChangeLogService;
import com.ruoyi.account.service.VipCenterService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.other.api.domain.BaseSetting;
import com.ruoyi.other.api.domain.VipSetting;
import com.ruoyi.other.api.feignClient.BaseSettingClient;
import com.ruoyi.other.api.feignClient.VipSettingClient;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
*
* 前端控制器
*
*
* @author luodangjia
* @since 2024-11-21
*/
@RestController
@RequestMapping("/agent-application")
public class AgentApplicationController extends BaseController {
@Resource
private AgentApplicationService agentApplicationService;
@Resource
private AppUserService appUserService;
@Resource
private BaseSettingClient baseSettingClient;
@Resource
private VipCenterService vipCenterService;
@PostMapping("/apply")
@ApiOperation(value = "会员申请", tags = {"会员中心-小程序"})
public R apply(@RequestBody AgentApplication agentApplication) {
agentApplicationService.apply(agentApplication);
return R.ok();
}
@PostMapping("/page")
@ApiOperation(value = "会员申请列表", tags = {"后台"})
public R> page(@RequestBody AgentQuery agentQuery) {
IPage agentApplicationIPage = agentApplicationService.pageList(agentQuery);
for (AgentApplication record : agentApplicationIPage.getRecords()) {
AppUser byId = appUserService.getById(record.getAppUserId());
if (byId!=null){
record.setVipId(byId.getVipId());
}
}
return R.ok(agentApplicationIPage);
}
@Resource
private VipSettingClient vipSettingClient;
@GetMapping("/detail")
@ApiOperation(value = "会员申请详情", tags = {"会员中心-小程序"})
public R detail(@RequestParam Long id) {
AgentApplication agentApplication = agentApplicationService.getById(id);
R vipSetting = vipSettingClient.getVipSetting(agentApplication.getApplicationVipId());
VipSettingDto vipSettingDto = new VipSettingDto();
BeanUtils.copyProperties(vipSetting.getData(),vipSettingDto);
agentApplication.setVipSettingDto(vipSettingDto);
return R.ok(agentApplication);
}
@Resource
private UserChangeLogService userChangeLogService;
@GetMapping("/auth")
@ApiOperation(value = "会员申请审核", tags = {"会员中心-小程序"})
public R auth(@RequestParam Long id, @ApiParam("2'已处理-同意',3'已处理-拒绝")Integer status,@ApiParam("处理意见") String remark) {
AgentApplication byId = agentApplicationService.getById(id);
byId.setStatus(status);
byId.setRemark(remark);
agentApplicationService.updateById(byId);
AppUser byId1 = appUserService.getById(byId.getAppUserId());
//插入等级变化数据
UserChangeLog userChangeLog = new UserChangeLog();
userChangeLog.setCreateTime(LocalDateTime.now());
userChangeLog.setAppUserId(byId.getAppUserId());
userChangeLog.setBeforeVipId(byId1.getVipId());
userChangeLog.setAfterVipId(byId.getApplicationVipId());
if (userChangeLog.getBeforeVipId()>userChangeLog.getAfterVipId()) {
userChangeLog.setChangeType(0);
}else {
userChangeLog.setChangeType(1);
}
userChangeLogService.save(userChangeLog);
//变更会员等级
byId1.setVipId(byId.getApplicationVipId());
// 当用户为合伙人时,计算合伙人积分和培育积分
Integer vipId = byId1.getVipId();
if (vipId == 7){
R baseSetting = baseSettingClient.getBaseSetting(1);
BaseSetting data = baseSetting.getData();
int basePoint = Integer.parseInt(data.getContent());
// 当前用户计算合伙人积分
R vipSetting = vipSettingClient.getVipSetting(vipId);
Integer point = getPoint(vipSetting, byId1, basePoint);
byId1.setPartPoint(point);
// 上级计算培育积分
R baseSetting2 = baseSettingClient.getBaseSetting(1);
BaseSetting data2 = baseSetting2.getData();
int basePoint2 = Integer.parseInt(data2.getContent());
Long inviteUserId = byId1.getInviteUserId();
AppUser byId2 = appUserService.getById(inviteUserId);
if (byId2 != null){
Integer point1 = getPoint(vipSetting, byId2, basePoint2);
byId2.setPartGrowPoint(point1);
}
}
appUserService.updateById(byId1);
return R.ok(byId);
}
private Integer getPoint(R vipSetting, AppUser appUser, Integer basePoint) {
VipSetting vipSettingData = vipSetting.getData();
Integer vipLevelUpShopRole = vipSettingData.getVipLevelUpShopRole();
int i = 1;
if (vipLevelUpShopRole == 1){
i += 1;
}
Integer vipLevelUpNumRole = vipSettingData.getVipLevelUpNumRole();
if (vipLevelUpNumRole == 1){
i += 1;
}
if (vipCenterService.checkReadyToBePartner(appUser.getId())){
return basePoint * i;
}
return 0;
}
}