中扬CRM客户关系管理系统
LSH
2024-04-02 a4deee805df11b122b2fe1524112b498c21a2164
#周计划
3个文件已修改
306 ■■■■■ 已修改文件
src/main/java/com/zy/crm/manager/controller/WeeklyController.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/weekly/weekly.js 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/weekly/weekly.html 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/controller/WeeklyController.java
@@ -1,19 +1,18 @@
package com.zy.crm.manager.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
import com.zy.crm.manager.entity.Weekly;
import com.zy.crm.manager.entity.WeeklyDailyPlan;
import com.zy.crm.manager.entity.WeeklyDailyReality;
import com.zy.crm.common.entity.PhoneCodeTypeParam;
import com.zy.crm.common.model.SettleDto;
import com.zy.crm.manager.entity.*;
import com.zy.crm.manager.entity.param.CstmrUtilsParam;
import com.zy.crm.manager.entity.param.WeeklyDomainParam;
import com.zy.crm.manager.service.WeeklyDailyPlanService;
import com.zy.crm.manager.service.WeeklyDailyRealityService;
import com.zy.crm.manager.service.WeeklyService;
import com.zy.crm.manager.service.*;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
@@ -21,6 +20,8 @@
import com.core.domain.KeyValueVo;
import com.zy.crm.common.web.BaseController;
import com.zy.crm.manager.utils.TimeCalculatorUtils;
import com.zy.crm.system.entity.User;
import com.zy.crm.system.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -38,6 +39,15 @@
    private WeeklyDailyPlanService weeklyDailyPlanService;
    @Autowired
    private WeeklyDailyRealityService weeklyDailyRealityService;
    @Autowired
    private UserService userService;
    @Autowired
    private WeeklyFollService weeklyFollService;
    @Autowired
    private SmsCodeService smsCodeService;
    String PZH = " ————————————————— ";
    Integer PBN = 6;
    @RequestMapping(value = "/weekly/{id}/auth")
    @ManagerAuth
@@ -168,8 +178,6 @@
            weekly.setDeptId(getDeptId());               // 所属部门
            weekly.setUserId(getUserId());               // 所属人员
            weekly.setDirector(getUserId());               // 所属人员
            weekly.setCreateBy(getUserId());
            weekly.setCreateTime(now);
            weekly.setUpdateBy(getUserId());
@@ -212,6 +220,17 @@
            weekly.setWeeklyNowMonth(TimeCalculatorUtils.WeeklyNowMonthDay(weekly.getStartTime()));
            weekly.setWeeklyDayMonth(weekly.getWeeklyMonth()+"月第"+weekly.getWeeklyNowMonth()+"周");
            List<User> userList = new ArrayList<>();
            userList.add(getUser());
            User manager = new User();
            try {
                manager = userService.getDeptManager(getHostId(), getUser().getDeptId());        // 获取部门领导
            } catch (Exception e) {
                manager = getUser();
            }
            userList.add(manager);
            weekly.setDirector(manager.getId());
            List<Date> dates = TimeCalculatorUtils.WeeklyListDays(dateList);//获取周一到周日日期
            try{
@@ -228,7 +247,7 @@
                weeklyDailyPlan.setDeptId(getDeptId());               // 所属部门
                weeklyDailyPlan.setUserId(getUserId());               // 所属人员
                weeklyDailyPlan.setDirector(getUserId());               // 所属人员
                weeklyDailyPlan.setDirector(manager.getId());               // 所属人员
                weeklyDailyPlan.setCreateBy(getUserId());
                weeklyDailyPlan.setCreateTime(now);
@@ -248,12 +267,33 @@
                }
            }
            try{
                insertWeeklyFoll(userList,weekly.getId());                // 自动添加跟进人
            }catch (Exception e){
                log.error("周报添加跟进人异常,异常信息1:"+e);
            }
        } catch (Exception e){
            log.error("创建周计划异常,异常信息:"+e);
            throw new CoolException("创建周计划失败==>"+e);
        }
        return R.ok("创建成功");
    }
    public void insertWeeklyFoll(List<User> userList,Long weeklyId){
        for (User user:userList){
            try{
                // 自动添加跟进人
                WeeklyFoll weeklyFoll = new WeeklyFoll();
                weeklyFoll.setUserId(user.getId());
                weeklyFoll.setWeeklyId(weeklyId);
                weeklyFollService.insert(weeklyFoll);
            }catch (Exception e){
                log.error("周报添加跟进人异常,异常信息2:"+e);
                continue;
            }
        }
    }
    @RequestMapping(value = "/weekly/from/add/auth2")
