您的位置:首页 > 其它

使用Maven基于ssm框架的完整商务管理开发项目(02)

2016-11-09 11:36 701 查看
首先要完成的是基本信息中的生产厂家功能。

生产厂家业务
功能:
在货物模块和附近模块,它们都有个生产厂家,讲生产厂家信息提出,成为一个单独的表。
 
《需求说明书》
生产厂家表 FACTORY_C(_C业务后缀)
序号                 
 名称
代码
是否主键       
类型(长度)
说明
1.          
编号                
FACTORY_ID

VARCHAR2(40)
UUID
2.          
全称
FULL_NAME

VARCHAR2(200)
对应客户比较模糊,翻倍2到4倍
3.          
简称
FACTORY_NAME

VARCHAR2(50)
 
4.          
联系人
CONTACTS

VARCHAR2(30)
人名20/30
5.          
电话
PHONE

VARCHAR2(20)
 
6.          
手机
MOBILE

VARCHAR2(20)
 
7.          
传真
FAX

VARCHAR220)
 
8.          
验货员
INSPECTOR

VARCHAR2(30)
 
9.          
排序号
ORDER_NO

INT
 
10.      
备注
CNOTE

VARCHAR2(500)
如果感觉它可能和关键字冲突,给它加个C前缀
11.      
创建人
CREATE_BY

VARCHAR2(40)
权限字段,登陆人ID
12.      
创建部门
CREATE_DEPT

VARCHAR2(40)
登陆人所在部门的ID
13.      
创建时间
CREATE_TIME

TIMESTAMP
 
 
注意:在这里我选用的id类型为varchar2 类型,
INT/LONG 都是一般表示自增,根据业务记录数来决定
STRING   UUID,业务自己定义的规则xxyyzz,每两位为一层,省市县,部门

接着是数据库建模

这里我使用PowerDesigner进行数据库表的设计


关于这个软件的使用,将在相对应的文章中进行详细描写,这里不再进行赘述。













接着就是创建相应的实体类Factory

package com.wakev.xx.domain;

