程序员成长之路|项目实战(P 14)(Day 42)

目录
学习目标:
学习内容:
客户管理模块
客户增删改查
【程序员成长之路|项目实战(P 14)(Day 42)】思路
dao层
service层
controller层
遇到小细节:
思路:
学习目标: 客户的增删改查
学习内容:
客户管理模块 客户增删改查 根据思路书写客户的增删改查代码
思路

添加客户 1. 参数校验 客户名称 name 非空,名称唯一 法人代表 fr 非空 手机号码 phone 非空,格式正确 2. 设置参数的默认值 是否有效 isValid1 创建时间 createDate 系统当前时间 修改时间 updateDate 系统当前时间 流失状态 state0 0=正常客户1=流失客户 客户编号 khno 系统生成,唯一 (uuid | 时间戳 | 年月日时分秒 | 雪花算法) 格式:KH + 时间戳 3. 执行添加操作,判断受影响的行数修改客户 1. 参数校验 客户ID id 非空,数据存在 客户名称 name 非空,名称唯一 法人代表 fr 非空 手机号码 phone 非空,格式正确 2. 设置参数的默认值 修改时间 updateDate 系统当前时间 3. 执行更新操作,判断受影响的行数删除客户 1. 参数校验 id 非空,数据存在 2. 设置参数默认值 isValid0 updateDate系统当前时间 3. 执行删除(更新)操作,判断受影响的行数

