xiaoyong931011
2023-10-25 c08844c08e64ad79f25a7e68bbc3f41fea3cded8
版本管理
10 files modified
219 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/mapper/ChatUserMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AdminChatAmountFlowVo.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AdminChatCahrgeVo.java 2 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/ChatUserMapper.xml 25 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/chat/chatAmountFlow.html 12 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/chat/chatChargeList.html 10 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/chat/chatWithDrawList.html 8 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/chat/userList.html 19 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/chat/userPerkList.html 36 ●●●●● patch | view | raw | blame | history
src/test/java/cc/mrbird/febs/PayTest.java 101 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/ChatUserMapper.java
@@ -76,4 +76,6 @@
    List<AdminChatRedBagVo> selectByOverDueStatueAndTime(@Param("overdueState")Integer overdueState, @Param("overdueTime")Date overdueTime);
    void updateOverdueStatusById(@Param("overdueState")Integer overdueState, @Param("id")Long id);
    void updatePortraitById(@Param("userId")Long userId, @Param("portrait")String portrait);
}
src/main/java/cc/mrbird/febs/mall/vo/AdminChatAmountFlowVo.java
@@ -16,6 +16,10 @@
     */
    private BigDecimal amount;
    /**
     * 电话号码
     */
    private String phone;
    /**
     * 昵称
     */
    private String nickName;
src/main/java/cc/mrbird/febs/mall/vo/AdminChatCahrgeVo.java
@@ -12,6 +12,8 @@
     */
    private String nickName;
    private String phone;
    private BigDecimal amount;
    private BigDecimal lastAmount;
