xiaoyong931011
2022-11-21 5f51a29343d6021e5d2745163c07afe1a67d35cc
20221117
9 files modified
4 files added
373 ■■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java 28 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java 44 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/dto/ApiMessageListDto.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/entity/DappMessageEntity.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java 38 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/vo/ApiMessageListVo.java 24 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappMemberDao.xml 20 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/message-list.html 27 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/send-Back-Message.html 90 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/show-message-list.html 51 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
@@ -234,4 +234,14 @@
    public FebsResponse addMessage(@RequestBody AddMessageDto addMessageDto) {
        return dappMemberService.addMessage(addMessageDto);
    }
    @ApiOperation(value ="IGT客服消息-列表分页", notes = "客服消息-列表分页")
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "success", response = ApiMessageListVo.class)
    })
    @PostMapping(value = "/messageList")
    public FebsResponse messageList(@RequestBody ApiMessageListDto apiMessageListDto) {
        Map<String, Object> data = getDataTable(dappMemberService.getMessageListInPage(apiMessageListDto));
        return new FebsResponse().success().data(data);
    }
}
src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
@@ -294,4 +294,32 @@
        Map<String, Object> data = getDataTable(dappMemberService.getTeamInfo(dappMemberEntity,request));
        return new FebsResponse().success().data(data);
    }
    /**
     *客服消息---回复
     * @return
     */
    @PostMapping("sendBackMessage")
    @ControllerEndpoint(operation = "客服消息---回复", exceptionMessage = "操作失败")
    public FebsResponse sendBackMessage(@Valid DappMessageEntity dappMessageEntity) {
        return dappMemberService.sendBackMessage(dappMessageEntity);
    }
    /**
     * 客服消息-回复记录
     * @return
     */
    @GetMapping("showMessageList")
    public FebsResponse showMessageList(DappMessageEntity dappMessageEntity, QueryRequest request, Integer parentId) {
        if (parentId == null) {
            ViewController.showMessageInfoFlow = 0;
        }
        dappMessageEntity.setId(ViewController.showMessageInfoFlow);
        User currentUser = FebsUtil.getCurrentUser();
        if(ObjectUtil.isNotEmpty(currentUser.getDescription())){
            dappMessageEntity.setDescription(currentUser.getDescription());
        }
        Map<String, Object> data = getDataTable(dappMemberService.showMessageList(dappMessageEntity, request));
        return new FebsResponse().success().data(data);
    }
}
src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java
@@ -6,8 +6,10 @@
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.dapp.entity.AppVersion;
import cc.mrbird.febs.dapp.entity.DappMemberEntity;
import cc.mrbird.febs.dapp.entity.DappMessageEntity;
import cc.mrbird.febs.dapp.entity.IgtOnHookPlanOrder;
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
import cc.mrbird.febs.dapp.mapper.DappMessageDao;
import cc.mrbird.febs.dapp.service.DappMemberService;
import lombok.RequiredArgsConstructor;
import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -32,6 +34,7 @@
    private final DappMemberService dappMemberService;
    private final DappMemberDao dappMemberDao;
    private final DappMessageDao dappMessageDao;
    @GetMapping(value = "admin")
    @RequiresPermissions("admin:view")
@@ -229,6 +232,47 @@
    }
    /**
     * 客服消息-列表
     * @return
     */
    @GetMapping("sendBackMessage")
    @RequiresPermissions("user:sendBack")
    public String sendBackMessage() {
        return FebsUtil.view("dapp/send-Back-Message");
    }
    /**
     * 客服消息-回复
     * @param id
     * @param model
     * @return
     */
    @GetMapping("sendBackMessage/{id}")
    @RequiresPermissions("user:sendBack")
    public String sendBackMessage(@PathVariable long id, Model model) {
        DappMessageEntity data = dappMessageDao.selectById(id);
        model.addAttribute("dappMessage", data);
        return FebsUtil.view("dapp/send-Back-Message");
    }
    public static long showMessageInfoFlow;
    /**
     * 客服消息-记录
     * @param id
     * @param model
     * @return
     */
    @GetMapping("/showMessage/{id}")
    @RequiresPermissions("showMessage:update")
    public String amountFlow(@PathVariable long id, Model model) {
        showMessageInfoFlow = id;
        DappMessageEntity data = dappMessageDao.selectById(id);
        model.addAttribute("dappMessage", data);
        return FebsUtil.view("dapp/show-message-list");
    }
    /**
     * 每日资产总览-列表
     * @return
     */
