好好编程-物流项目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


相关文章
什么是互助预约排单系统开发丨dapp预约排单互助项目系统开发详细流程/规则方案/案例设计/逻辑功能/源码开发
Allow users to register accounts and perform identity verification to ensure the authenticity and credibility of user information.
dapp预约抢单排单互助系统开发逻辑详细/功能说明/案例分析/方案规则/源码出售
Allow users to register accounts and verify their identities to ensure that the identities of participants are valid and authentic.
|
6月前
|
新零售 人工智能 大数据
东郊到家预约服务系统开发|现成案例|模式详情
由于线下门店的商品陈列和消费者行为发生在物理空间里,线下门店想收集数据似乎没那么容易
|
6月前
|
新零售 供应链 大数据
推三返一互助模式项目系统开发|指南方案|详情说明
有了大数据,运营者能够更全面地了解消费者,做到精准营销,能够细化经营指标,快速获得经营反馈
|
安全
dapp互助预约排单抢单项目系统开发规则玩法/逻辑说明/案例介绍/方案设计/源码程序
The development of DApp appointment and scheduling mutual assistance system refers to the development of a mutual assistance system based on blockchain technology and decentralized application programs (DApp). This system is usually designed as a mutual aid or sharing economy model, aimed at providi
|
安全 搜索推荐 程序员
身为产品经理该如何向客户推广API商品数据接口,该如何跟进项目和程序员对接?
API是Application Programming Interface的缩写,即应用程序编程接口。API商品数据接口是一种允许不同应用程序或系统之间进行数据交互的方式。通过API商品数据接口,不同的应用程序或系统可以相互调用和共享数据,而不必直接相互通信或共享数据。
互助预约抢单系统开发稳定版丨dapp预约排单互助系统开发方案项目/案例开发/需求设计/步骤功能/源码版
-Determine the core functions and objectives of the system, understand user needs and expectations.
|
安全 区块链 数据库
互助拍卖竞拍抢单模式系统开发项目方案丨DAPP拍卖竞拍抢拍互助系统开发(案例开发)/开发逻辑/源码运营版
    dapp的开发和运行基于智能合约,智能合约是一种运行在区块链上的自动执行合约,它可以实现自动化的交易和管理逻辑,And automatically supervise and execute according to the set rules.Dapp achieves decentralized data storage,business logic,and value exchange through smart contracts.
【氚云】在代码中,如何实现对人员和部门的调用?
在代码中,如何实现对人员和部门的调用?
274 0
|
SQL JSON 前端开发
校园外卖点餐系统——Day02【员工管理业务开发】
校园外卖点餐系统——Day02【员工管理业务开发】
151 0
校园外卖点餐系统——Day02【员工管理业务开发】