crm添加营销机会

crm添加营销机会

在这里插入图片描述

思路分析:

1.service接口调用dao层方法

2.sevice实现类继承接口方法

3.控制层调用service层方法返回baseresult

1.service层接口

package com.shsxt.crm.sales.service;

import com.shsxt.crm.base.BaseService;
import com.shsxt.crm.sales.pojo.SaleChance;

/**
 * 营销机会管理service
 */
public abstract class SaleChanceService extends BaseService<SaleChance> {
    /**
     * 添加或修改营销机会
     *
     * @param saleChance
     * @param userId
     */
    public abstract void saveOrUpdateSaleChance(SaleChance saleChance, Integer userId);
}

2.sevice实现类继承接口方法

package com.shsxt.crm.sales.service.impl;

import com.shsxt.crm.base.constants.CrmConstants;
import com.shsxt.crm.base.util.AssertUtil;
import com.shsxt.crm.sales.dao.SaleChanceMapper;
import com.shsxt.crm.sales.pojo.SaleChance;
import com.shsxt.crm.sales.service.SaleChanceService;
import com.shsxt.crm.system.pojo.User;
import com.shsxt.crm.system.service.UserServiceI;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * 营销机会管理service实现
 * Created by Administrator on 2019/8/29.
 */
@Service
public class SaleChanceServiceImpl extends SaleChanceService {

    @Autowired
    private SaleChanceMapper saleChanceMapper;

    @Autowired
    private UserServiceI userServiceI;
    /**
     * 添加或修改营销机会管理
     *
     * @param saleChance
     * @param userId
     */
    @Override
    public void saveOrUpdateSaleChance(SaleChance saleChance, Integer userId) {
        //校验参数
        AssertUtil.isTrue(StringUtils.isBlank(saleChance.getCustomerName()), "客户空");
        AssertUtil.isTrue(StringUtils.isBlank(saleChance.getLinkMan()), "联系人能为空");
        AssertUtil.isTrue(StringUtils.isBlank(saleChance.getLinkPhone()), "电话为空");

        //先判断是否有分配人
        String assignMan = saleChance.getAssignMan();
        if (StringUtils.isNotBlank(assignMan)){
            saleChance.setState(1);//1代表以分配
            saleChance.setAssignTime(new Date());//分配时间
        }else{
            saleChance.setState(0);//0代表未分配
        }
        User user=userServiceI.selectUserById(userId);
        //判断
        AssertUtil.isNotLogin(null==user);
        saleChance.setCreateMan(user.getUserName());//创建人
        saleChance.setCreateDate(new Date());
        saleChance.setUpdateDate(new Date());
        //添加营销机会
    	AssertUtil.isTrue(saleChanceMapper.save(saleChance<1,
                                            CrmConstants.OPS_FAILED_MESSAGE);

    }
}

3.控制层

package com.shsxt.crm.sales.controller;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.shsxt.crm.base.BaseController;
import com.shsxt.crm.base.BaseResult;
import com.shsxt.crm.base.util.Base64Util;
import com.shsxt.crm.base.util.CookieUtil;
import com.shsxt.crm.sales.pojo.SaleChance;
import com.shsxt.crm.sales.query.SaleChanceQuery;
import com.shsxt.crm.sales.service.SaleChanceService;
import org.omg.CORBA.Request;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * 营销机会Contoller
 * Created by Administrator on 2019/8/29.
 */
@Controller
@RequestMapping("/saleChance")
public class SaleChanceController extends BaseController {

    @Autowired
    private SaleChanceService saleChanceService;

    /**
     * 跳转页面
     *
     * @return
     */
    @RequestMapping("/index")
    public String index() {
        return "sale_chance";
    }

    /**
     * 分页查询营销机会
     *
     * @param query
     * @return
     */
    @RequestMapping("/selectSaleChanceByParams")
    @ResponseBody
    public Map<String, Object> selectSaleChanceByParams(SaleChanceQuery query,
                                     @RequestParam(defaultValue = "1") Integer page,
                                     @RequestParam(defaultValue = "10") Integer rows) {
        query.setPageNum(page);
        query.setPageSize(rows);
        return saleChanceService.selectForPage(query);
    }