src/main/java/cc/mrbird/febs/dapp/dto/ApiMessageListDto.java
New file
@@ -0,0 +1,18 @@
package cc.mrbird.febs.dapp.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "ApiMessageListDto", description = "客服消息列表")
public class ApiMessageListDto {
    @ApiModelProperty(value = "页码")
    private Integer pageNum = 1;
    @ApiModelProperty(value = "每页数量")
    private Integer pageSize = 10;
}
src/main/java/cc/mrbird/febs/dapp/entity/DappMessageEntity.java
@@ -13,6 +13,14 @@
    private String message;
    /**
     * 回复消息
     ALTER TABLE `dapp_message`
     DROP COLUMN `back_message`,
     ADD COLUMN `back_message`  varchar(1000) NULL COMMENT '回复消息' AFTER `update_time`;
     */
    private String backMessage;
    @TableField(exist = false)
    private String username;
src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
@@ -4,10 +4,7 @@
import cc.mrbird.febs.dapp.dto.ApiMyTeammateInfoDto;
import cc.mrbird.febs.dapp.dto.TeamListDto;
import cc.mrbird.febs.dapp.entity.*;
import cc.mrbird.febs.dapp.vo.AdminMemberCoinWithdrawVo;
import cc.mrbird.febs.dapp.vo.AdminTeamInfoVo;
import cc.mrbird.febs.dapp.vo.ApiMyTeammateInfoListVo;
import cc.mrbird.febs.dapp.vo.TeamListVo;
import cc.mrbird.febs.dapp.vo.*;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -81,4 +78,8 @@
    IPage<AdminMemberCoinWithdrawVo> getWithDrawListByDayInPage(Page<AdminMemberCoinWithdrawVo> page,  @Param("record")MemberCoinWithdrawEntity memberCoinWithdrawEntity);
    IPage<AdminTeamInfoVo> findTeamInfoListInPage(Page<AdminTeamInfoVo> page, @Param("record")DappMemberEntity dappMemberEntity);
    IPage<DappMessageEntity> showMessageListInPage(Page<DappMessageEntity> page, @Param("record")DappMessageEntity dappMessageEntity);
    IPage<ApiMessageListVo> getMessageListInPage(Page<ApiMessageListVo> page, @Param("record")DappMessageEntity dappMessageEntity);
}
src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
@@ -114,4 +114,10 @@
    IPage<AdminMemberCoinWithdrawVo> getOutFlowListByDay(MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request);
    IPage<AdminTeamInfoVo> getTeamInfo(DappMemberEntity dappMemberEntity, QueryRequest request);
    FebsResponse sendBackMessage(DappMessageEntity dappMessageEntity);
    IPage<DappMessageEntity> showMessageList(DappMessageEntity dappMessageEntity, QueryRequest request);
    IPage<ApiMessageListVo> getMessageListInPage(ApiMessageListDto apiMessageListDto);
}
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -1073,7 +1073,7 @@
            dappAccountMoneyChangeDao.insert(addFlow);
            dappAccountMoneyChangeDao.deleteById(dappAccountMoneyChangeEntity.getId());
            return new FebsResponse().fail().message("操作成功");
            return new FebsResponse().success().message("操作成功");
        }else{
            return new FebsResponse().fail().message("只允许回退【盈利分成】和【流水佣金】");
        }