public class Factory {
private String id;		//主键映射时,都映射成id,跟数据库表的不同factory_id
private String fullName;
private String factoryName;
private String contacts;
private String phone;
private String mobile;
private String fax;
private String inspector;
private String cnote;
private Integer orderNo;

private String createBy;
private String createDept;
private java.util.Date createTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getFactoryName() {
return factoryName;
}
public void setFactoryName(String factoryName) {
this.factoryName = factoryName;
}
public String getContacts() {
return contacts;
}
public void setContacts(String contacts) {
this.contacts = contacts;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getFax() {
return fax;
}
public void setFax(String fax) {
this.fax = fax;
}
public String getInspector() {
return inspector;
}
public void setInspector(String inspector) {
this.inspector = inspector;
}
public String getCnote() {
return cnote;
}
public void setCnote(String cnote) {
this.cnote = cnote;
}
public Integer getOrderNo() {
return orderNo;
}
public void setOrderNo(Integer orderNo) {
this.orderNo = orderNo;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getCreateDept() {
return createDept;
}
public void setCreateDept(String createDept) {
this.createDept = createDept;
}
public java.util.Date getCreateTime() {
return createTime;
}
public void setCreateTime(java.util.Date createTime) {
this.createTime = createTime;
}

}


创建相对应的FactoryMapper.xml文件并且完成查询功能


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.wakev.xx.mapper.FactoryMapper">
<resultMap type="com.wakev.xx.domain.Factory" id="factoryRM">
<id property="id" column="FACTORY_ID"/>
<result property="fullName" column="FULL_NAME"/>
<result property="factoryName" column="FACTORY_NAME"/>
<result property="contacts" column="CONTACTS"/>
<result property="phone" column="PHONE"/>
<result property="mobile" column="MOBILE"/>
<result property="fax" column="FAX"/>
<result property="inspector" column="INSPECTOR"/>
<result property="cnote" column="CNOTE"/>
<result property="orderNo" column="ORDER_NO"/>

<result property="createBy" column="CREATE_BY"/>
<result property="createDept" column="CREATE_DEPT"/>
<result property="createTime" column="CREATE_TIME"/>
</resultMap>

<!-- 查询 -->
<select id="find" parameterType="map" resultMap="factoryRM">
select * from FACTORY_C
where 1=1
order by ORDER_NO
</select>



接着开始完善Dao层。创建FactoryDao并继承BaseDao接口

package com.wakev.xx.dao;

import com.wakev.xx.domain.Factory;

public interface FactoryDao extends BaseDao<Factory> {

}
实现类FactoryDaoImpl继承BaseDaoImpl并实现FactoryDao接口

package com.wakev.xx.dao.impl;

import org.springframework.stereotype.Repository;

import com.wakev.xx.dao.FactoryDao;
import com.wakev.xx.domain.Factory;

@Repository
public class FactoryDaoImpl extends BaseDaoImpl<Factory> implements FactoryDao {
//利用默认构造方法初始化命名空间
public FactoryDaoImpl() {
super.setNs("com.wakev.xx.mapper.FactoryMapper");
}
}

接着是Service层

首先FactoryService接口

package com.wakev.xx.service;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.wakev.xx.domain.Factory;
import com.wakev.xx.pagination.Page;

public interface FactoryService {
public List<Factory> findPage(Page page);		//分页查询
public List<Factory> find(Map paraMap);			//带条件查询,条件可以为null,既没有条件;返回list对象集合
public Factory get(Serializable id);			//只查询一个,常用于修改
public void insert(Factory entity);			//插入,用实体作为参数
public void update(Factory entity);			//修改,用实体作为参数
public void deleteById(Serializable id);		//按id删除,删除一条;支持整数型和字符串类型ID
public void delete(Serializable[] ids);			//批量删除;支持整数型和字符串类型ID

}

FactoryServiceImpl实现类

package com.wakev.xx.service.impl;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.annotatio
114c0
n.Resource;

import org.springframework.stereotype.Service;

import com.wakev.xx.dao.FactoryDao;
import com.wakev.xx.pagination.Page;
import com.wakev.xx.service.FactoryService;

@Service
public class FactoryServiceImpl implements FactoryService {
@Resource
FactoryDao factoryDao;

@Override
public List<com.wakev.xx.domain.Factory> findPage(Page page) {
// TODO Auto-generated method stub
return null;
}

@Override
public List<com.wakev.xx.domain.Factory> find(Map paraMap) {
return factoryDao.find(paraMap);
}

@Override
public com.wakev.xx.domain.Factory get(Serializable id) {
return factoryDao.get(id);
}

@Override
public void insert(com.wakev.xx.domain.Factory entity) {
<span style="white-space:pre"> </span>}
<span style="white-space:pre">	</span><pre name="code" class="html"><span style="white-space:pre">	</span>@Overridepublic
<span>	</span>void update(com.wakev.xx.domain.Factory entity) {
<span>	</span>return null;
<span>	</span>}@Overridepublic
<span style="white-space:pre">	</span>void deleteById(Serializable id) {
<span style="white-space:pre">	</span>return null;
<span style="white-space:pre">	</span>}@Overridepublic void delete(Serializable[] ids) {
<span style="white-space:pre">	</span>return null;
<span style="white-space:pre">	</span>}
}




接着是Controller层。FactoryController 继承BaseController(不一定要继承)

package com.wakev.xx.controller.basicinfo.factory;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.wakev.xx.controller.BaseController;
import com.wakev.xx.domain.Factory;
import com.wakev.xx.service.FactoryService;

@Controller
public class FactoryController extends BaseController {
@Resource
FactoryService factoryService;

//查询
@RequestMapping("/basicinfo/factory/list.action")
public String list(Model model){
List<Factory> dataList = factoryService.find(null);
model.addAttribute("dataList", dataList);

return "/basicinfo/factory/jFactoryList.jsp";
}<pre name="code" class="html">}



接着创建相应的页面jsp

在WEB-INF--->  pages--->basicinfo--->factory--->jFactoryList.jsp



修改list部分

<table id="ec_table" class="tableRegion" width="98%" >
<thead>
<tr>
<td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll('id',this)"></td>
<td class="tableHeader">序号</td>
<td class="tableHeader">厂家全称</td>
<td class="tableHeader">缩写</td>
<td class="tableHeader">联系人</td>
<td class="tableHeader">电话</td>
<td class="tableHeader">手机</td>
<td class="tableHeader">传真</td>
<td class="tableHeader">验货员</td>
</tr>
</thead>
<tbody class="tableBody" >

<c:forEach items="${dataList}" var="o" varStatus="status">
<tr class="odd" onmouseover="this.className='highlight'" onmouseout="this.className='odd'" >
<td><input type="checkbox" name="id" value="${o.id}"/></td>
<td>${status.index+1}</td>
<td><a href="toview.action?id=${o.id}">${o.fullName}</a></td>
<td>${o.factoryName}</td>
<td>${o.contacts}</td>
<td>${o.phone}</td>
<td>${o.mobile}</td>
<td>${o.fax}</td>
<td>${o.inspector}</td>
</tr>
</c:forEach>


这里简单提一下整个框架的执行顺序:

首先是在url 输入

1)http://localhost:8080/xx后执行

http://localhost/xx/index.jsp

2)在Jsp中利用js跳转