    /**
     * 添加或修改营销机会
     *
     * @param saleChance
     * @return
     */
    @RequestMapping("/saveOrUpdateSaleChance")
    @ResponseBody
    public BaseResult saveOrUpdateSaleChance(SaleChance saleChance, HttpServletRequest request) {
        //获取cookie中的用户id信息
        String userIdStr = CookieUtil.getCookieValue(request, "userIdStr");
        //用户id解密
        Integer userId= Integer.valueOf(Base64Util.decoder(userIdStr));
        //添加或修改
        saleChanceService.saveOrUpdateSaleChance(saleChance, userId);
        return BaseResult.success();
    }
}

页面操作sale_chance.js

//格式化的处理(分配状态)
function formatterState(value,row,index){
    if(0==value){
        return"未分配";
    }
    if(1==value){
        return"已分配";
    }
}
//客户开发状态
function formatterDevResult(value,row,index){
    if(0==value){
        return"未开发";
    }
    if(1==value){
        return"开发中";
    }
    if(2==value){
        return"开发成功";
    }
    if(3==value){
        return"开发失败";
    }
}
//进入页面执行,根据开发状态返回不同的颜色
$(function () {
    $('#dg').datagrid({
        rowStyler: function (index, row) {
            // 获取开发状态字段的值
            var devResult = row.devResult;
            if (0 == devResult) {
                return "background-color:#5bc0de;"; // 蓝色
            } else if (1 == devResult) {
                return "background-color:#f0ad4e;"; // 黄色
            } else if (2 == devResult) {
                return "background-color:#5cb85c;"; // 绿色
            } else if (3 == devResult) {
                return "background-color:#d9534f;"; // 红色
            }
        }
    });
});
//搜索
function querySaleChancesByParams() {
    $('#dg').datagrid('load', {
        customerName: $('#customerName').val(),
        state: $('#state').combobox('getValue'),
        devResult: $('#devResult').combobox('getValue'),
        createDate: $('#time').datebox('getValue')
    });
}
//打开添加对话框
function openAddSaleChacneDialog(){
    //清空表单
    $("#fm").form("clear");
    $("#dlg").dialog("open");
}
//关闭对话框
function closeDlg() {
    $("#dlg").dialog("close");
}

//添加或修改营销机会
function saveOrUpdateSaleChance() {
    $('#fm').form('submit', {
        url: ctx + '/saleChance/saveOrUpdateSaleChance',
        onSubmit: function () {
            return $(this).form('validate');
        },
        success: function (data) {
            //返回的是json格式的字符串,转成json
            var result=JSON.parse(data);
            $.messager.show({
                title: '系统提示',
                msg: result.message,
                timeout: 2000,
                showType: 'slide'
            });
            if (200 == result.code) {
                $("#fm").form("clear"); // 清空表单
                $("#dlg").dialog("close");// 关闭对话框
                $('#dg').datagrid('load');// 重新加载表单
            }
        }
    })
}

要点:处理分配人(只有客户经理这个角色才可以当分配人)

分配人从数据库中抓取数据,返回到前台选择,

分析:1.sql,3表联查,查出用户角色(用户表,角色表,中间表用户角色表)

select
    u.id,
    u.true_name trueName
from
    t_user u
left join t_user_role ur on u.id=ur.user_id
left join t_role r on r.id=ur.role_id
    where
    r.role_name='客户经理'

2.在用户模块里操作UserMapper.xml

<!--查询所有客户经理-->
  <select id="selectCustomerLists" resultType="map">
    select
    	u.id,
    	u.true_name trueName
    from
    	t_user u
    left join t_user_role ur on u.id=ur.user_id
    left join t_role r on r.id=ur.role_id
    where
    	r.role_name='客户经理'
  </select>

3.dao层调用sql

package com.shsxt.crm.system.dao;

import com.shsxt.crm.system.pojo.User;

import java.util.List;
import java.util.Map;

public interface UserMapper {

    List<Map<Object,Object>>selectCustomerLists();//查询所有客户经理

    int deleteByPrimaryKey(Integer id); //根据主键删除

    int insert(User record);//插入数据,必须满足所有的字段

    int insertSelective(User record);//插入数据,选择插入

    User selectByPrimaryKey(Integer id); //根据主键查询

    int updateByPrimaryKeySelective(User record); //根据主键选择修改

    int updateByPrimaryKey(User record);//根据主键修改所有字段

    User selectUserByUserName(String userName); //根据用户名查询用户


}

4.用户service层接口UserServiceI.java

package com.shsxt.crm.system.service;

import com.shsxt.crm.system.model.UserModel;
import com.shsxt.crm.system.pojo.User;

import java.util.List;
import java.util.Map;

/**
 * 用户service
 * Created by Administrator on 2019/8/26.
 */
public interface UserServiceI {

