puzhibing
2024-03-18 65ca63cc3d36f23d285a7d944fcc0d6bac92430d
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/ShopTaskServiceImpl.java
@@ -1,32 +1,34 @@
package com.ruoyi.shop.service.impl.task;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.shop.domain.dto.MgtFollowShopTaskDto;
import com.ruoyi.shop.domain.dto.StaffAddTaskDto;
import com.ruoyi.shop.domain.dto.StaffShopTaskPageDto;
import com.ruoyi.shop.domain.dto.*;
import com.ruoyi.shop.domain.pojo.task.ShopTask;
import com.ruoyi.shop.domain.pojo.task.ShopTaskRecord;
import com.ruoyi.shop.domain.pojo.task.TaskFile;
import com.ruoyi.shop.domain.vo.StaffShopTaskPageVo;
import com.ruoyi.shop.mapper.task.ShopTaskMapper;
import com.ruoyi.shop.service.shop.ShopService;
import com.ruoyi.shop.service.task.ShopTaskRecordService;
import com.ruoyi.shop.service.task.ShopTaskService;
import com.ruoyi.shop.service.task.TaskFileService;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.domain.poji.sys.SysStaff;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
import com.ruoyi.system.api.service.RemoteConfigService;
import com.ruoyi.system.api.service.RemoteUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.ParseException;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * <p>
@@ -51,6 +53,15 @@
    @Resource
    private RemoteUserService remoteUserService;
    @Resource
    private RemoteConfigService remoteConfigService;
    @Autowired
    private ShopService shopService;
    /**
     * 平台跟进商户
     * @param mgtFollowShopTaskDto
@@ -59,15 +70,16 @@
    public void followShopTask(MgtFollowShopTaskDto mgtFollowShopTaskDto){
        //创建本次任务
        ShopTask shopTask = new ShopTask();
        Date nowTime = new Date();
        String nowTimeStr = DateUtils.getDate();
        String taskId = IdUtils.simpleUUID();
        shopTask.setTaskId(taskId);
        shopTask.setDelFlag(0);
        shopTask.setShopId(mgtFollowShopTaskDto.getShopId());
        shopTask.setNextFollowDate(DateUtils.toDate(LocalDate.now()));
        shopTask.setTaskTitle(mgtFollowShopTaskDto.getTaskTitle());
        shopTask.setEmergencyState(mgtFollowShopTaskDto.getEmergencyState());
        shopTask.setCreateTime(new Date());
        shopTask.setTaskDate(DateUtils.toDate(LocalDate.now()));
        shopTask.setCreateTime(nowTime);
        shopTask.setTaskDate(nowTimeStr);
        shopTask.setTaskStatus(2);
        this.saveOrUpdate(shopTask);
        //创建任务记录
@@ -76,9 +88,9 @@
        shopTaskRecord.setTaskId(taskId);
        shopTaskRecord.setUserId(mgtFollowShopTaskDto.getUserId());
        shopTaskRecord.setFollowType(2);
        shopTaskRecord.setCustomFollowType(mgtFollowShopTaskDto.getFollowType());
        shopTaskRecord.setCustomeFollowType(mgtFollowShopTaskDto.getFollowType());
        shopTaskRecord.setFollowContent(mgtFollowShopTaskDto.getFollowContent());
        shopTaskRecord.setCreateTime(new Date());
        shopTaskRecord.setCreateTime(nowTime);
        shopTaskRecordService.saveOrUpdate(shopTaskRecord);
        //创建任务文件
        String picture = mgtFollowShopTaskDto.getPicture();
@@ -104,14 +116,16 @@
        shopNextTask.setShopId(mgtFollowShopTaskDto.getShopId());
        shopNextTask.setTaskTitle(mgtFollowShopTaskDto.getNextTaskTitle());
        shopNextTask.setEmergencyState(mgtFollowShopTaskDto.getEmergencyState());
        shopNextTask.setCreateTime(new Date());
        shopNextTask.setTaskStatus(0);
        try {
            shopNextTask.setNextFollowDate(DateUtils.parseDate(mgtFollowShopTaskDto.getNextTaskDate(),"yyyy-MM-dd"));
            shopNextTask.setTaskDate(DateUtils.parseDate(mgtFollowShopTaskDto.getNextTaskDate(),"yyyy-MM-dd"));
        } catch (ParseException e) {
            throw new RuntimeException(e);
        shopNextTask.setCreateTime(nowTime);
        int i = mgtFollowShopTaskDto.getNextTaskDate().compareTo(nowTimeStr);
        if(i>0){
            shopNextTask.setTaskStatus(0);
        }else if(i==0){
            shopNextTask.setTaskStatus(1);
        }else{
            shopNextTask.setTaskStatus(3);
        }
        shopNextTask.setTaskDate(mgtFollowShopTaskDto.getNextTaskDate());
        this.saveOrUpdate(shopNextTask);
    }
@@ -123,12 +137,18 @@
     * @date 2023/6/18 17:08
     */
    @Override
    public MgtBulletinBoardVo boardTaskTotal(){
    public MgtBulletinBoardVo boardTaskTotal(List<Long> userIds){
        MgtBulletinBoardVo mgtBulletinBoardVo = new MgtBulletinBoardVo();
        LambdaQueryWrapper<ShopTask> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ShopTask::getDelFlag,0);
        queryWrapper.eq(ShopTask::getTaskStatus,1);
        queryWrapper.eq(ShopTask::getTaskDate,DateUtils.getDate());
        if(null != userIds && userIds.size() > 0){
            List<Shop> list = shopService.list(new QueryWrapper<Shop>().eq("del_flag", 0)
                    .in("belong_user_id", userIds));
            List<Long> collect = list.stream().map(Shop::getShopId).collect(Collectors.toList());
            queryWrapper.in(ShopTask::getShopId, collect);
        }
        Integer followShopToday = this.count(queryWrapper);
        mgtBulletinBoardVo.setFollowShopToday(followShopToday);
        return mgtBulletinBoardVo;
@@ -158,13 +178,43 @@
        List<StaffShopTaskPageVo> shopTaskPageVoList = shopTaskMapper.pageStaffShopTask(page, staffShopTaskPageDto);
        if(shopTaskPageVoList!=null&&shopTaskPageVoList.size()>0){
            Long userId;
            SysUser sysUser;
            SysStaff sysStaff;
            HashSet<Long> userIdSet = new HashSet<>();
            HashSet<Long> createUserIdSet = new HashSet<>();
            for(StaffShopTaskPageVo staffShopTaskPageVo : shopTaskPageVoList){
                userIdSet.add(staffShopTaskPageVo.getUserId());
                if(null != staffShopTaskPageVo.getCreateUserId()){
                    createUserIdSet.add(staffShopTaskPageVo.getCreateUserId());
                }
            }
            List<Long> useIdList = new ArrayList<>(userIdSet);
            List<Long> createUserIdList = new ArrayList<>(createUserIdSet);
            List<SysStaff> sysStaffList = remoteConfigService.listSysStaffByIds(useIdList).getData();
            Map<Long,SysStaff> sysStaffMap = sysStaffList.stream()
                    .collect(Collectors.toMap(SysStaff::getUserId, Function.identity()));
            createUserIdList.add(-1L);
            List<SysStaff> sysStaffList1 = remoteConfigService.listSysStaffByIds(createUserIdList).getData();
            Map<Long,SysStaff> sysStaffMap1 = sysStaffList1.stream()
                    .collect(Collectors.toMap(SysStaff::getUserId, Function.identity()));
            for(StaffShopTaskPageVo staffShopTaskPageVo : shopTaskPageVoList){
                //获取任务用户信息
                userId = staffShopTaskPageVo.getUserId();
                sysUser = remoteUserService.getSysUser(userId).getData();
                staffShopTaskPageVo.setUserName(sysUser.getNickName());
                staffShopTaskPageVo.setUserPicture(sysUser.getAvatar());
                if(userId!=null){
                    sysStaff = sysStaffMap.get(userId);
                    if(null != sysStaff){
                        staffShopTaskPageVo.setUserName(sysStaff.getStaffName());
                        staffShopTaskPageVo.setUserPicture(sysStaff.getStaffAvatar());
                        staffShopTaskPageVo.setUserPosition(sysStaff.getStaffPost());
                    }
                }else{
                    if(null != staffShopTaskPageVo.getCreateUserId()){
                        sysStaff = sysStaffMap1.get(staffShopTaskPageVo.getCreateUserId());
                        staffShopTaskPageVo.setUserName(sysStaff.getStaffName());
                        staffShopTaskPageVo.setUserPicture(sysStaff.getStaffAvatar());
                        staffShopTaskPageVo.setUserPosition(sysStaff.getStaffPost());
                    }
                }
            }
        }
        return shopTaskPageVoList;
@@ -180,5 +230,176 @@
    @Override
    public void staffAddTask(StaffAddTaskDto staffAddTaskDto){
        ShopTask shopTask = new ShopTask();
        String nowTimeStr = DateUtils.getDate();
        String taskId = IdUtils.simpleUUID();
        shopTask.setTaskId(taskId);
        shopTask.setDelFlag(0);
        shopTask.setShopId(staffAddTaskDto.getShopId());
        shopTask.setTaskTitle(staffAddTaskDto.getTaskTitle());
        shopTask.setEmergencyState(staffAddTaskDto.getEmergencyState());
        shopTask.setCreateTime(new Date());
        shopTask.setTaskDate(staffAddTaskDto.getTaskDate());
        //任务状态
        int i = staffAddTaskDto.getTaskDate().compareTo(nowTimeStr);
        if(i>0){
            shopTask.setTaskStatus(0);
        }else if(i==0){
            shopTask.setTaskStatus(1);
        }else{
            shopTask.setTaskStatus(3);
        }
        shopTask.setCreateUserId(staffAddTaskDto.getUserId());
        this.saveOrUpdate(shopTask);
    }
    /**
     * @description 员工商户任务跟进
     * @param staffFollowShopTaskDto
     * @return void
     * @author jqs34
     * @date 2023/7/16 11:56
     */
    @Override
    public void staffFollowShopTask(StaffFollowShopTaskDto staffFollowShopTaskDto){
        // 创建会员任务记录对象
        ShopTaskRecord shopTaskRecord;
        // 获取旧的会员任务
        ShopTask oldShopTask = this.getById(staffFollowShopTaskDto.getTaskId());
        oldShopTask.setTaskStatus(2);
        this.saveOrUpdate(oldShopTask);
        // 判断跟进类型
        if (staffFollowShopTaskDto.getFollowType() == 1) {
            // 获取跟进电话列表
            List<MerFollowPhoneDto> followPhone = staffFollowShopTaskDto.getFollowPhone();
            // 判断跟进电话列表是否为空
            if (followPhone != null && !followPhone.isEmpty()) {
                // 遍历跟进电话列表
                for (MerFollowPhoneDto followPhoneDto : followPhone) {
                    // 创建新的会员任务记录
                    shopTaskRecord = new ShopTaskRecord();
                    shopTaskRecord.setTaskId(staffFollowShopTaskDto.getTaskId());
                    shopTaskRecord.setDelFlag(0);
                    shopTaskRecord.setUserId(staffFollowShopTaskDto.getUserId());
                    shopTaskRecord.setFollowType(staffFollowShopTaskDto.getFollowType());
                    shopTaskRecord.setCallPhone(staffFollowShopTaskDto.getCallPhone());
                    shopTaskRecord.setFollowContent(followPhoneDto.getFollowContent());
                    shopTaskRecord.setCallTime(followPhoneDto.getCallTime());
                    shopTaskRecord.setCreateTime(new Date());
                    // 保存或更新会员任务记录
                    shopTaskRecordService.saveOrUpdate(shopTaskRecord);
                }
            }
        } else {
            // 创建新的会员任务记录
            shopTaskRecord = new ShopTaskRecord();
            shopTaskRecord.setTaskId(staffFollowShopTaskDto.getTaskId());
            shopTaskRecord.setDelFlag(0);
            shopTaskRecord.setUserId(staffFollowShopTaskDto.getUserId());
            shopTaskRecord.setFollowType(staffFollowShopTaskDto.getFollowType());
            shopTaskRecord.setFollowContent(staffFollowShopTaskDto.getFollowContent());
            shopTaskRecord.setCustomeFollowType(staffFollowShopTaskDto.getCustomeFollowType());
            shopTaskRecord.setCreateTime(new Date());
            // 保存或更新会员任务记录
            shopTaskRecordService.saveOrUpdate(shopTaskRecord);
            // 获取图片、视频和音频
            List<FileDto> picture = staffFollowShopTaskDto.getPicture();
            List<FileDto> video = staffFollowShopTaskDto.getVideo();
            List<FileDto> audio = staffFollowShopTaskDto.getAudio();
            TaskFile taskFile;
            List<TaskFile> taskFileList = new ArrayList<>();
            // 判断图片是否为空,并处理
            if (picture!=null&&!picture.isEmpty()) {
                for (FileDto fileDto : picture) {
                    taskFile = new TaskFile();
                    taskFile.setDelFlag(0);
                    taskFile.setFollowId(shopTaskRecord.getId());
                    taskFile.setFollowFrom(4);
                    taskFile.setFileName(fileDto.getFileName());
                    taskFile.setFileUrl(fileDto.getFileUrl());
                    taskFile.setFileType(1);
                    taskFileList.add(taskFile);
                }
            }
            // 判断视频是否为空,并处理
            if (video!=null&&!video.isEmpty()) {
                for (FileDto fileDto : video) {
                    taskFile = new TaskFile();
                    taskFile.setDelFlag(0);
                    taskFile.setFollowId(shopTaskRecord.getId());
                    taskFile.setFollowFrom(4);
                    taskFile.setFileName(fileDto.getFileName());
                    taskFile.setFileUrl(fileDto.getFileUrl());
                    taskFile.setFileType(2);
                    taskFileList.add(taskFile);
                }
            }
            // 判断音频是否为空,并处理
            if (audio!=null&&!audio.isEmpty()) {
                for (FileDto fileDto : audio) {
                    taskFile = new TaskFile();
                    taskFile.setDelFlag(0);
                    taskFile.setFollowId(shopTaskRecord.getId());
                    taskFile.setFollowFrom(4);
                    taskFile.setFileName(fileDto.getFileName());
                    taskFile.setFileUrl(fileDto.getFileUrl());
                    taskFile.setFileType(3);
                    taskFileList.add(taskFile);
                }
            }
            if(taskFileList!=null&&!taskFileList.isEmpty()){
                taskFileService.saveBatch(taskFileList);
            }
        }
        // 判断下一个任务日期是否为空,并处理
        if (StringUtils.isNotBlank(staffFollowShopTaskDto.getNextTaskDate())) {
            ShopTask shopTask = new ShopTask();
            String taskId = IdUtils.simpleUUID();
            shopTask.setTaskId(taskId);
            shopTask.setDelFlag(0);
            shopTask.setShopId(oldShopTask.getShopId());
            shopTask.setTaskDate(staffFollowShopTaskDto.getNextTaskDate());
            shopTask.setTaskTitle(staffFollowShopTaskDto.getNextTaskContent());
            String nowTimeStr = DateUtils.getDate();
            int i = staffFollowShopTaskDto.getNextTaskDate().compareTo(nowTimeStr);
            if(i>0){
                shopTask.setTaskStatus(0);
            }else if(i==0){
                shopTask.setTaskStatus(1);
            }else{
                shopTask.setTaskStatus(3);
            }
            shopTask.setEmergencyState(staffFollowShopTaskDto.getEmergencyState());
            shopTask.setCreateTime(new Date());
            this.saveOrUpdate(shopTask);
        }
    }
    /**
     * @description  检查任务时间状态
     * @author  jqs
     * @date    2023/7/19 18:01
     * @param
     * @return  void
     */
    @Override
    public void checkTaskDateStatus(){
        //平台-商户任务状态
        shopTaskMapper.checkShopTaskStatus();
        //商户-代理商任务状态
        shopTaskMapper.checkAgencyTaskStatus();
        //商户-会员任务状态
        shopTaskMapper.checkMemberTaskStatus();
    }
    /**
     * @description  获取商户最近任务
     * @author  jqs
     * @date    2023/8/22 17:27
     * @param shopId
     * @return  ShopTask
     */
    @Override
    public ShopTask getLastTask(Long shopId){
        return shopTaskMapper.getLastTask(shopId);
    }
}