dao层
书写多条件查询和根据客户名查找客户对象的两个SQL语句
public interface CustomerMapper extends BaseMapper {//根据名称查找客户 Customer selectByName(String name); }

select from t_customer is_valid = 1 and state = 0 and name like concat('%',#{customerName},'%') and khno = #{customerNo} and level = #{level} select from t_customer where is_valid = 1 and name = #{name}

service层
@Service public class CustomerService extends BaseService { @Resource private CustomerMapper customerMapper; /** * 多条件分页查询 * * @param customerQuery * @return java.util.Map * @author QQ星 * @Date 2022/4/4 13:15 */ public Map queryCustomerByParams(CustomerQuery customerQuery) { Map map = new HashMap<>(); //开启分页 PageHelper.startPage(customerQuery.getPage(), customerQuery.getLimit()); //得到对应分页对象 PageInfo pageInfo = new PageInfo<>(customerMapper.selectByParams(customerQuery)); //设置map对象 map.put("code", 0); map.put("msg", "success"); map.put("count", pageInfo.getTotal()); //设置分页好的列表 map.put("data", pageInfo.getList()); return map; }/** * 添加客户 * 1. 参数校验 * 客户名称 name * 非空,名称唯一 * 法人代表 fr * 非空 * 手机号码 phone * 非空,格式正确 * 2. 设置参数的默认值 * 是否有效 isValid1 * 创建时间 createDate 系统当前时间 * 修改时间 updateDate 系统当前时间 * 流失状态 state0 * 0=正常客户1=流失客户 * 客户编号 khno * 系统生成,唯一 (uuid | 时间戳 | 年月日时分秒 | 雪花算法) * 格式:KH + 时间戳 * 3. 执行添加操作,判断受影响的行数 * * @param customer * @return void * @author QQ星 * @Date 2022/4/4 15:00 */ @Transactional(propagation = Propagation.REQUIRED) public void addCustomer(Customer customer) { /* 1.参数校检 */ checkSaleChanceParams(customer.getName(), customer.getFr(), customer.getPhone()); //名称唯一 Customer temp = customerMapper.selectByName(customer.getName()); AssertUtil.isTrue(temp != null, "客户名称已存在!"); /* 2.设置参数的默认值 */ //是否有效 isValid1 customer.setIsValid(1); //流失状态 state0 customer.setState(0); //创建时间 createDate 系统当前时间 customer.setCreateDate(new Date()); //修改时间 updateDate 系统当前时间 customer.setUpdateDate(new Date()); //客户编号 String khno = "KH" + System.currentTimeMillis(); customer.setKhno(khno); /* 3. 执行添加操作,判断受影响的行数 */ AssertUtil.isTrue(customerMapper.insertSelective(customer) < 1, "添加客户信息失败!"); }/** * 修改客户 *1. 参数校验 *客户ID id *非空,数据存在 *客户名称 name *非空,名称唯一 *法人代表 fr *非空 *手机号码 phone *非空,格式正确 *2. 设置参数的默认值 *修改时间 updateDate 系统当前时间 *3. 执行更新操作,判断受影响的行数 * * @param customer * @return void * @author QQ星 * @Date 2022/4/4 15:09 */ @Transactional(propagation = Propagation.REQUIRED) public void updateCustomer(Customer customer) { /* 1.参数校检 */ AssertUtil.isTrue(null==customer.getId(),"待更新记录不存在!"); //判断记录存在 Customer temp = customerMapper.selectByPrimaryKey(customer.getId()); AssertUtil.isTrue(temp == null ,"查找不到此纪录!"); checkSaleChanceParams(customer.getName(), customer.getFr(), customer.getPhone()); // 通过客户名称查询客户记录 temp = customerMapper.selectByName(customer.getName()); // 判断客户记录 是否存在,且客户id是否与更新记录的id一致 AssertUtil.isTrue(null != temp && !(temp.getId()).equals(customer.getId()), "客户名称已存在,请重新输入!"); /* 2.设置当前时间 */ customer.setUpdateDate(new Date()); /* 3. 执行更新操作,判断受影响的行数 */ AssertUtil.isTrue(customerMapper.updateByPrimaryKeySelective(customer) < 1, "添加客户信息失败!"); }/** * 参数校检 * * @param name * @param fr * @param phone * @return void * @author QQ星 * @Date 2022/4/4 15:13 */ private void checkSaleChanceParams(String name, String fr, String phone) { //客户名称 name 非空 AssertUtil.isTrue(StringUtils.isBlank(name), "客户名称不能为空!"); //法人代表 fr 非空 AssertUtil.isTrue(StringUtils.isBlank(fr), "法人不能为空!"); //手机号码 phone 非空,格式正确 AssertUtil.isTrue(StringUtils.isBlank(phone), "联系号码不能为空!"); AssertUtil.isTrue(!PhoneUtil.isMobile(phone), "联系号码格式不正确!"); }/** * 删除客户 *1. 参数校验 *id *非空,数据存在 *2. 设置参数默认值 *isValid0 *updateDate系统当前时间 *3. 执行删除(更新)操作,判断受影响的行数 * @author QQ星 * * @param id * @return void * @Date 2022/4/4 16:23 */ @Transactional(propagation = Propagation.REQUIRED) public void deleteCustomer(Integer id) { /* 1.参数校检 */ AssertUtil.isTrue(null==id,"待更新记录不存在!"); //判断记录存在 Customer temp = customerMapper.selectByPrimaryKey(id); AssertUtil.isTrue(temp == null ,"查找不到此纪录!"); /* 2.设置参数默认值 */ temp.setIsValid(0); temp.setUpdateDate(new Date()); /* 3. 执行更新操作,判断受影响的行数 */ AssertUtil.isTrue(customerMapper.updateByPrimaryKeySelective(temp) < 1, "删除客户信息失败!"); } }

controller层
package com.xxxx.crm.controller; import com.github.pagehelper.PageInfo; import com.xxxx.crm.base.BaseController; import com.xxxx.crm.base.ResultInfo; import com.xxxx.crm.query.CustomerQuery; import com.xxxx.crm.service.CustomerService; import com.xxxx.crm.vo.Customer; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.Map; @Controller @RequestMapping("customer") public class CustomerController extends BaseController {@Resource private CustomerService customerService; /** * 多条件分页查询 * * @param customerQuery * @return java.util.Map * @author QQ星 * @Date 2022/4/4 13:15 */ @RequestMapping("list") @ResponseBody public Map queryCustomerByParams(CustomerQuery customerQuery) { return customerService.queryCustomerByParams(customerQuery); }/** * 进入客户信息页面 * * @param * @return java.lang.String * @author QQ星 * @Date 2022/4/4 14:40 */ @RequestMapping("index") public String index() { return "customer/customer"; }/** * 进入添加修改页面 * @author QQ星 * * @param * @return java.lang.String * @Date 2022/4/4 14:43 */ @RequestMapping("toAddOrUpdateCustomerPage") public String toAddOrUpdateCustomerPage(Integer customerId , HttpServletRequest request) {//判断是否为空 if (customerId !=null){ //查询对象放到请求域中 Customer customer =customerService.selectByPrimaryKey(customerId); request.setAttribute("customer",customer); } return "customer/add_update"; }/** * 添加客户 * @author QQ星 * * @param customer * @return com.xxxx.crm.base.ResultInfo * @Date 2022/4/4 15:08 */ @PostMapping("add") @ResponseBody public ResultInfo addCustomer(Customer customer){ customerService.addCustomer(customer); return success("客户添加成功"); }/** * 修改客户 * @author QQ星 * * @param customer * @return com.xxxx.crm.base.ResultInfo * @Date 2022/4/4 15:09 */ @PostMapping("update") @ResponseBody public ResultInfo updateCustomer(Customer customer){ customerService.updateCustomer(customer); return success("客户修改成功"); } /** * 删除客户 * @author QQ星 * * @param id * @return com.xxxx.crm.base.ResultInfo * @Date 2022/4/4 16:21 */ @PostMapping("delete") @ResponseBody public ResultInfo deleteCustomer(Integer id){ customerService.deleteCustomer(id); return success("客户删除成功"); }}

遇到小细节:
修改客户信息时,原来默认的客户级别不可以显示,不能像用户角色一样新建一张表从后端直接赋值,也不可以像权限判断一样,在文档中直接判断,只能在JS中书写一个if语句,不太熟悉,先放一放,全部做完再来处理这些小细节
程序员成长之路|项目实战(P 14)(Day 42)
文章图片

思路:
先把level放到隐藏域中,再在js中书写判断把对应属性赋成selected


    推荐阅读