    /**
     * 根据用户名查询用户
     * @param user
     * @return
     */
    UserModel userLogin(User user,String rememberMe);


    /**
     * 修改密码
     */
    void updateUserPwd(Integer id,String oldPassword,String newPassword,String confirmPassword);

    /**
     * 根据主键查询id
     * @param id
     * @return
     */
    User selectUserById(Integer id);

    /**
     * 查询所有客户经理
     * @return
     */
    List<Map<Object,Object>> selectCustomerLists();
}

userservice层实现类

package com.shsxt.crm.system.service.impl;

import com.shsxt.crm.base.util.AssertUtil;
import com.shsxt.crm.base.util.Base64Util;
import com.shsxt.crm.base.util.Md5Util;
import com.shsxt.crm.system.dao.UserMapper;
import com.shsxt.crm.system.model.UserModel;
import com.shsxt.crm.system.pojo.User;
import com.shsxt.crm.system.service.UserServiceI;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * 用户service
 * Created by Administrator on 2019/8/26.
 */
@Service
public class UserServiceImpl implements UserServiceI {

    @Autowired
    private UserMapper userMapper;

    /**
     * 根据用户名查询用户===优化
     *
     * @return
     */
    @Override
    public UserModel userLogin(User user, String rememberMe) {
        /**
         * 1.校验数据的合法性
         * 2.根据用户名查询用户
         * 3.密码对比
         */
        String userName = user.getUserName();
        String userPwd = user.getUserPwd();
        //1.校验数据合法性
        //校验用户名
        //优化,增强工具类StringUtils.isBlank()
        AssertUtil.isTrue(StringUtils.isBlank(userName), "用户名不能为空");
        AssertUtil.isTrue(StringUtils.isBlank(userPwd), "密码不能为空");
        //用户名存在,根据用户名查询用户信息
        User u = userMapper.selectUserByUserName(user.getUserName().trim());

        //判断用户是否存在
        AssertUtil.isTrue(null == u, "该用户名不存在");
        //用户存在,比对密码
        AssertUtil.isTrue(!u.getUserPwd().equals(Md5Util.encode(userPwd)), "密码输入错误");
        //登录成功,构建返回对象
        return buildUserModel(u, userPwd, rememberMe);
    }

    /**
     * 修改密码
     *
     * @param id
     * @param oldPassword
     * @param newPassword
     * @param confirmPassword
     */
    @Override
    public void updateUserPwd(Integer id, String oldPassword, String newPassword, String confirmPassword) {
        //数据的合法性校验
        AssertUtil.isTrue(StringUtils.isBlank(oldPassword), "原密码不可以为空");
        AssertUtil.isTrue(StringUtils.isBlank(newPassword), "新密码不可以为空");
        //直接比对两次密码
        AssertUtil.isTrue(!newPassword.equals(confirmPassword), "两次密码不一致");

        //根据主键查询用户
        User user = userMapper.selectByPrimaryKey(id);
        AssertUtil.isTrue(null == user, "用户未登录或不存在");
        //密码比对
        AssertUtil.isTrue(!user.getUserPwd().equals(Md5Util.encode(oldPassword)), "原密码输入错误");
        //根据主键修改用户密码
        user.setUserPwd(Md5Util.encode(newPassword));
        AssertUtil.isTrue(userMapper.updateByPrimaryKeySelective(user) < 1, "修改密码失败");

    }

    /**
     * 根据主键查询id
     * @param id
     * @return
     */
    @Override
    public User selectUserById(Integer id) {
        return userMapper.selectByPrimaryKey(id);
    }

    /**
     * 查询所有客户经理
     * @return
     */
    @Override
    public List<Map<Object, Object>> selectCustomerLists() {
        return userMapper.selectCustomerLists();
    }

