package com.panzhihua.applets.api; import static java.util.stream.Collectors.toList; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import javax.annotation.Resource; import javax.validation.Valid; import cn.hutool.core.util.StrUtil; import com.panzhihua.applets.umf.UmfPayUtil; import com.panzhihua.common.constants.Constants; import com.panzhihua.common.constants.HttpStatus; import com.panzhihua.common.model.dtos.community.social.PageProjectDTO; import com.panzhihua.common.model.vos.community.rentHouse.WxPayOrderVO; import com.panzhihua.common.utlis.DateUtils; import io.swagger.annotations.ApiParam; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.panzhihua.applets.model.dtos.ComPbMemberCertificationDTO; import com.panzhihua.applets.weixin.CheckService; import com.panzhihua.common.constants.SecurityConstants; import com.panzhihua.common.constants.UserConstants; import com.panzhihua.common.controller.BaseController; import com.panzhihua.common.model.dtos.user.SysUserEditTipsDTO; import com.panzhihua.common.model.dtos.user.SysUserFeedbackDTO; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.ComActActEvaluateVO; import com.panzhihua.common.model.vos.community.ComActActRegistVO; import com.panzhihua.common.model.vos.community.ComActActivityVO; import com.panzhihua.common.model.vos.community.ComActEasyPhotoVO; import com.panzhihua.common.model.vos.community.ComActMicroWishVO; import com.panzhihua.common.model.vos.community.ComActVO; import com.panzhihua.common.model.vos.community.ComMngStructAreaVO; import com.panzhihua.common.model.vos.community.ComMngStructHouseVO; import com.panzhihua.common.model.vos.partybuilding.PartyBuildingMemberVO; import com.panzhihua.common.model.vos.user.ComMngFamilyInfoVO; import com.panzhihua.common.model.vos.user.SysUserNoticeVO; import com.panzhihua.common.model.vos.user.UpdateUserArchivesVO; import com.panzhihua.common.model.vos.user.UserArchivesVO; import com.panzhihua.common.model.vos.user.UserPhoneVO; import com.panzhihua.common.service.community.CommunityService; import com.panzhihua.common.service.partybuilding.PartyBuildingService; import com.panzhihua.common.service.user.UserService; import com.panzhihua.common.validated.AddGroup; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; /** * @program: springcloud_k8s_panzhihuazhihuishequ * @description: 用户 * @author: huang.hongfa weixin hhf9596 qq 959656820 * @create: 2020-11-24 12:03 **/ @Slf4j @RestController @RequestMapping("/user/") @Api(tags = {"我的模块"}) public class UserApi extends BaseController { @Resource private UserService userService; @Resource private CommunityService communityService; @Resource private PartyBuildingService partyBuildingService; @Resource private CheckService checkService; @Resource private StringRedisTemplate stringRedisTemplate; @ApiOperation(value = "当前登录用户信息", response = LoginUserInfoVO.class) @GetMapping("info") public R getUserInfo() { LoginUserInfoVO loginUserInfo = this.getLoginUserInfo(); Long communityId = loginUserInfo.getCommunityId(); Long userId = loginUserInfo.getUserId(); Long areaId = loginUserInfo.getAreaId(); R r = userService.getUserInfoByUserId(userId + ""); String phone = loginUserInfo.getPhone(); if (R.isOk(r)) { Object data = r.getData(); if (!ObjectUtils.isEmpty(data)) { LoginUserInfoVO loginUserInfoVO = (LoginUserInfoVO)data; //是否保存unionid // if (Objects.isNull(loginUserInfoVO.getUnionid()) || "无".equals(loginUserInfoVO.getUnionid())) { // return R.fail(HttpStatus.UNAUTHORIZED, "token过期"); // } R r1 = communityService.detailHouse(userId); if(StringUtils.isNotEmpty(loginUserInfoVO.getIdCard())){ //查询实名用户绑定的实有人口地址 R r4=communityService.selectByIdCard(loginUserInfoVO.getIdCard()); if(R.isOk(r4)){ String address= (String) r4.getData(); if(StringUtils.isNotEmpty(address)){ loginUserInfoVO.setAddress(address); r.setData(loginUserInfoVO); } } } if (null != communityId && 0 != communityId) { R r2 = communityService.detailCommunity(communityId); if (R.isOk(r2)) { Object data1 = r2.getData(); if (!ObjectUtils.isEmpty(data1)) { loginUserInfoVO .setComActVO(JSONObject.parseObject(JSONObject.toJSONString(data1), ComActVO.class)); r.setData(loginUserInfoVO); } } } if (null != areaId && areaId != 0) { R r3 = communityService.detailArea(areaId); if (R.isOk(r3)) { Object data1 = r3.getData(); if (!ObjectUtils.isEmpty(data1)) { loginUserInfoVO.setComMngStructAreaVO( JSONObject.parseObject(JSONObject.toJSONString(data1), ComMngStructAreaVO.class)); r.setData(loginUserInfoVO); } } } if (R.isOk(r1)) { Object data1 = r1.getData(); if (!ObjectUtils.isEmpty(data1)) { loginUserInfoVO.setComMngStructHouseVOS((List)data1); r.setData(loginUserInfoVO); } } } } return r; } @ApiOperation(value = "用户实名认证") @PutMapping("putuserauthentication") public R putUserAuthentication(@RequestBody @Validated(AddGroup.class) LoginUserInfoVO loginUserInfoVO) { Long userId = this.getUserId(); loginUserInfoVO.setUserId(userId); loginUserInfoVO.setCommunityId(this.getCommunityId()); R r = userService.putUserAuthentication(loginUserInfoVO); if (R.isOk(r)) { // 通过发通知 SysUserNoticeVO sysUserNoticeVO = new SysUserNoticeVO(); sysUserNoticeVO.setUserId(userId); sysUserNoticeVO.setType(3); sysUserNoticeVO.setTitle("实名制审核通过"); sysUserNoticeVO.setBusinessType(6); sysUserNoticeVO.setBusinessContent("恭喜你,你已经通过了实名制认证"); sysUserNoticeVO.setStatus(0); sysUserNoticeVO.setBusinessStatus(2); R r1 = userService.addNotice(sysUserNoticeVO); if (R.isOk(r1)) { log.info("新增实名认证未通过通知成功【{}】", JSONObject.toJSONString(sysUserNoticeVO)); } // 清空缓存 String userRoleKey = UserConstants.LOGIN_USER_INFO + this.getLoginUserInfo().getUserId(); String userAppletRoleKey = SecurityConstants.ROLE_APPLETS_USER + this.getLoginUserInfo().getUserId(); stringRedisTemplate.delete(userRoleKey); stringRedisTemplate.delete(userAppletRoleKey); } else { // 未通过发通知 /** * SysUserNoticeVO sysUserNoticeVO=new SysUserNoticeVO(); sysUserNoticeVO.setUserId(userId); * sysUserNoticeVO.setType(3); sysUserNoticeVO.setTitle("实名制审核未通过"); sysUserNoticeVO.setBusinessType(6); * sysUserNoticeVO.setBusinessContent(String.format("驳回原因:%s",r.getMsg())); sysUserNoticeVO.setStatus(0); * sysUserNoticeVO.setBusinessStatus(1); R r1 = userService.addNotice(sysUserNoticeVO); if (R.isOk(r1)) { * log.info("新增实名认证未通过通知成功【{}】", JSONObject.toJSONString(sysUserNoticeVO)); } */ } return r; } @ApiOperation(value = "修改用户手机号") @PutMapping("userphone") public R putUserphone(@RequestBody UserPhoneVO userPhoneVO) { Long userId = this.getUserId(); userPhoneVO.setUserId(userId); R r = userService.putUserphone(userPhoneVO); if (R.isOk(r)) { communityService.putVolunteerPhone(userPhoneVO); } return r; } @ApiOperation(value = "修改用户信息") @PutMapping("user") public R putUser(@RequestBody LoginUserInfoVO loginUserInfoVO) { Long userId = this.getUserId(); loginUserInfoVO.setUserId(userId); return userService.putUser(loginUserInfoVO); } @ApiOperation(value = "修改用户首页活动提示") @PostMapping("editUserTips") public R putUserTips(@RequestBody SysUserEditTipsDTO userEditTipsDTO) { Long userId = this.getUserId(); if (userId == null) { return R.fail("请重新登录"); } userEditTipsDTO.setUserId(userId); return userService.editUserTips(userEditTipsDTO); } @ApiOperation(value = "房屋地址下拉列表") @GetMapping("listhouse") @ApiImplicitParam(name = "parentCode", value = "父级地址编码", required = false) public R listHouses(String parentCode) { Long areaId = this.getAreaId(); if (ObjectUtils.isEmpty(parentCode)) { parentCode = ""; } return communityService.listHouses(parentCode, areaId); } @ApiOperation(value = "新增房屋") @PostMapping("houses") public R addHouses(@RequestBody @Validated(AddGroup.class) ComMngStructHouseVO comMngStructHouseVO) { String houseCode = comMngStructHouseVO.getHouseCode(); if (ObjectUtils.isEmpty(houseCode)) { return R.fail("房屋地址编码不能为空"); } LoginUserInfoVO loginUserInfo = this.getLoginUserInfo(); comMngStructHouseVO.setUserId(loginUserInfo.getUserId()); comMngStructHouseVO.setAreaId(loginUserInfo.getAreaId()); return communityService.addHouses(comMngStructHouseVO); } @ApiOperation(value = "家庭成员列表") @GetMapping("listfamily") public R listFamily(@RequestParam(value = "pageNum") Long pageNum, @RequestParam("pageSize") Long pageSize) { Long userId = this.getUserId(); return userService.listFamily(userId, pageNum, pageSize); } @ApiOperation(value = "新增家庭成员") @PostMapping("addfamily") public R addFamily(@RequestBody @Validated(AddGroup.class) ComMngFamilyInfoVO comMngFamilyInfoVO) { Long userId = this.getUserId(); comMngFamilyInfoVO.setUserId(userId); return userService.addFamily(comMngFamilyInfoVO); } @ApiOperation(value = "编辑家庭成员") @PutMapping("putfamily") public R putFamily(@RequestBody ComMngFamilyInfoVO comMngFamilyInfoVO) { Long id = comMngFamilyInfoVO.getId(); if (null == id || 0 == id) { return R.fail("成员主键不能为空"); } comMngFamilyInfoVO.setUserId(this.getUserId()); return userService.putFamily(comMngFamilyInfoVO); } @ApiOperation(value = "我的活动", response = ComActActivityVO.class) @GetMapping("listactivity") public R listActivity(@RequestParam(value = "status", required = false) Integer status, @RequestParam(value = "type", required = false) Integer type) { LoginUserInfoVO loginUserInfo = this.getLoginUserInfo(); Long userId = loginUserInfo.getUserId(); Long communityId = loginUserInfo.getCommunityId(); List comActActivityVOS = new ArrayList<>(); R r = communityService.listActivity(userId, status,type); if (R.isOk(r)&&r.getData()!=null) { comActActivityVOS = (List)r.getData(); } // R r1 = partyBuildingService.listActivity(userId, communityId, status); // if (R.isOk(r1)&&r1.getData()!=null) { // List data = (List)r1.getData(); // comActActivityVOS.addAll(data); // } if (!ObjectUtils.isEmpty(comActActivityVOS)) { String s = JSONArray.toJSONString(comActActivityVOS); List comActActivityVOS1 = new ArrayList<>(); comActActivityVOS1 = JSONArray.parseArray(s, ComActActivityVO.class); List collect = comActActivityVOS1.stream() .sorted(Comparator.comparing(ComActActivityVO::getBeginAt).reversed()).collect(Collectors.toList()); comActActivityVOS = collect; } if (!ObjectUtils.isEmpty(comActActivityVOS)) { List collect = comActActivityVOS.stream() .sorted(Comparator.comparing(ComActActivityVO::getSingDate).reversed()).collect(Collectors.toList()); //当前用户签到记录列表 R r2 = communityService.listSignInActivity(userId); if (R.isOk(r2) && !ObjectUtils.isEmpty(r2.getData())) { List comActActRegistVOS = JSONArray.parseArray(JSONArray.toJSONString(r2.getData()), ComActActRegistVO.class).stream() .sorted(Comparator.comparing(ComActActRegistVO::getCreateAt).reversed()).collect(toList()); collect.forEach(comActActivityVO -> { ArrayList currentList = new ArrayList<>(); comActActRegistVOS.forEach(activitySignInVO -> { if (comActActivityVO.getId().equals(activitySignInVO.getActivityId())) { currentList.add(activitySignInVO); if(activitySignInVO.getEndTime()!=null){ comActActivityVO.setIsComment(1); if(comActActivityVO.getTimes()==null){ comActActivityVO.setTimes(1); comActActivityVO.setAward(activitySignInVO.getAward()); } else { comActActivityVO.setTimes(comActActivityVO.getTimes()+1); comActActivityVO.setAward(comActActivityVO.getAward() + activitySignInVO.getAward()); } } } }); if (currentList.size() > 10) { comActActivityVO.setActivitySignInList(currentList.subList(0, 10)); } else { comActActivityVO.setActivitySignInList(currentList); } Integer limit = comActActivityVO.getLimit(); if(limit != null && limit>0 &¤tList.size()>0){ if(limit==currentList.size()&¤tList.get(currentList.size()-1).getEndTime()!=null){ comActActivityVO.setIsRegist(1); } } }); } //当前用户活动评分 R r3 = communityService.listEvaluate(userId); if (R.isOk(r3) && !ObjectUtils.isEmpty(r3.getData())) { List comActActEvaluateVOS = JSONArray.parseArray(JSONArray.toJSONString(r3.getData()), ComActActEvaluateVO.class); collect.forEach(comActActivityVO -> { List evaluateVOS=comActActEvaluateVOS.stream().filter(comActActEvaluateVO -> comActActEvaluateVO.getActivityId().equals(comActActivityVO.getId())).collect(toList()); if(comActActivityVO.getSignCount()<=evaluateVOS.size()){ comActActivityVO.setIsComment(0); } comActActivityVO.setComActActEvaluateVOList(evaluateVOS); }); } return R.ok(collect); } return R.ok(comActActivityVOS); } @ApiOperation(value = "分页查询我的随手拍", response = ComActEasyPhotoVO.class) @PostMapping("pageeasyphoto") public R pageEasyPhoto(@RequestBody ComActEasyPhotoVO comActEasyPhotoVO) { Long userId = this.getUserId(); comActEasyPhotoVO.setSponsorId(userId); comActEasyPhotoVO.setCommunityId(null); return communityService.pageEasyPhotoApplets(comActEasyPhotoVO); } @ApiOperation(value = "分页查询我的微心愿", response = ComActMicroWishVO.class) @PostMapping("pagemicrowish") public R pageMicroWish(@RequestBody ComActMicroWishVO comActMicroWishVO) { Long userId = this.getUserId(); comActMicroWishVO.setUserId(userId); comActMicroWishVO.setCommunityId(null); Integer status = comActMicroWishVO.getStatus(); if (null != status && status == 1) { comActMicroWishVO.setIsPageMyWish(1); } else { comActMicroWishVO.setIsPageMyWish(null); } return communityService.pageMicroWish(comActMicroWishVO); } @ApiOperation(value = "用户确认心愿") @PutMapping("microwishconfirm") public R putMicroWishConfirm(@RequestBody ComActMicroWishVO comActMicroWishVO) { Long userId = this.getUserId(); comActMicroWishVO.setUserId(userId); comActMicroWishVO.setCommunityId(null); Long id = comActMicroWishVO.getId(); if (null == id || 0 == id) { return R.fail("心愿主键不能为空"); } Integer score = comActMicroWishVO.getScore(); if (null == score || 0 == score) { return R.fail("评分不能为空"); } comActMicroWishVO.setEvaluateAt(new Date()); comActMicroWishVO.setStatus(6); return communityService.putMicroWishConfirm(comActMicroWishVO); } @ApiOperation(value = "调试接口--清除昵称、社区、小区") @DeleteMapping("usertest") public R deleteUserTest() { Long userId = this.getUserId(); return userService.deleteUserTest(userId); } @ApiOperation(value = "意见反馈") @PostMapping("feedback") public R addFeedback(@RequestBody @Validated(AddGroup.class) SysUserFeedbackDTO sysUserFeedbackDTO) { // 微信内容审核 String msg = sysUserFeedbackDTO.getContent(); if (StrUtil.isNotBlank(msg)) { String result = checkService.checkMessageBy(msg, this.getLoginUserInfo().getOpenid(),this.getAppId()); if (StrUtil.isNotBlank(result)) { return R.fail(501, "填写内容存在 " + result + " 违规信息"); } } LoginUserInfoVO loginUserInfo = this.getLoginUserInfo(); Long userId = loginUserInfo.getUserId(); Long communityId = loginUserInfo.getCommunityId(); Long areaId = loginUserInfo.getAreaId(); if (null == communityId || 0 == communityId) { return R.fail("未绑定社区"); } sysUserFeedbackDTO.setCommunityId(communityId); sysUserFeedbackDTO.setAreaId(areaId); sysUserFeedbackDTO.setUserId(userId); return userService.addFeedback(sysUserFeedbackDTO); } @ApiOperation(value = "党员认证") @PostMapping("partybuildingembercertification") public R partybuildingembercertification( @RequestBody @Validated(AddGroup.class) ComPbMemberCertificationDTO comPbMemberCertificationDTO) { // 党员认证 LoginUserInfoVO loginUserInfo = this.getLoginUserInfo(); Long userId = loginUserInfo.getUserId(); Long communityId = loginUserInfo.getCommunityId(); if (null == communityId || 0 == communityId) { return R.fail("未绑定社区"); } // 判断用户是否已认证成功 R certUser = partyBuildingService.userCertification(userId,communityId); Object certUserInfo = certUser.getData(); AtomicBoolean userCertified = new AtomicBoolean(false); if (R.isOk(certUser) && certUserInfo != null) { try { List partyBuildingMemberVOList = JSONArray.parseArray(JSONArray.toJSONString(certUser.getData()), PartyBuildingMemberVO.class); // 已认证党员身份,直接返回 if (partyBuildingMemberVOList != null && partyBuildingMemberVOList.size() > 0) { partyBuildingMemberVOList.forEach(vo -> { userCertified.set(vo.getAuditResult() == 1); }); } } catch (Exception e) { } } // 匹配手机,验证是否进行自动确认 if (userCertified.get()) { return R.fail("您已审核通过,无需重复提交"); } PartyBuildingMemberVO partyBuildingMemberVO = new PartyBuildingMemberVO(); BeanUtils.copyProperties(comPbMemberCertificationDTO, partyBuildingMemberVO); partyBuildingMemberVO.setAuditResult(0); partyBuildingMemberVO.setCommunityId(communityId); // 用户实名认证信息判断 String idCard = loginUserInfo.getIdCard(); partyBuildingMemberVO.setUserId(userId); if (idCard == null) { return R.fail("用户未完成实名认证"); } else { partyBuildingMemberVO.setIdCard(loginUserInfo.getIdCard()); partyBuildingMemberVO.setName(loginUserInfo.getName()); partyBuildingMemberVO.setPhone(loginUserInfo.getPhone()); } R r = partyBuildingService.addPartyBuildingMember(partyBuildingMemberVO); return r; } @ApiOperation(value = "党员认证查询") @GetMapping("partybuildingembercertification") public R partybuildingembercertification() { // 党员认证查询 LoginUserInfoVO loginUserInfo = this.getLoginUserInfo(); Long userId = loginUserInfo.getUserId(); R r = partyBuildingService.userCertification(userId,this.getCommunityId()); if (R.isOk(r)) { List partyBuildingMemberVOList = JSONArray.parseArray(JSONArray.toJSONString(r.getData()), PartyBuildingMemberVO.class); if (partyBuildingMemberVOList != null && partyBuildingMemberVOList.size() > 0) { Optional ot = partyBuildingMemberVOList.stream() .filter(partyBuildingMemberVO -> partyBuildingMemberVO.getAuditResult() == 1).findFirst(); if (ot.isPresent()) { return R.ok(ot.get()); } else { return R.ok(partyBuildingMemberVOList.get(0)); } } } return R.ok(); } /** * 获取动作人员详情 * @param communityId * @param phone * @return */ @ApiOperation(value = "社区工做人员详情") @GetMapping("/getComPbServiceTeamData") public R getComPbServiceTeamData(@RequestParam("communityId") String communityId, @RequestParam("phone") String phone) { return partyBuildingService.getComPbServiceTeamData(communityId,phone); } @ApiOperation(value = "获取用户电子档案", response = UserArchivesVO.class) @PostMapping("getUserArchives") public R getUserArchives() { Long userId = this.getUserId(); if (userId == null) { return R.fail("请重新登录"); } return userService.getUserArchives(userId); } @ApiOperation(value = "编辑用户电子档案") @PostMapping("updateUserArchives") public R updateUserArchives(@RequestBody UpdateUserArchivesVO userArchivesVO) { Long userId = this.getUserId(); if (userId == null) { return R.fail("请重新登录"); } userArchivesVO.setUserId(userId); return userService.updateUserArchives(userArchivesVO); } @ApiOperation(value = "分页查询用户报名的项目") @PostMapping("project") public R pageProjectWhichIsSignedByUser(@RequestBody @Valid PageProjectDTO pageProjectDTO) { pageProjectDTO.setUserId(this.getUserId()); return communityService.pageProjectWhichIsSignedByUser(pageProjectDTO); } @ApiOperation("获取用户") @GetMapping("selectAutomessageSysUserById") public R selectAutomessageSysUserById(@RequestParam("id")Long id){ return communityService.selectAutomessageSysUserById(id); } @ApiOperation("新增投诉建议或问题留言") @PostMapping("addFeedBack") public R addFeedBack(@RequestBody SysUserFeedbackDTO sysUserFeedbackDTO){ sysUserFeedbackDTO.setCommunityId(null); return userService.addFeedback(sysUserFeedbackDTO); } @ApiOperation("查看自己的投诉建议或问题留言记录") @GetMapping("myFeedBack") public R myFeedBack(@ApiParam("类型:1问题留言2投诉建议") @RequestParam(value = "type",required = false)Integer type,@RequestParam("propertyId")Long propertyId){ return userService.myFeedBack(this.getLoginUserInfo().getUserId(),type,propertyId); } }