我们上一篇完成了出口报运增删查修的mapper+Dao+Service+Controller,而且在Controller中添加和获取出口报运的列表的方法,然后成功获取了出口报运的列表:
然后我们这次要添加出口报运的“新增”方法,但是这个“新增”和以往的新增方法不同,这个要与之前的购销合同关联在一起。
我们出口报运的“新增”是这样的:
用户要选择多个合同,然后进行报运。(体现出业务关联)
报运新增时,报运专责只能看到已上报的购销合同。
(操作出口报运的人是“报运专责”)
所以我们就需要有一个只有“已上报”的购销合同页面,我们可以仿照之前的购销合同的界面修改一份(将没上报的过滤掉)。
那么,在这里我们就要在购销合同的Mapper中添加查找已上报的“购销合同”的SQL了,我们要修改购销合同原来的“find”配置语句:
其实就是添加了
然后我们在出口报运的Service层加入获取“已上报”购销合同列表的方法:
ExportService.java:
在ExportServiceImpl中注入contractDao,然后添加相应的方法:
然后我们在Controller层中添加获取已上报购销合同的方法:
然后重启服务器我们测试一下我们的已上报购销合同列表查询是否成功:
之前的购销合同为:
所以我们的上报的购销合同就单独在购销合同查询功能中,成功!
我们先把之前的出口报运的“添加”按钮去掉(不需要):
我们接下来就要在“购销合同查询”页面添加“报运”功能:
因为我们“报运”的时候,要选择购销合同,然后把购销合同的“货物”以及“附件”转移到我们的出口报运中,也就是说我们出口报运也要有相应的“货物”以及“附件”的实体类和映射Mapper文件,所以我们先将这些准备好:
出口报运货物实体类:
出口报运货物Mapper映射文件ExportProductMapper.xml:
之后是出口报运附件的实体类:
出口报运附件的Mapper映射文件ExtEproductMapper.xml:
然后添加出口报运“货物”以及“附件”的Dao层:
ExportProductDao:
ExportProductDaoImpl:
ExtEproductDao:
ExtEproductDaoImpl:
然后我们修改我们出口报运的Service层的insert方法,当我们点击报运按钮的时候,可以将所选的购销合同的基本信息、合同下的货物和附件数据全部搬家至我们的出口报运中:
然后我们在Conntroller类中添加转向“报运”的方法:
我们重启服务器,来测试一下,我把之前出口报运的测试数据删除,然后现在出口报运的列表是空的:
我们选择“购销合同查询”选项,在里面选中我们的2个购销合同,可以看到,第一个购销合同的货物数/附件数为2/3,第二个是2/1,所以一共是4/4。合同号分别是2和3,然后我们点击报运:
最后我们上报成功跳转至出口报运界面:
我们发现我们的合同号以及货物和附件数量就是我们之前预测的,说明我们出口报运的“报运”功能已经成功!
然后我们这次要添加出口报运的“新增”方法,但是这个“新增”和以往的新增方法不同,这个要与之前的购销合同关联在一起。
我们出口报运的“新增”是这样的:
用户要选择多个合同,然后进行报运。(体现出业务关联)
报运新增时,报运专责只能看到已上报的购销合同。
(操作出口报运的人是“报运专责”)
所以我们就需要有一个只有“已上报”的购销合同页面,我们可以仿照之前的购销合同的界面修改一份(将没上报的过滤掉)。
那么,在这里我们就要在购销合同的Mapper中添加查找已上报的“购销合同”的SQL了,我们要修改购销合同原来的“find”配置语句:
- <!-- 查询多个 带总金额的计算-->
- <!-- 如果支持异构数据,必须针对每个数据库写一个SQL语句,因为使用了底层数据函数nvl -->
- <select id="find" parameterType="map" resultMap="contractRM">
- select
- (select count(*) from contract_product_c
- where contract_id=c.contract_id) as cpnum,
- (select count(*) from ext_cproduct_c
- where contract_product_id in (select contract_product_id from
- contract_product_c where contract_id=c.contract_id)
- ) as extnum,
- ( nvl((select sum(cnumber*price) as cptotal from contract_product_c
- where contract_id =c.contract_id),0)
- +
- nvl((select sum(cnumber*price) as exttotal from ext_cproduct_c
- where contract_product_id in (select contract_product_id from
- contract_product_c where contract_id=c.contract_id)),0)
- ) as total_amount,
- c.CONTRACT_ID,c.OFFEROR,c.CONTRACT_NO,c.SIGNING_DATE,c.INPUT_BY,c.CHECK_BY,
- c.INSPECTOR,c.IMPORT_NUM,c.CREQUEST,c.CUSTOM_NAME,c.DELIVERY_PERIOD,c.SHIP_TIME,c.
- TRADE_TERMS,c.REMARK,c.PRINT_STYLE,c.OLD_STATE,c.STATE,c.OUT_STATE
- from contract_c c
- where 1=1
- <if test="state=!=null">
- and c.state=#{state}
- </if>
- </select>
其实就是添加了
- where 1=1
- <if test="state=!=null">
- and c.state=#{state}
- </if>
然后我们在出口报运的Service层加入获取“已上报”购销合同列表的方法:
ExportService.java:
- package cn.hpu.jk.service;
- import java.io.Serializable;
- import java.util.List;
- import java.util.Map;
- import cn.hpu.jk.domain.Contract;
- import cn.hpu.jk.domain.Export;
- import cn.hpu.jk.pagination.Page;
- public interface ExportService {
- public List<Export> findPage(Page page); //分页查询
- //.....中间代省略
- public List<Contract> getContractList();//获取已上报的购销合同列表
- }
在ExportServiceImpl中注入contractDao,然后添加相应的方法:
- package cn.hpu.jk.service.impl;
- import java.io.Serializable;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.annotation.Resource;
- import cn.hpu.jk.dao.ContractDao;
- import cn.hpu.jk.dao.ExportDao;
- import cn.hpu.jk.domain.Contract;
- import cn.hpu.jk.domain.Export;
- import cn.hpu.jk.pagination.Page;
- import cn.hpu.jk.service.ExportService;
- public class ExportServiceImpl implements ExportService{
- @Resource
- ExportDao exportDao;
- @Resource
- ContractDao contractDao;
- @Override
- public List<Export> find(Map paraMap) {
- // TODO Auto-generated method stub
- return exportDao.find(paraMap);
- }
- //......中间代码省略
- @Override
- public List<Contract> getContractList() {
- Map paraMap=new HashMap();
- paraMap.put("state", 1);//1 已上报
- return contractDao.find(paraMap);
- }
- }
然后我们在Controller层中添加获取已上报购销合同的方法:
- //购销合同列表
- @RequestMapping("/cargo/export/contractList.action")
- public String contractList(Model model){
- List<Contract> dataList=exportService.getContractList();
- model.addAttribute("dataList", dataList);
- return "/cargo/export/jContractList.jsp";//报运目录下调用购销合同列表
- }
之后我们编写只显示“已上报”购销合同列表的jsp界面:
- <%@ page language="java" pageEncoding="UTF-8"%>
- <%@ include file="../../baselist.jsp"%>
- <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title></title>
- </head>
- <body>
- <form name="icform" method="post">
- <div id="menubar">
- <div id="middleMenubar">
- <div id="innerMenubar">
- <div id="navMenubar">
- <ul>
- <li id="view"><a href="#" onclick="formSubmit('${ctx}/cargo/contract/toview.action','_self');this.blur();">查看</a></li>
- <li id="print"><a href="#" onclick="formSubmit('${ctx}/cargo/contract/print.action','_self');this.blur();">打印</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 class="eXtremeTable" >
- <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>
- <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>${o.customName}</td>
- <td><a href="toview.action?id=${o.id}">${o.contractNo}</a></td>
- <td>${o.cpnum }/${o.extnum }</td>
- <td>${o.inputBy}</td>
- <td>${o.checkBy}</td>
- <td>${o.inspector}</td>
- <td><fmt:formatDate value="${o.signingDate}" pattern="yyyy-MM-dd"/></td>
- <td><fmt:formatDate value="${o.deliveryPeriod}" pattern="yyyy-MM-dd"/></td>
- <td><fmt:formatDate value="${o.shipTime}" pattern="yyyy-MM-dd"/></td>
- <td>${o.totalAmount}</td>
- </tr>
- </c:forEach>
- </tbody>
- </table>
- </div>
- </div>
- </form>
- </body>
- </html>
然后我们在侧边栏left.jsp中添加“购销合同查询”的链接:
- <div class="panel-title">货运管理</div>
- <div class="panel-content">
- <ul>
- <li><a href="${ctx }/cargo/contract/list.action" onclick="linkHighlighted(this)" target="main" id="aa_1">购销合同</a></li>
- <li><a href="${ctx }/cargo/outproduct/toedit.action" onclick="linkHighlighted(this)" target="main" id="aa_1">出货表</a></li>
- <li><a href="${ctx }/cargo/export/contractList.action" onclick="linkHighlighted(this)" target="main" id="aa_1">购销合同查询</a></li>
- <li><a href="${ctx }/cargo/export/list.action" onclick="linkHighlighted(this)" target="main" id="aa_1">出口报运</a></li>
- </ul>
- </div>
- </div>
如图:
然后重启服务器我们测试一下我们的已上报购销合同列表查询是否成功:
之前的购销合同为:
所以我们的上报的购销合同就单独在购销合同查询功能中,成功!
我们先把之前的出口报运的“添加”按钮去掉(不需要):
我们接下来就要在“购销合同查询”页面添加“报运”功能:
- <ul>
- <li id="view"><a href="#" onclick="formSubmit('${ctx}/cargo/contract/toview.action','_self');this.blur();">查看</a></li>
- <li id="print"><a href="#" onclick="formSubmit('${ctx}/cargo/contract/print.action','_self');this.blur();">打印</a></li>
- <li id="new"><a href="#" onclick="formSubmit('${ctx}/cargo/export/insert.action','_self');this.blur();">报运</a></li>
- </ul>
因为我们“报运”的时候,要选择购销合同,然后把购销合同的“货物”以及“附件”转移到我们的出口报运中,也就是说我们出口报运也要有相应的“货物”以及“附件”的实体类和映射Mapper文件,所以我们先将这些准备好:
出口报运货物实体类:
- package cn.hpu.jk.domain;
- public class ExportProduct {
- private String id;
- private String exportId;
- private String factoryId;
- private String factoryName;
- private String productNo;
- private Integer cnumber;
- private String packingUnit;
- private Double price;
- private Integer boxNum;
- private Double grossWeight;
- private Double netWeight;
- private Double sizeLength;
- private Double sizeWidth;
- private Double sizeHeight;
- private Double exPrice;
- private Double tax;
- private String orderNo;
- //set和get方法省略.....
- }
出口报运货物Mapper映射文件ExportProductMapper.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="cn.hpu.jk.mapper.ExportProductMapper">
- <resultMap type="cn.hpu.jk.domain.ExportProduct" id="exportProductRM">
- <id property="id" column="EXPORT_PRODUCT_ID"/>
- <result property="exportId" column="EXPORT_ID"/>
- <result property="factoryId" column="FACTORY_ID"/>
- <result property="factoryName" column="FACTORY_NAME"/>
- <result property="productNo" column="PRODUCT_NO"/>
- <result property="cnumber" column="CNUMBER"/>
- <result property="packingUnit" column="PACKING_UNIT"/>
- <result property="price" column="PRICE"/>
- <result property="boxNum" column="BOX_NUM"/>
- <result property="grossWeight" column="GROSS_WEIGHT"/>
- <result property="netWeight" column="NET_WEIGHT"/>
- <result property="sizeLength" column="SIZE_LENGTH"/>
- <result property="sizeWidth" column="SIZE_WIDTH"/>
- <result property="sizeHeight" column="SIZE_HEIGHT"/>
- <result property="exPrice" column="EX_PRICE"/>
- <result property="tax" column="TAX"/>
- <result property="orderNo" column="ORDER_NO"/>
- </resultMap>
- <!-- 查询某个报运下的货物信息 -->
- <select id="find" parameterType="map" resultMap="exportProductRM">
- select * from export_product_c
- where 1=1
- <if test="exportId != null">and export_id=#{exportId}</if>
- </select>
- <select id="get" parameterType="string" resultMap="exportProductRM">
- select * from export_product_c
- where export_product_id=#{pid}
- </select>
- <insert id="insert" parameterType="cn.hpu.jk.domain.ExportProduct">
- insert into export_product_c
- (EXPORT_PRODUCT_ID,EXPORT_ID,FACTORY_ID,FACTORY_NAME,PRODUCT_NO,CNUMBER,PACKING_UNIT,
- PRICE,BOX_NUM,GROSS_WEIGHT,NET_WEIGHT,SIZE_LENGTH,SIZE_WIDTH,SIZE_HEIGHT,EX_PRICE,TAX,ORDER_NO)
- values
- (
- #{id},
- #{exportId, jdbcType=VARCHAR},
- #{factoryId, jdbcType=VARCHAR},
- #{factoryName, jdbcType=VARCHAR},
- #{productNo, jdbcType=VARCHAR},
- #{cnumber, jdbcType=INTEGER},
- #{packingUnit, jdbcType=VARCHAR},
- #{price, jdbcType=DOUBLE},
- #{boxNum, jdbcType=INTEGER},
- #{grossWeight, jdbcType=DOUBLE},
- #{netWeight, jdbcType=DOUBLE},
- #{sizeLength, jdbcType=DOUBLE},
- #{sizeWidth, jdbcType=DOUBLE},
- #{sizeHeight, jdbcType=DOUBLE},
- #{exPrice, jdbcType=DOUBLE},
- #{tax, jdbcType=DOUBLE},
- #{orderNo, jdbcType=INTEGER}
- )
- </insert>
- <update id="update" parameterType="cn.hpu.jk.domain.ExportProduct">
- update export_product_c
- <set>
- <if test="exportId != null">EXPORT_ID=#{exportId},</if>
- <if test="factoryId != null">FACTORY_ID=#{factoryId},</if>
- <if test="factoryName != null">FACTORY_NAME=#{factoryName},</if>
- <if test="productNo != null">PRODUCT_NO=#{productNo},</if>
- <if test="cnumber != null">CNUMBER=#{cnumber},</if>
- <if test="packingUnit != null">PACKING_UNIT=#{packingUnit},</if>
- <if test="price != null">PRICE=#{price},</if>
- <if test="boxNum != null">BOX_NUM=#{boxNum},</if>
- <if test="grossWeight != null">GROSS_WEIGHT=#{grossWeight},</if>
- <if test="netWeight != null">NET_WEIGHT=#{netWeight},</if>
- <if test="sizeLength != null">SIZE_LENGTH=#{sizeLength},</if>
- <if test="sizeWidth != null">SIZE_WIDTH=#{sizeWidth},</if>
- <if test="sizeHeight != null">SIZE_HEIGHT=#{sizeHeight},</if>
- <if test="exPrice != null">EX_PRICE=#{exPrice},</if>
- <if test="tax != null">TAX=#{tax},</if>
- <if test="orderNo != null">ORDER_NO=#{orderNo},</if>
- </set>
- where export_product_id=#{id}
- </update>
- </mapper>
之后是出口报运附件的实体类:
- package cn.hpu.jk.domain;
- public class ExtEproduct {
- private String id;
- //private Contract contract;//将复杂的关联变成单表操作
- private String exportProductId;//关联关系的表,都成为普通字段
- private String factoryId;
- private String factoryName;
- private String ctype;
- private String productNo;
- private String productImage;
- private String productDesc;//货物描述
- private Integer cnumber;//数量
- private String packingUnit;//包装单位
- private Double price;//单价
- private Double amount;//总价
- private String productRequest;//要求
- private Integer orderNo;//排序号
- //set和get方法省略.....
- }
出口报运附件的Mapper映射文件ExtEproductMapper.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="cn.hpu.jk.mapper.ExtEproductMapper">
- <resultMap type="cn.hpu.jk.domain.ExtEproduct" id="extEproductRM">
- <id property="id" column="EXT_EPRODUCT_ID"/>
- <result property="exportProductId" column="EXPORT_PRODUCT_ID"/>
- <result property="factoryId" column="FACTORY_ID"/>
- <result property="factoryName" column="FACTORY_NAME"/>
- <result property="ctype" column="CTYPE"/>
- <result property="productNo" column="PRODUCT_NO"/>
- <result property="productImage" column="PRODUCT_IMAGE"/>
- <result property="productDesc" column="PRODUCT_DESC"/>
- <result property="cnumber" column="CNUMBER"/>
- <result property="packingUnit" column="PACKING_UNIT"/>
- <result property="price" column="PRICE"/>
- <result property="amount" column="AMOUNT"/>
- <result property="productRequest" column="PRODUCT_REQUEST"/>
- <result property="orderNo" column="ORDER_NO"/>
- </resultMap>
- <!-- 查询某个货物下的附件信息 -->
- <select id="find" parameterType="map" resultMap="extEproductRM">
- select * from ext_eproduct_c
- where 1=1
- <if test="exportProductId != null"> and EXPORT_PRODUCT_ID=#{exportProductId}</if>
- </select>
- <select id="get" parameterType="string" resultMap="extEproductRM">
- select * from ext_eproduct_c
- where ext_eproduct_id=#{pid}
- </select>
- <insert id="insert" parameterType="cn.hpu.jk.domain.ExtEproduct">
- insert into ext_eproduct_c
- (EXT_EPRODUCT_ID,EXPORT_PRODUCT_ID,FACTORY_ID,FACTORY_NAME,CTYPE,PRODUCT_NO,
- PRODUCT_IMAGE,PRODUCT_DESC,CNUMBER,
- PACKING_UNIT,PRICE,AMOUNT,PRODUCT_REQUEST,ORDER_NO)
- values(
- #{id},
- #{exportProductId},
- #{factoryId},
- #{factoryName, jdbcType=VARCHAR},
- #{ctype, jdbcType=VARCHAR},
- #{productNo, jdbcType=VARCHAR},
- #{productImage, jdbcType=VARCHAR},
- #{productDesc, jdbcType=VARCHAR},
- #{cnumber, jdbcType=INTEGER},
- #{packingUnit, jdbcType=VARCHAR},
- #{price, jdbcType=DOUBLE},
- #{amount, jdbcType=DOUBLE},
- #{productRequest, jdbcType=VARCHAR},
- #{orderNo, jdbcType=INTEGER}
- )
- </insert>
- <update id="update" parameterType="cn.hpu.jk.domain.ExtEproduct">
- update ext_eproduct_c
- <set>
- EXPORT_PRODUCT_ID=#{exportProductId},
- FACTORY_ID=#{factoryId},
- <if test="factoryName != null">FACTORY_NAME=#{factoryName},</if>
- <if test="ctype != null">CTYPE=#{ctype},</if>
- <if test="productNo != null">PRODUCT_NO=#{productNo},</if>
- <if test="productImage != null">PRODUCT_IMAGE=#{productImage},</if>
- <if test="productDesc != null">PRODUCT_DESC=#{productDesc},</if>
- <if test="cnumber != null">CNUMBER=#{cnumber},</if>
- <if test="packingUnit != null">PACKING_UNIT=#{packingUnit},</if>
- <if test="price != null">PRICE=#{price},</if>
- <if test="amount != null">AMOUNT=#{amount},</if>
- <if test="productRequest != null">PRODUCT_REQUEST=#{productRequest},</if>
- <if test="orderNo != null">ORDER_NO=#{orderNo},</if>
- </set>
- where EXT_EPRODUCT_ID=#{id}
- </update>
- <!-- 删除一条 -->
- <delete id="deleteById" parameterType="string">
- delete from ext_eproduct_c
- where EXT_EPRODUCT_ID=#{pid}
- </delete>
- <!-- 删除多条(一维字符串数组) -->
- <delete id="delete" parameterType="string">
- delete from ext_eproduct_c
- where EXT_EPRODUCT_ID in
- <foreach collection="array" item="id" open="(" close=")" separator=",">
- #{id}
- </foreach>
- </delete>
- </mapper>
然后添加出口报运“货物”以及“附件”的Dao层:
ExportProductDao:
- package cn.hpu.jk.dao;
- import cn.hpu.jk.domain.ExportProduct;
- public interface ExportProductDao extends BaseDao<ExportProduct>{
- //我们这里可以直接使用继承的BaseDao的增删改查方法
- //创建一系列其它Dao的原因是因为其它Dao有可能需要拓展
- }
ExportProductDaoImpl:
- package cn.hpu.jk.dao.impl;
- import org.springframework.stereotype.Repository;
- import cn.hpu.jk.dao.ExportProductDao;
- import cn.hpu.jk.domain.ExportProduct;
- @Repository //为了包扫描的时候这个Dao被扫描到
- public class ExportProductDaoImpl extends BaseDaoImpl<ExportProduct> implements ExportProductDao{
- public ExportProductDaoImpl(){
- //设置命名空间
- super.setNs("cn.hpu.jk.mapper.ExportProductMapper");
- }
- }
ExtEproductDao:
- package cn.hpu.jk.dao;
- import cn.hpu.jk.domain.ExtEproduct;
- public interface ExtEproductDao extends BaseDao<ExtEproduct>{
- //我们这里可以直接使用继承的BaseDao的增删改查方法
- //创建一系列其它Dao的原因是因为其它Dao有可能需要拓展
- }
ExtEproductDaoImpl:
- package cn.hpu.jk.dao.impl;
- import org.springframework.stereotype.Repository;
- import cn.hpu.jk.dao.ExtEproductDao;
- import cn.hpu.jk.domain.ExtEproduct;
- @Repository //为了包扫描的时候这个Dao被扫描到
- public class ExtEproductDaoImpl extends BaseDaoImpl<ExtEproduct> implements ExtEproductDao{
- public ExtEproductDaoImpl(){
- //设置命名空间
- super.setNs("cn.hpu.jk.mapper.ExtEproductMapper");
- }
- }
然后我们修改我们出口报运的Service层的insert方法,当我们点击报运按钮的时候,可以将所选的购销合同的基本信息、合同下的货物和附件数据全部搬家至我们的出口报运中:
- @Override
- public void insert(String [] contractIds) {
- //步骤
- //1.根据合同id获得合同对象,获取合同号
- //2.将合同下的货物信息搬到报运下的货物表中
- //2.将合同下的附件信息搬到报运下的附件表中
- //拼接合同号,报运号
- String contractNos="";
- for (int i = 0; i < contractIds.length; i++) {
- ContractVO contract=contractDao.view(contractIds[i]);
- contractNos+=contract.getContractNo()+" ";//以空格作为分割符
- }
- contractNos=UtilFuns.delLastChar(contractNos);//删除最后一个空格
- Export export=new Export();
- export.setId(UUID.randomUUID().toString());
- //将String数组拼成“x,y,z”形式的字符串
- export.setContractIds(UtilFuns.joinStr(contractIds,","));//工具类,拼接字符串
- export.setCustomerContract(contractNos);
- exportDao.insert(export);
- //处理货物以及附件信息
- for (int i = 0; i < contractIds.length; i++) {
- ContractVO contract=contractDao.view(contractIds[i]);
- for(ContractProductVO cp : contract.getContractProducts()){
- //处理货物信息
- ExportProduct ep=new ExportProduct();
- ep.setId(UUID.randomUUID().toString());
- ep.setExportId(export.getId());
- //数据搬家,将合同下的对应的货物信息写入到报运下的货物信息中
- ep.setFactoryId(cp.getFactory().getId());
- ep.setFactoryName(cp.getFactoryName());
- ep.setProductNo(cp.getProductNo());
- ep.setPackingUnit(cp.getPackingUnit());
- ep.setCnumber(cp.getCnumber());
- ep.setBoxNum(Integer.parseInt(cp.getBoxNum()));
- ep.setPrice(cp.getPrice());
- exportProductDao.insert(ep);
- //处理附件信息
- for (ExtCproductVO extcp : cp.getExtCproducts()) {
- ExtEproduct extep=new ExtEproduct();
- //BeanUtils是Spring提供的工具类,实现数据的拷贝
- BeanUtils.copyProperties(extcp, extep);
- //拷贝的数据并不能完全使用,我们要修改其中的部分数据
- extep.setId(UUID.randomUUID().toString());
- extep.setExportProductId(ep.getId());//绑定外键
- extep.setFactoryId(extcp.getFactory().getId());
- extep.setFactoryName(extcp.getFactory().getFactoryName());
- extEproductDao.insert(extep);
- }
- }
- }
- }
然后我们在Conntroller类中添加转向“报运”的方法:
- //报运新增,直接在后台进行保存
- @RequestMapping("/cargo/export/insert.action")
- public String insert(String [] id){
- exportService.insert(id);
- return "redirect:/cargo/export/list.action";
- }
我们重启服务器,来测试一下,我把之前出口报运的测试数据删除,然后现在出口报运的列表是空的:
我们选择“购销合同查询”选项,在里面选中我们的2个购销合同,可以看到,第一个购销合同的货物数/附件数为2/3,第二个是2/1,所以一共是4/4。合同号分别是2和3,然后我们点击报运:
最后我们上报成功跳转至出口报运界面:
我们发现我们的合同号以及货物和附件数量就是我们之前预测的,说明我们出口报运的“报运”功能已经成功!
但是依然有很多数据没有,这是下一次我们要解决的问题。