    //构建返回对象模型
    private UserModel buildUserModel(User user, String userPwd, String rememberMe) {
        UserModel userModel = new UserModel();
        //拷贝属性,将user属性拷贝到userModel
        BeanUtils.copyProperties(user, userModel);
        //处理加密的属性,将加密的属性放入对象模型中
        userModel.setUserIdStr(Base64Util.encoder(String.valueOf(user.getId())));
        //前台传值不为空时
        if (StringUtils.isNotBlank(rememberMe))
            //如果记住我有值,则将密码放入对象模型中
            userModel.setUserInfo(Base64Util.encoder(userPwd));
        return userModel;
    }
}

重点

SaleChanceServiceImpl.java掉用户模块的查询方法

package com.shsxt.crm.sales.service.impl;

import com.shsxt.crm.base.constants.CrmConstants;
import com.shsxt.crm.base.util.AssertUtil;
import com.shsxt.crm.sales.dao.SaleChanceMapper;
import com.shsxt.crm.sales.pojo.SaleChance;
import com.shsxt.crm.sales.service.SaleChanceService;
import com.shsxt.crm.system.pojo.User;
import com.shsxt.crm.system.service.UserServiceI;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * 营销机会管理service实现
 * Created by Administrator on 2019/8/29.
 */
@Service
public class SaleChanceServiceImpl extends SaleChanceService {

    @Autowired
    private SaleChanceMapper saleChanceMapper;

    @Autowired
    private UserServiceI userServiceI;
    /**
     * 添加或修改营销机会管理
     *
     * @param saleChance
     * @param userId
     */
    @Override
    public void saveOrUpdateSaleChance(SaleChance saleChance, Integer userId) {
        //校验参数
        AssertUtil.isTrue(StringUtils.isBlank(saleChance.getCustomerName()), "客户名称为空");
        AssertUtil.isTrue(StringUtils.isBlank(saleChance.getLinkMan()), "联系人不能为空");
        AssertUtil.isTrue(StringUtils.isBlank(saleChance.getLinkPhone()), "联系电话为空");

        //先判断是否有分配人
        String assignMan = saleChance.getAssignMan();
        if (StringUtils.isNotBlank(assignMan)){
            saleChance.setState(1);//1代表以分配
            saleChance.setAssignTime(new Date());//分配时间
        }else{
            saleChance.setState(0);//0代表未分配
        }
        User user=userServiceI.selectUserById(userId);
        //判断
        AssertUtil.isNotLogin(null==user);
        saleChance.setCreateMan(user.getUserName());//创建人
        saleChance.setCreateDate(new Date());
        saleChance.setUpdateDate(new Date());
        //添加营销机会
        AssertUtil.isTrue(saleChanceMapper.save(saleChance)<1, CrmConstants.OPS_FAILED_MESSAGE);

    }
}

UserController.java

package com.shsxt.crm.system.controller;

import com.shsxt.crm.base.BaseController;
import com.shsxt.crm.base.BaseResult;
import com.shsxt.crm.base.util.Base64Util;
import com.shsxt.crm.base.util.CookieUtil;
import com.shsxt.crm.system.model.UserModel;
import com.shsxt.crm.system.pojo.User;
import com.shsxt.crm.system.service.UserServiceI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 用户controller
 * Created by Administrator on 2019/8/26.
 */
@Controller
@RequestMapping("/user")
public class UserController extends BaseController{

    @Autowired
    private UserServiceI userServiceI;

    /**
     * 用户登录
     *
     * @param request
     * @return
     */
    @RequestMapping("/login")
    @ResponseBody
    public BaseResult userLogin(HttpServletRequest request, User user, String rememberMe) {
        UserModel userModel = userServiceI.userLogin(user, rememberMe);
        //将用户信息存入session
        request.getSession().setAttribute("user", userModel);
        return BaseResult.success("登录成功",userModel);
    }

    /**
     * 安全退出
     *
     * @param request
     * @return
     */
    @RequestMapping("/logout")
    public String userLogout(HttpServletRequest request) {
        //清除session信息
        request.getSession().removeAttribute("user");
        return "login";
    }

    @RequestMapping("/updateUserPwd")
    @ResponseBody
    public BaseResult updateUserPwd(HttpServletRequest request, String oldPassword,
                                    String newPassword, String confirmPassword) {
        //从cookie获取用户加密id
        String userIdStr = CookieUtil.getCookieValue(request, "userIdStr");
        //将获取的加密id解密
        Integer id = Integer.valueOf(Base64Util.decoder(userIdStr));
        //修改密码
        userServiceI.updateUserPwd(id, oldPassword, newPassword, confirmPassword);
        return BaseResult.success("修改成功");
    }