@@ -278,12 +318,39 @@
            weekly.setDeptId(getDeptId());               // 所属部门
            weekly.setUserId(getUserId());               // 所属人员
            weekly.setDirector(getUserId());               // 所属人员
            weekly.setCreateBy(getUserId());
            weekly.setCreateTime(now);
            weekly.setUpdateBy(getUserId());
            weekly.setUpdateTime(now);
            List<User> userList = new ArrayList<>();
            userList.add(getUser());
            User manager = new User();
            try {
                manager = userService.getDeptManager(getHostId(), getUser().getDeptId());        // 获取部门领导
            } catch (Exception e) {
                manager = getUser();
            }
            userList.add(manager);
            weekly.setDirector(manager.getId());
            // 获取业务员
            List<String> initNames = new ArrayList<>();
            initNames.add("创建了审批");
            initNames.add("部门领导审核");
//            initNames.add("业务员确认");
            List<User> users = new ArrayList<>();
            users.add(getUser());
            users.add(manager);
//            users.add(getUser());
            weekly.setSettleMsg(JSON.toJSONString(SettleDto.InItFlowPathTwo(users, initNames, users.size())));
            weekly.setSettleSize(users.size());
            weekly.setSettleCurrent(1);
            if (users.size() > 1) {
                weekly.setDirector(users.get(1).getId());
            } else {
                weekly.setDirector(getUserId());
            }
            List<Date> dateList = new ArrayList<>();//获取周一与周日日期
@@ -338,7 +405,7 @@
                weeklyDailyReality.setDeptId(getDeptId());               // 所属部门
                weeklyDailyReality.setUserId(getUserId());               // 所属人员
                weeklyDailyReality.setDirector(getUserId());               // 所属人员
                weeklyDailyReality.setDirector(manager.getId());               // 所属人员
                weeklyDailyReality.setCreateBy(getUserId());
                weeklyDailyReality.setCreateTime(now);
