张天森
2022-07-19 a3b6ac86de21d83dcda6e523b28895dc13468d8c
springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java
@@ -13,9 +13,12 @@
import javax.annotation.Resource;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@@ -41,6 +44,7 @@
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -3445,28 +3449,35 @@
            for (UserProportion userProportion : userProportions) {
                if (org.apache.commons.lang3.ObjectUtils.isNotEmpty(userProportion)){
                    UserRateAnalysisVO vo=new UserRateAnalysisVO();
                    vo.setName(typeToName(type,userProportion ));
                    if (monthRange){
                        if (userProportion.getCommunityId().equals("11")){
                            continue;
                        }
                        //获取本月的用户总数作为计算占比的用户总数
                        IndexDataKanbanVO data = userDao.dataKanBanStreet(streetId, areaCode, date);
                        vo.setRate(getRate(data.getAllUser(),userProportion.getUser()));
                        //IndexDataKanbanVO data = userDao.dataKanBanStreet(streetId, areaCode, date);
                        Integer monthUsers = userDao.getMonthUsers(streetId, areaCode, date);
                        vo.setRate(getRate(monthUsers,userProportion.getUser()));
                    }else{
                        vo.setRate(getRate(analysisVO.getAllUser(),userProportion.getUser()));
                    }
                    vo.setName(typeToName(type,userProportion ));
                    vo.setCount(userProportion.getUser());
                    userRateAnalysisVOList.add(vo);
                }
            }
        }
        //计算其他用户占比
        final Boolean flag=(type.equals(ALLSTREET) || type.equals(ALLCOMMUNITY) || type.equals(BYSTREET) || type.equals(BYAREA));
        if (flag){
            UserRateAnalysisVO vo=new UserRateAnalysisVO();
            vo.setName(OTHERUSER);
            vo.setCount(analysisVO.getAllUser()-countUser(userRateAnalysisVOList));
            vo.setRate(getRate(analysisVO.getAllUser(), vo.getCount()));
            userRateAnalysisVOList.add(vo);
        if (ObjectUtils.isEmpty(range)){
            //查看累计数据时才计算其他用户的比例 || type.equals(BYSTREET) || type.equals(BYAREA))
            final Boolean flag=(type.equals(ALLSTREET) || type.equals(ALLCOMMUNITY));
            if (flag){
                UserRateAnalysisVO vo=new UserRateAnalysisVO();
                vo.setName(OTHERUSER);
                vo.setCount(analysisVO.getAllUser()-countUser(userRateAnalysisVOList));
                vo.setRate(getRate(analysisVO.getAllUser(), vo.getCount()));
                userRateAnalysisVOList.add(vo);
            }
        }
        //计算其他用户占比
        UserRateVO userRate=new UserRateVO();
        userRate.setUserList(userRateAnalysisVOList);
        return R.ok(userRate);
@@ -3496,14 +3507,44 @@
        List<RealUser> realUsers = userDao.realUserCount(type, date, streetId, areaCode);
        List<RealUserAnalysisVO> realUserList=new ArrayList<>();
        realUserVO.setRealUserCount(getStreetRealUser(realUsers));
        realUserVO.setRealUserRate(NumberUtil.div(realUserVO.getRealUserCount(), analysisVO.getAllUser()).doubleValue());
        Integer rate = getRate(analysisVO.getAllUser(), realUserVO.getRealUserCount());
        if (null == rate){
            realUserVO.setRealUserRate(0.0);
        }else{
            realUserVO.setRealUserRate(rate.doubleValue());
        }
        for (RealUser realUser : realUsers) {
            if (!(type.equals(ALLCOUNTY))){
                if (org.apache.commons.lang3.ObjectUtils.isNotEmpty(realUser)){
                    if (realUser.getCommunityId().equals("11")){
                        continue;
                    }
                }
            }
            RealUserAnalysisVO vo=new RealUserAnalysisVO();
            vo.setCount(realUser.getCount());
            vo.setName(typeToNameRealUser(type, realUser));
            realUserList.add(vo);
        }
        realUserVO.setRealUserList(realUserList);
        //使用索引迭代避免从列表移除数据后出现空指针异常
        if (type.equals(BYSTREET) || type.equals(ALLCOMMUNITY)){
            for (int i = 0; i < realUserList.size() ; i++) {
                RealUserAnalysisVO realUserAnalysisVO = realUserList.get(i);
                if (org.apache.commons.lang3.ObjectUtils.isNotEmpty(realUserAnalysisVO)){
                    if (StringUtils.isNotEmpty(realUserAnalysisVO.getName())){
                        if (realUserAnalysisVO.getName().equals("请选择社区")){
                            realUserList.remove(i);
                        }
                    }
                }
            }
        }else {
            //只保留十条
            if (realUserList.size()>=11){
                realUserList.remove(10);
            }
        }
        return R.ok(realUserVO);
    }
