中扬CRM客户关系管理系统
LSH
2023-10-10 dda5c81dbf88549ade7aaaf352a261c7d638f045
#回退流程相关
6个文件已修改
125 ■■■■■ 已修改文件
src/main/java/com/zy/crm/manager/controller/PlanController.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/entity/Plan.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/PlanMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/businessTrip/businessTripOther.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/plan/plan.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/plan/plan.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/crm/manager/controller/PlanController.java
@@ -33,6 +33,7 @@
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
@@ -152,6 +153,8 @@
        PlanType planType = planTypeService.selectById(plan.getPlanType());
        User planLeader = planTypeService.findPlanLeader(planType);
        plan.setSettleMsg(JSON.toJSONString(SettleDto.init(plan, manager, planLeader)));
        plan.setDirector(planLeader.getId());
        if (!planService.insert(plan)) {
            throw new CoolException("保持失败,请重试");
@@ -417,6 +420,7 @@
                if (Cools.isEmpty(plannerId)) {
                    return R.error("指定规划员不能为空");
                }
                plan.setDirector(plannerId);
                User planner = userService.selectById(plannerId);
                // 修改 settle 步骤数据
                List<SettleDto> list = JSON.parseArray(plan.getSettleMsg(), SettleDto.class);
@@ -427,7 +431,11 @@
                            break;
                        case 2:
                            dto.setCurr(Boolean.TRUE);
                            dto.setMsg("售前组长" + planLeader.getNickname() + "审批通过");
                            if (Cools.isEmpty(dto.getMsg())){
                                dto.setMsg("售前组长" + planLeader.getNickname() + "审批通过");
                            }else {
                                dto.setMsg(dto.getMsg()+" ————————————————— "+DateUtils.convert(new Date())+" "+"售前组长" + planLeader.getNickname() + "审批通过");
                            }
                            dto.setTime(DateUtils.convert(new Date()));
                            break;
                        case 3:
@@ -472,6 +480,8 @@
                }
                // 业务员
                User salesman = userService.selectById(plan.getUserId());
                plan.setDirector(salesman.getId());
                // 修改 settle 步骤数据
                List<SettleDto> list0 = JSON.parseArray(plan.getSettleMsg(), SettleDto.class);
                for (SettleDto dto : list0) {
@@ -481,7 +491,11 @@
                            break;
                        case 3:
                            dto.setCurr(Boolean.TRUE);
                            dto.setMsg("规划员" + plannerUser.getNickname() + "审批通过");
                            if (Cools.isEmpty(dto.getMsg())){
                                dto.setMsg("规划员" + plannerUser.getNickname() + "审批通过");
                            }else {
                                dto.setMsg(dto.getMsg()+" ————————————————— "+DateUtils.convert(new Date())+" "+"规划员" + plannerUser.getNickname() + "审批通过");
                            }
                            dto.setTime(DateUtils.convert(new Date()));
                            break;
                        case 4:
@@ -517,7 +531,11 @@
                            break;
                        case 4:
                            dto.setCurr(Boolean.TRUE);
                            dto.setMsg("业务员" + salesman0.getNickname() + "审批通过");
                            if (Cools.isEmpty(dto.getMsg())){
                                dto.setMsg("业务员" + salesman0.getNickname() + "审批通过");
                            }else {
                                dto.setMsg(dto.getMsg()+" ————————————————— "+DateUtils.convert(new Date())+" "+"业务员" + salesman0.getNickname() + "审批通过");
                            }
                            dto.setTime(DateUtils.convert(new Date()));
                            break;
                        default:
@@ -541,6 +559,47 @@
        return R.ok("审批成功");
    }
    @PostMapping(value = "/plan/approvalEnd/auth")
    @ManagerAuth(memo = "拒绝申请单")
    public R approvalEnd(@RequestParam Long planId,
                         @RequestParam(required = false) Long plannerId) {
        Plan plan = planService.selectById(planId);
        Date now = new Date();
        Long directorId = plan.getDirector();
        User director = userService.selectById(directorId);
        if (!director.getId().equals(getUserId())){
            return R.error("抱歉,您没有审核的权限");
        }
        List<SettleDto> planDtos = JSON.parseArray(plan.getSettleMsg(), SettleDto.class);
        List<SettleDto> planDtoList = new ArrayList<>();
        boolean sign = true;
        for (SettleDto dto : planDtos) {
            if (sign && dto.getUserId().equals(directorId) && plan.getSettle()+1==dto.getStep()){
                if (Cools.isEmpty(dto.getMsg())){
                    dto.setMsg(DateUtils.convert(now)+" "+director.getNickname()+"回退审批");
                }else {
                    dto.setMsg(dto.getMsg()+" ————————————————— "+DateUtils.convert(now)+" "+director.getNickname()+"回退审批");
                }
                sign = false;
            }
            if (sign){
                dto.setMsg(dto.getMsg()+" ————————————————— "+DateUtils.convert(now)+" "+director.getNickname()+"回退审批");
            }
            planDtoList.add(dto);
        }
        plan.setStatus(0);
        plan.setStep(1);
        plan.setSettle(1);
        PlanType planType = planTypeService.selectById(plan.getPlanType());
        User planLeader = planTypeService.findPlanLeader(planType);
        plan.setDirector(planLeader.getId());
        plan.setSettleMsg(JSON.toJSONString(planDtoList));
        planService.updateById(plan);
        return R.ok("回退成功");
    }
    @PostMapping(value = "/plan/planner/list/auth")
    @ManagerAuth
    public R plannerList(@RequestParam Long planId){
src/main/java/com/zy/crm/manager/entity/Plan.java
@@ -246,6 +246,12 @@
    @ApiModelProperty(value= "业务员联系方式")
    private String userXmlSelPhone;
    /**
     * 节点负责人
     */
    @ApiModelProperty(value= "节点负责人")
    private Long director;
    public Plan() {}
    public String getHostId$(){
@@ -257,6 +263,16 @@
        return null;
    }
    public String getDirector$(){
        if (this.director==null) return "";
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.director);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getDeptId$(){
        DeptService service = SpringUtils.getBean(DeptService.class);
        Dept dept = service.selectById(this.deptId);
src/main/resources/mapper/PlanMapper.xml
@@ -35,6 +35,7 @@
        <result column="update_time" property="updateTime" />
        <result column="memo" property="memo" />
        <result column="user_xml_sel_phone" property="userXmlSelPhone" />
        <result column="director" property="director" />
    </resultMap>
src/main/webapp/static/js/businessTrip/businessTripOther.js
@@ -99,7 +99,7 @@
            ,{field: 'updateTime$', align: 'center',title: '更新时间',hide: false,width: 125}
            ,{field: 'updateId$', align: 'center',title: '更新人员',hide: false}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:240}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:280}
        ]],
        request: {
            pageName: 'curr',
src/main/webapp/static/js/plan/plan.js
@@ -171,7 +171,7 @@
            ,{field: 'updateTime$', align: 'left',title: '修改时间', hide: true}
            ,{field: 'memo', align: 'left',title: '注释', hide: true}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width: 280}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width: 340}
        ]],
        request: {
            pageName: 'curr',
@@ -531,6 +531,17 @@
                    }
                });
                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;
            case 'edit':
                showEditModel(data);
                break;
@@ -657,6 +668,33 @@
        })
    }
    function approvalEnd(planId, plannerId, dIdx) {
        let loadIndex = layer.load(2);
        $.ajax({
            url: baseUrl+"/plan/approvalEnd/auth",
            headers: {'token': localStorage.getItem('token')},
            data: {
                planId: planId,
                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 showEditModel(mData) {
        let loadIndex = layer.load(2);
src/main/webapp/views/plan/plan.html
@@ -135,6 +135,7 @@
<script type="text/html" id="operate">
    {{# if (d.settle == 1 || d.settle == 2 || d.settle == 3) { }}
        <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="uploadLink">附件</a>
    {{# if (d.settle == 1) { }}