Crm项目总结-营销模块-机会数据管理

Crm项目总结

营销模块-机会数据管理

机会数据管理业务场景

​ 为了提高客户购买公司产品的几率,对于客户的咨询需求(新产品 ,新客户转型),系统将该数据录入到数据库,后续对客户进行开发操作,录入的每一条数据成为机会数据,这些数据后续都有可能给公司产生效益。

机会数据管理表结构

在这里插入图片描述

这里机会数据管理主要维护主表 t_sale_chance (营销机会表)

机会管理模块功能实现

机会管理模块实现效果图

机会数据展示

在这里插入图片描述

机会数据添加

在这里插入图片描述

机会数据更新

在这里插入图片描述

机会数据删除

在这里插入图片描述

机会数据管理数据查询实现

前端EasyUI 表格数据Json格式

在这里插入图片描述

后端机会数据查询接口实现
SaleChanceMapper.Java & SaleChanceMapper.xml
  • SaleChanceMapper.xml
<select id="selectByParams" parameterType="com.shsxt.crm.query.SaleChanceQuery" resultType="com.shsxt.crm.vo.SaleChance">
      select <include refid="Base_Column_List"/>
      from t_sale_chance
      <where>
           is_valid=1
           <if test="null!=customerName and customerName !='' ">
               and customer_name like concat('%',#{customerName},'%')
           </if>
           <if test="null !=createMan and createMan !=''">
               and create_man=#{createMan}
           </if>
           <if test="null !=state and state !=''">
              and state =#{state}
           </if>
      </where>
  </select>
  • SaleChanceMapper.java
public interface SaleChanceMapper extends BaseMapper<SaleChance,Integer>{

}

这里SaleChanceMapper 继承BaseMapper 接口,BaseMapper 接口中定义了基本的CRUD方法

SaleChanceService.java

提供多提交查询方法 方法返回Map 包含 total ,rows

@Service
public class SaleChanceService extends BaseService<SaleChance, Integer> {


    public Map<String, Object> querySaleChancesByParams(SaleChanceQuery saleChanceQuery) {
        Map<String, Object> result = new HashMap<String, Object>();
        PageHelper.startPage(saleChanceQuery.getPage(), saleChanceQuery.getRows());
        PageInfo<SaleChance> pageInfo = new PageInfo<>(selectByParams(saleChanceQuery));
        result.put("total", pageInfo.getTotal());
        result.put("rows", pageInfo.getList());
        return result;
    }
}
SaleChanceController.java
@Controller
@RequestMapping("sale_chance")
public class SaleChanceController extends BaseController {

    @Resource
    private SaleChanceService saleChanceService;

    @RequestMapping("list")
    @ResponseBody
    public Map<String,Object> querySaleChancesByParams(SaleChanceQuery saleChanceQuery){
        return  saleChanceService.querySaleChancesByParams(saleChanceQuery);
    }
  • SaleChanceQuery 查询条件
public class SaleChanceQuery extends BaseQuery {
    // 客户名
    private String customerName;
    // 创建人
    private String createMan;
    // 分配状态
    private String state;
    }

public class BaseQuery {
    private Integer page=1;
    private Integer rows=10;
}
机会数据查询前端实现
机会数据视图模板定义
<table id="dg" title="销售机会信息管理" class="easyui-datagrid"
       fitColumns="true" pagination="true" rownumbers="true"
       url="${ctx}/sale_chance/list" 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="assignMan" 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">
        <div>
                <a href="javascript:openSaleChanceAddDialog()" class="easyui-linkbutton" iconCls="icon-add"
                   plain="true">创建</a>
                <a href="javascript:openSaleChanceModifyDialog()" class="easyui-linkbutton" iconCls="icon-edit"
                   plain="true">修改</a>
                <a href="javascript:deleteSaleChance()" class="easyui-linkbutton" iconCls="icon-remove"
                   plain="true">删除</a>
        </div>
            <div>
                客户名称: <input type="text" id="s_customerName" size="20"
                             onkeydown="if(event.keyCode==13) searchSaleChance()"/>
                创建人: <input type="text" id="s_createMan" size="20"
                            onkeydown="if(event.keyCode==13) searchSaleChance()"/>
                分配状态: <select class="easyui-combobox" id="s_state" editable="false" panelHeight="auto">
                    <option value="">请选择...</option>
                    <option value="0">未分配</option>
                    <option value="1">已分配</option>
                </select>
                <a href="javascript:searchSaleChance()" class="easyui-linkbutton" iconCls="icon-search"
                   plain="true">搜索</a>
    </div>

  • 列格式化
/*
  分配状态格式化
*/
function formatterState(value) {
    /**
     *  0-未分配
     *  1-已分配
     */
    if(value==0){
        return "未分配";
    }else if(value==1){
        return "已分配";
    }else{
        return "未知";
    }
}

/*
  开发状态格式化
*/
function formatterDevResult(value) {
    /**
     * 0-未开发
     * 1-开发中
     * 2-开发成功
     * 3-开发失败
     */
    if(value==0){
        return "未开发";
    }else if(value==1){
        return "开发中";
    }else if(value==2){
        return "开发成功";
    }else if(value==3){
        return "开发失败";
    }else {
        return "未知"
    }

}
机会数据管理查询事件添加
function searchSaleChance() {
    var customerName=$("#s_customerName").val();
    var createMan = $("#s_createMan").val();
    var state =$("#s_state").combobox("getValue");
    $("#dg").datagrid("load",{
        customerName:customerName,
        createMan:createMan,
        state:state
    })
}

机会据管理数据添加实现

机会数据添加思路
/**
 * 1.参数校验
 *   customerName:非空
 *   linkMan:非空
 *   linkPhone:非空 11位手机号
 * 2.设置相关参数默认值
 *      state:默认未分配  如果选择分配人  state 为已分配
 *      assignTime:如果  如果选择分配人   时间为当前系统时间
 *      devResult:默认未开发   如果选择分配人  devResult为开发中
 *      isValid :默认有效
 *      createDate updateDate:默认当前系统时间
 *  3.执行添加 判断结果
 */
机会数据后端添加代码实现
  • SaleChanceService.java
public void saveSaleChance(SaleChance saleChance) {
    checkParams(saleChance.getCustomerName(), saleChance.getLinkMan(), saleChance.getLinkPhone());
    saleChance.setState(StateStatus.UNSTATE.getType());
    saleChance.setDevResult(DevResult.UNDEV.getStatus());
    if(StringUtils.isNotBlank(saleChance.getAssignMan())){
        saleChance.setState(StateStatus.STATED.getType());
        saleChance.setDevResult(DevResult.DEVING.getStatus());
        saleChance.setAssignTime(new Date());
    }
    saleChance.setIsValid(1);
    saleChance.setCreateDate(new Date());
    saleChance.setUpdateDate(new Date());
    AssertUtil.isTrue(insertSelective(saleChance)<1,"机会数据添加失败!");
}

private void checkParams(String customerName, String linkMan, String linkPhone) {
    AssertUtil.isTrue(StringUtils.isBlank(customerName),"请输入客户名!");
    AssertUtil.isTrue(StringUtils.isBlank(linkMan),"请输入联系人!");
    AssertUtil.isTrue(StringUtils.isBlank(linkPhone),"请输入联系电话!");
    AssertUtil.isTrue(!(PhoneUtil.isMobile(linkPhone)),"手机号格式不合法!");
}
  • SaleChanceController.java
@RequestMapping("save")
@ResponseBody
public ResultInfo saveSaleChance(SaleChance saleChance){
  saleChance.setCreateMan(userService.selectByPrimaryKey(LoginUserUtil.releaseUserIdFromCookie(request)).getTrueName());
    saleChanceService.saveSaleChance(saleChance);
    return success("机会数据添加成功");
}
机会数据管理添加前端实现
添加对话框表单&事件定义
  • 添加表单
<div id="dlg" class="easyui-dialog" style="width:700px;height:400px;padding: 10px 20px"
     closed="true" buttons="#dlg-buttons">
    <form id="fm" method="post">
        <table cellspacing="8px">
            <tr>
                <td>客户名称:</td>
                <td><input type="text" id="customerName" name="customerName" class="easyui-validatebox"
                           required="true"/> <font color="red">*</font></td>
                <td></td>
                <td>机会来源</td>
                <td><input type="text" id="chanceSource" name="chanceSource"/></td>
            </tr>
            <tr>
                <td>联系人:</td>
                <td><input type="text" id="linkMan" name="linkMan" class="easyui-validatebox" required="true"/> <font
                            color="red">*</font></td>
                <td></td>
                <td>联系电话:</td>
                <td><input type="text" id="linkPhone" name="linkPhone" class="easyui-validatebox" required="true"/><font
                            color="red">*</font></td>
            </tr>
            <tr>
                <td>成功几率(%):</td>
                <td><input type="text" id="cgjl" name="cgjl"/></td>
                <td colspan="3"></td>
            </tr>
            <tr>
                <td>概要:</td>
                <td colspan="4"><input type="text" id="overview" name="overview" style="width: 420px"/></td>
            </tr>
            <tr>
                <td>机会描述:</td>
                <td colspan="4">
                    <textarea rows="5" cols="50" id="description" name="description"></textarea>
                </td>
            </tr>
            <tr>
                <td>指派给:</td>
                <td><input class="easyui-combobox" id="assignMan" name="assignMan"
                           data-options="panelHeight:'auto',editable:false,valueField:'trueName',textField:'trueName',url:'${ctx}/user/queryCustomerManager.do'"/>
                </td>
            </tr>
        </table>
        <input name="id" type="hidden"/>
    </form>
</div>
<div id="dlg-buttons">
    <a href="javascript:saveOrUpdateSaleChance()" class="easyui-linkbutton" iconCls="icon-ok">保存</a>
    <a href="javascript:closeSaleChanceDialog()" class="easyui-linkbutton" iconCls="icon-cancel">关闭</a>
</div>
  • 添加按钮点击事件
function openSaleChanceAddDialog() {
    $("#dlg").dialog("open").dialog("setTitle","机会数据添加");
}
添加表单提交核心代码

function closeSaleChanceDialog() {
    $("#dlg").dialog("close");
}

/**
 * 清空表单信息
 */
function clearFormData() {
    $("#customerName").val("");
    $("#chanceSource").val("");
    $("#linkMan").val("");
    $("#linkPhone").val("");
    $("#cgjl").val("");
    $("#overview").val("");
    $("#assignMan").combobox("setValue","");
    $("input[name='id']").val("");
}


function saveOrUpdateSaleChance() {
    var url = ctx+"/sale_chance/save";
    if(!(isEmpty($("input[name='id']").val()))){
        url = ctx+"/sale_chance/update";
    }
    $("#fm").form("submit",{
        url:url,
        onSubmit:function () {
            return $("#fm").form("validate");
        },
        success:function (data) {
            data =JSON.parse(data);
            if(data.code==200) {
                closeSaleChanceDialog();
                searchSaleChance();
                clearFormData();
            }
        }
    })
}

机会数据管理数据更新

思路书写参考添加操作

机会数据管理数据删除操作

机会数据删除后端实现
  • SaleChanceController.java
@RequestMapping("delete")
@ResponseBody
public ResultInfo deleteSaleChance(Integer[] ids){
    saleChanceService.deleteBatch(ids);
    return success("机会数据删除成功");
}
  • SaleChanceMapper.xml
<update id="deleteBatch">
   update t_sale_chance
   set is_valid=0
   where id in
   <foreach collection="array" item="item" open="(" separator="," close=")">
     #{item}
   </foreach>
</update>
机会数据删除后端实现

添加删除按钮点击事件

function deleteSaleChance() {
    var rows=$("#dg").datagrid("getSelections");
    if(rows.length==0){
        $.messager.alert("来自crm","请选择待修改的机会数据!","error");
        return;
    }

    $.messager.confirm("来自crm","确定删除选中的记录?",function (r) {
        if(r){
            var ids= "ids=";
            for(var i=0;i<rows.length;i++){
                if(i<rows.length-1){
                    ids=ids+rows[i].id+"&ids=";
                }else {
                    ids=ids+rows[i].id
                }
            }

            $.ajax({
                type:"post",
                url:ctx+"/sale_chance/delete",
                data:ids,
                dataType:"json",
                success:function (data) {
                    if(data.code==200){
                        searchSaleChance();
                    }else{
                        $.messager.alert("来自crm",data.msg,"error");
                    }
                }
            })

        }
    })
     }
            }

            $.ajax({
                type:"post",
                url:ctx+"/sale_chance/delete",
                data:ids,
                dataType:"json",
                success:function (data) {
                    if(data.code==200){
                        searchSaleChance();
                    }else{
                        $.messager.alert("来自crm",data.msg,"error");
                    }
                }
            })

        }
    })
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值