Browse Source

客服会话,未联调

wangwl 3 months ago
parent
commit
695ae48011

+ 7 - 1
leromro-admin/src/main/java/com/leromro/web/controller/system/SysProfileController.java

@@ -1,6 +1,8 @@
 package com.leromro.web.controller.system;
 
 import java.util.Map;
+
+import org.dromara.x.file.storage.core.FileStorageService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -39,6 +41,8 @@ public class SysProfileController extends BaseController
     @Autowired
     private TokenService tokenService;
 
+    @Autowired
+    private FileStorageService fileStorageService;
     /**
      * 个人信息
      */
@@ -124,7 +128,9 @@ public class SysProfileController extends BaseController
         if (!file.isEmpty())
         {
             LoginUser loginUser = getLoginUser();
-            String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
+//            String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
+            String avatar = fileStorageService.of(file).upload().getUrl();
+
             if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
             {
                 AjaxResult ajax = AjaxResult.success();

+ 2 - 2
leromro-admin/src/main/resources/application.yml

@@ -170,9 +170,9 @@ wx:
     #商户证书,用于退款
     key-path: classpath:apiclient_cert.p12
     #支付回调通知地址。必填项 这里真是域名地址即可
-    notify-url: https://zybooks.tech/prod-api/core/users/orders/payNotify
+    notify-url: https://goldshulin.com/prod-api/core/users/orders/payNotify
     #退款回调通知地址
-    refundNotifyUrl: https://zybooks.tech/prod-api/core/users/orders/refundNotify
+    refundNotifyUrl: https://goldshulin.com/prod-api/core/users/orders/refundNotify
 
 aliyun:
   admpay:

+ 3 - 0
leromro-common/src/main/java/com/leromro/common/core/domain/entity/SysDept.java

@@ -59,11 +59,14 @@ public class SysDept extends BaseEntity
     private String delFlag;
 
     /** 父部门名称 */
+    @TableField(exist = false)
     private String parentName;
     
     /** 子部门 */
+    @TableField(exist = false)
     private List<SysDept> children = new ArrayList<SysDept>();
 
+    @TableField(exist = false)
     private List<Long> parentsIds;
 
     //区域类型 字典中获取 0:全国 1:省份 2:市 3:区 4:服务中心

+ 15 - 1
leromro-core/src/main/java/com/leromro/core/controller/ConversationRecordController.java

@@ -128,9 +128,23 @@ public class ConversationRecordController extends BaseController
             wrapper.eq(ConversationRecord::getVolunteerId, SecurityUtils.getUserId());
             wrapper.set(ConversationRecord::getVolunteerDelFlag, "2");
         } else {
-            return R.fail("目前未开通web端会话");
+            //客服删除,设置客服已删除
+            wrapper.eq(ConversationRecord::getVolunteerId, SecurityUtils.getUserId());
+            wrapper.set(ConversationRecord::getCustomerServiceDelFlag, "2");
         }
         conversationRecordService.update(wrapper);
         return R.ok();
     }
+
+    /**
+     * 帮助与客服,获取与客服会话记录和详细信息
+     */
+    @ApiOperation(value = "帮助与客服,获取与客服会话记录和详细信息", notes = "传入当前系统 1用户2志愿者3后台")
+    @PostMapping("/getHelpConversation")
+    public R<ConversationRecordVO> getHelpConversation(@Validated @RequestBody ConversationMsgDTO dto)
+    {
+        return conversationRecordFacade.getHelpConversation(dto);
+    }
+
+
 }

+ 27 - 0
leromro-core/src/main/java/com/leromro/core/controller/VolunteerInfoController.java

@@ -2,16 +2,20 @@ package com.leromro.core.controller;
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.leromro.common.core.controller.BaseController;
 import com.leromro.common.core.domain.AjaxResult;
 import com.leromro.common.core.domain.R;
 import com.leromro.common.core.domain.entity.SysUser;
 import com.leromro.common.core.page.TableDataInfo;
 import com.leromro.common.utils.SecurityUtils;
