好好编程-物流项目17【客户管理-新增客户】

简介: 好好编程-物流项目17【客户管理-新增客户】

客户管理

  本文来介绍下客户管理。不同角色对客户的操作不同,规则如下

image.png 创建对应的测试账号如下:image.png

新增客户

1.控制操作权限

  通过上面的规则理解我们发现,能够操作新增客户的角色有业务员和操作员,而管理员可以操作修改客户的业务员。这样能够看到“新增客户”菜单按钮的就只能是具有“业务员”和“操作员”角色的用户。所以如下设置。

left.jsp

<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro" %>
<shiro:hasAnyRoles name="业务员,操作员">
    <li><cite></cite><a href="/customer/customerUpdate" target="rightFrame">新增客户</a><i></i></li>
</shiro:hasAnyRoles>

image.png简单测试:admin登录看不到"新增客户"菜单:image.pngywy账号登录可以看到:image.png

2.服务器逻辑

定义常量类

image.png

/**
 * 常量工具类
 * @author 波波烤鸭
 *
 * dengpbs@163.com
 */
public class Constant {
  public static final String ROLE_SALESMAN = "业务员";
  public static final String ROLE_OPERATOR = "操作员";
  public static final String ROLE_ADMIN = "管理员";
  public static final String BASIC_COMMON_INTERVAL = "常用区间";
}

service层处理

ICustomerService定义

public interface ICustomerService {
  /**
   * 查询更新或者添加需要的信息
   */
  public void getUpdateInfo(Integer id,Model m);
}

CustomerServiceImpl中实现

@Service
public class CustomerServiceImpl implements ICustomerService {
  @Resource
  private CustomerMapper customerMapper;
  @Resource
  private IUserService userService;
  @Resource
  private IBasicService basicService;
  /**
   * 新增客户
   *    查询 所有的角色是业务员的用户
   *    查询 常用区间 基础数据
   * 修改客户
   *        查询 所有的角色是业务员的用户
   *    查询 常用区间 基础数据
   *    根据客户ID 查询详细信息
   */
  @Override
  public void getUpdateInfo(Integer id, Model m) {
    // 1.查询所有具有业务员角色的用户信息
    List<User> users = userService.queryUserByRoleName(Constant.ROLE_SALESMAN);
    // 2.查询 常用区间的基础数据
    List<BasicData> intervals = basicService.getBasicDataByParentName(Constant.BASIC_COMMON_INTERVAL);
    if(id!=null && id > 0){
      // 查询更新需要的数据
      Customer customer = customerMapper.selectByPrimaryKey(id);
      m.addAttribute("customer", customer);
    }
    m.addAttribute("users", users);
    m.addAttribute("intervals", intervals);
  }
}

查询所有具有业务员角色的用户信息

IUserService接口

/**
* 根据角色名称查询对应的用户信息
 * @param roleName
 * @return
 */
public List<User> queryUserByRoleName(String roleName);

UserServiceImpl实现

@Override
public List<User> queryUserByRoleName(String roleName) {
  return userMapper.queryUserByRoleName(roleName);
}

UserMapper接口定义

List<User> queryUserByRoleName(String roleName);

UserMapper.xml中实现

 <select id="queryUserByRoleName" resultMap="BaseResultMap">
  select *
  from t_user
  where user_id in (
    select user_id from t_user_role where role_id = (
      select role_id from t_role where role_name = #{param1}
    )
  )
 </select>

查询 常用区间的基础数据

IBasicService定义

/**
* 根据大类名称查询对应的小类
 * @param parentName
 * @return
 */
public List<BasicData> getBasicDataByParentName(String parentName);

实现

/**
 * 根据大类名称 查询该大类所属的所有的小类
 */
@Override
public List<BasicData> getBasicDataByParentName(String basicCommonInterval) {
  return basicMapper.getBasicDataByParentName(basicCommonInterval);
}

BasicDataMapper接口

List<BasicData> getBasicDataByParentName(String basicCommonInterval);

BasicDataMapper.xml

 <select id="getBasicDataByParentName" resultMap="BaseResultMap">
  select *
  from t_basicdata
  where parent_id in (
    select base_id from t_basicdata where base_name = #{param1}
  )
 </select>

controller层处理

 
         

添加页面效果

image.png