@@ -356,6 +423,12 @@
                    log.error("新增日计划失败"+e);
                    throw new CoolException("新增日计划失败");
                }
            }
            try{
                insertWeeklyFoll(userList,weekly.getId());                // 自动添加跟进人
            }catch (Exception e){
                log.error("周报添加跟进人异常,异常信息1:"+e);
            }
        } catch (Exception e){
@@ -576,4 +649,109 @@
        List<WeeklyDailyReality> weeklyDailyRealities = weeklyDailyRealityService.selectList(new EntityWrapper<WeeklyDailyReality>().eq("weekly_id", weeklyId));
        return R.ok().add(weeklyDailyRealities);
    }
    @PostMapping(value = "/weekly/approval/auth")
    @ManagerAuth(memo = "审批申请单")
    public R approval(@RequestParam Long weeklyId,
                      @RequestParam(required = false) Long plannerId) {
        Weekly weekly = weeklyService.selectById(weeklyId);
        assert weekly != null;
        Long nextUserId = getUserId();
        User director = userService.selectById(weekly.getDirector());
        if (Cools.isEmpty(getUser()) || Cools.isEmpty(director)) {
            return R.error("抱歉,您无需确认!!!");
        }
        if (!getUserId().equals(director.getId())) {
            return R.error("抱歉,您无需确认!!!");
        }
        // 修改 settle 步骤数据
        List<SettleDto> list = JSON.parseArray(weekly.getSettleMsg(), SettleDto.class);
        // 修改 settle 步骤数据
        for (SettleDto dto : list) {
            if (dto.getStep().equals(weekly.getSettle())) {
                dto.setCurr(Boolean.TRUE);
            } else if (dto.getStep().equals(weekly.getSettle() + 1)) {
                dto.setCurr(Boolean.TRUE);
                if (Cools.isEmpty(dto.getMsg())) {
                    dto.setMsg(director.getNickname() + "审批通过");
                } else {
                    dto.setMsg(dto.getMsg() + PZH + DateUtils.convert(new Date()) + " " + director.getNickname() + "审批通过");
                }
                dto.setTime(DateUtils.convert(new Date()));
            } else if (dto.getStep().equals(weekly.getSettle() + 2)) {
                nextUserId = dto.getUserId();
            }
        }
        weekly.setSettleMsg(JSON.toJSONString(list));
        // 修改规划单状态
        weekly.setSettle(weekly.getSettle() + 1);  // 审批通过
        weekly.setUpdateBy(getUserId());
        weekly.setUpdateTime(new Date());
        weekly.setDirector(nextUserId);
        if (!weeklyService.updateById(weekly)) {
            throw new CoolException("审核失败,请联系管理员");
        }
        if (!weekly.getSettle().equals(weekly.getSettleSize())) {
            User phoneUser = userService.selectById(nextUserId);
            if (!smsCodeService.sendSmsCodeText(phoneUser.getMobile(), PhoneCodeTypeParam.ALIYUN_M1ABAC630E, getUserId())) {
                return R.ok("审核成功但短信发送失败!");
            }
        }
        return R.ok("审批成功");
    }
    @PostMapping(value = "/weekly/approvalEnd/auth")
    @ManagerAuth(memo = "拒绝申请单")
    public R approvalEnd(@RequestParam Long weeklyId,
                         @RequestParam(required = false) Long plannerId) {
        Weekly weekly = weeklyService.selectById(weeklyId);
        Date now = new Date();
        Long nextUserId = getUserId();
        Long directorId = weekly.getDirector();
        User director = userService.selectById(directorId);
        if (!director.getId().equals(getUserId())) {
            return R.error("抱歉,您没有审核的权限");
        }
        List<SettleDto> planDtos = JSON.parseArray(weekly.getSettleMsg(), SettleDto.class);
        List<SettleDto> planDtoList = new ArrayList<>();
        boolean sign = true;
        for (SettleDto dto : planDtos) {
            if (dto.getStep().equals(2)) {
                nextUserId = dto.getUserId();
                weekly.setDirector(dto.getUserId());
            }
            if (sign && dto.getUserId().equals(directorId) && weekly.getSettle() + 1 == dto.getStep()) {
                if (Cools.isEmpty(dto.getMsg())) {
                    dto.setMsg(DateUtils.convert(now) + " " + director.getNickname() + "回退审批");
                } else {
                    dto.setMsg(dto.getMsg() + PZH + DateUtils.convert(now) + " " + director.getNickname() + "回退审批");
                }
                sign = false;
            }
            if (sign) {
                dto.setMsg(dto.getMsg() + PZH + DateUtils.convert(now) + " " + director.getNickname() + "回退审批");
            }
            planDtoList.add(dto);
        }
        weekly.setStatus(0);
        weekly.setSettle(1);
        weekly.setSettleMsg(JSON.toJSONString(planDtoList));
        weekly.setUpdateBy(getUserId());
        weekly.setUpdateTime(now);
        weeklyService.updateById(weekly);
        if (!weekly.getSettle().equals(weekly.getSettleSize())) {
            User phoneUser = userService.selectById(nextUserId);
            if (!smsCodeService.sendSmsCodeText(phoneUser.getMobile(), PhoneCodeTypeParam.ALIYUN_M1ABAC630E, getUserId())) {
                return R.ok("审核成功但短信发送失败!");
            }
        }
        return R.ok("回退成功");
    }
}
src/main/webapp/static/js/weekly/weekly.js
@@ -21,6 +21,8 @@
    admin = layui.admin;
    $('#organization').html(localStorage.getItem('nickname') + ' <i class="layui-icon">&#xe61a;</i>');
    $(".laytable-cell-2-0-7").css('color', 'rgba(0, 0, 0, 0)');
    // 部门人员 筛选
    dropdown.render({
@@ -435,8 +437,84 @@
                    }
                });
                break;
            case 'approval':
                layer.confirm('审批通过?', {
                    skin: 'layui-layer-admin',
                    shade: .1,
                    offset: '200px',
                    title: data.name
                }, function (i) {
                    layer.close(i);
                    approval(data.id);
                });
                break;
            case 'approvalEnd':
                layer.confirm('审批拒绝?', {
                    skin: 'layui-layer-admin',
                    shade: .1,
                    offset: '200px',
                    title: data.name
                }, function (i) {
                    layer.close(i);
                    approvalEnd(data.id);
                });
                break;
        }
    });
    function approvalEnd(weeklyId, plannerId, dIdx) {
        let loadIndex = layer.load(2);
        $.ajax({
            url: baseUrl+"/weekly/approvalEnd/auth",
            headers: {'token': localStorage.getItem('token')},
            data: {
                weeklyId: weeklyId,
                plannerId: plannerId
            },
            method: 'POST',
            success: function (res) {
                if (dIdx) {
                    layer.close(dIdx);
                }
                layer.close(loadIndex);
                if (res.code === 200){
                    layer.msg(res.msg, {icon: 1});
                    tableReload();
                } else if (res.code === 403){
                    top.location.href = baseUrl+"/";
                } else {
                    layer.msg(res.msg, {icon: 2});
                }
            }
        })
    }
    function approval(weeklyId, plannerId, dIdx) {
        let loadIndex = layer.load(2);
        $.ajax({
            url: baseUrl+"/weekly/approval/auth",
            headers: {'token': localStorage.getItem('token')},
            data: {
                weeklyId: weeklyId,
                plannerId: plannerId
            },
            method: 'POST',
            success: function (res) {
                if (dIdx) {
                    layer.close(dIdx);
                }
                layer.close(loadIndex);
                if (res.code === 200){
                    layer.msg(res.msg, {icon: 1});
                    tableReload();
                } else if (res.code === 403){
                    top.location.href = baseUrl+"/";
                } else {
                    layer.msg(res.msg, {icon: 2});
                }
            }
        })
    }
    // 搜索
    form.on('submit(search)', function (data) {
@@ -542,7 +620,7 @@
                    },
                    done: function (res, curr, count) {
                        $(".layui-table-cell").css('overflow', 'visible');//解决layui数据表格中嵌套下拉框显示问题
                        $(".laytable-cell-2-0-6").css('color', 'rgba(0, 0, 0, 0)');
                        $(".laytable-cell-2-0-7").css('color', 'rgba(0, 0, 0, 0)');
                        $(layero).find('.layui-table-view').css('margin', '0');
                        var options = this;
src/main/webapp/views/weekly/weekly.html
@@ -101,18 +101,24 @@
    <input type="button" onclick="upload()" value="上传"/>
</form>
<script type="text/html" id="operate">
    {{# if (d.settle == 1 || d.settle == 2 || d.settle == 3 || d.settle == 4 || d.settle == 5) { }}
    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval2">审批</a>
    {{# } }}
    {{# if (d.settle == 0) { }}
<!--    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval2">提交</a>-->
    {{# } }}
<!--    {{# if (d.settle == 1 || d.settle == 2 || d.settle == 3 || d.settle == 4 || d.settle == 5) { }}-->
<!--    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval2">审批</a>-->
<!--    {{# } }}-->
<!--    {{# if ((((d.settle == 2 || d.settle == 3) && d.settleSize==4) || d.settle == 1) && d.nowUserId==d.director) { }}-->
<!--    {{# } }}-->
<!--    {{# if (((d.settle == 2 || d.settle == 3)&& d.settleSize==4) && d.nowUserId==d.director) { }}-->
<!--    {{# } }}-->
    <!--  <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">提交</a>-->
<script type="text/html" id="operate">
    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approval">审批</a>
    <a class="layui-btn layui-btn-xs btn-edit" lay-event="approvalEnd">回退审批</a>
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">计划</a>
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="editReality">行程</a>
<!--    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">删除</a>-->
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">删除</a>
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>