<scripttype="text/javascript">

           window.location.href ="home.action";           //javascript页面跳转

</script>

3)  在homeController中跳转,转入登陆页面

@Controller
public class HomeController {

//系统首页模块

@RequestMapping(value={"/home.action"})		//配合web下<url-pattern>/</url-pattern>
public String login(){

return "/index.jsp";			//首页,删除根目录下index.jsp,否则上面url将被拦截进不来
}

4)  在pages/index.jsp中利用按钮提交,fmain.action

@RequestMapping(value="/fmain.action")
public String fmain(){
return "/home/fmain.jsp";


接下来完成Factory的insert插入功能

首先在FactoryMapper中添加

<!-- 新增 -->
<insert id="insert" parameterType="com.wakev.xx.domain.Factory">
insert into FACTORY_C
(FACTORY_ID,FULL_NAME,FACTORY_NAME,CONTACTS,PHONE,MOBILE,FAX,INSPECTOR,CNOTE,ORDER_NO,CREATE_BY,CREATE_DEPT,CREATE_TIME)
values
(
#{id,jdbcType=VARCHAR},
#{fullName,jdbcType=VARCHAR},
#{factoryName,jdbcType=VARCHAR},
#{contacts,jdbcType=VARCHAR},
#{phone,jdbcType=VARCHAR},
#{mobile,jdbcType=VARCHAR},
#{fax,jdbcType=VARCHAR},
#{inspector,jdbcType=VARCHAR},
#{cnote,jdbcType=VARCHAR},
#{orderNo,jdbcType=INTEGER},

#{createBy,jdbcType=VARCHAR},
#{createDept,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP}
)
</insert>

由于dao层跟service层都已经实现了这个方法,所以现在只要在Controller层进行完善

在FactoryController中添加新增功能

//转向新增页面
@RequestMapping("/basicinfo/factory/tocreate.action")
public String tocreate(){
return "/basicinfo/factory/jFactoryCreate.jsp";
}

//新增保存
@RequestMapping("/basicinfo/factory/insert.action")
public String insert(Factory factory){
factoryService.insert(factory);

return "redirect:/basicinfo/factory/list.action";
}


创建对应的JfactoryCreate.jsp页面

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ include file="../../base.jsp"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>wakev商务管理系统</title>
</head>
<body>
<form method="post">

<div id="menubar">
<div id="middleMenubar">
<div id="innerMenubar">
<div id="navMenubar">
<ul>
<li id="save"><a href="#" onclick="formSubmit('insert.action','_self');this.blur();">确定</a></li>
<li id="back"><a href="list.action">返回</a></li>
</ul>
</div>
</div>
</div>
</div>

<div class="textbox" id="centerTextbox">
<div class="textbox-header">
<div class="textbox-inner-header">
<div class="textbox-title">
新增生产厂家信息
</div>
</div>
</div>
<div>

<div>
<table class="commonTable" cellspacing="1">
<tr>
<td class="columnTitle">排序号:</td>
<td class="tableContent"><input type="text" name="orderNo" value="" dataType="整数" dispName="排序号"/></td>
<td class="columnTitle">验货员:</td>
<td class="tableContent"><input type="text" name="inspector" value=""/></td>
</tr>
<tr>
<td class="columnTitle_mustbe">厂家名称:</td>
<td class="tableContent"><input type="text" name="fullName" value="" dataType="中文" dispName="厂家名称"/></td>
<td class="columnTitle_mustbe">简称:</td>
<td class="tableContent"><input type="text" name="factoryName" value="" dataType="非空字符串" dispName="简称"/></td>
</tr>
<tr>
<td class="columnTitle_mustbe">联系人:</td>
<td class="tableContent"><input type="text" name="contacts" value="" dataType="非空字符串" dispName="联系人"/></td>
<td class="columnTitle_mustbe">电话:</td>
<td class="tableContent"><input type="text" name="phone" value="" dataType="非空电话" dispName="电话"/></td>
</tr>
<tr>
<td class="columnTitle_mustbe">手机:</td>
<td class="tableContent"><input type="text" name="mobile" value="" dataType="非空手机" dispName="手机"/></td>
<td class="columnTitle">传真:</td>
<td class="tableContent"><input type="text" name="fax" value="" dataType="电话" dispName="传真"/></td>
</tr>
<tr>
<td class="columnTitle">备注:</td>
<td class="tableContent"><textarea name="cnote" style="width:100%;height:120px;"></textarea></td>
</tr>

</table>
</div>
</div>

</form>
</body>
</html>


在jFactoryList.jsp页面添加 “”新增” 按钮

<li id="new"><a href="#" onclick="formSubmit('tocreate.action','_self');this.blur();">新增</a></li>


其中的FormSubmit按钮封装了一个函数

/* 打开一个新页面:调用时不加第二个参数 add by wakev*/
function formSubmit (url,sTarget){
document.forms[0].target = sTarget
document.forms[0].action = url;
document.forms[0].submit();
return true;
}


测试一下,插入功能到这个开发完成。

接着完成 修改 功能
在FactoryMapper中添加

<!-- 查询单条 -->
<select id="get" parameterType="string" resultMap="factoryRM">
select * from
FACTORY_C
where FACTORY_ID=#{pid}
</select>
<!-- 修改 -->
<update id="update" parameterType="com.wakev.xx.domain.Factory">
update FACTORY_C
<set>
<if test="fullName!=null">FULL_NAME=#{fullName,jdbcType=VARCHAR},</if>
<if test="factoryName!=null">FACTORY_NAME=#{factoryName,jdbcType=VARCHAR},</if>
<if test="contacts!=null">CONTACTS=#{contacts,jdbcType=VARCHAR},</if>
<if test="phone!=null">PHONE=#{phone,jdbcType=VARCHAR},</if>
<if test="mobile!=null">MOBILE=#{mobile,jdbcType=VARCHAR},</if>
<if test="fax!=null">FAX=#{fax,jdbcType=VARCHAR},</if>
<if test="inspector!=null">INSPECTOR=#{inspector,jdbcType=VARCHAR},</if>
<if test="cnote!=null">CNOTE=#{cnote,jdbcType=VARCHAR},</if>
<if test="orderNo!=null">ORDER_NO=#{orderNo,jdbcType=INTEGER},</if>

<if test="createBy!=null">CREATE_BY=#{createBy,jdbcType=VARCHAR},</if>
<if test="createDept!=null">CREATE_DEPT=#{createDept,jdbcType=VARCHAR},</if>
<if test="createTime!=null">CREATE_TIME=#{createTime,jdbcType=TIMESTAMP},</if>
</set>
where FACTORY_ID=#{id}
</update>


dao层因为继承了BaseDao,所以不用进行修改

直接修改Service层,在FactoryServiceImpl实现类中修改

<span style="white-space:pre">	</span>@Override
public void update(com.wakev.xx.domain.Factory entity) {
factoryDao.update(entity);
}
@Override
public com.wakev.xx.domain.Factory get(Serializable id) {
return factoryDao.get(id);
}


这里的id 类型选用Serializable是因为更加灵活  既可以用int 也可以String

接着改Controller层,添加方法和注解

<span style="white-space:pre">	</span>//转向修改页面
@RequestMapping("/basicinfo/factory/toupdate.action")
public String toupdate(String id, Model model){
Factory obj = factoryService.get(id);
model.addAttribute("obj", obj);

return "/basicinfo/factory/jFactoryUpdate.jsp";
}

//修改保存
@RequestMapping("/basicinfo/factory/update.action")
public String update(Factory factory){
factoryService.update(factory);

return "redirect:/basicinfo/factory/list.action";
}


接着完成相对应的页面
JFactoryUpdate.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ include file="../../base.jsp"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>wakev商务管理系统</title>
</head>
<body>
<form method="post">
<input type="hidden" name="id" value="${obj.id}"/>

<div id="menubar">
<div id="middleMenubar">
<div id="innerMenubar">
<div id="navMenubar">
<ul>
<li id="save"><a href="#" onclick="formSubmit('update.action','_self');this.blur();">确定</a></li>
<li id="back"><a href="list.action">返回</a></li>
</ul>
</div>
</div>
</div>
</div>

<div class="textbox" id="centerTextbox">
<div class="textbox-header">
<div class="textbox-inner-header">
<div class="textbox-title">
修改生产厂家信息
</div>
</div>
</div>
<div>

<div>
<table class="commonTable" cellspacing="1">
<tr>
<td class="columnTitle">排序号:</td>
<td class="tableContent"><input type="text" name="orderNo" value="${obj.orderNo}" dataType="整数" dispName="排序号"/></td>
<td class="columnTitle">验货员:</td>
<td class="tableContent"><input type="text" name="inspector" value="${obj.inspector}"/></td>
</tr>
<tr>
<td class="columnTitle_mustbe">厂家名称:</td>
<td class="tableContent"><input type="text" name="fullName" value="${obj.fullName}" dataType="中文" dispName="厂家名称"/></td>
<td class="columnTitle_mustbe">简称:</td>
<td class="tableContent"><input type="text" name="factoryName" value="${obj.factoryName}" dataType="非空字符串" dispName="简称"/></td>
</tr>
<tr>
<td class="columnTitle_mustbe">联系人:</td>
<td class="tableContent"><input type="text" name="contacts" value="${obj.contacts}" dataType="非空字符串" dispName="联系人"/></td>
<td class="columnTitle_mustbe">电话:</td>
<td class="tableContent"><input type="text" name="phone" value="${obj.phone}" dataType="非空电话" dispName="电话"/></td>
</tr>
<tr>
<td class="columnTitle_mustbe">手机:</td>
<td class="tableContent"><input type="text" name="mobile" value="${obj.mobile}" dataType="非空手机" dispName="手机"/></td>
<td class="columnTitle">传真:</td>
<td class="tableContent"><input type="text" name="fax" value="${obj.fax}" dataType="电话" dispName="传真"/></td>
</tr>
<tr>
<td class="columnTitle">备注:</td>
<td class="tableContent"><textarea name="cnote" style="width:100%;height:120px;">${obj.cnote}</textarea></td>
</tr>

</table>
</div>
</div>

</form>
</body>
</html>

测试一下,到这里修改功能也完成了

接下来完成删除功能

在FactoryMapper.xml中

<span style="white-space:pre">	</span><!-- 删除单条 -->
<delete id="deleteById" parameterType="string">
delete from FACTORY_C
where FACTORY_ID=#{pid}
</delete>

<!-- 删除多条 -->
<delete id="delete" parameterType="string">
delete from FACTORY_C
where FACTORY_ID in
<foreach collection="array" item="id" open="(" close=")"
separator=",">
#{id}
</foreach>
</delete>


FactoryServiceImpl完善

@Override
public void deleteById(Serializable id) {
factoryDao.deleteById(id);
}

@Override
public void delete(Serializable[] ids) {
factoryDao.delete(ids);
}


接着去完添加FactoryController中的方法

<span style="white-space:pre">		</span>//删除单条
@RequestMapping("/basicinfo/factory/deleteById.action")
public String deleteById(String id){
factoryService.deleteById(id);

return "redirect:/basicinfo/factory/list.action";
}

//批量删除
@RequestMapping("/basicinfo/factory/delete.action")
public String delete(@RequestParam("id")String[] ids){
factoryService.delete(ids);

return "redirect:/basicinfo/factory/list.action";
}


删除玩直接跳转到list页面,所以只需要在在相应的List页面中添加对应的按钮

<li id="delete"><a href="#" onclick="formSubmit('deleteById.action','_self');this.blur();">删除</a></li>
<li id="delete"><a href="#" onclick="formSubmit('delete.action','_self');this.blur();">删多条</a></li>


测试一下,删除功能到这里也完成。

做到这里,可以开发加入log4j了,
创建log4j.properties放在resource目录下

log4j.rootLogger=DEBUG, stdout

#Console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p - %m%n

#LogFile
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=../logs/jklog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.logger.org.apache=INFO
log4j.logger.com.wakev.xx=DEBUG

关于Log4j的使用这里不再赘述

接着我们给Factory完成 查看功能

因为mapper上之前已经添加过了,所以直接在controller上添加这个功能。

<span style="white-space:pre">	</span>//查看
@RequestMapping("/basicinfo/factory/toview.action")
public String toview(String id, Model model){
Factory obj = factoryService.get(id);
model.addAttribute("obj", obj);

return "/basicinfo/factory/jFactoryView.jsp";
}

创建对应的查看页面jFactoryView.jsp,可以复制jFactoryUpdate.jsp页面进行修改。

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ include file="../../base.jsp"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>wakev商务管理系统</title>
</head>
<body>
<form method="post">
<input type="hidden" name="id" value="${obj.id}"/>

<div id="menubar">
<div id="middleMenubar">
<div id="innerMenubar">
<div id="navMenubar">
<ul>
<li id="back"><a href="list.action">返回</a></li>
</ul>
</div>
</div>
</div>
</div>

<div class="textbox" id="centerTextbox">
<div class="textbox-header">
<div class="textbox-inner-header">
<div class="textbox-title">
浏览生产厂家信息
</div>
</div>
</div>
<div>

<div>
<table class="commonTable" cellspacing="1">
<tr>
<td class="columnTitle">排序号:</td>
<td class="tableContent">${obj.orderNo}</td>
<td class="columnTitle">验货员:</td>
<td class="tableContent">${obj.inspector}</td>
</tr>
<tr>
<td class="columnTitle_mustbe">厂家名称:</td>
<td class="tableContent">${obj.fullName}</td>
<td class="columnTitle_mustbe">简称:</td>
<td class="tableContent">${obj.factoryName}</td>
</tr>
<tr>
<td class="columnTitle_mustbe">联系人:</td>
<td class="tableContent">${obj.contacts}</td>
<td class="columnTitle_mustbe">电话:</td>
<td class="tableContent">${obj.phone}</td>
</tr>
<tr>
<td class="columnTitle_mustbe">手机:</td>
<td class="tableContent">${obj.mobile}</td>
<td class="columnTitle">传真:</td>
<td class="tableContent">${obj.fax}</td>
</tr>
<tr>
<td class="columnTitle">备注:</td>
<!-- 这里用pre来保证备注的换行能正常输出-->
<td class="tableContent"><pre>${obj.cnote}</pre></td>
</tr>

</table>
</div>
</div>

</form>
</body>
</html>


接着list中添加对应的按钮,之前好像已经有了?
<li id="view"><a href="#" onclick="formSubmit('toview.action','_self');this.blur();">查看</a></li>


接着测试,这个查询功能也完成了。

到这里,基本的增删改查功能都完成了。
接着完成一个Factory更进一步的功能。

业务:启用,停用

功能:合作生产厂家突然有一天它以次品冒充优质品,公司不再跟这个厂家进行合作。

在货物中生产厂家选择框,不能选择这个不再合作的厂家。

在系统中不能直接删除这个厂家,因为我们的历史数据中含有对这个生产厂家的引用。软件是采用“伪删除”方式来解决。

实际是在数据库表中加入列,作为标识,标识厂家是否可以被引用。0停用1启用。

新增厂家默认1,可以修改某个厂家为停用。在货物中选择厂家的下拉列表,只显示为启用。

数据库表是没有boolean,

Mysql      tinyint
Oracle     number(1)
实际项目中也可以设置为Char(1)

在数据库中给FACTORY_C表添加列state

Oracle数据库设置类型为char(1),
mysql数据库设置为tinyint,

接着在FactoryMapper中添加
<result property="state" column="STATE"/>


修改“新增”方法

<span style="white-space:pre">	</span><!-- 新增 -->
<insert id="insert" parameterType="cn.itcast.jk.domain.Factory">
insert into FACTORY_C
(FACTORY_ID,FULL_NAME,FACTORY_NAME,CONTACTS,PHONE,MOBILE,FAX,INSPECTOR,CNOTE,ORDER_NO,STATE,CREATE_BY,CREATE_DEPT,CREATE_TIME)
values
(
#{id,jdbcType=VARCHAR},
#{fullName,jdbcType=VARCHAR},
#{factoryName,jdbcType=VARCHAR},
#{contacts,jdbcType=VARCHAR},
#{phone,jdbcType=VARCHAR},
#{mobile,jdbcType=VARCHAR},
#{fax,jdbcType=VARCHAR},
#{inspector,jdbcType=VARCHAR},
#{cnote,jdbcType=VARCHAR},
#{orderNo,jdbcType=INTEGER},
#{state,jdbcType=INTEGER},

#{createBy,jdbcType=VARCHAR},
#{createDept,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP}
)
</insert>


还有查询方法

<span style="white-space:pre">	</span><!-- 查询 -->
<select id="find" parameterType="map" resultMap="factoryRM">
select * from FACTORY_C
where 1=1
<if test="state!=null">and STATE=#{state,jdbcType=INTEGER}</if>
order by ORDER_NO
</select>
并添加状态修改功能

因为通过ids跟state来进行修改,所以这里传进来的设置为一个map

<span style="white-space:pre">	</span><!-- 修改状态 -->
<update id="updateState" parameterType="map">
update FACTORY_C
set STATE=#{state}
where FACTORY_ID in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</update>


在Factory实体类中也要添加state字段,并设置get 和set方法,这里不再进行赘述。

接着在FactoryServiceImpl中修改insert方法

@Override
public void insert(com.wakev.xx.domain.Factory entity) {
entity.setId(UUID.randomUUID().toString());
entity.setState("1");			//0停用1启用
factoryDao.insert(entity);
}


在BaseDao中并没有这个方法,而且这个方法也不是每个表都有的,所以在FactoryDao中单独添加

public interface FactoryDao extends BaseDao<Factory> {
public void updateState(Map<String,Object> map);	//修改状态
}

@Repository
public class FactoryDaoImpl extends BaseDaoImpl<Factory> implements FactoryDao {
//利用默认构造方法初始化命名空间
public FactoryDaoImpl() {
super.setNs("com.wakev.xx.mapper.FactoryMapper");
}
@Override
public void updateState(Map<String, Object> map) {
super.getSqlSession().update(this.getNs() + ".updateState", map);
}
}


接着去修改对应的service层。
public void start(String[] ids);		//启用
public void stop(String[] ids);			//停用

ServiceImpl层

<span style="white-space:pre">	</span>@Override
public void start(String[] ids) {
Map<String, Object> map = new HashMap<String,Object>();
map.put("state", 1);		//1启用
map.put("ids", ids);
factoryDao.updateState(map);
}

@Override
public void stop(String[] ids) {
Map<String, Object> map = new HashMap<String,Object>();
map.put("state", 0);		//1停用
map.put("ids", ids);
factoryDao.updateState(map);
}
接着去修改controller层

<span style="white-space:pre">	</span>//启用
@RequestMapping("/basicinfo/factory/start.action")
public String start(@RequestParam("id")String[] ids){
factoryService.start(ids);

return "redirect:/basicinfo/factory/list.action";
}

//停用
@RequestMapping("/basicinfo/factory/stop.action")
public String stop(@RequestParam("id")String[] ids){
factoryService.stop(ids);

return "redirect:/basicinfo/factory/list.action";
}

着在列表页面添加两个按钮 “启动”“停用”。


<li id="new"><a href="#" onclick="formSubmit('start.action','_self');this.blur();">启用</a></li>
<li id="new"><a href="#" onclick="formSubmit('stop.action','_self');this.blur();">停用</a></li>

并且添加一个状态显示列

<thead>
<tr>
<td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll('id',this)"></td>
<td class="tableHeader">序号</td>
<td class="tableHeader">厂家全称</td>
<td class="tableHeader">缩写</td>
<td class="tableHeader">联系人</td>
<td class="tableHeader">电话</td>
<td class="tableHeader">手机</td>
<td class="tableHeader">传真</td>
<td class="tableHeader">验货员</td>
<td class="tableHeader">状态</td>
</tr>
</thead>

<tr class="odd" onmouseover="this.className='highlight'" onmouseout="this.className='odd'" >
<td><input type="checkbox" name="id" value="${o.id}"/></td>
<td>${status.index+1}</td>
<td><a href="toview.action?id=${o.id}">${o.fullName}</a></td>
<td>${o.factoryName}</td>
<td>${o.contacts}</td>
<td>${o.phone}</td>
<td>${o.mobile}</td>
<td>${o.fax}</td>
<td>${o.inspector}</td>
<td>
<c:if test="${o.state==0}"><a href="start.action?id=${o.id}"><font color="blue">停用</a></c:if>
<c:if test="${o.state==1}"><a href="stop.action?id=${o.id}"><font color="green">启用</font></a></c:if>		</td>
</tr>


这样状态功能也开发完毕。

这个方式,就是流程控制的基础,权限控制基础。

 

到这里,生产厂家的相关功能我们都开发完了。

到这里为止只是完成简单的开发,熟悉一下流程,接着的才是开始真正的项目开发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