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