`
收藏列表
标题 标签 来源
代码收集
	String resetPwd = RandomStringUtils.randomNumeric(10);//随机数


	@Override
	public List<StatisticProduct> statistic(Date beginDate, Date endDate) {
		String sql = "SELECT p.product_id,p.product_name,p.sale_price,p.purchase_price,"
				+ " (sale_price-purchase_price) profit,total_count.sale_count,"
				+ " (sale_price*total_count.sale_count) sale_sum,"
				+ " (purchase_price*total_count.sale_count) sale_purchase,"
				+ " (sale_price*total_count.sale_count - purchase_price*total_count.sale_count)sale_profit  "
				+ " FROM jc_product p";
		// Finder f = Finder.create(hql);
		sql += " JOIN "
				+ " (SELECT e.product_id,SUM(e.product_count) sale_count FROM jc_order_ext e "
				+ " JOIN jc_order o ON e.order_id = o.order_id "
				+ " WHERE  1=1 ";
		SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd");
		String begin = format.format(beginDate);
		String end = format.format(endDate);
		if (null != beginDate) {
			sql += " and o.order_date >='"+begin+"'";
		}
		if (null != endDate) {
			sql += "  and o.order_date <='"+end+"'";
		}
		sql += "  GROUP BY e.product_id )  total_count  ON  total_count.product_id= p.product_id ";

		SQLQuery query = (SQLQuery) getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(StatisticProduct.class));
		List<StatisticProduct> list = query.list();
		return list;
	}









/**
	 * 按时间条件查询
	 * 
	 * @param response
	 * @param request
	 * @param fromDate
	 * @param ToDate
	 * @return String
	 */
	@RequestMapping("/productstatistic/searchOutPut.do")
	public void searchDownExcel(HttpServletResponse response,
			HttpServletRequest request, Date beginDate, Date endDate,ModelMap model) {
		StringBuffer p = request.getRequestURL();
		String path = "/yiwen/WEB-INF/jeecms_sys/product/产品销售统计.xls";
	    	String aa=request.getSession().getServletContext().getRealPath("");
	    	Integer index= aa.lastIndexOf("\\")+1;
	    	String path1=aa.substring(0, index);
	    	 path=path1+path;
		//path = path1 + path;
		List<StatisticProduct> list =statisticProductMng.statistic(beginDate, endDate);
		for (StatisticProduct statisticProduct : list) {
			gernerate(path, request, statisticProduct, beginDate, endDate);
		}
		ExcelUtil.downloadFile(request, response, path);
		(new File(path)).delete();// 下载后并删除文件
		List<StatisticProduct> list1 =statisticProductMng.statistic(beginDate, endDate);
		Integer size = list.size();
		model.addAttribute("list", list1);
		model.addAttribute("beginDate", beginDate);
		model.addAttribute("endDate", endDate);
		model.addAttribute("size", size);
		//return "product/statistic";
	}




public void gernerate(String path,HttpServletRequest request,StatisticProduct bean,Date beginDate,Date endDate) {
		SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd");
		String begin="开店始";
		if(null!=beginDate)
			begin= format.format(beginDate);
		String end="今";
		if(null!=endDate)
			end= format.format(endDate);
		OutputStream out=null;
    	 File file=new File(path);
	       if (!file.exists()) {
	        try {
				file.createNewFile();
				HSSFWorkbook hwb = new HSSFWorkbook();//建立新HSSFWorkbook对象
				HSSFSheet sheet=hwb.createSheet(begin+"至"+end+"--产品销售统计");
			      HSSFRow rows=sheet.createRow(0);
			      HSSFCell[] firstcell = new HSSFCell[9];  
			        String[] names = new String[9];  
			        names[0] = "产品ID";
			        names[1] = "产品名";  
			        names[2] = "售价";    
			        
			        names[3] = "进价";    
			        names[4] = "单件利润"; 
			        names[5] = "销售量"; 
			        names[6] = "销售总额"; 
			        names[7] = "销售成本"; 
			        names[8] = "销售利润"; 
			     
			        for (int j = 0; j < 9; j++) {  
			            firstcell[j] = rows.createCell(j);  
			            firstcell[j].setCellValue(new HSSFRichTextString(names[j]));  
			            sheet.setColumnHidden(j,false);
			        }
			        	 	HSSFRow row = sheet.createRow(1);
			        		 HSSFCell xh=row.createCell(0);
			        		 xh.setCellValue(bean.getProduct_id());
			        		 HSSFCell xh1=row.createCell(1);
			        		 xh1.setCellValue(bean.getProduct_name());
			        		 HSSFCell xh2=row.createCell(2);
			        		 xh2.setCellValue(bean.getSale_price());
			        		 
			        		 HSSFCell xh3=row.createCell(3);
			        		 xh3.setCellValue(bean.getPurchase_price());
			        		 HSSFCell xh4=row.createCell(4);
			        		 xh4.setCellValue(bean.getProfit());
			        		 HSSFCell xh5=row.createCell(5);
			        		 xh5.setCellValue(bean.getSale_count().floatValue());
			        		 HSSFCell xh6=row.createCell(6);
			        		 xh6.setCellValue(bean.getSale_sum());
			        		 HSSFCell xh7=row.createCell(7);
			        		 xh7.setCellValue(bean.getSale_purchase());
			        		 HSSFCell xh8=row.createCell(8);
			        		 xh8.setCellValue(bean.getSale_profit());
			        
			        out = new FileOutputStream(file);
			        hwb.write(out);
					out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
	              System.out.println(file + "已创建!");
	          }
	       
	       else if (file.exists()) {
	          try {
	         FileInputStream fs=new FileInputStream(file);
	         POIFSFileSystem ps=new POIFSFileSystem(fs);
	         HSSFWorkbook wb=new HSSFWorkbook(ps);
	         HSSFSheet sheet=wb.getSheetAt(0);
	         HSSFRow row=null;
	         
	         FileOutputStream fileOut=new FileOutputStream(file);
	         row=sheet.createRow((short)(sheet.getLastRowNum()+1));
        	
	         HSSFCell xh=row.createCell(0);
    		 xh.setCellValue(bean.getProduct_id());
    		 HSSFCell xh1=row.createCell(1);
    		 xh1.setCellValue(bean.getProduct_name());
    		 HSSFCell xh2=row.createCell(2);
    		 xh2.setCellValue(bean.getSale_price());
    		 
    		 HSSFCell xh3=row.createCell(3);
    		 xh3.setCellValue(bean.getPurchase_price());
    		 HSSFCell xh4=row.createCell(4);
    		 xh4.setCellValue(bean.getProfit());
    		 HSSFCell xh5=row.createCell(5);
    		 xh5.setCellValue(bean.getSale_count().floatValue());
    		 HSSFCell xh6=row.createCell(6);
    		 xh6.setCellValue(bean.getSale_sum());
    		 HSSFCell xh7=row.createCell(7);
    		 xh7.setCellValue(bean.getSale_purchase());
    		 HSSFCell xh8=row.createCell(8);
    		 xh8.setCellValue(bean.getSale_profit());
        	
	         wb.write(fileOut);//把Workbook对象输出到路径path中
	         fileOut.close();
	         } catch (IOException e) {
	         e.printStackTrace();
	              }
	        }
	}







	@SuppressWarnings("unchecked")
	public List<Content> getListByIdsForTag(Integer[] ids, int orderBy) {
		Finder f = Finder.create("from Content bean where bean.id in (:ids)");
		f.setParamList("ids", ids);
		appendOrder(f, orderBy);
		f.setCacheable(true);
		return find(f);
	}



		StringBuffer p = request.getRequestURL();
		int endp = p.length() - "order/v_orderPay.jspx".length();
		String path1 = p.toString().substring(0, endp);
java 下拉数据异步请求(例子)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title></title>
<#include "/jeecms_sys/head.html"/>
<script type="text/javascript">
$(function() {
	$("#jvForm").validate();
});
</script>
</head>
<body>
<div class="box-positon">
	<div class="rpos"><@s.m "global.position"/>: <@s.m "cmsMember.function"/> - <@s.m "global.add"/></div>
	<form class="ropt">
		<input type="submit" value="<@s.m "global.backToList"/>" onclick="this.form.action='v_list.do';" class="return-button"/>
	</form>
	<div class="clear"></div>
</div>
<div class="body-box">
<#assign usernameExist><@s.m "error.usernameExist"/></#assign>
<@p.form id="jvForm" action="o_save.do" labelWidth="12">
<#if regionlist?exists>
	<@p.td colspan="1" width="50" label="业主所在房子" required="true">
		<#if is_super?exists&&is_super==1>
			<select name="community_id" id="community_id" onchange="building()" >
				<option value=''>选择小区</option>
				<#if communityList?exists>
					<#list communityList as community>
						<option value='${(community.id)!}'>${community.community_name!'选择小区'}</option>
					</#list>
				<#else>
					<option value=''>暂无小区</option>
				</#if>
			<select>
		<#else>
			<select name="city_id" id="city_id" onchange="community()" >
				<option value=''>选择城市</option>
				<#list regionlist as regions>
					<option value='${(regions.id)!}'>${(regions.region_name)!}</option>
				</#list>
			<select>
			<select name="community_id" id="community_id" onchange="building()" >
				<option value=''>选择小区</option>
				
			<select>
		</#if>
		
		<select name="building_id" id="building_id" onchange="room()" >
			<option value=''>选择楼号</option>
		<select>
		
		<select name="room_id" id="room_id" required="true" onchange="checkYezhu()" >
			<option value=''>选择房号</option>
			
		<select>
	</@p.td>
</#if>
<@p.td width="50" colspan="1" label="用户身份">业主</@p.td>
<@p.tr/>
<@p.text width="50" colspan="1" label="cmsUser.username" name="username" required="true" maxlength="100" vld="{required:true,username:true,remote:'v_check_username.do',messages:{remote:'${usernameExist}'}}"/>
<@p.text width="50" colspan="1" label="cmsUser.email" name="email" size="30" class="email" vld="{email:true,remote:'v_check_email.do',messages:{remote:'该邮箱已注册过'}}"/><@p.tr/>
<@p.text width="50" colspan="1" label="手机" name="user_mobile" required="true" maxlength="50" onblur="checkmobile(this)"/>
<@p.password width="50" colspan="1" label="cmsUser.password" id="password" name="password" maxlength="100" required="true" class="required"/><@p.tr/>
<@p.password width="50" colspan="1" label="cmsUser.pwdAgain" required="true" equalTo="#password"/>
<@p.select colspan="2" label="cmsUser.group" name="groupId" list=groupList listKey="id" listValue="name" required="true"/><@p.tr/>
<@p.text width="50" colspan="1" label="cmsUser.realname" name="realname" maxlength="100"/>
<@p.text width="50" colspan="1" label="身份证" name="id_number" maxlength="100"/><@p.tr/>
<@p.radio width="50" colspan="1" label="cmsUser.gender" name="gender" list={"true":"cmsUser.male","false":"cmsUser.female","":"cmsUser.secrecy"}/>
<@p.text width="50" colspan="1" label="cmsUser.birthday" name="birthday" onclick="WdatePicker({dateFmt:'yyyy-MM-dd'})" class="Wdate"/><@p.tr/>
<!-- <@p.text width="50" colspan="1" label="cmsUser.comefrom" name="comefrom" maxlength="150"/><@p.tr/> -->
<@p.text width="50" colspan="1" label="cmsUser.qq" name="qq" maxlength="100"/>
<!-- <@p.text width="50" colspan="1" label="cmsUser.msn" name="msn" maxlength="100"/><@p.tr/> -->
<@p.text width="50" colspan="1" label="cmsUser.phone" name="phone" maxlength="50"/><@p.tr/>
<!-- <@p.textarea colspan="2" label="cmsUser.intro" name="intro" maxlength="255" cols="70" rows="5"/><@p.tr/> -->
<@p.td colspan="2"><@p.submit code="global.submit"/>   <@p.reset code="global.reset"/></@p.td>
</@p.form>
</div>
<script>
	//获取某城市下的小区列表
	function community(){
		var city_id = $('#city_id  option:selected').val();
		//alert(city_id);
		$.ajax({
            url:"../community/listByCity.do",
            data:{city_id:city_id},
            type:"POST",
            dataType:"json",
            timeout:5000,
            success:function(json){
                var select_option;
                //console.log(json);
              	// console.log(json.Data.cityList);
                var options_str = "";
                for ( var int = 0; int < json.communityList.length; int++) {
					options_str += "<option value=\"" + json.communityList[int].community_id + "\" >" + json.communityList[int].community_name + "</option>";
				}
                $("#community_id").empty();
                $("#community_id").append("<option value=''>选择小区</option>");
                
                $("#building_id").empty();
                $("#building_id").append("<option value=''>选择楼号</option>");
                
                $("#room_id").empty();
                $("#room_id").append("<option value=''>选择房号</option>");
                
                $("#community_id").append(options_str);
                return;
            },
    	})
	}
	//获取小区下的楼号列表
	function building(){
		var community_id = $('#community_id  option:selected').val();
		//alert(community_id);
		$.ajax({
            url:"../building/buildingList.do",
            data:{community_id:community_id},
            type:"POST",
            dataType:"json",
            timeout:5000,
            success:function(json){
                var select_option;
                var options_str = "";//alert(json.buildingList);
                for ( var int = 0; int < json.buildingList.length; int++) {
					options_str += "<option value=\"" + json.buildingList[int].building_id + "\" >" + json.buildingList[int].building_name + "</option>";
				}
				$("#building_id").empty();
				$("#building_id").append("<option value=''>选择楼号</option>");
				
                $("#room_id").empty();
                $("#room_id").append("<option value=''>选择房号</option>");
                
                $("#building_id").append(options_str);
                return;
            },
    	})
	}
	//获取楼号下的房子列表
	function room(){
		var building_id = $('#building_id  option:selected').val();
		//alert(building_id);
		$.ajax({
            url:"../room/roomList.do",
            data:{building_id:building_id},
            type:"POST",
            dataType:"json",
            timeout:5000,
            success:function(json){
                var select_option;
                var options_str = "";
                for ( var int = 0; int < json.roomList.length; int++) {
					options_str += "<option value=\"" + json.roomList[int].room_id + "\" >" + json.roomList[int].room_name + "</option>";
				}
                $("#room_id").empty();//清空原有数据
                $("#room_id").append("<option value=''>选择房号</option>");//恢复第一条描述
                
                $("#room_id").append(options_str);
                return;
            },
    	})
	}
	//检查所选择的房子是否已经有业主
	function checkYezhu(){
		var community_id = $("#community_id").val();
		var building_id = $("#building_id").val();
		var room_id = $('#room_id  option:selected').val();
		$.ajax({
            url:"../member/v_checkYezhu.do?room_id="+room_id+"&building_id="+building_id+"&community_id="+community_id+"&ctype=1",
            //data:{room_id:room_id},
            type:"POST",
            dataType:"json",
            timeout:5000,
            success:function(json){
                if(json.message=='true')
                	alert("该房子已有业主!");
                else if(json.message=='cuowu')
                	alert("抱歉,异步检查所选房子是否已有业主出错");
                else
                    return;
            },
    	})
	}
</script>
<script type="text/javascript">
function checkmobile(This){
	var mobile = $(This).val();
	//var member_id = $(This).siblings("input[name=xiaxian_id]").val();
	//alert(mobile);
	$.ajax({
		url:"../member/v_check_user_mobile.do?ctype=1&user_mobile="+mobile,
		type:"POST",
		dataType:"json",
		success:function(result){
			if(result.message=="0"){
				
			}
			if(result.message=="1"){
				alert("该手机已注册");
			}
			if(result.message=="2"){
				alert("检查手机号出错");
			}
		},
		error:function(){
			alert("抱歉,检查手机号出错!");
		}
	});
}
</script>
</body>
</html>
采用HttpClient发送HTTP请求
采用HttpClient发送HTTP请求
2015/9/10 14:09:11

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在JDK的URLConnection包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
项目地址:http://hc.apache.org/index.html

一、功能介绍
实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
支持HTTPS协议
支持自动转向
插件式的自定义认证方案
支持代理服务器
自定义Cookie
直接获取服务器发送的response code和 headers
在http1.0和http1.1中利用KeepAlive保持持久连接
设置连接超时的能力
二、使用方法
创建HttpClient对象。
创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
释放连接。无论执行方法是否成功,都必须释放连接。
三、代码实现
发送 get请求代码  
/**  
     * 发送 get请求  
     */  
    public void get() {  
        CloseableHttpClient httpclient = HttpClients.createDefault();  
        try {  
            // 创建httpget.  
            HttpGet httpget = new HttpGet("http://www.baidu.com/");  
            System.out.println("executing request " + httpget.getURI());  
            // 执行get请求.  
            CloseableHttpResponse response = httpclient.execute(httpget);  
            try {  
                // 获取响应实体  
                HttpEntity entity = response.getEntity();  
                System.out.println("--------------------------------------");  
                // 打印响应状态  
                System.out.println(response.getStatusLine());  
                if (entity != null) {  
                    // 打印响应内容长度  
                    System.out.println("Response content length: " + entity.getContentLength());  
                    // 打印响应内容  
                    System.out.println("Response content: " + EntityUtils.toString(entity));  
                }  
                System.out.println("------------------------------------");  
            } finally {  
                response.close();  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            // 关闭连接,释放资源  
            try {  
                httpclient.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
 
Post方式代码  
/**  
     * post方式  
     */  
    public void postForm() {  
        // 创建默认的httpClient实例.  
        CloseableHttpClient httpclient = HttpClients.createDefault();  
        // 创建httppost  
        HttpPost httppost = new HttpPost("http://localhost:8080/Demo/test.action");  
        // 创建参数队列  
        List<NameValuePair> formparams = new ArrayList<NameValuePair>();  
        formparams.add(new BasicNameValuePair("username", "tt"));  
        formparams.add(new BasicNameValuePair("password", "123456"));  
        UrlEncodedFormEntity uefEntity;  
        try {  
            uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");  
            httppost.setEntity(uefEntity);  
            System.out.println("executing request " + httppost.getURI());  
            CloseableHttpResponse response = httpclient.execute(httppost);  
            try {  
                HttpEntity entity = response.getEntity();  
                if (entity != null) {  
                    System.out.println("--------------------------------------");  
                    System.out.println("Response content: " + EntityUtils.toString(entity, "UTF-8"));  
                    System.out.println("--------------------------------------");  
                }  
            } finally {  
                response.close();  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            // 关闭连接,释放资源  
            try {  
                httpclient.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
 
上传文件代码  
/**  
     * 上传文件  
     */  
    public void upload() {  
        CloseableHttpClient httpclient = HttpClients.createDefault();  
        try {  
            HttpPost httppost = new HttpPost("http://localhost:8080/Demo/upFile.action");  
  
            FileBody bin = new FileBody(new File("F:\\image\\text.jpg"));  
            StringBody comment = new StringBody("A binary file of some kind", ContentType.TEXT_PLAIN);  
  
            HttpEntity reqEntity = MultipartEntityBuilder.create().addPart("bin", bin).addPart("comment", comment).build();  
  
            httppost.setEntity(reqEntity);  
  
            System.out.println("executing request " + httppost.getRequestLine());  
            CloseableHttpResponse response = httpclient.execute(httppost);  
            try {  
                System.out.println("----------------------------------------");  
                System.out.println(response.getStatusLine());  
                HttpEntity resEntity = response.getEntity();  
                if (resEntity != null) {  
                    System.out.println("Response content length: " + resEntity.getContentLength());  
                }  
                EntityUtils.consume(resEntity);  
            } finally {  
                response.close();  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                httpclient.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
支付相关接口
package com.jeecms.cms.action.front;

import static com.jeecms.core.manager.AuthenticationMng.AUTH_KEY;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.lang.StringUtils;
import org.dom4j.DocumentException;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import sun.misc.BASE64Decoder;
import beartool.MD5;

import com.alipay.config.AlipayConfig;
import com.alipay.util.AlipayCore;
import com.alipay.util.AlipayNotify;
import com.alipay.util.AlipaySubmit;
import com.jeecms.cms.entity.main.AgentSet;
import com.jeecms.cms.entity.main.CmsSite;
import com.jeecms.cms.entity.main.CmsUser;
import com.jeecms.cms.entity.main.JcOrg;
import com.jeecms.cms.entity.main.Order;
import com.jeecms.cms.entity.main.OrderExt;
import com.jeecms.cms.entity.main.Product;
import com.jeecms.cms.entity.main.ProductCategory;
import com.jeecms.cms.manager.main.AgentSetMng;
import com.jeecms.cms.manager.main.CmsLogMng;
import com.jeecms.cms.manager.main.CmsUserMng;
import com.jeecms.cms.manager.main.JcOrgMng;
import com.jeecms.cms.manager.main.OrderExtMng;
import com.jeecms.cms.manager.main.OrderMng;
import com.jeecms.cms.manager.main.ProductCategoryMng;
import com.jeecms.cms.manager.main.ProductMng;
import com.jeecms.cms.web.CmsUtils;
import com.jeecms.cms.web.FrontUtils;
import com.jeecms.cms.web.WebErrors;
import com.jeecms.common.util.AplipayInfoRW;
import com.jeecms.common.util.MD5Utils;
import com.jeecms.common.util.RandomUtil;
import com.jeecms.common.util.ReadMessagerUtils;
import com.jeecms.common.util.RequestUtil;
import com.jeecms.common.util.SetMailInfoUtils;
import com.jeecms.common.util.ipspay.IpsSubmit;
import com.jeecms.common.web.RequestUtils;
import com.jeecms.common.web.ResponseUtils;
import com.jeecms.common.web.session.SessionProvider;
import com.jeecms.core.entity.Authentication;
import com.jeecms.core.entity.UnifiedUser;
import com.jeecms.core.manager.AuthenticationMng;
import com.jeecms.core.manager.UnifiedUserMng;
import com.jeecms.mail.MailSenderInfo;
import com.jeecms.mail.SimpleMailSender;
import com.octo.captcha.service.CaptchaServiceException;
import com.octo.captcha.service.image.ImageCaptchaService;
import com.yeepay.Configuration;
import com.yeepay.PaymentForOnlineService;

@Controller
public class OrderAct {

	private static final Logger log = LoggerFactory.getLogger(OrderAct.class);
	public static final String PLACE_ORDER = "tpl.placeOrder";
	public static final String ORDER_INFO = "tpl.orderInfo";
	public static final String SEARCH_ORDER = "tpl.searchOrder";
	public static final String CONFIRM_ORDER = "tpl.confirmOrder";
	public static final String DOSELF_ORDER = "tpl.doself";
	public static final String DOSELF_RESULT = "tpl.doselfResult";
	public static final String ALIPAY_SUBMIT = "tpl.alipaySubmit";
	public static final String YEEPAY_SUBMIT = "tpl.yeepaySubmit";
	public static final String CHINA_SUBMIT = "tpl.chinaBankSubmit";
	public static final String TRANSACTION_RESULT = "tpl.paySucessReturn";
	public static final String SAVECLOUD_SUBMIT = "tpl.alipaySaveCloudSubmit";
	
	//edit by bin 2015.2.27
	public static String orderCodeTemp="5fd";

	/**
	 * 下单(进入产品详情)
	 * 
	 * @param id
	 * @param request
	 * @param model
	 * @return
	 */
	@RequestMapping("/order/v_place.jspx")
	public String getProduct(Integer id, HttpServletRequest request,
			ModelMap model) {
		StringBuffer p = request.getRequestURL();
		int endp = p.length() - "order/v_place.jspx".length();
		String path = p.toString().substring(0, endp);
		// System.out.println(new Date() + "--当前请求域名为:" + path);
		List<JcOrg> jcOrgs = orgMng.getJcOrgList();

		if (null != jcOrgs && jcOrgs.size() > 0) {
			for (int i = 0; i < jcOrgs.size(); i++) {
				if (path.equals(jcOrgs.get(i).getOrg())) {
					if (null != jcOrgs.get(i).getIsDisplay()
							&& jcOrgs.get(i).getIsDisplay() == 1) {
						String msg = "爱卡商城提醒您:我们不刷信誉不招兼职 请勿将卡密交给其他人 谨防被骗";
						model.addAttribute("msg", msg);
					}
				}
			}
		}
		Product product = productMng.findById(id);
		if (null != product && null != product.getCategoryCode()) {
			ProductCategory category = categoryMng
					.getProductCategoryBycategoryCode(product.getCategoryCode());
			model.addAttribute("category", category);
		}

		model.addAttribute("product", product);

		CmsSite site = CmsUtils.getSite(request);
		FrontUtils.frontData(request, model, site);
		FrontUtils.frontPageData(request, model);

		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				PLACE_ORDER);
	}

	/**
	 * 订单查询
	 * 
	 * @param captcha
	 * @param orderCode
	 * @param state
	 * @param request
	 * @param model
	 * @return
	 */
	@RequestMapping("/order/v_search.jspx")
	public String getOrder(String captcha, String orderCode, String state,
			HttpServletRequest request, ModelMap model) {
		CmsSite site = CmsUtils.getSite(request);
		FrontUtils.frontData(request, model, site);
		FrontUtils.frontPageData(request, model);
		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				PLACE_ORDER);
	}

	/**
	 * 订单查询输入
	 * 
	 * @param id
	 * @param request
	 * @param model
	 * @return
	 */
	@RequestMapping("/order/v_searchinput.jspx")
	public String getOrderInput(Integer id, HttpServletRequest request,
			ModelMap model) {
		CmsSite site = CmsUtils.getSite(request);
		FrontUtils.frontData(request, model, site);
		FrontUtils.frontPageData(request, model);
		//
		// StringBuffer p = request.getRequestURL();
		// int endp = p.length()-"order/v_searchinput.jspx".length();
		// String p2 = p.toString().substring(1, endp);
		// System.out.println(p2);
		// System.out.println(p);

		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				SEARCH_ORDER);
	}

	/**
	 * 自助服务输入
	 * 
	 * @param id
	 * @param request
	 * @param model
	 * @return
	 */
	@RequestMapping("/order/v_doselfinput.jspx")
	public String doSelfInput(Integer id, HttpServletRequest request,
			ModelMap model) {
		CmsSite site = CmsUtils.getSite(request);
		FrontUtils.frontData(request, model, site);
		FrontUtils.frontPageData(request, model);
		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				DOSELF_ORDER);
	}

	/**
	 * 自助服务结果
	 * 
	 * @param id
	 * @param request
	 * @param model
	 * @return
	 */
	@RequestMapping("/order/v_doselfresult.jspx")
	public String doSelfResult(Integer id, HttpServletRequest request,
			ModelMap model) {
		CmsSite site = CmsUtils.getSite(request);
		FrontUtils.frontData(request, model, site);
		FrontUtils.frontPageData(request, model);
		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				DOSELF_RESULT);
	}

	/**
	 * 下单
	 * 
	 * @param productId
	 * @param orderCodeOld
	 * @param productCode
	 * @param productCount
	 * @param flag
	 * @param captcha
	 * @param response
	 * @param request
	 * @param model
	 * @return
	 */
	@SuppressWarnings("unused")
	@RequestMapping(value = "/order/v_order.jspx", method = RequestMethod.POST)
	public String addOrder(Integer productId, String orderCodeOld,
			String productCode, Integer productCount, String flag,
			String captcha, HttpServletResponse response,
			HttpServletRequest request, ModelMap model) {
		if (null != flag) {
			WebErrors errors1 = validateCaptcha1(captcha, request, response);
			if (errors1.hasErrors()) {
				return FrontUtils.showError(request, response, model, errors1);
			}
		}
		StringBuffer p = request.getRequestURL();
		int endp = p.length() - "order/v_order.jspx".length();
		String path = p.toString().substring(0, endp);
		// System.out.println(new Date() + "--当前请求域名为:" + path);

		List<JcOrg> jcOrgs = orgMng.getJcOrgList();

		if (null != jcOrgs && jcOrgs.size() > 0) {
			for (int i = 0; i < jcOrgs.size(); i++) {
				if (path.equals(jcOrgs.get(i).getOrg())) {
					if (null != jcOrgs.get(i).getIsDisplay()
							&& jcOrgs.get(i).getIsDisplay() == 1) {
						String msg = "爱卡商城提醒您:我们不刷信誉不招兼职 请勿将卡密交给其他人 谨防被骗";
						model.addAttribute("msg", msg);
					}
				}
			}
		}
		String receiverEmail = RequestUtils.getQueryParam(request,
				"receiverEmail");
		// if(null!=receiverEmail&&!"".equals(receiverEmail))
		String receiverNickName = RequestUtils.getQueryParam(request,
				"receiverNickName");

		String ip = RequestUtils.getIpAddr(request);

		Product product = null;
		if (null == orderCodeOld) {// 是否下过单(用于继续交易和重新下单的区别)
			product = productMng.findById(productId);
			String searchKey = RequestUtils.getQueryParam(request, "searchKey");
			String authId = (String) session.getAttribute(request, AUTH_KEY);

			WebErrors errors = validateSubmit(receiverEmail, searchKey,
					request, response);
			if (errors.hasErrors()) {
				return FrontUtils.showError(request, response, model, errors);
			}
			// SimpleDateFormat dateFormat = new
			// SimpleDateFormat("yyyyMMddhhmmss");
			// dateFormat.format(new java.util.Date());
			// 下单日期
			// java.sql.Timestamp date=new java.sql.Timestamp(new
			// java.util.Date().getTime());
			java.sql.Date date = new java.sql.Date(
					new java.util.Date().getTime());
			// 订单号生成
			// int r1 = (int) (Math.random() * (10));// 产生3个0-9的随机数
			// int r2 = (int) (Math.random() * (10));
			// int r3 = (int) (Math.random() * (10));
			String r1 = RandomUtil.getCharAndNumr(4);// 随机产生四个数
			// long now = System.currentTimeMillis();// 一个13位的时间戳
			String r2 = RandomUtil.getCharAndNumr(4);
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");// 十四位时间
			String now = dateFormat.format(new java.util.Date());
			String orderCode = String.valueOf(r1) + String.valueOf(now)
					+ String.valueOf(r2);// 订单号
			Order order = new Order();
			OrderExt ext = new OrderExt();
			// 支付方式的值
			String bank = request.getParameter("bank");
			order.setChargeKey(bank);

			if (authId != null) {// 是否是注册用户
				// 存在认证ID
				Authentication auth = authMng.retrieve(authId);
				CmsUser user = cmsUserMng.findById(auth.getUid());

				// 存在认证信息,且未过期
				if (auth != null) {
					order.setUserId(user.getId());
					order.setUserName(user.getUsername());
					ext.setPrice(product.getVipPrice());
				} else {
					order.setUserId(-1);
					order.setUserName("普通客户");
					ext.setPrice(product.getSalePrice());
				}
			} else {
				order.setUserId(-1);
				order.setUserName("普通客户");
				ext.setPrice(product.getSalePrice());
			}
			order.setSum(ext.getPrice() * productCount);
			if (ext.getPrice() < product.getPurchasePrice()) {// 保证不亏损
				ext.setPrice(product.getPurchasePrice());
				order.setSum(product.getPurchasePrice() * productCount);
				log.info("提交订单时的单价大于进价,以进价为主", 0);

			} else if (order.getSum() < product.getPurchasePrice()
					* productCount) {
				order.setSum(product.getPurchasePrice() * productCount);
			}
			order.setIp(ip);
			order.setOrderCode(orderCode);
			order.setOrdeDate(date);
			order.setReceiverEmail(receiverEmail);
			order.setReceiverNickName(receiverNickName);
			if (null == order.getReceiverNickName()) {
				order.setReceiverNickName(order.getOrderCode());
			}
			order.setSearchKey(searchKey);
			order.setSendState(0);
			order.setChargeType(0);
			order.setStatus(0);
			Order temp = orderMng.save(order);
			ext.setOrderCode(orderCode);
			ext.setCategoryCode(product.getCategoryCode());
			ext.setProductCount(productCount);
			ext.setProductName(product.getProductName());
			ext.setOrderId(order.getOrderId());
			ext.setProductCode(product.getProductCode());
			if (null != temp) {// 是否下单成功并保存日志
				ext.setOrderId(temp.getOrderId());
				OrderExt ext2 = extMng.save(ext);
				temp.setExt(ext2);
				log.info("save Order id={}", temp.getOrderId());
				if (null != ext2) {
					log.info("save OrderExt id={}", ext2.getId());
				} else {
					Order temp2 = orderMng.deleteById(temp.getOrderId());
					log.info("delete Order id={}", temp2.getOrderId());
				}
				cmsLogMng.orderLogSave(request, temp.getOrderCode(),
						"order.log", "下订单成功:orderCode=" + temp.getOrderCode());
			} else {
				cmsLogMng.orderLogSave(request, null, "order.log",
						"下订单失败,产品编号=" + productCode);
			}
			model.addAttribute("order", temp);
			// if(isDelegate){
			// String result = "orderCodeOld="+temp.getOrderCode();
			// JSONObject json=new JSONObject();
			// json.put("result", result);
			// ResponseUtils.renderJson(response, json.toString());
			// }
		} else {
			product = productMng.findByProductCode(productCode);
			Order orderExit = orderMng.getOrderByCode(orderCodeOld);
			if (null != orderExit) {
				OrderExt ext = extMng.getOrderExtListByOrderId(
						orderExit.getOrderId()).get(0);
				orderExit.setExt(ext);
				model.addAttribute("order", orderExit);
				// if(isDelegate){
				// String result = "orderCodeOld="+orderCodeOld;
				// JSONObject json=new JSONObject();
				// json.put("result", result);
				// ResponseUtils.renderJson(response, json.toString());
				// }
			}
		}
		String dPay = request.getParameter("dPay");
		model.addAttribute("dPay", dPay);
		// List<CmsDictionary> banks = dictionaryMng.getList();
		model.addAttribute("product", product);
		// model.addAttribute("banks", banks);
		CmsSite site = CmsUtils.getSite(request);
		FrontUtils.frontData(request, model, site);
		FrontUtils.frontPageData(request, model);

		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				CONFIRM_ORDER);
	}

	/**
	 * 邮箱和密码验证
	 * 
	 * @param email
	 * @param password
	 * @param request
	 * @param response
	 * @return
	 */
	private WebErrors validateSubmit(String email, String password,
			HttpServletRequest request, HttpServletResponse response) {
		WebErrors errors = WebErrors.create(request);
		if (errors.ifOutOfLength(password, "password", 4, 16)) {
			return errors;
		}
		if (errors.ifNotEmail(email, "email", 100)) {
			return errors;
		}

		return errors;
	}

	/**
	 * 代付(下单)
	 * 
	 * @param productId
	 * @param orderCodeOld
	 * @param productCode
	 * @param productCount
	 * @param flag
	 * @param captcha
	 * @param response
	 * @param request
	 * @param model
	 * @return
	 */
	@SuppressWarnings("unused")
	@RequestMapping(value = "/order/v_order_d_p.jspx", method = RequestMethod.GET)
	public String addOrderDPay(Integer productId, String orderCodeOld,
			String productCode, Integer productCount, String flag,
			String captcha, HttpServletResponse response,
			HttpServletRequest request, ModelMap model) {
		StringBuffer p = request.getRequestURL();
		int endp = p.length() - "order/v_order_d_p.jspx".length();
		String path = p.toString().substring(0, endp);
		// System.out.println(new Date() + "--当前请求域名为:" + path);
		String dPay = request.getParameter("dPay");
		model.addAttribute("dPay", dPay);
		// 支付方式的值
		String bank = request.getParameter("bank");
		List<JcOrg> jcOrgs = orgMng.getJcOrgList();

		if (null != jcOrgs && jcOrgs.size() > 0) {
			for (int i = 0; i < jcOrgs.size(); i++) {
				if (path.equals(jcOrgs.get(i).getOrg())) {
					if (null != jcOrgs.get(i).getIsDisplay()
							&& jcOrgs.get(i).getIsDisplay() == 1) {
						String msg = "爱卡商城提醒您:我们不刷信誉不招兼职 请勿将卡密交给其他人 谨防被骗";
						model.addAttribute("msg", msg);
					}
				}
			}
		}
		String receiverEmail = RequestUtils.getQueryParam(request,
				"receiverEmail");
		String receiverNickName = RequestUtils.getQueryParam(request,
				"receiverNickName");
		// if (null == flag) {
		// WebErrors errors = validateCaptcha(captcha, receiverEmail, request,
		// response);
		// if (errors.hasErrors()) {
		// return FrontUtils.showError(request, response, model, errors);
		// }
		// }
		String ip = RequestUtils.getIpAddr(request);

		Product product = null;
		if (null == orderCodeOld) {
			product = productMng.findById(productId);

			String searchKey = RequestUtils.getQueryParam(request, "searchKey");
			String authId = (String) session.getAttribute(request, AUTH_KEY);
			WebErrors errors = validateSubmit(receiverEmail, searchKey,
					request, response);
			if (errors.hasErrors()) {
				return FrontUtils.showError(request, response, model, errors);
			}
			// SimpleDateFormat dateFormat = new
			// SimpleDateFormat("yyyyMMddhhmmss");
			// dateFormat.format(new java.util.Date());
			// 下单日期
			// java.sql.Timestamp date=new java.sql.Timestamp(new
			// java.util.Date().getTime());
			java.sql.Date date = new java.sql.Date(
					new java.util.Date().getTime());
			// 订单号生成
			// int r1 = (int) (Math.random() * (10));// 产生3个0-9的随机数
			// int r2 = (int) (Math.random() * (10));
			// int r3 = (int) (Math.random() * (10));
			String r1 = RandomUtil.getCharAndNumr(4);// 产生一个四位数
			// long now = System.currentTimeMillis();// 一个13位的时间戳
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss");// 一个14位时间
			String now = dateFormat.format(new java.util.Date());
			String orderCode = "w" + String.valueOf(r1) + String.valueOf(now);// 订单号

			Order order = new Order();
			OrderExt ext = new OrderExt();

			order.setChargeKey(bank);

			if (authId != null) {
				// 存在认证ID
				Authentication auth = authMng.retrieve(authId);
				CmsUser user = cmsUserMng.findById(auth.getUid());

				// 存在认证信息,且未过期
				if (auth != null) {
					order.setUserId(user.getId());
					order.setUserName(user.getUsername());
					ext.setPrice(product.getVipPrice());
				} else {
					order.setUserId(-1);
					order.setUserName("普通客户");
					ext.setPrice(product.getSalePrice());
				}
			} else {
				order.setUserId(-1);
				order.setUserName("普通客户");
				ext.setPrice(product.getSalePrice());
			}
			order.setSum(ext.getPrice() * productCount);
			if (ext.getPrice() < product.getPurchasePrice()) {
				ext.setPrice(product.getPurchasePrice());
				order.setSum(product.getPurchasePrice() * productCount);
				log.info("提交订单时的单价大于进价,以进价为主", 0);

			} else if (order.getSum() < product.getPurchasePrice()
					* productCount) {
				order.setSum(product.getPurchasePrice() * productCount);
			}
			order.setIp(ip);
			order.setOrderCode(orderCode);
			order.setOrdeDate(date);
			order.setReceiverEmail(receiverEmail);
			order.setReceiverNickName(receiverNickName);
			if (null == order.getReceiverNickName()) {
				order.setReceiverNickName(order.getOrderCode());
			}
			order.setSearchKey(searchKey);
			order.setSendState(0);
			order.setChargeType(0);
			order.setStatus(0);
			Order temp = orderMng.save(order);

			ext.setOrderCode(orderCode);
			ext.setCategoryCode(product.getCategoryCode());
			ext.setProductCount(productCount);
			ext.setProductName(product.getProductName());
			ext.setOrderId(order.getOrderId());
			ext.setProductCode(product.getProductCode());
			if (null != temp) {
				ext.setOrderId(temp.getOrderId());
				OrderExt ext2 = extMng.save(ext);
				temp.setExt(ext2);
				log.info("save Order id={}", temp.getOrderId());
				if (null != ext2) {
					log.info("save OrderExt id={}", ext2.getId());
				} else {
					Order temp2 = orderMng.deleteById(temp.getOrderId());
					log.info("delete Order id={}", temp2.getOrderId());
				}
				cmsLogMng.orderLogSave(request, temp.getOrderCode(),
						"order.log", "下订单成功:orderCode=" + temp.getOrderCode());
			} else {
				cmsLogMng.orderLogSave(request, null, "order.log",
						"下订单失败,产品编号=" + productCode);
			}
			model.addAttribute("order", temp);
			// if(isDelegate){
			// String result = "orderCodeOld="+temp.getOrderCode();
			// JSONObject json=new JSONObject();
			// json.put("result", result);
			// ResponseUtils.renderJson(response, json.toString());
			// }
		} else {
			// product = productMng.findByProductCode(productCode);
			Order orderExit = orderMng.getOrderByCode(orderCodeOld);
			if (null != orderExit) {
				OrderExt ext = extMng.getOrderExtListByOrderId(
						orderExit.getOrderId()).get(0);
				orderExit.setExt(ext);
				model.addAttribute("order", orderExit);
				product = productMng.findByProductCode(ext.getProductCode());
				// if(isDelegate){
				// String result = "orderCodeOld="+orderCodeOld;
				// JSONObject json=new JSONObject();
				// json.put("result", result);
				// ResponseUtils.renderJson(response, json.toString());
				// }
			}
		}
		// List<CmsDictionary> banks = dictionaryMng.getList();
		model.addAttribute("product", product);
		// model.addAttribute("banks", banks);
		CmsSite site = CmsUtils.getSite(request);
		FrontUtils.frontData(request, model, site);
		FrontUtils.frontPageData(request, model);

		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				CONFIRM_ORDER);
	}

	/**
	 * 代付下单(获取产品详情)
	 * 
	 * @param productId
	 * @param orderCodeOld
	 * @param productCode
	 * @param productCount
	 * @param flag
	 * @param captcha
	 * @param response
	 * @param isDelegate
	 * @param request
	 * @param model
	 * @throws JSONException
	 */
	@SuppressWarnings("unused")
	@RequestMapping(value = "/order/v_order_d.jspx", method = RequestMethod.POST)
	public void addOrderD(Integer productId, String orderCodeOld,
			String productCode, Integer productCount, String flag,
			String captcha, HttpServletResponse response, boolean isDelegate,
			HttpServletRequest request, ModelMap model) throws JSONException {
		StringBuffer p = request.getRequestURL();
		int endp = p.length() - "v_order_d.jspx".length();
		String path = p.toString().substring(0, endp);
		// System.out.println(path);
		List<JcOrg> jcOrgs = orgMng.getJcOrgList();
		captcha = request.getParameter("captcha");
		if (null != jcOrgs && jcOrgs.size() > 0) {
			for (int i = 0; i < jcOrgs.size(); i++) {
				if (path.equals(jcOrgs.get(i).getOrg())) {
					if (null != jcOrgs.get(i).getIsDisplay()
							&& jcOrgs.get(i).getIsDisplay() == 1) {
						String msg = "爱卡商城提醒您:我们不刷信誉不招兼职 请勿将卡密交给其他人 谨防被骗";
						model.addAttribute("msg", msg);
					}
				}
			}
		}
		String receiverEmail = RequestUtils.getQueryParam(request,
				"receiverEmail");
		String receiverNickName = RequestUtils.getQueryParam(request,
				"receiverNickName");
		String ip = RequestUtils.getIpAddr(request);

		// WebErrors errors = validateCaptcha(captcha, receiverEmail, request,
		// response);
		// if (errors.hasErrors()) {
		// // String result = FrontUtils.showError(request, response, model,
		// // errors);
		// String result = errors.getErrors().get(0);
		// JSONObject json = new JSONObject();
		// json.put("status", 0);
		// json.put("result", result);
		// ResponseUtils.renderJson(response, json.toString());
		// } else {
		Product product = null;
		if (null == orderCodeOld) {
			product = productMng.findById(productId);

			String searchKey = RequestUtils.getQueryParam(request, "searchKey");
			WebErrors errors1 = validateSubmit(receiverEmail, searchKey,
					request, response);
			if (errors1.hasErrors()) {
				// String result = FrontUtils.showError(request, response,
				// model, errors1);
				String result = errors1.getErrors().get(0);
				JSONObject json = new JSONObject();
				json.put("status", 0);
				json.put("result", result);
				ResponseUtils.renderJson(response, json.toString());
			} else {
				String authId = (String) session
						.getAttribute(request, AUTH_KEY);
				java.sql.Date date = new java.sql.Date(
						new java.util.Date().getTime());
				// 订单号生成
				// int r1 = (int) (Math.random() * (10));// 产生3个0-9的随机数
				// int r2 = (int) (Math.random() * (10));
				// int r3 = (int) (Math.random() * (10));
				String r1 = RandomUtil.getCharAndNumr(4);// 产生一个四位数
				// long now = System.currentTimeMillis();// 一个13位的时间戳
				SimpleDateFormat dateFormat = new SimpleDateFormat(
						"yyyyMMddhhmmss");// 一个14位时间
				String now = dateFormat.format(new java.util.Date());
				String orderCode = "w" + String.valueOf(r1)
						+ String.valueOf(now);// 订单号

				Order order = new Order();
				OrderExt ext = new OrderExt();

				// 支付方式的值
				String bank = request.getParameter("bank");
				order.setChargeKey(bank);
				if (authId != null) {
					// 存在认证ID
					Authentication auth = authMng.retrieve(authId);
					CmsUser user = cmsUserMng.findById(auth.getUid());

					// 存在认证信息,且未过期
					if (auth != null) {
						order.setUserId(user.getId());
						order.setUserName(user.getUsername());
						ext.setPrice(product.getVipPrice());
					} else {
						order.setUserId(-1);
						order.setUserName("普通客户");
						ext.setPrice(product.getSalePrice());
					}
				} else {
					order.setUserId(-1);
					order.setUserName("普通客户");
					ext.setPrice(product.getSalePrice());
				}
				order.setSum(ext.getPrice() * productCount);
				if (ext.getPrice() < product.getPurchasePrice()) {
					ext.setPrice(product.getPurchasePrice());
					order.setSum(product.getPurchasePrice() * productCount);
					log.info("提交订单时的单价大于进价,以进价为主", 0);

				} else if (order.getSum() < product.getPurchasePrice()
						* productCount) {
					order.setSum(product.getPurchasePrice() * productCount);
				}
				order.setIp(ip);
				order.setOrderCode(orderCode);
				order.setOrdeDate(date);
				order.setReceiverEmail(receiverEmail);
				order.setReceiverNickName(receiverNickName);
				if (null == order.getReceiverNickName()) {
					order.setReceiverNickName(order.getOrderCode());
				}
				order.setSearchKey(searchKey);
				order.setSendState(0);
				order.setChargeType(0);
				order.setStatus(0);
				Order temp = orderMng.save(order);

				ext.setOrderCode(orderCode);
				ext.setCategoryCode(product.getCategoryCode());
				ext.setProductCount(productCount);
				ext.setProductName(product.getProductName());
				ext.setOrderId(order.getOrderId());
				ext.setProductCode(product.getProductCode());
				if (null != temp) {
					ext.setOrderId(temp.getOrderId());
					OrderExt ext2 = extMng.save(ext);
					temp.setExt(ext2);
					log.info("save Order id={}", temp.getOrderId());
					if (null != ext2) {
						log.info("save OrderExt id={}", ext2.getId());
					} else {
						Order temp2 = orderMng.deleteById(temp.getOrderId());
						log.info("delete Order id={}", temp2.getOrderId());
					}
					cmsLogMng.orderLogSave(request, temp.getOrderCode(),
							"order.log",
							"下订单成功:orderCode=" + temp.getOrderCode());
				} else {
					cmsLogMng.orderLogSave(request, null, "order.log",
							"下订单失败,产品编号=" + productCode);
				}
				model.addAttribute("order", temp);
				if (isDelegate) {
					String result = "orderCodeOld=" + temp.getOrderCode();
					JSONObject json = new JSONObject();
					json.put("status", 1);
					json.put("result", result);
					ResponseUtils.renderJson(response, json.toString());
				}
			}
		} else {
			product = productMng.findByProductCode(productCode);
			Order orderExit = orderMng.getOrderByCode(orderCodeOld);
			if (null != orderExit) {
				OrderExt ext = extMng.getOrderExtListByOrderId(
						orderExit.getOrderId()).get(0);
				orderExit.setExt(ext);
				model.addAttribute("order", orderExit);
				if (isDelegate) {
					String result = "orderCodeOld=" + orderCodeOld;
					JSONObject json = new JSONObject();
					json.put("status", 1);
					json.put("result", result);
					ResponseUtils.renderJson(response, json.toString());
				}
			}
		}
		// }
		// List<CmsDictionary> banks = dictionaryMng.getList();
		// model.addAttribute("product", product);

	}

	// 订单信息查询
	@RequestMapping(value = "/order/v_orderInfo.jspx", method = RequestMethod.POST)
	public String searchOrder(String orderCode, String search_key,
			HttpServletRequest request, String captcha,
			HttpServletResponse response, ModelMap model) {
		if (!(orderCode == null || "".equals(orderCode))
				&& !(search_key == null || "".equals(search_key))) {
			WebErrors errors = validateCaptcha1(captcha, request, response);
			if (errors.hasErrors()) {
				return FrontUtils.showError(request, response, model, errors);
			}
			// add by chenyan 20140512 去除前后空格
			orderCode = StringUtils.strip(orderCode);

			Order order = orderMng.getOrderByCode(orderCode);
			if (order == null) {
				model.addAttribute("msg", "您输入的订单号和查询密码不正确或不匹配!请重新输入!");
			} else {

				// 判断密码是否正确, add by chenyan 20140512
				if (null != order.getSearchKey()
						&& order.getSearchKey().equals(search_key)) {

					if (null != order.getCardkey()) {
						String carKey = order.getCardkey();
						List<Map<Integer, String>> keyList = new ArrayList<Map<Integer, String>>();
						if (null != carKey) {
							String contentStart = " <table style='width: 470px;' align='left'> <tr >"
									+ "    <td style='background-color:#CCC'>卡号</td>"
									+ "   <td style='background-color:#CCC'>密码</td>"
									+ "   <td style='background-color:#CCC'>过期时间</td>"
									+ "  </tr> ";
							keyList = ReadMessagerUtils.ReadCarKey(carKey);
							BASE64Decoder decoder = new BASE64Decoder();
							try {

								if (null != keyList && keyList.size() > 0) {
									for (Map<Integer, String> map2 : keyList) {

										String cardno = "";
										String cardpsw = "";
										if (null != map2.get(0)
												&& !"".equals(map2.get(0))) {
											cardno = new String(
													decoder.decodeBuffer(map2
															.get(0)));
										}
										if (null != map2.get(1)
												&& !"".equals(map2.get(1))) {
											cardpsw = new String(
													decoder.decodeBuffer(map2
															.get(1)));
										}
										String contentKey = " <tr>"
												+ " <td style='background-color:#eee'>"
												+ cardno
												+ "</td>"
												+ " <td style='background-color:#eee'>"
												+ cardpsw
												+ "</td>"
												+ " <td style='background-color:#eee'>"
												+ map2.get(2) + "</td> "
												+ " </tr>";
										contentStart = contentStart
												+ contentKey;
									}
									String contentEnd = " </table></br></br>";
									contentStart = contentStart + contentEnd;
									model.addAttribute("carKey", contentStart);
								}
							} catch (IOException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}

						}
					}

					OrderExt orderExt = extMng.getOrderExtById(orderCode);
					model.addAttribute("order", order);
					model.addAttribute("orderExt", orderExt);
				} else {
					model.addAttribute("msg", "您输入的查询密码不正确!请重新输入!");
				}
			}
		} else {
			model.addAttribute("msg", "您输入的订单号和查询密码不能为空!请输入!");
		}
		CmsSite site = CmsUtils.getSite(request);
		FrontUtils.frontData(request, model, site);
		FrontUtils.frontPageData(request, model);
		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				SEARCH_ORDER);
	}

	// 自助服务订单状态查询
	@RequestMapping(value = "/order/v_orderState.jspx", method = RequestMethod.POST)
	public String stateOrder(String orderCode, String querytype,
			String searchKey, HttpServletRequest request, String captcha,
			HttpServletResponse response, ModelMap model) {
		WebErrors errors = validateCaptcha1(captcha, request, response);
		if (errors.hasErrors()) {
			return FrontUtils.showError(request, response, model, errors);
		}

		// add by chenyan 20140512 去除前后空格
		orderCode = StringUtils.strip(orderCode);

		Order order = orderMng.getOrderByCode(orderCode);

		if (order == null) {
			model.addAttribute("msg", "您输入的订单号不存在!请重新输入!");
		} else {

			if (null != order.getSearchKey()
					&& order.getSearchKey().equals(searchKey)) {

				// 排列卡密 (自助服务不要显示卡密)
				/*
				 * if(null!=order.getCardkey()){ String carKey =
				 * order.getCardkey(); List<Map<Integer,String>> keyList = new
				 * ArrayList<Map<Integer,String>>(); if(null!=carKey){ String
				 * contentStart =
				 * " <table style='width: 470px;' align='left'> <tr >" +
				 * "    <td style='background-color:#CCC'>卡号</td>" +
				 * "   <td style='background-color:#CCC'>密码</td>" +
				 * "   <td style='background-color:#CCC'>过期时间</td>" + "  </tr> "
				 * ; keyList = ReadMessagerUtils.ReadCarKey(carKey);
				 * if(null!=keyList&&keyList.size()>0){ for (Map<Integer,
				 * String> map2 : keyList) { String contentKey =" <tr>" +
				 * " <td style='background-color:#eee'>"+map2.get(0)+"</td>" +
				 * " <td style='background-color:#eee'>"+map2.get(1)+"</td>" +
				 * " <td style='background-color:#eee'>"+map2.get(2)+"</td> " +
				 * " </tr>"; contentStart = contentStart + contentKey; } String
				 * contentEnd = " </table></br></br>"; contentStart =
				 * contentStart+contentEnd; model.addAttribute("carKey",
				 * contentStart); }
				 * 
				 * } }
				 */
				orderCode = order.getOrderCode();
				OrderExt ext = extMng.getOrderExtById(orderCode);
				order.setExt(ext);
				Integer status = order.getStatus();
				if (null != querytype && "2".equals(querytype)) {
					if (null != status && (status == 1 || status == 2))
						return againSendEmail(order, null, request, null,
								response, model);
					else {
						if (null == status || status == 0) {
							model.addAttribute("msg", "邮件补发失败!返回信息:未支付!");
							// OrderExt ext = extMng.getOrderExtById(orderCode);
							// order.setExt(ext);
							model.addAttribute("ext", ext);
							model.addAttribute("order", order);
						} else {
							model.addAttribute("msg",
									"邮件补发失败!返回信息:订单已失效!请重新下单!");
						}
					}
				} else if (null != querytype && "1".equals(querytype)) {
					if (null != status && status == 3) {
						model.addAttribute("msg", "订单状态更换失败!返回信息:订单已失效!请重新下单!");
					} else {
						// OrderExt ext = extMng.getOrderExtById(orderCode);
						// order.setExt(ext);
						model.addAttribute("ext", ext);
						model.addAttribute("order", order);
					}
				}
			} else {
				model.addAttribute("msg", "查询密码错误!!!");
			}
		}
		CmsSite site = CmsUtils.getSite(request);
		FrontUtils.frontData(request, model, site);
		FrontUtils.frontPageData(request, model);
		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				DOSELF_RESULT);
	}

	/**
	 * 发送邮件
	 * 
	 * @param order
	 * @param state
	 * @param request
	 * @param captcha
	 * @param response
	 * @param model
	 * @return
	 */
	private String againSendEmail(Order order, String state,
			HttpServletRequest request, String captcha,
			HttpServletResponse response, ModelMap model) {
		if (null != order.getSendState() && order.getSendState() == 2) {
			String msg = fetchCard(request, response, model, order);
			if ("提卡失败".equals(msg)) {
				model.addAttribute("msg", "发送失败!请先检查网络或联系客服!");
				Order orderNew = orderMng.getOrderByCode(order.getOrderCode());
				OrderExt ext = extMng.getOrderExtById(order.getOrderCode());
				model.addAttribute("ext", ext);
				model.addAttribute("order", orderNew);
				CmsSite site = CmsUtils.getSite(request);
				FrontUtils.frontData(request, model, site);
				FrontUtils.frontPageData(request, model);
				log.info("提卡失败", 0);
				return FrontUtils.getTplPath(request, site.getSolutionPath(),
						"order", DOSELF_RESULT);
			}
		}
		MailSenderInfo mailInfo = new MailSenderInfo();
		List<AgentSet> list = agentSetMng.getAgentSetList();
		SetMailInfoUtils.setMailMss(mailInfo, list);
		mailInfo.setToAddress(order.getReceiverEmail()); // 要发送的邮箱地址

		// 邮件内容
		// mailInfo.setContent("你好!"); //文本格式的邮件内容
		// html页面格式的邮件内容
		// mailInfo.setContent("<div style='width:900px;height:900px;text-align:center;color:blue;font-size:20px;border:solid red;'><b>亲爱的"+order.getReceiverNickName()+"!</br>您在<a  href='http://www.003511.com/'>爱卡点卡商城</a>有如下订单:您的订单号为:<a  href='http://www.003511.com/order/v_searchinput.jspx'>"+order.getOrderCode()+"</a></br>您购买的点卡信息如下 (格式为:卡号1,卡密1,有效日期|卡号2,卡密2,有效期2):</b></br>"
		// + order.getCardkey() + "</div>");
		String contentStart = getMailContents(order);
		mailInfo.setContent(contentStart);

		// 这个类主要来发送邮件
		SimpleMailSender sms = new SimpleMailSender();
		// boolean flag = sms.sendTextMail(mailInfo);// 发送文体格式
		boolean flag = sms.sendHtmlMail(mailInfo);// 发送html格式
		if (flag) { // true则发送成功
			if (null == order.getSendTime() || "".equals(order.getSendTime())) {
				order.setSendTime(new java.sql.Date(new java.util.Date()
						.getTime()));
			}
			order.setStatus(1); //订单状态变成已发货
			order.setSendState(1); //发货状态变成已发货 add by bin 2015-2-27
			orderMng.updateByUpdater(order);
			String msg = "发送成功!请注意查收!";
			model.addAttribute("msg", msg);
			cmsLogMng.sendLogSave(request, order.getOrderCode(),
					"order.log.sendSuccess",
					"orderCode=" + order.getOrderCode() + ";receiverEmail="
							+ order.getReceiverEmail() + ";信息:" + msg);
		} else {
			String msg = "发送失败!请先检查网络或联系客服!";
			model.addAttribute("msg", msg);
			cmsLogMng.sendLogSave(request, order.getOrderCode(),
					"order.log.sendSuccess",
					"orderCode=" + order.getOrderCode() + ";receiverEmail="
							+ order.getReceiverEmail() + ";信息:" + msg);
		}
		Order orderNew = orderMng.getOrderByCode(order.getOrderCode());
		OrderExt ext = extMng.getOrderExtById(order.getOrderCode());
		model.addAttribute("ext", ext);
		model.addAttribute("order", orderNew);
		CmsSite site = CmsUtils.getSite(request);
		FrontUtils.frontData(request, model, site);
		FrontUtils.frontPageData(request, model);
		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				DOSELF_RESULT);
	}

	/**
	 * 邮件内容
	 * 
	 * @param order
	 * @return
	 */
	private String getMailContents(Order order) {
		String contentStart = "<div>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>尊敬的"
				+ order.getReceiverNickName()
				+ "用户,您好!</h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>感谢您对Q-Q点卡商城的支持,现将您从此次购买的产品信息发送到您的邮件给您!</h1>"
				+ " </br>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>订单号:"
				+ order.getOrderCode()
				+ "</h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>产品名称:"
				+ order.getExt().getProductName()
				+ "</h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>产品数量:"
				+ order.getExt().getProductCount()
				+ "</h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>订单总额:<span style='color:#F00;'>¥"
				+ order.getSum()
				+ "</span></h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>产品信息:</h1>"
				+ " <table width='600'> <tr >"
				+ "    <td style='background-color:#CCC'>卡号</td>"
				+ "   <td style='background-color:#CCC'>密码</td>"
				+ "   <td style='background-color:#CCC'>过期时间</td>" + "  </tr> ";
		BASE64Decoder decoder = new BASE64Decoder();
		try {
			String carKey = order.getCardkey();
			List<Map<Integer, String>> keyList = new ArrayList<Map<Integer, String>>();
			if (null != carKey) {
				keyList = ReadMessagerUtils.ReadCarKey(carKey);
				if (null != keyList && keyList.size() > 0) {
					for (Map<Integer, String> map2 : keyList) {
						String cardno = "";
						String cardpsw = "";
						if (null != map2.get(0) && !"".equals(map2.get(0))) {
							cardno = new String(decoder.decodeBuffer(map2
									.get(0)));
						}
						if (null != map2.get(1) && !"".equals(map2.get(1))) {
							cardpsw = new String(decoder.decodeBuffer(map2
									.get(1)));
						}
						String contentKey = " <tr>"
								+ " <td style='background-color:#eee'>"
								+ cardno + "</td>"
								+ " <td style='background-color:#eee'>"
								+ cardpsw + "</td>"
								+ " <td style='background-color:#eee'>"
								+ map2.get(2) + "</td> " + " </tr>";
						contentStart = contentStart + contentKey;
					}
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		String contentEnd = " </table></br></br>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'><strong>温馨提示:</strong>千万注意!不要将邮件信息购买的订单号等信息随便透露给任何人!!</h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>本邮件由系统邮箱发送,请不要回复!!系统邮箱无人职守故对任何邮件都不作回复!!</h1>"
				+ " </div>";
		contentStart = contentStart + contentEnd;
		return contentStart;
	}

	/**
	 * 页面显示卡密详情
	 * 
	 * @param order
	 * @param request
	 * @return
	 */
	private String getMailContents1(Order order, HttpServletRequest request) {
		String contentStart = "<div>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>尊敬的"
				+ order.getReceiverNickName()
				+ "用户,您好!</h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>感谢您对Q-Q点卡商城的支持,现将您从此次购买的产品信息发送到您的邮件给您!</h1>"
				+ " </br>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>订单号:"
				+ order.getOrderCode()
				+ "</h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>产品名称:"
				+ order.getExt().getProductName()
				+ "</h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>产品数量:"
				+ order.getExt().getProductCount()
				+ "</h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>订单总额:<span style='color:#F00;'>¥"
				+ order.getSum()
				+ "</span></h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>产品信息:</h1>"
				+ " <table width='600'> <tr >"
				+ "    <td style='background-color:#CCC'>卡号</td>"
				+ "   <td style='background-color:#CCC'>密码</td>"
				+ "   <td style='background-color:#CCC'>过期时间</td>" + "  </tr> ";
		BASE64Decoder decoder = new BASE64Decoder();
		try {
			String carKey = order.getCardkey();
			List<Map<Integer, String>> keyList = new ArrayList<Map<Integer, String>>();
			if (null != carKey) {
				keyList = ReadMessagerUtils.ReadCarKey(carKey);
				if (null != keyList && keyList.size() > 0) {
					for (Map<Integer, String> map2 : keyList) {
						String cardno = "";
						String cardpsw = "";
						if (null != map2.get(0) && !"".equals(map2.get(0))) {
							cardno = new String(decoder.decodeBuffer(map2
									.get(0)));
						}
						if (null != map2.get(1) && !"".equals(map2.get(1))) {
							cardpsw = new String(decoder.decodeBuffer(map2
									.get(1)));
						}
						String contentKey = " <tr>"
								+ " <td style='background-color:#eee'>"
								+ cardno + "</td>"
								+ " <td style='background-color:#eee'>"
								+ cardpsw + "</td>"
								+ " <td style='background-color:#eee'>"
								+ map2.get(2) + "</td> " + " </tr>";
						contentStart = contentStart + contentKey;
					}
				}

			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		String contentEnd = " </table></br> </br>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'><strong>温馨提示:</strong>千万注意!不要将邮件信息购买的订单号等信息随便透露给任何人!!</h1>"
				+ " <h1 style='font:13px Verdana, Geneva, sans-serif; color:#000'>本邮件由系统邮箱发送,请不要回复!!系统邮箱无人职守故对任何邮件都不作回复!!</h1>"
				+ " </div>";
		contentStart = contentStart + contentEnd;
		return contentStart;
	}

	// 订单支付 需判断银行支付方式
	@RequestMapping(value = "/order/v_orderPay.jspx", method = RequestMethod.POST)
	public String orderPay(String bank, HttpServletRequest request,
			String captcha, HttpServletResponse response, ModelMap model)
			throws Exception {
		// WebErrors errors = validateCaptcha1(captcha, request, response);
		// if (errors.hasErrors()) {
		// return FrontUtils.showError(request, response, model, errors);
		// }
		CmsSite site = CmsUtils.getSite(request);
		String orderCode = request.getParameter("orderCode");
		String productName = request.getParameter("productName");
		// String sumStr = request.getParameter("sum");
		Order orderPay = orderMng.getOrderByCode(orderCode);
		// System.out.println("下单时实际金额:" + orderPay.getSum());
		// System.out.println("下单旱提交金额:" + sumStr);
		bank = orderPay.getChargeKey();
		// 多加一个判断。防止总额被恶意改掉
		if (null != orderPay) {
			String sum = String.valueOf(orderPay.getSum());
			if (null != bank) {
				if (bank.equals("alipay")) {
					//this.alipay(null, orderCode, productName, sum, request,
					//		response, model);
					tianGuaTransport2alipay(orderCode, productName, sum, request,
									response, model);
				} else {
					this.ipsPay(bank, orderCode, productName, sum, request,
							response, model);
				}
				// else {
				// this.alipay(bank, orderCode, productName, sum, request,
				// response, model);
				// }
			}
		}

		// 支付类型
		return FrontUtils.getTplPath(request, site.getSolutionPath(), "order",
				ALIPAY_SUBMIT);
	}

	//-----------------------------------------------------------------------------
	/**
     * 建立请求,转账到支付宝
     * @param sParaTemp 请求参数数组
     * @param strMethod 提交方式。两个值可选:post、get
     * @param strButtonName 确认按钮显示文字
     * @return 提交表单HTML文本
     */
    private String tianGuaBuildRequest(String receiver, String amount, 
    		String title, String memo,  
    		String strMethod, String strButtonName) {
        StringBuffer sbHtml = new StringBuffer();
        String transportUrl = "https://shenghuo.alipay.com/send/payment/fill.htm";
        
        sbHtml.append("<form id=\"alipaysubmit\" name=\"alipaysubmit\" action=\"" + transportUrl
                      + "\" method=\"" + strMethod
                      + "\">");

        sbHtml.append("<input type=\"hidden\" name='optEmail' value=\"" + receiver + "\"/>");
        sbHtml.append("<input type=\"hidden\" name='payAmount' value=\"" + amount + "\"/>");
        sbHtml.append("<input type=\"hidden\" name='title' value=\"" + title + "\"/>");
        sbHtml.append("<input type=\"hidden\" name='memo' value=\"" + memo + "\"/>");
        
        //submit按钮控件请不要含有name属性
        sbHtml.append("<input type=\"submit\" value=\"" + strButtonName + "\" style=\"display:none;\"></form>");
        sbHtml.append("<script>document.forms['alipaysubmit'].submit();</script>");

        return sbHtml.toString();
    }

	/**
	 * 转账到指定的支付宝账号
	 * 
	 * @param orderCode
	 * @param productName
	 * @param sum
	 * @param request
	 * @param model
	 * @throws IOException
	 * @throws DocumentException
	 * @throws MalformedURLException
	 */
	private void tianGuaTransport2alipay(String orderCode, String productName,
			String sum, HttpServletRequest request,
			HttpServletResponse response, ModelMap model){
		try {
			String str = tianGuaBuildRequest("15859296876", sum, orderCode, 
											 "请勿修改付款说明,以免影响自动发货", "post", "转账");
			response.setContentType("text/html");
			response.setCharacterEncoding("GBK");
			PrintWriter out;
			out = response.getWriter();			
			out.write(str);
			out.flush();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();			
		}
	}	
	
	/**
	 * 新增甜瓜验证接口
	 * @param out_trade_no
	 * @param trade_no
	 * @param total_fee
	 * @param time
	 * @return
	 */
	private int tianGuaVerify(String out_trade_no, String trade_no, 
			String total_fee, String time, String key){
		//时间检验
		SimpleDateFormat datetimeformat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
		try {
			Date theDate = datetimeformat.parse(time);
			Date now = new Date();
			long diff = now.getTime() - theDate.getTime();
			if(diff > 10000 || diff < 0 ){
				System.err.println("time=" + time + ", now=" + now.toString());
				return -1;
			}
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//MD5检验
		String mykey = "dkW_2015";
		String temp = "orderSn=" + out_trade_no +
						"&tradeNo=" + trade_no + 
						"&amount=" + total_fee + 
						"&time=" + time +
						"&key=" + mykey;
		System.out.println(temp);
		temp = MD5Utils.GetMD5Code(temp);
		
		System.out.println("key=" + key + ",temp=" + temp);
		
		if(key.equals(temp)){
			return 1;
		}		
		
		return 0;
	}
	
	/**
	 * 新增甜瓜通知接口
	 * @param request
	 * @param response
	 * @param model
	 * @author chenyan
	 */	
	@RequestMapping(value = "/order/v_TianGuaCallBack.jspx", method = RequestMethod.POST)
	public void v_TianGuaCallBack(HttpServletRequest request,
			HttpServletResponse response, ModelMap model) {
		// 获取POST过来反馈信息
		String out_trade_no = RequestUtils.getQueryParam(request, "orderSn");// 商户订单号
		String trade_no = RequestUtils.getQueryParam(request, "tradeNo");// 支付宝交易号
		String total_fee = RequestUtils.getQueryParam(request, "amount");// 交易金额
		String time = RequestUtils.getQueryParam(request, "time");// 交易金额
		String key = RequestUtils.getQueryParam(request, "key");
		
		int ret = tianGuaVerify(out_trade_no, trade_no, total_fee, time, key);
		
		if (ret == 1) {// 验证成功
			// 请在这里加上商户的业务逻辑程序代码
			Order order = orderMng.getOrderByCode(out_trade_no);
			if (order == null) {
				System.out.println("根据支付宝返回的参数订单编号:" + out_trade_no
						+ "的订单,异步校验,在数据查找订单为空!交易终止!");
				return;
			}
			
			OrderExt ext = extMng.getOrderExtByOrderCode(order.getOrderCode()).get(0);

			// ——更改数据库的订单相关状态——
			order.setChargeCode(trade_no);
			if (1 != order.getStatus())
				order.setStatus(2);
			if (null == order.getChargeTime()
					|| "".equals(order.getChargeTime())) {
				order.setChargeTime(new java.sql.Date(new java.util.Date()
						.getTime()));
			}
			if (1 != order.getSendState())
				order.setSendState(2);
			order.setChargeAccount("tiangua");
			order.setChargeType(1);
			// order.setChargeCode(out_trade_no);
			order = orderMng.updateByUpdater(order);

			order.setExt(ext);
			
			if (2 == order.getStatus()) {					
				//if(null!=orderCodeTemp&&!"".equals(orderCodeTemp)&&orderCodeTemp.equals(out_trade_no)){
					this.fetchCard(request, response, model, order);
				//	orderCodeTemp = out_trade_no;
				//}
			}

			System.out.println("根据支付宝返回的参数订单编号:" + out_trade_no
					+ "的订单,异步校验成功!支付成功 ");			

		} else {// 验证失败
			System.out.println("根据支付宝返回的参数订单编号:" + out_trade_no
					+ "的订单,异步校验,由于验证失败,交易失败!!! ");
		}
	}
	//-----------------------------------------------------------------------------
	
	
	// 订单支付 支付宝服务器异步通知页面
	@RequestMapping(value = "/order/v_onCallBack.jspx", method = RequestMethod.POST)
	public void v_onCallBack(HttpServletRequest request,
			HttpServletResponse response, ModelMap model) {
		System.out.println("支付宝服务器异步通知页面!");
		// 请求的域名
		StringBuffer p = request.getRequestURL();
		int endp = p.length() - "order/v_onCallBack.jspx".length();
		String path1 = p.toString().substring(0, endp);
		// 获取支付宝POST过来反馈信息
		Map<String, String> params = new HashMap<String, String>();
		Map requestParams = request.getParameterMap();
		for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
			String name = (String) iter.next();
			String[] values = (String[]) requestParams.get(name);
			String valueStr = "";
			for (int i = 0; i < values.length; i++) {
				valueStr = (i == values.length - 1) ? valueStr + values[i]
						: valueStr + values[i] + ",";
			}
			// 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
			// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
			params.put(name, valueStr);
		}

		String out_trade_no = RequestUtils.getQueryParam(request,
				"out_trade_no");// 商户订单号
		String trade_no = RequestUtils.getQueryParam(request, "trade_no");// 支付宝交易号
		String trade_status = RequestUtils.getQueryParam(request,
				"trade_status");// 交易状态
		String total_fee = RequestUtils.getQueryParam(request, "total_fee");// 交易金额
		String buyer_email = RequestUtils.getQueryParam(request, "buyer_email");// 卖家支付账号
		String subject = RequestUtils.getQueryParam(request, "subject");// 商品名称
		if (AlipayNotify.verify(params)) {// 验证成功
			// 请在这里加上商户的业务逻辑程序代码
			Order order = orderMng.getOrderByCode(out_trade_no);
			OrderExt ext = extMng.getOrderExtByOrderCode(order.getOrderCode())
					.get(0);
			if (order == null) {
				// AlipayCore.logResult("根据支付宝返回的参数订单编号:" + out_trade_no
				// + "的订单,异步校验,在数据查找订单为空!交易终止!");
				log.info("根据支付宝返回的参数订单编号:" + out_trade_no
						+ "的订单,异步校验,在数据查找订单为空!交易终止!");
				return;
			}
			if (null == ext || !ext.getProductName().equals(subject)) {
				log.info("请求域名=" + path1 + "根据支付宝返回的参数订单编号:" + out_trade_no
						+ "的订单,同步校验,订单参数商品名称不对!交易终止!返回名称为:" + subject);
				// model.addAttribute("msg", "交易失败!");
				// cmsLogMng.orderLogSave(request, order.getOrderCode(),
				// "order.log", "请求域名="+path1+"交易失败,订单有误--返回的名称为:" + subject);
				return;
			}
			// ——更改数据库的订单相关状态——
			if (trade_status.equals("TRADE_FINISHED")) {
				// 判断该笔订单是否在商户网站中已经做过处理
				// 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
				// AlipayCore.logResult("根据支付宝返回的参数订单编号:" + out_trade_no
				// + "的订单,异步校验成功!交易完成 ");
				log.info("根据支付宝返回的参数订单编号:" + out_trade_no + "的订单,异步校验成功!交易完成 ");
				// 如果有做过处理,不执行商户的业务程序
				// 注意:
				// 该种交易状态只在两种情况下出现
				// 1、开通了普通即时到账,买家付款成功后。
				// 2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。
			} else if (trade_status.equals("TRADE_SUCCESS")) {
				order.setChargeCode(trade_no);
				if (1 != order.getStatus() && 2 != order.getStatus())
					order.setStatus(2);
				if (null == order.getChargeTime()
						|| "".equals(order.getChargeTime())) {
					order.setChargeTime(new java.sql.Date(new java.util.Date()
							.getTime()));
				}
				if (1 != order.getSendState() && 2 != order.getSendState())
					order.setSendState(2);
				order.setChargeAccount(buyer_email);
				order.setChargeType(1);

				// order.setChargeCode(out_trade_no);
				order = orderMng.updateByUpdater(order);
				// String productCode= ext.getProductCode();
				// Product = productMng.findByProductCode(productCode)
				order.setExt(ext);

				 if (2 == order.getStatus()) {
					 if(null!=orderCodeTemp&&!"".equals(orderCodeTemp)&&orderCodeTemp.equals(out_trade_no)){
						this.fetchCard(request, response, model, order);
						orderCodeTemp = out_trade_no;
					 }
				// String msg = getMailContents1(order, request);
				// model.addAttribute("msg", msg);
				 }
				// model.addAttribute("msg", "交易成功!");
				// 判断该笔订单是否在商户网站中已经做过处理
				// 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序支付成功
				// AlipayCore.logResult("根据支付宝返回的参数订单编号:" + out_trade_no
				// + "的订单,异步校验成功!支付成功 ");
				log.info("根据支付宝返回的参数订单编号:" + out_trade_no + "的订单,异步校验成功!支付成功 ");
				// 如果有做过处理,不执行商户的业务程序
				// 注意:
				// 该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。
			}

			// AlipayCore.logResult("根据支付宝返回的参数订单编号:" + out_trade_no
			// + "的订单,异步校验成功!交易完成! ");
			log.info("根据支付宝返回的参数订单编号:" + out_trade_no + "的订单,异步校验成功!交易完成! ");

		} else {// 验证失败
			// AlipayCore.logResult("根据支付宝返回的参数订单编号:" + out_trade_no
			// + "的订单,异步校验,由于验证失败,交易失败!!! ");
			log.info("根据支付宝返回的参数订单编号:" + out_trade_no
					+ "的订单,异步校验,由于验证失败,交易失败!!! ");
		}
	}

	/**
	 * 环讯支付异步返回通知
	 * 
	 * @param request
	 * @param response
	 * @param model
	 * @throws IOException
	 */
	@RequestMapping(value = "/order/ips_CallBack.jspx")
	public void ips_CallBack(HttpServletRequest request,
			HttpServletResponse response, ModelMap model) throws IOException {

		System.out.println("环讯支付异步通知!");
		// 请求的域名
		StringBuffer p = request.getRequestURL();
		int endp = p.length() - "order/ips_CallBack.jspx".length();
		String path1 = p.toString().substring(0, endp);
		String rtnUrl = formatString(path1 + "order/ips_CallBack.jspx");
		String billno = request.getParameter("billno");
		String currency_type = request.getParameter("Currency_type");
		String amount = request.getParameter("amount");
		String mydate = request.getParameter("date");
		String succ = request.getParameter("succ");
		String msgips = request.getParameter("msg");
//		String attach = request.getParameter("attach");
		String ipsbillno = request.getParameter("ipsbillno");
		String retEncodeType = request.getParameter("retencodetype");
		String signature = request.getParameter("signature");
		// 返回订单加密的明文:billno+【订单编号】+currencytype+【币种】+amount+【订单金额】+date+【订单日期】+succ+【成功标志】+ipsbillno+【IPS订单编号】+retencodetype
		// +【交易返回签名方式】+【商户内部证书】
		String content = "billno" + billno + "currencytype" + currency_type
				+ "amount" + amount + "date" + mydate + "succ" + succ
				+ "ipsbillno" + ipsbillno + "retencodetype" + retEncodeType; // 明文:订单编号+订单金额+订单日期+成功标志+IPS订单编号+币种
		// request.setCharacterEncoding("iso-8859-1");
		// request.setCharacterEncoding("utf-8");
//		response.setContentType("text/html");
//		response.setCharacterEncoding("gb2312");
//		PrintWriter out = response.getWriter();
		System.out.println("环讯支付异步返回:v_md5str=" + content);
		boolean verify = false;
		if (retEncodeType.equals("17")) {
			// 登陆http://merchant.ips.com.cn/商户后台下载的商户证书内容
			String md5Key = "ABovowjMd1CscDxpnvAUxNbS5G5fxZYLaZNEZDfdzgsbxpH6ZlyOTjLnaLqWr2O3TrH2qhFZEXVGV0VGzy5CaArsEaeDO9nxHo85XEGrUP8wC4HZqZWswBTHzPoE31A5";
			cryptix.jce.provider.MD5 b = new cryptix.jce.provider.MD5();
			String SignMD5 = b.toMD5(content + md5Key).toLowerCase();

			if (SignMD5.equals(signature)) {
				verify = true;
			}
		}

		if (verify) {
			if (succ != null) {
				if (succ.equalsIgnoreCase("Y")) {
					// 支付成功,商户 根据自己业务做相应逻辑处理
					// 此处加入商户系统的逻辑处理(例如判断金额,更新订单状态等等)......

					Order order = orderMng.getOrderByCode(billno);
					if (order == null) {
						log.info("请求域名=" + path1 + "根据环讯支付返回的参数订单编号:" + billno
								+ "的订单,异步校验,在数据查找订单为空!交易终止!");
						return;
					}
					OrderExt ext = extMng.getOrderExtByOrderCode(
							order.getOrderCode()).get(0);
					if (1 != order.getStatus()) {
						if (2 != order.getStatus()) {
							order.setStatus(2);
							order.setChargeCode(ipsbillno);
							if (null == order.getChargeTime()
									|| "".equals(order.getChargeTime())) {
								order.setChargeTime(new java.sql.Date(
										new java.util.Date().getTime()));
							}

							if (1 != order.getSendState()) {
								if(2 != order.getSendState()){
								order.setSendState(2);
								productMng.updateSaleNum(ext.getProductCode());
								}
							}
							order.setChargeAccount(ipsbillno);
							order.setChargeType(5);// 环讯在线
							order.setChargeCode(ipsbillno);
							order = orderMng.updateByUpdater(order);
							order.setExt(ext);
							
							
							// 多加一个判断以防支付金额不对则不提卡
							if (2 == order.getStatus()
									&& null != amount
									&& !"".equals(amount)
									&& Double.valueOf(amount)
											.equals(order.getSum())) {
								// 提卡
								fetchCard(request, response, model, order);
								String msg = getMailContents1(order, request);
								System.out.println("发货成功!");
								model.addAttribute("msg", msg);
								cmsLogMng.orderLogSave(request,
										order.getOrderCode(), "order.log", "请求域名="
												+ rtnUrl + ":环讯支付-" + ipsbillno
												+ ":实付金额=" + amount);
							}
							if (!Double.valueOf(amount).equals(order.getSum())) {
								model.addAttribute("msg", "支
上传图片
package com.freejuguo.framework.gprs.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/** 
 * @描述: 
 * @作者: suyx
 * @创建时间: 2013-12-28 下午2:07:59 
 * @版本: V1.0.0
 */

public class A
{
public static void main(String[] args)
{
    File inFile = new File("D:\\test\\1.jpg");
    File outFile = new File("D:\\test2\\2.jpg");
    
    if(!outFile.exists()){
        try
        {
            outFile.createNewFile();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
    
    try
    {
        FileInputStream in = new FileInputStream(inFile);
       
        byte[] array = new byte[in.available()];
        int len = in.read(array);
        FileOutputStream out = new FileOutputStream(outFile);
        out.write(array,0,len);
        in.close();
        out.close();
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
    
 //   System.out.println(1200 * 100 / 256);
}
}
集合容器类
import java.util.*;

import javax.swing.JOptionPane;
public class DateExample
{ 
   public static void main(String args[ ]) 
   {  
      String str=JOptionPane.showInputDialog("输入第一个日期的年份:");
      int yearOne=Integer.parseInt(str);
      str=JOptionPane.showInputDialog("输入该年的月份:");
      int monthOne=Integer.parseInt(str);
      str=JOptionPane.showInputDialog("输入该月份的日期:");
      int dayOne=Integer.parseInt(str);
      str=JOptionPane.showInputDialog("输入第二个日期的年份:");
      int yearTwo=Integer.parseInt(str);
      str=JOptionPane.showInputDialog("输入该年的月份:");
      int monthTwo=Integer.parseInt(str);
      str=JOptionPane.showInputDialog("输入该月份的日期:");
      int dayTwo=Integer.parseInt(str);
      Calendar calendar=Calendar.getInstance();
      calendar.set(yearOne, monthOne, dayOne);
      long timeOne=calendar.getTimeInMillis();     //calendar表示的时间转换成毫秒                                               
      calendar.set(yearTwo,monthTwo,dayTwo);


      long timeTwo=calendar.getTimeInMillis();    //calendar表示的时间转换成毫秒。
      Date date1=new Date(timeOne);
      Date date2=new Date(timeTwo);
      if(date2.equals(date1))
        {
             System.out.println("两个日期的年、月、日完全相同");
        }
      else if(date2.after(date1))
        {
             System.out.println("您输入的第二个日期大于第一个日期");
        }
     else if(date2.before(date1))
        {
             System.out.println("您输入的第二个日期小于第一个日期");
        }
      long days=Math.abs(timeOne-timeTwo)/1000/3600/24;
      System.out.println(yearOne+"年"+monthOne+"月"+dayOne+"日和"
                         +yearTwo+"年"+monthTwo+"月"+dayTwo+"相隔"+days+"天");
   }
}
Global site tag (gtag.js) - Google Analytics