FamilyController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. package com.ruoyi.app.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
  4. import com.github.pagehelper.PageHelper;
  5. import com.ruoyi.app.annotation.LoginAppUser;
  6. import com.ruoyi.app.controller.base.AppBaseController;
  7. import com.ruoyi.app.domain.TbAppUser;
  8. import com.ruoyi.app.domain.TbFamily;
  9. import com.ruoyi.app.domain.TbFamilyMember;
  10. import com.ruoyi.app.domain.TbMemberMiddle;
  11. import com.ruoyi.app.domain.vo.AppFamilyVo;
  12. import com.ruoyi.app.domain.vo.AppMemberVo;
  13. import com.ruoyi.app.service.ITbAppUserService;
  14. import com.ruoyi.app.service.ITbFamilyService;
  15. import com.ruoyi.app.service.ITbMemberMiddleService;
  16. import com.ruoyi.common.annotation.Log;
  17. import com.ruoyi.common.core.domain.AjaxResult;
  18. import com.ruoyi.common.core.page.TableDataInfo;
  19. import com.ruoyi.common.enums.BusinessType;
  20. import com.ruoyi.common.utils.StringUtils;
  21. import com.ruoyi.common.utils.bean.BeanUtils;
  22. import com.ruoyi.common.utils.spring.SpringUtils;
  23. import io.swagger.annotations.Api;
  24. import io.swagger.annotations.ApiImplicitParam;
  25. import io.swagger.annotations.ApiImplicitParams;
  26. import io.swagger.annotations.ApiOperation;
  27. import lombok.RequiredArgsConstructor;
  28. import org.apache.poi.ss.formula.functions.T;
  29. import org.aspectj.weaver.loadtime.Aj;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.security.access.prepost.PreAuthorize;
  32. import org.springframework.transaction.annotation.Transactional;
  33. import org.springframework.transaction.interceptor.TransactionAspectSupport;
  34. import org.springframework.web.bind.annotation.*;
  35. import java.util.ArrayList;
  36. import java.util.Arrays;
  37. import java.util.Date;
  38. import java.util.List;
  39. /**
  40. * 家族管理
  41. *
  42. * @author Alex
  43. * @date 2020-09-24
  44. */
  45. @Api(value = "家族管理",tags = "家族管理")
  46. @RequiredArgsConstructor(onConstructor_ = @Autowired)
  47. @RestController
  48. @RequestMapping("/app/family" )
  49. public class FamilyController extends AppBaseController {
  50. private final ITbFamilyService familyService;
  51. private final ITbAppUserService appUserService;
  52. private final ITbMemberMiddleService middleService;
  53. /**
  54. * 查询家族列表
  55. */
  56. @ApiOperation("查询家族列表")
  57. @GetMapping("/list")
  58. public TableDataInfo list(TbFamily tbFamily)
  59. {
  60. startPage();
  61. LambdaQueryWrapper<TbFamily> lqw = new LambdaQueryWrapper<>();
  62. if (StringUtils.isNotBlank(tbFamily.getCode())){
  63. lqw.eq(TbFamily::getCode ,tbFamily.getCode());
  64. }
  65. if (StringUtils.isNotBlank(tbFamily.getName())){
  66. lqw.like(TbFamily::getName ,tbFamily.getName());
  67. }
  68. if (StringUtils.isNotBlank(tbFamily.getFullName())){
  69. lqw.like(TbFamily::getFullName ,tbFamily.getFullName());
  70. }
  71. if (StringUtils.isNotBlank(tbFamily.getHometown())){
  72. lqw.eq(TbFamily::getHometown ,tbFamily.getHometown());
  73. }
  74. if (StringUtils.isNotBlank(tbFamily.getAddress())){
  75. lqw.eq(TbFamily::getAddress ,tbFamily.getAddress());
  76. }
  77. if (StringUtils.isNotBlank(tbFamily.getCity())){
  78. lqw.eq(TbFamily::getCity ,tbFamily.getCity());
  79. }
  80. List<AppFamilyVo> list = familyService.pageList(lqw);
  81. return getDataTable(list);
  82. }
  83. /**
  84. * 查询我的默认家族
  85. */
  86. @ApiOperation("我的默认家族")
  87. @GetMapping("/myFamily")
  88. public AjaxResult myFamily(@LoginAppUser AppMemberVo memberVo){
  89. Long memberId = memberVo.getMemberId();
  90. if (memberId == null) {
  91. return AjaxResult.error("成员id不能为空");
  92. }
  93. TbFamily family = familyService.myFamily(memberId);
  94. return AjaxResult.success(family);
  95. }
  96. @ApiOperation("我的家族列表")
  97. @GetMapping("/myList")
  98. public AjaxResult myList(@LoginAppUser AppMemberVo memberVo){
  99. Long memberId = memberVo.getMemberId();
  100. if (memberId == null) {
  101. return AjaxResult.error("成员id不能为空");
  102. }
  103. return AjaxResult.success(familyService.selectByMemberId(memberId));
  104. }
  105. /**
  106. * 创建家族
  107. */
  108. @ApiOperation("创建家族")
  109. @PostMapping("/create")
  110. @Transactional(rollbackFor = Exception.class)
  111. public AjaxResult add(@LoginAppUser AppMemberVo memberVo,@RequestBody TbFamily tbFamily) {
  112. Date date = new Date();
  113. tbFamily.setCreateTime(date);
  114. tbFamily.setUpdateTime(date);
  115. if(!familyService.saveFamily(tbFamily)) {
  116. return AjaxResult.error("创建失败");
  117. }
  118. // 设置添加人为管理员
  119. TbMemberMiddle middle = new TbMemberMiddle();
  120. middle.setMemberId(memberVo.getMemberId());
  121. middle.setFamilyId(tbFamily.getId());
  122. middle.setAcquiesce("Y");
  123. middle.setAdmin("Y");
  124. middle.setStatus("2");
  125. if(!middleService.save(middle)) {
  126. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  127. return AjaxResult.error("创建失败");
  128. }
  129. return AjaxResult.success("创建成功");
  130. }
  131. @ApiOperation("切换家族")
  132. @ApiImplicitParam(name = "familyId", value = "切换的家族ID",paramType="Long")
  133. @GetMapping("/change")
  134. public AjaxResult change(@LoginAppUser AppMemberVo memberVo,Long familyId) {
  135. Long memberId = memberVo.getMemberId();
  136. if(familyService.change(memberId,familyId)){
  137. return AjaxResult.success();
  138. }
  139. return AjaxResult.error("切换失败");
  140. }
  141. /**
  142. * 申请加入家族
  143. * @param familyId
  144. * @return
  145. */
  146. @Transactional(rollbackFor = Exception.class)
  147. @ApiOperation("申请加入家族")
  148. @ApiImplicitParam(name = "familyId", value = "申请的家族ID",paramType="Long")
  149. @GetMapping("/join")
  150. public AjaxResult join(@LoginAppUser AppMemberVo memberVo, Long familyId) {
  151. List<TbMemberMiddle> middles = middleService.list(new LambdaQueryWrapper<TbMemberMiddle>()
  152. .eq(TbMemberMiddle::getFamilyId,familyId)
  153. .eq(TbMemberMiddle::getMemberId,memberVo.getMemberId())
  154. .eq(TbMemberMiddle::getStatus,"2")
  155. );
  156. if (middles.size() > 0) {
  157. return AjaxResult.error("已在该家族,不允许重复加入");
  158. }
  159. memberVo.setJoins("Y");
  160. // 保存成员
  161. if(appUserService.saveOrUpdate(memberVo)){
  162. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  163. return AjaxResult.error("申请失败");
  164. }
  165. // 是否已加入过家族
  166. List<TbMemberMiddle> middleList = middleService.list(new LambdaQueryWrapper<TbMemberMiddle>()
  167. .eq(TbMemberMiddle::getMemberId,memberVo.getMemberId())
  168. );
  169. TbMemberMiddle middle = new TbMemberMiddle();
  170. if (middleList.size() == 0) {
  171. // 如果从未加入过家族,则设置为默认家族
  172. middle.setAcquiesce("Y");
  173. }
  174. middle.setFamilyId(familyId);
  175. middle.setMemberId(memberVo.getMemberId());
  176. middle.setStatus("1"); // 申请
  177. if(!middleService.save(middle)){
  178. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  179. return AjaxResult.error("申请失败");
  180. }
  181. return AjaxResult.success("申请成功");
  182. }
  183. @ApiOperation("申请列表")
  184. @ApiImplicitParams({
  185. @ApiImplicitParam(name = "familyId", value = "家族id",paramType="Long"),
  186. @ApiImplicitParam(name = "pageNum", value = "当前页",paramType="int"),
  187. @ApiImplicitParam(name = "pageSize", value = "每页行数",paramType="int")
  188. })
  189. @GetMapping("/selectApply")
  190. public TableDataInfo selectApply(Long familyId,Integer pageNum,Integer pageSize){
  191. if (familyId == null){
  192. return new TableDataInfo();
  193. }
  194. pageNum = pageNum == null ? 1 : pageNum;
  195. pageSize = pageSize == null ? 10 : pageSize;
  196. PageHelper.startPage(pageNum, pageSize, "mi.create_time desc");
  197. // 获取申请列表 1申请 3拒绝 4退出
  198. List<TbMemberMiddle> list = middleService.selectApplyMember(new LambdaQueryWrapper<TbMemberMiddle>()
  199. .eq(TbMemberMiddle::getFamilyId,familyId)
  200. .in(TbMemberMiddle::getStatus, Arrays.asList("1","3","4"))
  201. );
  202. return getDataTable(list);
  203. }
  204. @ApiOperation("通过申请")
  205. @ApiImplicitParams({
  206. @ApiImplicitParam(name = "memberId", value = "申请的成员id",paramType="Long"),
  207. @ApiImplicitParam(name = "familyId", value = "家族id",paramType="Long")
  208. })
  209. @GetMapping("/pass")
  210. public AjaxResult pass(Long memberId,Long familyId){
  211. TbMemberMiddle middle = middleService.getOne(new LambdaQueryWrapper<TbMemberMiddle>()
  212. .eq(TbMemberMiddle::getFamilyId,familyId)
  213. .eq(TbMemberMiddle::getMemberId,memberId)
  214. .eq(TbMemberMiddle::getStatus,"1")
  215. .last("limit 1")
  216. );
  217. if (middle == null) {
  218. return AjaxResult.error("查无申请信息");
  219. }
  220. middle.setStatus("2"); //通过申请
  221. if(!middleService.updateById(middle)){
  222. return AjaxResult.error("通过失败");
  223. }
  224. return AjaxResult.success("申请通过");
  225. }
  226. /**
  227. * 退出家族
  228. * @param familyId
  229. * @return
  230. */
  231. @ApiOperation("退出家族")
  232. @ApiImplicitParam(name = "familyId", value = "申请的家族ID",paramType="Long")
  233. @GetMapping("/quit")
  234. public AjaxResult quit(@LoginAppUser AppMemberVo user, Long familyId) {
  235. if (familyId == null) {
  236. return AjaxResult.error("家族id为空");
  237. }
  238. TbMemberMiddle middle = middleService.getOne(new LambdaQueryWrapper<TbMemberMiddle>()
  239. .eq(TbMemberMiddle::getMemberId,user.getMemberId())
  240. .eq(TbMemberMiddle::getFamilyId,familyId)
  241. );
  242. if (middle == null){
  243. return AjaxResult.error("未加入家族");
  244. }
  245. if ("Y".equals(middle.getPatriarch())) {
  246. return AjaxResult.error("族长不能退出家族");
  247. }
  248. if ("4".equals(middle.getStatus())) {
  249. return AjaxResult.error("已退出");
  250. }
  251. middle.setStatus("4"); //退出
  252. middle.setAcquiesce("N");
  253. if(!middleService.updateById(middle)){
  254. return AjaxResult.error("退出失败");
  255. }
  256. return AjaxResult.success("退出成功");
  257. }
  258. }