@@ -3532,6 +3573,115 @@
    }
    @Override
    public R uuPush(String washPhone,String phone,String washName,Integer orderStatus) {
        if(StringUtils.isNotEmpty(phone)){
            SysUserDO sysUserDO=userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone,phone).orderByDesc(SysUserDO::getCreateAt).last("limit 1"));
            if(sysUserDO!=null&&StringUtils.isNotEmpty(sysUserDO.getOpenid())){
                String status="";
                String accessToken="";
                WxXCXTempSend util = new WxXCXTempSend();
                try {
                    accessToken = util.getAccessToken();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                switch (orderStatus){
                    case 3 : status="已分配车美";
                        WxUtil.sendUuWash3(sysUserDO.getOpenid(),accessToken,status,washName,washPhone,phone,"sU18zbyzxFldHAdOREaQCR5uq_uMvCKTmGtklO1xw-w");
                    break;
                    case 4 : status="车美已开始服务";
                        WxUtil.sendUuWash4(sysUserDO.getOpenid(),accessToken,status,washName,washPhone,phone,"Eft5ksvsnOQANy2uNOGY43CC3pb33eDGA_lgCEoxuiw");
                    break;
                    case 6 : status="订单确认完成";
                        WxUtil.sendUuWash6(sysUserDO.getOpenid(),accessToken,status,washName,washPhone,phone,"k1aV97H3pDNNcNcDTeZBD9jQemNDADnRE801HhTXweI");
                    break;
                    case 9 : status="订单已取消";
                        WxUtil.sendUuWash(sysUserDO.getOpenid(),accessToken,status,washName,washPhone,phone,"9_2FhQPDxZoUqmAuIZ1L1zjjYXokdNvu7A0gzKfvruI");
                    break;
                }
            }
        }
        return R.ok();
    }
    @Override
    public R getCommunityList(String name,Long id) {
        //区级账号名
        String[] streetList={"bingcaogangjiedao","donghuajiedao","nongnongpingjiedao","dadukoujiedaojiedao","guazipingjiedao",
        "yinjiangzhen","qingxiangpingjiedao","yuquanjiedao","hemenkoujiedao","dabaodingjiedao","taojiadujiedao","gelipinzhen","dahezhonglujiedao",
        "jingjiangzhen","renhezhen","pingdizhen","datianzhen","tongdezhen","futianzhen","qianjinzhen","panlianzhen","binguzhen","baimazhen",
        "salianzhen","puweizhen","deshizhen","wanqiuyizuxiang","caochangzhen","xinshanlisuzuxiang","tongzilinzhen","yongxingzhen","yumenzhen",
        "honggezhen","hongguoyizuxiang"};
        List<Integer> ids = userDao.selectIdsByAccount(streetList);
        //村或社区账号
        Integer type=isVilliage(name);
        //是否为市级账号
        Boolean cityAccount = isCityAccount(name);
        if (cityAccount){
            List<Integer> areaList=areaCodeList();
            List<AreaVOS> areaVOList=new ArrayList<>();
            for (Integer code : areaList) {
                AreaVOS areaVO=new AreaVOS();
                areaVO.setId(code);
                areaVO.setName(areaCodeToName(code.longValue()));
                List<StreetVOS> streetVOS = userDao.selectStreetByAreaCode(code);
                Iterator<StreetVOS> iterator = streetVOS.listIterator();
                while (iterator.hasNext()){
                    StreetVOS vo = iterator.next();
                    List<CommunityVO> communityVOS = userDao.selectCommunityByStreetId(vo.getId(), type);
                    vo.setChildList(communityVOS);
                    if (type!=3){
                        if (communityVOS==null || communityVOS.size()==0){
                            iterator.remove();
                        }
                    }
                }
                areaVO.setChildList(streetVOS);
                areaVOList.add(areaVO);
            }
            return R.ok(areaVOList);
        }else{
            Boolean areaAccount = isAreaAccount(name);
            if (areaAccount){
                Integer areaCode = accountToCode(name);
                List<Integer> areaList=new ArrayList<>();
                areaList.add(areaCode);
                List<AreaVOS> areaVOList=new ArrayList<>();
                for (Integer code : areaList) {
                    AreaVOS areaVO=new AreaVOS();
                    areaVO.setId(code);
                    areaVO.setName(areaCodeToName(code.longValue()));
                    List<StreetVOS> streetVOS = userDao.selectStreetByAreaCode(code);
                    Iterator<StreetVOS> iterator = streetVOS.listIterator();
                    while (iterator.hasNext()){
                        StreetVOS vo = iterator.next();
                        List<CommunityVO> communityVOS = userDao.selectCommunityByStreetId(vo.getId(), type);
                        vo.setChildList(communityVOS);
                    }
                    areaVO.setChildList(streetVOS);
                    areaVOList.add(areaVO);
                }
                return R.ok(areaVOList);
            }else{
                //非区县账号,只看街道下属社区
                if (ArrayUtil.contains(streetList, name)){
                    List<StreetVOS> list=new ArrayList<>();
                    //只看当前街道下属社区
                    StreetVOS streetVOS = userDao.selectStreetByName(name);
                    List<CommunityVO> communityVOS = userDao.selectCommunityByStreetName(name);
                    if (org.apache.commons.lang3.ObjectUtils.isNotEmpty(streetVOS)) {
                        streetVOS.setChildList(communityVOS);
                    }
                    list.add(streetVOS);
                    return R.ok(list);
                }
            }
        }
        return R.ok(null);
    }
    @Override
    public R getAreaAndStreet() {
        List<Integer> areaCodeList=areaCodeList();
        List<AreaVO> areaVOList=new ArrayList<>();
@@ -3539,7 +3689,7 @@
            AreaVO vo=new AreaVO();
            vo.setId(code);
            vo.setName(areaCodeToName(code.longValue()));
            vo.setStreetList(userDao.selectStreetByAreaCode(code));
            vo.setStreetList(userDao.selectStreetsByAreaCode(code));
            areaVOList.add(vo);
        }
        return R.ok(areaVOList);