@@ -1150,6 +1150,42 @@
        return adminTeamInfoVoIPage;
    }
    @Override
    public FebsResponse sendBackMessage(DappMessageEntity dappMessageEntity) {
        if(ObjectUtil.isEmpty(dappMessageEntity.getBackMessage())){
            return new FebsResponse().fail().message("回复不能为空。");
        }
        Long id = dappMessageEntity.getId();
        DappMessageEntity dappMessage = dappMessageDao.selectById(id);
        DappMessageEntity dappMessageEntityBack = new DappMessageEntity();
        dappMessageEntityBack.setMemberId(dappMessage.getMemberId());
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("客服回复:");
        stringBuffer.append(dappMessageEntity.getBackMessage());
        dappMessageEntityBack.setBackMessage(stringBuffer.toString());
        dappMessageDao.insert(dappMessageEntityBack);
        return new FebsResponse().success().message("操作成功");
    }
    @Override
    public IPage<DappMessageEntity> showMessageList(DappMessageEntity dappMessageEntity, QueryRequest request) {
        dappMessageEntity = dappMessageDao.selectById(dappMessageEntity.getId());
        Page<DappMessageEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<DappMessageEntity> dappMessageEntitys = dappMemberDao.showMessageListInPage(page, dappMessageEntity);
        return dappMessageEntitys;
    }
    @Override
    public IPage<ApiMessageListVo> getMessageListInPage(ApiMessageListDto apiMessageListDto) {
        Page<ApiMessageListVo> page = new Page<>(apiMessageListDto.getPageNum(), apiMessageListDto.getPageSize());
        DappMemberEntity member = LoginUserUtil.getAppUser();
        DappMessageEntity dappMessageEntity = new DappMessageEntity();
        dappMessageEntity.setMemberId(member.getId());
        IPage<ApiMessageListVo> records = dappMemberDao.getMessageListInPage(page, dappMessageEntity);
        return records;
    }
    public String generateAsaToken(String token) {
        RSA rsa = new RSA(null, AppContants.PUBLIC_KEY);
        return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey);
src/main/java/cc/mrbird/febs/dapp/vo/ApiMessageListVo.java
New file
@@ -0,0 +1,24 @@
package cc.mrbird.febs.dapp.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel(value = "ApiMessageListVo", description = "客服消息记录")
public class ApiMessageListVo {
    @ApiModelProperty(value = "客户消息")
    private String message;
    @ApiModelProperty(value = "回复消息")
    private String backMessage;
    @ApiModelProperty(value = "时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date createTime;
}
src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -290,6 +290,7 @@
        from dapp_message a
        left join dapp_member b on b.id = a.member_id
        <where>
            a.back_message is null
            <if test="record.username !='' and record.username != null">
                and b.username = #{record.username}
            </if>
@@ -335,4 +336,23 @@
        (a.id in (select id from dapp_member where FIND_IN_SET(#{record.inviteId}, referer_ids)))
        order  by a.create_time desc
    </select>
    <select id="showMessageListInPage" resultType="cc.mrbird.febs.dapp.entity.DappMessageEntity">
        select
        a.*,b.username username
        from dapp_message a
        left join dapp_member b on b.id = a.member_id
        where a.member_id = #{record.memberId}
        order by create_time desc
    </select>
    <select id="getMessageListInPage" resultType="cc.mrbird.febs.dapp.vo.ApiMessageListVo">
        select
            a.message message,
            a.back_message backMessage,
            a.create_time createTime
        from dapp_message a
        where a.member_id = #{record.memberId}
        order by a.create_time desc
    </select>
</mapper>
src/main/resources/templates/febs/views/dapp/message-list.html
@@ -58,6 +58,23 @@
        table.on('tool(memberMessageTable)', function (obj) {
            var data = obj.data,
                layEvent = obj.event;
            if (layEvent === 'sendBackMessage') {
                febs.modal.open('回复', 'dappView/sendBackMessage/' + data.id, {
                    btn: ['确认', '取消'],
                    yes: function (index, layero) {
                        $('#sendBackMessage-update').find('#submit').trigger('click');
                    },
                    btn2: function () {
                        layer.closeAll();
                    }
                });
            }
            if (layEvent === 'showMessage') {
                febs.modal.open( '消息记录', 'dappView/showMessage/' + data.id, {
                    maxmin: true,
                });
            }
        });
        table.on('sort(memberMessageTable)', function (obj) {
@@ -96,7 +113,15 @@
                            }
                        }, minWidth: 150, align: 'center'},
                    {field: 'message', title: '内容', minWidth: 130},
                    {field: 'createTime', title: '创建时间', minWidth: 180}
                    {field: 'createTime', title: '创建时间', minWidth: 180},
                    {title: '回复',
                        templet: function (d) {
                            return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="sendBackMessage" shiro:hasPermission="user:sendBack">回复</button>'
                        },minWidth: 100,align:'center'},
                    {title: '查看记录',
                        templet: function (d) {
                            return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="showMessage" shiro:hasPermission="user:showMessage">查看记录</button>'
                        },minWidth: 100,align:'center'},
                ]]
            });
        }
