From 55402cc48ecee2ac135624db4d31119b459a1be7 Mon Sep 17 00:00:00 2001 From: puhanshu <a9236326> Date: 星期五, 14 一月 2022 15:59:51 +0800 Subject: [PATCH] 商业街bug修改 --- springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java | 328 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 317 insertions(+), 11 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java index 62ee081..82d2a14 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java +++ b/springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java @@ -2,6 +2,7 @@ import static java.util.Objects.isNull; import static java.util.Objects.nonNull; +import static org.apache.commons.lang3.StringUtils.isNotBlank; import java.util.ArrayList; import java.util.Date; @@ -9,16 +10,17 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import javax.annotation.Resource; +import javax.validation.constraints.NotBlank; -import cn.hutool.core.util.IdcardUtil; -import com.panzhihua.common.model.dtos.DataKanBansDto; -import com.panzhihua.common.model.vos.community.*; -import com.panzhihua.service_user.dao.*; -import com.panzhihua.service_user.model.dos.*; +import com.alibaba.fastjson.JSONObject; +import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO; +import com.panzhihua.common.model.vos.community.microCommercialStreet.McsLoginUserInfoVO; import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateUtils; import org.springframework.beans.BeanUtils; @@ -37,11 +39,13 @@ import com.panzhihua.common.constants.Constants; import com.panzhihua.common.constants.UserConstants; import com.panzhihua.common.exceptions.ServiceException; +import com.panzhihua.common.model.dtos.DataKanBansDto; import com.panzhihua.common.model.dtos.PageDTO; import com.panzhihua.common.model.dtos.community.ExportUserDTO; import com.panzhihua.common.model.dtos.community.NoticeReadDTO; import com.panzhihua.common.model.dtos.community.convenient.ConvenientMerchantDTO; import com.panzhihua.common.model.dtos.community.convenient.DisableOrEnableConvenientMerchantDTO; +import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO; import com.panzhihua.common.model.dtos.grid.EventGridMemberAddDTO; import com.panzhihua.common.model.dtos.grid.EventGridMemberEditAdminDTO; import com.panzhihua.common.model.dtos.grid.EventGridMemberEditStatusDTO; @@ -59,6 +63,11 @@ import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.SystemmanagementConfigVO; +import com.panzhihua.common.model.vos.community.ComActVO; +import com.panzhihua.common.model.vos.community.ComMngVolunteerMngVO; +import com.panzhihua.common.model.vos.community.IndexUserCommunityVo; +import com.panzhihua.common.model.vos.community.IndexUserStatisticsVo; +import com.panzhihua.common.model.vos.community.IndexUserStreetVo; import com.panzhihua.common.model.vos.grid.GridMemberVO; import com.panzhihua.common.model.vos.grid.admin.GridMemberBuildingVO; import com.panzhihua.common.model.vos.partybuilding.ActivityManagerVO; @@ -80,14 +89,46 @@ import com.panzhihua.common.model.vos.user.UserPhoneVO; import com.panzhihua.common.utlis.IdCard; import com.panzhihua.common.utlis.SensitiveUtil; +import com.panzhihua.common.utlis.SmsUtil; import com.panzhihua.common.utlis.Snowflake; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.common.utlis.WxUtil; import com.panzhihua.common.utlis.WxXCXTempSend; +import com.panzhihua.service_user.dao.ComActFourMemberDao; +import com.panzhihua.service_user.dao.ComMngFamilyInfoDAO; +import com.panzhihua.service_user.dao.ComMngUserTagDAO; +import com.panzhihua.service_user.dao.EventGridMemberBuildingRelationMapper; +import com.panzhihua.service_user.dao.LcCompareMemberCodeMapper; +import com.panzhihua.service_user.dao.RoleDAO; +import com.panzhihua.service_user.dao.SysMenuDAO; +import com.panzhihua.service_user.dao.SysOperLogDAO; +import com.panzhihua.service_user.dao.SysRoleMenuDAO; +import com.panzhihua.service_user.dao.SysUserAgreementDAO; +import com.panzhihua.service_user.dao.SysUserFeedbackDAO; +import com.panzhihua.service_user.dao.SysUserInputDAO; +import com.panzhihua.service_user.dao.SysUserNoticeDAO; +import com.panzhihua.service_user.dao.SysUserRoleDAO; +import com.panzhihua.service_user.dao.UserDao; +import com.panzhihua.service_user.model.dos.ComActFourMember; +import com.panzhihua.service_user.model.dos.ComMngFamilyInfoDO; +import com.panzhihua.service_user.model.dos.ComMngUserTagDO; +import com.panzhihua.service_user.model.dos.EventGridMemberBuildingRelationDO; +import com.panzhihua.service_user.model.dos.LcCompareCodeMemberDO; +import com.panzhihua.service_user.model.dos.SysMenuDO; +import com.panzhihua.service_user.model.dos.SysOperLogDO; +import com.panzhihua.service_user.model.dos.SysRoleDO; +import com.panzhihua.service_user.model.dos.SysRoleMenuDO; +import com.panzhihua.service_user.model.dos.SysUserAgreementDO; +import com.panzhihua.service_user.model.dos.SysUserDO; +import com.panzhihua.service_user.model.dos.SysUserFeedbackDO; +import com.panzhihua.service_user.model.dos.SysUserInputDO; +import com.panzhihua.service_user.model.dos.SysUserNoticeDO; +import com.panzhihua.service_user.model.dos.SysUserRoleDO; import com.panzhihua.service_user.model.dtos.DataKanbanDTO; import com.panzhihua.service_user.service.EventGridMemberBuildingRelationService; import com.panzhihua.service_user.service.UserService; +import cn.hutool.core.util.IdcardUtil; import lombok.extern.slf4j.Slf4j; // import com.panzhihua.common.service.grid.GridService; @@ -101,6 +142,9 @@ @Slf4j @Service public class UserServiceImpl implements UserService { + + private static final String DEFAULT_IMAGE_URL = "https://www.psciio.com//idcard/91313573d071436ab1f934231b31c6e5.jpg"; + @Resource private UserDao userDao; @Resource @@ -325,6 +369,7 @@ loginUserInfoVO.setIsmemberrole(2); loginUserInfoVO.setIsFourMember(2); loginUserInfoVO.setIsCommunityWorker(2); + loginUserInfoVO.setIsPropertyWorker(2); // 志愿者状态 String phone = sysUserDO.getPhone(); Long userCommunityId = sysUserDO.getCommunityId(); @@ -346,6 +391,11 @@ Integer countFourMember=comActFourMemberDao.selectCount(new QueryWrapper<ComActFourMember>().lambda().eq(ComActFourMember::getIdCard,sysUserDO.getIdCard())); if(countFourMember>0){ loginUserInfoVO.setIsFourMember(1); + } + //是否是社区物业人员 + int countPropertyWorker = userDao.countPropertyWorker(Long.parseLong(userId), userCommunityId); + if (countPropertyWorker > 0) { + loginUserInfoVO.setIsPropertyWorker(1); } // 是否是"管理员"或者 本社区 "社区团队"、"党委成员" Integer countTeam = userDao.selectCountTeam(phone, userCommunityId); @@ -584,6 +634,7 @@ if (ObjectUtils.isEmpty(sysUserDO)) { return R.fail("人员不存在"); } + BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); List<ComMngFamilyInfoDO> comMngFamilyInfoDOS = comMngFamilyInfoDAO .selectList(new QueryWrapper<ComMngFamilyInfoDO>().lambda().eq(ComMngFamilyInfoDO::getUserId, userId)); @@ -637,6 +688,9 @@ if (!ObjectUtils.isEmpty(comActVO)) { loginUserInfoVO.setCommunityName(comActVO.getName()); } + //是否是社区物业人员 + int countPropertyWorker = userDao.countPropertyWorker(userId, loginUserInfoVO.getCommunityId()); + loginUserInfoVO.setIsPropertyWorker(countPropertyWorker > 0 ? 1 : 0); loginUserInfoVO.setIdCard(SensitiveUtil.desensitizedIdNumber(loginUserInfoVO.getIdCard())); loginUserInfoVO.setPhone(SensitiveUtil.desensitizedPhoneNumber(loginUserInfoVO.getPhone())); return R.ok(loginUserInfoVO); @@ -2063,7 +2117,7 @@ @Override public R editSysUser(ShopStoreVO storeVO) { SysUserDO sysUserDO1 = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda() - .eq(SysUserDO::getPhone, storeVO.getPhone()).eq(SysUserDO::getType, 5)); + .eq(SysUserDO::getPhone, storeVO.getStoreAccount()).eq(SysUserDO::getType, 5)); if (sysUserDO1 == null) { return R.fail("未查询到后台管理用户!"); } @@ -2589,10 +2643,6 @@ if (nonNull(sysUserDO)) { return R.fail("账户已经存在"); } - sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, convenientMerchantDTO.getPhone())); - if (nonNull(sysUserDO)) { - return R.fail("手机号已经存在"); - } // sys_user 表 sysUserDO = new SysUserDO(); String encode = new BCryptPasswordEncoder().encode(convenientMerchantDTO.getPassword()); @@ -2601,7 +2651,7 @@ sysUserDO.setType(10); sysUserDO.setAreaId(null); sysUserDO.setStatus(1); - sysUserDO.setPhone(convenientMerchantDTO.getPhone()); + sysUserDO.setPhone(null); sysUserDO.setName(convenientMerchantDTO.getContacts()); sysUserDO.setPassword(encode); try { @@ -2745,4 +2795,260 @@ public R communityStatisticsExport(){ return R.ok(userDao.getUserCommunityExcelExport()); } + + /** + * 通过UnionId获取用户信息 + * @param unionId + * @return + */ + @Override + public R getUserInfoByUnionId(String unionId) { + SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getUnionid, unionId)); + if (isNull(sysUserDO)) { + return R.fail("用户不存在"); + } + LoginUserInfoVO loginUserInfoVO = new LoginUserInfoVO(); + BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); + return R.ok(loginUserInfoVO); + } + + /** + * 微商业街新增商家账号 + * @param mcsMerchantDTO + * @return 商家用户id + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R addMcsMerchantUser(McsMerchantDTO mcsMerchantDTO) { + SysUserDO sysUserDO; + sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda() + .eq(SysUserDO::getPhone, mcsMerchantDTO.getPhone()).eq(SysUserDO::getType, 11)); + String encode = new BCryptPasswordEncoder().encode(mcsMerchantDTO.getPassword()); + if (nonNull(sysUserDO)) { + BeanUtils.copyProperties(mcsMerchantDTO, sysUserDO); + sysUserDO.setAccount(mcsMerchantDTO.getAccount()); + sysUserDO.setStatus(mcsMerchantDTO.getAccountStatus()); + sysUserDO.setPhone(mcsMerchantDTO.getPhone()); + sysUserDO.setPassword(encode); + sysUserDO.setPlaintextPassword(mcsMerchantDTO.getPassword()); + userDao.updateById(sysUserDO); + McsLoginUserInfoVO loginUserInfoVO = new McsLoginUserInfoVO(); + BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); + return R.ok(loginUserInfoVO); + } + // sys_user 表 + sysUserDO = new SysUserDO(); + BeanUtils.copyProperties(mcsMerchantDTO, sysUserDO); + sysUserDO.setAccount(mcsMerchantDTO.getAccount()); + sysUserDO.setType(11); + sysUserDO.setAreaId(null); + sysUserDO.setStatus(mcsMerchantDTO.getAccountStatus()); + sysUserDO.setPhone(mcsMerchantDTO.getPhone()); + sysUserDO.setPassword(encode); + sysUserDO.setPlaintextPassword(mcsMerchantDTO.getPassword()); + try { + userDao.insert(sysUserDO); + McsLoginUserInfoVO loginUserInfoVO = new McsLoginUserInfoVO(); + BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); + return R.ok(loginUserInfoVO); + } catch (Exception e) { + e.printStackTrace(); + log.error("修改数字商业街商家用户报错【{}】", e.getMessage()); + if (e.getMessage().contains("union_phone_type")) { + return R.fail("手机号已存在"); + } else if (e.getMessage().contains("union_account_type")) { + return R.fail("账户已经存在"); + }else if(e.getMessage().contains("23000")){ + return R.fail("手机号已存在"); + } else { + return R.fail("账户或手机号已存在,请重新填写尝试"); + } + } + } + + /** + * 微商业街修改商家账号 + * @param mcsMerchantDTO + * @return + */ + @Override + public R putMcsMerchantUser(McsMerchantDTO mcsMerchantDTO) { + SysUserDO sysUserDO = userDao.selectById(mcsMerchantDTO.getUserId()); + if (isNull(sysUserDO)) { + return R.fail("用户不存在"); + } + String account = mcsMerchantDTO.getAccount(); + String phone = mcsMerchantDTO.getPhone(); + Integer accountStatus = mcsMerchantDTO.getAccountStatus(); + String name = mcsMerchantDTO.getName(); + if (isNotBlank(account)) { + sysUserDO.setAccount(account); + } + if (isNotBlank(phone)) { + sysUserDO.setPhone(phone); + } + if (nonNull(accountStatus)) { + sysUserDO.setStatus(accountStatus); + } + if (isNotBlank(name)) { + sysUserDO.setName(name); + } + try { + userDao.updateById(sysUserDO); + } catch (Exception e) { + e.printStackTrace(); + log.error("修改数字商业街商家用户报错【{}】", e.getMessage()); + if (e.getMessage().contains("union_phone_type")) { + return R.fail("手机号已存在"); + } else if (e.getMessage().contains("union_account_type")) { + return R.fail("账户已经存在"); + }else if(e.getMessage().contains("23000")){ + return R.fail("手机号已存在"); + } else { + return R.fail("账户或手机号已存在,请重新填写尝试"); + } + } + return R.ok(); + } + + /** + * 检查用户是否有效 + * @param userId + * @param type + * @return + */ + @Override + public Boolean checkUserIsValid(Long userId, Integer type) { + SysUserDO sysUserDO = userDao.selectById(userId); + if (isNull(sysUserDO) || sysUserDO.getStatus() != 1 || !sysUserDO.getType().equals(type)) { + return false; + } + return true; + } + + /** + * 根据手机号、用户类型查询用户 + * @param phone + * @param type + * @return + */ + @Override + public R getSysUserByPhone(String phone, Integer type) { + SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, phone).eq(SysUserDO::getType, type)); + McsLoginUserInfoVO loginUserInfoVO = null; + if (nonNull(sysUserDO)) { + loginUserInfoVO = new McsLoginUserInfoVO(); + BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); + } + return R.ok(loginUserInfoVO); + } + + /** + * 发送验证码 + * @param phone 手机号 + * @param clientIP 用户ip + * @param prefixKey redis Key 前缀 + * @param limit 获取次数限制 + * @param timeout 超次数获取时间等待 + * @return + */ + @Override + public R sendMessageCode(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout) { + ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue(); + if (isNotBlank(clientIP)) { + String redisKey = String.join("::", prefixKey, clientIP); + Long increment = opsForValue.increment(redisKey, 1); + if (increment > limit) { + return R.fail(String.format("请求过于频繁,请%d分钟后再次尝试!", timeout/60)); + } + stringRedisTemplate.expire(redisKey, timeout, TimeUnit.SECONDS); + } + Random r = new Random(); + StringBuilder rs = new StringBuilder(); + for (int i = 0; i < 5; i++) { + rs.append(r.nextInt(10)); + } + String code = rs.toString(); + int result = SmsUtil.sendCode(phone, code); + if (result == 1) { + String codeKey = String.join("::", phone, code); + opsForValue.set(codeKey, code, timeout, TimeUnit.SECONDS); + return R.ok(); + } + return R.fail(); + } + + /** + * 根据openId获取微商业街用户 + * @param openid + * @return + */ + @Override + public R getMcsUserByOpenId(String openid) { + SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getOpenid, openid).eq(SysUserDO::getType, 11)); + McsLoginUserInfoVO loginUserInfoVO = null; + if (nonNull(sysUserDO) && isNotBlank(sysUserDO.getOpenid())) { + loginUserInfoVO = new McsLoginUserInfoVO(); + BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); + } + return R.ok(loginUserInfoVO); + } + + /** + * 商业街用户微信授权-绑定手机号 + * @param bindUserPhoneDTO + * @return + */ + @Override + public R bindOrAddMcsUser(BindUserPhoneDTO bindUserPhoneDTO) { + String phone = bindUserPhoneDTO.getPhone(); + String openId = bindUserPhoneDTO.getOpenId(); + String redisKey = String.join("::", phone, bindUserPhoneDTO.getCode()); + Boolean hasKey = stringRedisTemplate.hasKey(redisKey); + if (hasKey) { + //通过验证 + SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, phone).eq(SysUserDO::getType, 11)); + if (nonNull(sysUserDO)) { + //已有用户 + sysUserDO.setOpenid(openId); + int result = userDao.updateById(sysUserDO); + if (result > 0) { + McsLoginUserInfoVO loginUserInfoVO = new McsLoginUserInfoVO(); + BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); + stringRedisTemplate.delete(redisKey); + return R.ok(loginUserInfoVO); + } + return R.fail("绑定失败,请重试"); + } else { + //自动创建用户 + McsMerchantDTO mcsMerchantDTO = new McsMerchantDTO(); + mcsMerchantDTO.setAccount(phone); + mcsMerchantDTO.setPassword("88888888"); + mcsMerchantDTO.setAccountStatus(1); + mcsMerchantDTO.setPhone(phone); + mcsMerchantDTO.setName("用户" + retrieveRandomCode(5)); + mcsMerchantDTO.setImageUrl(DEFAULT_IMAGE_URL); + mcsMerchantDTO.setOpenId(openId); + R addUserResult = addMcsMerchantUser(mcsMerchantDTO); + if (R.isOk(addUserResult)) { + McsLoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(addUserResult.getData()), McsLoginUserInfoVO.class); + loginUserInfoVO.setPlaintextPassword("88888888"); + stringRedisTemplate.delete(redisKey); + return R.ok(loginUserInfoVO); + } + return addUserResult; + } + } else { + return R.fail("验证码错误"); + } + } + + private String retrieveRandomCode(int length) { + Random r = new Random(); + StringBuilder rs = new StringBuilder(); + for (int i = 0; i < length; i++) { + rs.append(r.nextInt(10)); + } + return rs.toString(); + } } -- Gitblit v1.7.1