src/main/resources/mapper/modules/ChatUserMapper.xml
@@ -20,6 +20,9 @@
        left join chat_wallet b on b.user_id = a.user_id and type = 'USDT'
        <where>
            <if test="record != null">
                <if test="record.phone != null and record.phone != ''">
                    and a.phone like CONCAT('%', CONCAT(#{record.phone}, '%'))
                </if>
                <if test="record.nickName != null and record.nickName != ''">
                    and a.nick_name like CONCAT('%', CONCAT(#{record.nickName}, '%'))
                </if>
@@ -50,6 +53,9 @@
        left join chat_wallet b on b.user_id = a.user_id and type = 'USDT'
        <where>
            <if test="record != null">
                <if test="record.phone != null and record.phone != ''">
                    and a.phone like CONCAT('%', CONCAT(#{record.phone}, '%'))
                </if>
                <if test="record.nickName != null and record.nickName != ''">
                    and a.nick_name like CONCAT('%', CONCAT(#{record.nickName}, '%'))
                </if>
@@ -102,6 +108,7 @@
        a.type type,
        a.amount amount,
        b.nick_name nickName,
        b.phone phone,
        date_format(a.create_time, '%Y-%m-%d %H:%m:%s') createTime,
        a.ava_amount avaAmount,
        a.state state,
@@ -110,6 +117,9 @@
        inner join chat_user b on b.user_id = a.user_id
        <where>
            <if test="record != null">
                <if test="record.phone != null and record.phone != ''">
                    and b.phone like CONCAT('%', CONCAT(#{record.phone}, '%'))
                </if>
                <if test="record.nickName != null and record.nickName != ''">
                    and b.nick_name = #{record.nickName}
                </if>
@@ -125,6 +135,7 @@
        select
        date_format(a.created_time, '%Y-%m-%d %H:%m:%s') createdTime,
        b.nick_name nickName,
        b.phone phone,
        a.amount amount,
        a.last_amount lastAmount,
        a.status status,
@@ -136,6 +147,9 @@
        left join chat_user b on b.user_id = a.user_id
        <where>
            <if test="record != null">
                <if test="record.phone != null and record.phone != ''">
                    and b.phone like CONCAT('%', CONCAT(#{record.phone}, '%'))
                </if>
                <if test="record.nickName != null and record.nickName != ''">
                    and b.nick_name like CONCAT('%', CONCAT(#{record.nickName}, '%'))
                </if>
@@ -151,6 +165,7 @@
        select
        date_format(a.created_time, '%Y-%m-%d %H:%m:%s') createdTime,
        b.nick_name nickName,
        b.phone phone,
        a.id id,
        a.amount amount,
        a.type type,
@@ -160,6 +175,9 @@
        left join chat_user b on b.user_id = a.user_id
        <where>
            <if test="record != null">
                <if test="record.phone != null and record.phone != ''">
                    and b.phone like CONCAT('%', CONCAT(#{record.phone}, '%'))
                </if>
                <if test="record.nickName != null and record.nickName != ''">
                    and b.nick_name like CONCAT('%', CONCAT(#{record.nickName}, '%'))
                </if>
@@ -375,5 +393,12 @@
        where id = #{id}
    </update>
    <update id="updatePortraitById">
        update chat_user
        set
            portrait = #{portrait}
        where user_id = #{userId}
    </update>
</mapper>
src/main/resources/templates/febs/views/modules/chat/chatAmountFlow.html
@@ -8,6 +8,12 @@
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">电话号码:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="电话号码" name="phone" autocomplete="off" class="layui-input">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">昵称:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="昵称" name="nickName" autocomplete="off" class="layui-input">
@@ -31,6 +37,7 @@
                                                <option value="10">中雷扣除</option>
                                                <option value="11">发送红包</option>
                                                <option value="12">领取红包</option>
                                                <option value="13">红包退回</option>
                                            </select>
                                        </div>
                                    </div>
@@ -76,6 +83,7 @@
    10: {title: '中雷扣除', color: 'blue'},
    11: {title: '发送红包', color: 'blue'},
    12: {title: '领取红包', color: 'blue'},
    13: {title: '红包退回', color: 'blue'},
    }[d.type];
    }}
    <span class="layui-badge febs-bg-{{type.color}}">{{ type.title }}</span>
@@ -121,6 +129,7 @@
        // 获取查询参数
        function getQueryParams() {
            return {
                phone: $searchForm.find('input[name="phone"]').val().trim(),
                nickName: $searchForm.find('input[name="nickName"]').val().trim(),
                type: $searchForm.find("select[name='type']").val()
            };
@@ -135,7 +144,8 @@
                // defaultToolbar:[],
                totalRow: true ,// 开启合计行
                cols: [[
                    {field: 'nickName', title: '昵称', minWidth: 150,align:'center', totalRowText: '合计:',align:'center'},
                    {field: 'phone', title: '电话号码', minWidth: 150,align:'center', totalRowText: '合计:'},
                    {field: 'nickName', title: '昵称', minWidth: 150,align:'center'},
                    {title: '操作类型', minWidth: 150,templet: '#flow-type',align:'center'},
                    {field: 'amount', title: '金额', minWidth: 100,align:'center',align:'center',totalRow: '{{= parseInt(d.amount) }}'},
                    {field: 'state', title: '状态',
src/main/resources/templates/febs/views/modules/chat/chatChargeList.html
@@ -8,6 +8,12 @@
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">电话号码:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="电话号码" name="phone" autocomplete="off" class="layui-input">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">昵称:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="昵称" name="nickName" autocomplete="off" class="layui-input">
@@ -97,6 +103,7 @@
        // 获取查询参数
        function getQueryParams() {
            return {
                phone: $searchForm.find('input[name="phone"]').val().trim(),
                nickName: $searchForm.find('input[name="nickName"]').val().trim(),
                address: $searchForm.find('input[name="address"]').val().trim()
            };
@@ -111,7 +118,8 @@
                // defaultToolbar:[],
                totalRow: true ,// 开启合计行
                cols: [[
                    {field: 'nickName', title: '昵称', minWidth: 150,align:'center', totalRowText: '合计:',align:'center'},
                    {field: 'phone', title: '电话号码', minWidth: 150,align:'center', totalRowText: '合计:'},
                    {field: 'nickName', title: '昵称', minWidth: 150,align:'center'},
                    {field: 'amount', title: '金额', minWidth: 100,align:'center',align:'center',totalRow: '{{= parseInt(d.amount) }}'},
                    {field: 'lastAmount', title: '充值前金额', minWidth: 100,align:'center',align:'center',totalRow: '{{= parseInt(d.amount) }}'},
                    // {field: 'avaAmount', title: '操作前余额', minWidth: 150,align:'center',align:'center',totalRow: '{{= parseInt(d.avaAmount) }}'},
src/main/resources/templates/febs/views/modules/chat/chatWithDrawList.html
@@ -8,6 +8,12 @@
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">电话号码:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="电话号码" name="phone" autocomplete="off" class="layui-input">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">昵称:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="昵称" name="nickName" autocomplete="off" class="layui-input">
@@ -135,6 +141,7 @@
        // 获取查询参数
        function getQueryParams() {
            return {
                phone: $searchForm.find('input[name="phone"]').val().trim(),
                nickName: $searchForm.find('input[name="nickName"]').val().trim(),
                address: $searchForm.find('input[name="address"]').val().trim(),
                state: $searchForm.find("select[name='state']").val(),
@@ -152,6 +159,7 @@
                totalRow: true ,// 开启合计行
                cols: [[
                    {field: 'id', title: '', minWidth: 150,align:'center', totalRowText: '合计:',align:'center'},
                    {field: 'phone', title: '电话号码', minWidth: 150,align:'center'},
                    {field: 'nickName', title: '昵称', minWidth: 150,align:'center'},
                    {field: 'amount', title: '金额', minWidth: 100,align:'center',align:'center',totalRow: '{{= parseInt(d.amount) }}'},
                    {field: 'type', title: '类型',
src/main/resources/templates/febs/views/modules/chat/userList.html
@@ -8,6 +8,12 @@
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">电话号码:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="电话号码" name="phone" autocomplete="off" class="layui-input">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">昵称:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="昵称" name="nickName" autocomplete="off" class="layui-input">
@@ -133,6 +139,7 @@
        // 获取查询参数
        function getQueryParams() {
            return {
                phone: $searchForm.find('input[name="phone"]').val().trim(),
                nickName: $searchForm.find('input[name="nickName"]').val().trim(),
                inviteId: $searchForm.find('input[name="inviteId"]').val().trim(),
                status: $searchForm.find("select[name='status']").val()
@@ -149,12 +156,12 @@
                totalRow: true ,// 开启合计行
                cols: [[
                    {type: 'checkbox'},
                    {field: 'userId', title: '标识', minWidth: 150,align:'left'},
                    {field: 'nickName', title: '昵称', minWidth: 100,align:'left', totalRowText: '合计:',align:'center'},
                    {field: 'inviteId', title: '邀请码', minWidth: 100,align:'left',align:'center'},
                    {field: 'phone', title: '注册号码', minWidth: 150,align:'left',align:'center'},
                    {field: 'totalAmount', title: '账户总额', minWidth: 80,align:'left',totalRow: '{{= parseInt(d.totalAmount) }}',align:'center'},
                    {field: 'avaAmount', title: '账户余额', minWidth: 80,align:'left',totalRow: '{{= parseInt(d.avaAmount) }}',align:'center'},
                    {field: 'userId', title: '标识', minWidth: 40,align:'center', totalRowText: '合计:'},
                    {field: 'phone', title: '注册号码', minWidth: 150,align:'center'},
                    {field: 'nickName', title: '昵称', minWidth: 100},
                    {field: 'inviteId', title: '邀请码', minWidth: 100,align:'center'},
                    {field: 'totalAmount', title: '账户总额', minWidth: 80,totalRow: '{{= parseInt(d.totalAmount) }}',align:'center'},
                    {field: 'avaAmount', title: '账户余额', minWidth: 80,totalRow: '{{= parseInt(d.avaAmount) }}',align:'center'},
                    {field: 'status', title: '账号状态', templet: '#switchStatus', minWidth: 80,align:'center'},
                    {field: 'isRobot', title: '机器人', templet: '#switchIsRobot', minWidth: 80,align:'center'},
                    {field: 'modelType', title: '模式', templet: '#switchModelType', minWidth: 80,align:'center'},
src/main/resources/templates/febs/views/modules/chat/userPerkList.html
@@ -8,6 +8,12 @@
                            <div class="layui-col-md10">
                                <div class="layui-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">电话号码:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="电话号码" name="phone" autocomplete="off" class="layui-input">
                                        </div>
                                    </div>
                                    <div class="layui-inline">
                                        <label class="layui-form-label">昵称:</label>
                                        <div class="layui-input-inline">
                                            <input type="text" placeholder="昵称" name="nickName" autocomplete="off" class="layui-input">
@@ -55,24 +61,24 @@
    <a lay-event="edit" shiro:hasPermission="user:update"><i
            class="layui-icon febs-edit-area febs-blue">&#xe7a5;</i></a>
</script>
<script type="text/html" id="switchIsRobot">
    {{# if(d.isRobot === 1) { }}
    <input type="checkbox" value={{d.userId}} lay-text="是|否" checked lay-skin="switch" lay-filter="switchIsRobot">
    {{# } else { }}
    <input type="checkbox" value={{d.userId}} lay-text="是|否" lay-skin="switch" lay-filter="switchIsRobot">
    {{# } }}
</script>
<!--<script type="text/html" id="switchIsRobot">-->
<!--    {{# if(d.isRobot === 1) { }}-->
<!--    <input type="checkbox" value={{d.userId}} lay-text="是|否" checked lay-skin="switch" lay-filter="switchIsRobot">-->
<!--    {{# } else { }}-->
<!--    <input type="checkbox" value={{d.userId}} lay-text="是|否" lay-skin="switch" lay-filter="switchIsRobot">-->
<!--    {{# } }}-->
<!--</script>-->
<style>
    .layui-form-onswitch {
        background-color: #5FB878 !important;
    }
</style>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="registerMember">添加会员</button>
        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="balance">拨付余额</button>
    </div>
</script>
<!--<script type="text/html" id="toolbar">-->
<!--    <div class="layui-btn-container">-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="registerMember">添加会员</button>-->
<!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="balance">拨付余额</button>-->
<!--    </div>-->
<!--</script>-->
<!-- 表格操作栏 end -->
<script data-th-inline="none" type="text/javascript">
    // 引入组件并初始化
@@ -112,6 +118,7 @@
        // 获取查询参数
        function getQueryParams() {
            return {
                phone: $searchForm.find('input[name="phone"]').val().trim(),
                nickName: $searchForm.find('input[name="nickName"]').val().trim(),
                inviteId: $searchForm.find('input[name="inviteId"]').val().trim(),
                status: $searchForm.find("select[name='status']").val()
@@ -129,7 +136,8 @@
                cols: [[
                    {type: 'checkbox'},
                    {field: 'userId', title: '标识', minWidth: 150,align:'left'},
                    {field: 'nickName', title: '昵称', minWidth: 100,align:'left', totalRowText: '合计:',align:'center'},
                    {field: 'phone', title: '电话号码', minWidth: 100,align:'left', totalRowText: '合计:',align:'center'},
                    {field: 'nickName', title: '昵称', minWidth: 100,align:'left',},
                    {field: 'inviteId', title: '邀请码', minWidth: 100,align:'left',align:'center'},
                    {field: 'phone', title: '注册号码', minWidth: 150,align:'left',align:'center'},
                    {field: 'totalAmount', title: '账户总额', minWidth: 80,align:'left',totalRow: '{{= parseInt(d.totalAmount) }}',align:'center'},
src/test/java/cc/mrbird/febs/PayTest.java
@@ -1,5 +1,10 @@
package cc.mrbird.febs;
import cc.mrbird.febs.mall.entity.ChatUser;
import cc.mrbird.febs.mall.mapper.ChatGroupMapper;
import cc.mrbird.febs.mall.mapper.ChatUserMapper;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.domain.AlipayTradeAppPayModel;
@@ -9,6 +14,10 @@
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
import java.util.Random;
/**
 * @author wzy
 * @date 2021-09-27
@@ -17,17 +26,83 @@
@SpringBootTest
public class PayTest {
//    @Test
//    public void aliPay() throws AlipayApiException {
//        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
//        model.setBody("这是测试用");
//        model.setSubject("支付测试用的");
//        model.setOutTradeNo("2021092712215802974");
//        model.setTimeoutExpress("15m");
//        model.setTotalAmount("0.01");
//        model.setPassbackParams("callback params");
//        model.setProductCode("QUICK_MSECURITY_PAY");
//        AlipayTradeAppPayResponse resp = AliPayApi.appPayToResponse(model, "");
//        log.info("=====>>>{}", JSONObject.toJSONString(resp));
//    }
    @Resource
    private ChatUserMapper chatUserMapper;
    @Resource
    private ChatGroupMapper chatGroupMapper;
    /**
     * 修改机器人昵称和用户头像
     */
    @Test
    public void aliPay(){
        List<ChatUser> chatUsers = chatUserMapper.selectListByIsRobot(1);
        if(CollUtil.isNotEmpty(chatUsers)){
            for(ChatUser chatUser : chatUsers){
                chatUserMapper.updateNicknameById(chatUser.getUserId(),randomName(RandomUtil.randomInt(1, 5)));
                int avatarNum = RandomUtil.randomInt(1, 46);
                String portrait = "http://api.lehavip.com/image/avatar/avatar"+avatarNum+".jpg";
                chatUserMapper.updatePortraitById(chatUser.getUserId(),portrait);
            }
        }
    }
    public static String randomName(Integer len){
        len=len<2? 2:len;
        StringBuilder name = new StringBuilder();
        String na = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦" +
                "章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞袁柳鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝安常于傅" +
                "齐康伍余元顾孟黄穆萧尹姚邵湛汪祁毛禹狄米明计成戴宋茅庞熊纪舒屈项祝董梁杜" +
                "阮蓝闵席季贾路娄危江童颜郭梅林钟徐邱骆高夏蔡田樊胡";
        Random random=new Random();
        int nextInt = random.nextInt(na.length() - 1);
        name.append(na.charAt(nextInt));
//        String me = "承月施韵浦镜强辉伟晴世彦圆鉴凯运吉峰傲轩拂勋健净励柏福晋年常文悠颜建帆丰锦毅睿迪厉昌炎俊豫泉展冠飞雪传忠力平幽阳融材实刚理光浅商星奋照侠满厚宁广明勇潭雄壮鼎贵煊闻仕荣永易馨琢卡遥霄彬何均湛群东飘怀安城观翱石敬织豪杉朴保捷军" +
//                "笑柔秋嫣灵儿悠润怜听睿莉忆蓉醉桐海含怀卿娅明芸佑玫歆茵雨珊花如娇江幼薇凤沛柳霜晓黛絮沁媛洁冰奇佳兔芙菊慧裳蓝映夜可盈又瑾微婉迪婷琳真雪鸣影琴烟月杏妹娜倚辰舒柯芝任傲悦梦楠岚彩虞菱雅以竹艺蕾嫦孤丽林优迎琼" +
//                "骏宇玄璀紫子全超益莉信美奎琪豪浩槐文巧治瑜雯诗涵曦嵘天誉喜伟嘉欣卿钰勇寅天宸兵祥运昊泽仁淳轩子泳瑶源杰正驿豪财熙海辉辉天华峻龙嘉诚嘉运财喜伟天俊熙熙利君帝云海伟熙霞艳宗书文国熙林天录熙明俊敬贵艺心艾悦思甜帅梅莲婷伯沁苹苗龙尔" +
//                "仕墨驿森桥丹东墨满阳骏鹏毓昆金宇宇木金豪天洋宇捷治智浩泽搏朗桐喜伊萱彤正裕馨湘锦湘玉元坤子侦山水茂阳海乐晨杰高启夫玉舟凌璇雨扬晨亭艳昊洋晴雨雨晨雨辰骞娴颖晞朝晓小蕾雯悦月秋绮书彤诗韬羿程惠忻";
//
//        for (int i = 0; i < len-1; i++) {
//            int anInt = random.nextInt(me.length()-1);
//            name.append(me.charAt(anInt));
//        }
        char[] chars = {'张', '王', '李', '赵', '刘', '陈', '杨', '黄', '吴',
                '周', '徐', '孙', '马', '朱', '胡', '郭', '何', '高', '林',
                '罗', '郑', '梁', '谢', '宋', '唐', '许', '邓', '冯', '韩',
                '曹', '曾', '彭', '萧', '蔡', '潘', '田', '董', '袁', '于',
                '余', '叶', '蒋', '杜', '苏', '魏', '程', '吕', '丁', '沈',
                '任', '姚', '卢', '姜', '崔', '钟', '谭', '陆', '汪', '范',
                '金', '石', '廖', '贾', '夏', '韦', '付', '方', '白', '邹',
                '孟', '熊', '秦', '邱', '江', '尹', '薛', '闫', '段', '雷',
                '侯', '龙', '史', '陶', '黎', '贺', '顾', '毛', '郝', '龚',
                '邵', '万', '钱', '严', '覃', '武', '戴', '莫', '孔', '向',
                '汤', '安', '祝', '福', '柯', '柴', '翟', '宁', '房', '滕',
                '屈', '饶', '解', '牛', '艾', '尤', '丰', '阳', '时', '穆',
                '冉', '牟', '殷', '毕', '邬', '安', '常', '乐', '于', '时',
                '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾',
                '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛',
                '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计',
                '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒',
                '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席',
                '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜',
                '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷',
                '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安',
                '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍',
                '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧',
                '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米',
                '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅',
                '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜',
                '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄',
                '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐',
                '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '藏', '计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁', '杜', '阮', '蓝', '闵', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郁', '胥', '柳', '鲍', '史', '唐', '费', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常', '乐', '于', '时', '傅', '皮', '卫', '齐', '康', '伍', '余', '元',
                '卜', '顾', '孟', '平', '黄', '和', '穆', '萧', '尹'};
        for (int i = 0; i < len-1; i++) {
            int anInt = random.nextInt(chars.length);
            name.append(chars[anInt]);
        }
        return name.toString();
    }
}