    /**
     * 查询所有客户经理信息
     * @return
     */
    @RequestMapping("/selectCustomerLists")
    @ResponseBody
    public List<Map<Object,Object>> selectCustomerLists(){
        return userServiceI.selectCustomerLists();
    }
}

打开添加的表格

<html>
<head>
<#include "common.ftl" >
    <script type="text/javascript" src="${ctx}/js/sale.chance.js"></script>
</head>
<body style="margin: 1px">
<table id="dg" class="easyui-datagrid"
       pagination="true" rownumbers="true"
       url="${ctx}/saleChance/selectSaleChanceByParams" fit="true" toolbar="#tb">
    <thead>
    <tr>
        <th field="cb" checkbox="true" align="center"></th>
        <th field="id" width="50" align="center">编号</th>
        <th field="chanceSource" width="200" align="center">机会来源</th>
        <th field="customerName" width="50" align="center">客户名称</th>
        <th field="cgjl" width="50" align="center">成功几率</th>
        <th field="overview" width="200" align="center">概要</th>
        <th field="linkMan" width="100" align="center">联系人</th>
        <th field="linkPhone" width="100" align="center">联系电话</th>
        <th field="description" width="200" align="center">机会描述</th>
        <th field="createMan" width="100" align="center">创建人</th>
        <th field="createDate" width="100" align="center">创建时间</th>
        <th field="trueName" width="200" align="center">指派人</th>
        <th field="assignTime" width="200" align="center">指派时间</th>
        <th field="state" width="100" align="center" formatter="formatterState">分配状态</th>
        <th field="devResult" width="200" align="center" formatter="formatterDevResult">客户开发状态</th>
    </tr>
    </thead>
</table>
<div id="tb">
    <a href="javascript:openAddSaleChacneDialog()" class="easyui-linkbutton" iconCls="icon-save" plain="true">添加</a>
    <a href="javascript:openModifySaleChanceDialog()" class="easyui-linkbutton" iconCls="icon-edit" plain="true">更新</a>
    <a href="javascript:deleteSaleChance()" class="easyui-linkbutton" iconCls="icon-remove" plain="true">删除</a>
    <br/>
    客户名称:<input type="text" id="customerName"/>
    状态:
    <select class="easyui-combobox" name="state" id="state" panelHeight="auto">
        <option value="">全部</option>
        <option value="0">未分配</option>
        <option value="1">已分配</option>
    </select>
    开发结果:
    <select class="easyui-combobox" id="devResult" panelHeight="auto">
        <option value="">全部</option>
        <option value="0">未开发</option>
        <option value="1">开发中</option>
        <option value="2">开发成功</option>
        <option value="3">开发失败</option>
    </select>
    创建时间:<input id="time" type="text" class="easyui-datebox"></input>
    <a href="javascript:querySaleChancesByParams()" class="easyui-linkbutton" iconCls="icon-search" plain="true">搜索</a>
</div>

<div id="dlg" class="easyui-dialog" title="添加营销记录" closed="true"
     style="width: 500px;height:300px" buttons="#bt">
    <form id="fm" method="post">
        <table style="font-size: 12px;">
            <tr>
                <td>机会来源:</td>
                <td><input type="text" id="chanceSource" name="chanceSource"/></td>
            </tr>
            <tr>
                <td>客户名称:</td>
                <td><input type="text" id="customerName02" class="easyui-validatebox" name="customerName" required="required"/></td>
            </tr>
            <tr>
                <td>成功几率:</td>
                <td><input type="text" id="cgjl" name="cgjl"/></td>
            </tr>
            <tr>
                <td>联系人:</td>
                <td><input type="text" name="linkMan" id="linkMan" class="easyui-validatebox" required="required"/></td>
            </tr>
            <tr>
                <td>联系电话:</td>
                <td><input type="text" name="linkPhone" id="linkPhone" class="easyui-validatebox" required="required"/></td>
            </tr>
            <tr>
                <td>描述信息:</td>
                <td><input type="text" id="description" name="description"/></td>
            </tr>
            <tr>
                <td>分配人:</td>
                <td>
                   <#--<input type="text" id="assignMan" name="assignMan"/>-->

                    <input class="easyui-combobox" id="assignMan" name="assignMan"
                           valueField="id" textField="trueName" editable="false"
                           url="${ctx}/user/selectCustomerLists" panelHeight="auto"/>

                </td>
            </tr>
        </table>
        <input name="id" id="id" type="hidden"/>
    </form>
</div>
<div id="bt">
    <a href="javascript:saveOrUpdateSaleChance()" class="easyui-linkbutton" plain="true" iconCls="icon-save">保存</a>
    <a href="javascript:closeDlg()" class="easyui-linkbutton" plain="true" iconCls="icon-cancel">取消</a>
</div>


</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值