package com.ruoyi.app.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.github.pagehelper.PageHelper; import com.ruoyi.app.annotation.LoginAppUser; import com.ruoyi.app.controller.base.AppBaseController; import com.ruoyi.app.domain.TbAppUser; import com.ruoyi.app.domain.TbFamily; import com.ruoyi.app.domain.TbFamilyMember; import com.ruoyi.app.domain.TbMemberMiddle; import com.ruoyi.app.domain.vo.AppFamilyVo; import com.ruoyi.app.domain.vo.AppMemberVo; import com.ruoyi.app.service.ITbAppUserService; import com.ruoyi.app.service.ITbFamilyService; import com.ruoyi.app.service.ITbMemberMiddleService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.spring.SpringUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.apache.poi.ss.formula.functions.T; import org.aspectj.weaver.loadtime.Aj; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; /** * 家族管理 * * @author Alex * @date 2020-09-24 */ @Api(value = "家族管理",tags = "家族管理") @RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/app/family" ) public class FamilyController extends AppBaseController { private final ITbFamilyService familyService; private final ITbAppUserService appUserService; private final ITbMemberMiddleService middleService; /** * 查询家族列表 */ @ApiOperation("查询家族列表") @GetMapping("/list") public TableDataInfo list(TbFamily tbFamily) { startPage(); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(tbFamily.getCode())){ lqw.eq(TbFamily::getCode ,tbFamily.getCode()); } if (StringUtils.isNotBlank(tbFamily.getName())){ lqw.like(TbFamily::getName ,tbFamily.getName()); } if (StringUtils.isNotBlank(tbFamily.getFullName())){ lqw.like(TbFamily::getFullName ,tbFamily.getFullName()); } if (StringUtils.isNotBlank(tbFamily.getHometown())){ lqw.eq(TbFamily::getHometown ,tbFamily.getHometown()); } if (StringUtils.isNotBlank(tbFamily.getAddress())){ lqw.eq(TbFamily::getAddress ,tbFamily.getAddress()); } if (StringUtils.isNotBlank(tbFamily.getCity())){ lqw.eq(TbFamily::getCity ,tbFamily.getCity()); } List list = familyService.pageList(lqw); return getDataTable(list); } /** * 查询我的默认家族 */ @ApiOperation("我的默认家族") @GetMapping("/myFamily") public AjaxResult myFamily(){ AppMemberVo memberVo = getLoginUser().getUser(); Long memberId = memberVo.getMemberId(); if (memberId == null) { return AjaxResult.error("成员id不能为空"); } TbFamily family = familyService.myFamily(memberId); return AjaxResult.success(family); } @ApiOperation("我的家族列表") @GetMapping("/myList") public AjaxResult myList(){ AppMemberVo memberVo = getLoginUser().getUser(); Long memberId = memberVo.getMemberId(); if (memberId == null) { return AjaxResult.error("成员id不能为空"); } return AjaxResult.success(familyService.selectByMemberId(memberId)); } /** * 创建家族 */ @ApiOperation("创建家族") @PostMapping("/create") @Transactional(rollbackFor = Exception.class) public AjaxResult add(@RequestBody TbFamily tbFamily) { AppMemberVo memberVo = getLoginUser().getUser(); Date date = new Date(); tbFamily.setCreateTime(date); tbFamily.setUpdateTime(date); if(!familyService.saveFamily(tbFamily)) { return AjaxResult.error("创建失败"); } // 设置添加人为管理员 TbMemberMiddle middle = new TbMemberMiddle(); middle.setMemberId(memberVo.getMemberId()); middle.setFamilyId(tbFamily.getId()); middle.setAcquiesce("Y"); middle.setAdmin("Y"); middle.setStatus("2"); if(!middleService.save(middle)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return AjaxResult.error("创建失败"); } return AjaxResult.success("创建成功"); } @ApiOperation("切换家族") @ApiImplicitParam(name = "familyId", value = "切换的家族ID",paramType="Long") @GetMapping("/change") public AjaxResult change(Long familyId) { AppMemberVo memberVo = getLoginUser().getUser(); Long memberId = memberVo.getMemberId(); if(familyService.change(memberId,familyId)){ return AjaxResult.success(); } return AjaxResult.error("切换失败"); } /** * 申请加入家族 * @param familyId * @return */ @ApiOperation("申请加入家族") @ApiImplicitParam(name = "familyId", value = "申请的家族ID",paramType="Long") @GetMapping("/join") public AjaxResult join(Long familyId) { if (familyId == null) { return AjaxResult.error("家族id不能为空"); } AppMemberVo memberVo = getLoginUser().getUser(); memberVo.setFamilyId(familyId); return familyService.applyFamily(memberVo); } @ApiOperation("申请列表") @ApiImplicitParams({ @ApiImplicitParam(name = "familyId", value = "家族id",paramType="Long"), @ApiImplicitParam(name = "pageNum", value = "当前页",paramType="int"), @ApiImplicitParam(name = "pageSize", value = "每页行数",paramType="int") }) @GetMapping("/selectApply") public TableDataInfo selectApply(Long familyId,Integer pageNum,Integer pageSize){ if (familyId == null){ return new TableDataInfo(); } pageNum = pageNum == null ? 1 : pageNum; pageSize = pageSize == null ? 10 : pageSize; PageHelper.startPage(pageNum, pageSize, "mi.create_time desc"); // 获取申请列表 1申请 3拒绝 4退出 List list = middleService.selectApplyMember(new LambdaQueryWrapper() .eq(TbMemberMiddle::getFamilyId,familyId) .in(TbMemberMiddle::getStatus, Arrays.asList("1","3","4")) ); return getDataTable(list); } @ApiOperation("通过/拒绝申请") @ApiImplicitParams({ @ApiImplicitParam(name = "memberId", value = "申请的成员id",paramType="Long"), @ApiImplicitParam(name = "familyId", value = "家族id",paramType="Long"), @ApiImplicitParam(name = "status", value = "申请状态 2同意 3拒绝",paramType="String") }) @GetMapping("/pass") public AjaxResult pass(Long memberId,Long familyId, String status){ TbMemberMiddle middle = middleService.getOne(new LambdaQueryWrapper() .eq(TbMemberMiddle::getFamilyId,familyId) .eq(TbMemberMiddle::getMemberId,memberId) .eq(TbMemberMiddle::getStatus,"1") .last("limit 1") ); if (middle == null) { return AjaxResult.error("查无申请信息"); } // 通过/拒绝申请 middle.setStatus(status); if(!middleService.updateById(middle)){ return AjaxResult.error("通过失败"); } return AjaxResult.success("申请通过"); } /** * 退出家族 * @param familyId * @return */ @ApiOperation("退出家族") @ApiImplicitParam(name = "familyId", value = "申请的家族ID",paramType="Long") @GetMapping("/quit") public AjaxResult quit(Long familyId) { if (familyId == null) { return AjaxResult.error("家族id为空"); } AppMemberVo user = getLoginUser().getUser(); TbMemberMiddle middle = middleService.getOne(new LambdaQueryWrapper() .eq(TbMemberMiddle::getMemberId,user.getMemberId()) .eq(TbMemberMiddle::getFamilyId,familyId) .last("limit 1") ); if (middle == null){ return AjaxResult.error("未加入家族"); } if ("Y".equals(middle.getPatriarch())) { return AjaxResult.error("族长不能退出家族"); } if ("4".equals(middle.getStatus())) { return AjaxResult.error("已退出"); } middle.setStatus("4"); //退出 middle.setAcquiesce("N"); if(!middleService.updateById(middle)){ return AjaxResult.error("退出失败"); } return AjaxResult.success("退出成功"); } }