+import com.leromro.core.domain.VolunteerFaceRecord;
 import com.leromro.core.domain.VolunteerInfo;
 import com.leromro.core.domain.dto.VolunteerInfoDTO;
 import com.leromro.core.domain.vo.VolunteerInfoDetailVO;
 import com.leromro.core.domain.vo.VolunteerInfoVO;
+import com.leromro.core.service.IVolunteerFaceRecordService;
 import com.leromro.core.service.IVolunteerInfoService;
 import com.leromro.core.utils.SendSmsUtil;
 import com.leromro.framework.config.ConstantsConfig;
@@ -42,6 +46,9 @@ public class VolunteerInfoController extends BaseController {
     @Autowired
     private SysUserMapper sysUserMapper;
 
+    @Autowired
+    private IVolunteerFaceRecordService volunteerFaceRecordService;
+
     /**
      * 新增志愿者信息
      * 已测试
@@ -144,6 +151,26 @@ public class VolunteerInfoController extends BaseController {
     public List<String> getVolunteerPicture(){
         return volunteerInfoService.getVolunteerPicture(SecurityUtils.getUserId());
     }
+
+    /**
+     * 获取志愿者人脸核身状态
+     */
+    @ApiOperation(value = "获取志愿者人脸核身状态",notes = "传入志愿者id,返回核身状态,如果为false,则提示志愿者先去人脸核身")
+    @GetMapping("/getFaceStatus")
+    public R<Boolean> getFaceStatus(Long volunteerInfoId){
+        return volunteerFaceRecordService.getFaceStatus(volunteerInfoId);
+    }
+
+    /**
+     * 新增志愿者人脸核身记录
+     */
+    @ApiOperation(value = "新增志愿者人脸核身记录")
+    @PostMapping("/addFaceRecord")
+    public R<Boolean> addFaceRecord(@RequestBody VolunteerFaceRecord volunteerFaceRecord){
+        return volunteerFaceRecordService.addFaceRecord(volunteerFaceRecord);
+    }
+
+
   /*  @ApiOperation("用户已注册志愿者查询")
     @GetMapping("/havenRegister")
     public Void selectUserHavenRegister(){

+ 19 - 3
leromro-core/src/main/java/com/leromro/core/domain/ConversationMsgRecord.java

@@ -62,6 +62,10 @@ public class ConversationMsgRecord extends BaseEntity
     @ApiModelProperty("消息内容")
     private String msgContent;
 
+    @TableField("user_read_flag")
+    @ApiModelProperty("用户读取标志(0代表未读 2代表已读)")
+    private String userReadFlag;
+
     @TableField("user_del_flag")
     @ApiModelProperty("用户删除标志(0代表存在 2代表删除)")
     private String userDelFlag;
@@ -74,9 +78,21 @@ public class ConversationMsgRecord extends BaseEntity
     @ApiModelProperty("志愿者读取标志(0代表未读 2代表已读)")
     private String volunteerReadFlag;
 
-    @TableField("user_read_flag")
-    @ApiModelProperty("用户读取标志(0代表未读 2代表已读)")
-    private String userReadFlag;
+    @TableField("customer_service_read_flag")
+    @ApiModelProperty("客服读取标志(0代表未读 2代表已读)")
+    private String customerServiceReadFlag;
+
+    @TableField("customer_service_del_flag")
+    @ApiModelProperty("客服删除标志(0代表存在 2代表删除)")
+    private String customerServiceDelFlag;
+
+    @TableField("district_code")
+    @ApiModelProperty("区级区划编号")
+    private String districtCode;
+
+    @TableField("district_name")
+    @ApiModelProperty("区级名称")
+    private String districtName;
 
 
 }

+ 17 - 1
leromro-core/src/main/java/com/leromro/core/domain/ConversationRecord.java

@@ -57,7 +57,7 @@ public class ConversationRecord extends BaseEntity
     private String volunteerName;
 
     @TableField("conversation_type")
-    @ApiModelProperty("会话类型 1系统会话 2订单会话")
+    @ApiModelProperty("会话类型 1系统会话 2订单会话 3客服会话")
     private String conversationType;
 
     @TableField("user_del_flag")
@@ -68,6 +68,10 @@ public class ConversationRecord extends BaseEntity
     @ApiModelProperty("志愿者删除标志(0代表存在 2代表删除)")
     private String volunteerDelFlag;
 
+    @TableField("customer_service_del_flag")
+    @ApiModelProperty("客服删除标志(0代表存在 2代表删除)")
+    private String customerServiceDelFlag;
+
     @TableField("msg_type")
     @ApiModelProperty("消息类型 1文字消息 2图片消息")
     private String msgType;
@@ -80,4 +84,16 @@ public class ConversationRecord extends BaseEntity
     @ApiModelProperty("最新一条消息时间")
     private LocalDateTime newestMsgTime;
 
+    @TableField("district_code")
+    @ApiModelProperty("区级区划编号")
+    private String districtCode;
+
+    @TableField("district_name")
+    @ApiModelProperty("区级名称")
+    private String districtName;
+
+    @TableField("user_or_volunteer")
+    @ApiModelProperty("用户会话1或者志愿者会话2(客服使用,会话类型3)")
+    private String userOrVolunteer;
+
 }

+ 14 - 0
leromro-core/src/main/java/com/leromro/core/domain/dto/ConversationMsgDTO.java

@@ -45,9 +45,16 @@ public class ConversationMsgDTO {
     @ApiModelProperty("下单用户id")
     private Long userId;
 
+    //目前用户名称和志愿者名称,在系统消息处没有赋值,在客服消息处有用
+    @ApiModelProperty("下单用户名称")
+    private String userName;
+
     @ApiModelProperty("志愿者id")
     private Long volunteerId;
 
+    @ApiModelProperty("志愿者名称")
+    private String volunteerName;
+
     @ApiModelProperty("消息内容")
     private String msgContent;
 
@@ -56,4 +63,11 @@ public class ConversationMsgDTO {
 
     @ApiModelProperty("每页大小")
     private Integer pageSize;
+
+    //后台会涉及到这个字段
+    @ApiModelProperty("区级区划编号")
+    private String districtCode;
+
+    @ApiModelProperty("会话类型 1系统会话 2订单会话 3客服会话")
+    private String conversationType;
 }

+ 121 - 7
leromro-core/src/main/java/com/leromro/core/facade/ConversationRecordFacade.java

@@ -2,11 +2,13 @@ package com.leromro.core.facade;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONConfig;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.leromro.common.core.domain.R;
+import com.leromro.common.core.domain.entity.SysDept;
 import com.leromro.common.core.domain.entity.SysUser;
 import com.leromro.common.utils.SecurityUtils;
 import com.leromro.core.domain.ConversationMsgRecord;
@@ -22,6 +24,7 @@ import com.leromro.core.service.IConversationRecordService;
 import com.leromro.core.service.IMainOrderService;
 import com.leromro.core.service.IVolunteerInfoService;
 import com.leromro.core.socket.WebSocketService;
+import com.leromro.system.service.ISysDeptService;
 import com.leromro.system.service.ISysUserService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -49,6 +52,8 @@ public class ConversationRecordFacade {
 
     private final WebSocketService webSocketService;
 
+    private final ISysDeptService sysDeptService;
+
 
     /**
      * 获取会话记录详细信息
@@ -90,6 +95,9 @@ public class ConversationRecordFacade {
         return R.ok(vo);
     }
 
+    /**
+     * 消息列表页面 点击会话 获取会话记录详细信息
+     */
     public R<ConversationRecordVO> getListConversationInfo(Long conversationRecordId) {
         ConversationRecordVO vo = new ConversationRecordVO();
         ConversationRecord conversationRecord = conversationRecordService.getOne(new LambdaQueryWrapper<ConversationRecord>()
@@ -105,11 +113,11 @@ public class ConversationRecordFacade {
      */
     @Transactional(rollbackFor = Exception.class)
     public void sendMsg(ConversationMsgDTO dto) {
-        Long userId = SecurityUtils.getUserId();
+        SysUser user = SecurityUtils.getLoginUser().getUser();
         //保存消息
         ConversationMsgRecord conversationMsgRecord = ConversationMsgRecord.builder()
                 .conversationRecordId(dto.getConversationRecordId())
-                .senderId(userId)
+                .senderId(user.getUserId())
                 .userId(dto.getUserId())
                 .volunteerId(dto.getVolunteerId())
                 .msgType(dto.getMsgType())
@@ -126,13 +134,37 @@ public class ConversationRecordFacade {
         if (dto.getSystem() == 1){
             //用户发送,设置用户已读
             conversationMsgRecord.setUserReadFlag("2");
-            receiver = dto.getVolunteerId();
+            // 目前系统消息不允许发送,如果为订单消息则设置接收人为志愿者,如果是客服消息则设置区域编号和名称
+            if ("2".equals(dto.getConversationType())){
+                receiver = dto.getVolunteerId();
+            }else {
+                conversationMsgRecord.setDistrictCode(user.getDistrictCode());
+                conversationMsgRecord.setDistrictName(user.getDistrictName());
+            }
+            //设置会话
             wrapper.set(ConversationRecord::getVolunteerDelFlag, "0");
         } else if (dto.getSystem() == 2) {
             //志愿者发送,设置志愿者已读
             conversationMsgRecord.setVolunteerReadFlag("2");
-            receiver = dto.getUserId();
+            // 目前系统消息不允许发送,如果为订单消息则设置接收人为志愿者,如果是客服消息则设置区域编号和名称
+            if ("2".equals(dto.getConversationType())){
+                receiver = dto.getUserId();
+            }else {
+                conversationMsgRecord.setDistrictCode(user.getDistrictCode());
+                conversationMsgRecord.setDistrictName(user.getDistrictName());
+            }
+            //设置会话
             wrapper.set(ConversationRecord::getUserDelFlag, "0");
+        }else if (dto.getSystem() == 3){
+            //系统发送,设置系统已读
+            conversationMsgRecord.setCustomerServiceReadFlag("2");
+            conversationMsgRecord.setUserId(dto.getUserId());
+            conversationMsgRecord.setVolunteerId(dto.getVolunteerId());
+            //设置接收人
+            receiver = ObjectUtil.isNull(dto.getUserId())?dto.getVolunteerId():dto.getUserId();
+            //设置会话
+            wrapper.set(ConversationRecord::getUserDelFlag, "0")
+                    .set(ConversationRecord::getVolunteerDelFlag, "0");
         }
         //保存消息
         conversationMsgRecordService.save(conversationMsgRecord);
@@ -143,7 +175,7 @@ public class ConversationRecordFacade {
         SocketMsgVO<ConversationMsgRecordVO> msgVO = SocketMsgVO.<ConversationMsgRecordVO>builder().type("msgNew").data(BeanUtil.copyProperties(conversationMsgRecord, ConversationMsgRecordVO.class)).build();
         webSocketService.sendMessage(receiver,JSONUtil.toJsonStr(msgVO,new JSONConfig().setDateFormat("yyyy-MM-dd HH:mm:ss")));
         //推送总数
-        conversationMsgRecordService.getUnreadMsgCountByUserId(dto.getSystem(), userId);
+        conversationMsgRecordService.getUnreadMsgCountByUserId(dto.getSystem(), user.getUserId());
     }
 
     /**
@@ -153,13 +185,21 @@ public class ConversationRecordFacade {
         LambdaUpdateWrapper<ConversationMsgRecord> wrapper = new LambdaUpdateWrapper<ConversationMsgRecord>()
                 .eq(ConversationMsgRecord::getConversationRecordId, dto.getConversationRecordId());
         if (dto.getSystem() == 1){
-            //用户发送,设置用户已读
+            //用户,设置用户已读
             wrapper.eq(ConversationMsgRecord::getUserId, SecurityUtils.getUserId());
+            wrapper.eq(ConversationMsgRecord::getUserReadFlag, "0");
             wrapper.set(ConversationMsgRecord::getUserReadFlag, "2");
         } else if (dto.getSystem() == 2) {
-            //志愿者发送,设置志愿者已读
+            //志愿者,设置志愿者已读
             wrapper.eq(ConversationMsgRecord::getVolunteerId, SecurityUtils.getUserId());
+            wrapper.eq(ConversationMsgRecord::getVolunteerReadFlag, "0");
             wrapper.set(ConversationMsgRecord::getVolunteerReadFlag, "2");
+        } else if (dto.getSystem() == 3) {
+            //后台,设置客服已读
+            wrapper.eq(ObjectUtil.isNotNull(dto.getUserId()),ConversationMsgRecord::getUserId, dto.getUserId());
+            wrapper.set(ObjectUtil.isNotNull(dto.getUserId()),ConversationMsgRecord::getUserReadFlag, "2");
+            wrapper.eq(ObjectUtil.isNotNull(dto.getVolunteerId()),ConversationMsgRecord::getVolunteerId, dto.getVolunteerId());
+            wrapper.set(ObjectUtil.isNotNull(dto.getVolunteerId()),ConversationMsgRecord::getVolunteerReadFlag, "2");
         }
         conversationMsgRecordService.update(wrapper);
         //推送总数
@@ -167,7 +207,81 @@ public class ConversationRecordFacade {
     }
 
 
+    /**
+     * 获取历史聊天记录,目前设置为获取10条
+     */
     public List<ConversationMsgRecordVO> getHistoryMsg(ConversationMsgDTO dto) {
         return conversationMsgRecordService.getNewestMsg(dto.getConversationRecordId(),dto.getConversationMsgRecordId());
     }
+
+    /**
+     * 帮助与客服,获取与客服会话记录和详细信息
+     *   如果没有会话,会自动创建会话
+     *    返回值为会话信息和最新的10条聊天记录
+     */
+    public R<ConversationRecordVO> getHelpConversation(ConversationMsgDTO dto) {
+        Integer system = dto.getSystem();
+        //获取当前用户所在地区
+        String districtCode = SecurityUtils.getLoginUser().getUser().getDistrictCode();
+        if (StrUtil.isEmpty(districtCode)){
+            return R.fail("当前用户还未选择地区,无法获取当前地区客服");
+        }
+        //获取当前用户所在地区的区域中心
+        SysDept dept = sysDeptService.getOne(new LambdaQueryWrapper<SysDept>()
+                .eq(SysDept::getDistrictCode, districtCode)
+                .eq(SysDept::getAreaType, "3"));
+        //如果不存在区域中心,则提示
+        if (ObjectUtil.isNull(dept)){
+            return R.fail("当前所在地区还未开展服务,如需加盟请联系XXXX");
+        }
+        ConversationRecordVO vo = new ConversationRecordVO();
+        LambdaQueryWrapper<ConversationRecord> wrapper = new LambdaQueryWrapper<ConversationRecord>().eq(ConversationRecord::getConversationType, "3");
+        if (system  == 1){
+            wrapper.eq(ConversationRecord::getUserId, SecurityUtils.getUserId());
+        } else if (system == 2) {
+            wrapper.eq(ConversationRecord::getVolunteerId, SecurityUtils.getUserId());
+        }else {
+            return R.fail("系统类型错误");
+        }
+        ConversationRecord conversationRecord = conversationRecordService.getOne(wrapper);
+        if (ObjectUtil.isNull(conversationRecord)){
+            //插入一条客服提示语
+            ConversationMsgRecord conversationMsgRecord = ConversationMsgRecord.builder()
+                    .msgType("1")
+                    .msgContent("您好,请问需要什么帮助")
+                    .msgSendTime(LocalDateTime.now())
+                    .userReadFlag("2")
+                    .districtName(dept.getDistrictName())
+                    .districtCode(dept.getDistrictCode())
+                    .build();
+            //不存在则创建会话,并保存
+            conversationRecord = ConversationRecord.builder()
+                    .districtCode(dept.getDistrictCode())
+                    .districtName(dept.getDistrictName())
+                    .newestMsgContent(conversationMsgRecord.getMsgContent())
+                    .newestMsgTime(conversationMsgRecord.getMsgSendTime())
+                    .msgType(conversationMsgRecord.getMsgType())
+                    .conversationType("3")
+                    .build();
+            if (system  == 1){
+                //设置会话信息
+                conversationRecord.setUserId(SecurityUtils.getUserId());
+                conversationRecord.setUserName(SecurityUtils.getUsername());
+                conversationRecord.setUserOrVolunteer("1");
+                conversationMsgRecord.setUserId(SecurityUtils.getUserId());
+            } else  {
+                //设置会话信息
+                conversationRecord.setVolunteerId(SecurityUtils.getUserId());
+                conversationRecord.setVolunteerName(SecurityUtils.getUsername());
+                conversationRecord.setUserOrVolunteer("2");
+                conversationMsgRecord.setVolunteerId(SecurityUtils.getUserId());
+            }
+            conversationRecordService.save(conversationRecord);
+            conversationMsgRecord.setConversationRecordId(conversationRecord.getConversationRecordId());
+            conversationMsgRecordService.save(conversationMsgRecord);
+        }
+        BeanUtil.copyProperties(conversationRecord,vo);
+        vo.setVos(conversationMsgRecordService.getNewestMsg(vo.getConversationRecordId(),null));
+        return R.ok(vo);
+    }
 }

+ 1 - 1
leromro-core/src/main/java/com/leromro/core/facade/OrdersFacade.java

@@ -124,7 +124,7 @@ public class OrdersFacade {
                             .eq(SecondOrder::getMainOrderId, mainOrders.getMainOrderId()));
                     //向志愿者推送消息,并且插入未读消息
                     conversationRecordService.sendSystemMsg(ConversationMsgDTO.builder()
-                            .system(2).userId(mainOrders.getVolunteerId()).volunteerId(mainOrders.getVolunteerId())
+                            .system(2).volunteerId(mainOrders.getVolunteerId())
                             .msgContent("您有新的订单,请及时查看")
                             .build());
 

+ 10 - 1
leromro-core/src/main/java/com/leromro/core/service/impl/ConversationMsgRecordServiceImpl.java

@@ -6,11 +6,13 @@ import cn.hutool.json.JSONConfig;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.leromro.common.core.domain.entity.SysUser;
 import com.leromro.core.domain.vo.ConversationMsgRecordVO;
 import com.leromro.core.domain.vo.SocketMsgVO;
 import com.leromro.core.mapper.ConversationMsgRecordMapper;
 import com.leromro.common.utils.DateUtils;
 import com.leromro.core.socket.WebSocketService;
+import com.leromro.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -33,6 +35,9 @@ public class ConversationMsgRecordServiceImpl extends ServiceImpl<ConversationMs
     @Autowired
     private WebSocketService webSocketService;
 
+    @Autowired
+    private ISysUserService userService;
+
 
     @Override
     public List<ConversationMsgRecordVO> getNewestMsg(Long conversationRecordId,Long conversationMsgRecordId) {
@@ -58,7 +63,11 @@ public class ConversationMsgRecordServiceImpl extends ServiceImpl<ConversationMs
             wrapper.eq(ConversationMsgRecord::getVolunteerId, userId).
                     eq(ConversationMsgRecord::getVolunteerReadFlag, "0");
         }else {
-            return;
+            //后台区域中心查看当前区域的未读消息
+            SysUser user = userService.getById(userId);
+            //socket鉴权之后,用户不会为空
+            wrapper.eq(ConversationMsgRecord::getDistrictCode, user.getDistrictCode())
+                    .eq(ConversationMsgRecord::getCustomerServiceReadFlag,"0");
         }
         //获取未读消息
         Integer count = this.count(wrapper);

+ 21 - 6
leromro-core/src/main/java/com/leromro/core/service/impl/ConversationRecordServiceImpl.java

@@ -5,6 +5,7 @@ import java.util.List;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONConfig;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -24,6 +25,7 @@ import com.leromro.core.mapper.ConversationRecordMapper;
 import com.leromro.common.utils.DateUtils;
 import com.leromro.core.service.IConversationMsgRecordService;
 import com.leromro.core.socket.WebSocketService;
+import com.leromro.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -50,6 +52,9 @@ public class ConversationRecordServiceImpl extends ServiceImpl<ConversationRecor
     @Autowired
     private WebSocketService webSocketService;
 
+    @Autowired
+    private ISysUserService userService;
+
     /**
      * 查询会话记录列表
      * 
@@ -65,16 +70,24 @@ public class ConversationRecordServiceImpl extends ServiceImpl<ConversationRecor
         }else if (dto.getSystem().equals(2)){
             dto.setVolunteerId(SecurityUtils.getUserId());
         }else {
-            return null;
+            //后台,则查看对应区域信息
+            SysUser user = userService.getById(SecurityUtils.getUserId());
+            dto.setDistrictCode(user.getDistrictCode());
         }
         //查询会话记录列表
         List<ConversationRecordListVO> vos = conversationRecordMapper.selectConversationRecordList(dto);
-        //如果是用户系统,则显示志愿者名称,如果是志愿者系统则显示用户名称
         for (ConversationRecordListVO vo : vos) {
-            if (dto.getSystem().equals(1)){
-                vo.setConversationTitle(vo.getVolunteerName());
-            }else if (dto.getSystem().equals(2)){
-                vo.setConversationTitle(vo.getUserName());
+            //如果是订单会话,用户系统,则显示志愿者名称,如果是志愿者系统则显示用户名称
+            if ("2".equals(vo.getConversationType())) {
+                if (dto.getSystem().equals(1)) {
+                    vo.setConversationTitle(vo.getVolunteerName());
+                } else if (dto.getSystem().equals(2)) {
+                    vo.setConversationTitle(vo.getUserName());
+                }
+            }
+            //如果是客服会话,当前系统也是后台,则显示用户名称
+            if ("3".equals(vo.getConversationType()) && dto.getSystem().equals(3)) {
+                vo.setConversationTitle(StrUtil.isNotEmpty(vo.getUserName())? vo.getUserName() : vo.getVolunteerName());
             }
         }
         return vos;
@@ -125,8 +138,10 @@ public class ConversationRecordServiceImpl extends ServiceImpl<ConversationRecor
                     .build();
             if (system == 1){
                 conversationRecord.setUserId(dto.getUserId());
+                conversationRecord.setUserName(dto.getUserName());
             } else {
                 conversationRecord.setVolunteerId(dto.getVolunteerId());
+                conversationRecord.setVolunteerName(dto.getVolunteerName());
             }
             this.save(conversationRecord);
         }else {

+ 1 - 1
leromro-core/src/main/java/com/leromro/core/service/impl/MainOrderServiceImpl.java

@@ -348,7 +348,7 @@ public class MainOrderServiceImpl extends ServiceImpl<MainOrdersMapper, MainOrde
             changePlatformFinance(seconderIdList, orders);
             //异步推送消息给志愿者
             conversationRecordService.sendSystemMsg(ConversationMsgDTO.builder()
-                    .system(2).userId(orders.getVolunteerId()).volunteerId(orders.getVolunteerId())
+                    .system(2).volunteerId(orders.getVolunteerId())
                     .msgContent("您有新的订单,请及时查看")
                     .build());
         }

+ 5 - 0
leromro-core/src/main/resources/mapper/core/ConversationRecordMapper.xml

@@ -28,6 +28,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         CASE
         WHEN #{dto.userId} IS NOT NULL AND lcmr.user_read_flag = '0' THEN lcmr.conversation_msg_record_id
         WHEN #{dto.volunteerId} IS NOT NULL AND lcmr.volunteer_read_flag = '0' THEN lcmr.conversation_msg_record_id
+        WHEN #{dto.system} = 3 AND lcmr.customer_service_read_flag = '0' THEN lcmr.conversation_msg_record_id
         ELSE NULL
         END
         ) AS msgUnreadCount
@@ -41,6 +42,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             and lcr.volunteer_id = #{dto.volunteerId}
             and lcr.volunteer_del_flag = '0'
         </if>
+        <if test="dto.system == 3">
+            and lcr.district_code = #{dto.districtCode}
+            and lcr.customer_service_del_flag = '0'
+        </if>
         group by lcr.conversation_record_id
         order by lcr.newest_msg_time desc
     </select>

+ 2 - 1
leromro-system/src/main/java/com/leromro/system/service/ISysDeptService.java

@@ -1,5 +1,6 @@
 package com.leromro.system.service;
 
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.leromro.common.core.domain.TreeSelect;
 import com.leromro.common.core.domain.entity.SysDept;
 
@@ -11,7 +12,7 @@ import java.util.List;
  * 
  * @author ruoyi
  */
-public interface ISysDeptService
+public interface ISysDeptService extends IService<SysDept>
 {
     /**
      * 查询部门管理数据