@@ -3660,6 +3810,7 @@
                break;
            case "510402":
                name="东区";
                break;
            case "510411":
                name="仁和区";
                break;
@@ -3669,6 +3820,9 @@
            case "510422":
                name="盐边县";
                break;
            case "510424":
                name="钒钛新区";
                break;
        }
        return name;
    }
@@ -3677,6 +3831,7 @@
     *根据type选择要设置的名称
     * */
    private String typeToName(Integer type,UserProportion proportion){
        log.info("当前code"+proportion.getAreaCode());
        String name="";
        if (type.equals(ALLCOUNTY)){
            name=areaCodeToName(proportion.getAreaCode());
@@ -3708,11 +3863,12 @@
     * */
    private List<Integer> areaCodeList(){
        List<Integer> list=new ArrayList<>();
        list.add(510423);
        list.add(510402);
        list.add(510423);
        list.add(510411);
        list.add(510421);
        list.add(510422);
        list.add(510424);
        return list;
    }
@@ -3735,6 +3891,73 @@
        return null;
    }
    /**
     * 是否需要区分村落/社区
     * */
    private Integer isVilliage(String name){
        if ("fangyipingtai".equals(name)){
            return 3;
        }else if ("pandashujuzhongxin".equals(name)){
            return 1;
        }else if ("pannongyenongcunju".equals(name)){
            return 2;
        }
        return 3;
    }
    /**
     * 是否为市级账号
     * */
    private Boolean isCityAccount(String name){
        if(("fangyipingtai").equals(name) || ("pandashujuzhongxin").equals(name) || ("pannongyenongcunju").equals(name)){
            return true;
        }
        return false;
    }
    /**
     * 是否为区级账号
     * */
    private Boolean isAreaAccount(String name){
        Boolean flag=false;
        switch (name){
            case "dongqu":
            case "xiqu":
            case "renhequ":
            case "miyixian":
            case "yanbianxian":
                flag=true;
                break;
        }
        return flag;
    }
    /**
     * account转区areaCode
     * */
    private  Integer accountToCode(String code){
        String name="100000";
        switch (code){
            case "xiqu" :
                name= "510423";
                break;
            case "dongqu":
                name="510402";
                break;
            case "renhequ":
                name="510411";
                break;
            case "miyixian":
                name="510421";
                break;
            case "yanbianxian":
                name="510422";
                break;
            case "fantaixinqu":
                name="510424";
                break;
        }
        return Integer.parseInt(name);
    }
}