jsp页面内容:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link href="/css/style.css" rel="stylesheet" type="text/css" />
<link href="/css/select.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/js/jquery.idTabs.min.js"></script>
<script type="text/javascript" src="/js/select-ui.min.js"></script>
<script type="text/javascript">
$(document).ready(function(e) {
    $(".select1").uedSelect({
    width : 345       
  });
  $(".select2").uedSelect({
    width : 167  
  });
  $(".select3").uedSelect({
    width : 100
  });
});
</script>
</head>
<body>
  <div class="place">
    <span>位置:</span>
    <ul class="placeul">
      <li><a href="/">首页</a></li>
      <li><a href="/user/query">客户管理</a></li>
    </ul>
  </div>
  <div class="formbody">
    <div class="formtitle">
      <span>新增客户信息</span>
    </div>
    <form action="/customer/saveOrUpdate">
      <ul class="forminfo">
        <li><label>客户姓名</label>
          <input name="customerName"  type="text" class="dfinput" />
          <i></i>
        </li>
        <li><label>客户电话</label>
          <input name="mobilePhone" type="text" class="dfinput" />
        </li>
        <li><label>性别</label>
          <input type="radio" name="cSex" value="0" checked>&nbsp;男 
          <input type="radio" name="cSex" value="1">&nbsp;女
        </li>
        <li><label>电子邮箱</label>
          <input name="email" type="text" class="dfinput" /><i></i>
        </li>
        <li><label>通讯地址</label>
          <input name="address" type="text" class="dfinput" /><i></i>
        </li>
        <li><label>身份证号码</label>
          <input name="idCard" type="text" class="dfinput" /><i></i>
        </li>
        <li><label>业务员</label>
          <div class="vocation">
              <select class="select1" name="userId">
              <c:forEach items="${ users}" var="user">
                <option value="${user.userId }" >
                  ${user.realName }
                </option>
              </c:forEach>
              </select>
          </div>
          <i></i>
        </li>
        <li><label>常用区间</label>
          <div class="vocation">
              <select class="select1" name="baseId">
              <c:forEach items="${ intervals}" var="interval">
                <option value="${interval.baseId }" >
                  ${interval.baseName }
                </option>
              </c:forEach>
              </select>
          </div>
          <i></i>
        </li>
         <li><label>备注</label>
          <textarea name="remark" cols="" rows="" class="textinput"></textarea>
         </li>
        <li><label>&nbsp;</label>
          <input name="" type="submit"
          class="btn" value="确认保存" /></li>
        </ul>
    </form>
  </div>
  <div style="display: none">
    <script src='http://v7.cnzz.com/stat.php?id=155540&web_id=155540'
      language='JavaScript' charset='gb2312'></script>
  </div>
</body>
</html>

4.保存数据

提交数据保存

service层

public void addCustomer(Customer customer);

service实现

@Override
public void addCustomer(Customer customer) {
  customerMapper.insertSelective(customer);
}

controller

@RequestMapping("/saveOrUpdate")
public String saveOrUpdate(Customer customer) throws IOException{
  if(customer.getCustomerId()!=null && !"".equals(customer.getCustomerId())){
    // 更新
  }else{
    // 添加
    customerService.addCustomer(customer);
  }
  return "success";
}

测试

在这里插入图片描述image.png描述

image.png


相关文章
好好编程-物流项目20【客户管理-删除客户】
好好编程-物流项目20【客户管理-删除客户】
好好编程-物流项目20【客户管理-删除客户】
好好编程-物流项目19【客户管理-更新客户】
好好编程-物流项目19【客户管理-更新客户】
好好编程-物流项目19【客户管理-更新客户】
好好编程-物流项目18【客户管理-查询客户】
好好编程-物流项目18【客户管理-查询客户】
好好编程-物流项目18【客户管理-查询客户】
|
搜索推荐 SEO
外贸业务客户开发「途径详情」
扩大找客户的各种途径和方法,例如通过skype. facebook, google. B2B平台、展会,外贸开发客户软件,广交会买家数据,或者是通过海关数据找客户。
250 0
|
网络协议 测试技术 Go
客户管理系统-修改客户和作业|学习笔记
快速学习客户管理系统-修改客户和作业
|
2月前
|
存储 供应链 数据可视化
2024年采购管理新趋势:最适合记录和更新采购清单的在线看板工具
在现代企业中,采购部门的任务高效协作与管理至关重要。本文介绍了六款适合采购部门的在线看板工具:板栗看板、Trello、Miro、Zoho Projects、Airtable和TeamGantt,分别从关键功能、优势、劣势及适用对象等方面进行了详细对比,帮助企业选择最合适的工具,提升采购效率和透明度。
2024年采购管理新趋势:最适合记录和更新采购清单的在线看板工具
|
SQL JSON 前端开发
校园外卖点餐系统——Day02【员工管理业务开发】
校园外卖点餐系统——Day02【员工管理业务开发】
167 0
校园外卖点餐系统——Day02【员工管理业务开发】
|
存储 JSON 安全
旅游APP开发详情丨旅游系统开发案例设计/功能方案/逻辑项目/源码平台
 数据共享和分发:区块链中的链式结构允许数据在网络中被共享和分发。每个参与节点都可以获得完整的区块链副本,从而保持数据的同步和一致性。这种去中心化的特点使得区块链具有高度的可靠性和抗故障能力。

热门文章

最新文章