【springmvc+mybatis项目实战】杰信商贸-31.出口报运业务-购销合同查询与上报

我们上一篇完成了出口报运增删查修的mapper+Dao+Service+Controller,而且在Controller中添加和获取出口报运的列表的方法,然后成功获取了出口报运的列表:


然后我们这次要添加出口报运的“新增”方法,但是这个“新增”和以往的新增方法不同,这个要与之前的购销合同关联在一起。

我们出口报运的“新增”是这样的:
用户要选择多个合同,然后进行报运。(体现出业务关联)
报运新增时,报运专责只能看到已上报的购销合同。
(操作出口报运的人是“报运专责”)

所以我们就需要有一个只有“已上报”的购销合同页面,我们可以仿照之前的购销合同的界面修改一份(将没上报的过滤掉)。

那么,在这里我们就要在购销合同的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="#" οnclick="formSubmit('${ctx}/cargo/contract/toview.action','_self');this.blur();">查看</a></li>
	<li id="print"><a href="#" οnclick="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" οnclick="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" οnmοuseοver="this.className='highlight'" οnmοuseοut="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" οnclick="linkHighlighted(this)" target="main" id="aa_1">购销合同</a></li>
		<li><a href="${ctx }/cargo/outproduct/toedit.action" οnclick="linkHighlighted(this)" target="main" id="aa_1">出货表</a></li>
		<li><a href="${ctx }/cargo/export/contractList.action" οnclick="linkHighlighted(this)" target="main" id="aa_1">购销合同查询</a></li>
		<li><a href="${ctx }/cargo/export/list.action" οnclick="linkHighlighted(this)" target="main" id="aa_1">出口报运</a></li>
	     </ul>
        </div>
</div>

如图:



然后重启服务器我们测试一下我们的已上报购销合同列表查询是否成功:


之前的购销合同为:


所以我们的上报的购销合同就单独在购销合同查询功能中,成功!

我们先把之前的出口报运的“添加”按钮去掉(不需要):


我们接下来就要在“购销合同查询”页面添加“报运”功能:
<ul>
<li id="view"><a href="#" οnclick="formSubmit('${ctx}/cargo/contract/toview.action','_self');this.blur();">查看</a></li>
<li id="print"><a href="#" οnclick="formSubmit('${ctx}/cargo/contract/print.action','_self');this.blur();">打印</a></li>
<li id="new"><a href="#" οnclick="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,然后我们点击报运:


最后我们上报成功跳转至出口报运界面:

我们发现我们的合同号以及货物和附件数量就是我们之前预测的,说明我们出口报运的“报运”功能已经成功!


但是依然有很多数据没有,这是下一次我们要解决的问题。

源码下载链接:杰信商贸源码.zip

转载请注明出处:http://blog.csdn.net/acmman/article/details/48947217

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值