src/main/resources/templates/febs/views/dapp/send-Back-Message.html
New file
@@ -0,0 +1,90 @@
<style>
    #sendBackMessage-update {
        padding: 20px 25px 25px 0;
    }
    #sendBackMessage-update .layui-treeSelect .ztree li a, .ztree li span {
        margin: 0 0 2px 3px !important;
    }
    #sendBackMessage-update #data-permission-tree-block {
        border: 1px solid #eee;
        border-radius: 2px;
        padding: 3px 0;
    }
    #sendBackMessage-update .layui-treeSelect .ztree li span.button.switch {
        top: 1px;
        left: 3px;
    }
    #sendBackMessage-update img{
        max-width:100px
    }
</style>
<div class="layui-fluid" id="sendBackMessage-update">
    <form class="layui-form" action="" lay-filter="sendBackMessage-update-form">
        <div class="layui-form-item febs-hide">
            <label class="layui-form-label febs-form-item-require">id:</label>
            <div class="layui-input-block">
                <input type="text" name="id" data-th-value="${dappMessage.id}">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label ">消息:</label>
            <div class="layui-input-block">
                <input type="text" name="message" data-th-id="${dappMessage.message}"class="layui-input" readonly/>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label ">回复内容:</label>
            <div class="layui-input-block">
                <input type="text" name="backMessage" data-th-id="${dappMessage.backMessage}" class="layui-input"/>
            </div>
        </div>
        <div class="layui-form-item febs-hide">
            <button class="layui-btn" lay-submit="" lay-filter="sendBackMessage-update-form-submit" id="submit"></button>
        </div>
    </form>
</div>
<script data-th-inline="javascript">
    layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree', 'laydate'], function () {
        var $ = layui.$,
            febs = layui.febs,
            layer = layui.layer,
            formSelects = layui.formSelects,
            treeSelect = layui.treeSelect,
            form = layui.form,
            laydate = layui.laydate,
            eleTree = layui.eleTree,
            dappMessage = [[${dappMessage}]],
            $view = $('#sendBackMessage-update'),
            validate = layui.validate;
        form.render();
        laydate.render({
            elem: '#febs-form-group-date'
        });
        formSelects.render();
        initUserValue();
        function initUserValue() {
            form.val("sendBackMessage-update-form", {
                "backMessage": dappMessage.backMessage,
                "message": dappMessage.message,
                "id": dappMessage.id
            });
        }
        form.on('submit(sendBackMessage-update-form-submit)', function (data) {
            febs.post(ctx + 'member/sendBackMessage', data.field, function () {
                layer.closeAll();
                febs.alert.success('操作成功');
                $('#febs-member').find('#reset').click();
            });
            return false;
        });
    });
</script>
src/main/resources/templates/febs/views/dapp/show-message-list.html
New file
@@ -0,0 +1,51 @@
<div className="layui-fluid layui-anim febs-anim" id="febs-message-child" lay-title="聊天记录">
    <div className="layui-row febs-container">
        <div className="layui-col-md12">
            <div className="layui-card">
                <div className="layui-card-body febs-table-full">
                    <table lay-filter="messageTableChild" lay-data="{id: 'messageTableChild'}"></table>
                </div>
            </div>
        </div>
    </div>
</div>
<script data-th-inline="none" type="text/javascript">
    layui.use(['jquery', 'form', 'table', 'febs'], function () {
        var $ = layui.jquery,
            febs = layui.febs,
            form = layui.form,
            table = layui.table,
            $view = $('#febs-message-child'),
            tableIns;
        form.render();
        initTable();
        function initTable() {
            tableIns = febs.table.init({
                elem: $view.find('table'),
                id: 'messageTableChild',
                url: ctx + 'member/showMessageList?parentId=1',
                cols: [[
                    {field: 'username', title: '用户名',
                        templet: function (d) {
                            if (d.backMessage != null) {
                                return '<span>客服</span>'
                            }else{
                                if(d.username === null){
                                    return '<span>游客</span>'
                                }else{
                                    return d.username
                                }
                            }
                        }, minWidth: 150, align: 'center'},
                    {field: 'message', title: '内容', minWidth: 130},
                    {field: 'backMessage', title: '回复', minWidth: 130},
                    {field: 'createTime', title: '创建时间', minWidth: 180},
                ]]
            });
        }
    })
</script>