阅读背景:

订单系统--订单审核

来源:互联网 
<%@page import="com.founder.ec.common.type.NPaymentMode"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<c:set var="ctx" value="${pageContext.request.contextPath}" />
<jsp:include page="/jsp/common/header.jsp"></jsp:include>
<script src="${ctx }/js/order/order_audit.js"></script>
<jsp:include page="/jsp/common/session_user_id.jsp"></jsp:include>
<table class="queryTable" >
    <tr>
        <td class="queryTitle" width="80px">订单编号</td>
        <td class="queryContent">
            <input class="inputText" type="text" id="queryOrderId" />
        </td>
        
        <td class="queryTitle" width="80px">ERP订单号</td>
        <td class="queryContent">
            <input class="inputText" type="text" id="queryErpOrderId" />
        </td>
        
        <td class="queryTitle" width="80px">订单来源</td>
        <td class="queryContent">
            <select id="queryMultiChannelId" class="easyui-combobox" style="width: 100px" panelHeight="auto">
                <option value="">请选择</option>
                <c:forEach var="orderFrom" items="${orderFromList }">
                    <option value="${orderFrom.multiChannelId}">${orderFrom.channelName }</option>
                </c:forEach>
            </select>
        </td>
    </tr>
    <tr class="showOrhideClass">
        <td class="queryTitle" width="80px">会员姓名</td>
        <td class="queryContent">
            <input class="inputText" type="text" id="queryMemberRealName" />
        </td>
        <td class="queryTitle" width="80px">会员帐号</td>
        <td class="queryContent">
            <input class="inputText" type="text" id="queryMemberLoginName" />
        </td>
        <td class="queryTitle" width="80px">付款状态</td>
        <td class="queryContent">
            <select id="queryIsPaid" class="easyui-combobox" style="width: 80px" panelHeight="auto">
                <option value="">请选择</option>
                <option value="Y" selected="selected">已付款</option>
                <option value="N">未付款</option>
                <option value="P">部分付款</option>
            </select>
        </td>
    </tr>
    <tr class="showOrhideClass">
        <td class="queryTitle" width="80px">支付方式</td>
        <td class="queryContent">
            <select id="queryPaymentTypeId" class="easyui-combobox" style="width: 100px" panelHeight="auto">
                <option value="">请选择</option>
                <c:forEach var="paymentType" items="${paymentTypeList }">
                    <option value="${paymentType.paymentTypeId }">${paymentType.paymentTypeName }</option>
                </c:forEach>
            </select>
        </td>
        <td class="queryTitle" width="80px">付款日期</td>
        <td class="queryContent" colspan="2">
            <input class="inputText easyui-datebox" type="text" id="queryPaidTimeBg"  style="width:125px" editable="false" />&nbsp;<input class="inputText easyui-datebox" type="text" id="queryPaidTimeEd"  style="width:125px" editable="false" />
        </td>
        <td class="queryBtnTd" rowspan="2">
        </td>
    </tr>
    <tr class="showOrhideClass">
        <td class="queryTitle" width="80px">支付类型</td>
        <td class="queryContent">
            <select id="queryPaymentMode" class="easyui-combobox" style="width: 100px" panelHeight="auto">
                <option value="">请选择</option>
                <%pageContext.setAttribute("paymentModes", NPaymentMode.values()); %>
                <c:forEach var="paymentMode" items="${paymentModes }">
                    <option value="${paymentMode }">${paymentMode.code }</option>
                </c:forEach>
            </select>
        </td>        
        <td class="queryTitle" width="80px">下单日期</td>
        <td class="queryContent" colspan="2">
            <input class="inputText easyui-datebox" type="text" id="queryCommitTimeBg" style="width:125px" editable="false"/>&nbsp;<input class="inputText easyui-datebox" type="text" id="queryCommitTimeEd" style="width:125px" editable="false"/>
        </td>
    </tr>
    
    <tr style="line-height: 30px;text-align: right;">
      <td colspan="6">
      <a href="javascript:void(0)" id="show" style="text-decoration: none; font-size: 12px;color: black;font-family:宋体; cursor: pointer;"><span id="showOrhide">展开</span><img id="showOrhideImage" src="${ctx}/images/common/hide.jpg"/></a>
          <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-search"  onclick="doQuery()">查询</a>&nbsp;&nbsp;&nbsp;&nbsp;
      </td>
   </tr>
</table>

<table id="auditOrderGrid"></table>

<div id="memberMan    agerView" class="easyui-window" title="" iconCls="icon-search" closed="true"></div>

<div id="opreateHtml" class="easyui-window" title="" iconCls="icon-edit" style="width:300px; height:200px;text-align:center; background: #fafafa;">
  <div class="easyui-layout" fit="true">
    <div region="center" border="false" style="background:#fff;border:1px solid #ccc;">
       <form>
             <input type="hidden" id="addOrderId" />
             <table class="queryTable" border="0">
             <tr>
                   <td class="queryTitle" width="80px">发票抬头</td>
                   <td class="queryContent" ><input class="inputText" type="text" id="orderNotes" /></td>
              </tr>
           </table>
       </form>
    </div>
  <div region="south" border="false" style="text-align:center;height:30px;line-height:30px;">
     <a class="easyui-linkbutton" iconCls="icon-ok" href="javascript:void(0);" onclick="save();">保存</a>&nbsp;&nbsp;
     <a class="easyui-linkbutton" iconCls="icon-cancel" href="javascript:void(0);" onclick="closeWin();">退出</a>
  </div>
</div>

<div id="memberManagerView" class="easyui-window" title="" iconCls="icon-search" closed="true"></div>
var parentWindow;
$(function(){
    createParentHiddenDom("frameName");
    if(window.opener){
        parentWindow = window.opener;
    }else{
        parentWindow = window.parent;
    }
    $('#opreateHtml').window('close');
    $("#auditOrderGrid").datagrid({
        url:appPath+'/page/auditOrder/list',
        height:'full',
        striped: true,
        remoteSort:false,
        singleSelect:false,
        queryParams: getQueryParam(),
        idField:'orderId',
        pageSize:15,
        pageList:[15,30,45,60,75,100],
        frozenColumns:[[{field:'ck',checkbox:true},
              {field:'opt',title:'操作',width:100,align:'center',
                  formatter:function(value,rowData,rowIndex){
                        var auditObj = $("<img/>").attr("src",appPath+"/js/lib/jquery-easyui/themes/icons/order-audit.png")
                                                  .attr("title","审核");
                        var auditERP ="<img class='op-enable' src='"+appPath+"/js/lib/jquery-easyui/themes/icons/pencil.png' onClick='showWin("+rowData.orderId+")' title='发票抬头'/>";
                        var memberObj = $("<img/>").attr("src",appPath+"/js/lib/jquery-easyui/themes/icons/login.png")
                                                  .attr("title","会员").addClass("op-enable").attr("onClick","toQueryMemberPage('"+rowData.memberId+"')");
                      var cancelObj = $("<img/>").attr("src",appPath+"/js/lib/jquery-easyui/themes/icons/order-cancel.png")
                                                  .attr("title","取消");                                                  
                      if(rowData.isLock == "Y" && rowData.lockUserId != $("#sessionUserId").val()){
                          if(checkButtonRight('assign_audit_order')){
                              auditObj.removeClass().addClass("op-enable").attr("onClick","toAuditPage('"+rowData.orderId+"','"+rowData.limitDate+"')");
                          }else{
                              auditObj.removeClass().addClass("op-disable");
                          }
                      }else{
                            auditObj.removeClass().addClass("op-enable").attr("onClick","toAuditPage('"+rowData.orderId+"','"+rowData.limitDate+"')");
                      }
                      if(rowData.isPaid == "N"){
                            cancelObj.removeClass().addClass("op-enable").attr("onClick","cancelOrder('"+rowData.orderId+"')");
                      }else{
                            cancelObj.removeClass().addClass("op-disable");
                      }
                      return $("<div></div>").append(auditObj).append("&nbsp;&nbsp;")
                                             .append(auditERP).append("&nbsp;&nbsp;")
                                               .append(cancelObj).append("&nbsp;&nbsp;")
                                               .append(memberObj).html();        
                  }
              }
                        ]],
        columns:[[
              {field:'orderId',title:'订单编号',width:100,align:'left',sortable:true},
              {field:'erpOrderId',title:'ERP单号',width:100,align:'left',sortable:true},
              {field:'isLock',title:'是否锁定',width:60,align:'center',sortable:true,formatter:function(value,rowData,rowIndex){
                      return (null==value||""==value)?"":("Y"==value?"是":"否");
              }},
              {field:'lockUserName',title:'锁定人',width:80,align:'left',sortable:true},
              {field:'memberLoginName',title:'会员登录名',width:80,align:'left',sortable:true},
              {field:'memberRealName',title:'会员名称',width:80,align:'left',sortable:true},
              {field:'skuFee',title:'货款金额',width:75,align:'right',sortable:true,formatter:function(value){if(!isNaN(Number(value))){return Number(value).toFixed(2)}}},
              {field:'otherDiscounts',title:'其他优惠',width:75,align:'right',sortable:true,formatter:function(value){if(!isNaN(Number(value))){return Number(value).toFixed(2)}}},
              {field:'orderPoints',title:'积分',width:75,align:'right',sortable:true,formatter:function(value){if(!isNaN(Number(value))){return Number(value).toFixed(0)}}},
              {field:'orderVouchers',title:'代金券',width:75,align:'right',sortable:true,formatter:function(value){if(!isNaN(Number(value))){return Number(value).toFixed(0)}}},
              {field:'discountFee',title:'手工优惠',width:75,align:'right',sortable:true,formatter:function(value){if(!isNaN(Number(value))){return Number(value).toFixed(2)}}},
              {field:'deliveryFee',title:'运费',width:75,align:'right',sortable:true,formatter:function(value){if(!isNaN(Number(value))){return Number(value).toFixed(2)}}},
              {field:'orderFee',title:'订单金额',width:80,align:'right',sortable:true,formatter:function(value){if(!isNaN(Number(value))){return Number(value).toFixed(2)}}},
              {field:'orderPayFee',title:'待支付金额',width:75,align:'right',sortable:true,formatter:function(value){if(!isNaN(Number(value))){return Number(value).toFixed(2)}}},
              {field:'paidFee',title:'支付金额',width:75,align:'right',sortable:true,formatter:function(value){if(!isNaN(Number(value))){return Number(value).toFixed(2)}}},
              {field:'paymentModeName',title:'支付类型',width:60,align:'center',sortable:true},
              {field:'orderStateName',title:'订单状态',width:80,align:'left',sortable:true},
              {field:'commitTime',title:'提交时间',width:125,align:'center',sortable:true},
              {field:'paymentTypeName',title:'支付方式',width:100,align:'left',sortable:true},
              {field:'paidTime',title:'付款时间',width:125,align:'center',sortable:true},
              {field:'urlFromNo',title:'网站来源URL',width:100,align:'left',sortable:true},
              {field:'companyName',title:'物流公司',width:100,align:'left',sortable:true}
              ]],
         pagination:true,
         rownumbers:true,
         toolbar:[{
                id:'btnPass',
                text:'批量审核',
                iconCls:'icon-ok',
                handler:function(){
                    bathAuditOrder();
                }
            }],
         onBeforeLoad:function(param){
             if(param.commitTimeBg){
                 if(!isDate(param.commitTimeBg)){
                     $.messager.alert('提示信息','提交日期格式为 yyyy-MM-dd','error');
                     return false;
                 }
                 param.commitTimeBg = param.commitTimeBg + " 00:00:00";
             }
             if(param.commitTimeEd){
                 if(!isDate(param.commitTimeEd)){
                     $.messager.alert('提示信息','提交日期格式为 yyyy-MM-dd','error');
                     return false;
                 }
                 param.commitTimeEd = param.commitTimeEd + " 23:59:59";
             }
             if(param.commitTimeBg && param.commitTimeEd && (param.commitTimeBg > param.commitTimeEd)) {  
                $.messager.alert('提示信息','起始日期要小于或等于截至日期','info'); 
                return false;  
            } 
            if(param.paidTimeBg){
                 if(!isDate(param.paidTimeBg)){
                     $.messager.alert('提示信息','付款日期格式为 yyyy-MM-dd','error');
                     return false;
                 }
                 param.paidTimeBg = param.paidTimeBg + " 00:00:00";
             }
             if(param.paidTimeEd){
                 if(!isDate(param.paidTimeEd)){
                     $.messager.alert('提示信息','付款日期格式为 yyyy-MM-dd','error');
                     return false;
                 }
                 param.paidTimeEd = param.paidTimeEd + " 23:59:59";
             }
             if(param.paidTimeBg && param.paidTimeEd && (param.paidTimeBg > param.paidTimeEd)) {  
                $.messager.alert('提示信息','付款起始日期要小于或等于截至日期','info'); 
                return false;  
            }
             $("#auditOrderGrid").datagrid('clearSelections');
         },
         onSelectAll:function(rows){
             for(var i=0;i<rows.length;i++){
                 var row = rows[i];
                 if((row.isLock == "Y" && row.lockUserId != $("#sessionUserId").val()) ||
                     row.limitDate < getCurrentTimeString() ||
                     (row.paymentMode!='HDFK' && row.paymentMode!='HDFK_POS' && row.isPaid != 'Y')){
                     var rowIndex = $("#auditOrderGrid").datagrid('getRowIndex',row);
                     $("#auditOrderGrid").datagrid('unselectRow',rowIndex);
                 }
                 
             }
         },
         onClickRow:function(rowIndex,rowData){
             $("#auditOrderGrid").datagrid('unselectRow',rowIndex);
             return false;
         },
         onDblClickRow:function(rowIndex,rowData){
             $("#auditOrderGrid").datagrid('unselectRow',rowIndex);
             return false;
         },
         onClickCell:function(rowIndex,rowData){
             $("#auditOrderGrid").datagrid('unselectRow',rowIndex);
             return false;
         },
         onDblClickCell:function(rowIndex,rowData){
             $("#auditOrderGrid").datagrid('unselectRow',rowIndex);
             return false;
         },
         onLoadSuccess:function(data){
             $(".datagrid-cell-check input[type=checkbox]").click(
                 function(){
                     var rowIndex = $(this).parent().parent().parent().attr("datagrid-row-index");
                     var rowData = data.rows[rowIndex];
                     if(rowData.isLock == "Y" && rowData.lockUserId != $("#sessionUserId").val()){
                         $.messager.alert('提示信息','该订单已被'+rowData.lockUserName+'锁定!','info',function(){
                             $("#auditOrderGrid").datagrid('unselectRow',rowIndex);
                         });
                     }else if(rowData.limitDate < getCurrentTimeString()){
                         $.messager.alert('提示信息','该订单已过有效期!','info',function(){
                             $("#auditOrderGrid").datagrid('unselectRow',rowIndex);
                         });
                     }else if(rowData.paymentMode!='HDFK' && rowData.paymentMode!='HDFK_POS' && rowData.isPaid != 'Y'){
                         $.messager.alert('提示信息','该订单未付款!','info',function(){
                             $("#auditOrderGrid").datagrid('unselectRow',rowIndex);
                         });
                     } 
                 }
             );
         }
    });
    
    showORhide();
    
});

// 检查审核权限
function checkButtonRight(buttonNo) {
    var rslt = false;
    doAjax({
        url : appPath + "/page/sysButton/" + buttonNo + "/checkRight",
        async : false,
        success : function(data) {
            if (typeof (data) == 'boolean' && data) {
                rslt = true;
            }
        }
    });
    return rslt;
}

function getQueryParam(){
    var queryObject = new Object();
    queryObject.orderId = jQuery.trim($("#queryOrderId").val());
    queryObject.erpOrderId = jQuery.trim($("#queryErpOrderId").val());
    queryObject.memberRealName = jQuery.trim($("#queryMemberRealName").val());
    queryObject.memberLoginName = jQuery.trim($("#queryMemberLoginName").val());
    queryObject.multiChannelId = $("#queryMultiChannelId").combobox("getValue");
    queryObject.paymentTypeId = $("#queryPaymentTypeId").combobox("getValue");
    queryObject.isPaid = $("#queryIsPaid").combobox("getValue");
    queryObject.commitTimeBg = $('#queryCommitTimeBg').datebox("getValue");
    queryObject.commitTimeEd = $('#queryCommitTimeEd').datebox("getValue");
    queryObject.paymentMode = $("#queryPaymentMode").combobox("getValue");
    queryObject.paidTimeBg = $('#queryPaidTimeBg').datebox("getValue");
    queryObject.paidTimeEd = $('#queryPaidTimeEd').datebox("getValue");
    return queryObject;
}

function doQuery(){
    $("#auditOrderGrid").datagrid('load',getQueryParam());
}

function cancelOrder(orderId){
    if(!orderId){
        return ;
    }
    if(!checkUserButtonRight('audit_cancel_order')){
        return ;
    }
    $.messager.prompt('取消订单', '请输入订单取消原因:', function(msg){
        if (msg){
            $.messager.confirm('提示信息','您确定要取消此订单?',function(r){
                if(r){
                    doAjax({
                        url:appPath + "/page/auditOrder/cancel",
                        type:"post",
                        data:{orderId:orderId,cancelNotes:msg},
                        success:function(data){
                            var code = data.code;
                            switch(code){
                                case -2:
                                    $.messager.alert('提示信息','改订单已付款','info');
                                    break;
                                case -1:
                                    $.messager.alert('提示','该订单不存在或已删除!','info');
                                    break;
                                case 0:
                                    $.messager.alert('提示',data.msg,'info');
                                    break;
                                case 1:
                                    $.messager.alert('提示信息','订单取消成功!','info');
                                    doQuery();
                                    break;
                                default:
                                    $.messager.alert('提示',data,'info');
                                    break;
                            }
                        },
                        error:function(XMLHttpRequest, textStatus, errorThrown){
                            $.messager.alert('提示信息','订单取消未能完成,'+textStatus,'error');
                        }
                    });    
                }
            });        
        }else{
            $.messager.alert('提示','订单取消原因不能为空!','info',function(){
                cancelOrder(orderId);
            });
        }
    });
}

/**
 * 转向审核页面
 * @param {} orderId
 * @param {} limitDate
 */
function toAuditPage(orderId,limitDate){
    if(!orderId || !limitDate){
        return ;
    }
    if(limitDate < getCurrentTimeString()){
        $.messager.confirm('提示','该订单已过有效期,是否取消?',function(t){
            if(t){
                cancelOrder(orderId);
            }else{
                openAuditPage(orderId);            
            }
        },{ok:"yes",cancel:"no"});
    }else{
        openAuditPage(orderId);
    }
}

/**
 * 打开审核详情页
 * @param {} orderId
 */
function openAuditPage(orderId){
    if(!orderId){
        return ;
    }
    doAjax({
        url:appPath + "/page/auditOrder/"+orderId+"/lock",
        type:"post",
        success:function(data){
            var code = data.code;
            switch(code){
                case -1:
                    $.messager.alert('提示','该订单不存在或已删除!','info');
                    break;
                case -2:
                    if(checkButtonRight('assign_audit_order')){
                        $(parentWindow.document).find("#frameName").val($(self).attr("name"));
                        parentWindow.addTab("订单审核详情",appPath+"/page/order/"+orderId+"/detail","icon icon-users",true,"orderAuditFrame");
                        break;
                    }else{
                        $.messager.alert('提示','<p>该订单已锁定</p><p style="height:12px">锁定时间:'+data.lockTime+'</p><p style="height:12px">锁定人:'+data.lockUserName+'</p>','info');
                        break;
                    }
                case 1:
                    $(parentWindow.document).find("#frameName").val($(self).attr("name"));
                    parentWindow.addTab("订单审核详情",appPath+"/page/order/"+orderId+"/detail","icon icon-users",true,"orderAuditFrame");
                    break;
                case 0:
                    $.messager.alert('提示',data.msg,'info');
                    break;
                default:
                    $.messager.alert('提示',data,'info');
                    break;
            }
        },
        error:function(XMLHttpRequest, textStatus, errorThrown){
            $.messager.alert('提示信息','订单锁定未能完成,'+textStatus,'error');
        }
    });
}

function toQueryMemberPage(memberId) {
    var data = new Object();
    
    data = {"memberId":memberId};
    
    var id = "memberManagerView";
    
    var url = appPath+"/page/member/detail";
    doAjax({
        url:url,
        type:'post',
        data:data,
        success:function(data){
            $("#"+id).empty().html(data);
            $("#"+id).window({
                title:'查看会员详细信息',
                width:700,
                height:450,
                left:100,
                modal: true,
                shadow: true,
                collapsible:false,
                minimizable:false,
                maximizable:false
            });
            $("#"+id).window('move',{top:0});
            $("#"+id).window('open');
        }
    });
}

/**
 * 批量审核订单
 */
function bathAuditOrder(){
    if(!checkUserButtonRight('audit_batch')){
        return ;
    }
    var selections = $("#auditOrderGrid").datagrid('getSelections');
    if(selections == null || selections == ''){
        $.messager.alert('提示信息','请选择要审核的订单','info');
        return ;
    }else{
        $.messager.prompt('批量审核', '请输入批量审批意见:', function(msg){
            $.messager.confirm('提示信息','您确定要批量审核这些订单?',function(r){
                if(r){
                    var mod = $("<div class='panel window' style='position: absolute;text-align:center;top:50%;left:50%;z-index:1100'>" +
                        "<img src='"+appPath+"/images/common/loading.gif'><br/>正在批量审核...</div>" +
                        "<div class='window-mask' style='z-index:10'></div>");
                    mod.appendTo('body');
                    var ids = '';
                    for(var i=0;i<selections.length;i++){
                        ids += selections[i].orderId+',';
                    }
                    ids = ids.substring(0,ids.lastIndexOf(','));
                    doAjax({
                        url:appPath+'/page/auditOrder/batchAudit',
                        type:'post',
                        data:{orderIds:ids,auditNotes:msg},
                        success:function(data){
                            mod.remove();
                            var code = data.code;
                            switch(code){
                                case 0:
                                    $.messager.alert('提示',data.msg,'info');
                                    break;
                                case 1:
                                    if(data.msg){
                                        $.messager.alert('提示','以下订单金额检查未通过'+data.msg,'info');
                                    }
                                    $("#auditOrderGrid").datagrid('unselectAll');
                                    $("#auditOrderGrid").datagrid('reload');
                                    break;
                                case -2:
                                    if(data.msg){
                                        $.messager.alert('提示','以下订单库存不足'+data.msg,'info');
                                    }
                                    $("#auditOrderGrid").datagrid('unselectAll');
                                    $("#auditOrderGrid").datagrid('reload');
                                    break;
                                default:
                                    $.messager.alert('提示',data,'info');
                                    break;
                            }
                        },
                        error:function(XMLHttpRequest, textStatus, errorThrown){
                            $.messager.alert('提示信息','抱歉,批量审核失败,'+textStatus,'error');
                        }
                    });        
                }
            });
        });
    }
}

//发票抬头
function showWin(id){
    $('#addOrderId').val("");
    $('#orderNotes').val("");
      if(id!=null){
         iconStr="icon-add";
         title="添加发票";
      }
      $('#opreateHtml').window({
        title:title,
        iconCls:iconStr,
        width:300,
        height:220,
        left:200,
        modal: true,
        shadow: true,
        collapsible:false,
        minimizable:false,
        maximizable:false
      });
      $('#opreateHtml').window('move',{top:0});
      $('#opreateHtml').window('open');
      $('#addOrderId').val(id);
      
    }

    function closeWin(id){
      $('#opreateHtml').window('close');
    }

    function save(){
        if($("#orderNotes").val()==null||$("#orderNotes").val()==""){
            $.messager.alert('提示信息','发票抬头不能为空','info');    
            return;
        }
        
        var orderInfo=new Object();
        orderInfo.orderId=$('#addOrderId').val();
        orderInfo.orderNotes=$('#orderNotes').val();
        doAjax({
           url:appPath+'/page/auditOrder/updateOrderNotes',
           type:'post',
           data:orderInfo,
           success:function(data){
              $.messager.alert('提示信息','添加成功','info');    
              $('#opreateHtml').window('close');
             doQuery();
           }
       });
    }
package com.founder.ec.order.action;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.founder.ec.WS.model.OrderStatus;
import com.founder.ec.base.action.BaseAction;
import com.founder.ec.common.model.SysCode;
import com.founder.ec.common.service.CommonLogisticsService;
import com.founder.ec.common.service.SystemService;
import com.founder.ec.common.utils.DateUtils;
import com.founder.ec.common.utils.HttpSenderUtil;
import com.founder.ec.common.utils.StringUtil;
import com.founder.ec.order.model.EcMultiChannel;
import com.founder.ec.order.model.EcPaymentType;
import com.founder.ec.order.model.LogisticFeeRule;
import com.founder.ec.order.model.OrderInfo;
import com.founder.ec.order.model.OrderItem;
import com.founder.ec.order.model.OrderLog;
import com.founder.ec.order.model.OrderPriceChangeLog;
import com.founder.ec.order.service.OrderService;
import com.founder.ec.utils.PropertyConfigurer;
import com.j1.hessian.common.J1SOAHessianHelper;
import com.j1.pay.model.oracle.OrderPaymentLog;
import com.j1.soa.resource.pay.api.PayQueryService;

@Controller
@RequestMapping("/auditOrder")
public class OrderAuditAction extends BaseAction {
    
    private static final String url =(String)PropertyConfigurer.getContextProperty("order.url");
    private static final String payUrl =(String)PropertyConfigurer.getContextProperty("pay.url");

    @Autowired
    private OrderService orderService;

    @Autowired
    private SystemService systemService;
    
    @Autowired
    private CommonLogisticsService commonLogisticsService;
    
    /**
     * 转到审核页面
     * @param request
     * @return
     */
    @RequestMapping(value="/auditPage")
    public String toAuditPage(HttpServletRequest request){
        EcMultiChannel c = new EcMultiChannel();
        c.setIsEnable("Y");
        List<HashMap<String,Object>> orderFromList = orderService.getSimpleMultiChannel(c);
        EcPaymentType param = new EcPaymentType();
        param.setIsEnable("Y");
        List<HashMap<String,Object>> paymentTypeList = orderService.getSimplePaymentType(param);
        request.setAttribute("orderFromList", orderFromList);
        request.setAttribute("paymentTypeList", paymentTypeList);
        return "/jsp/order/order_audit.jsp";
    }
    
    /**
     * 转到货到付款审核页面
     * @param request
     * @return
     */
    @RequestMapping(value="/cashAuditPage")
    public String toCashAuditPage(HttpServletRequest request){
        EcMultiChannel c = new EcMultiChannel();
        c.setIsEnable("Y");
        List<HashMap<String,Object>> orderFromList = orderService.getSimpleMultiChannel(c);
        request.setAttribute("orderFromList", orderFromList);
        return "/jsp/order/order_audit_cash.jsp";
    }
    
    /**
     * 已提交订单列表
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping(value="/list")
    @ResponseBody
    public Map<String,Object> pagedList(HttpServletRequest request,OrderInfo orderInfo)
    {
        Integer pageNumber = 0;
        Integer pageSize = 0;
//        Integer userId=(Integer)request.getSession().getAttribute("userId");
//        Integer num=systemService.checkName(userId);
        Integer strLength=4;
//        if(num!=null&&num>0){
//            strLength=0;
//        }
        orderInfo.setStrLength(strLength);
        try {
            pageNumber = Integer.parseInt(request.getParameter("page"));
            pageSize = Integer.parseInt(request.getParameter("rows"));
        } catch (Exception e) {}
        if(StringUtil.isNotEmpty(request.getParameter("paymentModes"))){
            orderInfo.setPaymentModeArray(request.getParameter("paymentModes").split(","));
        }
        orderInfo.setStartRow((pageNumber-1) * pageSize + 1);
        orderInfo.setEndRow(orderInfo.getStartRow() + pageSize - 1);
        
        return orderService.getAuditOrders(orderInfo, pageNumber, pageSize);
    }
    
    /**
     * 锁定订单
     * @param request
     * @param orderId
     * @return
     */
    @RequestMapping(value="/{orderId}/lock")
    @ResponseBody
    public HashMap<String,Object> lockOrder(HttpServletRequest request,@PathVariable Long orderId){
        return orderService.doLockOrder(orderId, (Integer)request.getSession().getAttribute("userId"));
    }
    
    /**
     * 订单解锁
     * @param request
     * @param orderId
     * @return
     */
    @RequestMapping(value="/{orderId}/unLock")
    @ResponseBody
    public String unLockOrder(HttpServletRequest request,@PathVariable Long orderId){
        OrderInfo info = new OrderInfo();
        info.setOrderId(orderId);
        info.setIsLock("N");
        info.setEditUserId((Integer)request.getSession().getAttribute("userId"));
        info.setEditTime(DateUtils.getCurrentDateString());
        orderService.lockOrder(info);
        return "ok";
    }
    
    /**
     * 取消订单
     * @param request
     * @param orderId
     * @return
     */
    @RequestMapping(value="/cancel",method=RequestMethod.POST)
    @ResponseBody
    public HashMap<String,Object> cancelOrder(HttpServletRequest request,@RequestParam Long orderId,
            @RequestParam String cancelNotes){
        HashMap<String,Object> rs = new HashMap<String, Object>();
         if(null == orderId){
             rs.put("code", 0);
             rs.put("msg", "orderId is null");
            return rs;
        }
        Integer cancelStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_state","cancel"));
        if(null == cancelStateId){
            rs.put("code", 0);
             rs.put("msg", "orderStateId is null");
            return rs;
        }
        Integer cancelOutStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_out_state","cancel"));
        if(null == cancelOutStateId){
            rs.put("code", 0);
             rs.put("msg", "orderOutStateId is null");
            return rs;
        }
        
        
         //订单取消调用接口实时取消   modify  by lurongyu at 20140821  began
            OrderInfo newOrderInfo = orderService.getOrderInfo(orderId);
            OrderStatus   orderStatus = getReturnStatus (orderId,"1");
            if (newOrderInfo.getOrderState() != 29) {    
                if (orderStatus.getOrder_status().equals("98")){
                    rs.put("code", 0);
                    rs.put("msg", orderStatus.getOrder_remark());
                    return rs;
                }
    
                if (orderStatus.getOrder_status().equals("21")){
                    rs.put("code", 0);
                    rs.put("msg", orderStatus.getOrder_remark());
                    return rs;
                }
                if (newOrderInfo.getOrderState()== 28 && orderStatus.getOrder_status().equals("99")){
                    rs.put("code", 0);
                    rs.put("msg", "已审核订单还未进入OMS系统 请稍后再试!");
                    return rs;
                }
            }    
          //end    
        
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        String currentTime = DateUtils.getCurrentDateString();
        OrderInfo order = new OrderInfo();
        order.setOrderId(orderId);
        order.setOrderState(cancelStateId);
        order.setOrderOutState(cancelOutStateId);
        order.setCancelUserId(userId);
        order.setCancelTime(currentTime);
        order.setCancelNotes(cancelNotes);
        order.setEditUserId(userId);
        order.setEditTime(currentTime);
        return orderService.doCancelOrder(order);
    }
    
    
    /**
     * 设置线下方式支付
     * @param request
     * @param orderInfo
     * @return
     */
//    @RequestMapping("/setOfflinePayment")
//    @ResponseBody
//    public HashMap<String, Object> setOfflinePayment(HttpServletRequest request,OrderInfo orderInfo){
//        Integer userId = (Integer)request.getSession().getAttribute("userId");
//        String currentTime = DateUtils.getCurrentDateString();
//        OrderPaymentTypeList orderPaymentTypeList=new OrderPaymentTypeList();
//        orderPaymentTypeList.setAddTime(currentTime);
//        orderPaymentTypeList.setAddUserId(userId);
//        orderPaymentTypeList.setEditTime(currentTime);
//        orderPaymentTypeList.setEditUserId(userId);
//        orderPaymentTypeList.setIsDelete("N");
//        orderPaymentTypeList.setOrderId(orderInfo.getOrderId());
//        orderPaymentTypeList.setPaidFee(orderInfo.getPaidFee());
//        orderPaymentTypeList.setPaidTime(orderInfo.getPaidTime());
//        orderPaymentTypeList.setPaymentNo(orderInfo.getPaymentNo());
//        orderPaymentTypeList.setPaymentTypeId(new Long(orderInfo.getPaymentTypeId()));
//        orderService.saveOrderPaymentTypeList(orderPaymentTypeList);
//        orderInfo.setEditTime(currentTime);
//        orderInfo.setEditUserId(userId);
//        return orderService.doSetOfflinePayment(orderInfo);
//    }
    
    /**
     * 设置线下方式支付
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping("/setOfflinePayment")
    @ResponseBody
    public HashMap<String, Object> setOfflinePayment(HttpServletRequest request,OrderInfo orderInfo){
        PayQueryService payQueryService=J1SOAHessianHelper.getService(payUrl, PayQueryService.class);
        
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        String currentTime = DateUtils.getCurrentDateString();
        OrderPaymentLog  orderPaymentLog=new OrderPaymentLog();
        orderPaymentLog.setBusinessType("offline");//订单类型 线下
        orderPaymentLog.setBusinessId(orderInfo.getOrderId());//订单号
        orderPaymentLog.setPaymentTypeId(orderInfo.getPaymentTypeId());//支付方式ID
        orderPaymentLog.setPaymentNo(orderInfo.getPaymentNo());//支付流水,自己生成
        orderPaymentLog.setPaymentFee(orderInfo.getOrderFee());//支付金额(订单金额)
        
        orderPaymentLog.setPaidFee(orderInfo.getPaidFee()); //实际一次支付金额
        
        orderPaymentLog.setPaymentTime(orderInfo.getPaidTime());//支付时间
        orderPaymentLog.setMemberId(orderInfo.getMemberId());// 用户ID
        orderPaymentLog.setBackNo("");//第三方或银行返回流水号
        orderPaymentLog.setBackTime(currentTime);//第三方货银行返回的流水号
        orderPaymentLog.setBackState("SUCCESS");//支付状态,没有就SUCCESS
        orderPaymentLog.setBackNotes("SUCCESS");//同上
        orderPaymentLog.setIsDelete("N");
        orderPaymentLog.setQueryState("N");//同上
        double orderMoney=orderInfo.getOrderFee().doubleValue(); //订单金额
        double payMoney=Double.parseDouble(orderInfo.getPaymentTypeName()); //已支付金额
        double paid=orderInfo.getPaidFee().doubleValue(); //实际一次支付金额
        if((payMoney+paid)==orderMoney){
            orderPaymentLog.setPaidState("Y");//如果全部支付就Y,部分支付P,未支付N,paymentFee与paidFee的比较(比较的是支付的金额和订单金额)
        }else{
            orderPaymentLog.setPaidState("P");
        }
        payQueryService.addOrderPaymentLog(orderPaymentLog);
         //记入日志
         OrderLog log=new OrderLog();
         log.setOrderId(orderInfo.getOrderId());
         log.setLogContent("线下录入");
         log.setLogUserId(userId);
         log.setAddUserId(userId);
         log.setAddTime(currentTime);
         log.setIsDelete("N");
         orderService.saveOrderlog(log);
         
         orderInfo.setEditTime(currentTime);
         orderInfo.setEditUserId(userId);
         return orderService.doSetOfflinePaymentNew(orderInfo);
    }
    
    /**
     * 设置线下方式支付针对接口中的订单审核详情中的线下支付
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping("/setOfflinePaymentNew")
    @ResponseBody
    public HashMap<String, Object> setOfflinePaymentNew(HttpServletRequest request,OrderInfo orderInfo){
        PayQueryService payQueryService=J1SOAHessianHelper.getService(payUrl, PayQueryService.class);
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        Integer userId = (Integer)request.getSession().getAttribute("userId");
          String currentTime = DateUtils.getCurrentDateString();
          OrderPaymentLog  orderPaymentLog=new OrderPaymentLog();
          orderPaymentLog.setBusinessType("offline");//订单类型 线下
          orderPaymentLog.setBusinessId(orderInfo.getOrderId());//订单号
          orderPaymentLog.setPaymentTypeId(orderInfo.getPaymentTypeId());//支付方式ID
          orderPaymentLog.setPaymentNo(orderInfo.getPaymentNo());//支付流水,自己生成
          orderPaymentLog.setPaymentFee(orderInfo.getOrderFee());//订单金额
          
          orderPaymentLog.setPaidFee(orderInfo.getPaidFee()); //实际支付金额
          
          orderPaymentLog.setPaymentTime(orderInfo.getPaidTime());//支付时间
          orderPaymentLog.setMemberId(orderInfo.getMemberId());// 用户ID
          orderPaymentLog.setBackNo("");//第三方或银行返回流水号
          orderPaymentLog.setBackTime(currentTime);//第三方货银行返回的流水号
          orderPaymentLog.setBackState("SUCCESS");//支付状态,没有就SUCCESS
          orderPaymentLog.setBackNotes("SUCCESS");//同上
          orderPaymentLog.setIsDelete("N");
          orderPaymentLog.setQueryState("N");//同上
          double  payMoney=Double.parseDouble(orderInfo.getPaymentTypeName());
          double  orderFee=orderInfo.getOrderFee().doubleValue();
          if(payMoney==orderFee){
              orderPaymentLog.setPaidState("Y");//如果全部支付就Y,部分支付P,未支付N,paymentFee与paidFee的比较(比较的是支付的金额和订单金额)
          }else{
              orderPaymentLog.setPaidState("P");
          }
//        try {
//            OrderStateUpdateService iOrderStateUpdateService = J1SOAHessianHelper.getService(url, OrderStateUpdateService.class);
//            OrderStateParam orderStateParam = new OrderStateParam();
//            //订单号(必填)
//            orderStateParam.setOrderId(orderInfo.getOrderId());
//            //操作人
//            orderStateParam.setUserId(userId);
//            orderStateParam.setPaidFee(new BigDecimal(payMoney));
//            //订单付款
//            ServiceMessage<String> result = iOrderStateUpdateService.updateOrderStatePayment(orderStateParam);
//            if(result.getStatus().equals(MsgStatus.NORMAL)){
                payQueryService.addOrderPaymentLog(orderPaymentLog);
                rslt.put("code", 1);
//            }else{
//                rslt.put("code", 0);
//            }
//        } catch (Exception e) {
//            rslt.put("code", 0);
//        }
        orderInfo.setEditTime(currentTime);
        orderInfo.setEditUserId(userId);
        orderInfo.setPaidFee(orderInfo.getPaidFee()); //一次性付款金额
        orderInfo.setOrderPayFee(new BigDecimal(orderFee-(payMoney-orderInfo.getPaidFee().doubleValue()))); //待支付金额
        //doSetOfflinePayment方法中会查出来已经付款金额加上这次付款金额是否等于待支付金额(订单金额)
        
         //记入日志
         OrderLog log=new OrderLog();
         log.setOrderId(orderInfo.getOrderId());
         log.setLogContent("线下录入");
         log.setLogUserId(userId);
         log.setAddUserId(userId);
         log.setAddTime(currentTime);
         log.setIsDelete("N");
         orderService.saveOrderlog(log);
        
        orderService.doSetOfflinePaymentNew(orderInfo);
        return rslt;
    }
    
    /**
     * 刷新订单商品价格
     * @param request
     * @param orderId
     * @return
     */
    @RequestMapping(value="/{orderId}/refreshItemGoodsPrice")
    @ResponseBody
    public String updateItemPrice(HttpServletRequest request,@PathVariable Long orderId){
        HashMap<String, Object> param = new HashMap<String, Object>();
        param.put("orderId", orderId);
        param.put("editTime", DateUtils.getCurrentDateString());
        param.put("editUserId", (Integer)request.getSession().getAttribute("userId"));
        orderService.doRefreshItemGoodsPrice(param);
        return "ok";
    }
    
    /**
     * 订单审核通过
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping(value="/audit",method=RequestMethod.POST)
    @ResponseBody
    public HashMap<String,Object> auditOrder(HttpServletRequest request,OrderInfo orderInfo){
        HashMap<String,Object> rs = new HashMap<String, Object>();
        OrderInfo newOrderInfo = orderService.getOrderInfo(orderInfo.getOrderId());
        
        
//        //检查库存
//        StringBuffer sb = new StringBuffer();
//        List<HashMap<String, Object>> stockList = orderService.doCheckOrderStock(orderInfo.getOrderId());
//        for(HashMap<String, Object> st : stockList){
//            BigDecimal stock = (BigDecimal)st.get("availableStock");
//            if(stock.compareTo(BigDecimal.valueOf(0)) <= 0){
//                sb.append((String)st.get("goodsNo")+"("+(String)st.get("goodsName")+")");
//            }
//        }
//        if(StringUtil.isNotEmpty(sb.toString())){
//            rs.put("code", -2);
//            rs.put("msg", sb.toString());
//            return rs;
//        }
        
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        String currentTime = DateUtils.getCurrentDateString();
        List<OrderItem> itemList = new ArrayList<OrderItem>();
        String itemsString = request.getParameter("items");
        if(StringUtil.isNotEmpty(itemsString)){
            try{
                ObjectMapper om = new ObjectMapper();
                itemList = om.readValue(itemsString, new TypeReference<List<OrderItem>>(){});
            }catch(Exception e){
                e.printStackTrace();
                rs.put("code", 0);
                rs.put("msg", "items json err");
                return rs;
            }
        }
        Integer auditStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_state","audit"));
        if(null == auditStateId){
            rs.put("code", 0);
             rs.put("msg", "orderStateId is null");
            return rs;
        }
        Integer auditOutStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_out_state","audit"));
        if(null == auditOutStateId){
            rs.put("code", 0);
             rs.put("msg", "orderOutStateId is null");
            return rs;
        }
        
        orderInfo.setOrderState(auditStateId);
        orderInfo.setOrderOutState(auditOutStateId);
        orderInfo.setAuditUserId(userId);
        orderInfo.setAuditTime(currentTime);
        orderInfo.setEditUserId(userId);
        orderInfo.setEditTime(currentTime);
        
        if(newOrderInfo.getMultiChannelId()!=null && newOrderInfo.getMultiChannelId()==21){
            if(orderInfo.getGoodsSeller()!=null && Integer.parseInt(orderInfo.getGoodsSeller())!=2){
                LogisticFeeRule fitRule = commonLogisticsService.getFitRule(orderInfo);
                orderInfo.setLogisticCompanyId(fitRule.getLogisticCompanyId());
            }
                
            orderService.updateOrder(orderInfo);
            rs.put("code", 1);
            return rs;
        }
        return orderService.updateOrderInfoRelation(orderInfo, itemList,"audit");
    }

    //保存订单前判断订单是否已审核
    @RequestMapping(value="/checkIsAudit",method=RequestMethod.POST)
    @ResponseBody
    public String checkIsAudit(HttpServletRequest request,OrderInfo orderInfo){
        OrderInfo o = orderService.getOrderInfo(orderInfo.getOrderId());
        if(o.getOrderState()==28){
            return "Audited";
        }
        return "NoAudit";
    }
    
    /**
     * 保存订单
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping(value="/save",method=RequestMethod.POST)
    @ResponseBody
    public HashMap<String,Object> saveOrder(HttpServletRequest request,OrderInfo orderInfo){
        HashMap<String,Object> rslt = new HashMap<String, Object>();
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        String currentTime = DateUtils.getCurrentDateString();
        List<OrderItem> itemList = new ArrayList<OrderItem>();
        String itemsString = request.getParameter("items");
        if(StringUtil.isNotEmpty(itemsString)){
            try{
                ObjectMapper om = new ObjectMapper();
                itemList = om.readValue(itemsString, new TypeReference<List<OrderItem>>(){});
            }catch(Exception e){
                e.printStackTrace();
                rslt.put("code", 0);
                rslt.put("msg", "items json err");
                return rslt;
            }
        }
        
        orderInfo.setEditUserId(userId);
        orderInfo.setEditTime(currentTime);
        //this.saveOrderPriceChangeLog(userId,orderInfo);
        //订单改价记入日志
        OrderInfo oi=null;
        try {
            oi = orderService.getOrderInfo(orderInfo.getOrderId());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        rslt = orderService.updateOrderInfoRelation(orderInfo, itemList,"save");
        try {
            OrderInfo oiNew = orderService.getOrderInfo(orderInfo.getOrderId());
            this.saveOrderPriceChangeLog(oi,oiNew);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return rslt;
    }
    /**
     * 订单改价记入日志
     * @param OrderInfo oi 原订单
     * @param OrderInfo orderInfo 新订单
     * @return
     */
    public void saveOrderPriceChangeLog(OrderInfo oi,OrderInfo orderInfo){
        
        try {
            //OrderInfo oi = orderService.getOrderInfo(orderInfo.getOrderId());
            BigDecimal orderFee = orderInfo.getOrderFee();
            if (oi.getOrderFee().compareTo(orderFee)!=0) {
                OrderPriceChangeLog op = new OrderPriceChangeLog();
                op.setOrderId(orderInfo.getOrderId());
                List<OrderPriceChangeLog> opcll = orderService.getLatestLog(op);
                if (null!=opcll&&opcll.size()>0) {
                    //日志表最新价格
                    OrderPriceChangeLog opc = opcll.get(0);
                    
                    if (oi.getOrderFee().compareTo(opc.getOrderPrice())!=0) {
                        //原订单价格
                        OrderPriceChangeLog opcl = new OrderPriceChangeLog();
                        opcl.setOrderId(orderInfo.getOrderId());
                        opcl.setOrderPrice(oi.getOrderFee());
                        opcl.setIsDelete("N");
                        opcl.setAddTime(DateUtils.getCurrentDateString());
                        opcl.setAddUserId(oi.getEditUserId());
                        opcl.setFromSite("oracle");
                        orderService.save(opcl);
                    }
                }else {
                    //原订单价格
                    OrderPriceChangeLog opcl = new OrderPriceChangeLog();
                    opcl.setOrderId(orderInfo.getOrderId());
                    opcl.setOrderPrice(oi.getOrderFee());
                    opcl.setIsDelete("N");
                    opcl.setAddTime(DateUtils.getCurrentDateString());
                    opcl.setAddUserId(oi.getEditUserId());
                    opcl.setFromSite("oracle");
                    orderService.save(opcl);
                }
                //新订单价格
                OrderPriceChangeLog opclNew = new OrderPriceChangeLog();
                opclNew.setOrderId(orderInfo.getOrderId());
                opclNew.setOrderPrice(orderInfo.getOrderFee());
                opclNew.setIsDelete("N");
                opclNew.setAddTime(DateUtils.getCurrentDateString());
                opclNew.setAddUserId(orderInfo.getEditUserId());
                opclNew.setFromSite("oracle");
                orderService.save(opclNew);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            logger.error(e.getMessage());
            e.printStackTrace();
        }
    }
    
    /**
     * 批量审核订单
     * @param request
     * @return
     */
    @RequestMapping(value="/batchAudit",method=RequestMethod.POST)
    @ResponseBody
    public HashMap<String,Object> batchAuditOrder(HttpServletRequest request){
        HashMap<String,Object> rs = new HashMap<String, Object>();
        
        String orderIdsString = request.getParameter("orderIds");
        if(StringUtil.isEmpty(orderIdsString)){
            rs.put("code", 0);
             rs.put("msg", "orderIds is null");
            return rs;
        }
        
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        String currentTime = DateUtils.getCurrentDateString();
        
        Integer auditStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_state","audit"));
        if(null == auditStateId){
            rs.put("code", 0);
             rs.put("msg", "orderStateId is null");
            return rs;
        }
        Integer auditOutStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_out_state","audit"));
        if(null == auditOutStateId){
            rs.put("code", 0);
             rs.put("msg", "orderOutStateId is null");
            return rs;
        }
        
        String[] idStringArray = orderIdsString.split(",");
        List<OrderInfo> orderList = new ArrayList<OrderInfo>();
        StringBuffer sbb = new StringBuffer();
        for(int i=0;i<idStringArray.length;i++){
            Long orderId = Long.parseLong(idStringArray[i]);
            OrderInfo info = new OrderInfo();
            info.setOrderId(orderId);
            info.setOrderState(auditStateId);
            info.setOrderOutState(auditOutStateId);
            info.setAuditNotes(request.getParameter("auditNotes"));
            info.setAuditUserId(userId);
            info.setAuditTime(currentTime);
            info.setEditUserId(userId);
            info.setEditTime(currentTime);
            orderList.add(info);
            
//            //检查库存
//            List<HashMap<String, Object>> stockList = orderService.doCheckOrderStock(orderId);
//            StringBuffer sb = new StringBuffer();
//            for(HashMap<String, Object> st : stockList){
//                BigDecimal stock = (BigDecimal)st.get("availableStock");
//                if(stock.compareTo(BigDecimal.valueOf(0)) <= 0){
//                    sb.append((String)st.get("goodsNo")+"("+(String)st.get("goodsName")+")");
//                }
//            }
//            if(StringUtil.isNotEmpty(sb.toString())){
//                sbb.append(info.getOrderId()+"["+sb.toString()+"]");
//            }
            
        }
        if(StringUtil.isNotEmpty(sbb.toString())){
            rs.put("code", -2);
             rs.put("msg", sbb.toString());
            return rs;
        }
        
        return orderService.doBathAuditOrder(orderList);
    }
    
    /**
     * 更新订单
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping("/updateOrder")
    @ResponseBody
    public String setDeliveryFee(HttpServletRequest request,OrderInfo orderInfo){
        orderInfo.setEditTime(DateUtils.getCurrentDateString());
        orderInfo.setEditUserId((Integer)request.getAttribute("userId"));
        orderService.updateOrder(orderInfo);
        return "ok";
    }

    /**
     * 订单费用检查
     * @return
     */
    @RequestMapping(value="/{orderId}/checkFee")
    @ResponseBody
    public String checkOrderFee(@PathVariable Long orderId){
        return orderService.checkOrderFee(orderId);
    }
    
    /**
     * 添加发票抬头
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping("/updateOrderNotes")
    @ResponseBody
    public String updateOrderNotes(HttpServletRequest request,OrderInfo orderInfo){
        orderService.updateOrderNotes(orderInfo);
        return "ok";
    }

    
    /**
     * 锁定订单
     * @param request
     * @param orderId
     * @return
     */
    @RequestMapping(value="/{orderId}/lockOrder")
    @ResponseBody
    public String lockOrderNew(HttpServletRequest request,@PathVariable Long orderId){
        String currentTime = DateUtils.getCurrentDateString(); 
        OrderInfo oi = new OrderInfo();
        oi.setIsLock("Y");
        oi.setLockTime(currentTime);
        oi.setLockUserId((Integer)request.getSession().getAttribute("userId"));
        oi.setEditTime(currentTime);
        oi.setEditUserId((Integer)request.getSession().getAttribute("userId"));
        oi.setOrderId(orderId);
        orderService.lockOrder(oi);
        return "ok";
    }

    
    //调用eai方法获取订单取消返回结果
            public  OrderStatus getReturnStatus (long orderId,String count ){
//                  String smsUtilUrl = PropertyUtil.getPropertyValue("webservice.properties", "order.cancel.url");
                  String smsUtilUrl =(String)PropertyConfigurer.getContextProperty("order.cancel.url");
                   OrderStatus  orderStatus = null;
                 Map<String, Object> propsMap = new HashMap ();
                 propsMap.put("order_id",orderId);
                 propsMap.put("count",count);
                 try {
                    String returnstring = HttpSenderUtil.httpSend(smsUtilUrl, propsMap);
                    if (returnstring.isEmpty()){
                        orderStatus = new OrderStatus();
                        orderStatus.setOrder_status("98");
                        orderStatus.setOrder_remark("调用接口失败!");
                    }else {
                          orderStatus = new OrderStatus();
                          JSONArray returns = JSONArray.fromObject(returnstring);
                          JSONObject json=JSONObject.fromObject(returns.get(0));
                          orderStatus.setOrder_date((String) JSONObject.fromObject(json.get("orderStatus")).get("order_date"));
                          orderStatus.setOrder_id((String) JSONObject.fromObject(json.get("orderStatus")).get("order_id"));
                          orderStatus.setOrder_remark( (String) JSONObject.fromObject(json.get("orderStatus")).get("order_remark"));
                          orderStatus.setOrder_status((String) JSONObject.fromObject(json.get("orderStatus")).get("order_status")); 
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return orderStatus ;
            }

}
package com.founder.ec.order.service.impl;

import java.io.IOException;
import java.math.BigDecimal;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import jxl.Cell;
import jxl.Sheet;
import net.sf.json.JSONObject;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.founder.ec.admin.model.EcArea;
import com.founder.ec.admin.model.EcParams;
import com.founder.ec.base.service.impl.BaseServiceImpl;
import com.founder.ec.cms.model.Channel;
import com.founder.ec.common.aop.CacheRemove;
import com.founder.ec.common.aop.Cached;
import com.founder.ec.common.dao.CommonDao;
import com.founder.ec.common.jms.service.JmsService;
import com.founder.ec.common.model.SysCode;
import com.founder.ec.common.page.JspPage;
import com.founder.ec.common.service.CommonLogisticsService;
import com.founder.ec.common.service.CommonService;
import com.founder.ec.common.service.MemberCommonService;
import com.founder.ec.common.service.ParamsService;
import com.founder.ec.common.service.SystemService;
import com.founder.ec.common.type.NChangeType;
import com.founder.ec.common.type.NCouponState;
import com.founder.ec.common.type.NGoodsType;
import com.founder.ec.common.type.NOrderLogType;
import com.founder.ec.common.type.NOrderStateType;
import com.founder.ec.common.utils.DateUtils;
import com.founder.ec.common.utils.StringUtil;
import com.founder.ec.member.model.Member;
import com.founder.ec.member.model.MemberAddress;
import com.founder.ec.member.model.MemberPointsHis;
import com.founder.ec.omc.model.CpsOrder;
import com.founder.ec.order.model.AccountLog;
import com.founder.ec.order.model.EcMultiChannel;
import com.founder.ec.order.model.EcPaymentType;
import com.founder.ec.order.model.LogisticFeeRule;
import com.founder.ec.order.model.OrderAssignRule;
import com.founder.ec.order.model.OrderAssignRuleArea;
import com.founder.ec.order.model.OrderAssignRuleRank;
import com.founder.ec.order.model.OrderChannelRelInfo;
import com.founder.ec.order.model.OrderDelivery;
import com.founder.ec.order.model.OrderDetail;
import com.founder.ec.order.model.OrderInfo;
import com.founder.ec.order.model.OrderInfoForCalculate;
import com.founder.ec.order.model.OrderItem;
import com.founder.ec.order.model.OrderLog;
import com.founder.ec.order.model.OrderPaymentInfo;
import com.founder.ec.order.model.OrderPaymentTypeList;
import com.founder.ec.order.model.OrderPhoneCheck;
import com.founder.ec.order.model.OrderPhoneLoadExcel;
import com.founder.ec.order.model.OrderPriceChangeLog;
import com.founder.ec.order.model.OrderRepair;
import com.founder.ec.order.model.OrderReturn;
import com.founder.ec.order.model.OrderReturnItem;
import com.founder.ec.order.model.Order_Cw;
import com.founder.ec.order.model.Order_Cw_Cfy;
import com.founder.ec.order.model.Order_Cw_Check;
import com.founder.ec.order.model.Order_Cw_Erp;
import com.founder.ec.order.model.Order_Cw_Qt;
import com.founder.ec.order.model.Order_Erp_Diff_J1;
import com.founder.ec.order.model.Order_Financial_Query;
import com.founder.ec.order.model.Stock;
import com.founder.ec.order.model.enums.NotBuyReasonEnum;
import com.founder.ec.order.service.GoodsQueryService;
import com.founder.ec.order.service.OrderReturnServices;
import com.founder.ec.order.service.OrderService;
import com.founder.ec.product.model.EcTcMessage;
import com.founder.ec.product.model.Goods;
import com.founder.ec.product.model.ProductAttributeYunWei;
import com.founder.ec.promote.model.EcCouponType;
import com.founder.ec.promote.model.EcCoupons;
import com.founder.ec.utils.PropertyConfigurer;

//import com.j1.base.order.enums.coupons.EnumEcCouponUseType;

@Service
public class OrderServiceImpl extends BaseServiceImpl implements OrderService {

    @Autowired
    private CommonDao commonDao;

    @Autowired
    private SystemService systemService;

    @Autowired
    private JmsService jmsService;

    @Autowired
    private ParamsService paramsService;
    @Autowired
    private OrderReturnServices orderReturnServices;
    @Autowired
    private CommonService commonService;

    @Autowired
    private MemberCommonService memberCommonService;

    @Autowired
    private CommonLogisticsService commonLogisticsService;

    @Autowired
    private GoodsQueryService goodsQueryService;

    private HashMap<String, EcArea> areaMap = new HashMap<String, EcArea>();

    private HashMap<String, Goods> goodsMap = new HashMap<String, Goods>();

    private List<OrderInfo> orderList = new ArrayList<OrderInfo>();
    private List<OrderPhoneLoadExcel> orderPhoneList = new ArrayList<OrderPhoneLoadExcel>();
    private List<Order_Cw> order_cwList = new ArrayList<Order_Cw>();
    private List<Order_Cw_Cfy> order_cwcfyList = new ArrayList<Order_Cw_Cfy>();
    private List<Order_Cw_Erp> order_cwerpList = new ArrayList<Order_Cw_Erp>();
    private List<Order_Cw_Qt> order_cwqtList = new ArrayList<Order_Cw_Qt>();
    private List<OrderItem> orderItemList = new ArrayList<OrderItem>();

    private List<OrderDetail> orderDetailList = new ArrayList<OrderDetail>();

    public boolean checkOrderInfo(Long orderId) {
        OrderInfo order = (OrderInfo) commonDao.queryForObject(
                "OrderInfo.getBasic", orderId);
        return null != order;
    }

    public Map<String, Object> getAuditOrders(OrderInfo param, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.getAuditOrdersCount", "OrderInfo.getAuditOrders",
                param, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    public Map<String, Object> getDealOrders(OrderInfo param, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.getDealOrdersCount", "OrderInfo.getDealOrders",
                param, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    public Map<String, Object> getQueryOrders(OrderInfo param, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.getQueryOrdersCount", "OrderInfo.getQueryOrders",
                param, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    public Map<String, Object> getNewQueryOrders(OrderInfo param, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.getNewQueryOrdersCount",
                "OrderInfo.getNewQueryOrders", param, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public Map<String, Object> getNewTcQueryOrders(OrderInfo param, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao
                .pageQuery("OrderInfo.getNewTcQueryOrdersCount",
                        "OrderInfo.getNewTcQueryOrders", param, pageNo,
                        pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    // @Cached(name = "ecPaymentType")
    public List<HashMap<String, Object>> getSimplePaymentType(
            EcPaymentType paymentType) {
        return commonDao.queryForList("EcPaymentType.getSimpleType",
                paymentType);
    }

    @Override
    public List<HashMap<String, Object>> getAccountLogPayType(
            EcPaymentType paymentType) {
        return commonDao.queryForList("EcPaymentType.getAccountLogPayType",
                paymentType);
    }

    public List<HashMap<String, Object>> getSimpleMultiChannel(
            EcMultiChannel channel) {
        return commonDao.queryForList("EcMultiChannel.getSimpleChannel",
                channel);
    }

    public OrderInfo getOrderDetailInfo(Long orderId, String type) {
        if ("query".equals(type)) {
            return (OrderInfo) commonDao.queryForObject(
                    "OrderInfo.getDetailForQueryById", orderId);
        } else if ("audit".equals(type)) {
            return (OrderInfo) commonDao.queryForObject(
                    "OrderInfo.getDetailForAuditById", orderId);
        } else {
            return new OrderInfo();
        }
    }

    public OrderInfo getOrderDetailInfos(OrderInfo order, String type) {
        if ("query".equals(type)) {
            return (OrderInfo) commonDao.queryForObject(
                    "OrderInfo.getDetailForQueryByIds", order);
        } else if ("audit".equals(type)) {
            return (OrderInfo) commonDao.queryForObject(
                    "OrderInfo.getDetailForAuditByIds", order);
        } else {
            return new OrderInfo();
        }
    }

    public Map<String, Object> getOrderDetail(Long orderId) {
        Map<String, Object> resMap = new HashMap<String, Object>();
        List<OrderDetail> detailList = commonDao.queryForList(
                "OrderDetail.getDetailByOrderId", orderId);
        resMap.put("rows", detailList);
        return resMap;
    }

    public HashMap<String, Object> getOrderPaymentInfo(Long orderId) {
        return (HashMap<String, Object>) commonDao.queryForObject(
                "OrderInfo.getPaymentInfoById", orderId);
    }

    public Map<String, Object> getOrderItems(Long orderId) {
        List<OrderItem> itemList = commonDao.queryForList(
                "OrderItem.getItemsByOrderId", orderId);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("rows", itemList);
        return resMap;
    }

    public Map<String, Object> getOrderItemsTwo(OrderReturn orderReturn) {
        List<OrderItem> itemList = new ArrayList<OrderItem>();
        if ((orderReturn.getOrderId() != null
                && !"".equals(orderReturn.getOrderId()) || !StringUtil
                    .isEmpty(orderReturn.getErpOrderId()))) {
            itemList = commonDao.queryForList(
                    "OrderItem.getItemsByOrderReturn", orderReturn);
        }
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("rows", itemList);
        return resMap;
    }

    public List<OrderReturn> getOrderIdMap(OrderReturn orderReturn) {
        List<OrderReturn> itemList = null;
        if (!StringUtil.isEmpty(orderReturn.getLoginname())
                || !StringUtil.isEmpty(orderReturn.getTelphone())
                || !StringUtil.isEmpty(orderReturn.getRecievename())) {
            itemList = commonDao.queryForList("OrderItem.getOrderIdMap",
                    orderReturn);
        }
        return itemList;
    }

    public HashMap<String, Object> doLockOrder(Long orderId,
            Integer currentUserId) {
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        List<HashMap<String, Object>> lockList = commonDao.queryForList(
                "OrderInfo.getLockUser", orderId);
        if (null != lockList && !lockList.isEmpty()) {
            HashMap<String, Object> lockInfo = lockList.get(0);
            String isLock = (String) lockInfo.get("isLock");
            if ("Y".equals(isLock)) {
                if (!String.valueOf(lockInfo.get("lockUserId")).equals(
                        String.valueOf(currentUserId))) {
                    rslt.put("code", -2);// 订单已由其他用户锁定
                    rslt.put("lockUserName", lockInfo.get("lockUserName"));
                    rslt.put("lockTime", lockInfo.get("lockTime"));
                } else {
                    rslt.put("code", 1);
                }
            } else {
                // 锁定订单
                // String currentTime = DateUtils.getCurrentDateString();
                // OrderInfo oi = new OrderInfo();
                // oi.setIsLock("Y");
                // oi.setLockTime(currentTime);
                // oi.setLockUserId(currentUserId);
                // oi.setEditTime(currentTime);
                // oi.setEditUserId(currentUserId);
                // oi.setOrderId(orderId);
                // commonDao.update(oi);
                rslt.put("code", 1);
            }

        } else {
            rslt.put("code", -1);// 订单不存在
        }
        return rslt;
    }

    public HashMap<String, Object> doCancelOrder(OrderInfo orderInfo) {
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        OrderInfo order = (OrderInfo) commonDao.queryForObject(
                "OrderInfo.getOrderById", orderInfo.getOrderId());
        if (null == order) {
            rslt.put("code", -1);// 订单不存在
        } else if ("Y".equals(order.getIsPaid())) {
            rslt.put("code", -2);// 订单已付款
        } else {
            commonDao.update(orderInfo);
            if (null != order.getOrderPoints() && order.getOrderPoints() > 0) {
                Member m = (Member) commonDao.queryForObject(
                        "member.getByPrimaryKey", order.getMemberId());
                if (null != m && "N".equals(m.getIsDelete())
                        && "normal".equals(m.getMemberState())) {
                    // 返还积分
                    Integer oldP = null == m.getCurrentPoints() ? 0 : m
                            .getCurrentPoints();
                    Integer mp = oldP + order.getOrderPoints();
                    Member um = new Member();
                    um.setMemberId(m.getMemberId());
                    um.setCurrentPoints(mp);
                    um.setEditTime(orderInfo.getEditTime());
                    um.setEditUserId(orderInfo.getEditUserId());
                    // 积分返还bug修复 订单取消退换,多退了一笔积分 #11089
                    // commonDao.update("member.update", um);

                    // 记录积分变化历史
                    MemberPointsHis ph = new MemberPointsHis();
                    ph.setMemberId(m.getMemberId());
                    ph.setChangeType(NChangeType.OrderCancelBack.getTypeInt()
                            .toString());// 订单取消
                    ph.setPoints(order.getOrderPoints());
                    ph.setPointsBefore(oldP);
                    ph.setPointsAfter(mp);
                    ph.setOrderId(order.getOrderId());
                    ph.setDealUserId(orderInfo.getEditUserId());
                    ph.setChangeTime(orderInfo.getEditTime());
                    ph.setAddTime(orderInfo.getEditTime());
                    ph.setAddUserId(orderInfo.getEditUserId());
                    // 积分返还bug修复 订单取消退换,多退了一笔积分 #11089
                    // commonDao.save(ph);
                }
            }
            if (null != order.getOrderVouchers()
                    && order.getOrderVouchers().doubleValue() > 0) {
                // 返回代金券
                EcCoupons cp = new EcCoupons();
                cp.setOrderId(orderInfo.getOrderId());
                cp.setCouponState(NCouponState.assign.toString());
                cp.setEditTime(orderInfo.getEditTime());
                cp.setEditUserId(orderInfo.getEditUserId());
                commonDao.update("ecCoupons.updateByOrder", cp);
            }

            // if(!NOrderStateType.commit.toString().equals(order.getCodeNo())){
            // 当订单状态不为"commit(提交)"时,需返商品,赠品库存
            HashMap<String, Object> param = new HashMap<String, Object>();
            param.put("orderId", orderInfo.getOrderId());
            commonDao.invokeProduce("OrderInfo.rollBackStock", param);
            // }

            try {
                // 记录日志
                jmsService.sendOrderStatusMsg(orderInfo.getOrderId(),
                        orderInfo.getOrderState(), orderInfo.getEditUserId());
            } catch (Exception e) {
                e.printStackTrace();
            }
            rslt.put("code", 1);
        }
        return rslt;
    }

    /**
     * 取消订单
     * 
     * @param orderInfo
     * @return
     */
    public HashMap<String, Object> cancelOrder(OrderInfo orderInfo) {
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        OrderInfo order = (OrderInfo) commonDao.queryForObject(
                "OrderInfo.getOrderById", orderInfo.getOrderId());
        if (null == order) {
            rslt.put("code", -1);// 订单不存在
        } else {
            commonDao.update(orderInfo);
            HashMap<String, Object> param = new HashMap<String, Object>();
            param.put("orderId", orderInfo.getOrderId());
            commonDao.invokeProduce("OrderInfo.rollBackStock", param);// 返还库存
            try {
                // 记录日志
                jmsService.sendOrderStatusMsg(orderInfo.getOrderId(),
                        orderInfo.getOrderState(), orderInfo.getEditUserId(),
                        orderInfo.getRefundOrderNotes(),
                        orderInfo.getOrderPoints());
            } catch (Exception e) {
                e.printStackTrace();
            }
            rslt.put("code", 1);
        }
        return rslt;
    }

    public HashMap<String, Object> cancelOrderForHDFK(OrderInfo orderInfo) {
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        OrderInfo order = (OrderInfo) commonDao.queryForObject(
                "OrderInfo.getOrderById", orderInfo.getOrderId());
        if (null == order) {
            rslt.put("code", -1);// 订单不存在
        } else {
            commonDao.update(orderInfo);
            HashMap<String, Object> param = new HashMap<String, Object>();
            param.put("orderId", orderInfo.getOrderId());
            commonDao.invokeProduce("OrderInfo.rollBackStock", param);// 返还库存
            try {
                // 记录日志
                jmsService.sendOrderStatusMsg(orderInfo.getOrderId(),
                        orderInfo.getOrderState(), orderInfo.getEditUserId());
            } catch (Exception e) {
                e.printStackTrace();
            }
            rslt.put("code", 1);
        }
        return rslt;
    }

    public void updateOrder(OrderInfo orderInfo) {
        // 修改订单前将订单原信息记录到日志表
        commonDao.save("OrderLog.insertOrderInfoLog", orderInfo);

        commonDao.update(orderInfo);
        // 更新库存
        HashMap<String, Object> param = new HashMap<String, Object>();
        param.put("orderId", orderInfo.getOrderId());
        commonDao.invokeProduce("OrderInfo.updateStock", param);
    }

    public HashMap<String, Object> doSetOfflinePayment(OrderInfo orderInfo) {
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        OrderInfo order = (OrderInfo) commonDao.queryForObject(
                "OrderInfo.getOrderById", orderInfo.getOrderId());
        if (null == order) {
            rslt.put("code", -1);// 订单不存在
        } else {
            BigDecimal oldPaidFee = order.getPaidFee();
            if (null != oldPaidFee) {
                orderInfo.setPaidFee(oldPaidFee.add(orderInfo.getPaidFee()));
            }
            if (StringUtil.isNotEmpty(order.getPaymentNo())) {
                orderInfo.setPaymentNo(order.getPaymentNo() + ","
                        + orderInfo.getPaymentNo());
            }
            if (orderInfo.getPaidFee().compareTo(orderInfo.getOrderPayFee()) >= 0) {
                orderInfo.setIsPaid("Y");
            } else {
                orderInfo.setIsPaid("P");
            }
            commonDao.update(orderInfo);
            rslt.put("code", 1);
        }
        return rslt;
    }

    public HashMap<String, Object> doSetOfflinePaymentNew(OrderInfo orderInfo) {
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        OrderInfo order = (OrderInfo) commonDao.queryForObject(
                "OrderInfo.getOrderById", orderInfo.getOrderId());
        if (null == order) {
            rslt.put("code", -1);// 订单不存在
        } else {
            if (StringUtil.isNotEmpty(order.getPaymentNo())) {
                orderInfo.setPaymentNo(order.getPaymentNo() + ","
                        + orderInfo.getPaymentNo());
            }
            BigDecimal oldPaidFee = order.getPaidFee(); // 已经支付的金额
            BigDecimal oldOrderPayFee = order.getOrderPayFee(); // 待支付的金额
            if (null != oldOrderPayFee) {
                orderInfo.setOrderPayFee(oldOrderPayFee.subtract(orderInfo
                        .getPaidFee())); // 待支付金额减去一次要支付的金额
            }
            if (null != oldPaidFee) {
                orderInfo.setPaidFee(oldPaidFee.add(orderInfo.getPaidFee())); // 查询出已经支付的金额加上本次要支付的金额,总支付金额
            }
            // 如果待支付金额大于零,证明未完全支付,否则完全支付
            if (orderInfo.getOrderPayFee().doubleValue() > 0) {
                orderInfo.setIsPaid("P");
            } else {
                orderInfo.setIsPaid("Y");
            }
            commonDao.update(orderInfo);
            rslt.put("code", 1);
        }
        return rslt;
    }

    public void doRefreshItemGoodsPrice(HashMap<String, Object> param) {
        commonDao.update("OrderItem.refreshPrice", param);
    }

    public HashMap<String, Object> updateOrderInfoRelation(OrderInfo info,
            List<OrderItem> items, String updateType) {
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        OrderInfo order = (OrderInfo) commonDao.queryForObject(
                "OrderInfo.getOrderById", info.getOrderId());
        if (null == order) {
            rslt.put("code", -1);// 订单不存在
        } else if ("audit".equals(updateType)
                && NOrderStateType.audit.toString().equals(order.getCodeNo())) {
            // 审核时防止重复审核
            rslt.put("code", -3);// 订单已审核
        } else {
            for (OrderItem item : items) {
                item.setOrderId(info.getOrderId());
                if (null == item.getOrderItemId()) {
                    // #13911 缺失字段获取:GOODS_UNIT,GOODS_COST_PRICE,STOCK_ID
                    Goods goods = goodsQueryService
                            .getGoodsInfoByIdForShopcartSku(item.getGoodsId());
                    if (goods != null) {
                        item.setGoodsCostPrice(goods.getCostPrice());
                        item.setStockId(goods.getStockId());
                        item.setGoodsUnit(goods.getUnitName());
                    }
                    item.setAddUserId(info.getEditUserId());
                    item.setAddTime(info.getEditTime());
                    commonDao.save(item);
                    OrderDetail detail = new OrderDetail();
                    detail.setOrderId(info.getOrderId());
                    detail.setGoodsId(item.getGoodsId());
                    detail.setGoodsAmount(item.getGoodsAmount());
                    detail.setUnsendAmount(item.getGoodsAmount());
                    detail.setSentAmount(new BigDecimal(0));
                    detail.setAddTime(info.getEditTime());
                    detail.setAddUserId(info.getEditUserId());
                    detail.setExecutePrice(item.getGoodsPrice());
                    if (NGoodsType.gift.toString().equals(item.getGoodsType())) {
                        detail.setIsGift("Y");
                    }
                    commonDao.save(detail);
                } else {
                    item.setEditTime(info.getEditTime());
                    item.setEditUserId(info.getEditUserId());
                    commonDao.update(item);
                    OrderDetail param = new OrderDetail();
                    param.setOrderId(info.getOrderId());
                    param.setGoodsId(item.getGoodsId());
                    List<OrderDetail> detailList = commonDao.queryForList(
                            "OrderDetail.getDetials", param);
                    if (null != detailList && !detailList.isEmpty()) {
                        OrderDetail detail = detailList.get(0);
                        if ("Y".equals(item.getIsDelete())) {
                            detail.setIsDelete("Y");
                        } else {
                            detail.setGoodsAmount(item.getGoodsAmount());
                            detail.setUnsendAmount(item.getGoodsAmount());
                            detail.setExecutePrice(item.getGoodsPrice());
                        }
                        detail.setEditTime(info.getEditTime());
                        detail.setEditUserId(info.getEditUserId());
                        commonDao.update(detail);
                    }

                }
            }

            String newAddress = null == info.getReceiveFullAddress() ? "": info.getReceiveFullAddress();
            String oldAddress = null == order.getReceiveFullAddress() ? "": order.getReceiveFullAddress();

            if (!items.isEmpty() || !newAddress.equals(oldAddress)) {
                // 重新计算订单价格

                HashMap<String, Object> statistics = (HashMap<String, Object>) commonDao.queryForObject("OrderItem.getStatisticsByOrderId",info.getOrderId());
                order.setAllUsedPromoteRuleIds((String) statistics.get("promoteRuleIds") + ",");
                order.setSkuFee((BigDecimal) statistics.get("skuFee"));
                order.setSkuAmount((BigDecimal) statistics.get("skuAmount"));

                OrderInfoForCalculate oc = new OrderInfoForCalculate();
                oc.setIsEdit("Y");
                oc.setReturnCouponIds((String) statistics.get("returnVouchers")+ ",");
                oc.setReturnCouponAmount((String) statistics.get("vouchersAmount") + ",");
                oc.setOrderGoodsIds((String) statistics.get("orderGoodsIds"));

                // 计算一共返回的积分
                EcParams par = paramsService.getParamsDetail();
                BigDecimal rp = new BigDecimal(par.getGoodsPoints())
                        .multiply((BigDecimal) statistics.get("skuOldFee"));
                BigDecimal prp = (BigDecimal) statistics
                        .get("promoteReturnPoints");
                oc.setReturnPoints(prp.add(rp));

                // 获取使用的优惠券号
                EcCoupons ecCouponsParam = new EcCoupons();
                ecCouponsParam.setOrderId(info.getOrderId());
                ecCouponsParam.setCouponState(NCouponState.used.toString());
                List<EcCoupons> ecCouponsList = commonDao.queryForList("ecCoupons.getCoupondsListByCodition", ecCouponsParam);
                if (null != ecCouponsList && !ecCouponsList.isEmpty()) {
                    EcCoupons c = ecCouponsList.get(0);
                    oc.setCouponNo(c.getCouponNo());
                }

                order.setProvinceId(info.getProvinceId());
                order.setCityId(info.getCityId());
                order.setAreaId(info.getAreaId());
                order.setGoodsSeller(info.getGoodsSeller());
                order.setLogisticCompanyId(null);

                OrderInfo rtOrder = commonService.calculateOrder(order, oc);
                if (null != rtOrder) {
                    info.setSkuFee(rtOrder.getSkuFee());
                    info.setDiscountFee(rtOrder.getDiscountFee());
                    info.setDeliveryFee(rtOrder.getDeliveryFee());
                    info.setOtherDiscounts(rtOrder.getOtherDiscounts());
                    info.setOtherDiscounts(rtOrder.getOtherDiscounts());
                    info.setOrderPoints(rtOrder.getOrderPoints());
                    info.setOrderVouchers(rtOrder.getOrderVouchers());
                    info.setOrderFee(rtOrder.getOrderFee());
                    info.setOrderPayFee(rtOrder.getOrderPayFee());
                    // info.setLogisticCompanyId(rtOrder.getLogisticCompanyId());
                    rslt.put("rtInfo", info);
                }
            }
            // 取得运费规则(如果是嘉兴、华润堂订单不重新计算物流公司)
            // 默认为健一网订单
            int goodsSeller = 1;
            if (null != info.getGoodsSeller()) {
                goodsSeller = Integer.parseInt(info.getGoodsSeller());
            }
            if (32 != info.getMultiChannelId() && 2 != goodsSeller) {
                LogisticFeeRule fitRule = commonLogisticsService
                        .getFitRule(info);
                info.setLogisticCompanyId(fitRule.getLogisticCompanyId());
            }

            // 审核通过前将订单信息记录到日志表
            commonDao.save("OrderLog.insertOrderInfoLog", info);
            commonDao.update(info);

            if ("audit".equals(updateType)) {
                // 更新库存
                HashMap<String, Object> param = new HashMap<String, Object>();
                param.put("orderId", info.getOrderId());
                commonDao.invokeProduce("OrderInfo.updateStock", param);
            }
            // 保存订单,调用存储过程重新计算--wangjun
            // if ("save".equals(updateType)) {
            // HashMap<String, Object> param = new HashMap<String, Object>();
            // param.put("orderId", info.getOrderId());
            // commonDao
            // .invokeProduce("OrderInfo.saveGoodDiscountFree", param);
            // commonDao.invokeProduce("OrderInfo.saveGoodGroupDiscountFree",
            // param);
            // commonDao.invokeProduce("OrderInfo.proOrderReport", param);
            // }

            try {
                if (null != info.getOrderState()) {
                    // 记录日志
                    jmsService.sendOrderStatusMsg(info.getOrderId(),
                            info.getOrderState(), info.getEditUserId());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            rslt.put("code", 1);

            // add by zp 计算优惠 pro_auto_audit_kdfh_order

        }
        return rslt;
    }

    public List<OrderLog> getOrderLogs(OrderLog orderLog) {
        return commonDao.queryForList("OrderLog.getLogs", orderLog);
    }

    public Map<String, Object> getOrderSimpleDelivery(Long orderId) {
        Map<String, Object> resMap = new HashMap<String, Object>();
        List<OrderDetail> detailList = commonDao.queryForList(
                "OrderDelivery.getSimpleDeliveryByOrderId", orderId);
        resMap.put("rows", detailList);
        return resMap;
    }

    public Map<String, Object> getPaymentInfoList(OrderPaymentInfo para,
            int pageNo, int pageSize) {
        Map<String, Object> resMap = new HashMap<String, Object>();
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.getCountOrderPaymentInfo",
                "OrderInfo.getQueryOrderPaymentInfo", para, pageNo, pageSize,
                false);
        resMap.put("rows", page.getResult());
        resMap.put("total", page.getTotalCount());
        return resMap;
    }

    public Map<String, Object> getDeliveryList(OrderDelivery orderDelivery,
            int pageNo, int pageSize) {
        Map<String, Object> resMap = new HashMap<String, Object>();
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderDelivery.getDeliveryCount",
                "OrderDelivery.getDeliveryQuery", orderDelivery, pageNo,
                pageSize, false);
        resMap.put("rows", page.getResult());
        resMap.put("total", page.getTotalCount());
        return resMap;
    }

    public Map<String, Object> getDeliveryLists(OrderDelivery orderDelivery,
            int pageNo, int pageSize) {
        Map<String, Object> resMap = new HashMap<String, Object>();
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderDelivery.getDeliveryCounts",
                "OrderDelivery.getDeliveryQuerys", orderDelivery, pageNo,
                pageSize, false);
        resMap.put("rows", page.getResult());
        resMap.put("total", page.getTotalCount());
        return resMap;
    }

    @Override
    public Map<String, Object> queryOrderLogPage(OrderLog orderLog, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery("OrderLog.getLogCount",
                "OrderLog.getLogList", orderLog, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();

        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    /**
     * 获取手机支付订单 用于对账
     */
    @Override
    public Map<String, Object> queryOrderPhoneCheck(OrderPhoneCheck opc,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderPhoneCheck.getOrderPhoneCount",
                "OrderPhoneCheck.getOrderPhoneList", opc, pageNo, pageSize,
                false);

        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public void saveMember(Member member) {
        memberCommonService.saveMember(member);
    }

    @Override
    public Integer checkLoginName(String loginName) {
        return (Integer) commonDao.queryForObject("member.checkLoginName",
                loginName);
    }

    public List<Stock> getStockSelect() {
        return commonDao.queryForList("stock.querySelect");
    }

    public List<Stock> getStockSelectAddress(Stock stock) {
        return commonDao.queryForList("stock.getByPrimaryAddress", stock);
    }

    /**
     * 订单分配规则列表
     */
    @Cached(name = "orderAssignRule")
    public Map<String, Object> queryOrderAssignRulePage(
            OrderAssignRule orderAssignRule, int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "orderAssignRule.getOrderAssignRuleCount",
                "orderAssignRule.getOrderAssignRuleList", orderAssignRule,
                pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    /**
     * 新增订单分配规则
     */
    @CacheRemove(name = "orderAssignRule-orderAssignRuleRank-orderAssignRuleArea")
    public void saveOrderAssignRule(OrderAssignRule orderAssignRule) {
        commonDao.save("orderAssignRule.saveOrderAssignRule", orderAssignRule);
        if (orderAssignRule.getAssignType().equals("RANK")) {
            OrderAssignRuleRank orderAssignRuleRank = new OrderAssignRuleRank();
            orderAssignRuleRank.setOrderAssignRuleId(orderAssignRule
                    .getOrderAssignRuleId());
            orderAssignRuleRank.setAddTime(orderAssignRule.getAddTime());
            orderAssignRuleRank.setAddUserId(orderAssignRule.getAddUserId());
            String[] memberRankIds = orderAssignRule.getMemberRankIds().split(
                    ",");
            for (int i = 0; i < memberRankIds.length; i++) {
                orderAssignRuleRank.setMemberRankId(Integer
                        .parseInt(memberRankIds[i]));
                commonDao.save("orderAssignRuleRank.save", orderAssignRuleRank);
            }
        }
        if (orderAssignRule.getAssignType().equals("AREA")) {
            OrderAssignRuleArea orderAssignRuleArea = new OrderAssignRuleArea();
            orderAssignRuleArea.setOrderAssignRuleId(orderAssignRule
                    .getOrderAssignRuleId());
            orderAssignRuleArea.setOrdreAssignRuleId(orderAssignRule
                    .getOrderAssignRuleId());
            orderAssignRuleArea.setAddTime(orderAssignRule.getAddTime());
            orderAssignRuleArea.setAddUserId(orderAssignRule.getAddUserId());
            String[] provinceIds = orderAssignRule.getProvinceIds().split(",");
            String[] cityIds = orderAssignRule.getCityIds().split(",");
            String[] areaIds = orderAssignRule.getAreaIds().split(",");

            for (int j = 0; j < areaIds.length; j++) {
                orderAssignRuleArea.setProvinceId(Integer
                        .parseInt(provinceIds[j]));
                orderAssignRuleArea.setCityId(Integer.parseInt(cityIds[j]));
                orderAssignRuleArea.setAreaId(Integer.parseInt(areaIds[j]));
                commonDao.save("orderAssignRuleArea.save", orderAssignRuleArea);
            }
        }

    }

    /**
     * 编辑订单分配规则
     */
    @CacheRemove(name = "orderAssignRule-orderAssignRuleRank-orderAssignRuleArea")
    public void updateOrderAssignRule(OrderAssignRule orderAssignRule) {
        commonDao.update("orderAssignRule.updateOrderAssignRule",
                orderAssignRule);

        OrderAssignRuleRank orderAssignRuleRank = new OrderAssignRuleRank();
        orderAssignRuleRank.setOrderAssignRuleId(orderAssignRule
                .getOrderAssignRuleId());
        orderAssignRuleRank.setIsDelete("Y");
        orderAssignRuleRank.setEditTime(orderAssignRule.getEditTime());
        orderAssignRuleRank.setEditUserId(orderAssignRule.getEditUserId());
        commonDao.update("orderAssignRuleRank.updateForDelete",
                orderAssignRuleRank);

        if (orderAssignRule.getAssignType().equals("RANK")) {

            // List<OrderAssignRuleRank> orderAssignRuleRankList = new
            // ArrayList<OrderAssignRuleRank>();
            OrderAssignRuleRank orderAssignRuleRankTwo = new OrderAssignRuleRank();
            orderAssignRuleRankTwo.setOrderAssignRuleId(orderAssignRule
                    .getOrderAssignRuleId());
            orderAssignRuleRankTwo.setAddTime(orderAssignRule.getEditTime());
            orderAssignRuleRankTwo
                    .setAddUserId(orderAssignRule.getEditUserId());
            String[] memberRankIds = orderAssignRule.getMemberRankIds().split(
                    ",");
            for (int i = 0; i < memberRankIds.length; i++) {
                orderAssignRuleRankTwo.setMemberRankId(Integer
                        .parseInt(memberRankIds[i]));
                // orderAssignRuleRankList.add(orderAssignRuleRankTwo);
                commonDao.save("orderAssignRuleRank.save",
                        orderAssignRuleRankTwo);
            }
            // commonDao.batchInsert("orderAssignRuleRank.save",
            // orderAssignRuleRankList);
        }
        OrderAssignRuleArea orderAssignRuleArea = new OrderAssignRuleArea();
        orderAssignRuleArea.setOrderAssignRuleId(orderAssignRule
                .getOrderAssignRuleId());
        orderAssignRuleArea.setIsDelete("Y");
        orderAssignRuleArea.setEditTime(orderAssignRule.getEditTime());
        orderAssignRuleArea.setEditUserId(orderAssignRule.getEditUserId());
        commonDao.update("orderAssignRuleArea.updateForDelete",
                orderAssignRuleArea);
        if (orderAssignRule.getAssignType().equals("AREA")) {

            // List<OrderAssignRuleArea> orderAssignRuleAreaList = new
            // ArrayList<OrderAssignRuleArea>();
            OrderAssignRuleArea orderAssignRuleAreaTwo = new OrderAssignRuleArea();
            orderAssignRuleAreaTwo.setOrderAssignRuleId(orderAssignRule
                    .getOrderAssignRuleId());
            orderAssignRuleAreaTwo.setOrdreAssignRuleId(orderAssignRule
                    .getOrderAssignRuleId());
            orderAssignRuleAreaTwo.setAddTime(orderAssignRule.getEditTime());
            orderAssignRuleAreaTwo
                    .setAddUserId(orderAssignRule.getEditUserId());
            String[] provinceIds = orderAssignRule.getProvinceIds().split(",");
            String[] cityIds = orderAssignRule.getCityIds().split(",");
            String[] areaIds = orderAssignRule.getAreaIds().split(",");
            for (int j = 0; j < areaIds.length; j++) {
                orderAssignRuleAreaTwo.setProvinceId(Integer
                        .parseInt(provinceIds[j]));
                orderAssignRuleAreaTwo.setCityId(Integer.parseInt(cityIds[j]));
                orderAssignRuleAreaTwo.setAreaId(Integer.parseInt(areaIds[j]));
                // orderAssignRuleAreaList.add(orderAssignRuleAreaTwo);
                commonDao.save("orderAssignRuleArea.save",
                        orderAssignRuleAreaTwo);
            }
            // commonDao.batchInsert("orderAssignRuleArea.save",
            // orderAssignRuleAreaList);
        }

    }

    @CacheRemove(name = "orderAssignRule")
    public void updateRuleState(OrderAssignRule orderAssignRule) {
        commonDao.update("orderAssignRule.updateOrderAssignRule",
                orderAssignRule);

    }

    public Map<String, Object> queryMemberAddress(MemberAddress memberAddress,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "memberAddress.queryListCounts", "memberAddress.queryList",
                memberAddress, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    public Map<String, Object> queryMemberAddressNew(
            MemberAddress memberAddress, int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "memberAddress.queryListCountsNew",
                "memberAddress.queryListNew", memberAddress, pageNo, pageSize,
                false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    public void saveMemberAddress(MemberAddress memberAddress) {
        memberAddress.setIsDefault("N");
        memberAddress.setIsDelete("N");
        String fullAddress = "";
        String provinceId = memberAddress.getProvinceId();
        String cityId = memberAddress.getCityId();
        String areaId = memberAddress.getAreaId();
        String address = memberAddress.getAddress();
        if (null != provinceId && !"".equals(provinceId)) {
            String provinceName = (String) commonDao.queryForObject(
                    "EcArea.getNameById", Long.valueOf(provinceId));
            fullAddress = fullAddress + provinceName;
        }
        if (null != cityId && !"".equals(cityId)) {
            String cityName = (String) commonDao.queryForObject(
                    "EcArea.getNameById", Long.valueOf(cityId));
            fullAddress = fullAddress + cityName;
        }
        if (null != areaId && !"".equals(areaId)) {
            String areaName = (String) commonDao.queryForObject(
                    "EcArea.getNameById", Long.valueOf(areaId));
            fullAddress = fullAddress + areaName;
        }
        fullAddress = fullAddress + address;
        memberAddress.setFullAddress(fullAddress);
        commonDao.save("memberAddress.insertMemberAddress", memberAddress);
    }

    public List<Object> genMulChannelComb() {
        List<Object> comboxList = new ArrayList<Object>();

        // 定义下拉框中的默认值
        Map<String, Object> defaultValue = new HashMap<String, Object>();
        defaultValue.put("id", "");
        defaultValue.put("text", "请选择");
        defaultValue.put("selected", true);
        comboxList.add(defaultValue);

        // 查询多渠道列表
        EcMultiChannel channel = new EcMultiChannel();
        channel.setIsDelete("N");
        channel.setIsEnable("Y");
        channel.setChannelType("native");
        channel.setEcMcpId(1l);
        List<HashMap<String, Object>> infoList = this
                .findSimpleChannel(channel);

        // 拼成combox
        for (HashMap<String, Object> map : infoList) {
            Map<String, Object> typeMap = new HashMap<String, Object>();
            typeMap.put("id", map.get("multiChannelId"));
            typeMap.put("text", map.get("channelName"));
            comboxList.add(typeMap);
        }
        return comboxList;
    }

    public List<Object> genPaymentTypeComb() {
        List<Object> comboxList = new ArrayList<Object>();

        // 定义下拉框中的默认值
        Map<String, Object> defaultValue = new HashMap<String, Object>();
        defaultValue.put("id", "");
        defaultValue.put("text", "请选择");
        defaultValue.put("selected", true);
        comboxList.add(defaultValue);

        // 查询支付方式列表
        EcPaymentType paymentType = new EcPaymentType();
        paymentType.setIsDelete("N");
        paymentType.setIsEnable("Y");
        List<HashMap<String, Object>> infoList = this
                .getSimplePaymentType(paymentType);

        // 拼成combox
        for (HashMap<String, Object> map : infoList) {
            Map<String, Object> typeMap = new HashMap<String, Object>();
            typeMap.put("id", map.get("paymentTypeId"));
            typeMap.put("text", map.get("paymentTypeName"));
            comboxList.add(typeMap);
        }
        return comboxList;
    }

    public Long saveOrderInfo(OrderInfo orderInfo) {
        Long orderId = (Long) commonDao.queryForObject("OrderInfo.getOrderId");
        orderInfo.setOrderId(orderId);
        commonDao.save("OrderInfo.save", orderInfo);
        return orderInfo.getOrderId();
    }

    public Long doCreateOrder(OrderInfo info, List<OrderItem> items) {
        Long memberId = info.getMemberId();
        Integer orderPoints = info.getOrderPoints();
        Integer userId = info.getAddUserId();
        String time = info.getAddTime();

        // 查找订单状态id
        Integer auditStateId = systemService
                .getCodeIdByTypeNoAndCodeNo(new SysCode("order_state", "commit"));
        Integer auditOutStateId = systemService
                .getCodeIdByTypeNoAndCodeNo(new SysCode("order_out_state",
                        "commit"));

        // 保存到订单主表
        info.setOrderState(auditStateId);
        info.setOrderOutState(auditStateId);// 都取订单状态,它们是包含关系

        // 处方药判断
        String goodsNos = "";
        for (OrderItem item : items) {
            goodsNos += ",'" + item.getGoodsNo() + "'";
        }
        info.setIsTc(isIncludeTc(goodsNos.substring(1)));
        Long orderId = this.saveOrderInfo(info);
        info.setOrderId(orderId);

        for (OrderItem item : items) {

            // 保存到订单明细表
            item.setOrderId(info.getOrderId());
            item.setAddUserId(info.getEditUserId());
            item.setAddTime(info.getEditTime());
            commonDao.save(item);

            // 保存到订单详情表
            OrderDetail detail = new OrderDetail();
            detail.setOrderId(info.getOrderId());
            detail.setGoodsId(item.getGoodsId());
            detail.setGoodsAmount(item.getGoodsAmount());
            detail.setUnsendAmount(item.getGoodsAmount());
            detail.setSentAmount(new BigDecimal(0));
            detail.setAddTime(info.getEditTime());
            detail.setAddUserId(info.getEditUserId());
            if ("gift".equals(item.getGoodsType())) {
                detail.setIsGift("Y");
                detail.setExecutePrice(new BigDecimal(0));
            } else {
                detail.setExecutePrice(item.getGoodsPrice());
            }
            commonDao.save(detail);
        }

        // 记录日志
        // jmsService.sendOrderStatusMsg(info.getOrderId(), auditStateId,
        // userId);

        // 查找会员信息
        Member memberRes = (Member) commonDao.queryForObject(
                "member.getMemberById",
                Integer.valueOf(String.valueOf(memberId)));
        Integer currentPoints = memberRes.getCurrentPoints();
        // System.out.println("currentPoints:" + currentPoints);

        // 订单提交成功后,减去会员已用的积分
        Member memberParam = new Member();
        memberParam.setMemberId(memberId);
        memberParam.setCurrentPoints(currentPoints - (orderPoints * 100));
        memberParam.setEditTime(time);
        memberParam.setEditUserId(userId);
        commonDao.update("member.update", memberParam);
        if (orderPoints * 100 > 0) {
            MemberPointsHis memberPointsHis = new MemberPointsHis();
            memberPointsHis.setAddTime(StringUtil.returnDateFormat(new Date(),
                    "yyyy-MM-dd HH:mm:ss"));
            memberPointsHis.setAddUserId(info.getAddUserId());
            memberPointsHis.setChangeNotes("抵现消费");
            memberPointsHis.setChangeTime(StringUtil.returnDateFormat(
                    new Date(), "yyyy-MM-dd HH:mm:ss"));
            memberPointsHis.setEditTime(memberPointsHis.getEditTime());
            memberPointsHis.setEditUserId(memberPointsHis.getAddUserId());
            memberPointsHis.setLoginName(memberRes.getLoginName());
            memberPointsHis.setMemberId(memberRes.getMemberId());
            memberPointsHis.setPoints(-orderPoints * 100);
            // memberPointsHis.setPointsAfter(memberParam.getCurrentPoints());
            // memberPointsHis.setPointsBefore(memberRes.getCurrentPoints());
            memberPointsHis.setOrderId(orderId);
            commonDao.save("MemberPointsHis.saveForChange", memberPointsHis);
        }
        // 更新库存
        HashMap<String, Object> param = new HashMap<String, Object>();
        param.put("orderId", info.getOrderId());
        commonDao.invokeProduce("OrderInfo.updateGoodsStock", param);
        return orderId;
    }

    @Override
    @Cached(name = "ecMultiChannel")
    public List<HashMap<String, Object>> findSimpleChannel(
            EcMultiChannel channel) {
        return commonDao.queryForList("EcMultiChannel.findSimpleChannel",
                channel);
    }

    @Override
    public void saveHandOrderLog(OrderLog log) {
        commonDao.save(log);
    }

    @Override
    public Map<String, Object> queryOrderRepairPage(OrderRepair orderRepair,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao
                .pageQuery("orderRepair.getOrderRepairListCount",
                        "orderRepair.getOrderRepairList", orderRepair, pageNo,
                        pageSize);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public Map<String, Object> queryOrderReturnPage(OrderReturn orderReturn,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao
                .pageQuery("orderReturn.getOrderReturnListCount",
                        "orderReturn.getOrderReturnList", orderReturn, pageNo,
                        pageSize);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    public HashMap<String, Object> doBathAuditOrder(List<OrderInfo> infoList) {
        HashMap<String, Object> rs = new HashMap<String, Object>();
        StringBuffer feeErrIds = new StringBuffer();
        for (OrderInfo info : infoList) {
            String feeRs = this.checkOrderFee(info.getOrderId());
            if (!"ok".equals(feeRs)) {
                feeErrIds.append(info.getOrderId() + " ");
                continue;
            }
            commonDao.update(info);
            // 更新库存
            HashMap<String, Object> param = new HashMap<String, Object>();
            param.put("orderId", info.getOrderId());
            commonDao.invokeProduce("OrderInfo.updateStock", param);
            // 记录日志
            jmsService.sendOrderStatusMsg(info.getOrderId(),
                    info.getOrderState(), info.getEditUserId());
        }
        if (feeErrIds.length() > 0) {
            rs.put("msg", feeErrIds.toString());
        }
        rs.put("code", 1);
        return rs;
    }

    public List<HashMap<String, Object>> doCheckOrderStock(Long orderId) {
        return commonDao.queryForList("OrderInfo.getOrderGoodsStock", orderId);
    }

    @Override
    public List<EcPaymentType> findPaymentList() {
        return commonDao.queryForList("EcPaymentType.findPaymentList", "");
    }

    /**
     * 修改保修信息
     * 
     * @param orderRepair
     */
    public void updateOrderRepair(OrderRepair orderRepair) {
        commonDao
                .update("orderRepair.updateByPrimaryKeySelective", orderRepair);
    }

    /**
     * 获取退货详情
     * 
     * @param orderReturnItem
     * @param pageNo
     * @param pageSize
     * @return
     */
    public Map<String, Object> queryOrderRepairItemPage(
            OrderReturnItem orderReturnItem, int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "orderReturnItem.getOrderReturnItemListCount",
                "orderReturnItem.getOrderReturnItemList", orderReturnItem,
                pageNo, pageSize);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    /**
     * 修改退货详情
     * 
     * @param orderReturnItem
     */
    public void updateReturnAmount(OrderReturnItem orderReturnItem) {
        commonDao.update("orderReturnItem.updateByPrimaryKeySelective",
                orderReturnItem);
    }

    /**
     * 修改退货
     * 
     * @param orderReturnItem
     */
    public void updateOrderReturn(OrderReturn orderReturn) {
        commonDao
                .update("orderReturn.updateByPrimaryKeySelective", orderReturn);
        if ("".equals(orderReturn.getReturnState())) {
            orderReturn = (OrderReturn) commonDao.queryForObject(
                    "orderReturn.getByPrimaryKey", orderReturn);
            orderReturnServices.returnInfo(orderReturn.getOrderId());
        }
        // 当退化申请被审核通过时需要修改订单状态 为 退货中-20
        orderReturn = (OrderReturn) commonDao.queryForObject(
                "orderReturn.getByPrimaryKey", orderReturn);
        OrderInfo orderInfo = new OrderInfo();
        orderInfo.setOrderId(orderReturn.getOrderId());
        if ("audit".equals(orderReturn.getReturnState())) {
            orderInfo.setOrderState(new Integer(20));
            orderInfo.setEditTime(DateUtils.getCurrentDateString());
            orderInfo.setEditUserId(orderReturn.getEditUserId());
            commonDao.update(orderInfo);
        }
        // 当退化申请被审核通过时需要修改订单状态 为 已退款-18
        if ("finish".equals(orderReturn.getReturnState())) {
            orderInfo.setOrderState(new Integer(18));
            orderInfo.setEditTime(DateUtils.getCurrentDateString());
            orderInfo.setEditUserId(orderReturn.getEditUserId());
            commonDao.update(orderInfo);
        }

    }

    public List<EcCoupons> getCouponsByOrderId(Long orderId) {
        return commonDao.queryForList("ecCoupons.getCouponByOrderId", orderId);
    }

    public String checkOrderFee(Long orderId) {
        HashMap<String, BigDecimal> feeMap = (HashMap<String, BigDecimal>) commonDao
                .queryForObject("OrderInfo.getFees", orderId);
        BigDecimal itemSkuFee = feeMap.get("itemSkuFee");
        BigDecimal skuFee = feeMap.get("skuFee");
        BigDecimal orderFee = feeMap.get("orderFee");
        BigDecimal orderPayFee = feeMap.get("orderPayFee");
        BigDecimal orderPoints = feeMap.get("orderPoints");
        BigDecimal orderVouchers = feeMap.get("orderVouchers");
        BigDecimal otherDiscounts = feeMap.get("otherDiscounts");
        BigDecimal deliveryFee = feeMap.get("deliveryFee");
        BigDecimal discountFee = feeMap.get("discountFee");

        BigDecimal cof = skuFee.subtract(otherDiscounts).subtract(orderPoints)
                .subtract(orderVouchers).subtract(discountFee).add(deliveryFee);
        if (cof.compareTo(new BigDecimal("0")) < 0) {
            cof = new BigDecimal("0");
        }
        if (itemSkuFee.compareTo(skuFee) != 0) {
            return "itemFeeErr";// 计算出的货款金额与订单中的货款金额不相等
        } else if (orderFee.compareTo(cof) != 0) {
            return "orderFeeErr";// 计算出的订单金额与订单中的订单金额不相等
        } else if (orderPayFee.compareTo(orderFee) != 0) {
            return "orderPayFeeErr";// 待支付金额与订单金额不相等
        }

        return "ok";
    }

    @Override
    public HashMap<String, Object> doImportOrderPhone(Sheet sheet,
            OrderPhoneLoadExcel param) throws Exception {

        HashMap<String, Object> rslt = new HashMap<String, Object>();

        if (true) {
            int countColumn = sheet.getColumns();
            int countRow = sheet.getRows();
            if (countColumn < 7) {
                rslt.put("code", -2);// Excel表格应该大于8列
            } else if (countRow <= 1) {
                rslt.put("code", -2);// Excel表格应该大于1行
            } else {
                StringBuffer msg = new StringBuffer();
                boolean isNew = true;
                boolean isErr = false;
                OrderPhoneLoadExcel orderphone = null;

                EcArea ca = null;
                String receiveFullAddress = "";
                List<OrderPhoneLoadExcel> itemList = new ArrayList<OrderPhoneLoadExcel>();
                String currentTime = DateUtils.getCurrentDateString();

                Cell cell = null;
                for (int i = 1; i < countRow; i++) {
                    orderphone = new OrderPhoneLoadExcel();
                    for (int j = 0; j < countColumn; j++) {

                        cell = sheet.getCell(j, i);
                        String content = null == cell.getContents() ? "" : cell
                                .getContents().trim();
                        // System.out.println("countRow:"+countRow+" j :"+j+"  cell.getContents().trim():"+cell.getContents().trim());
                        switch (j) {
                        case 0:// 商家订单号
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    orderphone.setSJ_REQSHEETNO(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,地址为空。").append("<br>");
                                }
                            }
                            break;
                        case 1:// 健一网订单号
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    orderphone.setJY_ORDER(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,地址为空。").append("<br>");
                                }
                            }
                            break;
                        case 2:// 支付金额
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    orderphone.setSALEAMT(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,地址为空。").append("<br>");
                                }
                            }
                            break;
                        case 3:// 支付时间
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    orderphone.setTRANTIME(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,地址为空。").append("<br>");
                                }

                            }
                            break;
                        case 4:// 支付人姓名
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    orderphone.setNAMES(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,地址为空。").append("<br>");
                                }

                            }
                            break;
                        case 5:// 支付网站
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    orderphone.setWEBTYPE("3");
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,地址为空。").append("<br>");
                                }
                            }
                            break;
                        case 6:// 备注
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    orderphone.setNOTE(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,地址为空。").append("<br>");
                                }
                            }
                            break;
                        default:
                            break;
                        }
                        if (isErr) {
                            // orderphone = null;
                            break;
                        }
                    }
                    if (null != orderphone) {// 保存最后一个
                        this.finishingOrderPhone(orderphone, itemList);
                    }
                    orderphone = null;
                }

                if (StringUtil.isEmpty(msg.toString())) {
                    rslt.put("code", 0);
                } else {
                    rslt.put("code", -1);
                    rslt.put("msg", msg.toString());
                }

            }

        }
        saveOrderPhone();
        return rslt;
    }

    public HashMap<String, Object> doImportOrder(Sheet sheet, OrderInfo param)
            throws Exception {
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        List<OrderInfo> orderList = new ArrayList<OrderInfo>();
        List<OrderItem> orderItemList = new ArrayList<OrderItem>();
        List<OrderDetail> orderDetailList = new ArrayList<OrderDetail>();

        if (null == param.getMemberId() || null == param.getAddUserId()) {
            rslt.put("code", -1);// 会员ID,操作人ID为空
            rslt.put("code", "memberId or userId is null");
        } else {
            int countColumn = sheet.getColumns();
            int countRow = sheet.getRows();
            if (countColumn < 11) {
                rslt.put("code", -2);// Excel表格应该大于11列
            } else if (countRow <= 1) {
                rslt.put("code", -2);// Excel表格应该大于1行
            } else {
                StringBuffer msg = new StringBuffer();
                boolean isNew = true;
                boolean isErr = false;
                OrderInfo order = null;
                OrderItem item = null;
                OrderDetail detail = null;
                EcArea ca = null;
                String receiveFullAddress = "";
                List<OrderItem> itemList = new ArrayList<OrderItem>();
                List<OrderDetail> detailList = new ArrayList<OrderDetail>();
                String currentTime = DateUtils.getCurrentDateString();

                Cell cell = null;
                for (int i = 1; i < countRow; i++) {
                    for (int j = 0; j < countColumn; j++) {
                        cell = sheet.getCell(j, i);
                        String content = null == cell.getContents() ? "" : cell
                                .getContents().trim();
                        switch (j) {
                        case 0:// 收件人
                            if (StringUtil.isEmpty(content)) {
                                isNew = false;
                            } else {
                                isNew = true;
                                isErr = false;
                                if (i > 1 && null != order) {// 保存上一个
                                    this.finishingOrder(order, orderList,
                                            orderItemList, itemList,
                                            orderDetailList, detailList);
                                }
                                order = new OrderInfo();
                                itemList = new ArrayList<OrderItem>();
                                detailList = new ArrayList<OrderDetail>();
                                Long orderId = (Long) commonDao
                                        .queryForObject("OrderInfo.getOrderId");
                                order.setOrderId(orderId);
                                order.setPaymentMode(param.getPaymentMode());
                                order.setMemberId(param.getMemberId());
                                order.setOrderState(param.getOrderState());
                                order.setOrderOutState(param.getOrderOutState());
                                order.setAddUserId(param.getAddUserId());
                                order.setAddTime(currentTime);
                                order.setCommitTime(currentTime);
                                order.setReceiveUser(content);
                                receiveFullAddress = "";
                            }
                            break;
                        case 1://
                            if (isNew) {
                                try {
                                    String areaMapKey = receiveFullAddress
                                            + content;
                                    if (null != areaMap.get(areaMapKey)) {
                                        ca = areaMap.get(areaMapKey);
                                    } else {
                                        EcArea ap = new EcArea();
                                        ap.setAreaName(content);
                                        ap.setAreaLevel(1);
                                        ca = (EcArea) commonDao.queryForObject(
                                                "EcArea.getByNameAndLevel", ap);
                                    }
                                    if (null != ca) {
                                        areaMap.put(areaMapKey, ca);
                                        order.setProvinceId(Integer
                                                .parseInt(String.valueOf(ca
                                                        .getAreaId())));
                                        receiveFullAddress = receiveFullAddress
                                                + ca.getAreaName();
                                        isErr = false;
                                    } else {
                                        throw new Exception();
                                    }

                                } catch (Exception e) {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,省匹配有误。")
                                            .append("<br>");
                                }
                            }
                            break;
                        case 2://
                            if (isNew) {
                                try {
                                    String areaMapKey = receiveFullAddress
                                            + content;
                                    if (null != areaMap.get(areaMapKey)) {
                                        ca = areaMap.get(areaMapKey);
                                    } else {
                                        EcArea ap = new EcArea();
                                        ap.setAreaName(content);
                                        ap.setAreaLevel(2);
                                        ap.setParentAreaId(ca.getAreaId());
                                        ca = (EcArea) commonDao.queryForObject(
                                                "EcArea.getByNameAndLevel", ap);
                                    }
                                    if (null != ca) {
                                        areaMap.put(areaMapKey, ca);
                                        order.setCityId(Integer.parseInt(String
                                                .valueOf(ca.getAreaId())));
                                        receiveFullAddress = receiveFullAddress
                                                + ca.getAreaName();
                                        isErr = false;
                                    } else {
                                        throw new Exception();
                                    }
                                } catch (Exception e) {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,市匹配有误。")
                                            .append("<br>");
                                }
                            }
                            break;
                        case 3://
                            if (isNew) {
                                try {
                                    String areaMapKey = receiveFullAddress
                                            + content;
                                    if (null != areaMap.get(areaMapKey)) {
                                        ca = areaMap.get(areaMapKey);
                                    } else {
                                        EcArea ap = new EcArea();
                                        ap.setAreaName(content);
                                        ap.setAreaLevel(3);
                                        ap.setParentAreaId(ca.getAreaId());
                                        ca = (EcArea) commonDao.queryForObject(
                                                "EcArea.getByNameAndLevel", ap);
                                    }
                                    if (null != ca) {
                                        areaMap.put(areaMapKey, ca);
                                        order.setAreaId(Integer.parseInt(String
                                                .valueOf(ca.getAreaId())));
                                        receiveFullAddress = receiveFullAddress
                                                + ca.getAreaName();
                                        isErr = false;
                                    } else {
                                        throw new Exception();
                                    }
                                } catch (Exception e) {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,县(区)匹配有误。").append(
                                            "<br>");
                                }
                            }
                            break;
                        case 4:// 地址
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order.setReceiveAddress(content);
                                    order.setReceiveFullAddress(receiveFullAddress
                                            + content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,地址为空。").append("<br>");
                                }
                            }

                            break;
                        case 5:// 邮编
                            if (isNew && StringUtil.isNotEmpty(content)) {
                                try {
                                    order.setReceivePost(Integer
                                            .parseInt(content));
                                    isErr = false;
                                } catch (Exception e) {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,邮编有误。").append("<br>");
                                }
                            }
                            break;
                        case 6:// 手机
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order.setReceiveMobile(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,手机号码为空。").append(
                                            "<br>");
                                }
                            }
                            break;
                        case 7:// 商品编码
                            try {
                                Goods g = null;
                                if (null != goodsMap.get(content)) {
                                    g = goodsMap.get(content);
                                } else {
                                    g = (Goods) commonDao.queryForObject(
                                            "Goods.getByGoodsNo", content);
                                }
                                if (null != g) {
                                    goodsMap.put(content, g);
                                    item = new OrderItem();
                                    item.setOrderId(order.getOrderId());
                                    item.setGoodsId(g.getGoodsId());
                                    item.setGoodsNo(g.getGoodsNo());
                                    item.setGoodsName(g.getGoodsName());
                                    item.setGoodsUnit(g.getUnitName());
                                    item.setGoodsCostPrice(g.getCostPrice());
                                    item.setGoodsOldPrice(g.getEcPrice());
                                    item.setAddUserId(order.getAddUserId());
                                    item.setAddTime(order.getAddTime());
                                    item.setWeight(g.getWeight());

                                    detail = new OrderDetail();
                                    detail.setOrderId(order.getOrderId());
                                    detail.setGoodsId(g.getGoodsId());
                                    detail.setAddUserId(order.getAddUserId());
                                    detail.setAddTime(order.getAddTime());

                                    isErr = false;
                                } else {
                                    throw new Exception();
                                }
                            } catch (Exception e) {
                                isErr = true;
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,未能找到该编码的商品。").append(
                                        "<br>");
                            }
                            break;
                        case 8:// 商品名称
                            break;
                        case 9:// 商品单价
                            try {
                                BigDecimal price = new BigDecimal(content);
                                if (price.compareTo(new BigDecimal("0")) < 0) {
                                    throw new Exception();
                                }

                                item.setGoodsPrice(price);
                                detail.setExecutePrice(price);

                                isErr = false;
                            } catch (Exception e) {
                                isErr = true;
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,价格有误。").append("<br>");
                            }
                            break;
                        case 10:// 商品数量
                            try {
                                BigDecimal amount = new BigDecimal(content);
                                item.setGoodsAmount(amount);
                                item.setGoodsSumFee(item.getGoodsPrice()
                                        .multiply(item.getGoodsAmount()));
                                itemList.add(item);

                                detail.setGoodsAmount(amount);
                                detail.setUnsendAmount(amount);
                                detail.setSentAmount(new BigDecimal("0"));
                                detailList.add(detail);

                                isErr = false;
                            } catch (Exception e) {
                                isErr = true;
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,数量有误。").append("<br>");
                            }
                            break;
                        case 11:// 媒体来源
                            try {
                                if (isNew) {
                                    order.setMultiChannelId(Integer
                                            .valueOf(content.split("-")[0]));
                                }
                            } catch (Exception e) {
                                isErr = true;
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,媒体来源有误。").append("<br>");
                            }
                            break;
                        case 12:// 合作渠道商的订单号
                            try {
                                if (isNew) {
                                    order.setMultiChannelOrderId(Long
                                            .valueOf(content));
                                }
                            } catch (Exception e) {
                                isErr = true;
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,合作渠道商的订单号有误。").append(
                                        "<br>");
                            }
                            break;
                        case 13:// 物流公司
                            try {
                                // if(isNew){
                                // order.setLogisticCompanyId(Integer.valueOf(content.split("-")[0]));
                                // }
                            } catch (Exception e) {
                                isErr = true;
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,物流公司有误。").append("<br>");
                            }
                            break;
                        case 14:// 运费
                            try {
                                if (isNew) {
                                    order.setDeliveryFee(new BigDecimal(content));
                                }
                            } catch (Exception e) {
                                isErr = true;
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,运费有误。").append("<br>");
                            }
                            break;
                        case 15: // 发票抬头
                            try {
                                if (isNew) {
                                    order.setInvoiceTitle(content);
                                    if (content.equals("个人")) {
                                        order.setInvoiceType("general");
                                    }
                                }
                            } catch (Exception e) {
                                isErr = true;
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,发票抬头有误。").append("<br>");
                            }
                            break;
                        default:
                            break;
                        }
                        if (isErr) {
                            order = null;
                            break;
                        }
                    }
                }
                if (null != order) {// 保存最后一个
                    this.finishingOrder(order, orderList, orderItemList,
                            itemList, orderDetailList, detailList);
                }
                if (StringUtil.isEmpty(msg.toString())) {
                    rslt.put("code", 0);
                    // add by zp 2014-09-16
                    saveOrder(orderList, orderItemList, orderDetailList);
                } else {
                    rslt.put("code", -1);
                    rslt.put("msg", msg.toString());
                }
            }
        }
        return rslt;
    }

    private void finishingOrderPhone(OrderPhoneLoadExcel orderphone,
            List<OrderPhoneLoadExcel> itemList) throws Exception {
        BigDecimal skuFee = new BigDecimal("0");
        BigDecimal weight = new BigDecimal("0");

        orderPhoneList.add(orderphone);
    }

    private void finishingOrder_Cw(Order_Cw order_cw, List<Order_Cw> itemList)
            throws Exception {

        order_cwList.add(order_cw);
    }

    private void finishingOrder_Cw_cf(Order_Cw_Cfy order_cw_cf,
            List<Order_Cw_Cfy> itemList) throws Exception {

        order_cwcfyList.add(order_cw_cf);
    }

    private void finishingOrder_Cw_erp(Order_Cw_Erp order_cw_erp,
            List<Order_Cw_Erp> itemList) throws Exception {

        order_cwerpList.add(order_cw_erp);
    }

    private void finishingOrder_Cw_Qt(Order_Cw_Qt order_cw_qt,
            List<Order_Cw_Qt> itemList) throws Exception {

        order_cwqtList.add(order_cw_qt);
    }

    private void finishingOrder(OrderInfo order, List<OrderInfo> orderList,
            List<OrderItem> orderItemList, List<OrderItem> itemList,
            List<OrderDetail> orderDetailList, List<OrderDetail> detailList)
            throws Exception {
        BigDecimal skuFee = new BigDecimal("0");
        BigDecimal weight = new BigDecimal("0");
        for (OrderItem ie : itemList) {
            skuFee = skuFee.add(ie.getGoodsSumFee());
            weight = weight.add(ie.getWeight().multiply(ie.getGoodsAmount()));
        }
        order.setSkuFee(skuFee);
        order.setOrderFee(skuFee);
        order.setOrderPayFee(skuFee);
        order.setSkuWeights(weight);
        orderList.add(order);
        orderItemList.addAll(itemList);
        orderDetailList.addAll(detailList);
    }

    private void saveOrderPhone() {
        if (!orderPhoneList.isEmpty()) {

            commonDao.batchInsert("Orderphone.saveorderphone", orderPhoneList);
        }

    }

    /**
     * Janc 先导入数据,在通过过程删除重复的数据,在导入正式使用的表--健一网订单导入
     */
    private void saveOrder_Wc() {
        if (!order_cwList.isEmpty()) {

            commonDao.batchInsert("Orderphone.saveordercw_list", order_cwList);
            order_cwList.clear();

            Order_Cw oc = new Order_Cw();
            oc.setJy_OrderNo("1");
            commonDao.update("Orderphone.LoadExcel", oc);
        }

    }

    /**
     * Janc 先导入数据,在通过过程删除重复的数据,在导入正式使用的表--健一网CFY订单导入
     */
    private void saveOrder_Wc_Cfy() {
        if (!order_cwcfyList.isEmpty()) {
            commonDao.batchInsert("Orderphone.saveordercw_cf_list",
                    order_cwcfyList);
            order_cwcfyList.clear();
            Order_Cw_Cfy oc = new Order_Cw_Cfy();
            oc.setJy_OrderNo("1");
            commonDao.update("Orderphone.LoadExcel_cfy", oc);
        }
    }

    /**
     * Janc 先导入数据,在通过过程删除重复的数据,在导入正式使用的表-- Erp订单导入
     */
    private void saveOrder_Wc_Erp() {
        if (!order_cwerpList.isEmpty()) {
            commonDao.batchInsert("Orderphone.saveordercw_erp_list",
                    order_cwerpList);
            order_cwerpList.clear();
            Order_Cw_Erp oce = new Order_Cw_Erp();
            oce.setOrderNo_L("1");
            commonDao.update("Orderphone.LoadExcel_erp", oce);
        }
    }

    /**
     * Janc 先导入数据,在通过过程删除重复的数据,在导入正式使用的表-- qt订单导入
     */
    private void saveOrder_Wc_Qt() {
        if (!order_cwqtList.isEmpty()) {
            commonDao.batchInsert("Orderphone.saveordercw_qt_list",
                    order_cwqtList);
            order_cwqtList.clear();
            Order_Cw_Qt oco = new Order_Cw_Qt();
            oco.setOrderNo_R("1");
            commonDao.update("Orderphone.LoadExcel_qt", oco);
        }
    }

    private void saveOrder(List<OrderInfo> orderList,
            List<OrderItem> orderItemList, List<OrderDetail> orderDetailList) {
        if (!orderList.isEmpty()) {
            commonDao.batchInsert("OrderInfo.save", orderList);
        }
        if (!orderItemList.isEmpty()) {
            commonDao.batchInsert("OrderItem.save", orderItemList);
        }
        if (!orderDetailList.isEmpty()) {
            commonDao.batchInsert("OrderDetail.save", orderDetailList);
        }
        // 添加默认的
        if (!orderList.isEmpty()) {
            for (OrderInfo orderInfo : orderList) {
                LogisticFeeRule fitRule = commonLogisticsService
                        .getFitRule(orderInfo);
                orderInfo.setLogisticCompanyId(fitRule.getLogisticCompanyId());
            }
            commonDao.batchInsert("OrderInfo.update", orderList);
        }
        if (!orderList.isEmpty()) {
            for (OrderInfo order : orderList) {
                // 记录日志
                jmsService.sendOrderStatusMsg(order.getOrderId(),
                        order.getOrderState(), order.getAddUserId());
            }
        }
    }

    @Override
    public String findReturnDeaatil(Long orderId) {
        OrderInfo orderInfo = (OrderInfo) commonDao.queryForObject(
                "OrderInfo.getOrderById", orderId);
        if (null == orderInfo.getReturnType()) {
            return "暂无信息";
        } else {
            String type = orderInfo.getReturnType();
            String value = orderInfo.getReturnValue();
            String[] values = value.split("/");
            String[] types = type.split("/");
            String result = "";
            for (int i = 0; i < types.length; i++) {
                if ("points".equals(types[i])) {
                    result += "积分(" + values[i] + ")<br>";
                } else {
                    String[] ids = types[i].split(",");
                    String[] num = values[i].split(",");
                    for (int k = 0; k < ids.length; k++) {
                        EcCouponType ecCouponType;
                        Map param = new HashMap();
                        param.put("ids", ids[k]);
                        List<EcCouponType> typeList = (List<EcCouponType>) commonDao
                                .queryForList("EcCouponType.getCouponTypeById",
                                        param);
                        if (null != typeList && !typeList.isEmpty()) {
                            ecCouponType = (EcCouponType) typeList.get(0);
                            result += ecCouponType.getCouponTypeName()
                                    + "(单张金额:" + ecCouponType.getDiscountFee()
                                    + "元 共" + num[k] + "张)<br>";
                        }

                    }
                }
            }
            return result;
        }

    }

    @Override
    public Map<String, Object> getTcMessage(EcTcMessage message, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery("tcMessage.count",
                "tcMessage.query", message, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        List<EcTcMessage> newlist = new ArrayList<EcTcMessage>();
        List<EcTcMessage> list = (List<EcTcMessage>) page.getResult();
        for (EcTcMessage et : list) {
            if (null != et.getNotBuyReason()) {
                for (NotBuyReasonEnum s : NotBuyReasonEnum.values()) {
                    if (s.getCode().equals(et.getNotBuyReason()))
                        et.setNotBuyReasonName(s.getValue());
                }
            }
            newlist.add(et);
        }
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", newlist);
        return resMap;
    }

    @Override
    public void updateTcMessage(EcTcMessage ecTcMessage) {
        // TODO Auto-generated method stub
        commonDao.update("tcMessage.update", ecTcMessage);
    }

    /**
     * 判断是否包含处方药
     * 
     * @param goodsNos
     *            商品编码集合 以, 分隔
     * @return 是否包含处方药
     */
    public String isIncludeTc(String goodsNos) {
        String ok = "N";
        Integer count = (Integer) commonDao.queryForObject("Goods.getTcCount",
                goodsNos);
        if (count > 0) {
            ok = "Y";
        }
        return ok;
    }

    @Override
    public OrderInfo getOrderInfo(Long orderId) {
        return (OrderInfo) commonDao.queryForObject("OrderInfo.getBasic",
                orderId);
    }

    /**
     * @description 得到销售统计page
     * @author x.zl
     * @param map
     * @param pageNo
     * @param pageSize
     * @return
     */
    public Map<String, Object> getSalePage(Map map, int pageNo, int pageSize) {
        map.put("endRow", pageSize * pageNo);
        map.put("startRow", (pageSize - 1) * pageNo + 1);
        JspPage page = (JspPage) commonDao
                .pageQuery("OrderInfo.getSaleStatisticsCount",
                        "OrderInfo.getSaleStatisticsPage", map, pageNo,
                        pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public List<EcArea> getEcArea(EcArea ecArea) {
        return commonDao.queryForList("EcArea.getEcAreaInfo", ecArea);
    }

    @Override
    public List<EcArea> getEcArea1(EcArea ecArea) {
        return commonDao.queryForList("EcArea.getEcAreaInfo1", ecArea);
    }

    @Override
    public HashMap<String, Object> doImportOrder_Cw(Sheet sheet, Order_Cw ople,
            String webtype) throws Exception {

        HashMap<String, Object> rslt = new HashMap<String, Object>();

        if ("j1".equals(webtype)) {
            int countColumn = sheet.getColumns();
            int countRow = sheet.getRows();
            if (countColumn < 6) {
                rslt.put("code", -2);// Excel表格应该大于8列
            } else if (countRow <= 1) {
                rslt.put("code", -2);// Excel表格应该大于1行
            } else {
                StringBuffer msg = new StringBuffer();
                boolean isNew = true;
                boolean isErr = false;
                Order_Cw order_cw = null;
                List<Order_Cw> itemList = new ArrayList<Order_Cw>();
                String currentTime = DateUtils.getCurrentDateString();

                Cell cell = null;
                for (int i = 1; i < countRow; i++) {
                    order_cw = new Order_Cw();
                    for (int j = 0; j < countColumn; j++) {
                        cell = sheet.getCell(j, i);
                        String content = null == cell.getContents() ? "" : cell
                                .getContents().trim();
                        // System.out.println("countRow:"+countRow+" j :"+j+"  cell.getContents().trim():"+cell.getContents().trim());
                        switch (j) {
                        case 0:// 健一网订单号
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw.setJy_OrderNo(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,订单号为空。")
                                            .append("<br>");
                                }
                            }
                            break;
                        case 1:// 支付方式
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw.setPayType(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,支付方式为空。").append(
                                            "<br>");
                                }
                            }
                            break;
                        case 2:// 回款金额
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw.setCheckAmt(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,金额为空。").append("<br>");
                                }
                            }
                            break;
                        case 3:// 回款时间
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw.setArTime(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,回款时间为空。").append(
                                            "<br>");
                                }

                            }
                            break;
                        case 4:// 销售时间
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw.setTranTime(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,销售时间为空。").append(
                                            "<br>");
                                }

                            }
                            break;
                        case 5:// 快递单号
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw.setExpressNo(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,快递单号为空。").append(
                                            "<br>");
                                }

                            }
                            break;
                        default:
                            break;
                        }
                        if (isErr) {
                            // orderphone = null;
                            break;
                        }
                    }
                    if (null != order_cw) {// 保存最后一个
                        // System.out.println("orderphone.getSJ_REQSHEETNO"+orderphone.getSJ_REQSHEETNO());
                        this.finishingOrder_Cw(order_cw, itemList);
                    }
                    order_cw = null;
                }

                if (StringUtil.isEmpty(msg.toString())) {
                    rslt.put("code", 0);
                } else {
                    rslt.put("code", -1);
                    rslt.put("msg", msg.toString());
                }

            }
            saveOrder_Wc();
        } else if ("cfy".equals(webtype)) {

            int countColumn = sheet.getColumns();
            int countRow = sheet.getRows();
            if (countColumn < 8) {
                rslt.put("code", -2);// Excel表格应该大于8列
            } else if (countRow <= 1) {
                rslt.put("code", -2);// Excel表格应该大于1行
            } else {
                StringBuffer msg = new StringBuffer();
                boolean isNew = true;
                boolean isErr = false;
                Order_Cw_Cfy order_cw_cfy = null;
                List<Order_Cw_Cfy> itemList = new ArrayList<Order_Cw_Cfy>();
                String currentTime = DateUtils.getCurrentDateString();

                Cell cell = null;
                for (int i = 1; i < countRow; i++) {
                    order_cw_cfy = new Order_Cw_Cfy();
                    for (int j = 0; j < countColumn; j++) {
                        cell = sheet.getCell(j, i);
                        String content = null == cell.getContents() ? "" : cell
                                .getContents().trim();
                        // System.out.println("countRow:"+countRow+" j :"+j+"  cell.getContents().trim():"+cell.getContents().trim());
                        switch (j) {
                        case 0:// 健一网订单号
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw_cfy.setJy_OrderNo(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,订单号为空。")
                                            .append("<br>");
                                }
                            }
                            break;
                        case 1:// 运单号
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw_cfy.setExpressNo(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,运单号为空。")
                                            .append("<br>");
                                }
                            }
                            break;
                        case 2:// 销售金额
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw_cfy.setTranAmt(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,销售金额为空。").append(
                                            "<br>");
                                }
                            }
                            break;
                        case 3:// 快递费
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw_cfy.setFreight(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,快递费为空。")
                                            .append("<br>");
                                }

                            }
                            break;
                        case 4:// 合计金额
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw_cfy.setCheckAmt(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,合计金额为空。").append(
                                            "<br>");
                                }

                            }
                            break;
                        case 5:// 支付方式
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw_cfy.setPayType(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,支付方式为空。").append(
                                            "<br>");
                                }

                            }
                            break;
                        case 6:// 销售时间
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw_cfy.setTranTime(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,销售时间为空。").append(
                                            "<br>");
                                }

                            }
                            break;
                        case 7:// 快递公司
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw_cfy.setExpressType(content);
                                } else {
                                    isErr = true;
                                    msg.append(
                                            "第" + (i + 1) + "行,第" + (j + 1)
                                                    + "列,快递公司为空。").append(
                                            "<br>");
                                }

                            }
                            break;
                        case 8:// 快递公司
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_cw_cfy.setAddress(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,快递公司为空。").append("<br>");
                                }

                            }
                            break;
                        default:
                            break;
                        }
                        if (isErr) {
                            // orderphone = null;
                            break;
                        }
                    }
                    if (null != order_cw_cfy) {// 保存最后一个
                        // System.out.println("orderphone.getSJ_REQSHEETNO"+orderphone.getSJ_REQSHEETNO());
                        this.finishingOrder_Cw_cf(order_cw_cfy, itemList);
                    }
                    order_cw_cfy = null;
                }

                if (StringUtil.isEmpty(msg.toString())) {
                    rslt.put("code", 0);
                } else {
                    rslt.put("code", -1);
                    rslt.put("msg", msg.toString());
                }

            }
            saveOrder_Wc_Cfy();

        } else if ("erp".equals(webtype)) {

            int countColumn = sheet.getColumns();
            int countRow = sheet.getRows();
            if (countColumn < 6) {
                rslt.put("code", -2);// Excel表格应该大于8列
            } else if (countRow <= 1) {
                rslt.put("code", -2);// Excel表格应该大于1行
            } else {
                StringBuffer msg = new StringBuffer();
                boolean isNew = true;
                boolean isErr = false;
                Order_Cw_Erp order_Cw_Erp = null;
                List<Order_Cw_Erp> itemList = new ArrayList<Order_Cw_Erp>();
                String currentTime = DateUtils.getCurrentDateString();

                Cell cell = null;
                for (int i = 1; i < countRow; i++) {
                    order_Cw_Erp = new Order_Cw_Erp();
                    for (int j = 0; j < countColumn; j++) {
                        cell = sheet.getCell(j, i);
                        String content = null == cell.getContents() ? "" : cell
                                .getContents().trim();
                        // System.out.println("countRow:"+countRow+" j :"+j+"  cell.getContents().trim():"+cell.getContents().trim());
                        switch (j) {
                        case 0:// 健一网订单号
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Erp.setOrderNo_L(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,订单号为空。").append("<br>");
                                }
                            }
                            break;
                        case 1:// 含税总销售
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Erp.setTaxAmt(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,运单号为空。").append("<br>");
                                }
                            }
                            break;
                        case 2:// 无税总销售
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Erp.setUnTaxAmt(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,无税总销售为空。").append("<br>");
                                }
                            }
                            break;
                        case 3:// 无税总成本
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Erp.setUnCostAmt(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,无税总成本为空。").append("<br>");
                                }

                            }
                            break;
                        case 4:// 优惠金额
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Erp.setFeeAmt(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,优惠金额为空。").append("<br>");
                                }

                            }
                            break;
                        case 5:// 补差金额
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Erp.setSup(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,补差金额为空。").append("<br>");
                                }

                            }
                            break;
                        case 6:// 结算金额
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Erp.setCheckAmt(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,销售时间为空。").append("<br>");
                                }

                            }
                            break;
                        default:
                            break;
                        }
                        if (isErr) {
                            // orderphone = null;
                            break;
                        }
                    }
                    if (null != order_Cw_Erp) {// 保存最后一个
                        // System.out.println("orderphone.getSJ_REQSHEETNO"+orderphone.getSJ_REQSHEETNO());
                        this.finishingOrder_Cw_erp(order_Cw_Erp, itemList);
                    }
                    order_Cw_Erp = null;
                }

                if (StringUtil.isEmpty(msg.toString())) {
                    rslt.put("code", 0);
                } else {
                    rslt.put("code", -1);
                    rslt.put("msg", msg.toString());
                }

            }
            saveOrder_Wc_Erp();

        } else if ("qt_webtype".equals(webtype)) {
            int countColumn = sheet.getColumns();
            int countRow = sheet.getRows();
            if (countColumn < 6) {
                rslt.put("code", -2);// Excel表格应该大于8列
            } else if (countRow <= 1) {
                rslt.put("code", -2);// Excel表格应该大于1行
            } else {
                StringBuffer msg = new StringBuffer();
                boolean isNew = true;
                boolean isErr = false;
                Order_Cw_Qt order_Cw_Qt = null;
                List<Order_Cw_Qt> itemList = new ArrayList<Order_Cw_Qt>();
                String currentTime = DateUtils.getCurrentDateString();

                Cell cell = null;
                for (int i = 1; i < countRow; i++) {
                    order_Cw_Qt = new Order_Cw_Qt();
                    for (int j = 0; j < countColumn; j++) {
                        cell = sheet.getCell(j, i);
                        String content = null == cell.getContents() ? "" : cell
                                .getContents().trim();
                        // System.out.println("countRow:"+countRow+" j :"+j+"  cell.getContents().trim():"+cell.getContents().trim());
                        switch (j) {
                        case 0:// 下单时间
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Qt.setOayTime(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,订单号为空。").append("<br>");
                                }
                            }
                            break;
                        case 1:// 关单时间
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Qt.setCloseTime(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,运单号为空。").append("<br>");
                                }
                            }
                            break;
                        case 2:// 订单编号
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Qt.setOrderNo_R(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,无税总销售为空。").append("<br>");
                                }
                            }
                            break;
                        case 3:// 货款
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Qt.setPayment_goods(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,无税总成本为空。").append("<br>");
                                }

                            }
                            break;
                        case 4:// 佣金
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Qt.setCommission(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,优惠金额为空。").append("<br>");
                                }

                            }
                            break;
                        case 5:// 代收配送费
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Qt.setPostAge(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,补差金额为空。").append("<br>");
                                }

                            }
                            break;
                        case 6:// 结算金额
                            if (isNew) {
                                if (StringUtil.isNotEmpty(content)) {
                                    isErr = false;
                                    order_Cw_Qt.setCheckAmt(content);
                                } else {
                                    // isErr = true;
                                    // msg.append("第"+(i+1)+"行,第"+(j+1)+"列,销售时间为空。").append("<br>");
                                }

                            }
                            break;
                        default:
                            break;
                        }
                        if (isErr) {
                            // orderphone = null;
                            break;
                        }
                    }
                    if (null != order_Cw_Qt) {// 保存最后一个
                        // System.out.println("orderphone.getSJ_REQSHEETNO"+orderphone.getSJ_REQSHEETNO());
                        this.finishingOrder_Cw_Qt(order_Cw_Qt, itemList);
                    }
                    order_Cw_Qt = null;
                }

                if (StringUtil.isEmpty(msg.toString())) {
                    rslt.put("code", 0);
                } else {
                    rslt.put("code", -1);
                    rslt.put("msg", msg.toString());
                }

            }
            saveOrder_Wc_Qt();
        }

        return rslt;

    }

    @Override
    public Map<String, Object> queryOrder_Cw_Check_Excel(Order_Cw opc,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderPhoneCheck.getOrdercwCountexcel",
                "OrderPhoneCheck.getOrdercwListexcel", opc, pageNo, pageSize,
                false);

        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public Map<String, Object> queryOrder_Cw_Check(Order_Cw_Check opc,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderPhoneCheck.getOrdercwCount",
                "OrderPhoneCheck.getOrdercwList", opc, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public String OrderCheck(String l_expressNo, String l_Order, String isCf) {
        Order_Cw_Check oc = new Order_Cw_Check();
        String l_expressNoArray[] = l_expressNo.split(","); // 里 快递单号
        String l_OrderArray[] = l_Order.split(","); // 里 快递单号

        for (int i = 1; i < l_expressNoArray.length; i++) {
            oc.setL_expressNo(l_expressNoArray[i]);
            oc.setL_jy_orderNo(l_OrderArray[i]);
            if (l_expressNoArray[i] == null || l_expressNoArray[i] == "") {

            } else {
                if ("No".equals(isCf)) {// 非处方药对账的过程
                    commonDao.update("OrderPhoneCheck.CheckOrder", oc);
                }
                if ("qt".equals(isCf)) {// 其他网站订单和ERP订单对账的
                    commonDao.update("OrderPhoneCheck.CheckOrderQt", oc);
                } else {// 处方药对账的过程
                    commonDao.update("OrderPhoneCheck.CheckOrderCfy", oc);
                }

            }

        }

        return "1";
    }

    @Override
    public Map<String, Object> queryOrder_Verified(Order_Cw_Check opc,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderPhoneCheck.getOrderverifiedcound",
                "OrderPhoneCheck.getOrderverified", opc, pageNo, pageSize,
                false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public Map<String, Object> queryOrder_Financial(Order_Financial_Query opc,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao
                .pageQuery("OrderPhoneCheck.Order_Financialcount",
                        "OrderPhoneCheck.Order_Financial", opc, pageNo,
                        pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;

    }

    @Override
    public List<Object> getDataList(String sqlName, Map map) {
        return commonDao.queryForList(sqlName, map);
    }

    @Override
    public Map<String, Object> queryOrder_Cw_Check_Cf(Order_Cw_Cfy opc,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderPhoneCheck.getOrdercwCountCf",
                "OrderPhoneCheck.getOrdercwListCf", opc, pageNo, pageSize,
                false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public Map<String, Object> queryOrder_Cw_Check_Erp(Order_Cw_Erp oce,
            int pageNo, int pageSize) {

        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderPhoneCheck.getOrdercwerpCount",
                "OrderPhoneCheck.getOrdercwerpList", oce, pageNo, pageSize,
                false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;

    }

    @Override
    public Map<String, Object> queryOrder_Cw_Check_Qt(Order_Cw_Qt oco,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderPhoneCheck.getOrdercwqtCount",
                "OrderPhoneCheck.getOrdercwqtList", oco, pageNo, pageSize,
                false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public Map<String, Object> queryOrder_Erp_Diff_J1(Order_Erp_Diff_J1 oedj,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderPhoneCheck.getOrdererp_diff_j1ListCount",
                "OrderPhoneCheck.getOrdererp_diff_j1List", oedj, pageNo,
                pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;

    }

    @Override
    public void updateStateToCommit(Long orderId, Integer type, Integer userId) {
        if (type.equals(1)) {
            commonDao.update("OrderInfo.updateStateToCommit", orderId);
        } else if (type.equals(2)) {
            commonDao.update("OrderInfo.updateStateToCancel", orderId);
        }
        OrderLog log = new OrderLog();
        log.setOrderId(orderId);
        log.setOrderStateId(type.equals(1) ? 29 : 25);
        log.setLogContent(type.equals(1) ? "您提交了订单,等待审核" : "您的订单已取消。");
        log.setLogUserId(userId);
        log.setOrderLogType(NOrderLogType.pu.getCode());
        log.setAddTime(DateUtils.getCurrentDateString());
        log.setAddUserId(userId);
        log.setLogTime(DateUtils.getCurrentDateString());
        saveHandOrderLog(log);

    }

    public OrderInfo totalCount(OrderInfo param) {
        try {
            return (OrderInfo) commonDao.queryForObject("OrderInfo.totalCount",
                    param);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public OrderInfo totalCountFirst(OrderInfo param) {
        return (OrderInfo) commonDao.queryForObject(
                "OrderInfo.totalCountFirst", param);
    }

    public OrderInfo totalCountTc(OrderInfo param) {
        try {
            return (OrderInfo) commonDao.queryForObject(
                    "OrderInfo.totalCountTc", param);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public OrderInfo totalCountFirstTc(OrderInfo param) {
        return (OrderInfo) commonDao.queryForObject(
                "OrderInfo.totalCountFirstTc", param);
    }

    @Override
    public Map<String, Object> getMyQueryOrders(OrderInfo param, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.getMyQueryOrdersCount",
                "OrderInfo.getMyQueryOrders", param, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public void updateTcMessageIsBuy(EcTcMessage ecTcMessage) {
        // TODO Auto-generated method stub
        commonDao.update("tcMessage.updateIsBuy", ecTcMessage);
    }

    @Override
    public void updateOrderNotes(OrderInfo orderInfo) {
        commonDao.update("OrderInfo.updateOrderNotes", orderInfo);
    }

    @Override
    public void lockOrder(OrderInfo orderInfo) {
        commonDao.update(orderInfo);
    }

    @Override
    public Map<String, Object> getUnfindERPOrderList(OrderInfo param,
            int pageNo, int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.getUnfindERPOrderCount",
                "OrderInfo.getUnfindERPOrderList", param, pageNo, pageSize,
                false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public Map<String, Object> getCpsOrderList(CpsOrder order, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "CpsOrderSync.getCpsOrderCount",
                "CpsOrderSync.getCpsOrderList", order, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public CpsOrder cpsTotalCount(CpsOrder param) {
        return (CpsOrder) commonDao.queryForObject(
                "CpsOrderSync.cpsTotalCount", param);
    }

    @Override
    public Map<String, Object> shenbaoList(OrderInfo param, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.shenBaoPianCount", "OrderInfo.shenBaoPian", param,
                pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public void saveShenbaoLog(OrderInfo pa) {
        commonDao.save("OrderInfo.saveShenBaolog", pa);
    }

    @Override
    public HashMap<String, Object> importOrderSB(Sheet sheet, OrderInfo itemTc) {
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        try {
            List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
            int countColumn = sheet.getColumns();
            int countRow = sheet.getRows();
            if (countColumn < 4) {
                rslt.put("code", -2);// Excel表格应该小于5列
            } else if (countRow <= 1) {
                rslt.put("code", -2);// Excel表格应该大于1行
            } else {
                StringBuffer msg = new StringBuffer();
                StringBuffer mg = new StringBuffer();
                boolean isErr = false;
                Map<String, Object> order = null;
                // OrderInfo order = null;
                Cell cell = null;
                for (int i = 1; i < countRow; i++) {
                    order = new HashMap<String, Object>();
                    int num = 0;
                    for (int j = 0; j < countColumn; j++) {

                        cell = sheet.getCell(j, i);
                        String content = null == cell.getContents() ? "" : cell
                                .getContents().trim();
                        switch (j) {
                        // 订单号
                        case 0:
                            try {
                                if (!content.equals("")) {
                                    // order.setOrderId(new Long(content));
                                    order.put("orderId", content);
                                } else {
                                    order.put("orderId", content);
                                    num++;
                                }
                            } catch (Exception e) {
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,订单号有误。").append("<br>");
                                break;
                            }
                            break;
                        case 1:// 物流单号
                            try {
                                if (!content.equals("")) {
                                    // order.setErpOrderId(content);
                                    order.put("erpOrderId", content);
                                } else {
                                    order.put("erpOrderId", content);
                                    num++;
                                }
                            } catch (Exception e) {
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,物流单号有误。").append("<br>");
                                break;
                            }
                            break;
                        case 2:// 物流名称
                            try {
                                if (!content.equals("")) {
                                    // order.setWuliuName(content);
                                    order.put("wuliuName", content);
                                } else {
                                    // 默认快递公司,空的时候,存储过程会报错
                                    order.put("wuliuName", "快递公司");
                                    num++;
                                }
                            } catch (Exception e) {
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,物流名称有误。").append("<br>");
                                break;
                            }
                            break;
                        case 3:// 导入时间
                            try {
                                if (!content.equals("")) {
                                    // order.setFahuoTime(content);
                                    order.put("fahuoTime", content);
                                } else {
                                    order.put("fahuoTime", content);
                                    num++;
                                }
                            } catch (Exception e) {
                                msg.append(
                                        "第" + (i + 1) + "行,第" + (j + 1)
                                                + "列,时间格式有误。").append("<br>");
                                break;
                            }
                            break;
                        default:
                            break;
                        }
                    }
                    order.put("remark", "");
                    order.put("outError", "");
                    if (num < 4) {
                        commonDao.queryForList("OrderInfo.daoruSB", order);
                    }
                    // 批量插入至ORDER_ITEM_TC
                    // commonDao.batchInsert("OrderInfo.daoruSB",order);
                    if (order.get("outError") != null
                            && !("").equals(order.get("outError"))) {
                        msg.append("第" + (i + 1) + "行," + order.get("outError"))
                                .append("<br>");
                    }
                }
                if (StringUtil.isEmpty(msg.toString())) {
                    rslt.put("code", 0);
                } else {
                    rslt.put("code", -1);
                    rslt.put("msg", msg.toString());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rslt;
    }

    @Override
    public List<Map<String, Object>> getChannelIds(EcMultiChannel ccMultiChannel) {
        return commonDao.queryForList("EcMultiChannel.getChannelIds",
                ccMultiChannel);
    }

    public Map<String, Object> getQueryOrderChannellist(
            OrderChannelRelInfo param, int pageNo, int pageSize) {
        boolean lag = true;
        if (param.getOrderBy() != null && "Y".equals(param.getOrderBy())) {
            lag = false;// 组别渠道数据导出
        }
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.getProudctReportFormByGroupIdCount",
                "OrderInfo.getProudctReportFormByGroupId", param, pageNo,
                pageSize, lag);
        List<OrderChannelRelInfo> list = (List<OrderChannelRelInfo>) page
                .getData();
        Map<String, String> map = getPywcatalogChennelMap();
        List<OrderChannelRelInfo> listnew = getPywcatalogChennelList(list,
                param, false);
        page.setData(listnew);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());

        return resMap;
    }

    public Map<String, Object> getQueryOrderChanneWebllist(
            OrderChannelRelInfo param, int pageNo, int pageSize) {
        boolean lag = true;
        if (param.getOrderBy() != null && "N".equals(param.getOrderBy())) {
            lag = false;// 组别渠道数据导出
        }
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.getProudctReportFormByChannelIdCount",
                "OrderInfo.getProudctReportFormByChannelId", param, pageNo,
                pageSize, lag);
        List<OrderChannelRelInfo> list = (List<OrderChannelRelInfo>) page
                .getData();
        Map<String, String> map = getPywcatalogChennelMap();
        List<OrderChannelRelInfo> listnew = getPywcatalogChennelList(list,
                param, true);
        page.setData(listnew);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    public List<OrderChannelRelInfo> getgetQueryOrderChanneParamllistExl(
            OrderChannelRelInfo param) {
        List<OrderChannelRelInfo> list = commonDao.queryForList(
                "OrderInfo.getProudctReportFormByGroupId", param);
        return getPywcatalogChennelList(list, param, false);
    }

    public List<OrderChannelRelInfo> getgetQueryOrderChanneWebParamllistExl(
            OrderChannelRelInfo param) {
        List<OrderChannelRelInfo> list = commonDao.queryForList(
                "OrderInfo.getProudctReportFormByChannelId", param);
        return getPywcatalogChennelList(list, param, true);

    }

    /**
     * 获取ProductYWCatalog排序和id
     * 
     * @return
     */
    public Map<String, String> getPywcatalogChennelMap() {
        Map<String, String> map = new HashMap<String, String>();
        List<ProductAttributeYunWei> list = commonDao
                .queryForList("ProductYWCatalog.getproductywcatalogchennelmap");
        if (list != null) {
            for (int i = 0; i < list.size(); i++) {
                map.put(list.get(i).getKey(), list.get(i).getValue());
            }
            return map;
        } else {
            System.out
                    .println("ProductYWCatalog.getproductywcatalogchennelmap : is null");
            return null;
        }

    }

    /**
     * 拼装数据
     * 
     * @param list
     * @param map
     * @param param
     * @param lag
     *            为ture 查询渠道组别 为false 站点
     * @return
     */
    public List<OrderChannelRelInfo> getPywcatalogChennelList(
            List<OrderChannelRelInfo> list, OrderChannelRelInfo param,
            boolean lag) {
        List<OrderChannelRelInfo> listnew = new ArrayList<OrderChannelRelInfo>();

        for (int i = 0; i < list.size(); i++) {
            OrderChannelRelInfo ofo = list.get(i);
            param.setChannelgroupid(ofo.getChannelgroupid());
            param.setChannelid(ofo.getChannelid());
            // 获取pv uv
            Map<String, Object> maphttp = new HashMap<String, Object>();
            List<OrderChannelRelInfo> listdeil = new ArrayList<OrderChannelRelInfo>();
            maphttp.put("startTime", param.getCommittimebg());
            maphttp.put("endTime", param.getCommittimeeg());
            maphttp.put("groupId", param.getChannelgroupid());
            maphttp.put("channelId", param.getChannelid().toString());
            if (lag) {
                maphttp.put("websiteId", ofo.getWebsiteid());
                param.setWebsiteid(ofo.getWebsiteid());
                // 判断是否有数据
                if (ofo.getOrdercountamt() != null
                        && !"".equals(ofo.getOrdercountamt())) {
                    listdeil = commonDao.queryForList(
                            "OrderInfo.getProudctReportFormByWebsitseDeltis",
                            param);
                } else {
                    ofo.setOrdercount(new BigDecimal(0));
                    ofo.setOrderamt(new BigDecimal(0.0));
                    ofo.setOrdercountamt(new BigDecimal(0.0));
                }

            } else {
                // 判断是否有数据
                if (ofo.getOrdercountamt() != null
                        && !"".equals(ofo.getOrdercountamt())) {
                    listdeil = commonDao.queryForList(
                            "OrderInfo.getProudctReportFormByChanelDeltis",
                            param);
                } else {
                    ofo.setOrdercount(new BigDecimal(0));
                    ofo.setOrderamt(new BigDecimal(0.0));
                    ofo.setOrdercountamt(new BigDecimal(0.0));
                }
            }
            Long l1 = System.currentTimeMillis();
            // String smsUtilUrl =
            // PropertyUtil.getPropertyValue("proreportfm.properties",
            // "ProudctReportForm");
            String smsUtilUrl = (String) PropertyConfigurer
                    .getContextProperty("ProudctReportForm");
            String jsonStr = httpSend(smsUtilUrl, maphttp);
            // String jsonStr ="";
            if (!"".equals(jsonStr)) {
                JSONObject jsonObject = JSONObject.fromObject(jsonStr);
                ofo.setOrderpv(new BigDecimal(jsonObject.get("pv").toString()));
                ofo.setOrderuv(new BigDecimal(jsonObject.get("uv").toString()));
            } else {
                ofo.setOrderpv(new BigDecimal(0));
                ofo.setOrderuv(new BigDecimal(0));
            }
            Long l2 = System.currentTimeMillis();
            System.out.println("-----------------other------------------"
                    + (l2 - l1));
            for (int j = 0; j < listdeil.size(); j++) {
                OrderChannelRelInfo ofodeil = listdeil.get(j);
                BigDecimal count = ofodeil.getOrdercount();
                BigDecimal amt = ofodeil.getOrderamt();
                if (ofodeil == null || ofodeil.getStrproductparam() == null) {
                    continue;
                }
                int key = Integer.valueOf(ofodeil.getStrproductparam());
                switch (key) {
                case 1:
                    ofo.setPredrugscount(count);
                    ofo.setPredrugsamt(amt);
                    break;
                case 2:
                    ofo.setOtccount(count);
                    ofo.setOtcamt(amt);
                    break;
                case 3:
                    ofo.setEquipmentcount(count);
                    ofo.setEquipmentamt(amt);
                    break;
                case 4:
                    ofo.setNourscarecount(count);
                    ofo.setNourscareamt(amt);
                    break;
                case 5:
                    ofo.setFurniturecount(count);
                    ofo.setFurnitureamt(amt);
                    break;
                case 6:
                    ofo.setIppfcount(count);
                    ofo.setIppfamt(amt);
                    break;
                case 7:
                    ofo.setBeautycount(count);
                    ofo.setBeautyamt(amt);
                    break;
                case 8:
                    ofo.setMothercount(count);
                    ofo.setMotheramt(amt);
                    break;
                case 9:
                    ofo.setCmatcmcount(count);
                    ofo.setCmatcmamt(amt);
                    break;
                case 10:
                    ofo.setCosmeticscount(count);
                    ofo.setCosmeticsamt(amt);
                    break;
                case 11:
                    ofo.setFoodcount(count);
                    ofo.setFoodamt(amt);
                    break;
                case 12:
                    ofo.setAndothercount(count);
                    ofo.setAndotheramt(amt);
                    break;
                case 13:
                    ofo.setOolongcount(count);
                    ofo.setOolongamt(amt);
                    break;
                case 14:
                    ofo.setHuirencount(count);
                    ofo.setHuirenamt(amt);
                    break;
                default:
                    break;
                }
            }
            listnew.add(ofo);
            Long l3 = System.currentTimeMillis();
            System.out.println("------------------pipei-----------------"
                    + (l2 - l3));
        }
        return listnew;
    }

    /**
     * 拼装数据
     * 
     * @param list
     * @param map
     * @return
     */
    public List<OrderChannelRelInfo> getPywcatalogChennelListOld(
            List<OrderChannelRelInfo> list, Map<String, String> map) {
        List<OrderChannelRelInfo> listnew = new ArrayList<OrderChannelRelInfo>();
        for (int i = 0; i < list.size(); i++) {
            OrderChannelRelInfo ofo = new OrderChannelRelInfo();
            ofo = list.get(i);
            String[] ofostr = (ofo.getStrproductparam()).split(",");
            for (String ofostri : ofostr) {
                String[] ofostrarry = ofostri.toString().split("_");
                BigDecimal count = new BigDecimal(0);
                BigDecimal amt = new BigDecimal(0);
                if (map.get(ofostrarry[0]) == null
                        || "".equals(map.get(ofostrarry[0]))) {
                    break;
                }
                int key = Integer.valueOf(map.get(ofostrarry[0]));

                if (ofostrarry[2] != null && !"".equals(ofostrarry[2])) {
                    count = new BigDecimal(ofostrarry[2]);
                }
                if (ofostrarry[3] != null && !"".equals(ofostrarry[3])) {
                    amt = new BigDecimal(ofostrarry[3]);
                }
                switch (key) {
                case 1:
                    ofo.setPredrugscount(count);
                    ofo.setPredrugsamt(amt);
                    break;
                case 2:
                    ofo.setOtccount(count);
                    ofo.setOtcamt(amt);
                    break;
                case 3:
                    ofo.setEquipmentcount(count);
                    ofo.setEquipmentamt(amt);
                    break;
                case 4:
                    ofo.setNourscarecount(count);
                    ofo.setNourscareamt(amt);
                    break;
                case 5:
                    ofo.setFurniturecount(count);
                    ofo.setFurnitureamt(amt);
                    break;
                case 6:
                    ofo.setIppfcount(count);
                    ofo.setIppfamt(amt);
                    break;
                case 7:
                    ofo.setBeautycount(count);
                    ofo.setBeautyamt(amt);
                    break;
                case 8:
                    ofo.setMothercount(count);
                    ofo.setMotheramt(amt);
                    break;
                case 9:
                    ofo.setCmatcmcount(count);
                    ofo.setCmatcmamt(amt);
                    break;
                case 10:
                    ofo.setCosmeticscount(count);
                    ofo.setCosmeticsamt(amt);
                    break;
                case 11:
                    ofo.setFoodcount(count);
                    ofo.setFoodamt(amt);
                    break;
                case 12:
                    ofo.setAndothercount(count);
                    ofo.setAndotheramt(amt);
                    break;
                case 13:
                    ofo.setOolongcount(count);
                    ofo.setOolongamt(amt);
                    break;
                case 14:
                    ofo.setHuirencount(count);
                    ofo.setHuirenamt(amt);
                    break;
                default:
                    break;
                }
            }
            listnew.add(ofo);
        }
        return listnew;
    }

    public List<Channel> getChanenelGroupIdValue() {
        return commonDao.queryForList("Channel.getChennelGoupKV");

    }

    /**
     * 发送HTTP请求
     * 
     * @param url
     * @param propsMap
     *            发送的参数
     * @throws IOException
     */
    public static String httpSend(String url, Map<String, Object> propsMap) {
        String responseMsg = "";

        HttpClient httpClient = new HttpClient();
        PostMethod postMethod = new PostMethod(url);// POST请求
        // 参数设置
        Set<String> keySet = propsMap.keySet();
        NameValuePair[] postData = new NameValuePair[keySet.size()];
        int index = 0;
        for (String key : keySet) {
            postData[index++] = new NameValuePair(key, propsMap.get(key)
                    .toString());
        }
        postMethod.addParameters(postData);
        try {
            httpClient.executeMethod(postMethod);// 发送请求
            // 读取内容
            byte[] responseBody = postMethod.getResponseBody();
            // 处理返回的内容
            responseMsg = URLDecoder.decode(new String(responseBody), "UTF-8");
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            postMethod.releaseConnection();// 关闭连接
        }
        return responseMsg;
    }

    @Override
    public Map<String, Object> takeOffRefundList(AccountLog param, int pageNo,
            int pageSize) {
        // TODO Auto-generated method stub
        JspPage page = (JspPage) commonDao.pageQuery(
                "AccountLog.getAccountLogCountForCon",
                "AccountLog.getAccountLogListForCon", param, pageNo, pageSize,
                false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public Map<String, Object> takeOffRefundListDetales(AccountLog param,
            int pageNo, int pageSize) {
        // TODO Auto-generated method stub
        JspPage page = (JspPage) commonDao.pageQuery(
                "AccountLog.getAccountLogCountDetails",
                "AccountLog.getAccountLogListDetails", param, pageNo, pageSize,
                false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public void saveOrderPaymentTypeList(
            OrderPaymentTypeList orderPaymentTypeList) {
        commonDao.save("orderPaymentTypeList.saveOrderPaymentTypeList",
                orderPaymentTypeList);
    }

    @Override
    public void saveOrderlog(OrderLog orderLog) {
        commonDao.save("OrderLog.save", orderLog);
    }

    @Override
    public Map<String, Object> orderTJList(OrderInfo param, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.orderTJListCount", "OrderInfo.orderTJList", param,
                pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public Map<String, Object> orderTJGoodsList(OrderItem param) {
        List<OrderItem> list = commonDao.queryForList(
                "OrderItem.orderTJGoodsList", param);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("rows", list);
        return resMap;
    }

    @Override
    public Map<String, Object> getQueryRefund(OrderInfo param, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "OrderInfo.getQueryRefundCount", "OrderInfo.getQueryRefund",
                param, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public OrderPriceChangeLog save(OrderPriceChangeLog opcl) {
        // TODO Auto-generated method stub
        commonDao.save("OrderPriceChangeLog.save", opcl);
        return opcl;
    }

    @Override
    public List<OrderPriceChangeLog> getLatestLog(OrderPriceChangeLog opcl) {
        // TODO Auto-generated method stub
        return commonDao.queryForList("OrderPriceChangeLog.getLatestLog", opcl);
    }

    @Override
    public List<String> getUserLoginType() {
        // TODO Auto-generated method stub
        return commonDao.queryForList("OrderInfo.getUserLoginType");
    }

    @Override
    public List<Object> queryForMemberEcCouponsList(EcCoupons ecCoupons) {

        List<EcCoupons> couponsList = commonDao.queryForList(
                "ecCoupons.getMemberEcCouponsList", ecCoupons);

        List<Object> comboxList = new ArrayList<Object>();
        Map<String, Object> defaultValue = new HashMap<String, Object>();
        defaultValue.put("id", "");
        defaultValue.put("text", "请选择");
        defaultValue.put("selected", true);
        comboxList.add(defaultValue);
        for (EcCoupons ecCoupons2 : couponsList) {
            Map<String, Object> typeMap = new HashMap<String, Object>();
            typeMap.put("id", ecCoupons2.getCouponNo());
            typeMap.put("text", ecCoupons2.getCouponTypeName());
            comboxList.add(typeMap);
        }
        return comboxList;
    }

    @Override
    public String checkTcMessageOrderId(String orderId) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("orderId", orderId);
        /*-----查询order_info表,订单编号总数(等于0:不存在此订单不可用,大于0:存在此订单可用)------------------*/
        Integer resOrderInfo = (Integer) commonDao.queryForObject(
                "tcMessage.checkOrderInfo", map);
        /*-----查询ec_tc_message表,订单编号总数(等于0:不存在此订单可用,大于0:存在此订单重复无可用)--------*/
        Integer resEcTcMessage = (Integer) commonDao.queryForObject(
                "tcMessage.checkEcTcMessage", map);
        if (resOrderInfo == 0) {
            return "oifalse";
        } else if (resOrderInfo > 0 && resEcTcMessage == 0) {
            return "oitrue";
        } else if (resEcTcMessage == 0) {
            return "etmtrue";
        } else if (resEcTcMessage > 0) {
            return "etmfalse";
        }
        return "";
    }

    public Map<String, Object> getEjfOrders(OrderInfo param, int pageNo,
            int pageSize) {
        JspPage page = (JspPage) commonDao.pageQuery(
                "EjfOrderInfo.getEjfOrdersCount", "EjfOrderInfo.getEjfOrders",
                param, pageNo, pageSize, false);
        Map<String, Object> resMap = new HashMap<String, Object>();
        resMap.put("total", page.getTotalCount());
        resMap.put("rows", page.getResult());
        return resMap;
    }

    @Override
    public void updateEjfOrderStarte(OrderInfo orderinfo) {
        commonDao.update("EjfOrderInfo.updateEjfState", orderinfo);

    }

}

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="OrderInfo">

    <typeAlias alias="OrderInfo" type="com.founder.ec.order.model.OrderInfo" />
    <typeAlias alias="OrderQueryInfo" type="com.founder.ec.order.model.OrderQueryInfo" />
    <typeAlias alias="OrderQueryRslt" type="com.founder.ec.order.model.OrderQueryRslt" />
    <typeAlias alias="OrderDealRslt" type="com.founder.ec.order.model.OrderQueryRslt" />
    <typeAlias alias="OrderPaymentInfo"
        type="com.founder.ec.order.model.OrderPaymentInfo" />
    <typeAlias alias="ReportCommon" type="com.founder.ec.member.model.ReportCommon" />

    <typeAlias alias="MemberOrder" type="com.founder.ec.order.model.MemberOrder" />

    <typeAlias alias="OrderCall" type="com.founder.ec.callcenter.model.OrderCall" />
    <typeAlias alias="OrderPrize" type="com.founder.ec.order.model.OrderPrize" />
     <!-- 订单渠道统计 -->
    <typeAlias alias="OrderChannelRelInfo" type="com.founder.ec.order.model.OrderChannelRelInfo" />
    <resultMap id="orderInfoResult" class="OrderInfo">
        <result column="ORDER_ID" property="orderId" />
        <result column="ERP_ORDER_ID" property="erpOrderId" />
        <result column="MEMBER_ID" property="memberId" />
        <result column="PARENT_ORDER_ID" property="parentOrderId" />
        <result column="MULTI_CHANNEL_ID" property="multiChannelId" />
        <result column="IS_PAID" property="isPaid" />
        <result column="PAYMENT_TYPE_ID" property="paymentTypeId" />
        <result column="PAYMENT_NO" property="paymentNo" />
        <result column="PAID_TIME" property="paidTime" />
        <result column="OFFLINE_PAID_USER_ID" property="offlinePaidUserId" />
        <result column="LOGISTIC_COMPANY_ID" property="logisticCompanyId" />
        <result column="ORDER_STATE" property="orderState" />
        <result column="ORDER_OUT_STATE" property="orderOutState" />
        <result column="LIMIT_DATE" property="limitDate" />
        <result column="SKU_FEE" property="skuFee" />
        <result column="return_type" property="returnType" />
        <result column="return_value" property="returnValue" />
        <result column="DISCOUNT_FEE" property="discountFee" />
        <result column="ORDER_POINTS" property="orderPoints" />
        <result column="ORDER_VOUCHERS" property="orderVouchers" />
        <result column="OTHER_DISCOUNTS" property="otherDiscounts" />
        <result column="DELIVERY_FEE" property="deliveryFee" />
        <result column="ORDER_FEE" property="orderFee" />
        <result column="ORDER_PAY_FEE" property="orderPayFee" />
        <result column="ORDER_MSG" property="orderMsg" />
        <result column="ORDER_NOTES" property="orderNotes" />
        <result column="AUDIT_NOTES" property="auditNotes" />
        <result column="AUDIT_USER_ID" property="auditUserId" />
        <result column="AUDIT_TIME" property="auditTime" />
        <result column="IS_LOCK" property="isLock" />
        <result column="LOCK_TIME" property="lockTime" />
        <result column="LOCK_USER_ID" property="lockUserId" />
        <result column="COMMIT_TIME" property="commitTime" />
        <result column="FINISH_TIME" property="finishTime" />
        <result column="CANCEL_TIME" property="cancelTime" />
        <result column="CANCEL_USER_ID" property="cancelUserId" />
        <result column="CANCEL_NOTES" property="cancelNotes" />
        <result column="SKU_WEIGHTS" property="skuWeights" />
        <result column="IS_INTO_ERP" property="isIntoErp" />
        <result column="INTO_TIME" property="intoTime" />
        <result column="RECEIVE_USER" property="receiveUser" />
        <result column="PROVINCE_ID" property="provinceId" />
        <result column="CITY_ID" property="cityId" />
        <result column="AREA_ID" property="areaId" />
        <result column="RECEIVE_ADDRESS" property="receiveAddress" />
        <result column="RECEIVE_FULL_ADDRESS" property="receiveFullAddress" />
        <result column="RECEIVE_POST" property="receivePost" />
        <result column="RECEIVE_TEL" property="receiveTel" />
        <result column="RECEIVE_MOBILE" property="receiveMobile" />
        <result column="RECEIVE_EMAIL" property="receiveEmail" />
        <result column="RECEIVE_DATE_TYPE" property="receiveDateType" />
        <result column="RECEIVE_TIME_TYPE" property="receiveTimeType" />
        <result column="INVOICE_TYPE" property="invoiceType" />
        <result column="INVOICE_TITLE" property="invoiceTitle" />
        <result column="INVOICE_CONTENT" property="invoiceContent" />
        <result column="INVOICE_TAX_NO" property="invoiceTaxNo" />
        <result column="INVOICE_TAX_ADDRESS" property="invoiceTaxAddress" />
        <result column="INVOICE_TAX_TEL" property="invoiceTaxTel" />
        <result column="INVOICE_TAX_BANK" property="invoiceTaxBank" />
        <result column="INVOICE_TAX_ACCOUNT" property="invoiceTaxAccount" />
        <result column="IS_DELETE" property="isDelete" />
        <result column="ADD_USER_ID" property="addUserId" />
        <result column="ADD_TIME" property="addTime" />
        <result column="EDIT_USER_ID" property="editUserId" />
        <result column="EDIT_TIME" property="editTime" />
        <result column="MULTI_CHANNEL_ORDER_ID" property="multiChannelOrderId" />
        <result column="MULTI_CHANNEL_ORDER_BATCH_ID" property="multiChannelOrderBatchId" />
        <result column="PAID_FEE" property="paidFee" />
        <result column="INVOICE_CONTENT_TYPE" property="invoiceContentType" />
        <result column="IS_TC" property="isTc" />
        <result column="payment_mode" property="paymentMode" />
        <result column="TAX_FEE" property="taxFee" />
    </resultMap>
<!--     肾宝片导出 -->
   <resultMap class="OrderInfo" id="orderInfoResultShenBao">
        <result column="ORDER_ID" property="orderId" />
        <result column="ERP_ORDER_ID" property="erpOrderId" />
        <result column="company_name" property="companyName" />
        <result column="ORDER_FEE" property="orderFee" />
        <result column="ORDER_STATE" property="orderState" />
        <result column="payment_mode" property="paymentMode" />
        <result column="GOODS_NO" property="goodsNo" />
        <result column="GOODS_NAME" property="goodsName" />
        <result column="GOODS_AMOUNT" property="goodsAmount" />
        <result column="RECEIVE_USER" property="receiveUser" />
        <result column="RECEIVE_MOBILE" property="receiveMobile" />
        <result column="RECEIVE_FULL_ADDRESS" property="receiveFullAddress" />
        <result column="page" property="page" />
        <result column="goods_sum_fee" property="goodsSumFee" />
        <result column="daochu" property="daochu" />
    </resultMap>

    <resultMap id="orderInfoResultWebs" extends="orderInfoResult"
        class="OrderInfo">
        <result column="codeValue" property="codeValue" />
        <result column="codeNo" property="codeNo" />
        <result column="paymentTypeName" property="paymentTypeName" />
        <result column="companyNo" property="companyNo" />
        <result column="companyName" property="companyName" />
        <result column="paymentTypeLogo" property="paymentTypeLogo" />
        <result column="paymentTypeNo" property="paymentTypeNo" />
        <result column="website" property="website" />
        <result column="is_eval" property="iseval" />
        <result column="goods_seller" property="goodsSeller" />
    </resultMap>

    <resultMap id="orderInfoResultWebsNew" extends="orderInfoResultWebs"
        class="OrderInfo">
        <result column="stock_name" property="stockName" />
        <result column="tax_Fee" property="taxFee" />
        <result column="coupon_no" property="couponNo" />
    </resultMap>

    <resultMap id="orderInfoByIdResult" extends="orderInfoResult"
        class="OrderInfo">
        <result column="code_no" property="codeNo" />
        <result column="COUPON_NO" property="couponNo" />
    </resultMap>

    <resultMap id="orderAuditQueryRslt" class="OrderQueryRslt">
        <result column="order_id" property="orderId" />
        <result column="erp_order_id" property="erpOrderId" />
        <result column="is_lock" property="isLock" />
        <result column="delivery_fee" property="deliveryFee" />
        <result column="order_fee" property="orderFee" />
        <result column="order_points" property="orderPoints" />
        <result column="order_vouchers" property="orderVouchers" />
        <result column="sku_fee" property="skuFee" />
        <result column="discount_fee" property="discountFee" />
        <result column="receive_full_address" property="receiveFullAddress" />
        <result column="paid_time" property="paidTime" />
        <result column="commit_time" property="commitTime" />
        <result column="payment_mode" property="paymentMode" />
        <result column="lock_user_name" property="lockUserName" />
        <result column="member_real_name" property="memberRealName" />
        <result column="member_login_name" property="memberLoginName" />
        <result column="order_state_name" property="orderStateName" />
        <result column="payment_type_name" property="paymentTypeName" />
        <result column="limit_date" property="limitDate" />
        <result column="lock_user_id" property="lockUserId" />
        <result column="is_paid" property="isPaid" />
        <result column="member_id" property="memberId" />
        <result column="url_from_no" property="urlFromNo" />
        <result column="OTHER_DISCOUNTS" property="otherDiscounts" />
        <result column="PAID_FEE" property="paidFee" />
        <result column="ORDER_PAY_FEE" property="orderPayFee" />

        <result column="province_id" property="provinceId" />
        <result column="city_id" property="cityId" />
        <result column="area_id" property="areaId" />

        <result column="IS_TC" property="isTc" />
        <result column="company_name" property="companyName" />
    </resultMap>
    <resultMap id="orderDealQueryRslt" class="OrderDealRslt">
        <result column="order_id" property="orderId" />
        <result column="erp_order_id" property="erpOrderId" />
        <result column="is_lock" property="isLock" />
        <result column="delivery_fee" property="deliveryFee" />
        <result column="order_fee" property="orderFee" />
        <result column="order_points" property="orderPoints" />
        <result column="order_vouchers" property="orderVouchers" />
        <result column="sku_fee" property="skuFee" />
        <result column="discount_fee" property="discountFee" />
        <result column="receive_full_address" property="receiveFullAddress" />
        <result column="paid_time" property="paidTime" />
        <result column="commit_time" property="commitTime" />
        <result column="payment_mode" property="paymentMode" />
        <result column="lock_user_name" property="lockUserName" />
        <result column="member_real_name" property="memberRealName" />
        <result column="refund_notes" property="refundOrderNotes" />
        <result column="member_login_name" property="memberLoginName" />
        <result column="order_state_name" property="orderStateName" />
        <result column="payment_type_name" property="paymentTypeName" />
        <result column="limit_date" property="limitDate" />
        <result column="lock_user_id" property="lockUserId" />
        <result column="is_paid" property="isPaid" />
        <result column="member_id" property="memberId" />
        <result column="url_from_no" property="urlFromNo" />
        <result column="OTHER_DISCOUNTS" property="otherDiscounts" />
        <result column="PAID_FEE" property="paidFee" />
        <result column="ORDER_PAY_FEE" property="orderPayFee" />

        <result column="province_id" property="provinceId" />
        <result column="city_id" property="cityId" />
        <result column="area_id" property="areaId" />

        <result column="IS_TC" property="isTc" />
        <result column="company_name" property="companyName" />
    </resultMap>

    <resultMap id="orderQueryRsltNew" class="OrderQueryRslt">
        <result column="order_id" property="orderId" />
        <result column="order_state" property="orderState" />
        <result column="member_id" property="memberId" />
        <result column="member_login_name" property="memberLoginName" />
        <result column="member_real_name" property="memberRealName" />
        <result column="order_state_name" property="orderStateName" />
        <result column="sku_fee" property="skuFee" />    
        <result column="OTHER_DISCOUNTS" property="otherDiscounts" />
        <result column="order_points" property="orderPoints" />
        <result column="order_vouchers" property="orderVouchers" />    
        <result column="discount_fee" property="discountFee" />
        <result column="delivery_fee" property="deliveryFee" />
        <result column="order_fee" property="orderFee" />    
        <result column="ORDER_PAY_FEE" property="orderPayFee" />
        <result column="PAID_FEE" property="paidFee" />
        <result column="IS_CHECK_BILLS" property="isCheckBills" />
        <result column="check_bill_user_name" property="checkBillUserName" />
        <result column="CHECK_BILL_TIME" property="checkBillTime" />
        <result column="channel_name" property="multiChannelName" />
        <result column="commit_time" property="commitTime" />
        <result column="payment_mode" property="paymentMode" />
        <result column="payment_type_name" property="paymentTypeName" />
        <result column="payment_no" property="paymentNo" />
        <result column="paid_time" property="paidTime" />
        <result column="audit_time" property="auditTime" />
        <result column="audit_user_name" property="auditUserName" />
        <result column="sku_weights" property="skuWeights" />
        <result column="cancel_notes" property="cancelNotes" />        
        <result column="url_from_no" property="urlFromNo" />
    </resultMap>
    
    <resultMap id="orderQueryRefund" class="OrderQueryRslt">
        <result column="order_id" property="orderId" />
        <result column="order_state" property="orderState" />
        <result column="member_id" property="memberId" />
        <result column="member_login_name" property="memberLoginName" />
        <result column="member_real_name" property="memberRealName" />
        <result column="order_state_name" property="orderStateName" />
        <result column="sku_fee" property="skuFee" />    
        <result column="delivery_fee" property="deliveryFee" />
        <result column="order_fee" property="orderFee" />    
        <result column="ORDER_PAY_FEE" property="orderPayFee" />
        <result column="PAID_FEE" property="paidFee" />
        <result column="IS_CHECK_BILLS" property="isCheckBills" />
        <result column="check_bill_user_name" property="checkBillUserName" />
        <result column="CHECK_BILL_TIME" property="checkBillTime" />
        <result column="channel_name" property="multiChannelName" />
        <result column="commit_time" property="commitTime" />
        <result column="payment_mode" property="paymentMode" />
        <result column="payment_type_name" property="paymentTypeName" />
        <result column="payment_no" property="paymentNo" />
        <result column="paid_time" property="paidTime" />
        <result column="sku_weights" property="skuWeights" />
    </resultMap>
    

    <resultMap id="orderAuditDetailRslt" class="OrderInfo"
        extends="orderInfoResult">
        <result column="real_name" property="memberRealName" />
        <result column="login_name" property="memberLoginName" />
        <result column="rank_name" property="memberRankName" />
        <result column="payment_type_name" property="paymentTypeName" />
        <result column="company_name" property="companyName" />
        <result column="goods_seller" property="goodsSeller" />
    </resultMap>

    <resultMap id="orderQueryDetailRslt" class="OrderInfo"
        extends="orderInfoResult">
        <result column="real_name" property="memberRealName" />
        <result column="login_name" property="memberLoginName" />
        <result column="user_real_name" property="auditUserName" />
        <result column="payment_type_name" property="paymentTypeName" />
        <result column="state_name" property="stateName" />
    </resultMap>

    <resultMap id="orderPaymentInfo" class="OrderPaymentInfo">
        <result column="ORDER_ID" property="orderId" />
        <result column="REAL_NAME" property="memberName" />
        <result column="MEMBER_ID" property="memberId" />
        <result column="PAYMENT_NO" property="paymentNo" />
        <result column="PAYMENT_TYPE_Name" property="paymentTypeName" />
        <result column="USER_Name" property="offlinePaidUser" />
        <result column="PAID_TIME" property="paidTime" />
        <result column="PAID_FEE" property="paidFee" />
        <result column="COMPANY_NAME" property="logisticCompany" />
    </resultMap>

    <resultMap id="orderReportResult" class="OrderInfo">
        <result column="code_value" property="codeValue" />
        <result column="code_order" property="codeOrder" />
        <result column="countId" property="countId" />
        <result column="countFee" property="countFee" />
    </resultMap>

    <resultMap id="orderInfoByIdForTrackResult" class="OrderInfo">
        <result column="order_id" property="orderId" />
        <result column="order_fee" property="orderFee" />
        <result column="delivery_fee" property="deliveryFee" />
        <result column="province_name" property="provinceName" />
        <result column="city_name" property="cityName" />
        <result column="member_id" property="memberId" />
    </resultMap>

    <!-- 销售统计Map -->
    <resultMap id="saleStatisticsMap" class="OrderInfo">
        <result column="ORDER_ID" property="orderId" />
        <result column="ORDER_FEE" property="orderFee" /><!--订单金额 -->
        <result column="PAID_FEE" property="paidFee" /><!--订单支付金额 -->
        <result column="IS_PAID" property="isPaid" />   <!-- 支付状态 N ,y -->
        <result column="paidTime" property="paidTime" />
        <result column="paidFee" property="paidFee" />
        <result column="orderStateStr" property="orderStateStr" />
        <result column="COMMIT_TIME" property="commitTime" />
        <result column="RECEIVE_FULL_ADDRESS" property="receiveFullAddress" /><!-- 
            收货地址 -->
        <result column="URL_FROM_NO" property="urlFromNo" /><!-- 来源 -->
        <result column="paymentMode" property="paymentMode" /><!-- 付款方式 -->

        <result column="goodsNo" property="goodsNo" /><!-- 商品编码 -->
        <result column="goodsName" property="goodsName" /><!-- 商品名称 -->
        <result column="paymentType" property="paymentType" /><!-- 支付方式 -->
        <result column="loginName" property="loginName" /><!-- 登入名 -->
        <result column="goodsAmount" property="goodsAmount" /><!-- 商品数量 -->
        <result column="goodsPrice" property="goodsPrice" /><!-- 商品价格 -->
        <result column="discountCode" property="discountCode" /><!-- 优惠券代码 -->
        <result column="discountType" property="discountType" /><!-- 优惠方式 -->
        <result column="oneGoodsSumPrice" property="oneGoodsSumPrice" /><!-- 销售金额=商品数量*商品金额 -->
        <result column="ORDER_PAY_FEE" property="orderPayFee" /><!-- 待付金额 -->
        <result column="receive_user" property="receiveUser" />
        <result column="receive_mobile" property="receiveMobile" />
        <result column="catalogId" property="catalogId" /><!-- 运维id -->
        <result column="catalogName" property="catalogName" />
        <result column="isvalid" property="isvalid" /><!-- 是否有效 -->
        <result column="goods_sum_fee" property="goodsSumFee" />
        <result column="saleGoodsCostPrice" property="saleGoodsCostPrice" />
    </resultMap>



    <!-- 根据评论查看该商品 -->
    <resultMap id="orderInfoAndGoodsMap" class="OrderInfo">
        <result column="PRODUCT_ID" property="produceId" />
        <result column="GOODS_ID" property="goodsId" />
        <result column="MEMBER_ID" property="memberId" />
    </resultMap>

    <!--订单查询的数据统计 -->  
    <resultMap id="totalCount" class="OrderInfo">
        <result column="orderPointsMoney" property="orderPointsMoney" />   <!--积分总金额-->
        <result column="orderVouchersMoney" property="orderVouchersMoney" />  <!--优惠券总金额-->
        <result column="returnGoods" property="returnGoods" />  <!--退货总金额-->
        <result column="totalNum" property="totalNum" />  <!--订单总条数-->
        <result column="totalMoney" property="totalMoney" />  <!--订单总金额-->
        <result column="aveNum" property="aveNum" />   <!--总客户数-->
        <result column="avegoods" property="avegoods" />   <!--平均商品数-->
        <result column="costFee" property="goodsPrice" />  <!--成本价-->
    </resultMap>
    
    <!--order_work的数据统计  add by yangyue 2015-07-29-->  
    <resultMap id="orderWorkTotalCount" class="OrderInfo">
        <result column="totalNum" property="totalNum" />  <!--订单总条数-->
        <result column="totalMoney" property="totalMoney" />  <!--订单总金额-->
        <result column="aveNum" property="aveNum" />   <!--总客户数-->
        <result column="avegoods" property="avegoods" />   <!--平均商品数-->
        <result column="costFee" property="goodsPrice" />  <!--成本价-->
    </resultMap>

    <!--订单查询的数据统计,第一次下单 -->
   <resultMap id="totalCountFirstMap" class="OrderInfo">
           <result column="orderPointsMoneyFirst" property="orderPointsMoneyFirst" />   <!--积分总金额-->
        <result column="orderVouchersMoneyFirst" property="orderVouchersMoneyFirst" />  <!--优惠券总金额-->
        <result column="returnGoodsFirst" property="returnGoodsFirst" />  <!--退货总金额-->
        <result column="totalNumFirst" property="totalNumFirst" />
        <result column="totalMoneyFirst" property="totalMoneyFirst" />
        <result column="aveNumFirst" property="aveNumFirst" />
        <result column="avegoodsFirst" property="avegoodsFirst" />
        <result column="costFeeFirst" property="goodsPriceFirst" />
    </resultMap>

    <!-- 用于cps查询 -->
    <resultMap id="cpsOrderInformationMap" class="OrderInfo">
        <result column="COMMIT_TIME" property="commitTime" /><!-- 下单时间 -->
        <result column="PAID_TIME" property="paidTime" /><!-- 支付时间 -->
        <result column="ORDER_FEE" property="orderFee" /><!--订单金额 -->
        <result column="delivery_fee" property="deliveryFee" /><!-- 运费 -->
        <result column="ORDER_ID" property="orderId" /><!-- 订单ID/编号 -->
        <result column="orderStateStr" property="orderStateStr" /><!-- 订单状态 -->
        <result column="IS_PAID" property="isPaid" />   <!-- 支付状态 N ,y -->
        <result column="paymentType" property="paymentType" /><!-- 支付方式 -->
        <result column="SKU_FEE" property="skuFee" /><!-- 货款金额 -->
        <result column="COUPON_NO" property="couponNo" /><!-- 劵号什么 -->
        <result column="wi" property="wi" /><!-- cps标志 -->
        <result column="cid" property="cid" /><!-- cps标志 -->
        <result column="order_vouchers" property="orderVouchers" />
        <result column="ispaidStr" property="ispaidStr" />
        <result column="GOODS_NO" property="goodsNo" />
        <result column="GOODS_NAME" property="goodsName" />
        <result column="GOODS_AMOUNT" property="goodsAmount" />
        <result column="GOODS_PRICE" property="goodsPrice" />
        <result column="discount_fee" property="discountFee" />
        <result column="GOODS_COMM" property="goodsComm" />
        <result column="multi_channel_id" property="multiChannelId" />
    </resultMap>

    <resultMap class="OrderInfo" id="kuaidi100Map">
        <result column="ORDER_ID" property="orderId" />
        <result column="ERP_ORDER_ID" property="erpOrderId" />
        <result column="companyNo" property="companyNo" />
    </resultMap>

    <resultMap id="workOrderInfoResult" class="OrderInfo"
        extends="orderInfoResult">
        <result column="buyGoods" property="buyGoods" />
        <result column="workGoodsCostPrice" property="workGoodsCostPrice" />
        <result column="user_real_name" property="userRealName" />
        <result column="user_name" property="userName" />
        <result column="company_name" property="companyName" />
    </resultMap>

    <resultMap id="OrderCallMap" class="OrderCall" >
        <result column="orderId" property="orderId" />
        <result column="orderLogusticId" property="orderLogusticId" />    
        <result column="orderLogusticCompanyId" property="orderLogusticCompanyId" />    
        <result column="orderMultiChannel" property="orderMultiChannel" />    
        <result column="orderCustomerName" property="orderCustomerName" />    
        <result column="orderIsEffective" property="orderIsEffective" />    
        <result column="orderGoodsAllFee" property="orderGoodsAllFee" />    
        <result column="orderDeliveryFee" property="orderDeliveryFee" />    
        <result column="orderDiscountFee" property="orderDiscountFee" />    
        <result column="orderFee" property="orderFee" />    
        <result column="orderReceiveTel" property="orderReceiveTel" />    
        <result column="orderAreaId" property="orderAreaId" />    
        <result column="orderState" property="orderState" />    
        <result column="orderIsPaid" property="orderIsPaid" />    
        <result column="orderPaymentTypeId" property="orderPaymentTypeId" />    
        <result column="orderSourceMedia" property="orderSourceMedia" />    
        <result column="orderPaymentMode" property="orderPaymentMode" />    
        <result column="orderFinishTime" property="orderFinishTime" />    
    </resultMap>
    
    <resultMap id="myOrderCallMap" class="OrderCall" >
        <result column="orderId" property="orderId" />
        <result column="orderLogusticId" property="orderLogusticId" />    
        <result column="loginName" property="loginName" />    
        <result column="isvalid" property="isvalid" />    
        <result column="buyGoods" property="buyGoods" />    
        <result column="buyGoodsFee" property="buyGoodsFee" />
        <result column="deliveryFee" property="deliveryFee" />
        <result column="orderFee" property="orderFee" />
        <result column="commissionFee" property="commissionFee" />
    </resultMap>
    
    <resultMap id="myCallGoodsMap" class="OrderCall" >
        <result column="goodsNo" property="goodsNo" />
        <result column="goodsName" property="goodsName" />    
        <result column="goodsPrice" property="goodsPrice" />    
        <result column="sailCount" property="sailCount" />    
        <result column="sailFee" property="sailFee" />    
        <result column="commissionType" property="commissionType" />
        <result column="commission" property="commission" />
        <result column="commissionFee" property="commissionFee" />
    </resultMap>
<!--呼叫中心我的业绩数据统计-->
    <resultMap id="totalCall" class="OrderCall">
        <result column="totalNum" property="totalNum" />
        <result column="totalMoney" property="totalMoney" />
        <result column="myCustomerCount" property="myCustomerCount" />
        <result column="myCommission" property="myCommission" />
        <result column="myCallSuccess" property="myCallSuccess" />
        <result column="myOrderSuccess" property="myOrderSuccess" />
    </resultMap>
    
    <!-- not exist in ERP order -->
    
    <resultMap id="unfindERPOrderMap" class="OrderInfo">
        <result column="order_id" property="orderId" />
        <result column="multiChannel" property="website" />
        <result column="isValid" property="isvalid" />
        <result column="isIntoErp" property="isIntoErp" />
        <result column="buyGoods" property="buyGoods" />
        <result column="goodsSum" property="goodsAmount" />
        <result column="order_fee" property="orderFee" />
        <result column="codeValue" property="codeValue" />
        <result column="paymentMode" property="paymentMode" />
        <result column="isPaid" property="isPaid" />
        <result column="paymentTypeName" property="paymentTypeName" />
        <result column="committime" property="commitTime" />
        <result column="auditTime" property="auditTime" />
        <result column="isLock" property="isLock" />
        <result column="lockUserId" property="userName" />
        <result column="message" property="returnValue" />
        <result  column="paid_time"   property="paidTime"/>
    </resultMap>
    
    
    <resultMap id="OrderChannelRelInfo" class="OrderChannelRelInfo">
        <result column="channelgroupid" property="channelgroupid" />
        <result column="channelgroupname" property="channelgroupname" />
        <result column="channelid" property="channelid" />
        <result column="channelname" property="channelname" />
        <result column="websiteid" property="websiteid" />
        <result column="websitename" property="websitename" />
        <result column="ordercount" property="ordercount" />
        <result column="orderamt" property="orderamt" />
        <result column="ordercountamt" property="ordercountamt" />
        <result column="orderpv" property="orderpv" />
        <result column="orderuv" property="orderuv" />
        <result column="strproductparam" property="strproductparam" />
    </resultMap>
    <resultMap id="OrderChannelWebRelInfo" class="OrderChannelRelInfo">
        <result column="channelid" property="channelid" />
        <result column="channelname" property="channelname" />
        <result column="websiteid" property="websiteid" />
        <result column="ordercount" property="ordercount" />
        <result column="orderamt" property="orderamt" />
        <result column="orderpv" property="orderpv" />
        <result column="orderuv" property="orderuv" />
        <result column="productparam" property="strproductparam" />
    </resultMap>

    <!-- 前台weblist专用 慎用 -->
    <resultMap id="orderInfoResultWebsAndTc" extends="orderInfoResult"
        class="OrderInfo">
        <result column="codeValue" property="codeValue" />
        <result column="codeNo" property="codeNo" />
        <result column="paymentTypeName" property="paymentTypeName" />
        <result column="companyNo" property="companyNo" />
        <result column="companyName" property="companyName" />
        <result column="paymentTypeLogo" property="paymentTypeLogo" />
        <result column="paymentTypeNo" property="paymentTypeNo" />
        <result column="website" property="website" />
        <result column="is_eval" property="iseval" />
        <result column="isItemTc" property="isItemTc" />
    </resultMap>
    
    <resultMap id="orderObjMap"  class="OrderInfo">
        <result column="order_id" property="orderId" />
        <result column="member_id" property="memberId" />
    </resultMap>
    
    <!-- 根据订单id查询订单信息 -->    
    <resultMap class="com.founder.ec.order.model.OrderInfo" id="singleOrderInfoMap">
        <result column="order_id" property="orderId" />
        <result column="order_fee" property="orderFee" />
        <result column="sku_fee" property="skuFee" />
        <result column="delivery_fee" property="deliveryFee" />
        <result column="discount_fee" property="discountFee" />
        <result column="order_points" property="orderPoints" />
        <result column="order_vouchers" property="orderVouchers" />
        <result column="other_discounts" property="otherDiscounts" />
        <result column="coupon_no" property="couponNo" />
        <result column="order_state" property="orderState" />
        <result column="payment_mode" property="paymentMode" />
        <result column="commit_time" property="commitTime" />
        <result column="multi_channel_id" property="multiChannelId" />    
    </resultMap>
    
    <!-- 用于分页查询的头部 -->
    <sql id="be_fy">
        select *
        from (select row_.*, rownum rownum_
        from (
    </sql>
    <!-- 用于分页的尾部 -->
    <sql id="ed_fy">
        ) row_
        where 1=1
        <isNotEmpty prepend="and" property="endRow">
                 <![CDATA[
                     rownum <= #endRow#
                 ]]>
        </isNotEmpty>
        )
        where 1=1
        <isNotEmpty prepend="and" property="startRow">
                 <![CDATA[
                     rownum_ >= #startRow#
                 ]]>
        </isNotEmpty>
    </sql>


    <insert id="save" parameterClass="OrderInfo">
        insert into ORDER_INFO (ORDER_ID, ERP_ORDER_ID, MEMBER_ID,
        PARENT_ORDER_ID,
        MULTI_CHANNEL_ID, MULTI_CHANNEL_ORDER_BATCH_ID,
        MULTI_CHANNEL_ORDER_ID,
        UPLOAD_USER_ID, UPLOAD_TIME, PAYMENT_TYPE_ID,
        PAYMENT_NO,
        PAID_TIME, OFFLINE_PAID_USER_ID, LOGISTIC_COMPANY_ID,
        ORDER_STATE,
        ORDER_OUT_STATE,
        LIMIT_DATE,
        RETURN_TYPE, RETURN_VALUE,
        ORDER_MSG, ORDER_NOTES, AUDIT_NOTES, AUDIT_USER_ID, AUDIT_TIME,
        IS_LOCK,
        LOCK_TIME,
        LOCK_USER_ID, COMMIT_TIME, FINISH_TIME, CANCEL_TIME,
        CANCEL_USER_ID, CANCEL_NOTES,
        SKU_WEIGHTS, INTO_TIME, RECEIVE_USER,
        PROVINCE_ID, CITY_ID, AREA_ID,
        RECEIVE_ADDRESS, RECEIVE_FULL_ADDRESS,
        RECEIVE_POST, RECEIVE_TEL,
        RECEIVE_MOBILE,
        RECEIVE_EMAIL, INVOICE_TITLE,
        INVOICE_CONTENT, INVOICE_TAX_NO, INVOICE_TAX_ADDRESS,
        INVOICE_TAX_TEL,
        INVOICE_TAX_BANK, INVOICE_TAX_ACCOUNT, ADD_USER_ID, ADD_TIME,
        EDIT_USER_ID,
        EDIT_TIME, GOODS_BATCH_NO, COUPON_TYPE_US_ID, COUPON_NO,URL_FROM_NO,ORDER_NEW
        <isNotNull prepend="," property="isUpload">
            IS_UPLOAD
        </isNotNull>
        <isNotNull prepend="," property="isPaid">
            IS_PAID
        </isNotNull>
        <isNotNull prepend="," property="paymentMode">
            PAYMENT_MODE
        </isNotNull>
        <isNotNull prepend="," property="skuFee">
            SKU_FEE
        </isNotNull>
        <isNotNull prepend="," property="discountFee">
            DISCOUNT_FEE
        </isNotNull>
        <isNotNull prepend="," property="orderPoints">
            ORDER_POINTS
        </isNotNull>
        <isNotNull prepend="," property="orderVouchers">
            ORDER_VOUCHERS
        </isNotNull>
        <isNotNull prepend="," property="otherDiscounts">
            OTHER_DISCOUNTS
        </isNotNull>
        <isNotNull prepend="," property="deliveryFee">
            DELIVERY_FEE
        </isNotNull>
        <isNotNull prepend="," property="orderFee">
            ORDER_FEE
        </isNotNull>
        <isNotNull prepend="," property="paidFee">
            PAID_FEE
        </isNotNull>
        <isNotNull prepend="," property="promoteRuleIds">
            PROMOTE_RULE_IDS
        </isNotNull>
        <isNotNull prepend="," property="isIntoErp">
            IS_INTO_ERP
        </isNotNull>
        <isNotNull prepend="," property="receiveDateType">
            RECEIVE_DATE_TYPE
        </isNotNull>
        <isNotNull prepend="," property="receiveTimeType">
            RECEIVE_TIME_TYPE
        </isNotNull>
        <isNotNull prepend="," property="invoiceType">
            INVOICE_TYPE
        </isNotNull>
        <isNotNull prepend="," property="invoiceContentType">
            INVOICE_CONTENT_TYPE
        </isNotNull>
        <isNotNull prepend="," property="isDelete">
            IS_DELETE
        </isNotNull>
        <!--  
        <isNotNull prepend="," property="urlFromNo">
            URL_FROM_NO
        </isNotNull>
        -->
        <isNotNull prepend="," property="orderPayFee">
            ORDER_PAY_FEE
        </isNotNull>
        <isNotNull prepend="," property="isTc">
            IS_TC
        </isNotNull>
        )
        values (
        <isNull prepend="" property="orderId">
            order_info_seq.nextval
        </isNull>
        <isNotNull prepend="" property="orderId">
            #orderId#
        </isNotNull>
        , #erpOrderId#, #memberId#, #parentOrderId#, #multiChannelId#,
        #multiChannelOrderBatchId#, #multiChannelOrderId#, #uploadUserId#,
        #uploadTime#, #paymentTypeId#, #paymentNo#, #paidTime#,
        #offlinePaidUserId#, #logisticCompanyId#, #orderState#,
        #orderOutState#,
<!--         (select to_char((select to_date(#commitTime#, -->
<!--         'yyyy-mm-dd hh24:mi:ss') + -->
<!--         (select default_order_limit_time from -->
<!--         ec_params) DAY from dual), -->
<!--         'yyyy-mm-dd hh24:mi:ss') from dual), -->
        #limitDate#,
        #returnType#, #returnValue#,
        #orderMsg#, #orderNotes#, #auditNotes#,
        #auditUserId#, #auditTime#, #isLock#,
        #lockTime#, #lockUserId#,
        #commitTime#, #finishTime#, #cancelTime#,
        #cancelUserId#,
        #cancelNotes#, #skuWeights#, #intoTime#, #receiveUser#, #provinceId#,
        #cityId#, #areaId#, #receiveAddress#, #receiveFullAddress#,
        #receivePost#,
        #receiveTel#,
        #receiveMobile#, #receiveEmail#,
        #invoiceTitle#, #invoiceContent#, #invoiceTaxNo#,
        #invoiceTaxAddress#,
        #invoiceTaxTel#, #invoiceTaxBank#, #invoiceTaxAccount#,
        #addUserId#,
        #addTime#, #editUserId#, #editTime#, #goodsBatchNo#,
        #couponTypeUsId#,
        #couponNo#,
        nvl(#urlFromNo#,(select call_did from MEMBER_EXPEND where MEMBER_ID=#memberId#)),
        (select count(1)+1 from order_info ord where ord.member_id = #memberId#)
        <isNotNull prepend="," property="isUpload">
            #isUpload#
        </isNotNull>
        <isNotNull prepend="," property="isPaid">
            #isPaid#
        </isNotNull>
        <isNotNull prepend="," property="paymentMode">
            #paymentMode#
        </isNotNull>
        <isNotNull prepend="," property="skuFee">
            #skuFee#
        </isNotNull>
        <isNotNull prepend="," property="discountFee">
            #discountFee#
        </isNotNull>
        <isNotNull prepend="," property="orderPoints">
            #orderPoints#
        </isNotNull>
        <isNotNull prepend="," property="orderVouchers">
            #orderVouchers#
        </isNotNull>
        <isNotNull prepend="," property="otherDiscounts">
            #otherDiscounts#
        </isNotNull>
        <isNotNull prepend="," property="deliveryFee">
            #deliveryFee#
        </isNotNull>
        <isNotNull prepend="," property="orderFee">
            #orderFee#
        </isNotNull>
        <isNotNull prepend="," property="paidFee">
            #paidFee#
        </isNotNull>
        <isNotNull prepend="," property="promoteRuleIds">
            #promoteRuleIds#
        </isNotNull>
        <isNotNull prepend="," property="isIntoErp">
            #isIntoErp#
        </isNotNull>
        <isNotNull prepend="," property="receiveDateType">
            #receiveDateType#
        </isNotNull>
        <isNotNull prepend="," property="receiveTimeType">
            #receiveTimeType#
        </isNotNull>
        <isNotNull prepend="," property="invoiceType">
            #invoiceType#
        </isNotNull>
        <isNotNull prepend="," property="invoiceContentType">
            #invoiceContentType#
        </isNotNull>
        <isNotNull prepend="," property="isDelete">
            #isDelete#
        </isNotNull>
        <!--  
        <isNotNull prepend="," property="urlFromNo">
            #urlFromNo#
        </isNotNull>
        -->
        <isNotNull prepend="," property="orderPayFee">
            #orderPayFee#
        </isNotNull>
        <isNotNull prepend="," property="isTc">
            #isTc#
        </isNotNull>
        )

        <!-- insert into ORDER_INFO (ORDER_ID, ERP_ORDER_ID, MEMBER_ID, PARENT_ORDER_ID, 
            MULTI_CHANNEL_ID, MULTI_CHANNEL_ORDER_ID, MULTI_CHANNEL_ORDER_BATCH_ID, PAYMENT_TYPE_ID, 
            PAYMENT_NO, PAID_TIME, PAID_FEE, OFFLINE_PAID_USER_ID, LOGISTIC_COMPANY_ID, 
            ORDER_STATE, ORDER_OUT_STATE, LIMIT_DATE, SKU_FEE, DISCOUNT_FEE, ORDER_POINTS, 
            ORDER_VOUCHERS, OTHER_DISCOUNTS, DELIVERY_FEE, ORDER_FEE, ORDER_MSG, ORDER_NOTES, 
            AUDIT_NOTES, AUDIT_USER_ID, AUDIT_TIME, IS_LOCK, LOCK_TIME, LOCK_USER_ID, 
            COMMIT_TIME, FINISH_TIME, CANCEL_TIME, CANCEL_USER_ID, CANCEL_NOTES, SKU_WEIGHTS, 
            INTO_TIME, RECEIVE_USER, PROVINCE_ID, CITY_ID, AREA_ID, RECEIVE_ADDRESS, 
            RECEIVE_FULL_ADDRESS, RECEIVE_POST, RECEIVE_TEL, RECEIVE_MOBILE, RECEIVE_EMAIL, 
            INVOICE_TITLE, INVOICE_CONTENT, INVOICE_TAX_NO, INVOICE_TAX_ADDRESS, INVOICE_TAX_TEL, 
            INVOICE_TAX_BANK, INVOICE_TAX_ACCOUNT, ADD_USER_ID, ADD_TIME, EDIT_USER_ID, 
            EDIT_TIME,ORDER_PAY_FEE <isNotNull prepend="," property="isPaid"> IS_PAID 
            </isNotNull> <isNotNull prepend="," property="paymentMode"> PAYMENT_MODE 
            </isNotNull> <isNotNull prepend="," property="isIntoErp"> IS_INTO_ERP </isNotNull> 
            <isNotNull prepend="," property="receiveDateType"> RECEIVE_DATE_TYPE </isNotNull> 
            <isNotNull prepend="," property="receiveTimeType"> RECEIVE_TIME_TYPE </isNotNull> 
            <isNotNull prepend="," property="invoiceType"> INVOICE_TYPE </isNotNull> 
            <isNotNull prepend="," property="isDelete"> IS_DELETE </isNotNull> <isNotNull 
            prepend="," property="invoiceContentType"> INVOICE_CONTENT_TYPE </isNotNull> 
            ) values (#orderId#, #erpOrderId#, #memberId#, #parentOrderId#, #multiChannelId#, 
            #multiChannelOrderId#, #multiChannelOrderBatchId#, #paymentTypeId#, #paymentNo#, 
            #paidTime#, #paidFee#, #offlinePaidUserId#, #logisticCompanyId#, #orderState#, 
            #orderOutState#, (select to_char((select to_date(#commitTime#, 'yyyy-mm-dd 
            hh24:mi:ss') + (select default_order_limit_time from ec_params) DAY from 
            dual), 'yyyy-mm-dd hh24:mi:ss') from dual), #skuFee#, #discountFee#, #orderPoints#, 
            #orderVouchers#, #otherDiscounts#, #deliveryFee#, #orderFee#, #orderMsg#, 
            #orderNotes#, #auditNotes#, #auditUserId#, #auditTime#, #isLock#, #lockTime#, 
            #lockUserId#, #commitTime#, #finishTime#, #cancelTime#, #cancelUserId#, #cancelNotes#, 
            #skuWeights#, #intoTime#, #receiveUser#, #provinceId#, #cityId#, #areaId#, 
            #receiveAddress#, #receiveFullAddress#, #receivePost#, #receiveTel#, #receiveMobile#, 
            #receiveEmail#, #invoiceTitle#, #invoiceContent#, #invoiceTaxNo#, #invoiceTaxAddress#, 
            #invoiceTaxTel#, #invoiceTaxBank#, #invoiceTaxAccount#, #addUserId#, #addTime#, 
            #editUserId#, #editTime#,#orderFee# <isNotNull prepend="," property="isPaid"> 
            #isPaid# </isNotNull> <isNotNull prepend="," property="paymentMode"> #paymentMode# 
            </isNotNull> <isNotNull prepend="," property="isIntoErp"> #isIntoErp# </isNotNull> 
            <isNotNull prepend="," property="receiveDateType"> #receiveDateType# </isNotNull> 
            <isNotNull prepend="," property="receiveTimeType"> #receiveTimeType# </isNotNull> 
            <isNotNull prepend="," property="invoiceType"> #invoiceType# </isNotNull> 
            <isNotNull prepend="," property="isDelete"> #isDelete# </isNotNull> <isNotNull 
            prepend="," property="invoiceContentType"> #invoiceContentType# </isNotNull> 
            ) -->
    </insert>

    <update id="updateStateForCommit" parameterClass="OrderInfo">
        update
        order_info set
        order_state = (select code_id from sys_code where
        code_type_no = 'order_state'
        and code_no = 'audit' and is_delete =
        'N'),
        order_out_state = (select code_id from sys_code where
        code_type_no = 'order_state'
        and code_no = 'audit' and is_delete = 'N')
        where order_id = #orderId#
    </update>

    <select id="getOrderId" resultClass="Long">
        SELECT
        order_info_seq.nextval AS ORDER_ID from dual
    </select>

    <update id="update" parameterClass="OrderInfo">
        update ORDER_INFO
        <dynamic prepend="set">
            <isNotNull prepend="," property="erpOrderId">
                ERP_ORDER_ID = #erpOrderId#
            </isNotNull>
            <isNotNull prepend="," property="memberId">
                MEMBER_ID = #memberId#
            </isNotNull>
            <isNotNull prepend="," property="parentOrderId">
                PARENT_ORDER_ID =
                #parentOrderId#
            </isNotNull>
            <isNotNull prepend="," property="multiChannelId">
                MULTI_CHANNEL_ID =
                #multiChannelId#
            </isNotNull>
            <isNotNull prepend="," property="isPaid">
                IS_PAID = #isPaid#
            </isNotNull>
            <isNotNull prepend="," property="paymentMode">
                PAYMENT_MODE =
                #paymentMode#
            </isNotNull>
            <isNotNull prepend="," property="paymentTypeId">
                PAYMENT_TYPE_ID =
                #paymentTypeId#
            </isNotNull>
            <isNull property="paymentTypeId">
                <isNotNull prepend="," property="paymentTypeNo">
                    PAYMENT_TYPE_ID = (select
                    ept.payment_type_id from ec_payment_type ept where
                    ept.is_delete =
                    'N' and ept.payment_type_no = #paymentTypeNo#)
                </isNotNull>
            </isNull>
            <isNotNull prepend="," property="paymentNo">
                PAYMENT_NO = #paymentNo#
            </isNotNull>
            <isNotNull prepend="," property="paidTime">
                PAID_TIME = #paidTime#
            </isNotNull>
            <isNotNull prepend="," property="offlinePaidUserId">
                OFFLINE_PAID_USER_ID =
                #offlinePaidUserId#
            </isNotNull>
            <isNotNull prepend="," property="logisticCompanyId">
                LOGISTIC_COMPANY_ID =
                #logisticCompanyId#
            </isNotNull>
            <isNotNull prepend="," property="orderState">
                ORDER_STATE = #orderState#
            </isNotNull>
            <isNotNull prepend="," property="orderPayFee">
                ORDER_PAY_FEE =
                #orderPayFee#
            </isNotNull>
            <isNotNull prepend="," property="orderOutState">
                ORDER_OUT_STATE =
                #orderOutState#
            </isNotNull>
            <isNotNull prepend="," property="limitDate">
                LIMIT_DATE = #limitDate#
            </isNotNull>
            <isNotNull prepend="," property="skuFee">
                SKU_FEE = #skuFee#
            </isNotNull>
            <isNotNull prepend="," property="discountFee">
                DISCOUNT_FEE =
                #discountFee#
            </isNotNull>
            <isNotNull prepend="," property="orderPoints">
                ORDER_POINTS =
                #orderPoints#
            </isNotNull>
            <isNotNull prepend="," property="orderVouchers">
                ORDER_VOUCHERS =
                #orderVouchers#
            </isNotNull>
            <isNotNull prepend="," property="otherDiscounts">
                OTHER_DISCOUNTS =
                #otherDiscounts#
            </isNotNull>
            <isNotNull prepend="," property="deliveryFee">
                DELIVERY_FEE =
                #deliveryFee#
            </isNotNull>
            <isNotNull prepend="," property="orderFee">
                ORDER_FEE = #orderFee#
            </isNotNull>
            <isNotNull prepend="," property="orderMsg">
                ORDER_MSG = #orderMsg#
            </isNotNull>
            <isNotNull prepend="," property="orderNotes">
                ORDER_NOTES = #orderNotes#
            </isNotNull>
            <isNotNull prepend="," property="auditNotes">
                AUDIT_NOTES = #auditNotes#
            </isNotNull>
            <isNotNull prepend="," property="auditUserId">
                AUDIT_USER_ID =
                #auditUserId#
            </isNotNull>
            <isNotNull prepend="," property="auditTime">
                AUDIT_TIME = #auditTime#
            </isNotNull>
            <isNotNull prepend="," property="isLock">
                IS_LOCK = #isLock#
            </isNotNull>
            <isNotNull prepend="," property="lockTime">
                LOCK_TIME = #lockTime#
            </isNotNull>
            <isNotNull prepend="," property="lockUserId">
                LOCK_USER_ID = #lockUserId#
            </isNotNull>
            <isNotNull prepend="," property="commitTime">
                COMMIT_TIME = #commitTime#
            </isNotNull>
            <isNotNull prepend="," property="finishTime">
                FINISH_TIME = #finishTime#
            </isNotNull>
            <isNotNull prepend="," property="cancelTime">
                CANCEL_TIME = #cancelTime#
            </isNotNull>
            <isNotNull prepend="," property="cancelUserId">
                CANCEL_USER_ID =
                #cancelUserId#
            </isNotNull>
            <isNotNull prepend="," property="cancelNotes">
                CANCEL_NOTES =
                #cancelNotes#
            </isNotNull>
            <isNotNull prepend="," property="skuWeights">
                SKU_WEIGHTS = #skuWeights#
            </isNotNull>
            <isNotNull prepend="," property="isIntoErp">
                IS_INTO_ERP = #isIntoErp#
            </isNotNull>
            <isNotNull prepend="," property="intoTime">
                INTO_TIME = #intoTime#
            </isNotNull>
            <isNotNull prepend="," property="receiveUser">
                RECEIVE_USER =
                #receiveUser#
            </isNotNull>
            <isNotNull prepend="," property="provinceId">
                PROVINCE_ID = #provinceId#
            </isNotNull>
            <isNotNull prepend="," property="cityId">
                CITY_ID = #cityId#
            </isNotNull>
            <isNotNull prepend="," property="areaId">
                AREA_ID = #areaId#
            </isNotNull>
            <isNotNull prepend="," property="receiveAddress">
                RECEIVE_ADDRESS =
                #receiveAddress#
            </isNotNull>
            <isNotNull prepend="," property="receiveFullAddress">
                RECEIVE_FULL_ADDRESS =
                #receiveFullAddress#
            </isNotNull>
            <isNotNull prepend="," property="receivePost">
                RECEIVE_POST =
                #receivePost#
            </isNotNull>
            <isNotNull prepend="," property="receiveTel">
                RECEIVE_TEL = #receiveTel#
            </isNotNull>
            <isNotNull prepend="," property="receiveMobile">
                RECEIVE_MOBILE =
                #receiveMobile#
            </isNotNull>
            <isNotNull prepend="," property="receiveEmail">
                RECEIVE_EMAIL =
                #receiveEmail#
            </isNotNull>
            <isNotNull prepend="," property="receiveDateType">
                RECEIVE_DATE_TYPE =
                #receiveDateType#
            </isNotNull>
            <isNotNull prepend="," property="receiveTimeType">
                RECEIVE_TIME_TYPE =
                #receiveTimeType#
            </isNotNull>
            <isNotNull prepend="," property="invoiceType">
                INVOICE_TYPE =
                #invoiceType#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTitle">
                INVOICE_TITLE =
                #invoiceTitle#
            </isNotNull>
            <isNotNull prepend="," property="invoiceContent">
                INVOICE_CONTENT =
                #invoiceContent#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTaxNo">
                INVOICE_TAX_NO =
                #invoiceTaxNo#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTaxAddress">
                INVOICE_TAX_ADDRESS =
                #invoiceTaxAddress#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTaxTel">
                INVOICE_TAX_TEL =
                #invoiceTaxTel#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTaxBank">
                INVOICE_TAX_BANK =
                #invoiceTaxBank#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTaxAccount">
                INVOICE_TAX_ACCOUNT =
                #invoiceTaxAccount#
            </isNotNull>
            <isNotNull prepend="," property="isDelete">
                IS_DELETE = #isDelete#
            </isNotNull>
            <isNotNull prepend="," property="addUserId">
                ADD_USER_ID = #addUserId#
            </isNotNull>
            <isNotNull prepend="," property="addTime">
                ADD_TIME = #addTime#
            </isNotNull>
            <isNotNull prepend="," property="editUserId">
                EDIT_USER_ID = #editUserId#
            </isNotNull>
            <isNotNull prepend="," property="editTime">
                EDIT_TIME = #editTime#
            </isNotNull>
            <isNotNull prepend="," property="multiChannelOrderId">
                MULTI_CHANNEL_ORDER_ID =
                #multiChannelOrderId#
            </isNotNull>
            <isNotNull prepend="," property="multiChannelOrderBatchId">
                MULTI_CHANNEL_ORDER_BATCH_ID = #multiChannelOrderBatchId#
            </isNotNull>
            <isNotNull prepend="," property="paidFee">
                PAID_FEE = #paidFee#
            </isNotNull>
            <isNotNull prepend="," property="invoiceContentType">
                INVOICE_CONTENT_TYPE =
                #invoiceContentType#
            </isNotNull>
            <isNotNull prepend="," property="isCheckBills">
                IS_CHECK_BILLS =
                #isCheckBills#
            </isNotNull>
            <isNotNull prepend="," property="checkBillUserId">
                CHECK_BILL_USER_ID =
                #checkBillUserId#
            </isNotNull>
            <isNotNull prepend="," property="checkBillTime">
                CHECK_BILL_TIME =
                #checkBillTime#
            </isNotNull>
            <isNotNull prepend="," property="urlFromNo">
                url_from_no =#urlFromNo#
            </isNotNull>
        </dynamic>
         where ORDER_ID = #orderId#
    </update>
    <!-- 取消订单,单独拿出,减轻单挑sql的语句的并发几率 -->
    <update id="cancelOrder" parameterClass="OrderInfo">
            update ORDER_INFO
        <dynamic prepend="set">
            <isNotNull prepend="," property="erpOrderId">
                ERP_ORDER_ID = #erpOrderId#
            </isNotNull>
            <isNotNull prepend="," property="memberId">
                MEMBER_ID = #memberId#
            </isNotNull>
            <isNotNull prepend="," property="parentOrderId">
                PARENT_ORDER_ID =
                #parentOrderId#
            </isNotNull>
            <isNotNull prepend="," property="multiChannelId">
                MULTI_CHANNEL_ID =
                #multiChannelId#
            </isNotNull>
            <isNotNull prepend="," property="isPaid">
                IS_PAID = #isPaid#
            </isNotNull>
            <isNotNull prepend="," property="paymentMode">
                PAYMENT_MODE =
                #paymentMode#
            </isNotNull>
            <isNotNull prepend="," property="paymentTypeId">
                PAYMENT_TYPE_ID =
                #paymentTypeId#
            </isNotNull>
            <isNull property="paymentTypeId">
                <isNotNull prepend="," property="paymentTypeNo">
                    PAYMENT_TYPE_ID = (select
                    ept.payment_type_id from ec_payment_type ept where
                    ept.is_delete =
                    'N' and ept.payment_type_no = #paymentTypeNo#)
                </isNotNull>
            </isNull>
            <isNotNull prepend="," property="paymentNo">
                PAYMENT_NO = #paymentNo#
            </isNotNull>
            <isNotNull prepend="," property="paidTime">
                PAID_TIME = #paidTime#
            </isNotNull>
            <isNotNull prepend="," property="offlinePaidUserId">
                OFFLINE_PAID_USER_ID =
                #offlinePaidUserId#
            </isNotNull>
            <isNotNull prepend="," property="logisticCompanyId">
                LOGISTIC_COMPANY_ID =
                #logisticCompanyId#
            </isNotNull>
            <isNotNull prepend="," property="orderState">
                ORDER_STATE = #orderState#
            </isNotNull>
            <isNotNull prepend="," property="orderPayFee">
                ORDER_PAY_FEE =
                #orderPayFee#
            </isNotNull>
            <isNotNull prepend="," property="orderOutState">
                ORDER_OUT_STATE =
                #orderOutState#
            </isNotNull>
            <isNotNull prepend="," property="limitDate">
                LIMIT_DATE = #limitDate#
            </isNotNull>
            <isNotNull prepend="," property="skuFee">
                SKU_FEE = #skuFee#
            </isNotNull>
            <isNotNull prepend="," property="discountFee">
                DISCOUNT_FEE =
                #discountFee#
            </isNotNull>
            <isNotNull prepend="," property="orderPoints">
                ORDER_POINTS =
                #orderPoints#
            </isNotNull>
            <isNotNull prepend="," property="orderVouchers">
                ORDER_VOUCHERS =
                #orderVouchers#
            </isNotNull>
            <isNotNull prepend="," property="otherDiscounts">
                OTHER_DISCOUNTS =
                #otherDiscounts#
            </isNotNull>
            <isNotNull prepend="," property="deliveryFee">
                DELIVERY_FEE =
                #deliveryFee#
            </isNotNull>
            <isNotNull prepend="," property="orderFee">
                ORDER_FEE = #orderFee#
            </isNotNull>
            <isNotNull prepend="," property="orderMsg">
                ORDER_MSG = #orderMsg#
            </isNotNull>
            <isNotNull prepend="," property="orderNotes">
                ORDER_NOTES = #orderNotes#
            </isNotNull>
            <isNotNull prepend="," property="auditNotes">
                AUDIT_NOTES = #auditNotes#
            </isNotNull>
            <isNotNull prepend="," property="auditUserId">
                AUDIT_USER_ID =
                #auditUserId#
            </isNotNull>
            <isNotNull prepend="," property="auditTime">
                AUDIT_TIME = #auditTime#
            </isNotNull>
            <isNotNull prepend="," property="isLock">
                IS_LOCK = #isLock#
            </isNotNull>
            <isNotNull prepend="," property="lockTime">
                LOCK_TIME = #lockTime#
            </isNotNull>
            <isNotNull prepend="," property="lockUserId">
                LOCK_USER_ID = #lockUserId#
            </isNotNull>
            <isNotNull prepend="," property="commitTime">
                COMMIT_TIME = #commitTime#
            </isNotNull>
            <isNotNull prepend="," property="finishTime">
                FINISH_TIME = #finishTime#
            </isNotNull>
            <isNotNull prepend="," property="cancelTime">
                CANCEL_TIME = #cancelTime#
            </isNotNull>
            <isNotNull prepend="," property="cancelUserId">
                CANCEL_USER_ID =
                #cancelUserId#
            </isNotNull>
            <isNotNull prepend="," property="cancelNotes">
                CANCEL_NOTES =
                #cancelNotes#
            </isNotNull>
            <isNotNull prepend="," property="skuWeights">
                SKU_WEIGHTS = #skuWeights#
            </isNotNull>
            <isNotNull prepend="," property="isIntoErp">
                IS_INTO_ERP = #isIntoErp#
            </isNotNull>
            <isNotNull prepend="," property="intoTime">
                INTO_TIME = #intoTime#
            </isNotNull>
            <isNotNull prepend="," property="receiveUser">
                RECEIVE_USER =
                #receiveUser#
            </isNotNull>
            <isNotNull prepend="," property="provinceId">
                PROVINCE_ID = #provinceId#
            </isNotNull>
            <isNotNull prepend="," property="cityId">
                CITY_ID = #cityId#
            </isNotNull>
            <isNotNull prepend="," property="areaId">
                AREA_ID = #areaId#
            </isNotNull>
            <isNotNull prepend="," property="receiveAddress">
                RECEIVE_ADDRESS =
                #receiveAddress#
            </isNotNull>
            <isNotNull prepend="," property="receiveFullAddress">
                RECEIVE_FULL_ADDRESS =
                #receiveFullAddress#
            </isNotNull>
            <isNotNull prepend="," property="receivePost">
                RECEIVE_POST =
                #receivePost#
            </isNotNull>
            <isNotNull prepend="," property="receiveTel">
                RECEIVE_TEL = #receiveTel#
            </isNotNull>
            <isNotNull prepend="," property="receiveMobile">
                RECEIVE_MOBILE =
                #receiveMobile#
            </isNotNull>
            <isNotNull prepend="," property="receiveEmail">
                RECEIVE_EMAIL =
                #receiveEmail#
            </isNotNull>
            <isNotNull prepend="," property="receiveDateType">
                RECEIVE_DATE_TYPE =
                #receiveDateType#
            </isNotNull>
            <isNotNull prepend="," property="receiveTimeType">
                RECEIVE_TIME_TYPE =
                #receiveTimeType#
            </isNotNull>
            <isNotNull prepend="," property="invoiceType">
                INVOICE_TYPE =
                #invoiceType#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTitle">
                INVOICE_TITLE =
                #invoiceTitle#
            </isNotNull>
            <isNotNull prepend="," property="invoiceContent">
                INVOICE_CONTENT =
                #invoiceContent#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTaxNo">
                INVOICE_TAX_NO =
                #invoiceTaxNo#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTaxAddress">
                INVOICE_TAX_ADDRESS =
                #invoiceTaxAddress#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTaxTel">
                INVOICE_TAX_TEL =
                #invoiceTaxTel#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTaxBank">
                INVOICE_TAX_BANK =
                #invoiceTaxBank#
            </isNotNull>
            <isNotNull prepend="," property="invoiceTaxAccount">
                INVOICE_TAX_ACCOUNT =
                #invoiceTaxAccount#
            </isNotNull>
            <isNotNull prepend="," property="isDelete">
                IS_DELETE = #isDelete#
            </isNotNull>
            <isNotNull prepend="," property="addUserId">
                ADD_USER_ID = #addUserId#
            </isNotNull>
            <isNotNull prepend="," property="addTime">
                ADD_TIME = #addTime#
            </isNotNull>
            <isNotNull prepend="," property="editUserId">
                EDIT_USER_ID = #editUserId#
            </isNotNull>
            <isNotNull prepend="," property="editTime">
                EDIT_TIME = #editTime#
            </isNotNull>
            <isNotNull prepend="," property="multiChannelOrderId">
                MULTI_CHANNEL_ORDER_ID =
                #multiChannelOrderId#
            </isNotNull>
            <isNotNull prepend="," property="multiChannelOrderBatchId">
                MULTI_CHANNEL_ORDER_BATCH_ID = #multiChannelOrderBatchId#
            </isNotNull>
            <isNotNull prepend="," property="paidFee">
                PAID_FEE = #paidFee#
            </isNotNull>
            <isNotNull prepend="," property="invoiceContentType">
                INVOICE_CONTENT_TYPE =
                #invoiceContentType#
            </isNotNull>
            <isNotNull prepend="," property="isCheckBills">
                IS_CHECK_BILLS =
                #isCheckBills#
            </isNotNull>
            <isNotNull prepend="," property="checkBillUserId">
                CHECK_BILL_USER_ID =
                #checkBillUserId#
            </isNotNull>
            <isNotNull prepend="," property="checkBillTime">
                CHECK_BILL_TIME =
                #checkBillTime#
            </isNotNull>
            <isNotNull prepend="," property="urlFromNo">
                url_from_no =#urlFromNo#
            </isNotNull>
        </dynamic>
        where ORDER_ID = #orderId# and ORDER_STATE != #orderState#
    </update>

    <sql id="auditOrderSql">
        <isNotEmpty prepend="and" property="orderId">
            oi.order_id = #orderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="erpOrderId">
            oi.erp_order_id =
            #erpOrderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberRealName">
            m.real_name like
            '%$memberRealName$%'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberLoginName">
            m.login_name =
            #memberLoginName#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="multiChannelId">
            oi.multi_channel_id =
            #multiChannelId#
        </isNotEmpty>
        
        <isNotEmpty prepend="and" property="paymentTypeId">
                 oi.order_id in (select t.order_id from order_payment_type_list t where t.payment_type_id=#paymentTypeId#)
         </isNotEmpty>
        
<!--         <isNotEmpty prepend="and" property="paymentTypeId"> -->
<!--             oi.payment_type_id = -->
<!--             #paymentTypeId# -->
<!--         </isNotEmpty> -->
        <isNotEmpty prepend="and" property="paymentMode">
            oi.payment_mode =
            #paymentMode#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentModeArray">
            oi.payment_mode in
            <iterate property="paymentModeArray" open="(" close=")"
                conjunction=",">
                #paymentModeArray[]#
            </iterate>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isPaid">
            oi.is_paid = #isPaid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeBg">
            <![CDATA[
                oi.commit_time >= #commitTimeBg#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                oi.commit_time <= #commitTimeEd#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paidTimeBg">
            <![CDATA[
                oi.paid_time >= #paidTimeBg#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paidTimeEd">
            <![CDATA[
                oi.paid_time <= #paidTimeEd#
            ]]>
        </isNotEmpty>
    </sql>

    <select id="getAuditOrders" resultMap="orderAuditQueryRslt"
        parameterClass="OrderInfo">
        select oii.*
        from (
        select rownum rn,t.*
        from(
        select
        oi.order_id,oi.erp_order_id,oi.is_lock,lu.user_real_name as
        lock_user_name,oi.member_id,
        m.real_name as
        member_real_name,m.login_name as member_login_name,oi.order_fee,
        oi.delivery_fee,oi.order_vouchers,oi.url_from_no,oi.other_discounts,oi.order_pay_fee,oi.paid_fee,
        oi.order_points,oi.discount_fee,oi.sku_fee,oi.commit_time,oi.paid_time,oi.payment_mode,
        ls.code_value as
        order_state_name,
<!--         (select  WMSYS.WM_CONCAT(distinct pp.payment_type_name) from order_payment_log g,ec_payment_type pp  -->
<!--         where g.business_id=oi.order_id and g.payment_type_id=pp.payment_type_id) as  payment_type_name, -->
        (select  zh_concat(distinct pp.payment_type_name) from order_payment_type_list l,ec_payment_type pp 
           where l.order_id=oi.order_id and l.payment_type_id=pp.payment_type_id) as  payment_type_name, 
<!--         pt.payment_type_name, -->
        oi.limit_date,oi.lock_user_id,
        oi.is_paid,
        replace(oi.receive_full_address,substr(oi.receive_full_address,round(length(oi.receive_full_address) / 2, 0),nvl(#strLength#,0)),'*****') receive_full_address,
        oi.province_id,
        oi.city_id,
        oi.area_id,
        oi.IS_TC,
        ly.company_name
        from order_info oi
        left join member
        m on oi.member_id=m.member_id and m.is_delete='N'
        left join sys_user lu
        on oi.lock_user_id=lu.user_id and lu.is_delete='N'
        left join sys_code
        ls on oi.order_state=ls.code_id and
        ls.is_delete='N'
        left join
        ec_payment_type pt on oi.payment_type_id=pt.payment_type_id and
        pt.is_delete='N'
        left join LOGISTIC_COMPANY ly on
        oi.logistic_company_id=ly.logistic_company_id
        where oi.is_delete='N'
        and ls.code_type_no='order_state' and
        ls.code_no='commit'
        and oi.IS_TC in
        ('N','J')
        <include refid="auditOrderSql" />
        order by oi.commit_time desc,oi.order_id asc
        ) t
        <isNotEmpty prepend="where" property="endRow">
                 <![CDATA[
                 rownum <= #endRow#
                 ]]>
        </isNotEmpty>
        ) oii
        <isNotEmpty prepend="where" property="startRow">
             <![CDATA[
                 oii.rn >= #startRow#
             ]]>
        </isNotEmpty>
    </select>

    <select id="getAuditOrdersCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select count(0)
        from order_info oi
        left join member m on
        oi.member_id=m.member_id and m.is_delete='N'
        left join sys_user lu on
        oi.lock_user_id=lu.user_id and lu.is_delete='N'
        left join sys_code ls
        on oi.order_state=ls.code_id and
        ls.is_delete='N'
        left join
        ec_payment_type pt on oi.payment_type_id=pt.payment_type_id and
        pt.is_delete='N'
        where oi.is_delete='N' and
        ls.code_type_no='order_state' and
        ls.code_no='commit' and oi.IS_TC in
        ('N','J')
        <include refid="auditOrderSql" />
    </select>
    
    
    <sql id="dealOrderSql">
        <isNotEmpty prepend="and" property="orderId">
            oi.order_id = #orderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="erpOrderId">
            oi.erp_order_id =
            #erpOrderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberRealName">
            m.real_name like
            '%$memberRealName$%'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberLoginName">
            m.login_name =
            #memberLoginName#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="multiChannelId">
            oi.multi_channel_id =
            #multiChannelId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentTypeId">
            oi.payment_type_id =
            #paymentTypeId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentMode">
            oi.payment_mode =
            #paymentMode#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentModeArray">
            oi.payment_mode in
            <iterate property="paymentModeArray" open="(" close=")"
                conjunction=",">
                #paymentModeArray[]#
            </iterate>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isPaid">
            oi.is_paid = #isPaid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeBg">
            <![CDATA[
                oi.commit_time >= #commitTimeBg#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                oi.commit_time <= #commitTimeEd#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paidTimeBg">
            <![CDATA[
                oi.paid_time >= #paidTimeBg#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paidTimeEd">
            <![CDATA[
                oi.paid_time <= #paidTimeEd#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="cancelTimeBg">
            <![CDATA[
                oi.cancel_time >= #cancelTimeBg#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="cancelTimeEd">
            <![CDATA[
                oi.cancel_time <= #cancelTimeEd#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderState">
            oi.order_state =
            #orderState#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isLock">
            oi.is_lock =
            #isLock#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="refundOrderNotes">
            olog.log_content=#refundOrderNotes#
        </isNotEmpty>
    </sql>

    <select id="getDealOrders" resultMap="orderDealQueryRslt"
        parameterClass="OrderInfo">
        select oii.*
        from (
        select rownum rn,t.*
        from(
        select
        oi.order_id,oi.erp_order_id,oi.is_lock,lu.user_real_name as
        lock_user_name,oi.member_id,
        m.real_name as
        member_real_name,m.login_name as member_login_name,oi.order_fee,
        oi.delivery_fee,oi.order_vouchers,oi.url_from_no,oi.other_discounts,oi.order_pay_fee,oi.paid_fee,
        oi.order_points,oi.discount_fee,oi.sku_fee,oi.commit_time,oi.paid_time,oi.payment_mode,
        ls.code_value as
        order_state_name,pt.payment_type_name,oi.limit_date,oi.lock_user_id,
        oi.is_paid,oi.receive_full_address,
        oi.province_id,
        oi.city_id,
        oi.area_id,
        oi.IS_TC,
        ly.company_name,
        olog.log_content refund_notes
        from order_info oi
        left join member
        m on oi.member_id=m.member_id and m.is_delete='N'
        left join sys_user lu
        on oi.lock_user_id=lu.user_id and lu.is_delete='N'
        left join sys_code
        ls on oi.order_state=ls.code_id and
        ls.is_delete='N'
        left join
        ec_payment_type pt on oi.payment_type_id=pt.payment_type_id and
        pt.is_delete='N'
        left join LOGISTIC_COMPANY ly on
        oi.logistic_company_id=ly.logistic_company_id
        left join order_log olog on olog.order_id=oi.order_id and olog.order_log_type='refund_notes' and olog.is_delete='N'
        where oi.is_delete='N'
        and oi.IS_TC in
        ('N','J')
        <include refid="dealOrderSql" />
        order by oi.commit_time desc,oi.order_id asc
        ) t
        <isNotEmpty prepend="where" property="endRow">
                 <![CDATA[
                 rownum <= #endRow#
                 ]]>
        </isNotEmpty>
        ) oii
        <isNotEmpty prepend="where" property="startRow">
             <![CDATA[
                 oii.rn >= #startRow#
             ]]>
        </isNotEmpty>
    </select>

    <select id="getDealOrdersCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select count(0)
        from order_info oi
        left join member m on
        oi.member_id=m.member_id and m.is_delete='N'
        left join sys_user lu on
        oi.lock_user_id=lu.user_id and lu.is_delete='N'
        left join sys_code ls
        on oi.order_state=ls.code_id and
        ls.is_delete='N'
        left join
        ec_payment_type pt on oi.payment_type_id=pt.payment_type_id and
        pt.is_delete='N'
        left join order_log olog on olog.order_id=oi.order_id and olog.order_log_type='refund_notes' and olog.is_delete='N'
        where oi.is_delete='N' and
        oi.IS_TC in
        ('N','J')
        <include refid="dealOrderSql" />
    </select>
    

    <select id="getDetailForAuditById" parameterClass="Long"
        resultMap="orderAuditDetailRslt">
        select
        oi.order_id,
        oi.erp_order_id,
        oi.member_id,
        oi.parent_order_id,
        oi.multi_channel_id,
        oi.multi_channel_order_batch_id,
        oi.multi_channel_order_id,
        oi.is_upload,
        oi.upload_user_id,
        oi.upload_time,
        oi.is_paid,
        oi.payment_mode,
        oi.payment_type_id,
        oi.payment_no,
        oi.paid_time,
        oi.tax_fee,
        oi.offline_paid_user_id,
        oi.logistic_company_id,
        oi.order_state,
        oi.order_out_state,
        oi.limit_date,
        oi.sku_fee,
        oi.discount_fee,
        oi.order_points,
        oi.order_vouchers,
        oi.other_discounts,
        oi.delivery_fee,
        oi.order_fee,
        oi.paid_fee,
        oi.promote_rule_ids,
        oi.return_type,
        oi.return_value,
        oi.order_msg,
        oi.order_notes,
        oi.audit_notes,
        oi.audit_user_id,
        oi.audit_time,
        oi.is_lock,
        oi.lock_time,
        oi.lock_user_id,
        oi.commit_time,
        oi.finish_time,
        oi.cancel_time,
        oi.cancel_user_id,
        oi.cancel_notes,
        oi.sku_weights,
        oi.is_into_erp,
        oi.into_time,
        oi.receive_user,
        oi.province_id,
        oi.city_id,
        oi.area_id,
        oi.receive_address,
        oi.receive_full_address,
        oi.receive_post,
        oi.receive_tel,
        oi.receive_mobile,
        oi.receive_email,
        oi.receive_date_type,
        oi.receive_time_type,
        oi.invoice_type,
        oi.invoice_content_type,
        oi.invoice_title,
        oi.invoice_content,
        oi.invoice_tax_no,
        oi.invoice_tax_address,
        oi.invoice_tax_tel,
        oi.invoice_tax_bank,
        oi.invoice_tax_account,
        oi.is_delete,
        oi.add_user_id,
        oi.add_time,
        oi.edit_user_id,
        oi.edit_time,
        oi.url_from_no,
        oi.goods_batch_no,
        oi.order_pay_fee,
        oi.coupon_type_us_id,
        oi.coupon_no,
        oi.is_check_bills,
        oi.check_bill_user_id,
        oi.check_bill_time,
        oi.is_tc,oi.goods_seller,
        m.real_name,m.login_name,mr.rank_name,ept.payment_type_name,lc.company_name
        from order_info oi
        left join member m on oi.member_id=m.member_id and
        m.is_delete='N'
        left join member_rank mr on
        m.member_rank_id=mr.member_rank_id and
        mr.is_delete='N'
        left join
        ec_payment_type ept on oi.payment_type_id=ept.payment_type_id
        and
        ept.is_delete='N'
        left join LOGISTIC_COMPANY lc on
        oi.LOGISTIC_COMPANY_ID =
        lc.LOGISTIC_COMPANY_ID
        where
        oi.order_id=#value# and oi.is_delete='N' and rownum=1
    </select>

    <select id="getDetailForQueryById" parameterClass="Long"
        resultMap="orderQueryDetailRslt">
        select
        oi.order_id,
        oi.erp_order_id,
        oi.member_id,
        oi.parent_order_id,
        oi.multi_channel_id,
        oi.multi_channel_order_batch_id,
        oi.multi_channel_order_id,
        oi.is_upload,
        oi.upload_user_id,
        oi.upload_time,
        oi.is_paid,
        oi.payment_mode,
        oi.payment_type_id,
        oi.payment_no,
        oi.paid_time,
        oi.tax_fee,
        oi.offline_paid_user_id,
        oi.logistic_company_id,
        oi.order_state,
        oi.order_out_state,
        oi.limit_date,
        oi.sku_fee,
        oi.discount_fee,
        oi.order_points,
        oi.order_vouchers,
        oi.other_discounts,
        oi.delivery_fee,
        oi.order_fee,
        oi.paid_fee,
        oi.promote_rule_ids,
        oi.return_type,
        oi.return_value,
        oi.order_msg,
        oi.order_notes,
        oi.audit_notes,
        oi.audit_user_id,
        oi.audit_time,
        oi.is_lock,
        oi.lock_time,
        oi.lock_user_id,
        oi.commit_time,
        oi.finish_time,
        oi.cancel_time,
        oi.cancel_user_id,
        oi.cancel_notes,
        oi.sku_weights,
        oi.is_into_erp,
        oi.into_time,
        oi.receive_user,
        oi.province_id,
        oi.city_id,
        oi.area_id,
        oi.receive_address,
        oi.receive_full_address,
        oi.receive_post,
        oi.receive_tel,
        oi.receive_mobile,
        oi.receive_email,
        oi.receive_date_type,
        oi.receive_time_type,
        oi.invoice_type,
        oi.invoice_content_type,
        oi.invoice_title,
        oi.invoice_content,
        oi.invoice_tax_no,
        oi.invoice_tax_address,
        oi.invoice_tax_tel,
        oi.invoice_tax_bank,
        oi.invoice_tax_account,
        oi.is_delete,
        oi.add_user_id,
        oi.add_time,
        oi.edit_user_id,
        oi.edit_time,
        oi.url_from_no,
        oi.goods_batch_no,
        oi.order_pay_fee,
        oi.coupon_type_us_id,
        oi.coupon_no,
        oi.is_check_bills,
        oi.check_bill_user_id,
        oi.check_bill_time,
        oi.is_tc,
        m.real_name,m.login_name,au.user_real_name,ept.payment_type_name,
        st.code_value as state_name
        from order_info oi
        left join member m on
        oi.member_id=m.member_id and m.is_delete='N'
        left join sys_user au on
        oi.audit_user_id=au.user_id and au.is_delete='N'
        left join
        ec_payment_type ept on
        oi.payment_type_id=ept.payment_type_id and
        ept.is_delete='N'
        left join sys_code st on oi.order_state=st.code_id
        and st.is_delete='N'
        left join LOGISTIC_COMPANY lc on
        oi.LOGISTIC_COMPANY_ID =
        lc.LOGISTIC_COMPANY_ID
        where
        oi.order_id=#value# and oi.is_delete='N' and rownum=1
    </select>
    
    
    <select id="getDetailForAuditByIds" parameterClass="OrderInfo"
        resultMap="orderAuditDetailRslt">
        select
        oi.order_id,
        oi.erp_order_id,
        oi.member_id,
        oi.parent_order_id,
        oi.multi_channel_id,
        oi.multi_channel_order_batch_id,
        oi.multi_channel_order_id,
        oi.is_upload,
        oi.upload_user_id,
        oi.upload_time,
        oi.is_paid,
        oi.payment_mode,
        oi.payment_type_id, 
        oi.payment_no,
        oi.paid_time,
        oi.tax_fee,
        oi.offline_paid_user_id,
        oi.logistic_company_id,
        oi.order_state,
        oi.order_out_state,
        oi.limit_date,
        oi.sku_fee,
        oi.discount_fee,
        oi.order_points,
        oi.order_vouchers,
        oi.other_discounts,
        oi.delivery_fee,
        oi.order_fee,
        oi.paid_fee,
        oi.promote_rule_ids,
        oi.return_type,
        oi.return_value,
        oi.order_msg,
        oi.order_notes,
        oi.audit_notes,
        oi.audit_user_id,
        oi.audit_time,
        oi.is_lock,
        oi.lock_time,
        oi.lock_user_id,
        oi.commit_time,
        oi.finish_time,
        oi.cancel_time,
        oi.cancel_user_id,
        oi.cancel_notes,
        oi.sku_weights,
        oi.is_into_erp,
        oi.into_time,
        oi.receive_user,
        oi.province_id,
        oi.city_id,
        oi.area_id,
        oi.receive_address,
        oi.receive_post,
        oi.receive_email,
        oi.receive_date_type,
        oi.receive_time_type,
        oi.invoice_type,
        oi.invoice_content_type,
        oi.invoice_title,
        oi.invoice_content,
        oi.invoice_tax_no,
        oi.invoice_tax_address,
        oi.invoice_tax_tel,
        oi.invoice_tax_bank,
        oi.invoice_tax_account,
        oi.is_delete,
        oi.add_user_id,
        oi.add_time,
        oi.edit_user_id,
        oi.edit_time,
        oi.url_from_no,
        oi.goods_batch_no,
        oi.order_pay_fee,
        oi.coupon_type_us_id,
        oi.coupon_no,
        oi.is_check_bills,
        oi.check_bill_user_id,
        oi.check_bill_time,
        oi.is_tc,oi.goods_seller,
        oi.receive_mobile,
        oi.receive_tel, 
        oi.receive_full_address,
        m.real_name,m.login_name,
        mr.rank_name,
<!--          (select  WMSYS.WM_CONCAT(distinct pp.payment_type_name) from order_payment_log g,ec_payment_type pp  -->
<!--         where g.business_id=oi.order_id and g.payment_type_id=pp.payment_type_id) as  payment_type_name, -->
         (select  zh_concat(distinct pp.payment_type_name) from order_payment_type_list l,ec_payment_type pp 
          where l.order_id=oi.order_id and l.payment_type_id=pp.payment_type_id) as  payment_type_name, 
<!--         ept.payment_type_name, -->
        lc.company_name
        from order_info oi
        left join member m on oi.member_id=m.member_id and
        m.is_delete='N'
        left join member_rank mr on
        m.member_rank_id=mr.member_rank_id and
        mr.is_delete='N'
        left join
        ec_payment_type ept on oi.payment_type_id=ept.payment_type_id
        and
        ept.is_delete='N'
        left join LOGISTIC_COMPANY lc on
        oi.LOGISTIC_COMPANY_ID =
        lc.LOGISTIC_COMPANY_ID
        where
        oi.order_id=#orderId# and oi.is_delete='N' and rownum=1
    </select>

    <select id="getDetailForQueryByIds" parameterClass="OrderInfo"
        resultMap="orderQueryDetailRslt">
        select
        oi.order_id,
        oi.erp_order_id,
        oi.member_id,
        oi.parent_order_id,
        oi.multi_channel_id,
        oi.multi_channel_order_batch_id,
        oi.multi_channel_order_id,
        oi.is_upload,
        oi.upload_user_id,
        oi.upload_time,
        oi.is_paid,
        oi.payment_mode,
        oi.payment_type_id,
        oi.payment_no,
        oi.paid_time,
        oi.tax_fee,
        oi.offline_paid_user_id,
        oi.logistic_company_id,
        oi.order_state,
        oi.order_out_state,
        oi.limit_date,
        oi.sku_fee,
        oi.discount_fee,
        oi.order_points,
        oi.order_vouchers,
        oi.other_discounts,
        oi.delivery_fee,
        oi.order_fee,
        oi.paid_fee,
        oi.promote_rule_ids,
        oi.return_type,
        oi.return_value,
        oi.order_msg,
        oi.order_notes,
        oi.audit_notes,
        oi.audit_user_id,
        oi.audit_time,
        oi.is_lock,
        oi.lock_time,
        oi.lock_user_id,
        oi.commit_time,
        oi.finish_time,
        oi.cancel_time,
        oi.cancel_user_id,
        oi.cancel_notes,
        oi.sku_weights,
        oi.is_into_erp,
        oi.into_time,
        oi.receive_user,
        oi.province_id,
        oi.city_id,
        oi.area_id,
        oi.receive_address,
        oi.receive_post,
        oi.receive_email,
        oi.receive_date_type,
        oi.receive_time_type,
        oi.invoice_type,
        oi.invoice_content_type,
        oi.invoice_title,
        oi.invoice_content,
        oi.invoice_tax_no,
        oi.invoice_tax_address,
        oi.invoice_tax_tel,
        oi.invoice_tax_bank,
        oi.invoice_tax_account,
        oi.is_delete,
        oi.add_user_id,
        oi.add_time,
        oi.edit_user_id,
        oi.edit_time,
        oi.url_from_no,
        oi.goods_batch_no,
        oi.order_pay_fee,
        oi.coupon_type_us_id,
        oi.coupon_no,
        oi.is_check_bills,
        oi.check_bill_user_id,
        oi.check_bill_time,
        oi.is_tc,
        /*(TO_CHAR(ROUND(oi.tax_fee, 2), 'fm9999990.0099')) as taxFeeSum,*/
        replace(oi.receive_mobile, substr(oi.receive_mobile, 4, nvl(#strLength#,0)), '****') receive_mobile,
        replace(oi.receive_tel, substr(oi.receive_tel, 4, nvl(#strLength#,0)), '****') receive_tel,
        replace(oi.receive_full_address,substr(oi.receive_full_address,round(length(oi.receive_full_address) / 2, 0),nvl(#strLength#,0)),'*****') receive_full_address,
        m.real_name,m.login_name,au.user_real_name,
<!--         (select  WMSYS.WM_CONCAT(distinct pp.payment_type_name) from order_payment_log g,ec_payment_type pp  -->
<!--         where g.business_id=oi.order_id and g.payment_type_id=pp.payment_type_id) as  payment_type_name, -->
        (select  zh_concat(distinct pp.payment_type_name) from order_payment_type_list l,ec_payment_type pp 
          where l.order_id=oi.order_id and l.payment_type_id=pp.payment_type_id) as payment_type_name, 
<!--         ept.payment_type_name, -->
        st.code_value as state_name
        from order_info oi
        left join member m on
        oi.member_id=m.member_id and m.is_delete='N'
        left join sys_user au on
        oi.audit_user_id=au.user_id and au.is_delete='N'
        left join
        ec_payment_type ept on
        oi.payment_type_id=ept.payment_type_id and
        ept.is_delete='N'
        left join sys_code st on oi.order_state=st.code_id
        and st.is_delete='N'
        left join LOGISTIC_COMPANY lc on
        oi.LOGISTIC_COMPANY_ID =
        lc.LOGISTIC_COMPANY_ID
        where
        oi.order_id=#orderId# and oi.is_delete='N' and rownum=1
    </select>

    <resultMap id="lockInfo" class="HashMap">
        <result column="is_lock" property="isLock" javaType="String" />
        <result column="lock_time" property="lockTime" javaType="String" />
        <result column="lock_user_id" property="lockUserId" javaType="Integer" />
        <result column="user_real_name" property="lockUserName"
            javaType="String" />
    </resultMap>

    <select id="getLockUser" parameterClass="Long" resultMap="lockInfo">
        select
        oi.is_lock,oi.lock_time,oi.lock_user_id,su.user_real_name
        from
        order_info oi
        left join sys_user su on oi.lock_user_id=su.user_id
        where
        oi.order_id=#value# and oi.is_delete='N'
    </select>

    <select id="getOrderById" parameterClass="Long" resultMap="orderInfoByIdResult">
        select
        oi.order_id,
        oi.erp_order_id,
        oi.member_id,
        oi.parent_order_id,
        oi.multi_channel_id,
        oi.multi_channel_order_batch_id,
        oi.multi_channel_order_id,
        oi.is_upload,
        oi.upload_user_id,
        oi.upload_time,
        oi.is_paid,
        oi.payment_mode,
        oi.payment_type_id,
        oi.payment_no,
        oi.paid_time,
        oi.tax_fee,
        oi.offline_paid_user_id,
        oi.logistic_company_id,
        oi.order_state,
        oi.order_out_state,
        oi.limit_date,
        oi.sku_fee,
        oi.discount_fee,
        oi.order_points,
        oi.order_vouchers,
        oi.other_discounts,
        oi.delivery_fee,
        oi.order_fee,
        oi.paid_fee,
        oi.promote_rule_ids,
        oi.return_type,
        oi.return_value,
        oi.order_msg,
        oi.order_notes,
        oi.audit_notes,
        oi.audit_user_id,
        oi.audit_time,
        oi.is_lock,
        oi.lock_time,
        oi.lock_user_id,
        oi.commit_time,
        oi.finish_time,
        oi.cancel_time,
        oi.cancel_user_id,
        oi.cancel_notes,
        oi.sku_weights,
        oi.is_into_erp,
        oi.into_time,
        oi.receive_user,
        oi.province_id,
        oi.city_id,
        oi.area_id,
        oi.receive_address,
        oi.receive_full_address,
        oi.receive_post,
        oi.receive_tel,
        oi.receive_mobile,
        oi.receive_email,
        oi.receive_date_type,
        oi.receive_time_type,
        oi.invoice_type,
        oi.invoice_content_type,
        oi.invoice_title,
        oi.invoice_content,
        oi.invoice_tax_no,
        oi.invoice_tax_address,
        oi.invoice_tax_tel,
        oi.invoice_tax_bank,
        oi.invoice_tax_account,
        oi.is_delete,
        oi.add_user_id,
        oi.add_time,
        oi.edit_user_id,
        oi.edit_time,
        oi.url_from_no,
        oi.goods_batch_no,
        oi.order_pay_fee,
        oi.coupon_type_us_id,
        oi.coupon_no,
        oi.is_check_bills,
        oi.check_bill_user_id,
        oi.check_bill_time,
        oi.is_tc,sc.code_no from
        order_info oi
        left join sys_code sc on
        sc.code_id = oi.order_state
        where
        oi.order_id=#value# and
        oi.is_delete='N'
    </select>

    <select id="getOrderByIdForTrack" parameterClass="Long"
        resultMap="orderInfoByIdForTrackResult">
        select oi.order_id, oi.order_fee, oi.delivery_fee,
        eaa.area_name as
        province_name, eab.area_name as city_name,
        oi.member_id
        from
        order_info oi
        left join ec_area eaa on oi.province_id =
        eaa.area_id
        left join ec_area eab on oi.city_id = eab.area_id
        where
        oi.order_id=#value# and oi.is_delete='N'
    </select>

    <resultMap id="paymentRst" class="HashMap">
        <result column="paid_time" property="paidTime" javaType="String" />
        <result column="paid_fee" property="paidFee" javaType="decimal" />
        <result column="payment_no" property="paymentNo" javaType="String" />
        <result column="is_paid" property="isPaid" javaType="String" />
        <result column="order_fee" property="orderFee" javaType="decimal" />
        <result column="payment_type_name" property="paymentTypeName"
            javaType="String" />
    </resultMap>

    <select id="getPaymentInfoById" parameterClass="Long" resultMap="paymentRst">
        select oi.paid_time,oi.paid_fee,oi.payment_no,
        oi.is_paid,oi.order_fee,
<!--         (select  WMSYS.WM_CONCAT(distinct pp.payment_type_name) from order_payment_log g,ec_payment_type pp  -->
<!--         where g.business_id=oi.order_id and g.payment_type_id=pp.payment_type_id) as  payment_type_name -->
        (select  zh_concat(distinct pp.payment_type_name) from order_payment_type_list l,ec_payment_type pp 
           where l.order_id=oi.order_id and l.payment_type_id=pp.payment_type_id) as  payment_type_name
<!--         ep.payment_type_name -->
        from order_info oi left
        join ec_payment_type ep
        on oi.payment_type_id=ep.payment_type_id and
        ep.is_delete='N'
        where oi.order_id=#value# and oi.is_delete='N'
    </select>

    <resultMap id="feeRsltMap" class="HashMap">
        <result column="item_sku_fee" property="itemSkuFee" javaType="decimal" />
        <result column="sku_fee" property="skuFee" javaType="decimal" />
        <result column="order_fee" property="orderFee" javaType="decimal" />
        <result column="order_pay_fee" property="orderPayFee" javaType="decimal" />
        <result column="order_points" property="orderPoints" javaType="decimal" />
        <result column="order_vouchers" property="orderVouchers"
            javaType="decimal" />
        <result column="other_discounts" property="otherDiscounts"
            javaType="decimal" />
        <result column="delivery_fee" property="deliveryFee" javaType="decimal" />
        <result column="discount_fee" property="discountFee" javaType="decimal" />
    </resultMap>

    <select id="getFees" parameterClass="Long" resultMap="feeRsltMap">
        select
        nvl(sum(nvl(it.goods_amount,0)*nvl(it.goods_price,0)),0) as
        item_sku_fee,
        nvl(avg(nvl(oi.sku_fee,0)),0) as sku_fee,
        nvl(avg(nvl(oi.order_fee,0)),0) as order_fee,
        nvl(avg(nvl(oi.order_pay_fee,0)),0) as order_pay_fee,
        nvl(avg(nvl(oi.order_points,0)),0) as order_points,
        nvl(avg(nvl(oi.order_vouchers,0)),0) as order_vouchers,
        nvl(avg(nvl(oi.other_discounts,0)),0) as other_discounts,
        nvl(avg(nvl(oi.delivery_fee,0)),0) as delivery_fee,
        nvl(avg(nvl(oi.discount_fee,0)),0) as discount_fee
        from order_info
        oi,order_item it
        where oi.order_id=it.order_id and oi.is_delete='N' and
        it.is_delete='N'
        and
        oi.order_id=#value#
    </select>

    <sql id="queryOrderSql">
       <isNotEmpty prepend="and" property="commitTimeBg">
            <![CDATA[
            to_date(nvl(o.paid_time,o.commit_time), 'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#commitTimeBg#||' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                to_date(nvl(o.paid_time,o.commit_time), 'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#commitTimeEd#||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="limitDateBg">
            <![CDATA[
            to_date(o.limit_date,'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#limitDateBg#||' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="limitDateEd">
            <![CDATA[
                to_date(o.limit_date,'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#limitDateEd#||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paidTimeBg">
            <![CDATA[
                o.paid_time >= #paidTimeBg#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paidTimeEd">
            <![CDATA[
                o.paid_time <= #paidTimeEd#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderState">
            o.order_state =#orderState#
        </isNotEmpty>
       <isNotEmpty prepend="and" property="multiChannelId">
            o.multi_channel_id =#multiChannelId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="urlFromNo">
            nvl((select u.characters
            from urlfrom u 
            where u.is_delete = 'N' and u.spare1=1 and u.url like '%' || (case
            when instr(o.url_from_no,
            '//') > 0 then
            substr(o.url_from_no,
            instr(o.url_from_no, '//', 1, 1) +
            2,
            instr(o.url_from_no, '/', 1, 3) - 8)
            when o.url_from_no is null then 'null'
            else
            o.url_from_no
            end) || '%'
            and rownum = 1),
            o.url_from_no) like '%$urlFromNo$%'
        </isNotEmpty>
        <isEqual prepend="and" property="isvalid" compareValue="是">
            ((o.payment_mode = 'KDFH' and o.IS_PAID = 'Y') or (o.payment_mode ='HDFK') ) and o.order_state NOT in (25)
        </isEqual>
        <isEqual prepend="and" property="isvalid" compareValue="否">
            ((o.payment_mode = 'KDFH' and o.IS_PAID = 'N') or o.order_state in (25))
        </isEqual>
        <isNotEmpty prepend="and" property="isPaid">
            o.is_paid = #isPaid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isCheckBills">
            o.is_check_bills =#isCheckBills#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="erpOrderId">
            o.erp_order_id =#erpOrderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderId">
            o.order_id = #orderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveUser">
            o.receive_user =#receiveUser#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberLoginName">
            m.login_name =#memberLoginName#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentTypeId">
            o.payment_type_id =#paymentTypeId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="provinceId">
            o.PROVINCE_ID=#provinceId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsNo">
            exists(
            select 1 from order_item oi where oi.goods_no = #goodsNo#
            and oi.order_id =o.order_id and oi.is_delete = 'N'
            )
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentMode">
            o.payment_mode=#paymentMode#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="sale">
            (select us.user_real_name from sys_user us where 
              us.user_id=o.add_user_id and us.is_delete='N') like '%$sale$%'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveMobile">
            o.receive_mobile =#receiveMobile#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="userId">
            (exists (select 1
            from
            fecerp.sys_role_select rs, fecerp.sys_role_user su
            where su.role_id =
            rs.role_id
            and su.user_id = #userId#
            and su.is_delete = 'N'
            and
            rs.othera = 0) OR exists
            (select 1
            from fecerp.sys_role_select rs,
            fecerp.sys_role_user su,
            product_yw_catalog pyc,
            product_yw_catalog_goods ycg,
            order_item oi
            where su.role_id =
            rs.role_id
            and pyc.yw_catalog_id = ycg.wy_catalog_id
            and su.user_id =
            #userId#
            and rs.othera &lt;&gt; 0
            and su.is_delete = 'N'
            and ',' ||
            rs.bus_ids || ',' like
            '%,' || pyc.yw_catalog_id || ',%'
            and
            oi.order_id = o.order_id
            and oi.is_delete = 'N'
            and ycg.goods_no =
            oi.goods_no))
        </isNotEmpty>
        <isNotEmpty prepend="and" property="addUserId">
            o.ADD_USER_ID =#addUserId#
        </isNotEmpty>
         <isNotEmpty prepend="and" property="paymentNo">
            o.payment_no =#paymentNo#
         </isNotEmpty>
         <isNotEmpty prepend="and" property="isTc">
            o.IS_TC =#isTc#
         </isNotEmpty>
    </sql>
    
    <sql id="queryOrderSqlnew">
       <isNotEmpty prepend="and" property="commitTimeBg">
            <![CDATA[
            to_date(nvl(o.paid_time,o.commit_time), 'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#commitTimeBg#||' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                to_date(nvl(o.paid_time,o.commit_time), 'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#commitTimeEd#||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="limitDateBg">
            <![CDATA[
            to_date(o.limit_date,'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#limitDateBg#||' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="limitDateEd">
            <![CDATA[
                to_date(o.limit_date,'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#limitDateEd#||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderState">
            o.order_state =#orderState#
        </isNotEmpty>
       <isNotEmpty prepend="and" property="multiChannelId">    
            o.multi_channel_id =#multiChannelId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="urlFromNo">
            nvl((select u.characters
            from urlfrom u 
            where u.is_delete = 'N' and u.spare1=1 and u.url like '%' || (case
            when instr(o.url_from_no,
            '//') > 0 then
            substr(o.url_from_no,
            instr(o.url_from_no, '//', 1, 1) +
            2,
            instr(o.url_from_no, '/', 1, 3) - 8)
            when o.url_from_no is null then 'null'
            else
            o.url_from_no
            end) || '%'
            and rownum = 1),
            o.url_from_no) like '%$urlFromNo$%'
        </isNotEmpty>
        <isEqual prepend="and" property="isvalid" compareValue="是">
            ((o.payment_mode = 'KDFH' and o.IS_PAID = 'Y') or (o.payment_mode =
            'HDFK') ) and o.order_state NOT in (25)
        </isEqual>
        <isEqual prepend="and" property="isvalid" compareValue="否">
            ((o.payment_mode = 'KDFH' and o.IS_PAID = 'N') or o.order_state in
            (25))
        </isEqual>
        <isNotEmpty prepend="and" property="isPaid">
            o.is_paid = #isPaid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isCheckBills">
            o.is_check_bills =#isCheckBills#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="erpOrderId">
            o.erp_order_id =#erpOrderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderId">
            o.order_id = #orderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveUser">
            o.receive_user =#receiveUser#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberLoginName">
           (select m.login_name from member m where m.is_delete='N' and m.member_id=o.member_id)=#memberLoginName#
        </isNotEmpty>
        
<!--         <isNotEmpty prepend="and" property="paymentTypeId"> -->
<!--             o.payment_type_id =#paymentTypeId# -->
<!--         </isNotEmpty> -->
        <isNotEmpty prepend="and"  property="paymentTypeId">
             o.order_id in (select t.order_id from order_payment_type_list t where t.payment_type_id=#paymentTypeId#)
        </isNotEmpty>
        
        <isNotEmpty prepend="and" property="provinceId">
            o.PROVINCE_ID=#provinceId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsNo">
            exists(
            select 1 from
            order_item oi where oi.goods_no = #goodsNo#
            and oi.order_id =
            o.order_id
            and oi.is_delete = 'N'
            )
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentMode">
            o.payment_mode=#paymentMode#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="sale">
            (select
            us.user_real_name from sys_user us where us.user_id=o.add_user_id
            and
            us.is_delete='N') like '%$sale$%'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveMobile">
            o.receive_mobile =#receiveMobile#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="bizIds">
             exists 
             ( select 1 from order_item oi ,
                product_yw_catalog       pyc,
                product_yw_catalog_goods ycg
             where oi.goods_no = ycg.goods_no 
             and pyc.yw_catalog_id = ycg.wy_catalog_id
             and oi.order_id=o.order_id
             and pyc.yw_catalog_id in 
             <iterate property="bizIds" open="(" close=")" conjunction=",">
                #bizIds[]#
             </iterate>
              )
        </isNotEmpty>
            <isNotEmpty prepend="and" property="addUserId">
            o.ADD_USER_ID =#addUserId#
        </isNotEmpty>
        <!--给我的订单加上渠道权限 -->
        <isNotEmpty prepend="and" property="mults">
            o.multi_channel_id in 
             <iterate property="mults" open="(" close=")" conjunction=",">
                #mults[]#
             </iterate>
         </isNotEmpty>
         <isNotEmpty prepend="and" property="paymentNo">
            o.payment_no =#paymentNo#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="publishId">
            o. coupon_no in (select cou.coupon_no from ec_coupons  cou where cou.publish_id=#publishId#)
        </isNotEmpty>
        <isNotEmpty prepend="and" property="userState">
            <isEqual property="userState"  compareValue="once">
            <![CDATA[
             not exists (select 1 from order_info ord where ord.order_id <> o.order_id and o.member_id = ord.member_id and ord.is_delete = 'N')
             ]]>
            </isEqual>
            <isEqual property="userState"  compareValue="multiple">
            <![CDATA[
              exists(select 1 from order_info ord where ord.order_id <> o.order_id and o.member_id = ord.member_id and ord.is_delete = 'N')
            ]]>
            </isEqual>
    </isNotEmpty>
    </sql>
    
    <!--此where条件,订单专用,请不要在别的sql中引用 liuyuandi 2015-7-10 10:20:59 -->
    <sql id="queryOrderSqlnewOrder_old">
       
        <isNotEmpty prepend="and" property="commitTimeBg">
            o.commit_time&gt;=#commitTimeBg# || ' 00:00:00'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            o.commit_time&lt;=#commitTimeEd# || ' 23:59:59'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="auditTimeBg">
            o.audit_time&gt;=#auditTimeBg# || ' 00:00:00'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="auditTimeEd">
            o.audit_time&lt;=#auditTimeEd# || ' 23:59:59'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="limitDateBg">
            <![CDATA[
            to_date(o.limit_date,'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#limitDateBg#||' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="limitDateEd">
            <![CDATA[
                to_date(o.limit_date,'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#limitDateEd#||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderState">
            o.order_state =#orderState#
        </isNotEmpty>
       <isNotEmpty prepend="and" property="multiChannelId">    
            o.multi_channel_id =#multiChannelId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="urlFromNo">
            nvl((select u.characters
            from urlfrom u 
            where u.is_delete = 'N' and u.spare1=1 and u.url like '%' || (case
            when instr(o.url_from_no,
            '//') > 0 then
            substr(o.url_from_no,
            instr(o.url_from_no, '//', 1, 1) +
            2,
            instr(o.url_from_no, '/', 1, 3) - 8)
            when o.url_from_no is null then 'null'
            else
            o.url_from_no
            end) || '%'
            and rownum = 1),
            o.url_from_no) like '%$urlFromNo$%'
        </isNotEmpty>
        <isEqual prepend="and" property="isvalid" compareValue="是">
            ((o.payment_mode = 'KDFH' and o.IS_PAID = 'Y') or (o.payment_mode =
            'HDFK') ) and o.order_state NOT in (25)
        </isEqual>
        <isEqual prepend="and" property="isvalid" compareValue="否">
            ((o.payment_mode = 'KDFH' and o.IS_PAID = 'N') or o.order_state in
            (25))
        </isEqual>
        <isNotEmpty prepend="and" property="isPaid">
            o.is_paid = #isPaid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isCheckBills">
            o.is_check_bills =#isCheckBills#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="erpOrderId">
            o.erp_order_id =#erpOrderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderId">
            o.order_id = #orderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveUser">
            o.receive_user =#receiveUser#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberLoginName">
           (select m.login_name from member m where m.is_delete='N' and m.member_id=o.member_id)=#memberLoginName#
        </isNotEmpty>
<!--         <isNotEmpty prepend="and" property="paymentTypeId"> -->
<!--             o.payment_type_id =#paymentTypeId# -->
<!--         </isNotEmpty> -->
        <isNotEmpty prepend="and"  property="paymentTypeId">
             o.order_id in (select t.order_id from order_payment_type_list t where t.payment_type_id=#paymentTypeId#)
        </isNotEmpty>
        
        <isNotEmpty prepend="and" property="provinceId">
            o.PROVINCE_ID=#provinceId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsNo">
            exists(
            select 1 from
            order_item oi where oi.goods_no = #goodsNo#
            and oi.order_id =
            o.order_id
            and oi.is_delete = 'N'
            )
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentMode">
            o.payment_mode=#paymentMode#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="sale">
            (select
            us.user_real_name from sys_user us where us.user_id=o.add_user_id
            and
            us.is_delete='N') like '%$sale$%'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveMobile">
            o.receive_mobile =#receiveMobile#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="bizIds">
             exists 
             ( select 1 from order_item oi ,
                product_yw_catalog       pyc,
                product_yw_catalog_goods ycg
             where oi.goods_no = ycg.goods_no 
             and pyc.yw_catalog_id = ycg.wy_catalog_id
             and oi.order_id=o.order_id
             and pyc.yw_catalog_id in 
             <iterate property="bizIds" open="(" close=")" conjunction=",">
                #bizIds[]#
             </iterate>
              )
        </isNotEmpty>
            <isNotEmpty prepend="and" property="addUserId">
            o.ADD_USER_ID =#addUserId#
        </isNotEmpty>
        <!--给我的订单加上渠道权限 -->
        <isNotEmpty prepend="and" property="mults">
            o.multi_channel_id in 
             <iterate property="mults" open="(" close=")" conjunction=",">
                #mults[]#
             </iterate>
         </isNotEmpty>
         <isNotEmpty prepend="and" property="paymentNo">
            o.payment_no =#paymentNo#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="publishId">
            o. coupon_no in (select cou.coupon_no from ec_coupons  cou where cou.publish_id=#publishId#)
        </isNotEmpty>
        <isNotEmpty prepend="and" property="userState">
            <isEqual property="userState"  compareValue="once">
            <![CDATA[
             not exists (select 1 from order_info ord where ord.order_id <> o.order_id and o.member_id = ord.member_id and ord.is_delete = 'N')
             ]]>
            </isEqual>
            <isEqual property="userState"  compareValue="multiple">
            <![CDATA[
              exists(select 1 from order_info ord where ord.order_id <> o.order_id and o.member_id = ord.member_id and ord.is_delete = 'N')
            ]]>
            </isEqual>
    </isNotEmpty>
    </sql>
    
    <!--此where条件,订单专用,请不要在别的sql中引用 huhailang 2015-8-12 10:20:59 -->
    <sql id="queryOrderSqlnewOrder">
       
        <!--and ((o.multi_channel_id = 1 and is_tc <![CDATA[<>]]> 'Y') or o.multi_channel_id <![CDATA[<>]]> 1)-->
        and o.is_tc <![CDATA[<>]]> 'Y'

        <isNotEmpty prepend="and" property="userLoginType">
           exists (select 1 from member_sso ms,member mm where o.member_id=mm.member_id and mm.login_name=ms.login_name and ms.login_sso_type=#userLoginType#)
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeBg">
            o.commit_time&gt;=#commitTimeBg# || ' 00:00:00'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            o.commit_time&lt;=#commitTimeEd# || ' 23:59:59'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="auditTimeBg">
            o.audit_time&gt;=#auditTimeBg# || ' 00:00:00'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="auditTimeEd">
            o.audit_time&lt;=#auditTimeEd# || ' 23:59:59'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="limitDateBg">
            <![CDATA[
            to_date(o.limit_date,'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#limitDateBg#||' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="limitDateEd">
            <![CDATA[
                to_date(o.limit_date,'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#limitDateEd#||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderState">
            o.order_state =#orderState#
        </isNotEmpty>
<!--        <isNotEmpty prepend="and" property="multiChannelId"> -->    
<!--             o.multi_channel_id =#multiChannelId# -->
<!--         </isNotEmpty> -->
        <isNotEmpty prepend="and" property="urlFromNo">
        nvl((select u.characters
            from urlfrom u 
            where u.is_delete = 'N' and u.spare1=1 and u.url like '%' || (case
            when instr(o.url_from_no,
            '//') > 0 then
            substr(o.url_from_no,
            instr(o.url_from_no, '//', 1, 1) +
            2,
            instr(o.url_from_no, '/', 1, 3) - 8)
            when o.url_from_no is null then 'null'
            else
            o.url_from_no
            end) || '%'
            and rownum = 1),
            o.url_from_no) like '%$urlFromNo$%'
        </isNotEmpty>
        <isEqual prepend="and" property="isvalid" compareValue="是">
            o.audit_time is not null and o.order_state not in (18,19,25)
        </isEqual>
        <isEqual prepend="and" property="isvalid" compareValue="否">
            (o.audit_time is null or o.order_state in (18,19,25))
        </isEqual>
        <isNotEmpty prepend="and" property="isPaid">
            o.is_paid = #isPaid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isCheckBills">
            o.is_check_bills =#isCheckBills#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="erpOrderId">
            o.erp_order_id =#erpOrderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderId">
            o.order_id = #orderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveUser">
            o.receive_user =#receiveUser#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberLoginName">
           exists (select 1 from member m where m.is_delete='N' and m.member_id=o.member_id and m.login_name=#memberLoginName#)
<!--            (select m.login_name from member m where m.is_delete='N' and m.member_id=o.member_id)=#memberLoginName# -->
        </isNotEmpty>
        
<!--         <isNotEmpty prepend="and" property="paymentTypeId"> -->
<!--             o.payment_type_id =#paymentTypeId# -->
<!--         </isNotEmpty> -->
        <isNotEmpty prepend="and"  property="paymentTypeId">
             o.order_id in (select t.order_id from order_payment_type_list t where t.payment_type_id=#paymentTypeId#)
        </isNotEmpty>
        
        <isNotEmpty prepend="and" property="provinceId">
            o.PROVINCE_ID=#provinceId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsNo">
            exists(
            select 1 from
            order_item oi where oi.goods_no = #goodsNo#
            and oi.order_id =
            o.order_id
            and oi.is_delete = 'N'
            )
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentMode">
            o.payment_mode=#paymentMode#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="sale">
           exists(select 1 from sys_user us where us.user_id=o.add_user_id and us.is_delete='N' and us.user_real_name like '%$sale$%')
<!--             (select -->
<!--             us.user_real_name from sys_user us where us.user_id=o.add_user_id -->
<!--             and -->
<!--             us.is_delete='N') like '%$sale$%' -->
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveMobile">
            o.receive_mobile =#receiveMobile#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="bizIds">
             exists 
             ( select 1 from order_item oi ,
                product_yw_catalog       pyc,
                product_yw_catalog_goods ycg
             where oi.goods_no = ycg.goods_no 
             and pyc.yw_catalog_id = ycg.wy_catalog_id
             and oi.order_id=o.order_id
             and pyc.yw_catalog_id in 
             <iterate property="bizIds" open="(" close=")" conjunction=",">
                #bizIds[]#
             </iterate>
              )
        </isNotEmpty>
            <isNotEmpty prepend="and" property="addUserId">
            o.ADD_USER_ID =#addUserId#
        </isNotEmpty>
        <!--给我的订单加上渠道权限 -->
        <isNotEmpty prepend="and" property="mults">
            o.multi_channel_id in 
             <iterate property="mults" open="(" close=")" conjunction=",">
                #mults[]#
             </iterate>
         </isNotEmpty>
         <isNotEmpty prepend="and" property="paymentNo">
            o.payment_no =#paymentNo#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="publishId">
            o. coupon_no in (select cou.coupon_no from ec_coupons  cou where cou.publish_id=#publishId#)
        </isNotEmpty>
        <isNotEmpty prepend="and" property="userState">
            <isEqual property="userState"  compareValue="once">
            <![CDATA[
             not exists (select 1 from order_info ord where ord.order_id <> o.order_id and o.member_id = ord.member_id and ord.is_delete = 'N')
             ]]>
            </isEqual>
            <isEqual property="userState"  compareValue="multiple">
            <![CDATA[
              exists(select 1 from order_info ord where ord.order_id <> o.order_id and o.member_id = ord.member_id and ord.is_delete = 'N')
            ]]>
            </isEqual>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsSeller">    
            o.goods_seller =#goodsSeller#
        </isNotEmpty>
    </sql>
    <!-- 0926新查询 -->
    <select id="getNewQueryOrders" resultClass="OrderQueryInfo"
        parameterClass="OrderInfo">
        select *
        from (
        select rownum rn,t.*
        from (
        select o.order_id as orderId,
       o.erp_order_id as erpOrderId,
       (select lc.company_name
          from order_shipping os,logistic_company lc 
         where os.logistic_company_id = lc.logistic_company_id and os.order_shipping_no = o.erp_order_id and rownum = 1) as companyName,
         (select m.channel_name
          from ec_multi_channel m
         where m.multi_channel_id = o.multi_channel_id) as multiChannel,
        o.receive_user as receiveUser,
       (case
         when o.audit_time is not null and o.order_state!=25 then
          ''
         else
          ''
       end) as isValid,
       o.is_into_erp isIntoErp,
       (select zh_concat(oi.goods_name || '*' || oi.goods_amount)
          from order_item oi
         where oi.order_id = o.order_id
           and oi.is_delete = 'N' group by oi.order_id) buyGoods,
       (select sum(oi.GOODS_AMOUNT)
          from order_item oi
         where oi.order_id = o.order_id
           and oi.is_delete = 'N') goodsSum,
       o.sku_fee as totalFee,
       o.tax_fee as taxFeeSum,
       o.delivery_fee as deliveryFee,
       o.order_vouchers as orderVouchers,
       o.order_fee as orderFee,    
       replace(o.receive_mobile, substr(o.receive_mobile, 4, 4), '****') customerTel,
       replace(o.receive_address,substr(o.receive_address,round(length(o.receive_address) / 2, 0),5),'*****') receiveAddress,
       (select ea.area_name from ec_area ea where ea.area_id = o.province_id) as earaAddress,              
       (select c.CODE_VALUE from sys_code c where c.code_id = o.order_state) as codeValue,     
       o.is_paid as isPaid, 
       (select zh_concat(distinct pp.payment_type_name) from order_payment_type_list l,ec_payment_type pp where l.order_id=o.order_id and l.payment_type_id=pp.payment_type_id) as  paymentTypeName,
<!--        (select p.payment_type_name from ec_payment_type p where p.payment_type_id = o.payment_type_id) as paymentTypeName, -->
       (select c.CODE_VALUE from sys_code c where c.code_id = o.order_state and c.code_id in (27, 23, 26)) as deliveryState,  
       o.IS_CHECK_BILLS financeSum,   
       nvl((select u.characters from urlfrom u 
        where u.is_delete = 'N' and u.spare1=1 and u.url like '%' || (case when instr(o.url_from_no, '//')> 0 then
        substr(o.url_from_no,instr(o.url_from_no, '//', 1, 1) + 2,instr(o.url_from_no, '/', 1, 3) - 8)
        when o.url_from_no is null then 'null'
        else o.url_from_no
        end) || '%' and rownum = 1),
        o.url_from_no) as urlFromNo,
        o.return_value || '/' || o.order_points points,     
        (select us.user_real_name from sys_user us where us.user_id = o.add_user_id and us.is_delete = 'N') as sale,    
        DECODE(o.PAYMENT_MODE,
        'KDFH',
        '款到发货',
        'HDFK',
        '货到付款',
        'HDFK_POS',
        '货到付款',
        'ZTFK',
        '自提付款') as paymentMode,       
        o.commit_time as commitTime, 
        o.AUDIT_TIME as auditTime,
        o.multi_channel_order_id as multiChannelOrderId, 
        (select count(*) + 1 from order_info oi where oi.order_id &lt; o.order_id and oi.member_id = o.member_id) sumOrders,  
        (nvl((select sum(oi.ORDER_FEE) from order_info oi where oi.order_id &lt; o.order_id and oi.member_id = o.member_id),0) + o.order_fee) sumFees,
        (select sum(it.goods_amount * it.goods_cost_price) from order_item it where it.order_id = o.order_id and it.is_delete = 'N') as costPrice, 
        o.invoice_tax_address as invoiceTaxAddress,
        o.member_id as memberId
        from order_info o 
        where o.is_delete = 'N' 
        <include refid="queryOrderSqlnewOrder" />
        order by o.commit_time desc
        ) t
        <isNotEmpty prepend="where" property="endRow">
                 <![CDATA[
                 rownum <= #endRow#
                 ]]>
        </isNotEmpty>
        ) oii
        <isNotEmpty prepend="where" property="startRow">
             <![CDATA[
                 oii.rn >= #startRow#
             ]]>
        </isNotEmpty>
    </select>
    <select id="getNewQueryOrdersCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select
        count(o.order_id)
        from order_info o 
        where o.is_delete = 'N' 
        <include refid="queryOrderSqlnewOrder" />
    </select>
    <!--1015订单查询显示的三个字段 -->
    <select id="totalCount" resultMap="totalCount" parameterClass="OrderInfo">
       select 
       0 as orderPointsMoney,
       0 as orderVouchersMoney,
       0 as returnGoods,
       0 as totalNum,
       0 as totalMoney,
       0 as aveNum,
       0 as avegoods,
       0 as costFee
       from dual
    </select>
    <!--2014 03 31订单查询显示的三个字段 -->
    <select id="totalCountFirst" resultMap="totalCountFirstMap" parameterClass="OrderInfo">
       select 
       0 as orderPointsMoney,
       0 as orderVouchersMoney,
       0 as returnGoods,
       0 as totalNum,
       0 as totalMoney,
       0 as aveNum,
       0 as avegoods,
       0 as costFee
       from dual
    </select>
        <!--处方药自行下单查询(o.is_tc='Y' and o.multi_channel_id=1)一 2015-7-27 16:11:37  -->
    <select id="getNewTcQueryOrders" resultClass="OrderQueryInfo"
        parameterClass="OrderInfo">
        select *
        from (
        select rownum rn,t.*
        from (
        select o.order_id as orderId,
       o.erp_order_id as erpOrderId,
       (select lc.company_name
          from order_shipping os,logistic_company lc 
         where os.logistic_company_id = lc.logistic_company_id and os.order_shipping_no = o.erp_order_id and rownum = 1) as companyName,
         (select m.channel_name
          from ec_multi_channel m
         where m.multi_channel_id = o.multi_channel_id) as multiChannel,
        o.receive_user as receiveUser,
       (case
         when ((o.payment_mode = 'KDFH' AND o.IS_PAID = 'Y') or o.payment_mode = 'HDFK') and o.order_state not in (25) then
          ''
         else
          ''
       end) as isValid,
       o.is_into_erp isIntoErp,
       (select zh_concat(oi.goods_name || '*' || oi.goods_amount)
          from order_item oi
         where oi.order_id = o.order_id
           and oi.is_delete = 'N' group by oi.order_id) buyGoods,
       (select sum(oi.GOODS_AMOUNT)
          from order_item oi
         where oi.order_id = o.order_id
           and oi.is_delete = 'N') goodsSum,
       o.sku_fee as totalFee,
       o.delivery_fee as deliveryFee,
       o.order_vouchers as orderVouchers,
       o.order_fee as orderFee,    
       replace(o.receive_mobile, substr(o.receive_mobile, 4, 4), '****') customerTel,
       replace(o.receive_address,substr(o.receive_address,round(length(o.receive_address) / 2, 0),5),'*****') earaAddress,
       (select ea.area_name from ec_area ea where ea.area_id = o.province_id) as receiveAddress,              
       (select c.CODE_VALUE from sys_code c where c.code_id = o.order_state) as codeValue,     
       o.is_paid as isPaid, 
       (select zh_concat(distinct pp.payment_type_name) from order_payment_type_list l,ec_payment_type pp where l.order_id=o.order_id and l.payment_type_id=pp.payment_type_id) as  paymentTypeName,
<!--        (select p.payment_type_name from ec_payment_type p where p.payment_type_id = o.payment_type_id) as paymentTypeName, -->
       (select c.CODE_VALUE from sys_code c where c.code_id = o.order_state and c.code_id in (27, 23, 26)) as deliveryState,  
       o.IS_CHECK_BILLS financeSum,   
       nvl((select u.characters from urlfrom u 
        where u.is_delete = 'N' and u.spare1=1 and u.url like '%' || (case when instr(o.url_from_no, '//')> 0 then
        substr(o.url_from_no,instr(o.url_from_no, '//', 1, 1) + 2,instr(o.url_from_no, '/', 1, 3) - 8)
        when o.url_from_no is null then 'null'
        else o.url_from_no
        end) || '%' and rownum = 1),
        o.url_from_no) as urlFromNo,
        o.return_value || '/' || o.order_points points,     
        (select us.user_real_name from sys_user us where us.user_id = o.add_user_id and us.is_delete = 'N') as sale,    
        DECODE(o.PAYMENT_MODE,
        'KDFH',
        '款到发货',
        'HDFK',
        '货到付款',
        'HDFK_POS',
        '货到付款',
        'ZTFK',
        '自提付款') as paymentMode,       
        o.commit_time as commitTime, 
        o.AUDIT_TIME as auditTime,
        o.multi_channel_order_id as multiChannelOrderId, 
        (select count(*) + 1 from order_info oi where oi.order_id &lt; o.order_id and oi.member_id = o.member_id) sumOrders,  
        (nvl((select sum(oi.ORDER_FEE) from order_info oi where oi.order_id &lt; o.order_id and oi.member_id = o.member_id),0) + o.order_fee) sumFees,
        (select sum(it.goods_amount * it.goods_cost_price) from order_item it where it.order_id = o.order_id and it.is_delete = 'N') as costPrice, 
        o.invoice_tax_address as invoiceTaxAddress,
        (select m.member_id from member m where m.member_id=o.member_id and m.is_delete='N') as memberId
        from order_info o
        where o.is_delete = 'N'
        and o.is_tc='Y' and o.multi_channel_id=1
        <include refid="queryOrderSqlnew" />
        order by o.commit_time desc
        ) t
        <isNotEmpty prepend="where" property="endRow">
                 <![CDATA[
                 rownum <= #endRow#
                 ]]>
        </isNotEmpty>
        ) oii
        <isNotEmpty prepend="where" property="startRow">
             <![CDATA[
                 oii.rn >= #startRow#
             ]]>
        </isNotEmpty>
    </select>
    <select id="getNewTcQueryOrdersCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select
        count(o.order_id)
        from order_info o
        where o.is_delete = 'N' 
        and o.is_tc='Y' and o.multi_channel_id=1
        <include refid="queryOrderSqlnew" />
    </select>

    <!--处方药自行下单汇总(o.is_tc='Y' and o.multi_channel_id=1)一 2015-7-27 16:10:48 -->
    <select id="totalCountTc" resultMap="totalCount" parameterClass="OrderInfo">
       select 
       nvl(sum(o.order_points),0) as orderPointsMoney,
       nvl(sum(o.order_vouchers),0) as orderVouchersMoney,
       nvl(sum((select sum(oo.order_fee-oo.delivery_fee) from order_info oo where oo.order_id=o.order_id and oo.is_delete='N' and oo.order_state=18)),0) as returnGoods,
       count(o.order_id) as totalNum,
       nvl(sum(o.ORDER_FEE-o.delivery_fee),0) as totalMoney,
       nvl(count(distinct o.member_id),0) as aveNum,
       nvl(sum((select sum(ii.goods_amount)
                   from order_item ii
                  where ii.order_id = o.order_id
                    and ii.is_delete = 'N')),0) as avegoods,
       nvl(sum((select sum(it.goods_amount * it.goods_cost_price)
             from order_item it
            where it.order_id = o.order_id
              and it.is_delete = 'N')),0) as costFee
             from order_info o
             where o.is_delete = 'N' 
             and o.is_tc='Y' and o.multi_channel_id=1
        <include refid="queryOrderSqlnew" />
    </select>
    <!--处方药自行下单汇总一(o.is_tc='Y' and o.multi_channel_id=1) 2015-7-27 16:10:48 -->
    <select id="totalCountFirstTc" resultMap="totalCountFirstMap" parameterClass="OrderInfo">
         select 
         nvl(sum(o.order_points),0) as orderPointsMoneyFirst,
         nvl(sum(o.order_vouchers),0) as orderVouchersMoneyFirst,
         nvl(sum((select sum(oo.order_fee-oo.delivery_fee) from order_info oo where oo.order_id=o.order_id and oo.is_delete='N' and oo.order_state=18)),0) as returnGoodsFirst,
         count(o.order_id) as totalNumFirst,
         nvl(sum(o.ORDER_FEE-o.delivery_fee),0) as totalMoneyFirst,
         nvl(count(distinct o.member_id),0) as aveNumFirst,
         nvl(sum((select sum(ii.goods_amount)
                     from order_item ii
                    where ii.order_id = o.order_id
                      and ii.is_delete = 'N')),0) as avegoodsFirst,
         nvl(sum((select sum(it.goods_amount * it.goods_cost_price)
               from order_item it
              where it.order_id = o.order_id
                and it.is_delete = 'N')),0) as costFeeFirst
               from order_info o
               where o.is_delete = 'N' 
               and o.is_tc='Y' and o.multi_channel_id=1
               and o.member_id in
               (select o.member_id from order_info o where o.is_delete='N' and o.order_new=1
                <include refid="queryOrderSqlnew" />
               )
             <include refid="queryOrderSqlnew" />
        
    </select>
   <sql id="getGoodsPriceListWhere">
       <isNotEmpty prepend="and" property="orderId">
            o.order_id = #orderId#
       </isNotEmpty>
       <isNotEmpty prepend="and" property="goodsNo">
        (select m.goods_no from order_item m where m.is_delete='N' and  m.order_id=o.order_id and rownum=1)=#goodsNo#
       </isNotEmpty>
          <isNotEmpty prepend="and" property="commitTimeBg">
           <![CDATA[
              to_date(o.commit_time, 'YYYY-MM-DD hh24:mi:ss') >=to_date(#commitTimeBg#||' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
           ]]>
      </isNotEmpty>
      <isNotEmpty prepend="and" property="commitTimeEd">
           <![CDATA[
              to_date(o.commit_time, 'YYYY-MM-DD hh24:mi:ss') <=to_date(#commitTimeEd#||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
           ]]>
     </isNotEmpty>
      <isNotEmpty prepend="and" property="paymentTypeId">
         o.payment_type_id =#paymentTypeId#
     </isNotEmpty>
   </sql>
    
    <!--按类目查询的订单查询 -->
   <select id="queryTotalList" resultClass="HashMap" parameterClass="OrderInfo">
           select rownum as NUM_ID,o.order_id,o.member_id,
            (select m.goods_no from order_item m where m.is_delete='N' and  m.order_id=o.order_id and rownum=1) as goods_no,
              replace(o.receive_mobile, substr(o.receive_mobile, 4, 4), '****') customerTel,
               o.receive_user as receiveUser,
              (select zh_concat(oi.goods_name || '*' || oi.goods_amount)
                from order_item oi
               where oi.order_id = o.order_id
                 and oi.is_delete = 'N' group by oi.order_id) buyGoods,
              (select p.payment_type_name from ec_payment_type p where p.payment_type_id = o.payment_type_id) as paymentTypeName,
              (select sum(oi.GOODS_AMOUNT) from order_item oi where oi.order_id = o.order_id and oi.is_delete = 'N') goodsSum,
              <isNotEmpty property="ywIds">
                <iterate property="ywIds">
                   yy.$ywIds[].ywCatalogName$,
                </iterate>
              </isNotEmpty>
              <isNotEmpty property="ywIds1">
                <iterate property="ywIds1">
                   yy.$ywIds1[].ywCatalogName$,
                </iterate>
              </isNotEmpty>
               o.sku_fee as totalFee
              from order_info o,
               (
                   select 
                   <isNotEmpty property="ywIds">
                       <iterate property="ywIds">
                          sum(decode(yw.yw_catalog_id,#ywIds[].ywCatalogId#, oi.goods_amount, 0)) as $ywIds[].ywCatalogName$,
                       </iterate>
                   </isNotEmpty>
                   <isNotEmpty property="ywIds1">
                       <iterate property="ywIds1">
                          sum(decode(yw.yw_catalog_id,#ywIds1[].ywCatalogId#, oi.goods_sum_fee, 0)) as $ywIds1[].ywCatalogName$,
                       </iterate>
                   </isNotEmpty>
                   oi.order_id
                   from order_item oi ,
                   (
                     select yy.yw_catalog_id,yy.yw_catalog_name,gg.goods_no from 
                     product_yw_catalog yy,
                     product_yw_catalog_goods gg
                     where gg.wy_catalog_id = yy.yw_catalog_id
                     and yy.is_delete = 'N' 
                     <isNotEmpty prepend="and" property="ywIds">
                            yy.yw_catalog_id in
                            <iterate property="ywIds" open="(" close=")" conjunction=",">
                                #ywIds[].ywCatalogId#
                            </iterate>
                     </isNotEmpty>
                   ) yw
                   where oi.goods_no = yw.goods_no
                   group by order_id 
               ) yy
              where o.order_id = yy.order_id
              <include refid="getGoodsPriceListWhere"/>
   </select>
   
       <select id="queryTotalListCount" resultClass="Integer" parameterClass="OrderInfo">
              select count(o.order_id)
              from order_info o,
               (
                   select
                   <isNotEmpty property="ywIds">
                       <iterate property="ywIds">
                          sum(decode(yw.yw_catalog_id,#ywIds[].ywCatalogId#, oi.goods_amount, 0)) as $ywIds[].ywCatalogName$,
                       </iterate>
                   </isNotEmpty>
                   <isNotEmpty property="ywIds1">
                       <iterate property="ywIds1">
                          sum(decode(yw.yw_catalog_id,#ywIds1[].ywCatalogId#, oi.goods_sum_fee, 0)) as $ywIds1[].ywCatalogName$,
                       </iterate>
                   </isNotEmpty>
                    oi.order_id
                   from order_item oi ,
                   (
                     select yy.yw_catalog_id,yy.yw_catalog_name,gg.goods_no from 
                     product_yw_catalog yy,
                     product_yw_catalog_goods gg
                     where gg.wy_catalog_id = yy.yw_catalog_id
                     and yy.is_delete = 'N' 
                     <isNotEmpty prepend="and" property="ywIds">
                            yy.yw_catalog_id in
                            <iterate property="ywIds" open="(" close=")" conjunction=",">
                                #ywIds[].ywCatalogId#
                            </iterate>
                     </isNotEmpty>
                   ) yw
                   where oi.goods_no = yw.goods_no
                   group by order_id 
               ) yy
              where o.order_id = yy.order_id
              <include refid="getGoodsPriceListWhere"/>
    </select>
    
    <select id="getQueryOrders" resultMap="orderQueryRsltNew"
        parameterClass="OrderInfo">
        select *
        from (
        select rownum rn,t.*
        from (
        select
           o.order_id,
           o.order_state,
           o.member_id,
           m.login_name         as member_login_name,
           m.real_name          as member_real_name,
           ls.code_value        as order_state_name,
           o.sku_fee,
           o.other_discounts,
           o.order_points,
           o.order_vouchers,
           o.discount_fee,
           o.delivery_fee,
           o.order_fee,
           o.order_pay_fee,
           o.paid_fee,
           o.is_check_bills,
           cu.user_real_name    as check_bill_user_name,
           o.check_bill_time,
           em.channel_name,
           o.commit_time,
           o.payment_mode,
           pt.payment_type_name,
           o.payment_no,
           o.paid_time,
           o.audit_time,
           au.user_real_name    as audit_user_name,
           o.sku_weights,
           o.is_paid,
           o.cancel_notes,
           o.url_from_no
        from
        order_info o
        left join member m on o.member_id=m.member_id and
        m.is_delete='N'
        left join sys_user cu on o.check_bill_user_id =
        cu.user_id and
        cu.is_delete='N'
        left join sys_user au on
        o.audit_user_id=au.user_id and au.is_delete='N'
        left join sys_code ls
        on o.order_state=ls.code_id and
        ls.is_delete='N'
        left join
        ec_payment_type pt on o.payment_type_id=pt.payment_type_id and
        pt.is_delete='N'
        left join ec_multi_channel em on
        o.multi_channel_id=em.multi_channel_id
        and em.is_delete='N'
        <!-- 
        <isNotEmpty property="goodsNo">
            inner join order_item oit on
            o.order_id=oit.order_id and
            oit.is_delete='N'
        </isNotEmpty>
        -->
        where o.is_delete='N'
        <include refid="queryOrderSql" />
        order by o.commit_time desc,o.order_id asc
        ) t
        <isNotEmpty prepend="where" property="endRow"> 
                  <![CDATA[ 
                  rownum <= #endRow# 
                  ]]>
        </isNotEmpty>
        ) oii
        <isNotEmpty prepend="where" property="startRow"> 
              <![CDATA[ 
                  oii.rn >= #startRow# 
              ]]>
        </isNotEmpty>
    </select>

    <select id="getQueryOrdersCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select count(0)
        from order_info o
        left join member m on
        o.member_id=m.member_id and m.is_delete='N'
        left join sys_user cu on
        o.check_bill_user_id = cu.user_id and
        cu.is_delete='N'
        left join
        sys_user au on o.audit_user_id=au.user_id and au.is_delete='N'
        left
        join sys_code ls on o.order_state=ls.code_id and
        ls.is_delete='N'
        left
        join ec_payment_type pt on o.payment_type_id=pt.payment_type_id and
        pt.is_delete='N'
        left join ec_multi_channel em on
        o.multi_channel_id=em.multi_channel_id
        and em.is_delete='N'
        <isNotEmpty property="goodsNo">
            inner join order_item oit on
            o.order_id=oit.order_id and
            oit.is_delete='N'
        </isNotEmpty>
        where o.is_delete='N'
        <include refid="queryOrderSql" />
    </select>
    

    <sql id="queryOrderRefundSql">
         <isNotEmpty prepend="and" property="orderId">
            o.order_id = #orderId#
         </isNotEmpty>
         <isNotEmpty prepend="and" property="erpOrderId">
            o.erp_order_id =#erpOrderId#
         </isNotEmpty>
         <isNotEmpty prepend="and" property="multiChannelId">
            o.multi_channel_id =#multiChannelId#
         </isNotEmpty>
         <isNotEmpty prepend="and" property="memberLoginName">
            m.login_name =#memberLoginName#
         </isNotEmpty>
         <isNotEmpty prepend="and" property="commitTimeBg">
            <![CDATA[
            to_date(nvl(o.paid_time,o.commit_time), 'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#commitTimeBg#, 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                to_date(nvl(o.paid_time,o.commit_time), 'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#commitTimeEd#, 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isPaid">
            o.is_paid = #isPaid#
        </isNotEmpty>
        <isNotEmpty prepend="and"  property="paymentTypeId">
             o.order_id in (select t.order_id from order_payment_type_list t where t.payment_type_id=#paymentTypeId#)
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentMode">
            o.payment_mode=#paymentMode#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentNo">
            o.payment_no =#paymentNo#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paidTimeBg">
            <![CDATA[
                o.paid_time >= #paidTimeBg#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paidTimeEd">
            <![CDATA[
                o.paid_time <= #paidTimeEd#
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveUser">
            o.receive_user =#receiveUser#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveMobile">
            o.receive_mobile =#receiveMobile#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderState">
            o.order_state =#orderState#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsNo">
            exists(
            select 1 from order_item oi where oi.goods_no = #goodsNo#
            and oi.order_id =o.order_id and oi.is_delete = 'N'
            )
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isCheckBills">
            o.is_check_bills =#isCheckBills#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="checkBillTimeBg">
            <![CDATA[
              to_date(o.check_bill_time,'YYYY-MM-DD hh24:mi:ss') >=
                 to_date(#checkBillTimeBg#, 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="checkBillTimeEd">
            <![CDATA[
              to_date(o.check_bill_time,'YYYY-MM-DD hh24:mi:ss') <=
                 to_date(#checkBillTimeEd#, 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isTc">
            o.IS_TC =#isTc#
         </isNotEmpty>
    </sql>
    
    <!-- 预存账户退款 liuyuandi  2015-3-27 14:19:35-->
    <select id="getQueryRefund" resultMap="orderQueryRefund" parameterClass="OrderInfo">
        select *
        from (
        select rownum rn,t.*
        from (
        select
          o.order_id,
          o.order_state,
          o.member_id,
         m.login_name         as member_login_name,
         m.real_name          as member_real_name,
         (select ls.code_value from sys_code ls where ls.is_delete='N' and o.order_state=ls.code_id) as order_state_name,
         o.sku_fee,
         o.delivery_fee,
         o.order_fee,
         o.order_pay_fee,
         o.paid_fee,
         o.is_check_bills,
         (select  cu.user_real_name from sys_user cu where cu.is_delete='N' and o.check_bill_user_id =cu.user_id) as check_bill_user_name,
         o.check_bill_time,
         (select em.channel_name from ec_multi_channel em where em.is_delete='N' and em.multi_channel_id=o.multi_channel_id) as channel_name,
         o.commit_time,
         o.payment_mode,
         (select  zh_concat(distinct pp.payment_type_name) from order_payment_type_list l,ec_payment_type pp 
          where l.order_id=o.order_id and l.payment_type_id=pp.payment_type_id) as  payment_type_name,
         o.payment_no,
         o.paid_time,
         o.sku_weights,
         o.is_paid
    from
    order_info o
    left join member m on o.member_id=m.member_id and
    m.is_delete='N'
    where o.is_delete='N'
    <include refid="queryOrderRefundSql" />
        ) t
        <isNotEmpty prepend="where" property="endRow"> 
                  <![CDATA[ 
                  rownum <= #endRow# 
                  ]]>
        </isNotEmpty>
        ) oii
        <isNotEmpty prepend="where" property="startRow"> 
              <![CDATA[ 
                  oii.rn >= #startRow# 
              ]]>
        </isNotEmpty>
    </select>

    <select id="getQueryRefundCount" resultClass="Integer" parameterClass="OrderInfo">
        select count(o.order_id)
        from
        order_info o
        left join member m on o.member_id=m.member_id and
        m.is_delete='N'
        where o.is_delete='N'
        <include refid="queryOrderRefundSql" />
    </select>

    <select id="getQueryOrderPaymentInfo" resultMap="orderPaymentInfo"
        parameterClass="OrderPaymentInfo">
        select *
        from (select row_.*, rownum rownum_
        from ( select f.ORDER_ID as
        "ORDER_ID",
        m.member_id as "member_id",
        m.REAL_NAME as "REAL_NAME",
        f.PAYMENT_NO as "PAYMENT_NO",
        DECODE(f.PAYMENT_MODE,
        'KDFH',
        '款到发货',
        'HDFK',
        '货到付款',
        'HDFK_POS',
        '货到付款',
        'ZTFK',
        '自提付款') as "PAYMENT_MODE",
        (select e.payment_type_name from EC_PAYMENT_TYPE e where
        e.payment_type_id =
        f.payment_type_id) as "PAYMENT_TYPE_Name" ,
        (select
        s.USER_REAL_NAME
        from SYS_USER s
        where s.user_id =
        f.OFFLINE_PAID_USER_ID) as "USER_Name",
        f.paid_time as "paid_time",
        f.paid_fee as "paid_fee",
        f.logistic_company_id,
        (select l.COMPANY_NAME
        from LOGISTIC_COMPANY l
        where l.LOGISTIC_COMPANY_ID =
        f.LOGISTIC_COMPANY_ID) as "COMPANY_NAME"
        from ORDER_INFO f,
        MEMBER m
        where f.member_id = m.member_id
        and f.IS_DELETE = 'N'
        <isNotEmpty prepend=" AND " property="paymentTypeId">
            f.PAYMENT_TYPE_ID =
            #paymentTypeId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="minPaidFee">
                <![CDATA[ f.PAID_FEE >= #minPaidFee# ]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="maxPaidFee">
                <![CDATA[ f.PAID_FEE <= #maxPaidFee# ]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="beginPaidTime">
                <![CDATA[ f.PAID_TIME >= #beginPaidTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="endPaidTime">
                <![CDATA[ f.PAID_TIME <= #endPaidTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="paymentNo">
            f.PAYMENT_NO =
            #paymentNo#
        </isNotEmpty>
        order by f.paid_fee desc
        ) row_
        where 1=1
        <isNotEmpty prepend="and" property="endRow">
                 <![CDATA[
                     rownum <= #endRow#
                 ]]>
        </isNotEmpty>
        )
        where 1=1
        <isNotEmpty prepend="and" property="startRow">
                 <![CDATA[
                     rownum_ >= #startRow#
                 ]]>
        </isNotEmpty>
    </select>

    <select id="getCountOrderPaymentInfo" resultClass="Integer"
        parameterClass="OrderPaymentInfo">
        select count(f.ORDER_ID)
        from ORDER_INFO f,
        MEMBER m
        where f.member_id =
        m.member_id
        and f.IS_DELETE = 'N'
        <isNotEmpty prepend=" AND " property="paymentTypeId">
            f.PAYMENT_TYPE_ID =
            #paymentTypeId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="minPaidFee">
                <![CDATA[ f.PAID_FEE >= #minPaidFee# ]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="maxPaidFee">
                <![CDATA[ f.PAID_FEE <= #maxPaidFee# ]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="beginPaidTime">
                <![CDATA[ f.PAID_TIME >= #beginPaidTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="endPaidTime">
                <![CDATA[ f.PAID_TIME <= #endPaidTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="paymentNo">
            f.PAYMENT_NO =
            #paymentNo#
        </isNotEmpty>
    </select>

    <!--发货确认-查询订单LIST -->
    <select id="getOrderInfoByList" parameterClass="OrderInfo"
        resultMap="orderInfoResult">
        select
        order_id,
        erp_order_id,
        member_id,
        parent_order_id,
        multi_channel_id,
        multi_channel_order_batch_id,
        multi_channel_order_id,
        is_upload,
        upload_user_id,
        upload_time,
        is_paid,
        payment_mode,
        payment_type_id,
        payment_no,
        paid_time,
        offline_paid_user_id,
        logistic_company_id,
        order_state,
        order_out_state,
        limit_date,
        sku_fee,
        discount_fee,
        order_points,
        order_vouchers,
        other_discounts,
        delivery_fee,
        order_fee,
        paid_fee,
        promote_rule_ids,
        return_type,
        return_value,
        order_msg,
        order_notes,
        audit_notes,
        audit_user_id,
        audit_time,
        is_lock,
        lock_time,
        lock_user_id,
        commit_time,
        finish_time,
        cancel_time,
        cancel_user_id,
        cancel_notes,
        sku_weights,
        is_into_erp,
        into_time,
        receive_user,
        province_id,
        city_id,
        area_id,
        receive_address,
        receive_full_address,
        receive_post,
        receive_tel,
        receive_mobile,
        receive_email,
        receive_date_type,
        receive_time_type,
        invoice_type,
        invoice_content_type,
        invoice_title,
        invoice_content,
        invoice_tax_no,
        invoice_tax_address,
        invoice_tax_tel,
        invoice_tax_bank,
        invoice_tax_account,
        is_delete,
        add_user_id,
        add_time,
        edit_user_id,
        edit_time,
        url_from_no,
        goods_batch_no,
        order_pay_fee,
        coupon_type_us_id,
        coupon_no,
        is_check_bills,
        check_bill_user_id,
        check_bill_time,
        is_tc
        from
        ORDER_INFO where order_id=#orderId# and
        IS_DELETE = 'N'
    </select>

    <!--前台WEB我的订单LIST -->
    <select id="getWebOrderInfoByList" parameterClass="OrderInfo"
        resultMap="orderInfoResultWebsNew">
        select
        st.stock_name,
        o.tax_Fee,
        o.goods_seller,
        o.order_id,
        o.erp_order_id,
        o.member_id,
        o.parent_order_id,
        o.multi_channel_id,
        o.multi_channel_order_batch_id,
        o.multi_channel_order_id,
        o.is_upload,
        o.upload_user_id,
        o.upload_time,
        o.is_paid,
        o.payment_mode,
        o.payment_type_id,
        o.payment_no,
        o.paid_time,
        o.offline_paid_user_id,
        o.logistic_company_id,
        o.order_state,
        o.order_out_state,
        o.limit_date,
        o.sku_fee,
        o.discount_fee,
        o.order_points,
        o.order_vouchers,
        o.other_discounts,
        o.delivery_fee,
        o.order_fee,
        o.paid_fee,
        o.promote_rule_ids,
        o.return_type,
        o.return_value,
        o.order_msg,
        o.order_notes,
        o.audit_notes,
        o.audit_user_id,
        o.audit_time,
        o.is_lock,
        o.lock_time,
        o.lock_user_id,
        o.commit_time,
        o.finish_time,
        o.cancel_time,
        o.cancel_user_id,
        o.cancel_notes,
        o.sku_weights,
        o.is_into_erp,
        o.into_time,
        o.receive_user,
        o.province_id,
        o.city_id,
        o.area_id,
        o.receive_address,
        o.receive_full_address,
        o.receive_post,
        o.receive_tel,
        o.receive_mobile,
        o.receive_email,
        o.receive_date_type,
        o.receive_time_type,
        o.invoice_type,
        o.invoice_content_type,
        o.invoice_title,
        o.invoice_content,
        o.invoice_tax_no,
        o.invoice_tax_address,
        o.invoice_tax_tel,
        o.invoice_tax_bank,
        o.invoice_tax_account,
        o.is_delete,
        o.add_user_id,
        o.add_time,
        o.edit_user_id,
        o.edit_time,
        o.url_from_no,
        o.goods_batch_no,
        o.order_pay_fee,
        o.coupon_type_us_id,
        o.coupon_no,
        o.is_check_bills,
        o.check_bill_user_id,
        o.check_bill_time,
        o.is_tc,
        (select p.drug_prescription_type
        from order_item  oi
        left join goods g on g.goods_id = oi.goods_id
        left join product p on p.product_id = g.product_id
        where oi.order_id=o.order_id
        and p.drug_prescription_type != 'TC'
        and  rownum = 1 ) as isItemTc,
        sc.code_value as codeValue,
        sc.code_no as codeNo,
        p.payment_type_name as paymentTypeName,
        p.payment_type_logo as
        paymentTypeLogo,
        lc.company_no as companyNo,
        lc.company_name as
        companyName,
        p.payment_type_no as paymentTypeNo,
        lc.website,
        oie.is_eval
        from
        order_info o
        left join sys_code sc on o.order_state=sc.code_id and
        sc.code_type_no='order_state' and sc.is_delete='N'
        left join
        ec_payment_type p on o.payment_type_id=p.payment_type_id and
        p.is_delete='N'
        left join stock st on st.stock_id = o.stock_id
        left join logistic_company lc on
        o.logistic_company_id=lc.logistic_company_id and lc.is_delete='N'
        left join order_info_expand oie on oie.order_id=o.order_id and oie.is_delete='N'
        where
        o.is_delete='N'
        and (o.multi_channel_id not in (35,20,24,23,22,38,37) or (o.multi_channel_id in (35,20,24,23,22,38,37) and o.order_state='26'))
        <![CDATA[and ((o.is_tc = 'Y' and o.multi_channel_id in (1,31,36)) or o.is_tc <> 'Y')]]>
        <isNotEmpty prepend=" AND " property="memberId">
            o.member_id=#memberId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="orderId">
            o.order_id=#orderId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="goodsSeller">
            o.goods_Seller=#goodsSeller#
        </isNotEmpty>

        <isNotEmpty prepend=" AND " property="commitTime">
            <![CDATA[o.commit_time > concat(to_char(add_months(sysdate,-1),'yyyy-MM-dd'),' 23:59:59')]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="commitTimeEnd">
            <!-- o.commit_time between concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), 
                '-MM-'),'01 00:00:00') and concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), 
                '-MM-')||to_char(LAST_DAY(sysdate),'dd '),'23:59:59') -->
             <![CDATA[o.commit_time < concat(to_char(add_months(sysdate,-1),'yyyy-MM-dd'),' 23:59:59')]]>
        </isNotEmpty>
        order by o.commit_time desc
    </select>
    <select id="getWebOrderInfoForReturnByList" parameterClass="OrderInfo"
        resultMap="orderInfoResultWebs">
        select distinct o.order_id,
        o.goods_seller,
        o.order_id,
        o.erp_order_id,
        o.member_id,
        o.parent_order_id,
        o.multi_channel_id,
        o.multi_channel_order_batch_id,
        o.multi_channel_order_id,
        o.is_upload,
        o.upload_user_id,
        o.upload_time,
        o.is_paid,
        o.payment_mode,
        o.payment_type_id,
        o.payment_no,
        o.paid_time,
        o.offline_paid_user_id,
        o.logistic_company_id,
        o.order_state,
        o.order_out_state,
        o.limit_date,
        o.sku_fee,
        o.discount_fee,
        o.order_points,
        o.order_vouchers,
        o.other_discounts,
        o.delivery_fee,
        o.order_fee,
        o.paid_fee,
        o.promote_rule_ids,
        o.return_type,
        o.return_value,
        o.order_msg,
        o.order_notes,
        o.audit_notes,
        o.audit_user_id,
        o.audit_time,
        o.is_lock,
        o.lock_time,
        o.lock_user_id,
        o.commit_time,
        o.finish_time,
        o.cancel_time,
        o.cancel_user_id,
        o.cancel_notes,
        o.sku_weights,
        o.is_into_erp,
        o.into_time,
        o.receive_user,
        o.province_id,
        o.city_id,
        o.area_id,
        o.receive_address,
        o.receive_full_address,
        o.receive_post,
        o.receive_tel,
        o.receive_mobile,
        o.receive_email,
        o.receive_date_type,
        o.receive_time_type,
        o.invoice_type,
        o.invoice_content_type,
        o.invoice_title,
        o.invoice_content,
        o.invoice_tax_no,
        o.invoice_tax_address,
        o.invoice_tax_tel,
        o.invoice_tax_bank,
        o.invoice_tax_account,
        o.is_delete,
        o.add_user_id,
        o.add_time,
        o.edit_user_id,
        o.edit_time,
        o.url_from_no,
        o.goods_batch_no,
        o.order_pay_fee,
        o.coupon_type_us_id,
        o.coupon_no,
        o.is_check_bills,
        o.check_bill_user_id,
        o.check_bill_time,
        o.is_tc,
        '' as codeValue,
        '' as codeNo,
        '' as paymentTypeName,
        '' as paymentTypeLogo,
        '' as companyNo,
        '' as companyName,
        '' as paymentTypeNo,
        '' as website,
        '' as is_eval
        from
        order_info o
        where
        o.is_delete='N '
        and o.order_state in ('23','26','27')
        <isNotEmpty prepend=" AND " property="memberId">
            o.member_id=#memberId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="orderId">
            o.order_id=#orderId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="commitTime">
            <![CDATA[o.commit_time > concat(to_char(add_months(sysdate,-1),'yyyy-MM-dd'),' 23:59:59')]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="commitTimeEnd">
            <!-- o.commit_time between concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), 
                '-MM-'),'01 00:00:00') and concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), 
                '-MM-')||to_char(LAST_DAY(sysdate),'dd '),'23:59:59') -->
            <![CDATA[o.commit_time < concat(to_char(add_months(sysdate,-1),'yyyy-MM-dd'),' 23:59:59')]]>
        </isNotEmpty>
        order by o.commit_time desc
    </select>
<!--前台WEB我的订单COUNT -->
    <select id="getWebOrderInfoCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select
        count(0)
        from
        order_info o
        left join sys_code sc on
        o.order_state=sc.code_id and
        sc.code_type_no='order_state' and
        sc.is_delete='N'
        left join ec_payment_type p on
        o.payment_type_id=p.payment_type_id and
        p.is_delete='N'
        left join
        logistic_company lc on
        o.logistic_company_id=lc.logistic_company_id and
        lc.is_delete='N'
        where
        o.is_delete='N '
        and (o.multi_channel_id not in (35,20,24,23,22,38,37) or (o.multi_channel_id in (35,20,24,23,22,38,37) and o.order_state='26'))
        <![CDATA[and ((o.is_tc = 'Y' and o.multi_channel_id in (1,31,36)) or o.is_tc <> 'Y')]]>
        <isNotEmpty prepend=" AND " property="memberId">
            o.member_id=#memberId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="orderId">
            o.order_id=#orderId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="goodsSeller">
            o.goods_Seller=#goodsSeller#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="commitTime">
            <![CDATA[o.commit_time > concat(to_char(add_months(sysdate,-1),'yyyy-MM-dd'),' 23:59:59')]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="commitTimeEnd">
            <!-- o.commit_time between concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), 
                '-MM-'),'01 00:00:00') and concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), 
                '-MM-')||to_char(LAST_DAY(sysdate),'dd '),'23:59:59') --> 
             <![CDATA[o.commit_time < concat(to_char(add_months(sysdate,-1),'yyyy-MM-dd'),' 23:59:59')]]>
        </isNotEmpty>
    </select>
    <select id="getWebOrderInfoForReturnCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select
        count(distinct o.order_id)
        from
        order_info o
        where
         o.is_delete='N '
        and o.order_state in ('23','26','27')
        <isNotEmpty prepend=" AND " property="memberId">
            o.member_id=#memberId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="orderId">
            o.order_id=#orderId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="commitTime">
            <![CDATA[o.commit_time > concat(to_char(add_months(sysdate,-1),'yyyy-MM-dd'),' 23:59:59')]]>
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="commitTimeEnd">
            <!-- o.commit_time between concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), 
                '-MM-'),'01 00:00:00') and concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), 
                '-MM-')||to_char(LAST_DAY(sysdate),'dd '),'23:59:59') --> 
            <![CDATA[o.commit_time < concat(to_char(add_months(sysdate,-1),'yyyy-MM-dd'),' 23:59:59')]]>
        </isNotEmpty>
    </select>
    <insert id="saveOrderCommit" parameterClass="OrderInfo">
        <selectKey resultClass="long" keyProperty="orderId">
            SELECT
            order_info_seq.nextval AS order_id from dual
        </selectKey>
        insert into order_info (order_id, member_id,
        order_state,
        order_out_state, limit_date, sku_fee,
        order_vouchers, delivery_fee,
        order_fee,order_pay_fee,
        order_msg,
        commit_time, sku_weights,
        receive_user, province_id, city_id, area_id, receive_address,
        receive_full_address, receive_post, receive_tel, receive_mobile,
        receive_email,
        payment_mode,
        receive_date_type, receive_time_type,
        url_from_no, multi_channel_id, other_discounts,
        discount_fee,
        order_points,
        order_new
        <isNotNull prepend="," property="logisticCompanyId">
            logistic_company_id
        </isNotNull>
        <isNotNull prepend="," property="allUsedPromoteRuleIds">
            promote_rule_ids
        </isNotNull>
        <isNotNull prepend="," property="returnType">
            return_type
        </isNotNull>
        <isNotNull prepend="," property="returnValue">
            return_value
        </isNotNull>
        <isNotNull prepend="," property="isPaid">
            is_paid
        </isNotNull>
        <isNotNull prepend="," property="paidTime">
            paid_time
        </isNotNull>
        <isNotNull prepend="," property="couponNo">
            coupon_no
        </isNotNull>
        <isNotNull prepend="," property="couponTypeUsId">
            coupon_type_us_id
        </isNotNull>
        <isNotNull prepend="," property="isTc">
            is_tc
        </isNotNull>
        )
        values (#orderId#, #memberId#,
        (select code_id from sys_code where
        code_type_no = 'order_state' and code_no
        = 'commit' and is_delete =
        'N'),
        (select code_id from sys_code where code_type_no = 'order_state'
        and code_no
        = 'commit' and is_delete = 'N'),
<!--         (select -->
<!--         to_char((to_date(#commitTime#, 'yyyy-mm-dd -->
<!--         hh24:mi:ss')+30),'yyyy-mm-dd hh24:mi:ss') from dual), -->
        null,
        #skuFee#,
        #orderVouchers#, #deliveryFee#,
        #orderFee#,#orderPayFee#, #orderMsg#,
        #commitTime#,
        #skuWeights#,
        #receiveUser#,
        #provinceId#, #cityId#,
        #areaId#, #receiveAddress#,
        #receiveFullAddress#,
        #receivePost#,
        #receiveTel#, #receiveMobile#,
        #receiveEmail#, #paymentMode#,
        #receiveDateType#,
        #receiveTimeType#,
        #urlFromNo#,
        #multiChannelId#,
        #otherDiscounts#, #discountFee#, #orderPoints#,(select count(1)+1 from order_info ord where ord.member_id = #memberId#)
        <isNotNull prepend="," property="logisticCompanyId">
            #logisticCompanyId#
        </isNotNull>
        <isNotNull prepend="," property="allUsedPromoteRuleIds">
            #allUsedPromoteRuleIds#
        </isNotNull>
        <isNotNull prepend="," property="returnType">
            #returnType#
        </isNotNull>
        <isNotNull prepend="," property="returnValue">
            #returnValue#
        </isNotNull>
        <isNotNull prepend="," property="isPaid">
            #isPaid#
        </isNotNull>
        <isNotNull prepend="," property="paidTime">
            #paidTime#
        </isNotNull>
        <isNotNull prepend="," property="couponNo">
            #couponNo#
        </isNotNull>
        <isNotNull prepend="," property="couponTypeUsId">
            #couponTypeUsId#
        </isNotNull>
        <isNotNull prepend="," property="isTc">
            #isTc#
        </isNotNull>
        )
    </insert>

    <resultMap class="HashMap" id="orderStockMap">
        <result column="goods_id" property="goodsId" javaType="Long" />
        <result column="goods_no" property="goodsNo" javaType="String" />
        <result column="goods_name" property="goodsName" javaType="String" />
        <result column="available_stock" property="availableStock"
            javaType="decimal" />
    </resultMap>

    <!-- 根据订单ID查询货品库存 -->
    <select id="getOrderGoodsStock" parameterClass="long" resultMap="orderStockMap">
        (select g.goods_id,g.goods_no,g.goods_name,g.available_stock
        from
        order_item oit
        left join goods g on oit.goods_id=g.goods_id and
        g.is_delete='N'
        where oit.is_delete='N' and oit.order_id=#value# and
        oit.goods_type='general'
        )
        union
        (select g.gift_id as goods_id,g.gift_no
        as goods_no,
        g.gift_name as goods_name,g.gift_stock as available_stock
        from order_item oit
        left join goods_gift g on oit.goods_id=g.gift_id
        and g.is_delete='N'
        where oit.is_delete='N' and oit.order_id=#value#
        and oit.goods_type='gift'
        )
    </select>

    <parameterMap class="map" id="stockParamMap">
        <parameter property="orderId" javaType="java.lang.Long"
            jdbcType="Long" mode="IN" />
    </parameterMap>

    <!-- 调用存储过程 更新可用库存 -->
    <procedure id="updateStock" parameterMap="stockParamMap">
        <![CDATA[
         {call update_order_stock(?)}
         ]]>
    </procedure>

    <!-- 调用存储过程 返还可用库存 -->
    <procedure id="rollBackStock" parameterMap="stockParamMap">
        <![CDATA[
         {call rollback_order_stock(?)}
         ]]>
    </procedure>

    <!-- 调用存储过程 更新发货状态 -->
    <procedure id="updateDelivering" parameterClass="Long">
        <![CDATA[
         call pro_order_finish(#orderId#)
         ]]>
    </procedure>

    <!-- 订单统计列表 -->
    <select id="getOrderReportList" parameterClass="OrderInfo"
        resultMap="orderReportResult">
        select c.code_order,c.code_value,count(t.order_id) as
        countId,sum(t.order_fee) as countFee
        from SYS_CODE c
        left join
        ORDER_INFO t on t.order_state=c.code_id and t.is_delete='N'
        where
        c.code_type_no='order_state' and c.is_delete='N'
        <isNotEmpty prepend="and" property="commitTimeBg">
            <![CDATA[
                t.commit_time >= concat(#commitTimeBg#,' 00:00:00')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                t.commit_time <= concat(#commitTimeEd#,' 23:59:59')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="provinceId">
            t.PROVINCE_ID =
            #provinceId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="cityId">
            t.CITY_ID = #cityId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="areaId">
            t.AREA_ID = #areaId#
        </isNotEmpty>
        group by c.code_order,c.code_value
        union
        select 100 as
        code_order,'全部',count(t.order_id) count_id,sum(t.order_fee) count_fee
        from ORDER_INFO t where t.is_delete='N'
        <isNotEmpty prepend="and" property="commitTimeBg">
            <![CDATA[
                t.commit_time >= concat(#commitTimeBg#,' 00:00:00')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                t.commit_time <= concat(#commitTimeEd#,' 23:59:59')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="provinceId">
            t.PROVINCE_ID =
            #provinceId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="cityId">
            t.CITY_ID = #cityId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="areaId">
            t.AREA_ID = #areaId#
        </isNotEmpty>
        order by code_order
    </select>

    <select id="getOrderReportCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select count(distinct c.code_id)
        from SYS_CODE c
        left join ORDER_INFO t
        on t.order_state=c.code_id and t.is_delete='N'
        where
        c.code_type_no='order_state' and c.is_delete='N'
        <isNotEmpty prepend="and" property="commitTimeBg">
            <![CDATA[
                t.commit_time >= concat(#commitTimeBg#,' 00:00:00')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                t.commit_time <= concat(#commitTimeEd#,' 23:59:59')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="provinceId">
            t.PROVINCE_ID =
            #provinceId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="cityId">
            t.CITY_ID = #cityId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="areaId">
            t.AREA_ID = #areaId#
        </isNotEmpty>
    </select>

    <resultMap id="CustomerOrderResult" class="MemberOrder">
        <result column="member_id" property="memberId" />
        <result column="real_name" property="realName" />
        <result column="login_name" property="loginName" />
        <result column="order_num" property="orderNum" />
        <result column="average_order_fee" property="averageOrderFee" />
        <result column="order_fee" property="orderFee" />
    </resultMap>

    <!-- 查询客户订单情况 -->
    <select id="getCustomerOrder" resultMap="CustomerOrderResult"
        parameterClass="ReportCommon">
        SELECT i.member_id,
        c.real_name,
        c.login_name,
        COUNT(i.order_id) AS
        order_num,
        ROUND(SUM(i.order_fee)/ COUNT(i.order_id),2) AS
        average_order_fee,
        ROUND(SUM(i.order_fee),2) AS order_fee
        FROM
        order_info i ,member c,sys_code s
        WHERE i.member_id = c.member_id
        AND
        i.is_delete = 'N'
        AND i.order_state = s.code_id
        and
        s.code_type_no='order_state'
        AND s.code_no
        IN('out_need','recieved','cancel','finish','delivering','audit','commit','matching','out_stock')
        <isNotEmpty prepend="and" property="startTime">
                  <![CDATA[
                      i.add_time >= #startTime#
                  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="endTime">
                  <![CDATA[
                      i.add_time <=#endTime#
                  ]]>
        </isNotEmpty>
        GROUP BY i.member_id,c.real_name,c.login_name
        ORDER BY SUM(i.order_fee)
        DESC
    </select>

    <!-- 查询客户订单情况Count -->
    <select id="getCustomerOrderCount" resultClass="Integer"
        parameterClass="ReportCommon">
        SELECT count(*)
        FROM (
        SELECT 1
        FROM order_info i ,member c,sys_code s
        WHERE i.member_id = c.member_id
        AND i.is_delete = 'N'
        AND i.order_state
        = s.code_id
        AND s.code_no
        IN('out_need','recieved','cancel','finish','delivering','audit','commit','matching','out_stock')
        <isNotEmpty prepend="and" property="startTime">
                  <![CDATA[
                      i.add_time >= #startTime#
                  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="endTime">
                  <![CDATA[
                      i.add_time <=#endTime#
                  ]]>
        </isNotEmpty>
        GROUP BY i.member_id
        ORDER BY SUM(i.order_fee) DESC) abc
    </select>

    <select id="getBasic" parameterClass="Long" resultMap="orderInfoResult">
        select
        order_id,
        erp_order_id,
        member_id,
        parent_order_id,
        multi_channel_id,
        multi_channel_order_batch_id,
        multi_channel_order_id,
        is_upload,
        upload_user_id,
        upload_time,
        is_paid,
        payment_mode,
        payment_type_id,
        payment_no,
        paid_time,
        tax_fee,
        offline_paid_user_id,
        logistic_company_id,
        order_state,
        order_out_state,
        limit_date,
        sku_fee,
        discount_fee,
        order_points,
        order_vouchers,
        other_discounts,
        delivery_fee,
        order_fee,
        paid_fee,
        promote_rule_ids,
        return_type,
        return_value,
        order_msg,
        order_notes,
        audit_notes,
        audit_user_id,
        audit_time,
        is_lock,
        lock_time,
        lock_user_id,
        commit_time,
        finish_time,
        cancel_time,
        cancel_user_id,
        cancel_notes,
        sku_weights,
        is_into_erp,
        into_time,
        receive_user,
        province_id,
        city_id,
        area_id,
        receive_address,
        receive_full_address,
        receive_post,
        receive_tel,
        receive_mobile,
        receive_email,
        receive_date_type,
        receive_time_type,
        invoice_type,
        invoice_content_type,
        invoice_title,
        invoice_content,
        invoice_tax_no,
        invoice_tax_address,
        invoice_tax_tel,
        invoice_tax_bank,
        invoice_tax_account,
        is_delete,
        add_user_id,
        add_time,
        edit_user_id,
        edit_time,
        url_from_no,
        goods_batch_no,
        order_pay_fee,
        coupon_type_us_id,
        coupon_no,
        is_check_bills,
        check_bill_user_id,
        check_bill_time,
        is_tc
        from order_info where order_id=#value# and is_delete='N'
    </select>


    <!-- 修改select * 为明确字段  modify by lk 2014-9-15 -->
    <select id="getOrderInfoList" parameterClass="OrderInfo"
        resultMap="orderInfoResult">
        select   
        ORDER_ID,
        ERP_ORDER_ID,
        MEMBER_ID,
        PARENT_ORDER_ID,
        MULTI_CHANNEL_ID,
        IS_PAID,
        PAYMENT_TYPE_ID,
        PAYMENT_NO,
        PAID_TIME,
        OFFLINE_PAID_USER_ID,
        LOGISTIC_COMPANY_ID,
        ORDER_STATE,
        ORDER_OUT_STATE,
        LIMIT_DATE,
        SKU_FEE,
        return_type,
        return_value,
        DISCOUNT_FEE,
        ORDER_POINTS,
        ORDER_VOUCHERS,
        OTHER_DISCOUNTS,
        DELIVERY_FEE,
        ORDER_FEE,
        ORDER_PAY_FEE,
        ORDER_MSG,
        ORDER_NOTES,
        AUDIT_NOTES,
        AUDIT_USER_ID,
        AUDIT_TIME,
        IS_LOCK,
        LOCK_TIME,
        LOCK_USER_ID,
        COMMIT_TIME,
        FINISH_TIME,
        CANCEL_TIME,
        CANCEL_USER_ID,
        CANCEL_NOTES,
        SKU_WEIGHTS,
        IS_INTO_ERP,
        INTO_TIME,
        RECEIVE_USER,
        PROVINCE_ID,
        CITY_ID,
        AREA_ID,
        RECEIVE_ADDRESS,
        RECEIVE_FULL_ADDRESS,
        RECEIVE_POST,
        RECEIVE_TEL,
        RECEIVE_MOBILE,
        RECEIVE_EMAIL,
        RECEIVE_DATE_TYPE,
        RECEIVE_TIME_TYPE,
        INVOICE_TYPE,
        INVOICE_TITLE,
        INVOICE_CONTENT,
        INVOICE_TAX_NO,
        INVOICE_TAX_ADDRESS,
        INVOICE_TAX_TEL,
        INVOICE_TAX_BANK,
        INVOICE_TAX_ACCOUNT,
        IS_DELETE,
        ADD_USER_ID,
        ADD_TIME,
        EDIT_USER_ID,
        EDIT_TIME,
        MULTI_CHANNEL_ORDER_ID,
        MULTI_CHANNEL_ORDER_BATCH_ID,
        PAID_FEE,
        INVOICE_CONTENT_TYPE,
        IS_TC,
        payment_mode
        from order_info  where
        to_date(commit_time,'yyyy-mm-dd hh24:mi:ss') between to_date(#commitTimeBg#,'yyyy-mm-dd hh24:mi:ss')
        and to_date(#commitTimeEd#,'yyyy-mm-dd hh24:mi:ss')
    </select>

    <!-- 根据时间查询订单(审核时间、支付时间、完成时间) -->
    <select id="getOrderByTime" parameterClass="HashMap" resultMap="orderInfoResult">
        select
        t.order_id,
       t.erp_order_id,
       t.member_id,
       t.parent_order_id,
       t.multi_channel_id,
       t.multi_channel_order_batch_id,
       t.multi_channel_order_id,
       t.is_upload,
       t.upload_user_id,
       t.upload_time,
       t.is_paid,
       t.payment_mode,
       t.payment_type_id,
       t.payment_no,
       t.paid_time,
       t.offline_paid_user_id,
       t.logistic_company_id,
       t.order_state,
       t.order_out_state,
       t.limit_date,
       t.sku_fee,
       t.discount_fee,
       t.order_points,
       t.order_vouchers,
       t.other_discounts,
       t.delivery_fee,
       t.order_fee,
       t.paid_fee,
       t.promote_rule_ids,
       t.return_type,
       t.return_value,
       t.order_msg,
       t.order_notes,
       t.audit_notes,
       t.audit_user_id,
       t.audit_time,
       t.is_lock,
       t.lock_time,
       t.lock_user_id,
       t.commit_time,
       t.finish_time,
       t.cancel_time,
       t.cancel_user_id,
       t.cancel_notes,
       t.sku_weights,
       t.is_into_erp,
       t.into_time,
       t.receive_user,
       t.province_id,
       t.city_id,
       t.area_id,
       t.receive_address,
       t.receive_full_address,
       t.receive_post,
       t.receive_tel,
       t.receive_mobile,
       t.receive_email,
       t.receive_date_type,
       t.receive_time_type,
       t.invoice_type,
       t.invoice_content_type,
       t.invoice_title,
       t.invoice_content,
       t.invoice_tax_no,
       t.invoice_tax_address,
       t.invoice_tax_tel,
       t.invoice_tax_bank,
       t.invoice_tax_account,
       t.is_delete,
       t.add_user_id,
       t.add_time,
       t.edit_user_id,
       t.edit_time,
       t.url_from_no,
       t.goods_batch_no,
       t.order_pay_fee,
       t.coupon_type_us_id,
       t.coupon_no,
       t.is_check_bills,
       t.check_bill_user_id,
       t.check_bill_time,
       t.is_tc        
        from ORDER_INFO t
        where (to_date(t.audit_time, 'yyyy-mm-dd
        hh24:mi:ss')
        between
        to_date(#startTime#, 'yyyy-mm-dd hh24:mi:ss') and
        to_date(#endTime#, 'yyyy-mm-dd hh24:mi:ss') or
        to_date(t.finish_time,
        'yyyy-mm-dd hh24:mi:ss') between
        to_date(#startTime#, 'yyyy-mm-dd
        hh24:mi:ss') and
        to_date(#endTime#, 'yyyy-mm-dd hh24:mi:ss') or
        to_date(t.add_time, 'yyyy-mm-dd hh24:mi:ss') between
        to_date(#startTime#, 'yyyy-mm-dd hh24:mi:ss') and
        to_date(#endTime#,
        'yyyy-mm-dd hh24:mi:ss') or
        to_date(t.cancel_time, 'yyyy-mm-dd
        hh24:mi:ss') between
        to_date(#startTime#, 'yyyy-mm-dd hh24:mi:ss') and
        to_date(#endTime#, 'yyyy-mm-dd hh24:mi:ss') or
        to_date(t.paid_time,
        'yyyy-mm-dd hh24:mi:ss') between
        to_date(#startTime#, 'yyyy-mm-dd
        hh24:mi:ss') and
        to_date(#endTime#, 'yyyy-mm-dd hh24:mi:ss'))
        and
        t.multi_channel_id = #channel#
    </select>

   <sql id="getSaleStatisticsSQL">
       <isNotEmpty prepend="and" property="addStartTime">
             <!--      <![CDATA[
                      ((oif.payment_mode = 'HDFK' and
                       to_date(oif.commit_time, 'YYYY-MM-DD hh24:mi:ss') >=
                       to_date(#addStartTime# , 'YYYY-MM-DD hh24:mi:ss') ) or
            
                       (oif.payment_mode = 'KDFH' AND oif.IS_PAID = 'Y' and
                       to_date(nvl(oif.paid_time, oif.commit_time),
                                 'YYYY-MM-DD hh24:mi:ss') >=
                       to_date(#addStartTime#, 'YYYY-MM-DD hh24:mi:ss')))
                  ]]> -->
                  <![CDATA[
                  ((oif.payment_mode = 'HDFK' and
                       oif.commit_time >=
                      #addStartTime#) or
                       
                       (oif.payment_mode = 'KDFH' AND oif.IS_PAID = 'Y' and
                       oif.paid_time >=
                      #addStartTime#))
                      ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="addEndTime">
                 <!--     <![CDATA[
                      ((oif.payment_mode = 'HDFK' and 
           to_date(oif.commit_time, 'YYYY-MM-DD hh24:mi:ss') <=
           to_date(#addEndTime# , 'YYYY-MM-DD hh24:mi:ss')) or

           (oif.payment_mode = 'KDFH' AND oif.IS_PAID = 'Y' and
           to_date(nvl(oif.paid_time, oif.commit_time),
                     'YYYY-MM-DD hh24:mi:ss') <=
           to_date(#addEndTime# , 'YYYY-MM-DD hh24:mi:ss')))
                  ]]>-->
                  <![CDATA[
                  ((oif.payment_mode = 'HDFK' and
                       oif.commit_time <=
                     #addEndTime#) or
                       
                       (oif.payment_mode = 'KDFH' AND oif.IS_PAID = 'Y' and
                       oif.paid_time <=#addEndTime#))
                         ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="payStartTime">
                  <![CDATA[
                      oif.PAID_TIME >= #payStartTime#
                  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="catalogId">
        <!-- 
            exists (select 1 
            from
            product_yw_catalog_goods pcg,order_item oi
            where
            pcg.goods_no =
            oi.goods_no
            and pcg.wy_catalog_id = #catalogId#
            and oi.order_id =
            oif.order_id
            and oi.is_delete = 'N' )
         -->
         gd.yw_catalog_id = #catalogId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="payEndTime">
                  <![CDATA[
                      oif.PAID_TIME <= #payEndTime#
                  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsNo">
                  <![CDATA[
                      oit.GOODS_NO= #goodsNo#
                  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsName">
                  <![CDATA[
                      oit.GOODS_NAME like '%$goodsName$%'
                  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="areaId">
                  <![CDATA[
                      a.area_id=#areaId#
                  ]]>
        </isNotEmpty>
        <isEqual prepend="and" property="isvalid" compareValue="是">
            ((oif.payment_mode = 'KDFH' and oif.IS_PAID = 'Y') or (oif.payment_mode =
            'HDFK') ) and oif.order_state NOT in (18,19,25)
        </isEqual>
        <isEqual prepend="and" property="isvalid" compareValue="否">
            ((oif.payment_mode = 'KDFH' and oif.IS_PAID = 'N') or oif.order_state in
            (25,18,19))
        </isEqual>
        <isNotEmpty prepend="and" property="loginName">
                  <![CDATA[
                      m.login_name like '%$loginName$%'
                  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentType">
                  <![CDATA[
                      oif.PAYMENT_MODE=#paymentType#
                  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="payState">
                  <![CDATA[
                      oif.IS_PAID=#payState#
                  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderState">
                  <![CDATA[
                      os.code_id =#orderState#
                  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderStateOther">
                  <![CDATA[
                      os.code_id <>#orderStateOther#
                  ]]>
        </isNotEmpty>
        
       <isNotEmpty prepend="and"  property="ecPaymentTypeId">
                 oif.order_id in (select t.order_id from order_payment_type_list t where t.payment_type_id=#ecPaymentTypeId#)
        </isNotEmpty>
<!--         <isNotEmpty prepend="and" property="ecPaymentTypeId"> -->
<!--                   <![CDATA[ -->
<!--                       ept.payment_type_id = #ecPaymentTypeId# -->
<!--                   ]]> -->
<!--         </isNotEmpty> -->
        <isNotEmpty prepend="and" property="urlFromNo">
                  <![CDATA[
                      oif.url_from_no like '%$urlFromNo$%'
                  ]]>
        </isNotEmpty>
   </sql>
    <!-- 销售报表 select 查询 -->
    <select id="getSaleStatisticsCount" resultClass="Integer"
        parameterClass="HashMap">
          select 
            count(oif.commit_time)
          from order_info       oif,
               order_item       oit,
               goods            g,
               ec_area          a,
               member           m,
               EC_PAYMENT_TYPE  ept,
               EC_COUPONS       ec,
               SYS_CODE         os,
               (select t.order_id,t.order_item_id,t.goods_id,sum(t.goods_sum_fee) as goods_sum_fee from order_item_price t where t.is_delete = 'N' group by t.order_id,t.order_item_id,t.goods_id) oip,
               (SELECT yy.yw_catalog_id,yy.yw_catalog_name,gg.goods_no FROM product_yw_catalog yy,product_yw_catalog_goods gg WHERE yy.yw_catalog_id = gg.wy_catalog_id) gd
         where oif.order_id = oit.order_id
           and oif.province_id = a.area_id
           and oit.goods_id = g.goods_id
           and oif.member_id = m.member_id
           and oif.PAYMENT_TYPE_ID = ept.payment_type_id(+)
           and oif.order_id = ec.ORDER_ID(+)
           and oif.order_state = os.code_id(+)
           and os.code_type_no = 'order_state'
           and oit.order_item_id = oip.order_item_id(+)
           and oit.goods_no = gd.goods_no(+)
            <include refid="getSaleStatisticsSQL" />
        order by oif.COMMIT_TIME desc
    </select>

    <!-- 销售报表 分页 -->
    <select id="getSaleStatisticsPage" resultMap="saleStatisticsMap"
        parameterClass="HashMap">
        <include refid="be_fy" />
        select
        oif.ORDER_ID,oif.ORDER_FEE,oif.PAID_FEE,oif.COMMIT_TIME,oit.GOODS_AMOUNT
        as goodsAmount,oit.GOODS_PRICE as
        goodsPrice,oif.URL_FROM_NO,oif.PAID_FEE as paidFee,oif.PAID_TIME as
        paidTime,
        replace(oif.RECEIVE_FULL_ADDRESS,substr(oif.RECEIVE_FULL_ADDRESS,
        round(length(oif.RECEIVE_FULL_ADDRESS) / 3, 0),15),'*****') RECEIVE_FULL_ADDRESS,
        oit.GOODS_NO as goodsNo,
        oit.GOODS_NAME as goodsName,m.login_name as loginName,
        (select  zh_concat(distinct pp.payment_type_name) from order_payment_type_list l,ec_payment_type pp 
          where l.order_id=oif.order_id and l.payment_type_id=pp.payment_type_id) as  paymentType,
<!--         ept.PAYMENT_TYPE_NAME as paymentType, -->
        ec.COUPON_NO as discountCode,gd.yw_catalog_id catalogId,gd.yw_catalog_name  catalogName,
        oit.GOODS_AMOUNT*oit.GOODS_PRICE as
        oneGoodsSumPrice,oif.ORDER_PAY_FEE,
        (
        os.code_value
        ) as orderStateStr,
        (
        case oif.IS_PAID
        when 'N' then '未支付'
        when 'Y' then '已支付'
        ELSE '部分支付' end
        ) as IS_PAID,
        (
        case oif.PAYMENT_MODE
        when 'KDFH' then '款到发货'
        when 'HDFK'
        then '货到付款'
        when 'HDFK_POS' then '货到付款POS'
        ELSE '自提付款' end
        ) as
        paymentMode,
        (case
        when oif.payment_mode = 'KDFH' AND
        oif.IS_PAID = 'Y' and
        oif.order_state not in (19, 18) then
        ''
        when
        oif.payment_mode = 'HDFK' and oif.order_state not in (18, 19, 25) then
        ''
        else
        ''
        end) as isvalid,
        (
        (case when oif.ORDER_VOUCHERS > 0 then '优惠券' end) ||
        (case when oif.ORDER_FEE > oif.DISCOUNT_FEE then ' ' end) ||
        (case when
        oif.OTHER_DISCOUNTS > 0 then '活动优惠' end)
        ) as discountType ,
        oif.receive_user,
        replace(nvl(oif.receive_mobile,oif.receive_tel), substr(nvl(oif.receive_mobile,oif.receive_tel), 4, 4), '****')
        receive_mobile,
        oip.goods_sum_fee,
        g.COST_PRICE as saleGoodsCostPrice
        from order_info oif, order_item
        oit,goods g,ec_area a
        ,member m,EC_PAYMENT_TYPE ept,EC_COUPONS
        ec,SYS_CODE os,(select t.order_id,t.order_item_id,t.goods_id,sum(t.goods_sum_fee) as goods_sum_fee from order_item_price t where t.is_delete = 'N' group by t.order_id,t.order_item_id,t.goods_id) oip,
        (SELECT yy.yw_catalog_id,yy.yw_catalog_name,gg.goods_no FROM product_yw_catalog yy,product_yw_catalog_goods gg WHERE yy.yw_catalog_id = gg.wy_catalog_id) gd
        where
        oif.order_id=oit.order_id and
        oif.province_id=a.area_id and
        oit.goods_id=g.goods_id and
        oif.member_id=m.member_id 
        and
        oif.PAYMENT_TYPE_ID=ept.payment_type_id(+)
        and
        oif.order_id=ec.ORDER_ID(+) and oif.order_state=os.code_id(+)
        and
        os.code_type_no='order_state'
        and
        oit.order_item_id=oip.order_item_id(+)
        and
        oit.goods_no = gd.goods_no(+)
        and oit.is_delete = 'N'
         <include refid="getSaleStatisticsSQL" />
        order by oif.COMMIT_TIME desc
        <include refid="ed_fy" />
    </select>
    <!-- 导出exl 销售统计 -->
    <select id="exportSaleStatistics" resultMap="saleStatisticsMap"
        parameterClass="HashMap">
        select
        oif.ORDER_ID,oif.ORDER_FEE,oif.PAID_FEE,oif.COMMIT_TIME,oit.GOODS_AMOUNT
        as goodsAmount,oit.GOODS_PRICE as
        goodsPrice,oif.URL_FROM_NO,oif.PAID_FEE as paidFee,oif.PAID_TIME as
        paidTime,
        replace(oif.RECEIVE_FULL_ADDRESS,substr(oif.RECEIVE_FULL_ADDRESS,
        round(length(oif.RECEIVE_FULL_ADDRESS) / 3, 0),15),'*****') RECEIVE_FULL_ADDRESS,
        oit.GOODS_NO as goodsNo,gd.yw_catalog_id catalogId, gd.yw_catalog_name  catalogName,
        oit.GOODS_NAME as goodsName,m.login_name as
        loginName,ept.PAYMENT_TYPE_NAME as paymentType,ec.COUPON_NO as
        discountCode,
        oit.GOODS_AMOUNT*oit.GOODS_PRICE as
        oneGoodsSumPrice,oif.ORDER_PAY_FEE,
        (
        os.code_value
        ) as orderStateStr,
        (
        case oif.IS_PAID
        when 'N' then '未支付'
        when 'Y' then '已支付'
        ELSE '部分支付' end
        ) as IS_PAID,
        (
        case oif.PAYMENT_MODE
        when 'KDFH' then '款到发货'
        when 'HDFK'
        then '货到付款'
        when 'HDFK_POS' then '货到付款POS'
        ELSE '自提付款' end
        ) as
        paymentMode,
        (case
        when oif.payment_mode = 'KDFH' AND
        oif.IS_PAID = 'Y' and
        oif.order_state not in (19, 18) then
        ''
        when
        oif.payment_mode = 'HDFK' and oif.order_state not in (18, 19, 25) then
        ''
        else
        ''
        end) as isvalid,
        (
        (case when oif.ORDER_VOUCHERS > 0 then '优惠券' end) ||
        (case when oif.ORDER_FEE > oif.DISCOUNT_FEE then ' ' end) ||
        (case when
        oif.OTHER_DISCOUNTS > 0 then '活动优惠' end)
        ) as discountType ,
        oif.receive_user,
        replace(nvl(oif.receive_mobile,oif.receive_tel), substr(nvl(oif.receive_mobile,oif.receive_tel), 4, 4), '****')
        receive_mobile,
        oip.goods_sum_fee,
        g.COST_PRICE as saleGoodsCostPrice
        from order_info oif, order_item
        oit,goods g,ec_area a
        ,member m,EC_PAYMENT_TYPE ept,EC_COUPONS
        ec,SYS_CODE os,(select t.order_id,t.order_item_id,t.goods_id,sum(t.goods_sum_fee) as goods_sum_fee from order_item_price t where t.is_delete = 'N' group by t.order_id,t.order_item_id,t.goods_id) oip,
        (SELECT yy.yw_catalog_id,yy.yw_catalog_name,gg.goods_no FROM product_yw_catalog yy,product_yw_catalog_goods gg WHERE yy.yw_catalog_id = gg.wy_catalog_id) gd
        where
        oif.order_id=oit.order_id and
        oif.province_id=a.area_id and
        oit.goods_id=g.goods_id and
        oif.member_id=m.member_id
        and
        oif.PAYMENT_TYPE_ID=ept.payment_type_id(+) and
        oif.order_id=ec.ORDER_ID(+) and oif.order_state=os.code_id(+)
        and
        os.code_type_no='order_state'
        and
        oit.order_item_id=oip.order_item_id(+)
        and
        oit.goods_no = gd.goods_no(+)
        and oit.is_delete = 'N'
        <include refid="getSaleStatisticsSQL" />
        order by oif.COMMIT_TIME desc
    </select>

    <select id="getOrderInfoAndItemList" resultMap="orderInfoAndGoodsMap"
        parameterClass="HashMap">
        select oinfo.MEMBER_ID, oitem.GOODS_ID ,g.PRODUCT_ID from order_info
        oinfo,order_item oitem,goods g where oinfo.order_id=oitem.order_id and
        oitem.GOODS_ID=g.GOODS_ID
        and oinfo.IS_PAID='Y' and
        oinfo.ORDER_STATE=26
        <isNotEmpty prepend="and" property="startDate">
                   <![CDATA[ oinfo.COMMIT_TIME>=#startDate#  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="endDate">
                  <![CDATA[    oinfo.COMMIT_TIME<=#endDate# ]]>
        </isNotEmpty>
    </select>

    <select id="getCpsOrderInformation" resultMap="cpsOrderInformationMap"
        parameterClass="HashMap">
        select 
        oinfo.order_id,
       oinfo.erp_order_id,
       oinfo.member_id,
       oinfo.parent_order_id,
       oinfo.multi_channel_id,
       oinfo.multi_channel_order_batch_id,
       oinfo.multi_channel_order_id,
       oinfo.is_upload,
       oinfo.upload_user_id,
       oinfo.upload_time,
       oinfo.is_paid,
       oinfo.payment_mode,
       oinfo.payment_type_id,
       oinfo.payment_no,
       oinfo.paid_time,
       oinfo.offline_paid_user_id,
       oinfo.logistic_company_id,
       oinfo.order_state,
       oinfo.order_out_state,
       oinfo.limit_date,
       oinfo.sku_fee,
       oinfo.discount_fee,
       oinfo.order_points,
       oinfo.order_vouchers,
       oinfo.other_discounts,
       oinfo.delivery_fee,
       oinfo.order_fee,
       oinfo.paid_fee,
       oinfo.promote_rule_ids,
       oinfo.return_type,
       oinfo.return_value,
       oinfo.order_msg,
       oinfo.order_notes,
       oinfo.audit_notes,
       oinfo.audit_user_id,
       oinfo.audit_time,
       oinfo.is_lock,
       oinfo.lock_time,
       oinfo.lock_user_id,
       oinfo.commit_time,
       oinfo.finish_time,
       oinfo.cancel_time,
       oinfo.cancel_user_id,
       oinfo.cancel_notes,
       oinfo.sku_weights,
       oinfo.is_into_erp,
       oinfo.into_time,
       oinfo.receive_user,
       oinfo.province_id,
       oinfo.city_id,
       oinfo.area_id,
       oinfo.receive_address,
       oinfo.receive_full_address,
       oinfo.receive_post,
       oinfo.receive_tel,
       oinfo.receive_mobile,
       oinfo.receive_email,
       oinfo.receive_date_type,
       oinfo.receive_time_type,
       oinfo.invoice_type,
       oinfo.invoice_content_type,
       oinfo.invoice_title,
       oinfo.invoice_content,
       oinfo.invoice_tax_no,
       oinfo.invoice_tax_address,
       oinfo.invoice_tax_tel,
       oinfo.invoice_tax_bank,
       oinfo.invoice_tax_account,
       oinfo.is_delete,
       oinfo.add_user_id,
       oinfo.add_time,
       oinfo.edit_user_id,
       oinfo.edit_time,
       oinfo.url_from_no,
       oinfo.goods_batch_no,
       oinfo.order_pay_fee,
       oinfo.coupon_type_us_id,
       oinfo.coupon_no,
       oinfo.is_check_bills,
       oinfo.check_bill_user_id,
       oinfo.check_bill_time,
       oinfo.is_tc,cl.STANDBY1 cid, cl.STANDBY2
        wi,cl.GOODS_COMM,oi.GOODS_NO,oi.GOODS_NAME,oi.GOODS_PRICE,oi.GOODS_AMOUNT,
        (
        os.code_value
        ) as orderStateStr,
        (
        case oinfo.IS_PAID
        when 'N' then '未支付'
        when 'Y' then '已支付'
        ELSE '部分支付' end
        ) as ispaidStr,
        (
        case
        oinfo.PAYMENT_MODE
        when 'KDFH' then '款到发货'
        when 'HDFK' then '货到付款'
        when
        'HDFK_POS' then '货到付款POS'
        ELSE '自提付款' end
        ) as paymentType
        from
        order_info oinfo,cps_log cl,SYS_CODE os,order_item oi where
        oinfo.order_id=cl.order_id(+) and oinfo.order_state=os.code_id(+)
        and
        oinfo.order_id=oi.order_id
        <isNotEmpty prepend="and" property="startDate">
                   <![CDATA[
                    oinfo.COMMIT_TIME>=#startDate#
                   ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="endDate">
                  <![CDATA[    oinfo.COMMIT_TIME<=#endDate# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderId">
                 <![CDATA[    oinfo.order_id=#orderId#  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="urlFromNo">
                 <![CDATA[    oinfo.url_from_no=#urlFromNo#  ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsName">
                 <![CDATA[    oi.GOODS_NAME like '%$goodsName$%' ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsNo">
                 <![CDATA[    oi.GOODS_NO=#goodsNo# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="fromSource">
                 <![CDATA[    cl.from_source=#fromSource#  ]]>
        </isNotEmpty>
        order by oinfo.COMMIT_TIME desc
    </select>

    <!-- 统计是否已经有物流信息URL -->
    <select id="countOrderShippingUrl" parameterClass="long"
        resultClass="Integer">
        select count(0) from order_info where order_id = #orderId#
        and
        INVOICE_TAX_ADDRESS is null
    </select>

    <!-- 统计近3天已经发货但还没有物流url的订单 -->
    <select id="queryUrlIsNull" resultMap="kuaidi100Map">
        select oi.erp_order_id,
        oi.order_id,
        (select l.company_no from logistic_company l
        where exists
        (select 1
        from order_shipping os, order_delivery od
        where od.order_id =
        oi.order_id and l.logistic_company_id =
        os.logistic_company_id
        and
        os.order_delivery_id = od.order_delivery_id)) as "companyNo"
        from
        order_info oi
        where oi.invoice_tax_address is null
        and oi.erp_order_id
        is not null
        and to_date(oi.COMMIT_TIME, 'YYYY-MM-DD hh24:mi:ss') >
        sysdate - 3
    </select>

    <update id="updateStateToCommit" parameterClass="long">
        update
        order_info set
        order_state = (select code_id from sys_code where
        code_type_no = 'order_state'
        and code_no = 'commit' and is_delete =
        'N')
        where order_id = #orderId#
    </update>

    <select id="countValidateOrder" resultClass="Integer"
        parameterClass="java.util.Map">
        select count(0) from order_info o where o.order_id =
        #orderId# and
        o.member_id = #memberId#
    </select>
    <update id="updateStateToCancel" parameterClass="long">
        update
        order_info set
        order_state = (select code_id from sys_code where
        code_type_no = 'order_state'
        and code_no = 'cancel' and is_delete =
        'N')
        where order_id = #orderId#
    </update>

    <!-- 我的订单查询 -->
    <select id="getMyQueryOrders" resultClass="OrderQueryInfo"
        parameterClass="OrderInfo">
        select *
        from (
        select rownum rn,t.*
        from (
        select o.order_id as orderId,
        o.receive_user as receiveUser,
        (case
        when o.payment_mode = 'KDFH' AND
        o.IS_PAID = 'Y' and
        o.order_state not in (19, 18) then
        ''
        when
        o.payment_mode = 'HDFK' and o.order_state not in (18, 19, 25) then
        ''
        else
        ''
        end) as isValid,
        (select zh_concat(oi.goods_name || '*' ||
        oi.goods_amount) from order_item oi where oi.order_id = o.order_id and
        oi.is_delete =
        'N') buyGoods,
        (select zh_concat(oi.goods_no) from
        order_item oi where oi.order_id =
        o.order_id and oi.is_delete = 'N')
        goodsNos,
        (select sum(oi.GOODS_AMOUNT) from order_item oi where
        oi.order_id =
        o.order_id and oi.is_delete = 'N') goodsSum,

        o.ORDER_FEE
        as orderFee,
        replace(o.receive_address,
        substr(o.receive_address,
        round(length(o.receive_address) / 2, 0),
        5),
        '*****') earaAddress,
        (select ea.area_name from ec_area ea where ea.area_id = o.province_id)
        as
        receiveAddress,
        m.member_id,
        m.login_name loginName,o.multi_channel_order_id as multiChannelOrderId
        (case when
        oo.order_fee_all >= 1000 then '企业客户' else '零售客户' end) as
        goodsType
        from
        order_info o
        left join (select o1.receive_mobile,sum(o1.order_fee) as
        order_fee_all
        from order_info o1
        where to_date(o1.commit_time,
        'YYYY-MM-DD HH24:MI:SS') > SYSDATE - 30
        and ((o1.payment_mode = 'KDFH'
        and o1.IS_PAID = 'Y') or (o1.payment_mode
        = 'HDFK') ) and
        o1.order_state NOT in (18,19,25)
        AND ((o1.payment_mode = 'KDFH' and
        o1.IS_PAID = 'Y') or
        (o1.payment_mode = 'HDFK'))
        and o1.order_state NOT
        in (18, 19, 25)
        group by o1.receive_mobile) oo on o.receive_mobile =
        oo.receive_mobile,
        member m
        where m.member_id = o.member_id
        and
        o.is_delete = 'N'
        <include refid="queryOrderSql" />
        <isNotEmpty prepend="and" property="goodsNos">
            exists(
            select 1 from
            order_item oi where oi.goods_no = #goodsNos#
            and oi.order_id =
            o.order_id
            and oi.is_delete = 'N'
            )
        </isNotEmpty>
        <isNotEmpty prepend="and" property="buyGoods">
            exists(
            select 1 from
            order_item oi where oi.goods_name like '%$buyGoods$%'
            and oi.order_id
            = o.order_id
            and oi.is_delete = 'N'
            )
        </isNotEmpty>
        <isEqual prepend="and" property="memberType" compareValue="2">
                 <![CDATA[
                 order_fee_all >= 10000
                 ]]>
        </isEqual>
        <isEqual prepend="and" property="memberType" compareValue="1">
                 <![CDATA[
                 (order_fee_all < 10000 or order_fee_all is null)
                 ]]>
        </isEqual>
        <isNotEmpty prepend="and" property="catalogId">
            exists (select 1
            from
            product_yw_catalog_goods pcg,order_item oi
            where
            pcg.goods_no =
            oi.goods_no
            and pcg.wy_catalog_id = #catalogId#
            and oi.order_id =
            o.order_id
            and oi.is_delete = 'N' )
        </isNotEmpty>

        ) t
        <isNotEmpty prepend="where" property="endRow">
                 <![CDATA[
                  rownum <= #endRow# 
                  ]]>
        </isNotEmpty>
        order by t.orderId desc
        ) oii
        <isNotEmpty prepend="where" property="startRow">
             <![CDATA[
                  oii.rn >= #startRow# 
              ]]>
        </isNotEmpty>

    </select>

    <!-- 我的订单查询 -->
    <select id="getMyQueryOrdersCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select count(1)
        from order_info o
        left join (select
        o1.receive_mobile,sum(o1.order_fee) as order_fee_all
        from order_info o1
        where to_date(o1.commit_time, 'YYYY-MM-DD HH24:MI:SS') > SYSDATE - 30
        and ((o1.payment_mode = 'KDFH' and o1.IS_PAID = 'Y') or
        (o1.payment_mode
        = 'HDFK') ) and o1.order_state NOT in (18,19,25)
        AND
        ((o1.payment_mode = 'KDFH' and o1.IS_PAID = 'Y') or
        (o1.payment_mode =
        'HDFK'))
        and o1.order_state NOT in (18, 19, 25)
        member m
        where
        m.member_id = o.member_id
        and o.is_delete = 'N'
        <include refid="queryOrderSql" />
        <isNotEmpty prepend="and" property="goodsNos">
            exists(
            select 1 from
            order_item oi where oi.goods_no = #goodsNos#
            and oi.order_id =
            o.order_id
            and oi.is_delete = 'N'
            )
        </isNotEmpty>
        <isNotEmpty prepend="and" property="buyGoods">
            exists(
            select 1 from
            order_item oi where oi.goods_name like '%$buyGoods$%'
            and oi.order_id
            = o.order_id
            and oi.is_delete = 'N'
            )
        </isNotEmpty>
        <isEqual prepend="and" property="memberType" compareValue="2">
                 <![CDATA[
                 order_fee_all >= 10000
                 ]]>
        </isEqual>
        <isEqual prepend="and" property="memberType" compareValue="1">
                 <![CDATA[
                 (order_fee_all < 10000 or order_fee_all is null)
                 ]]>
        </isEqual>
        <isNotEmpty prepend="and" property="catalogId">
            exists (select 1
            from
            product_yw_catalog_goods pcg,order_item oi
            where
            pcg.goods_no =
            oi.goods_no
            and pcg.wy_catalog_id = #catalogId#
            and oi.order_id =
            o.order_id
            and oi.is_delete = 'N' )
        </isNotEmpty>


    </select>


    <select id="getSimilarOrderInfo" parameterClass="OrderInfo"
        resultMap="orderInfoResult">
        select 
        order_id,
       erp_order_id,
       member_id,
       parent_order_id,
       multi_channel_id,
       multi_channel_order_batch_id,
       multi_channel_order_id,
       is_upload,
       upload_user_id,
       upload_time,
       is_paid,
       payment_mode,
       payment_type_id,
       payment_no,
       paid_time,
       offline_paid_user_id,
       logistic_company_id,
       order_state,
       order_out_state,
       limit_date,
       sku_fee,
       discount_fee,
       order_points,
       order_vouchers,
       other_discounts,
       delivery_fee,
       order_fee,
       paid_fee,
       promote_rule_ids,
       return_type,
       return_value,
       order_msg,
       order_notes,
       audit_notes,
       audit_user_id,
       audit_time,
       is_lock,
       lock_time,
       lock_user_id,
       commit_time,
       finish_time,
       cancel_time,
       cancel_user_id,
       cancel_notes,
       sku_weights,
       is_into_erp,
       into_time,
       receive_user,
       province_id,
       city_id,
       area_id,
       receive_address,
       receive_full_address,
       receive_post,
       receive_tel,
       receive_mobile,
       receive_email,
       receive_date_type,
       receive_time_type,
       invoice_type,
       invoice_content_type,
       invoice_title,
       invoice_content,
       invoice_tax_no,
       invoice_tax_address,
       invoice_tax_tel,
       invoice_tax_bank,
       invoice_tax_account,
       is_delete,
       add_user_id,
       add_time,
       edit_user_id,
       edit_time,
       url_from_no,
       goods_batch_no,
       order_pay_fee,
       coupon_type_us_id,
       coupon_no,
       is_check_bills,
       check_bill_user_id,
       check_bill_time,
       is_tc
        from ORDER_INFO where 1=1
        <isNotEmpty prepend="and" property="isLock">
     <![CDATA[ IS_LOCK=#isLock# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderFee">
     <![CDATA[ ORDER_FEE=#orderFee# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="cityId">
     <![CDATA[ CITY_ID=#cityId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTime">
     <![CDATA[ COMMIT_TIME=#commitTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="addUserId">
     <![CDATA[ ADD_USER_ID=#addUserId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="returnValue">
     <![CDATA[ RETURN_VALUE=#returnValue# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="cancelTime">
     <![CDATA[ CANCEL_TIME=#cancelTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="auditNotes">
     <![CDATA[ AUDIT_NOTES=#auditNotes# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="invoiceContentType">
     <![CDATA[ INVOICE_CONTENT_TYPE=#invoiceContentType# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderMsg">
     <![CDATA[ ORDER_MSG=#orderMsg# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="limitDate">
     <![CDATA[ LIMIT_DATE=#limitDate# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isTc">
     <![CDATA[ IS_TC=#isTc# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveUser">
     <![CDATA[ RECEIVE_USER=#receiveUser# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="editUserId">
     <![CDATA[ EDIT_USER_ID=#editUserId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="discountFee">
     <![CDATA[ DISCOUNT_FEE=#discountFee# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderState">
     <![CDATA[ ORDER_STATE=#orderState# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderOutState">
     <![CDATA[ ORDER_OUT_STATE=#orderOutState# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveEmail">
     <![CDATA[ RECEIVE_EMAIL=#receiveEmail# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderPoints">
     <![CDATA[ ORDER_POINTS=#orderPoints# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="uploadUserId">
     <![CDATA[ UPLOAD_USER_ID=#uploadUserId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="otherDiscounts">
     <![CDATA[ OTHER_DISCOUNTS=#otherDiscounts# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="couponNo">
     <![CDATA[ COUPON_NO=#couponNo# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="multiChannelOrderId">
     <![CDATA[ MULTI_CHANNEL_ORDER_ID=#multiChannelOrderId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="uploadTime">
     <![CDATA[ UPLOAD_TIME=#uploadTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isDelete">
     <![CDATA[ IS_DELETE=#isDelete# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="erpOrderId">
     <![CDATA[ ERP_ORDER_ID=#erpOrderId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="logisticCompanyId">
     <![CDATA[ LOGISTIC_COMPANY_ID=#logisticCompanyId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="cancelUserId">
     <![CDATA[ CANCEL_USER_ID=#cancelUserId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="goodsBatchNo">
     <![CDATA[ GOODS_BATCH_NO=#goodsBatchNo# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="checkBillTime">
     <![CDATA[ CHECK_BILL_TIME=#checkBillTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="lockTime">
     <![CDATA[ LOCK_TIME=#lockTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="cancelNotes">
     <![CDATA[ CANCEL_NOTES=#cancelNotes# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="urlFromNo">
     <![CDATA[ URL_FROM_NO=#urlFromNo# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderId">
     <![CDATA[ ORDER_ID=#orderId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentNo">
     <![CDATA[ PAYMENT_NO=#paymentNo# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="invoiceTaxTel">
     <![CDATA[ INVOICE_TAX_TEL=#invoiceTaxTel# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="multiChannelId">
     <![CDATA[ MULTI_CHANNEL_ID=#multiChannelId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="parentOrderId">
     <![CDATA[ PARENT_ORDER_ID=#parentOrderId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="auditUserId">
     <![CDATA[ AUDIT_USER_ID=#auditUserId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receivePost">
     <![CDATA[ RECEIVE_POST=#receivePost# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentTypeId">
     <![CDATA[ PAYMENT_TYPE_ID=#paymentTypeId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveTimeType">
     <![CDATA[ RECEIVE_TIME_TYPE=#receiveTimeType# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="invoiceType">
     <![CDATA[ INVOICE_TYPE=#invoiceType# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="returnType">
     <![CDATA[ RETURN_TYPE=#returnType# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="offlinePaidUserId">
     <![CDATA[ OFFLINE_PAID_USER_ID=#offlinePaidUserId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="lockUserId">
     <![CDATA[ LOCK_USER_ID=#lockUserId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveDateType">
     <![CDATA[ RECEIVE_DATE_TYPE=#receiveDateType# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="skuWeights">
     <![CDATA[ SKU_WEIGHTS=#skuWeights# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentMode">
     <![CDATA[ PAYMENT_MODE=#paymentMode# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isUpload">
     <![CDATA[ IS_UPLOAD=#isUpload# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="promoteRuleIds">
     <![CDATA[ PROMOTE_RULE_IDS=#promoteRuleIds# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="invoiceTaxAccount">
     <![CDATA[ INVOICE_TAX_ACCOUNT=#invoiceTaxAccount# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="finishTime">
     <![CDATA[ FINISH_TIME=#finishTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="areaId">
     <![CDATA[ AREA_ID=#areaId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paidFee">
     <![CDATA[ PAID_FEE=#paidFee# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderVouchers">
     <![CDATA[ ORDER_VOUCHERS=#orderVouchers# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberId">
     <![CDATA[ MEMBER_ID=#memberId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveMobile">
     <![CDATA[ RECEIVE_MOBILE=#receiveMobile# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="invoiceTitle">
     <![CDATA[ INVOICE_TITLE=#invoiceTitle# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="intoTime">
     <![CDATA[ INTO_TIME=#intoTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="invoiceTaxAddress">
     <![CDATA[ INVOICE_TAX_ADDRESS=#invoiceTaxAddress# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="checkBillUserId">
     <![CDATA[ CHECK_BILL_USER_ID=#checkBillUserId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="auditTime">
     <![CDATA[ AUDIT_TIME=#auditTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isCheckBills">
     <![CDATA[ IS_CHECK_BILLS=#isCheckBills# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="multiChannelOrderBatchId">
     <![CDATA[ MULTI_CHANNEL_ORDER_BATCH_ID=#multiChannelOrderBatchId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="invoiceTaxNo">
     <![CDATA[ INVOICE_TAX_NO=#invoiceTaxNo# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paidTime">
     <![CDATA[ PAID_TIME=#paidTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="invoiceTaxBank">
     <![CDATA[ INVOICE_TAX_BANK=#invoiceTaxBank# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveAddress">
     <![CDATA[ RECEIVE_ADDRESS=#receiveAddress# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="editTime">
     <![CDATA[ EDIT_TIME=#editTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveFullAddress">
     <![CDATA[ RECEIVE_FULL_ADDRESS=#receiveFullAddress# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="receiveTel">
     <![CDATA[ RECEIVE_TEL=#receiveTel# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="couponTypeUsId">
     <![CDATA[ COUPON_TYPE_US_ID=#couponTypeUsId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="addTime">
     <![CDATA[ ADD_TIME=#addTime# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="provinceId">
     <![CDATA[ PROVINCE_ID=#provinceId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderPayFee">
     <![CDATA[ ORDER_PAY_FEE=#orderPayFee# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="skuFee">
     <![CDATA[ SKU_FEE=#skuFee# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderNotes">
     <![CDATA[ ORDER_NOTES=#orderNotes# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isIntoErp">
     <![CDATA[ IS_INTO_ERP=#isIntoErp# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="deliveryFee">
     <![CDATA[ DELIVERY_FEE=#deliveryFee# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="invoiceContent">
     <![CDATA[ INVOICE_CONTENT=#invoiceContent# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isPaid">
     <![CDATA[ IS_PAID=#isPaid# ]]>
        </isNotEmpty>
    </select>

    <select id="getWorkOrderInfoPage" resultMap="workOrderInfoResult"
        parameterClass="OrderInfo">
        select 
        o.order_id,
       o.erp_order_id,
       o.member_id,
       o.parent_order_id,
       o.multi_channel_id,
       o.multi_channel_order_batch_id,
       o.multi_channel_order_id,
       o.is_upload,
       o.upload_user_id,
       o.upload_time,
       o.is_paid,
       o.payment_mode,
       o.payment_type_id,
       o.payment_no,
       o.paid_time,
       o.tax_fee,
       o.offline_paid_user_id,
       o.logistic_company_id,
       o.order_state,
       o.order_out_state,
       o.limit_date,
       o.sku_fee,
       o.discount_fee,
       o.order_points,
       o.order_vouchers,
       o.other_discounts,
       o.delivery_fee,
       o.order_fee,
       o.paid_fee,
       o.promote_rule_ids,
       o.return_type,
       o.return_value,
       o.order_msg,
       o.order_notes,
       o.audit_notes,
       o.audit_user_id,
       o.audit_time,
       o.is_lock,
       o.lock_time,
       o.lock_user_id,
       o.commit_time,
       o.finish_time,
       o.cancel_time,
       o.cancel_user_id,
       o.cancel_notes,
       o.sku_weights,
       o.is_into_erp,
       o.into_time,
       o.receive_user,
       o.province_id,
       o.city_id,
       o.area_id,
       o.receive_address,
       o.receive_full_address,
       o.receive_post,
       o.receive_tel,
       o.receive_mobile,
       o.receive_email,
       o.receive_date_type,
       o.receive_time_type,
       o.invoice_type,
       o.invoice_content_type,
       o.invoice_title,
       o.invoice_content,
       o.invoice_tax_no,
       o.invoice_tax_address,
       o.invoice_tax_tel,
       o.invoice_tax_bank,
       o.invoice_tax_account,
       o.is_delete,
       o.add_user_id,
       o.add_time,
       o.edit_user_id,
       o.edit_time,
       o.url_from_no,
       o.goods_batch_no,
       o.order_pay_fee,
       o.coupon_type_us_id,
       o.coupon_no,
       o.is_check_bills,
       o.check_bill_user_id,
       o.check_bill_time,
       o.is_tc,
        (select zh_concat(oi.goods_name || '*' ||
        oi.goods_amount) from
        order_item oi where oi.order_id = o.order_id and
        oi.is_delete = 'N')
        buyGoods,
        (select
        sum(oi.GOODS_AMOUNT*oi.GOODS_COST_PRICE) from order_item oi where
        oi.order_id = o.order_id and oi.is_delete = 'N') workGoodsCostPrice,
        su.user_real_name,
        su.user_name,
        lc.company_name
        from order_info o
        left
        join member m on m.member_id = o.member_id
        left join fecerp.sys_user su
        on o.add_user_id = su.user_id
        left join LOGISTIC_COMPANY lc on
        o.logistic_company_id =
        lc.logistic_company_id
        where o.is_delete = 'N'
        and o.add_user_id is not null
        and ((o.payment_mode = 'KDFH' and
        o.IS_PAID = 'Y') or (o.payment_mode =
        'HDFK') ) and o.order_state NOT
        in (18,19,25)
        <include refid="queryOrderSql" />
        <isNotEmpty prepend="and" property="goodSkus">
            exists(select 1
            from order_item oi
            where oi.order_id = o.order_id
            and
            oi.is_delete = 'N'
            and oi.goods_no in
            <iterate property="goodSkus" open="(" close=")" conjunction=",">
                #goodSkus[]#
            </iterate>
            )
        </isNotEmpty>
        <isNotEmpty prepend="and" property="groupId">
            (exists(select 1 from
            sys_group_user sgu where sgu.user_id = o.add_user_id and
            sgu.group_id
            = #groupId# ))
        </isNotEmpty>
        <isNotEmpty prepend="and" property="logisticCompanyId">
            o.LOGISTIC_COMPANY_ID =
            #logisticCompanyId#
        </isNotEmpty>
        <isNotEmpty property="isReturn">
            <isEqual prepend="and" property="isReturn" compareValue="1">
                o.order_state in(250,251,252,253,23)
            </isEqual>
            <isEqual prepend="and" property="isReturn" compareValue="2">
                o.order_state not in(250,251,252,253,23)
            </isEqual>
        </isNotEmpty>
        <isNotEmpty property="isComplete">
            <isEqual prepend="and" property="isComplete" compareValue="1">
                o.order_state = 26
            </isEqual>
            <isEqual prepend="and" property="isComplete" compareValue="2">
                         <![CDATA[ o.order_state <> 26 ]]>
            </isEqual>
        </isNotEmpty>
        <isEqual prepend="and" property="isAddWork" compareValue="1">
            exists(select 1 from call_work_order cwo where o.order_id =
            cwo.order_id and cwo.is_delete = 'N')
        </isEqual>
        <isEqual prepend="and" property="isAddWork" compareValue="2">
            not
            exists(select 1 from call_work_order cwo where o.order_id =
            cwo.order_id and cwo.is_delete = 'N')
        </isEqual>

    </select>

    <select id="getWorkOrderInfoCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select count(1)
        from order_info o
        left join member m on m.member_id =
        o.member_id
        left join fecerp.sys_user su on o.add_user_id = su.user_id
        left join LOGISTIC_COMPANY lc on o.logistic_company_id =
        lc.logistic_company_id
        where o.is_delete = 'N'
        and o.add_user_id is not
        null
        and ((o.payment_mode = 'KDFH' and o.IS_PAID = 'Y') or
        (o.payment_mode =
        'HDFK') ) and o.order_state NOT in (18,19,25)
        <include refid="queryOrderSql" />
        <isNotEmpty prepend="and" property="goodSkus">
            exists(select 1
            from order_item oi
            where oi.order_id = o.order_id
            and
            oi.is_delete = 'N'
            and oi.goods_no in
            <iterate property="goodSkus" open="(" close=")" conjunction=",">
                #goodSkus[]#
            </iterate>
            )
        </isNotEmpty>
        <isNotEmpty prepend="and" property="groupId">
            (exists(select 1 from
            sys_group_user sgu where sgu.user_id = o.add_user_id and
            sgu.group_id
            = #groupId# ))
        </isNotEmpty>
        <isNotEmpty prepend="and" property="logisticCompanyId">
            o.LOGISTIC_COMPANY_ID =
            #logisticCompanyId#
        </isNotEmpty>
        <isNotEmpty property="isReturn">
            <isEqual prepend="and" property="isReturn" compareValue="1">
                o.order_state in(250,251,252,253,23)
            </isEqual>
            <isEqual prepend="and" property="isReturn" compareValue="2">
                o.order_state not in(250,251,252,253,23)
            </isEqual>
        </isNotEmpty>
        <isNotEmpty property="isComplete">
            <isEqual prepend="and" property="isComplete" compareValue="1">
                o.order_state = 26
            </isEqual>
            <isEqual prepend="and" property="isComplete" compareValue="2">
                         <![CDATA[ o.order_state <> 26 ]]>
            </isEqual>
        </isNotEmpty>
        <isEqual prepend="and" property="isAddWork" compareValue="1">
            exists(select 1 from call_work_order cwo where o.order_id =
            cwo.order_id and cwo.is_delete = 'N')
        </isEqual>
        <isEqual prepend="and" property="isAddWork" compareValue="2">
            not
            exists(select 1 from call_work_order cwo where o.order_id =
            cwo.order_id and cwo.is_delete = 'N')
        </isEqual>
    </select>
    <select id="getWorkOrderTotalCount" resultMap="orderWorkTotalCount"
        parameterClass="OrderInfo">
        select count(o.order_id) as totalNum,
        (case
        when instr(sum(o.ORDER_FEE),
        '.')>0
        then substr(sum(o.ORDER_FEE), '0', instr(sum(o.ORDER_FEE), '.')
        - 1)
        else
        substr(sum(o.ORDER_FEE),0)
        end) as totalMoney,
        round(sum(o.ORDER_FEE) / count(o.member_id), 2) as aveNum,
        round(sum((select sum(ii.goods_amount)
        from order_item ii
        where
        ii.order_id = o.order_id
        and ii.is_delete = 'N')) / count(o.order_id),
        2) as avegoods,
        sum((select sum(it.goods_amount * it.goods_cost_price)
        from order_item it where
        it.order_id=o.order_id and it.is_delete='N'))
        as costFee
        from
        order_info o
        left join member m on m.member_id =
        o.member_id
        left join fecerp.sys_user su on o.add_user_id = su.user_id
        left join LOGISTIC_COMPANY lc on o.logistic_company_id =
        lc.logistic_company_id
        where o.is_delete = 'N'
        and o.add_user_id is not
        null
        and ((o.payment_mode = 'KDFH' and o.IS_PAID = 'Y') or
        (o.payment_mode =
        'HDFK') ) and o.order_state NOT in (18,19,25)
        <include refid="queryOrderSql" />
        <isNotEmpty prepend="and" property="goodSkus">
            exists(select 1
            from order_item oi
            where oi.order_id = o.order_id
            and
            oi.is_delete = 'N'
            and oi.goods_no in
            <iterate property="goodSkus" open="(" close=")" conjunction=",">
                #goodSkus[]#
            </iterate>
            )
        </isNotEmpty>
        <isNotEmpty prepend="and" property="groupId">
            (exists(select 1 from
            sys_group_user sgu where sgu.user_id = o.add_user_id and
            sgu.group_id
            = #groupId# ))
        </isNotEmpty>
        <isNotEmpty prepend="and" property="logisticCompanyId">
            o.LOGISTIC_COMPANY_ID =
            #logisticCompanyId#
        </isNotEmpty>
        <isNotEmpty property="isReturn">
            <isEqual prepend="and" property="isReturn" compareValue="1">
                o.order_state in(250,251,252,253,23)
            </isEqual>
            <isEqual prepend="and" property="isReturn" compareValue="2">
                o.order_state not in(250,251,252,253,23)
            </isEqual>
        </isNotEmpty>
        <isNotEmpty property="isComplete">
            <isEqual prepend="and" property="isComplete" compareValue="1">
                o.order_state = 26
            </isEqual>
            <isEqual prepend="and" property="isComplete" compareValue="2">
                         <![CDATA[ o.order_state <> 26 ]]>
            </isEqual>
        </isNotEmpty>
        <isEqual prepend="and" property="isAddWork" compareValue="1">
            exists(select 1 from call_work_order cwo where o.order_id =
            cwo.order_id and cwo.is_delete = 'N')
        </isEqual>
        <isEqual prepend="and" property="isAddWork" compareValue="2">
            not
            exists(select 1 from call_work_order cwo where o.order_id =
            cwo.order_id and cwo.is_delete = 'N')
        </isEqual>
    </select>
    <select id="getOrderAccuCount" resultClass="Integer"
        parameterClass="HashMap">
        select count(goods_no)
        from order_manual_item
        where
        is_delete='N'
        and goods_no=#goodsNo#
    </select>

    <select id="getOrderAccuPage" resultClass="OrderInfo"
        parameterClass="HashMap">
        <include refid="be_fy" />
        select
        (substr(user_name, 0, 1) || '**' ||
        substr(user_name,
        length(user_name) - 2, 1)) as memberLoginName,
        product_name as
        goodsName,
        price as goodsPrice,
        amount as goodsAmount,
        commit_time as
        commitTime,
        goods_no as goodsNo
        from order_manual_item
        where
        is_delete='N'
        and goods_no=#goodsNo#
        order by commit_time desc
        <include refid="ed_fy" />
    </select>
    <select id="getGoodsTotalVolumeCount" resultClass="java.lang.Integer"
        parameterClass="HashMap">
        select
        sale_amount
        from goods
        where
        is_delete='N'
        and goods_no=#goodsNo#
    </select>
    <!-- 根据用户ID查看该用户下的所有订单 -->
    <select id="getOrderCallByUserId" resultMap="OrderCallMap"  parameterClass="OrderInfo">
        select * from (
        select o.order_id as orderId,
               o.erp_order_id as orderLogusticId,
               (select lc.logistic_company_id
                  from order_shipping os, logistic_company lc
                 where lc.logistic_company_id = os.logistic_company_id
                   and os.order_shipping_no = o.erp_order_id
                   and rownum = 1) as orderLogusticCompanyId,
                (select m.channel_name
                  from ec_multi_channel m
                 where m.multi_channel_id = o.multi_channel_id) as orderMultiChannel,
               o.receive_user as orderCustomerName, 
               (case
                 when o.payment_mode = 'KDFH' AND o.IS_PAID = 'Y' and
                      o.order_state not in (19, 18) then
                  ''
                 when o.payment_mode = 'HDFK' and o.order_state not in (18, 19, 25) then
                  ''
                 else
                  ''
               end) as orderIsEffective,
               o.SKU_FEE as orderGoodsAllFee, 
               o.DELIVERY_FEE as orderDeliveryFee,
               nvl(o.discount_fee + o.order_points + o.order_vouchers + o.other_discounts,0) as orderDiscountFee,  
               o.ORDER_FEE as orderFee, 
               o.RECEIVE_TEL as orderReceiveTel,
               o.province_id as orderAreaId,
               o.order_state as orderState,
               o.is_paid as orderIsPaid,
               o.payment_type_id as orderPaymentTypeId,  
                (select em.multi_channel_id
                  from ec_multi_channel em
                 where em.multi_channel_id = o.multi_channel_id) channel_name,       
               nvl((select u.characters
                     from urlfrom u
                    where u.url like '%' || (case
                            when instr(o.url_from_no, '//') > 0 then
                             substr(o.url_from_no,
                                    instr(o.url_from_no, '//', 1, 1) + 2,
                                    instr(o.url_from_no, '/', 1, 3) - 8)
                            else
                             o.url_from_no
                          end) || '%'
                      and rownum = 1),
                   o.url_from_no) as orderSourceMedia,   
                DECODE(o.PAYMENT_MODE,
                      'KDFH',
                      '款到发货',
                      'HDFK',
                      '货到付款',
                      'HDFK_POS',
                      '货到付款',
                      'ZTFK',
                      '自提付款') as orderPaymentMode, 
               o.commit_time as orderFinishTime 
          from order_info o, member m
         where m.member_id = o.member_id
           and o.is_delete = 'N'
           <include refid="queryOrderSql" /> 
           and o.add_user_id = (select su.user_id from fecerp.sys_user su where su.user_name = #userName# and rownum = 1 )
           order by o.commit_time desc)
           where rownum &lt;21
    </select>
    
        <!-- 呼叫中心查询我的订单 -->
    <select id="getCallMyOrderList" resultMap="myOrderCallMap"  parameterClass="OrderInfo">
    <include refid="be_fy" />
        select o.order_id as orderId,
               o.erp_order_id as orderLogusticId,
               m.login_name as loginName,
               (case when ((o.payment_mode = 'KDFH' and o.IS_PAID = 'Y') or (o.payment_mode ='HDFK') ) and o.order_state NOT in (18,19,25) then ''
                     when ((o.payment_mode = 'KDFH' and o.IS_PAID = 'N') or o.order_state in (25,18,19)) then '' end) as isvalid,
               (select zh_concat(oi.goods_name || '*' ||oi.goods_amount) 
                from order_item oi 
                where oi.order_id = o.order_id 
                      and oi.is_delete = 'N') as buyGoods,
               (select nvl(sum(GOODS_PRICE*GOODS_AMOUNT),0)
                from order_item oi 
                where oi.order_id = o.order_id 
                      and oi.is_delete = 'N') as buyGoodsFee,
               DELIVERY_FEE as deliveryFee,
               ORDER_FEE as orderFee,
               (select nvl(sum(round((case when cgc.commission_type = 1 then GOODS_PRICE*GOODS_AMOUNT*(cgc.commission/100) else 0 end),2)),0)
                from order_item oi
                     left join call_goods cg on oi.goods_no = cg.goods_no and cg.is_delete = 'N'
                     left join call_goods_commission cgc on cg.call_goods_id = cgc.call_goods_id and cgc.is_delete = 'N'
                where oi.order_id = o.order_id 
                      and oi.is_delete = 'N') as commissionFee
          from order_info o
               left join member m on m.member_id = o.member_id
         where  o.is_delete = 'N'
           <include refid="queryOrderSql" /> 
           <isNotEmpty prepend="and" property="goodSkus">
                exists(select 1
                from order_item oi
                where oi.order_id = o.order_id
                and
                oi.is_delete = 'N'
                and oi.goods_no in
                <iterate property="goodSkus" open="(" close=")" conjunction=",">
                    #goodSkus[]#
                </iterate>
                )
            </isNotEmpty>
            <isNotEmpty property="isComplete">
                <isEqual prepend="and" property="isComplete" compareValue="1">
                    o.order_state = 26
                </isEqual>
                <isEqual prepend="and" property="isComplete" compareValue="2">
                             <![CDATA[ o.order_state <> 26 ]]>
                </isEqual>
            </isNotEmpty>
            <isEqual prepend="and" property="isAddWork" compareValue="1">
                exists(select 1 from call_work_order cwo where o.order_id =
                cwo.order_id and cwo.is_delete = 'N')
            </isEqual>
            <isEqual prepend="and" property="isAddWork" compareValue="2">
                not
                exists(select 1 from call_work_order cwo where o.order_id =
                cwo.order_id and cwo.is_delete = 'N')
            </isEqual>
            and o.MULTI_CHANNEL_ID = 32
           order by o.commit_time desc
    <include refid="ed_fy" />
    </select>
    
    <select id="getCallMyOrderCount" resultClass="Integer"  parameterClass="OrderInfo">
        select count(1)
          from order_info o
               left join member m on m.member_id = o.member_id
         where  o.is_delete = 'N'
           <include refid="queryOrderSql" /> 
           <isNotEmpty prepend="and" property="goodSkus">
                exists(select 1
                from order_item oi
                where oi.order_id = o.order_id
                and
                oi.is_delete = 'N'
                and oi.goods_no in
                <iterate property="goodSkus" open="(" close=")" conjunction=",">
                    #goodSkus[]#
                </iterate>
                )
            </isNotEmpty>
            <isNotEmpty property="isComplete">
                <isEqual prepend="and" property="isComplete" compareValue="1">
                    o.order_state = 26
                </isEqual>
                <isEqual prepend="and" property="isComplete" compareValue="2">
                             <![CDATA[ o.order_state <> 26 ]]>
                </isEqual>
            </isNotEmpty>
            <isEqual prepend="and" property="isAddWork" compareValue="1">
                exists(select 1 from call_work_order cwo where o.order_id =
                cwo.order_id and cwo.is_delete = 'N')
            </isEqual>
            <isEqual prepend="and" property="isAddWork" compareValue="2">
                not
                exists(select 1 from call_work_order cwo where o.order_id =
                cwo.order_id and cwo.is_delete = 'N')
            </isEqual>
            and o.MULTI_CHANNEL_ID = 32
    </select>
    <!-- 呼叫中心查询我的业绩 数据统计-->
    <select id="getTotalCall" resultMap="totalCall" parameterClass="OrderInfo">
       select count(1) as totalNum,
           count(distinct o.member_id) as myCustomerCount,
           sum((select round(nvl(sum(GOODS_PRICE*GOODS_AMOUNT),0),2)
              from order_item oi 
              where oi.order_id = o.order_id 
                and oi.is_delete = 'N')) as totalMoney,
            sum((select nvl(sum(round((case when cgc.commission_type = 1 then GOODS_PRICE*GOODS_AMOUNT*(cgc.commission/100) else 0 end),2)),0)
                  from order_item oi
                       left join call_goods cg on oi.goods_no = cg.goods_no and cg.is_delete = 'N'
                       left join call_goods_commission cgc on cg.call_goods_id = cgc.call_goods_id and cgc.is_delete = 'N'
                    where oi.order_id = o.order_id 
                          and oi.is_delete = 'N')) as myCommission,
             '' as myCallSuccess,
             '' as myOrderSuccess
        from order_info o
            left join member m on m.member_id = o.member_id
        where  o.is_delete = 'N'
            <include refid="queryOrderSql" /> 
           <isNotEmpty prepend="and" property="goodSkus">
                exists(select 1
                from order_item oi
                where oi.order_id = o.order_id
                and
                oi.is_delete = 'N'
                and oi.goods_no in
                <iterate property="goodSkus" open="(" close=")" conjunction=",">
                    #goodSkus[]#
                </iterate>
                )
            </isNotEmpty>
            <isNotEmpty property="isComplete">
                <isEqual prepend="and" property="isComplete" compareValue="1">
                    o.order_state = 26
                </isEqual>
                <isEqual prepend="and" property="isComplete" compareValue="2">
                             <![CDATA[ o.order_state <> 26 ]]>
                </isEqual>
            </isNotEmpty>
            <isEqual prepend="and" property="isAddWork" compareValue="1">
                exists(select 1 from call_work_order cwo where o.order_id =
                cwo.order_id and cwo.is_delete = 'N')
            </isEqual>
            <isEqual prepend="and" property="isAddWork" compareValue="2">
                not
                exists(select 1 from call_work_order cwo where o.order_id =
                cwo.order_id and cwo.is_delete = 'N')
            </isEqual>
            and o.MULTI_CHANNEL_ID = 32
    </select>
    <!-- 呼叫中心查询我的业绩 -->
    <select id="getCallMyGoodsList" resultMap="myCallGoodsMap"  parameterClass="OrderInfo">
    <include refid="be_fy" />
      select cg.goods_no as goodsNo,
             g.goods_name as goodsName,
             cgc.commission_type as commissionType,
             cgc.commission as commission,
             '' as goodsPrice,
               nvl(sum(oi.goods_amount),0) as sailCount,
               nvl(sum(oi.goods_price*oi.goods_amount),0) as sailFee,
             nvl(round((case when cgc.commission_type = 1 then sum(oi.GOODS_PRICE*oi.GOODS_AMOUNT*(cgc.commission/100)) else 0 end),2),0) as commissionFee
       from call_goods cg 
             left join goods g on cg.goods_no = g.goods_no and cg.is_delete = 'N'
             left join order_item oi        on cg.goods_no = oi.goods_no and oi.is_delete = 'N'
             left join call_goods_commission cgc on cg.call_goods_id = cgc.call_goods_id and cgc.is_delete = 'N'
             left join order_info o          on oi.order_id = o.order_id and o.is_delete = 'N'
             left join member m on m.member_id = o.member_id
       where  cg.is_delete = 'N'
               <include refid="queryOrderSql" /> 
            <isNotEmpty prepend="and" property="goodSkus">
                 oi.goods_no in
                <iterate property="goodSkus" open="(" close=")" conjunction=",">
                    #goodSkus[]#
                </iterate>
            </isNotEmpty>
            <isNotEmpty property="isComplete">
                <isEqual prepend="and" property="isComplete" compareValue="1">
                    o.order_state = 26
                </isEqual>
                <isEqual prepend="and" property="isComplete" compareValue="2">
                             <![CDATA[ o.order_state <> 26 ]]>
                </isEqual>
            </isNotEmpty>
            <isEqual prepend="and" property="isAddWork" compareValue="1">
                exists(select 1 from call_work_order cwo where o.order_id =
                cwo.order_id and cwo.is_delete = 'N')
            </isEqual>
            <isEqual prepend="and" property="isAddWork" compareValue="2">
                not
                exists(select 1 from call_work_order cwo where o.order_id =
                cwo.order_id and cwo.is_delete = 'N')
            </isEqual>
            and o.MULTI_CHANNEL_ID = 32
       group by cg.goods_no,
             g.goods_name,
             cgc.commission_type,
             cgc.commission
    <include refid="ed_fy" />
    </select>
    
    <select id="getCallMyGoodsCount" resultClass="Integer"   parameterClass="OrderInfo">
        select count(1)
       from call_goods cg 
             left join goods g on cg.goods_no = g.goods_no and cg.is_delete = 'N'
             left join order_item oi        on cg.goods_no = oi.goods_no and oi.is_delete = 'N'
             left join call_goods_commission cgc on cg.call_goods_id = cgc.call_goods_id and cgc.is_delete = 'N'
             left join order_info o          on oi.order_id = o.order_id and o.is_delete = 'N'
             left join member m on m.member_id = o.member_id
       where  cg.is_delete = 'N'
               <include refid="queryOrderSql" /> 
             <isNotEmpty prepend="and" property="goodSkus">
                exists(select 1
                from order_item oi
                where oi.order_id = o.order_id
                and
                oi.is_delete = 'N'
                and oi.goods_no in
                <iterate property="goodSkus" open="(" close=")" conjunction=",">
                    #goodSkus[]#
                </iterate>
                )
            </isNotEmpty>
            <isNotEmpty property="isComplete">
                <isEqual prepend="and" property="isComplete" compareValue="1">
                    o.order_state = 26
                </isEqual>
                <isEqual prepend="and" property="isComplete" compareValue="2">
                             <![CDATA[ o.order_state <> 26 ]]>
                </isEqual>
            </isNotEmpty>
            <isEqual prepend="and" property="isAddWork" compareValue="1">
                exists(select 1 from call_work_order cwo where o.order_id =
                cwo.order_id and cwo.is_delete = 'N')
            </isEqual>
            <isEqual prepend="and" property="isAddWork" compareValue="2">
                not
                exists(select 1 from call_work_order cwo where o.order_id =
                cwo.order_id and cwo.is_delete = 'N')
            </isEqual>
               and o.MULTI_CHANNEL_ID = 32
    </select>
    
    <!--更新发票抬头 -->
    <update id="updateOrderNotes" parameterClass="OrderInfo">
      update order_info 
      <dynamic prepend="set">  
        <isNotEmpty prepend="," property="orderNotes">
            <![CDATA[ order_notes=(select fo.order_notes from order_info fo where fo.is_delete='N' and fo.order_id=#orderId#) ||' 发票:'||#orderNotes# ]]>
        </isNotEmpty>
      </dynamic> 
       where order_id=#orderId#
    </update>
    
    <!-- 保存订单,调用存储过程重新计算 -->
    <procedure id="saveGoodDiscountFree" parameterMap="stockParamMap">
        <![CDATA[
         {call save_good_discount_free(?)}
         ]]>
    </procedure>
    <procedure id="saveGoodGroupDiscountFree" parameterMap="stockParamMap">
        <![CDATA[
         {call save_good_group_discount_free(?)}
         ]]>
    </procedure>
    <procedure id="proOrderReport" parameterMap="stockParamMap">
        <![CDATA[
         {call PRO_ORDER_REPORT(?)}
         ]]>
    </procedure> 
    
      <!-- 查看未进万序订单 总 -->
    <select id="getUnfindERPOrderCount" resultClass="Integer"  parameterClass="OrderInfo">
      select  count(1)
          from (select o.order_id,o.order_state,o.multi_channel_id,o.is_paid,o.payment_type_id,o.payment_mode,
               (select m.channel_name
                  from ec_multi_channel m
                 where m.multi_channel_id = o.multi_channel_id) as multiChannel,
               (case
                 when o.payment_mode = 'KDFH' AND o.IS_PAID = 'Y' and
                      o.order_state not in (19, 18, 25) then
                  ''
                 when o.payment_mode = 'HDFK' and
                      o.order_state not in (18, 19, 25) then
                  ''
                 else
                  ''
               end) as isValid,
               DECODE(o.is_into_erp, 'Y', '', 'N', '') as isIntoErp,
               (select zh_concat(oi.goods_name || '*' ||
                                       oi.goods_amount)
                  from order_item oi
                 where oi.order_id = o.order_id
                   and oi.is_delete = 'N') buyGoods,
               (select sum(oi.GOODS_AMOUNT)
                  from order_item oi
                 where oi.order_id = o.order_id
                   and oi.is_delete = 'N') goodsSum,
               o.order_fee,
               (select c.CODE_VALUE
                  from sys_code c
                 where c.code_id = o.order_state) as codeValue,
               DECODE(o.PAYMENT_MODE,
                      'KDFH',
                      '款到发货',
                      'HDFK',
                      '货到付款',
                      'HDFK_POS',
                      '货到付款',
                      'ZTFK',
                      '自提付款') as paymentMode,
               DECODE(o.is_paid, 'Y', '已支付', 'N', '未支付') as isPaid,
               (select p.payment_type_name
                  from ec_payment_type p
                 where p.payment_type_id = o.payment_type_id) as paymentTypeName,
               o.commit_time as commitTime,
               o.AUDIT_TIME as auditTime,
               DECODE(o.is_lock, 'Y', '', 'N', '') as isLock,
               (select su.user_real_name
                  from sys_user su
                 where su.user_id = o.lock_user_id) as lockUserId,
               nvl((select sm.message_body
                     from sys_user_message sm
                    where sm.order_id = o.order_id
                      and rownum = 1),
                   '订单未审核或万序未下载') as message
          from order_info o
         where o.is_delete = 'N') oo
       where 1=1
        <isNotEmpty prepend="and" property="commitTimeBg"> 
            <![CDATA[
                oo.committime >= concat(#commitTimeBg#,' 00:00:00')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                oo.committime <= concat(#commitTimeEd#,' 23:59:59')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderId">
            <![CDATA[oo.order_id=#orderId# ]]>
        </isNotEmpty>
         <isNotEmpty prepend="and" property="orderState">
           <![CDATA[ oo.order_state=#orderState# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="multiChannelId">
           <![CDATA[ oo.multi_channel_id =#multiChannelId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isvalid">
           <![CDATA[ oo.isValid =#isvalid# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isIntoErp">
           <![CDATA[ oo.isintoerp =#isIntoErp# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isPaid">
           <![CDATA[ oo.is_paid =#isPaid# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentMode">
           <![CDATA[ oo.payment_mode =#paymentMode# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentTypeId">
           <![CDATA[ oo.payment_type_id =#paymentTypeId# ]]>
        </isNotEmpty>
    </select>
    
   <!-- 查看未进万序订单 -->

    <select id="getUnfindERPOrderList" resultMap="unfindERPOrderMap"  parameterClass="OrderInfo">
    <include refid="be_fy" />
  select oo.order_id,oo.multiChannel,oo.isValid ,oo.isIntoErp ,oo.buyGoods ,oo.goodsSum  ,
oo.order_fee,oo.codeValue,oo.paymentMode  ,oo.isPaid  ,oo.paymentTypeName ,oo.committime ,
 oo.auditTime ,oo.isLock  ,oo.lockUserId,oo.message,oo.paid_time
          from (select o.order_id,o.order_state,o.multi_channel_id,o.is_paid,o.payment_type_id,o.payment_mode,o.paid_time,
               (select m.channel_name
                  from ec_multi_channel m
                 where m.multi_channel_id = o.multi_channel_id) as multiChannel,
               (case
                 when o.payment_mode = 'KDFH' AND o.IS_PAID = 'Y' and
                      o.order_state not in (19, 18, 25) then
                  ''
                 when o.payment_mode = 'HDFK' and
                      o.order_state not in (18, 19, 25) then
                  ''
                 else
                  ''
               end) as isValid,
               DECODE(o.is_into_erp, 'Y', '', 'N', '') as isIntoErp,
               (select zh_concat(oi.goods_name || '*' ||
                                       oi.goods_amount)
                  from order_item oi
                 where oi.order_id = o.order_id
                   and oi.is_delete = 'N') buyGoods,
               (select sum(oi.GOODS_AMOUNT)
                  from order_item oi
                 where oi.order_id = o.order_id
                   and oi.is_delete = 'N') goodsSum,
               o.order_fee,
               (select c.CODE_VALUE
                  from sys_code c
                 where c.code_id = o.order_state) as codeValue,
               DECODE(o.PAYMENT_MODE,
                      'KDFH',
                      '款到发货',
                      'HDFK',
                      '货到付款',
                      'HDFK_POS',
                      '货到付款',
                      'ZTFK',
                      '自提付款') as paymentMode,
               DECODE(o.is_paid, 'Y', '已支付', 'N', '未支付') as isPaid,
               (select p.payment_type_name
                  from ec_payment_type p
                 where p.payment_type_id = o.payment_type_id) as paymentTypeName,
               o.commit_time as commitTime,
               o.AUDIT_TIME as auditTime,
               DECODE(o.is_lock, 'Y', '', 'N', '') as isLock,
               (select su.user_real_name
                  from sys_user su
                 where su.user_id = o.lock_user_id) as lockUserId,
               nvl((select sm.message_body
                     from sys_user_message sm
                    where sm.order_id = o.order_id
                      and rownum = 1),
                   '订单未审核或万序未下载') as message
          from order_info o
         where o.is_delete = 'N') oo
    where 1=1
        <isNotEmpty prepend="and" property="commitTimeBg"> 
            <![CDATA[
                oo.committime >= concat(#commitTimeBg#,' 00:00:00')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                oo.committime <= concat(#commitTimeEd#,' 23:59:59')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderId">
            <![CDATA[oo.order_id=#orderId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="orderState">
           <![CDATA[ oo.order_state =#orderState# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="multiChannelId">
           <![CDATA[ oo.multi_channel_id =#multiChannelId# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isvalid">
           <![CDATA[ oo.isValid =#isvalid# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isIntoErp">
           <![CDATA[ oo.isintoerp =#isIntoErp# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="isPaid">
           <![CDATA[ oo.is_paid =#isPaid# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentMode">
           <![CDATA[ oo.payment_mode =#paymentMode# ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="paymentTypeId">
           <![CDATA[ oo.payment_type_id =#paymentTypeId# ]]>
        </isNotEmpty>
    <include refid="ed_fy" />
    </select>
    
    <resultMap class="OrderPrize" id="orderPrize">
        <result column="ORDER_PRIZE_ID" property="orderPrizeId"/>
        <result column="ORDER_ID" property="orderId"/>
        <result column="COUNT" property="count"/>
    </resultMap>
    
    
    <select id="getOrderPrizeByUser" resultClass="HashMap" parameterClass="HashMap">
            select oo.order_id,oo.paid_fee,
                    (select count(pp.order_id) from order_prize pp where pp.order_id=oo.order_id ) as prize_count
                  from order_info oo
                  WHERE oo.is_delete = 'N'
                  and oo.member_id = #memberId#
                  and ( to_char(to_date('2014-06-11 10:00:01','yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd') &lt;= to_char(to_date(oo.commit_time,'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd')  AND  
                        to_char(to_date('2014-07-12 23:59:59','yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd') &gt;= to_char(to_date(oo.commit_time,'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd') )
                  AND EXISTS ( SELECT 1 FROM order_item oi WHERE oi.order_id =oo.order_id
                          AND oi.goods_no IN ('15423','15188','16001' ))

    </select>
    
    
    <!--x 根据memberId和orderId查询支付金额 -->
    <!-- 修改select * 为明确字段  modify by lk 2014-9-15 -->
    <select id="getOrdeInfoByOrderIdAndMemberId" resultMap="orderInfoResult"   parameterClass="OrderInfo">
        select 
        oo.ORDER_ID,
        oo.ERP_ORDER_ID,
        oo.MEMBER_ID,
        oo.PARENT_ORDER_ID,
        oo.MULTI_CHANNEL_ID,
        oo.IS_PAID,
        oo.PAYMENT_TYPE_ID,
        oo.PAYMENT_NO,
        oo.PAID_TIME,
        oo.OFFLINE_PAID_USER_ID,
        oo.LOGISTIC_COMPANY_ID,
        oo.ORDER_STATE,
        oo.ORDER_OUT_STATE,
        oo.LIMIT_DATE,
        oo.SKU_FEE,
        oo.return_type,
        oo.return_value,
        oo.DISCOUNT_FEE,
        oo.ORDER_POINTS,
        oo.ORDER_VOUCHERS,
        oo.OTHER_DISCOUNTS,
        oo.DELIVERY_FEE,
        oo.ORDER_FEE,
        oo.ORDER_PAY_FEE,
        oo.ORDER_MSG,
        oo.ORDER_NOTES,
        oo.AUDIT_NOTES,
        oo.AUDIT_USER_ID,
        oo.AUDIT_TIME,
        oo.IS_LOCK,
        oo.LOCK_TIME,
        oo.LOCK_USER_ID,
        oo.COMMIT_TIME,
        oo.FINISH_TIME,
        oo.CANCEL_TIME,
        oo.CANCEL_USER_ID,
        oo.CANCEL_NOTES,
        oo.SKU_WEIGHTS,
        oo.IS_INTO_ERP,
        oo.INTO_TIME,
        oo.RECEIVE_USER,
        oo.PROVINCE_ID,
        oo.CITY_ID,
        oo.AREA_ID,
        oo.RECEIVE_ADDRESS,
        oo.RECEIVE_FULL_ADDRESS,
        oo.RECEIVE_POST,
        oo.RECEIVE_TEL,
        oo.RECEIVE_MOBILE,
        oo.RECEIVE_EMAIL,
        oo.RECEIVE_DATE_TYPE,
        oo.RECEIVE_TIME_TYPE,
        oo.INVOICE_TYPE,
        oo.INVOICE_TITLE,
        oo.INVOICE_CONTENT,
        oo.INVOICE_TAX_NO,
        oo.INVOICE_TAX_ADDRESS,
        oo.INVOICE_TAX_TEL,
        oo.INVOICE_TAX_BANK,
        oo.INVOICE_TAX_ACCOUNT,
        oo.IS_DELETE,
        oo.ADD_USER_ID,
        oo.ADD_TIME,
        oo.EDIT_USER_ID,
        oo.EDIT_TIME,
        oo.MULTI_CHANNEL_ORDER_ID,
        oo.MULTI_CHANNEL_ORDER_BATCH_ID,
        oo.PAID_FEE,
        oo.INVOICE_CONTENT_TYPE,
        oo.IS_TC,
        oo.payment_mode
        from order_info oo
        WHERE oo.order_id =#orderId# 
        and oo.member_id = #memberId#
        and ( to_char(to_date('2014-06-11 10:00:01','yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd') &lt;= to_char(to_date(oo.commit_time,'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd')  AND  
              to_char(to_date('2014-07-12 23:59:59','yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd') &gt;= to_char(to_date(oo.commit_time,'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd') )
        AND EXISTS ( SELECT 1 FROM order_item oi WHERE oi.order_id =#orderId#  
             AND oi.goods_no IN ('15423','15188','16001' ))
         and oo.is_delete = 'N'
    </select>
    
    <!-- 获取未支付的订单号 -->
    <select id="getUnpaidOrderId" resultClass="String" parameterClass="OrderPaymentInfo">
    select distinct o.order_id
    from order_info o,order_payment_log l
    where o.is_delete = 'N'
        and o.is_paid = 'N'
        and l.business_id = o.order_id(+)
        <isNotEmpty prepend=" AND " property="paymentTypeId">
            l.payment_type_id = #paymentTypeId#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="beginPaidTime">
            to_char(to_date(l.payment_time,'yyyy-mm-dd hh24:mi:ss'),'yyyymmdd') &gt;= #beginPaidTime#
        </isNotEmpty>
        <isNotEmpty prepend=" AND " property="endPaidTime">
            to_char(to_date(l.payment_time,'yyyy-mm-dd hh24:mi:ss'),'yyyymmdd') &lt;= #endPaidTime#
        </isNotEmpty>
    </select>
    
    <sql id="shenbaoqiansql">
        <isNotEmpty prepend="and" property="orderId">
            o.order_id = #orderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="erpOrderId">
            o.erp_order_id =
            #erpOrderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="daochu">
            (case when (select count(1) from order_sb_id ss where ss.order_id = o.order_id )=0 then
                                      '未导出'
                                     when (select count(1) from order_sb_id ss where ss.order_id = o.order_id ) &lt;&gt;0 then
                                      '已导出'
             end)=#daochu#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeBg">
            <![CDATA[
            to_date(o.commit_time, 'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#commitTimeBg#||' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="commitTimeEd">
            <![CDATA[
                to_date(o.commit_time, 'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#commitTimeEd#||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
    </sql>
    
<!--导出肾宝片的SQL liuyaundi-->
 <select id="shenBaoPian" resultMap="orderInfoResultShenBao"   parameterClass="OrderInfo">
  select *
    from (
    select rownum rn,t.*
    from (
            select o.order_id ,o.order_fee,o.order_state,o.erp_order_id,company_name,page,
            (
                case o.PAYMENT_MODE
                when 'KDFH' then '款到发货'
                when 'HDFK'
                then '货到付款'
                when 'HDFK_POS' then '货到付款POS'
                ELSE '自提付款' end
                    ) as payment_mode,o.goods_no,o.goods_name,
            o.goods_amount,o.goods_sum_fee,o.receive_user,
            replace(o.receive_mobile, substr(o.receive_mobile, 4, nvl(4,0)), '****') receive_mobile,
            replace( o.receive_full_address,substr( o.receive_full_address,round(length( o.receive_full_address) / 2, 0),nvl(4,0)),'*****') receive_full_address,
            (case when (select count(1) from order_sb_id ss where ss.order_id = o.order_id )=0 then
                                      '未导出'
                                     when (select count(1) from order_sb_id ss where ss.order_id = o.order_id ) &lt;&gt;0 then
                                      '已导出'
                                   end) as daochu
            from
            (select i.goods_no,i.goods_name,i.goods_amount,i.goods_sum_fee,o.order_id,o.erp_order_id,
            (select g.package_standard from goods g where g.goods_no=i.goods_no and g.is_delete='N') page,
            o.logistic_company_id,o.order_fee,o.order_state,o.payment_mode,o.receive_user,o.receive_mobile,o.receive_full_address,
            (select ll.company_name from logistic_company ll where ll.logistic_company_id = o.logistic_company_id) company_name
            from  order_item i,order_info o where i.order_id = o.order_id and i.is_delete = 'N' and o.is_delete='N'
            and ((o.payment_mode = 'KDFH' AND o.IS_PAID = 'Y' and o.order_state not in (19, 18, 25)) or (o.payment_mode = 'HDFK' and o.order_state not in (18, 19, 25)))
            and o.IS_INTO_ERP = 'Y' and o.INTO_TIME = '0000-01-01 00:00:00'and o.AUDIT_TIME = '0001-01-01'
            <include refid="shenbaoqiansql" />
            ) o 
           ) t
        <isNotEmpty prepend="where" property="endRow">
                 <![CDATA[
                 rownum <= #endRow#
                 ]]>
        </isNotEmpty>
        ) oii
        <isNotEmpty prepend="where" property="startRow">
             <![CDATA[
                 oii.rn >= #startRow#
             ]]>
        </isNotEmpty>
  </select>
  
   <select id="shenBaoPianCount" resultClass="Integer" parameterClass="OrderInfo">
            select count(o.order_id) from
            (select o.order_id
            from  order_item i,order_info o where i.order_id = o.order_id and i.is_delete = 'N' and o.is_delete='N'
            and ((o.payment_mode = 'KDFH' AND o.IS_PAID = 'Y' and o.order_state not in (19, 18, 25)) or (o.payment_mode = 'HDFK' and o.order_state not in (18, 19, 25)))
            and o.IS_INTO_ERP = 'Y' and o.INTO_TIME = '0000-01-01 00:00:00'and o.AUDIT_TIME = '0001-01-01'
            <include refid="shenbaoqiansql" />
            ) o 
  </select>
  
 <select id="daocuShenBaoPian" resultMap="orderInfoResultShenBao"   parameterClass="OrderInfo">
        select o.order_id ,o.order_fee,o.order_state,o.erp_order_id,company_name,page,
        (
        case o.PAYMENT_MODE
        when 'KDFH' then '款到发货'
        when 'HDFK'
        then '货到付款'
        when 'HDFK_POS' then '货到付款POS'
        ELSE '自提付款' end) as payment_mode,o.goods_no,o.goods_name,
        o.goods_amount,o.goods_sum_fee,o.receive_user,to_char(o.receive_mobile) as receive_mobile,o.receive_full_address,
        (case when (select count(1) from order_sb_id ss where ss.order_id = o.order_id )=0 then
                                      '未导出'
                                     when (select count(1) from order_sb_id ss where ss.order_id = o.order_id ) &lt;&gt;0 then
                                      '已导出'
                                   end) as daochu
        from
        (select i.goods_no,i.goods_name,i.goods_amount,i.goods_sum_fee,o.order_id,o.erp_order_id,
        (select g.package_standard from goods g where g.goods_no=i.goods_no and g.is_delete='N') page,
        o.logistic_company_id,o.order_fee,o.order_state,o.payment_mode,o.receive_user,o.receive_mobile,o.receive_full_address,
        (select ll.company_name from logistic_company ll where ll.logistic_company_id = o.logistic_company_id) company_name
        from  order_item i,order_info o where i.order_id = o.order_id and i.is_delete = 'N' and o.is_delete='N'
        and ((o.payment_mode = 'KDFH' AND o.IS_PAID = 'Y' and o.order_state not in (19, 18, 25)) or (o.payment_mode = 'HDFK' and o.order_state not in (18, 19, 25)))
        and o.IS_INTO_ERP = 'Y' and o.INTO_TIME = '0000-01-01 00:00:00'and o.AUDIT_TIME = '0001-01-01'
        <include refid="shenbaoqiansql" />
        ) o 
                  
  </select>
  
<!--   导出肾宝片的日志 -->
    <insert id="saveShenBaolog" parameterClass="OrderInfo">
        insert into order_sb_id(order_id,export_time) 
        select o.order_id ,to_char(sysdate, 'YYYY-MM-DD hh24:mi:ss') from
        (select o.order_id
        from  order_item i,order_info o where i.order_id = o.order_id and i.is_delete = 'N' and o.is_delete='N'
            and ((o.payment_mode = 'KDFH' AND o.IS_PAID = 'Y' and o.order_state not in (19, 18, 25)) or (o.payment_mode = 'HDFK' and o.order_state not in (18, 19, 25)))
            and o.IS_INTO_ERP = 'Y' and o.INTO_TIME = '0000-01-01 00:00:00'and o.AUDIT_TIME = '0001-01-01'
        <include refid="shenbaoqiansql" />
        ) o 
    </insert>
<!--    肾宝片导入  -->
  <parameterMap id="for_sf_generate_occur_should" class="java.util.Map" >   
        <parameter property="orderId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>   
        <parameter property="erpOrderId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>  
        <parameter property="wuliuName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/> 
        <parameter property="fahuoTime" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>  
        <parameter property="remark" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/> 
        <parameter property="outError" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>   
    </parameterMap>  
    <procedure id="daoruSB" parameterMap="for_sf_generate_occur_should" >  
        <![CDATA[ 
             call pro_DELIVERY_SHIPPING_SB(?,?,?,?,?,?)  
        ]]> 
    </procedure>  
      <select id="getOrderItemCountById" parameterClass="Long" resultClass="Integer">
          select count(0)
        from order_item oii,  goods g
        where g.goods_no = oii.goods_no
        and oii.is_delete = 'N'
        and g.is_delete = 'N'
        and oii.order_id =#value#
      </select>
      <!-- 调用存储过程 扣减库存 wangjun-->
    <procedure id="updateGoodsStock" parameterMap="stockParamMap">
        <![CDATA[
         {call update_order_goods_stock(?)}
         ]]>
    </procedure>
    <sql id="getchannelcount">
        <isNotEmpty prepend="and" property="orderId">
            oi.order_id = #orderId#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="erpOrderId">
            oi.erp_order_id =
            #erpOrderId#
        </isNotEmpty>
    </sql>
    <sql id="getchannelcountlist">
        <isNotEmpty prepend="and" property="channelid">
            cea.channel_id = #channelid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="channelname">
            cea.channel_name like '%$channelname$%'
        </isNotEmpty>
        <isNotEmpty prepend="and" property="channelgroupid">
            cnela.channel_id  = #channelgroupid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="websiteid">
            weba.website_id = #websiteid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="committimebg">
            <![CDATA[
            to_date(nvl(orfa.paid_time, orfa.commit_time), 'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#committimebg# || ' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="committimeeg">
            <![CDATA[
                 to_date(nvl(orfa.paid_time, orfa.commit_time), 'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#committimeeg# ||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
    </sql>
    <sql id="getchannelistbygcw">
        <isNotEmpty prepend="and" property="channelgroupid">
            g.channel_id = #channelgroupid#
         </isNotEmpty>
        <isNotEmpty prepend="and" property="channelid">
            c.channel_id = #channelid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="channelname">
            c.channel_name like '%$channelname$%' 
        </isNotEmpty>
        <isNotEmpty prepend="and" property="websiteid">
            w.website_id = #websiteid#
        </isNotEmpty>
    </sql>
    <sql id="getchannelistbyos">
        <isNotEmpty prepend="and" property="channelgroupid">
            os.group_id = #channelgroupid#
         </isNotEmpty>
        <isNotEmpty prepend="and" property="channelid">
            os.channel_id = #channelid#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="channelname">
            c.channel_name like '%$channelname$%' 
        </isNotEmpty>
        <isNotEmpty prepend="and" property="websiteid">
            os.website_id = #websiteid#
        </isNotEmpty>
    </sql>
    <sql id="getchannelistTime">
        and ((oo.payment_mode = 'KDFH' and oo.IS_PAID = 'Y') or (oo.payment_mode =
            'HDFK') ) and oo.order_state NOT in (25)
        <isNotEmpty prepend="and" property="committimebg">
            <![CDATA[
                to_date(nvl(oo.paid_time, oo.commit_time), 'YYYY-MM-DD hh24:mi:ss') >=
                   to_date(#committimebg# || ' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="committimeeg">
            <![CDATA[
                to_date(nvl(oo.paid_time, oo.commit_time), 'YYYY-MM-DD hh24:mi:ss') <=
                   to_date(#committimeeg# ||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
    </sql>
    <!-- tc订单查询 -->
    <select id="getSoaOrderTcList" resultClass="OrderQueryInfo"
        parameterClass="OrderInfo">
        select *
        from (
        select rownum rn,t.*
        from (
        select o.order_id as orderId,
       o.erp_order_id as erpOrderId,
       (select lc.company_name
          from order_shipping os,logistic_company lc 
         where os.logistic_company_id = lc.logistic_company_id and os.order_shipping_no = o.erp_order_id and rownum = 1) as companyName,
         (select m.channel_name
          from ec_multi_channel m
         where m.multi_channel_id = o.multi_channel_id) as multiChannel,
        o.receive_user as receiveUser,
       (case
         when ((o.payment_mode = 'KDFH' AND o.IS_PAID = 'Y') or o.payment_mode = 'HDFK') and o.order_state not in (25) then
          ''
         else
          ''
       end) as isValid,
       o.is_into_erp isIntoErp,
       (select zh_concat(oi.goods_name || '*' || oi.goods_amount)
          from order_item oi
         where oi.order_id = o.order_id
           and oi.is_delete = 'N' group by oi.order_id) buyGoods,
       (select sum(oi.GOODS_AMOUNT)
          from order_item oi
         where oi.order_id = o.order_id
           and oi.is_delete = 'N') goodsSum,
       o.sku_fee as totalFee,
       o.delivery_fee as deliveryFee,
       o.order_vouchers as orderVouchers,
       o.order_fee as orderFee,    
       replace(o.receive_mobile, substr(o.receive_mobile, 4, 4), '****') customerTel,
       replace(o.receive_address,substr(o.receive_address,round(length(o.receive_address) / 2, 0),5),'*****') earaAddress,
       (select ea.area_name from ec_area ea where ea.area_id = o.province_id) as receiveAddress,              
       (select c.CODE_VALUE from sys_code c where c.code_id = o.order_state) as codeValue,     
       o.is_paid as isPaid,        
       (select p.payment_type_name from ec_payment_type p where p.payment_type_id = o.payment_type_id) as paymentTypeName,
       (select c.CODE_VALUE from sys_code c where c.code_id = o.order_state and c.code_id in (27, 23, 26)) as deliveryState,  
       o.IS_CHECK_BILLS financeSum,   
       nvl((select u.characters from urlfrom u 
        where u.is_delete = 'N' and u.spare1=1 and u.url like '%' || (case when instr(o.url_from_no, '//')> 0 then
        substr(o.url_from_no,instr(o.url_from_no, '//', 1, 1) + 2,instr(o.url_from_no, '/', 1, 3) - 8)
        when o.url_from_no is null then 'null'
        else o.url_from_no
        end) || '%' and rownum = 1),
        o.url_from_no) as urlFromNo,
        o.return_value || '/' || o.order_points points,     
        (select us.user_real_name from sys_user us where us.user_id = o.add_user_id and us.is_delete = 'N') as sale,    
        DECODE(o.PAYMENT_MODE,
        'KDFH',
        '款到发货',
        'HDFK',
        '货到付款',
        'HDFK_POS',
        '货到付款',
        'ZTFK',
        '自提付款') as paymentMode,       
        o.commit_time as commitTime, 
        o.AUDIT_TIME as auditTime,
        o.multi_channel_order_id as multiChannelOrderId, 
        (select count(*) + 1 from order_info oi where oi.order_id &lt; o.order_id and oi.member_id = o.member_id) sumOrders,  
        (nvl((select sum(oi.ORDER_FEE) from order_info oi where oi.order_id &lt; o.order_id and oi.member_id = o.member_id),0) + o.order_fee) sumFees,
        (select sum(it.goods_amount * it.goods_cost_price) from order_item it where it.order_id = o.order_id and it.is_delete = 'N') as costPrice, 
        o.invoice_tax_address as invoiceTaxAddress,
        (select m.member_id from member m where m.member_id=o.member_id and m.is_delete='N') as memberId,
        od.DELIVERY_DATE as deliveryDate
        from order_info o
            left join order_delivery od on od.is_delete = 'N' and o.order_id = od.order_id
        where o.is_delete = 'N'
        <isNotEmpty prepend="and" property="deliveryDateBg">
            <![CDATA[
            to_date(od.DELIVERY_DATE,'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#deliveryDateBg#||' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="deliveryDateEd">
            <![CDATA[
                to_date(od.DELIVERY_DATE,'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#deliveryDateEd#||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
         <isNotEmpty prepend="and" property="isTc">
            o.IS_TC =#isTc#
         </isNotEmpty>
        <include refid="queryOrderSqlnew" />
        order by o.commit_time desc
        ) t
        <isNotEmpty prepend="where" property="endRow">
                 <![CDATA[
                 rownum <= #endRow#
                 ]]>
        </isNotEmpty>
        ) oii
        <isNotEmpty prepend="where" property="startRow">
             <![CDATA[
                 oii.rn >= #startRow#
             ]]>
        </isNotEmpty>
    </select>
<select id="getSoaOrderTcListCount" resultClass="Integer"
        parameterClass="OrderInfo">
        select
        count(o.order_id)
        from order_info o
            left join order_delivery od on od.is_delete = 'N' and o.order_id = od.order_id
        where o.is_delete = 'N'
        <isNotEmpty prepend="and" property="deliveryDateBg">
            <![CDATA[
            to_date(od.DELIVERY_DATE,'YYYY-MM-DD hh24:mi:ss') >=
               to_date(#deliveryDateBg#||' 00:00:00', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
        <isNotEmpty prepend="and" property="deliveryDateEd">
            <![CDATA[
                 to_date(od.DELIVERY_DATE,'YYYY-MM-DD hh24:mi:ss') <=
                    to_date(#deliveryDateEd#||' 23:59:59', 'YYYY-MM-DD hh24:mi:ss')
            ]]>
        </isNotEmpty>
         <isNotEmpty prepend="and" property="isTc">
            o.IS_TC =#isTc#
         </isNotEmpty>
        <include refid="queryOrderSqlnew" />
    </select>
    
    <!-- <resultMap id="OrderChannelRelInfo" class="OrderChannelRelInfo">
        <result column="channelgroupid" property="channelgroupid" />
        <result column="channelgroupname" property="channelgroupname" />
        <result column="channelid" property="channelid" />
        <result column="channelname" property="channelname" />
        <result column="websiteid" property="websiteid" />
        <result column="websitename" property="websitename" />
        <result column="ordercount" property="ordercount" />
        <result column="orderamt" property="orderamt" />
        <result column="orderpv" property="orderpv" />
        <result column="orderuv" property="orderuv" />
        <result column="productparam" property="strproductparam" />
        os.group_name,
        os.channel_id,
        os.channel_name,
        os.website_id,
        os.website_name,
    </resultMap> -->
    
    <select id="getProudctReportFormByGroupId" resultMap="OrderChannelRelInfo" parameterClass="OrderChannelRelInfo">
        select g.channel_id   as channelgroupid,
           g.channel_name as channelgroupname,
           c.channel_id   as channelid,
           c.channel_name as channelname,
           ( 
             select  
             sum(oo.sku_fee) 
             from order_source os 
             left join order_info oo on oo.order_id = os.order_id
             where oo.is_delete = 'N'
             and os.group_id = g.channel_id
             and os.channel_id = c.channel_id
             <include refid="getchannelistTime"/>
             group by os.group_id ,os.channel_id
           )as ordercountamt ,
           ( 
             select  
             count(*) 
             from order_source os 
             left join order_info oo on oo.order_id = os.order_id
             where oo.is_delete = 'N'
             and os.group_id = g.channel_id
             and os.channel_id = c.channel_id
             <include refid="getchannelistTime"/>
             group by os.group_id ,os.channel_id
           )as ordercount,
           ( 
             select  
             sum(oo.ORDER_FEE) 
             from order_source os 
             left join order_info oo on oo.order_id = os.order_id
             where oo.is_delete = 'N'
             and os.group_id = g.channel_id
             and os.channel_id = c.channel_id
             <include refid="getchannelistTime"/>
             group by os.group_id ,os.channel_id
           )as orderamt,
           '' as strproductparam ,
           '' as websiteid ,
           '' as websitename ,
           '' as orderpv,
           '' as orderuv
          from channel c
          left join channel g
            on g.channel_id = c.alternate_field2
          left join website w
            on w.channel_id = c.channel_id
         where 1 = 1
           and c.is_delete = 'N'
           and g.is_delete = 'N'
           and w.is_delete = 'N'
           <include refid="getchannelistbygcw"/>
         group by g.channel_id, g.channel_name, c.channel_id, c.channel_name
         order by g.channel_id
    </select>
    <select id="getProudctReportFormByGroupIdCount" resultClass="Integer" parameterClass="OrderChannelRelInfo">
        select count(*) from (
          select count(*)
          from channel c
          left join channel g
            on g.channel_id = c.alternate_field2
          left join website w
            on w.channel_id = c.channel_id
         where 1 = 1
           and c.is_delete = 'N'
           and g.is_delete = 'N'
           and w.is_delete = 'N'
           <include refid="getchannelistbygcw"/>
         group by g.channel_id, g.channel_name, c.channel_id, c.channel_name
         order by g.channel_id
        )
    </select>
    <select id="getProudctReportFormByChanelDeltis" resultMap="OrderChannelRelInfo" parameterClass="OrderChannelRelInfo">
        select 
        os.group_id as channelgroupid,
        os.channel_id  as channelid,
        '' as channelname,
        '' as channelgroupname ,
        '' as websiteid ,
        '' as websitename ,
        '' as orderpv,
        '' as orderuv,
        '' as ordercountamt,
        pyc.sort as strproductparam,
        count(distinct(os.order_id)) as ordercount,
        sum(oi.GOODS_SUM_FEE) as orderamt
        from order_source os
        left join order_info oo on oo.order_id = os.order_id
        left join order_item oi on oi.order_id = os.order_id
        left join product_yw_catalog_goods pycg on pycg.goods_no = oi.goods_no
        left join product_yw_catalog pyc on pyc.yw_catalog_id = pycg.wy_catalog_id 
        where 1=1
        and os.is_delete = 'N'
        <include refid="getchannelistbyos"/>
        <include refid="getchannelistTime"/>  
        group by os.group_id ,os.channel_id , pyc.yw_catalog_id ,pyc.sort 
        order by os.group_id 
    </select>
    
    <select id="getProudctReportFormByChannelId" resultMap="OrderChannelRelInfo" parameterClass="OrderChannelRelInfo">
        select g.channel_id  as channelgroupid,
             g.channel_name as channelgroupname,
             c.channel_id   as channelid,
             c.channel_name as channelname,
             w.website_id as websiteid ,
             (select web.alternate_field1 from website web where web.website_id = w.website_id) as websitename ,
             ( 
               select  
               sum(oo.sku_fee) 
               from order_source os 
               left join order_info oo on oo.order_id = os.order_id
               where oo.is_delete = 'N'
               and os.group_id = g.channel_id
               and os.channel_id = c.channel_id
               and os.website_id = w.website_id
               <include refid="getchannelistTime"/>
               group by os.group_id ,os.channel_id,os.website_id
             )as ordercountamt ,
             ( 
               select  
               count(*) 
               from order_source os 
               left join order_info oo on oo.order_id = os.order_id
               where oo.is_delete = 'N'
               and os.group_id = g.channel_id
               and os.channel_id = c.channel_id
               and os.website_id = w.website_id
               <include refid="getchannelistTime"/>
               group by os.group_id ,os.channel_id ,os.website_id
             )as ordercount,
             ( 
               select  
               sum(oo.ORDER_FEE) 
               from order_source os 
               left join order_info oo on oo.order_id = os.order_id
               where oo.is_delete = 'N'
               and os.group_id = g.channel_id
               and os.channel_id = c.channel_id
               and os.website_id = w.website_id
               <include refid="getchannelistTime"/>
               group by os.group_id ,os.channel_id,os.website_id
             )as orderamt,
             '' as strproductparam ,
             '' as orderpv,
             '' as orderuv
              from channel c
              left join channel g
                on g.channel_id = c.alternate_field2
              left join website w
                on w.channel_id = c.channel_id
             where 1 = 1
               and c.is_delete = 'N'
               and g.is_delete = 'N'
               and w.is_delete = 'N'
         <include refid="getchannelistbygcw"/>
         group by g.channel_id, g.channel_name, c.channel_id, c.channel_name ,w.website_id
         order by g.channel_id
    </select>
    <select id="getProudctReportFormByChannelIdCount" resultClass="Integer" parameterClass="OrderChannelRelInfo">
        select count(*) from (
          select count(*)
          from channel c
          left join channel g
            on g.channel_id = c.alternate_field2
          left join website w
            on w.channel_id = c.channel_id
         where 1 = 1
           and c.is_delete = 'N'
           and g.is_delete = 'N'
           and w.is_delete = 'N'
        <include refid="getchannelistbygcw"/>
         group by g.channel_id, g.channel_name, c.channel_id, c.channel_name, w.website_id
         order by g.channel_id
        )
    </select>
    <select id="getProudctReportFormByWebsitseDeltis" resultMap="OrderChannelRelInfo" parameterClass="OrderChannelRelInfo">
        select 
        os.group_id as channelgroupid,
        os.channel_id  as channelid,
        os.website_id  as websiteid,
        '' as channelname,
        '' as channelgroupname ,
        '' as websiteid ,
        '' as websitename ,
        '' as orderpv,
        '' as orderuv,
        '' as ordercountamt,
        pyc.sort as strproductparam,
        count(distinct(os.order_id)) as ordercount,
        sum(oi.GOODS_SUM_FEE) as orderamt
        from order_source os
        left join order_info oo on oo.order_id = os.order_id
        left join order_item oi on oi.order_id = os.order_id
        left join product_yw_catalog_goods pycg on pycg.goods_no = oi.goods_no
        left join product_yw_catalog pyc on pyc.yw_catalog_id = pycg.wy_catalog_id 
        where 
        1=1
        and os.is_delete = 'N'
        and oo.is_delete = 'N'
        <include refid="getchannelistbyos"/>
        <include refid="getchannelistTime"/>
        group by os.group_id ,os.channel_id ,os.website_id ,pyc.yw_catalog_id ,pyc.sort 
        order by os.group_id 
    </select>
    
    <select id="getTcOrderInfoListByOrderIdList" resultClass="OrderQueryInfo">
        select 
        oo.order_id as orderId,
        oo.commit_time as commitTime
        from ORDER_INFO oo
        where
        oo.is_delete = 'N'
        and oo.IS_TC='Y'
        and oo.order_id in
        <iterate open="(" close=")" conjunction=",">  
           #[]# 
        </iterate> 
    </select>
    <!-- 分页查询用户可以投诉的订单 -->
    <select id="getOrderByComplaintPage" parameterClass="OrderInfo" resultMap="orderInfoByIdResult">
        <include refid="be_fy" />
        select    oi.order_id,
            oi.erp_order_id,
            oi.member_id,
            oi.parent_order_id,
            oi.multi_channel_id,
            oi.multi_channel_order_batch_id,
            oi.multi_channel_order_id,
            oi.is_upload,
            oi.upload_user_id,
            oi.upload_time,
            oi.is_paid,
            oi.payment_mode,
            oi.payment_type_id,
            oi.payment_no,
            oi.paid_time,
            oi.tax_fee,
            oi.offline_paid_user_id,
            oi.logistic_company_id,
            oi.order_state,
            oi.order_out_state,
            oi.limit_date,
            oi.sku_fee,
            oi.discount_fee,
            oi.order_points,
            oi.order_vouchers,
            oi.other_discounts,
            oi.delivery_fee,
            oi.order_fee,
            oi.paid_fee,
            oi.promote_rule_ids,
            oi.return_type,
            oi.return_value,
            oi.order_msg,
            oi.order_notes,
            oi.audit_notes,
            oi.audit_user_id,
            oi.audit_time,
            oi.is_lock,
            oi.lock_time,
            oi.lock_user_id,
            oi.commit_time,
            oi.finish_time,
            oi.cancel_time,
            oi.cancel_user_id,
            oi.cancel_notes,
            oi.sku_weights,
            oi.is_into_erp,
            oi.into_time,
            oi.receive_user,
            oi.province_id,
            oi.city_id,
            oi.area_id,
            oi.receive_address,
            oi.receive_full_address,
            oi.receive_post,
            oi.receive_tel,
            oi.receive_mobile,
            oi.receive_email,
            oi.receive_date_type,
            oi.receive_time_type,
            oi.invoice_type,
            oi.invoice_content_type,
            oi.invoice_title,
            oi.invoice_content,
            oi.invoice_tax_no,
            oi.invoice_tax_address,
            oi.invoice_tax_tel,
            oi.invoice_tax_bank,
            oi.invoice_tax_account,
            oi.is_delete,
            oi.add_user_id,
            oi.add_time,
            oi.edit_user_id,
            oi.edit_time,
            oi.url_from_no,
            oi.goods_batch_no,
            oi.order_pay_fee,
            oi.coupon_type_us_id,
            oi.coupon_no,
            oi.is_check_bills,
            oi.check_bill_user_id,
            oi.check_bill_time,
            oi.is_tc,sc.code_no 
        from     order_info oi  
            left join sys_code sc on sc.code_id = oi.order_state
            left join member m on oi.member_id = m.member_id
        where  oi.is_delete='N'
            <![CDATA[
            and sc.code_no <> 'cancel'
            and oi.is_tc <> 'Y'
            ]]>
         <isNotEmpty prepend="and" property="orderId">
             oi.order_id=#orderId# 
         </isNotEmpty>
         <isNotEmpty prepend="and" property="memberId">
             oi.member_id=#memberId# 
         </isNotEmpty>
         <isNotEmpty prepend="and" property="loginName">
             m.login_name=#loginName# 
         </isNotEmpty>
         <isNotEmpty prepend="and" property="goodsName">
             (to_char(oi.order_id) = #goodsName#
             or exists (select 1 
                     from order_item oit 
                         left join goods g on oit.goods_id = g.goods_id
                     where oit.order_id = oi.order_id
                         and (g.goods_no = #goodsName# or g.goods_name like '%$goodsName$%')
                 )
             )
         </isNotEmpty>
         order by oi.commit_time desc
         <include refid="ed_fy" />
    </select>
    <!-- 查询用户可以投诉的订单数量 -->
    <select id="getOrderByComplaintCount" parameterClass="OrderInfo" resultClass="Integer">
        select    count(1)
        from     order_info oi  
            left join sys_code sc on sc.code_id = oi.order_state
            left join member m on oi.member_id = m.member_id
        where  oi.is_delete='N'
            <![CDATA[
            and sc.code_no <> 'cancel'
            and oi.is_tc <> 'Y'
            ]]>
         <isNotEmpty prepend="and" property="orderId">
             oi.order_id=#orderId# 
         </isNotEmpty>
         <isNotEmpty prepend="and" property="memberId">
             oi.member_id=#memberId# 
         </isNotEmpty>
         <isNotEmpty prepend="and" property="loginName">
             m.login_name=#loginName# 
         </isNotEmpty>
         <isNotEmpty prepend="and" property="goodsName">
             (to_char(oi.order_id) = #goodsName#
             or exists (select 1 
                     from order_item oit 
                         left join goods g on oit.goods_id = g.goods_id
                     where oit.order_id = oi.order_id
                         and (g.goods_no = #goodsName# or g.goods_name like '%$goodsName$%')
                 )
             )
         </isNotEmpty>
    </select>
    
    <!-- 暂时用,以后调用接口 条件查询以发货的订单 -->
    <select id="orderTJList" resultClass="OrderQueryInfo" parameterClass="OrderInfo">
        select *
        from (
        select rownum rn,t.*
        from (
         select o.order_id orderId,o.erp_order_id erpOrderId,o.member_id memberId,
         o.receive_user as receiveUser,o.receive_tel as receiveTel,o.receive_mobile as receiveMobile, 
         (select m.login_name from member m where m.is_delete='N' and m.member_id=o.member_id) memberLoginName,
         o.receive_mobile customerTel,
         o.delivery_fee deliveryFee,o.order_fee orderFee,
         (select zh_concat(distinct pp.payment_type_name) from order_payment_type_list l,ec_payment_type pp where l.order_id=o.order_id and l.payment_type_id=pp.payment_type_id) as  paymentTypeName,
         (select c.CODE_VALUE from sys_code c where c.code_id = o.order_state) as codeValue,o.commit_time commitTime,o.is_paid isPaid,
         o.province_id provinceId,o.city_id cityId,o.area_id areaId,o.receive_address receiveAddress  
        from order_info o where o.is_delete = 'N' and o.order_state in ('23','26','27')
           <isNotEmpty prepend="and" property="orderId">
            o.order_id = #orderId#
        </isNotEmpty>
         <isNotEmpty prepend="and" property="receiveMobile">
            o.receive_mobile =#receiveMobile#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberLoginName">
           (select m.login_name from member m where m.is_delete='N' and m.member_id=o.member_id)=#memberLoginName#
        </isNotEmpty>
        order by o.commit_time desc
        ) t
        <isNotEmpty prepend="where" property="endRow">
                 <![CDATA[
                 rownum <= #endRow#
                 ]]>
        </isNotEmpty>
        ) oii
        <isNotEmpty prepend="where" property="startRow">
             <![CDATA[
                 oii.rn >= #startRow#
             ]]>
        </isNotEmpty>
    </select>
    <select id="orderTJListCount" resultClass="Integer" parameterClass="OrderInfo">
        select
        count(o.order_id)
        from order_info o
        where o.is_delete = 'N' and o.order_state in ('23','26','27')
        <isNotEmpty prepend="and" property="orderId">
            o.order_id = #orderId#
        </isNotEmpty>
         <isNotEmpty prepend="and" property="receiveMobile">
            o.receive_mobile =#receiveMobile#
        </isNotEmpty>
        <isNotEmpty prepend="and" property="memberLoginName">
           (select m.login_name from member m where m.is_delete='N' and m.member_id=o.member_id)=#memberLoginName#
        </isNotEmpty>
    </select>
    <select id="getOrderInfoTempIsEvel" parameterClass="java.lang.Long" resultClass="java.lang.String" >
        select oie.is_eval  from  order_info_expand oie where oie.order_id = #orderId# and oie.is_delete='N'
    </select>
    <select id="getOrderInfoCountByMemberId" parameterClass="java.lang.Long" resultClass="java.lang.Integer" >
        select count(1)  from  order_info oo where oo.member_id=#memberId# 
    </select>
    <!-- 查询所有会员登录类型  -->
    <select id="getUserLoginType" resultClass="string" >
        select unique login_sso_type from member_sso
    </select>
    
    <select id="getOrderObj" resultMap="orderObjMap" parameterClass="OrderInfo" >
            select oo.order_id,oo.member_id  from  order_info oo where  oo.is_delete='N' and oo.order_id=#orderId# 
    </select>
    
    <select id="getOrderInfoByOrderId" parameterClass="java.lang.Long" resultMap="singleOrderInfoMap">
      select oi.order_id,
            oi.order_fee,
            oi.sku_fee,
            oi.delivery_fee,
            oi.discount_fee,
            oi.order_points,
            oi.order_vouchers,
            oi.other_discounts,
            oi.coupon_no,
            oi.order_state,
            oi.payment_mode,
            oi.commit_time,
            oi.multi_channel_id
       from order_info oi
            where oi.order_id = #orderId#
    </select>
        <!--用于快递100推送手机号码 -->
    <select id="getReceiveMobile" parameterClass="java.lang.String" resultClass="OrderQueryInfo">
       select oi.order_id as orderId,oi.RECEIVE_MOBILE as customerTel
       from order_info oi where oi.order_id = #orderId#
    </select>
    
</sqlMap>

//订单审核详情:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="https://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions"%>
<c:set var="ctx" value="${pageContext.request.contextPath}" />
<jsp:include page="/jsp/common/header1.jsp"></jsp:include>
<script type="text/javascript" src="${ctx }/js/common/area_linkage.js"></script>
<script src="${ctx }/js/order/order_audit_detail.js"></script>
<style>
.queryTitle{
    width:80px;
    text-align: right;
    font-size: 9pt;
    height: 30px;
}
.queryContent{
    width: 120px;
    text-align: left;
    font-size: 9pt
}
.blodFont{
    color: red
}
.text_plus{
    width: 250px
}
</style>
<input type="hidden" id="orderId" value="${orderInfo.orderId }"/>
<input type="hidden" id="isPaid" value="${orderInfo.isPaid }"/>
<input type="hidden" id="memberId" value="${orderInfo.memberId }"/>
<input type="hidden" id="receiveFullAddress" value="${orderInfo.receiveFullAddress }"/>
<input type="hidden" id="multiChannelId" value="${orderInfo.multiChannelId }"/>
<input type="hidden" id="paymentModeYZ" value="${orderInfo.paymentMode}"/>
<input type="hidden" id="goodsSeller" value="${orderInfo.goodsSeller}"/>
<table class="queryTable">
    <tr>
        <td class="queryTitle">订单编号</td>
        <td class="queryContent">${orderInfo.orderId }</td>
        <td class="queryTitle">提交时间</td>
        <td class="queryContent">${orderInfo.commitTime }</td>
        <td class="queryTitle">支付类型</td>
        <td class="queryContent" colspan="3">
            <select id="paymentMode" name="paymentMode" class="easyui-combobox" style="width: 100px" panelHeight="auto" disabled="true">
                <option value="">请选择</option>
                <option value="KDFH" <c:if test="${orderInfo.paymentMode eq 'KDFH' }">selected="selected"</c:if> >款到发货</option>
                <option value="HDFK" <c:if test="${orderInfo.paymentMode eq 'HDFK' }">selected="selected"</c:if> >货到付款</option>
                <option value="HDFK_POS" <c:if test="${orderInfo.paymentMode eq 'HDFK_POS' }">selected="selected"</c:if> >货到付款POS</option>
                <option value="ZTFK" <c:if test="${orderInfo.paymentMode eq 'ZTFK' }">selected="selected"</c:if> >自提付款</option>
            </select>
        </td>
    </tr>
    <tr>
        <td class="queryTitle">订单留言</td>
        <td class="queryContent" colspan="7">
            ${orderInfo.orderMsg }
        </td>
    </tr>
    <tr>
        <td class="queryTitle">会员姓名</td>
        <td class="queryContent" id="customerLoginNameTd">${orderInfo.memberRealName }</td>
        <td class="queryTitle">登录帐号</td>
        <td class="queryContent">${orderInfo.memberLoginName }</td>
        <td class="queryTitle">会员等级</td>
        <td class="queryContent">${orderInfo.memberRankName }</td>
        <td class="queryTitle">折扣率</td>
        <td class="queryContent"></td>
    </tr>
    <tr>
        <td class="queryTitle">货款+运费 </td>
        <td class="queryContent blodFont">
            <span id="skuFeeSpan">
                <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.skuFee ?0.00:orderInfo.skuFee}"/>
            </span>
             + 
             <span id="deliveryFeeSpan">
                 <c:if test="${orderInfo.isPaid ne 'Y' }">
                     <a id="df" title="设置运费" href="javascript:void(0)" onclick="toSetDeliveryFee()">
                         <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.deliveryFee ?0.00:orderInfo.deliveryFee}"/>
                     </a>
                 </c:if>
                 <c:if test="${orderInfo.isPaid eq 'Y' }">
                     <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.deliveryFee ?0.00:orderInfo.deliveryFee}"/>
                 </c:if>
             </span>
        </td>
        <td class="queryTitle">其他优惠</td>
        <td class="queryContent blodFont" id="otherDiscounts">
            <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.otherDiscounts ?0.00:orderInfo.otherDiscounts}"/>
        </td>
        <td class="queryTitle">代金券/积分</td>
        <td class="queryContent blodFont">
            <span id="orderVouchers">
                ${empty orderInfo.orderVouchers ?0:orderInfo.orderVouchers}
            </span>
            /
            <span id="orderPoint">
                ${empty orderInfo.orderPoints ?0:orderInfo.orderPoints}
            </span>
        </td>
        <td class="queryTitle">手工优惠</td>
        <td class="queryContent blodFont" id="orderDiscountFee">
            <c:if test="${returnPage =='handleOrderQuery'}">
                <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.discountFee ?0.00:orderInfo.discountFee}"/>
            </c:if>
            <c:if test="${returnPage !='handleOrderQuery'}">
                <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.discountFee ?0.00:orderInfo.discountFee}"/>
                <!--  
                <c:if test="${orderInfo.isPaid ne 'Y' }">
                     <a id="disf" title="设置手工优惠" href="/go.html?url=javascript:void(0)" onclick="toSetDiscountFee()">
                         <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.discountFee ?0.00:orderInfo.discountFee}"/>
                     </a>
                 </c:if>
                 <c:if test="${orderInfo.isPaid eq 'Y' }">
                     <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.discountFee ?0.00:orderInfo.discountFee}"/>
                 </c:if>
                 -->
             </c:if>
        </td>
    </tr>
    <tr>    
        <td class="queryTitle">订单金额</td>
        <td class="queryContent blodFont" id="orderFee">
            <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.orderFee ?0.00:orderInfo.orderFee}"/>
        </td>
        <td class="queryTitle">待付款金额</td>
        <td class="queryContent blodFont" id="orderPayFee">
            <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.orderPayFee ?0.00:orderInfo.orderPayFee}"/>
        </td>
        <td class="queryTitle">付款金额</td>
        <td class="queryContent blodFont" id="paidFee">
            <fmt:formatNumber pattern="#0.00#" value="${empty orderInfo.paidFee ?0.00:orderInfo.paidFee}"/>
        </td>
        <td class="queryTitle">物流公司</td>
        <td class="queryContent">
             ${orderInfo.companyName}
        </td>
    </tr>
    <c:forEach var="coupon" items="${couponList }">
        <tr>
            <td class="queryTitle">优惠券名称</td>
            <td class="queryContent">${coupon.couponTypeName }</td>
            <td class="queryTitle">优惠券编号</td>
            <td class="queryContent">${coupon.couponNo }</td>
            <td class="queryTitle">优惠券面值</td>
            <td class="queryContent">
                <fmt:formatNumber pattern="#0.00#" value="${empty coupon.couponFee ?0.00:coupon.couponFee}"/>
            </td>
            <td class="queryTitle">券优惠金额</td>
            <td class="queryContent">
                <fmt:formatNumber pattern="#0.00#" value="${empty coupon.discountFee ?0.00:coupon.discountFee}"/>
            </td>
        </tr>
    </c:forEach>    
    <tr>
        <td class="queryTitle">支付方式</td>
        <td class="queryContent" id="paymentTypeName">${orderInfo.paymentTypeName }</td>
        <td class="queryTitle">付款时间</td>
        <td class="queryContent" id="paidTime">${orderInfo.paidTime }</td>
        <td class="queryTitle">支付流水号</td>
        <td class="queryContent" id="paymentNo">${orderInfo.paymentNo }</td>
        <td class="queryTitle"></td>
        <td class="queryContent">
        </td>
    </tr>
    <tr>
        <td class="queryTitle">订单有效期</td>
        <td class="queryContent" colspan="3">
            <input class="inputText easyui-datebox" type="text" style="width: 105px" id="limitDate" name="limitDate" value="${fn:substring(orderInfo.limitDate,0,10) }" />
        </td>
        <td class="queryBtnTd" colspan="4" style="text-align: center">
            <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-refresh"  onclick="refreshPaymentInfo('${orderInfo.orderId }')">刷新在线支付信息</a>
            <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-offlineinput"  onclick="showOfflinePaymentInput()" id="offInputBtn">线下方式支付录入</a>        
        </td>
    </tr>
</table>



<div style="width:100%;height:300px;margin-top: 5px;">
    <div id="orderDetailTab">
        <div title="商品明细" closable="false" href="${ctx }/jsp/order/order_item_edit.jsp?orderId=${orderInfo.orderId}"></div>
        <div title="收货地址" closable="false" href="">
            <form id="editAddrForm">
                <input type="hidden" id="deliveryAddrId" name="deliveryAddrId" value="${addr.deliveryAddrId }"/>
                <table class="queryTable" >
                    <tr>
                        <td class="queryTitle" style="width:80px" >收货地址</td>
                        <td class="queryContent" style="width:600px">
                            <input type="hidden" id="hdProId" value="${orderInfo.provinceId }" />
                            <input type="hidden" id="hdCityId" value="${orderInfo.cityId }" />
                            <input type="hidden" id="hdAreaId" value="${orderInfo.areaId }" />
                            <input class="inputText" type="text" id="provinceId" name="provinceId" />&nbsp;&nbsp;
                            <input class="inputText" type="text" id="cityId" name="cityId" />&nbsp;&nbsp;
                            <input class="inputText" type="text" id="areaId" name="areaId" />
                            <br>
                            <input class="inputText" type="text" id="receiveAddress" name="receiveAddress" style="width: 410px;margin-top: 4px;margin-bottom: 4px;" value="${orderInfo.receiveAddress }" />
                        </td>
                    </tr>
                    <tr>        
                        <td class="queryTitle">邮编</td>
                        <td class="queryContent">
                            <input class="inputText" type="text" id="receivePost" name="receivePost" value="${orderInfo.receivePost }" />
                        </td>
                    </tr>
                    <tr>    
                        <td class="queryTitle">收货人</td>
                        <td class="queryContent">
                            <input class="inputText" type="text" id="receiveUser" name="receiveUser" value="${orderInfo.receiveUser }" />
                        </td>
                    </tr>
                    <tr>    
                        <td class="queryTitle">手机</td>
                        <td class="queryContent">
                            <input class="inputText" type="text" id="receiveMobile" name="receiveMobile" value="${orderInfo.receiveMobile }"/>
                        </td>
                    </tr>
                    <tr>    
                        <td class="queryTitle">电话</td>
                        <td class="queryContent">
                            <input class="inputText" type="text" id="receiveTel" name="receiveTel" value="${orderInfo.receiveTel }" />
                        </td>
                    </tr>
                </table>
            </form>
        </div>
        <div title="发票信息" closable="false" href="">
            <form id="editInvoiceForm">
                <input type="hidden" id="defType" value="${orderInfo.invoiceType }"/>
                <input type="hidden" id="defContentType" value="${orderInfo.invoiceContentType }"/>
                <table class="queryTable" id="invoiceTable">
                    <tbody>
                        <tr id="headTr">
                            <td class="queryTitle" style="width:80px" >发票类型</td>
                            <td class="queryContent" style="width:300px">
                                <input type="radio" id="general" name="invoiceType" value="general" onclick="changeType('general')"/>普通发票
                                &nbsp;&nbsp;
                                <input type="radio" id="vat" name="invoiceType" value="none" onclick="changeType('none')"/>无发票
                            </td>
                        </tr>
                    </tbody>
                </table>
            </form>
        </div>
    </div>
</div>
<br/>
<c:if test="${returnPage !='handleOrderQuery'}">
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-ok" onclick="showAuditDlg()">审批通过</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-save" onclick="checkIsAudit()">保存订单</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="cancelOrder('${orderInfo.orderId }')">取消订单</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-redo" onclick="lockOrder()">锁定订单</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-redo" onclick="unLockOrder()">订单解锁</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-redo" onclick="" disabled="true" style="display: none">订单拆分</a>
</c:if>
<c:if test="${returnPage =='handleOrderQuery'}">
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-save" onclick="saveOrder()">保存订单</a>
</c:if>
<div id="offDlg" class="easyui-window" title="" closed="true" iconCls="icon-save" style="width:450px; height:250px;text-align:center; background: #fafafa;">
        <div class="easyui-layout" fit="true">
            <div region="center" border="false" style="background:#fff;border:1px solid #ccc;padding-left: 30px;">
                <form id="offForm">
                    <table border="0" class="queryTable" width="380px" style="margin-bottom: 0px" >
                        <tr>
                            <td class="queryTitle">支付类型</td>
                            <td class="queryContent" >
                                <input type="text" id="paymentTypeId" class="inputText" required="true"/>
                            </td>
                        </tr>
                        <tr>
                            <td class="queryTitle">支付金额</td>
                            <td class="queryContent" >
                                <input type="text" id="offPaidFee" class="inputText easyui-numberbox" style="text-align: right;" min="0" precision="2" required="true"/>
                            </td>
                        </tr>
                        <tr>
                            <td class="queryTitle">支付时间</td>
                            <td class="queryContent">
                                <input type="text" id="offPaidTime" class="inputText easyui-datetimebox" style="width: 150px;" required="true" readonly="readonly"/>
                            </td>
                        </tr>
                        <tr>
                            <td class="queryTitle">支付流水号</td>
                            <td class="queryContent">
                                <input type="text" id="offPaidNo" class="inputText easyui-validatebox"/>
                            </td>
                        </tr>
                    </table>
                </form>
            </div>
            <div region="south" border="false" style="text-align:center;height:30px;line-height:30px;">
                <a class="easyui-linkbutton" iconCls="icon-ok" href="javascript:void(0)" onclick="setOfflinePayment()">确定</a>
                <a class="easyui-linkbutton" iconCls="icon-cancel" href="javascript:void(0)" onclick="cancelDlg('offDlg')">取消</a>
            </div>
        </div>
</div>

<div id="dfDlg" class="easyui-window" title="" closed="true" iconCls="icon-save" style="width:450px; height:150px;text-align:center; background: #fafafa;">
        <div class="easyui-layout" fit="true">
            <div region="center" border="false" style="background:#fff;border:1px solid #ccc;padding-left: 30px;">
                <form id="dfForm">    
                    <table border="0" class="queryTable" width="380px" style="margin-bottom: 0px" >
                        <tr>
                            <td class="queryTitle">请输入运费</td>
                            <td class="queryContent" >
                                <input type="text" id="dfFee" class="inputText easyui-numberbox" style="text-align: right;width: 80px" min="0" precision="2" required="true"/>
                            </td>
                        </tr>
                    </table>
                </form>
            </div>
            <div region="south" border="false" style="text-align:center;height:30px;line-height:30px;">
                <a class="easyui-linkbutton" iconCls="icon-ok" href="javascript:void(0)" onclick="setDeliveryFee()">确定</a>
                <a class="easyui-linkbutton" iconCls="icon-cancel" href="javascript:void(0)" onclick="cancelDlg('dfDlg')">取消</a>
            </div>
        </div>
</div>

<div id="disfDlg" class="easyui-window" title="" closed="true" iconCls="icon-save" style="width:450px; height:150px;text-align:center; background: #fafafa;">
        <div class="easyui-layout" fit="true">
            <div region="center" border="false" style="background:#fff;border:1px solid #ccc;padding-left: 30px;">
                <form id="disfForm">    
                    <table border="0" class="queryTable" width="380px" style="margin-bottom: 0px" >
                        <tr>
                            <td class="queryTitle">请输入优惠金额</td>
                            <td class="queryContent" >
                                <input type="text" id="disfFee" class="inputText easyui-numberbox" style="text-align: right;width: 80px" min="0" precision="2" required="true"/>
                            </td>
                        </tr>
                    </table>
                </form>
            </div>
            <div region="south" border="false" style="text-align:center;height:30px;line-height:30px;">
                <a class="easyui-linkbutton" iconCls="icon-ok" href="javascript:void(0)" onclick="setDiscountFee()">确定</a>
                <a class="easyui-linkbutton" iconCls="icon-cancel" href="javascript:void(0)" onclick="cancelDlg('disfDlg')">取消</a>
            </div>
        </div>
</div>

<div id="auditPassDlg" class="easyui-window" title="" closed="true" iconCls="icon-ok" style="width:450px; height:250px;text-align:center; background: #fafafa;">
        <div class="easyui-layout" fit="true">
            <div region="center" border="false" style="background:#fff;border:1px solid #ccc;padding-left: 30px;">
                <span style="font-weight: bold;font-size: 9pt">审批意见:</span>
                <br>
                <textarea id="auditNotes" class="inputText" style="width: 350px;height: 50px;margin-bottom: 5px"></textarea>
                <br>
                <span style="font-weight: bold;font-size: 9pt">订单备注:</span>
                <br>
                <textarea id="orderNotes" class="inputText" style="width: 350px;height: 50px;margin-bottom: 5px">${orderInfo.orderNotes }</textarea>
            </div>
            <div region="south" border="false" style="text-align:center;height:30px;line-height:30px;">
                <a class="easyui-linkbutton" iconCls="icon-ok" href="javascript:void(0)" onclick="auditOrder()">确定</a>
                <a class="easyui-linkbutton" iconCls="icon-cancel" href="javascript:void(0)" onclick="cancelDlg('auditPassDlg')">取消</a>
            </div>
        </div>
</div>

<table style="display: none">
    <tbody id="general_table">
        <tr rel="dny" id="cHeadTr">        
            <td class="queryTitle">发票内容类型</td>
            <td class="queryContent">
                <input type="radio" id="private" name="invoiceContentType" value="private" onclick="changeContentType('private')"/>个人
                &nbsp;&nbsp;
                <input type="radio" id="company" name="invoiceContentType" value="company" onclick="changeContentType('company')"/>单位
            </td>
        </tr>
    </tbody>
</table>

<table style="display: none">
    <tbody id="general_personal_table">
        <tr rel="dny_gen">    
            <td class="queryTitle">发票内容</td>
            <td class="queryContent">
                <input class="inputText text_plus" type="text" id="invoiceContent" name="invoiceContent" value="${orderInfo.invoiceContent }"/>
            </td>
        </tr>
    </tbody>
</table>

<table style="display: none">
    <tbody id="general_company_table">
        <tr rel="dny_gen">    
            <td class="queryTitle">单位名称</td>
            <td class="queryContent">
                <input class="inputText text_plus" type="text" id="invoiceTitle" name="invoiceTitle" value="${orderInfo.invoiceTitle }"/>
            </td>
        </tr>
        <tr rel="dny_gen">    
            <td class="queryTitle">发票内容</td>
            <td class="queryContent">
                <input class="inputText text_plus" type="text" id="invoiceContent" name="invoiceContent" value="${orderInfo.invoiceContent }"/>
            </td>
        </tr>
    </tbody>
</table>

<table style="display: none">
    <tbody id="vat_table">
        <tr rel="dny">    
            <td class="queryTitle">单位名称</td>
            <td class="queryContent">
                <input type="hidden" name="invoiceContentTypeNo" value=" "/>
                <input class="inputText text_plus" type="text" id="invoiceTitle" name="invoiceTitle" value="${orderInfo.invoiceTitle }"/>
            </td>
        </tr>
        <tr rel="dny">    
            <td class="queryTitle">识别税号</td>
            <td class="queryContent">
                <input class="inputText text_plus" type="text" id="invoiceTaxNo" name="invoiceTaxNo" value="${orderInfo.invoiceTaxNo }"/>
            </td>
        </tr>
        <tr rel="dny">    
            <td class="queryTitle">注册地址</td>
            <td class="queryContent">
                <input class="inputText text_plus" type="text" id="invoiceTaxAddress" name="invoiceTaxAddress" value="${orderInfo.invoiceTaxAddress }"/>
            </td>
        </tr>
        <tr rel="dny">    
            <td class="queryTitle">注册电话</td>
            <td class="queryContent">
                <input class="inputText text_plus" type="text" id="invoiceTaxTel" name="invoiceTaxTel" value="${orderInfo.invoiceTaxTel }"/>
            </td>
        </tr>
        <tr rel="dny">    
            <td class="queryTitle">开户银行</td>
            <td class="queryContent">
                <input class="inputText text_plus" type="text" id="invoiceTaxBank" name="invoiceTaxBank" value="${orderInfo.invoiceTaxBank }"/>
            </td>
        </tr>
        <tr rel="dny">    
            <td class="queryTitle">银行账户</td>
            <td class="queryContent">
                <input class="inputText text_plus" type="text" id="invoiceTaxAccount" name="invoiceTaxAccount" value="${orderInfo.invoiceTaxAccount }"/>
            </td>
        </tr>
        <tr rel="dny">    
            <td class="queryTitle">发票内容</td>
            <td class="queryContent">
                <input class="inputText text_plus" type="text" id="invoiceContent" name="invoiceContent" value="${invoice.invoiceContent }"/>
            </td>
        </tr>
    </tbody>
</table>
var parentWindow;
$(function(){
    if(window.opener){
        parentWindow = window.opener;
    }else{
        parentWindow = window.parent;
    }
    checkOfflineInput();
    var isPaid = $("#isPaid").val();
    var proFn = function(){
        if($("#provinceId").combobox("getData").length > 1 && $("#hdProId").val()){
            $("#provinceId").combobox("select",$("#hdProId").val());
            if(isPaid == "Y"){
                if(checkButtonRight('assign_audit_order')){
                    $("#provinceId").combobox("enable");
                }else{
                    $("#provinceId").combobox("disable");
                }
            }else{
                $("#provinceId").combobox("enable");
            }
        }
    }
    var cityFn = function(){
        if($("#cityId").combobox("getData").length > 1 && $("#hdCityId").val()){
            $("#cityId").combobox("select",$("#hdCityId").val());
            //$("#hdCityId").val("");
            if(isPaid == "Y"){
                if(checkButtonRight('assign_audit_order')){
                    $("#cityId").combobox("enable");
                }else{
                    $("#cityId").combobox("disable");
                }
            }else{
                $("#cityId").combobox("enable");
            }
        }
    }
    var areaFn = function(){
        if($("#areaId").combobox("getData").length > 1 && $("#hdAreaId").val()){
            $("#areaId").combobox("select",$("#hdAreaId").val());
            //$("#hdAreaId").val("");
            if(isPaid == "Y"){
                if(checkButtonRight('assign_audit_order')){
                    $("#areaId").combobox("enable");
                }else{
                    $("#areaId").combobox("disable");
                }
            }else{
                $("#areaId").combobox("enable");
            }
        }
    }
    createAreaLinkage("provinceId","cityId","areaId",proFn,cityFn,areaFn);
    var defType = $("#defType").val();
    if($("input[type=radio][name=invoiceType][value="+defType+"]").length > 0){
        $("input[type=radio][name=invoiceType][value="+defType+"]").click();    
    }else{
        $("input[type=radio][name=invoiceType]:eq(0)").click();
    }
    $('#orderDetailTab').tabs({  
        fit:true  
    });
});

// 检查审核权限
function checkButtonRight(buttonNo) {
    var rslt = false;
    doAjax({
        url : appPath + "/page/sysButton/" + buttonNo + "/checkRight",
        async : false,
        success : function(data) {
            if (typeof (data) == 'boolean' && data) {
                rslt = true;
            }
        }
    });
    return rslt;
}

/**
 * 检查是否可以线下录入
 */
function checkOfflineInput(){
    var isPaid = $("#isPaid").val();
//    var paymentMode = $("#paymentModeYZ").val();
    if(isPaid == "Y"){
        if(checkButtonRight('assign_audit_order')){
            $("#offInputBtn").linkbutton("enable");
        }else{
            $("#offInputBtn").linkbutton("disable");
            $("#deliveryFeeSpan").text($("#deliveryFeeSpan").text());
            $("#orderDiscountFee").text($("#orderDiscountFee").text());
        }
    }else{
        $("#offInputBtn").linkbutton("enable");
    }
}

/**
 * 刷新地址按钮
 */
function refreshAreaLink(){
    var isPaid = $("#isPaid").val();
    if(isPaid == "Y"){
        if(checkButtonRight('assign_audit_order')){
            $("#provinceId").combobox("enable");
            $("#cityId").combobox("enable");
            $("#areaId").combobox("enable");
        }else{
            $("#provinceId").combobox("disable");
            $("#cityId").combobox("disable");
            $("#areaId").combobox("disable");
        }
    }else{
        $("#provinceId").combobox("enable");
        $("#cityId").combobox("enable");
        $("#areaId").combobox("enable");
    }
}

/**
 * 刷新支付信息
 * @param {} orderId
 */
function refreshPaymentInfo(orderId){
    doAjax({
        url:appPath + "/page/order/"+orderId+"/paymentInfo",
        success:function(data){
            $("#paymentTypeName").text(data.paymentTypeName);
            $("#paidTime").text(data.paidTime);
            $("#paymentNo").text(data.paymentNo);
            if(data.paidFee){
                $("#paidFee").text(Number(data.paidFee).toFixed(2));                
            }else{
                $("#paidFee").text(data.paidFee);    
            }
            $("#orderPayFee").text(parseFloat(data.orderFee-data.paidFee).toFixed(2));
            $("#isPaid").val(data.isPaid);
            $("#orderItemEditGrid").datagrid("load");
            checkOfflineInput();
            refreshAreaLink();
        }
    });
}

/**
 * 关闭对话框
 * @param {} dlg
 */
function cancelDlg(dlg){
    $('#'+dlg).window('close');
}

/**
 * 关闭处理页面
 */
function closeAddTab(isCloseTab){
    window.setTimeout(function(){
        if(typeof(isCloseTab)=="boolean" && isCloseTab){
            parentWindow.closeSubTab(parentWindow.tabObject["frame_orderAuditFrame"]);
        }
        if(window.opener){
            window.close();
        }
    },100);
}

/**
 * 弹出线下支付输入对话框
 */
function showOfflinePaymentInput(){
    if(!checkUserButtonRight('audit_set_offline_payment')){
        if(!checkButtonRight('assign_audit_order')){
            return ;
        }
    }
    $('#offForm').form('clear');
    
    var orderFee=parseFloat($.trim($("#orderFee").text())).toFixed(2);//订单金额
    var paidFee=parseFloat($.trim($("#paidFee").text())).toFixed(2);//待付款金额
    
    $("#offPaidFee").val(parseFloat(orderFee - paidFee).toFixed(2));//支付金额
//    $("#orderPayFee").val(parseFloat(orderFee - paidFee).toFixed(2));//待付款付金额
//    var fee = Number($.trim($("#orderPayFee").text()));
//    
//    if(!isNaN(fee)){
//        $("#offPaidFee").val(fee.toFixed(2));    
//    }
    $("#offPaidTime").datebox("setValue",getCurrentTimeString());
    $("#paymentTypeId").combobox({  
        url:appPath+"/page/payment/types_json/none",  
        valueField:"id",  
        textField:"text",
        panelHeight:"auto",
        editable:false,
        onLoadSuccess:function(record){
            $('#offDlg').window({
                title:'线下方式支付',
                iconCls:'icon-add',
                modal: true,
                shadow: true,
                collapsible:false,
                minimizable:false,
                maximizable:false
            });
            $('#offDlg').window('move',{top:100});
            $('#offDlg').window('open');
        }
    });
}

/**
 * 设置线下支付
 */
function setOfflinePayment(){
    if(!$('#offForm').form('validate')){
        return ;
    }
    if($("#offPaidNo").val().length > 60 )
    {
        $.messager.alert('提示','支付流水号超出存储长度','info');
        return ;
    }
    if(checkNumberOrStr($("#offPaidNo").val())==false){
         $.messager.alert('提示信息','支付流水号只能包含数字和字母','info');
          return;
    }
    
    var submitObj = new Object();
    submitObj.orderId = $("#orderId").val();
    submitObj.paymentTypeId = $("#paymentTypeId").combobox("getValue");
    submitObj.paidFee = $("#offPaidFee").val();
    submitObj.paidTime = $("#offPaidTime").datebox("getValue");
    submitObj.paymentNo = jQuery.trim($("#offPaidNo").val());
    submitObj.orderPayFee = jQuery.trim($("#orderPayFee").text());  
    submitObj.paymentTypeName =jQuery.trim($("#paidFee").text()); //将付款金额放入paymentTypeName中传入Action中进行判断
    submitObj.orderFee = jQuery.trim($("#orderFee").text());
    submitObj.memberId = $("#memberId").val();
    if(!submitObj.paymentTypeId){
        $.messager.alert('提示','请选择支付类型','info');
        return ;
    }
    
    if(submitObj.orderPayFee > 0 ){
        if(submitObj.paidFee <= 0){
            $.messager.alert('提示','支付金额应大于0','info');
            return ;    
        }
        if(!submitObj.paymentNo){
            $.messager.alert('提示','请输入支付流水号','info');
            return ;    
        }
    }
    doAjax({
        url:appPath + "/page/auditOrder/setOfflinePayment",
        data:submitObj,
        type:"post",
        success:function(data){
            var code = data.code;
            switch(code){
                case -1:
                    $.messager.alert('提示','该订单不存在或已删除!','info');
                    break;
                case 0:
                    $.messager.alert('提示',data.msg,'info');
                    break;
                case 1:
                    cancelDlg('offDlg');
                    $.messager.alert('提示信息','录入成功!','info',function(){
                        refreshPaymentInfo(submitObj.orderId);
                        var frameName = $(parentWindow.document).find("#frameName").val();
                        parentWindow.frames[frameName].doQuery();
                    });
                    break;
                default:
                    $.messager.alert('提示',data,'info');
                    break;
            }
        },
        error:function(XMLHttpRequest, textStatus, errorThrown){
            $.messager.alert('提示信息','抱歉,录入未能完成,'+textStatus,'error');
        }
    });
}

/**
 * 弹出设置运费输入框
 */
function toSetDeliveryFee(){
    if(!checkUserButtonRight('audit_set_delivery_fee')){
        if(!checkButtonRight('assign_audit_order')){
            return ;
        }
    }
    $("#dfFee").val($.trim($("#deliveryFeeSpan").text()));
    $('#dfDlg').window({
        title:'设置运费',
        modal: true,
        shadow: true,
        collapsible:false,
        minimizable:false,
        maximizable:false
    });
    $('#dfDlg').window('move',{top:100});
    $('#dfDlg').window('open');
}

/**
 * 设置运费
 */
function setDeliveryFee(){
    if(!$('#dfForm').form('validate')){
        return ;
    }
    var newDeliveryFee = $.trim($("#dfFee").val());
    var newOrderFee = Number($.trim($("#skuFeeSpan").text()))
                     -Number($.trim($("#otherDiscounts").text()))
                     -Number($.trim($("#orderVouchers").text()))
                     -Number($.trim($("#orderPoint").text()))
                     -Number($.trim($("#orderDiscountFee").text()))
                     +Number(newDeliveryFee);
    var subObj = new Object();
    subObj.orderId = $("#orderId").val();
    subObj.deliveryFee = newDeliveryFee;
    if(!isNaN(newOrderFee)){
        if(newOrderFee < 0){
            newOrderFee = 0;
        }
        subObj.orderFee = newOrderFee;
        subObj.orderPayFee = newOrderFee;
    }
                     
    doAjax({
        url:appPath + "/page/auditOrder/updateOrder",
        data:subObj,
        type:"post",
        success:function(data){
            if(data == "ok"){
                cancelDlg('dfDlg');
                $.messager.alert('提示信息','设置成功!','info',function(){
                    $("#df").text(Number(newDeliveryFee).toFixed(2));
                    $("#orderFee").text(Number(newOrderFee).toFixed(2));
                    $("#orderPayFee").text(Number(newOrderFee).toFixed(2));
                    var frameName = $(parentWindow.document).find("#frameName").val();
                    parentWindow.frames[frameName].doQuery();
                });
            }else{
                $.messager.alert('提示',data,'error');
            }
        },
        error:function(XMLHttpRequest, textStatus, errorThrown){
            $.messager.alert('提示信息','抱歉,设置未能完成,'+textStatus,'error');
        }
    });
}

/**
 * 打开手工优惠设置窗口
 */
function toSetDiscountFee(){
    if(!checkUserButtonRight('audit_set_discount_fee')){
        if(!checkButtonRight('assign_audit_order')){
            return ;
        }
    }
    var discountFee = Number($.trim($("#orderDiscountFee").text()));
    if(isNaN(discountFee)){
        discountFee = 0 ;
    }
    var maxDiscountFee = Number($.trim($("#orderFee").text()));
    if(isNaN(maxDiscountFee)){
        maxDiscountFee = 0 ;
    }
    $('#disfFee').numberbox({  
        min:0,
        max:maxDiscountFee,
        precision:2  
    });
    $("#disfFee").val(discountFee.toFixed(2));
    $('#disfDlg').window({
        title:'设置手工优惠金额',
        modal: true,
        shadow: true,
        collapsible:false,
        minimizable:false,
        maximizable:false
    });
    $('#disfDlg').window('move',{top:100});
    $('#disfDlg').window('open');
}

/**
 * 设置手工优惠
 */
function setDiscountFee(){
    if(!$('#disfForm').form('validate')){
        return ;
    }
    var newDiscountFee = $.trim($("#disfFee").val());
    if(newDiscountFee == Number($.trim($("#orderFee").text()))){
        $.messager.alert('提示','手工优惠金额不能等于订单金额','info');
        return ;
    }
    var newOrderFee = Number($.trim($("#skuFeeSpan").text()))
                     -Number($.trim($("#otherDiscounts").text()))
                     -Number($.trim($("#orderVouchers").text()))
                     -Number($.trim($("#orderPoint").text()))
                     -newDiscountFee
                     +Number($.trim($("#deliveryFeeSpan").text()));
    var subObj = new Object();
    subObj.orderId = $("#orderId").val();
    subObj.discountFee = newDiscountFee;
    if(!isNaN(newOrderFee)){
        if(newOrderFee < 0){
            newOrderFee = 0;
        }
        subObj.orderFee = newOrderFee;
        subObj.orderPayFee = newOrderFee;
    }
                     
    doAjax({
        url:appPath + "/page/auditOrder/updateOrder",
        data:subObj,
        type:"post",
        success:function(data){
            if(data == "ok"){
                cancelDlg('disfDlg');
                $.messager.alert('提示信息','设置成功!','info',function(){
                    $("#disf").text(Number(newDiscountFee).toFixed(2));
                    $("#orderFee").text(Number(newOrderFee).toFixed(2));
                    $("#orderPayFee").text(Number(newOrderFee).toFixed(2));
                    var frameName = $(parentWindow.document).find("#frameName").val();
                    parentWindow.frames[frameName].doQuery();
                });
            }else{
                $.messager.alert('提示',data,'error');
            }
        },
        error:function(XMLHttpRequest, textStatus, errorThrown){
            $.messager.alert('提示信息','抱歉,设置未能完成,'+textStatus,'error');
        }
    });
}

/**
 * 获取提交数据
 */
function getSubmitObj(){
    var submitObj = new Object();
    submitObj.orderId = $("#orderId").val();
    submitObj.memberId = $("#memberId").val();
    submitObj.multiChannelId = $("#multiChannelId").val();
    submitObj.paymentMode = $("#paymentMode").combobox("getValue");
    submitObj.deliveryFee = $.trim($("#deliveryFeeSpan").text());
    submitObj.discountFee = $.trim($("#orderDiscountFee").text());
    if($("#limitDate").datebox("getValue")){
        submitObj.limitDate = $("#limitDate").datebox("getValue")+" 23:59:59";    
    }
    
    var addrObj = $("#editAddrForm").serializeObject();

    if(!addrObj.areaId && $("#areaId").combobox("options").enable){
        $.messager.alert('提示信息','请选择收货地址','info');
        return;
    }else{
        submitObj.provinceId = $("#hdProId").val();
        submitObj.cityId = $("#hdCityId").val();
        submitObj.areaId = $("#hdAreaId").val();
        
        addrObj.receiveFullAddress = 
        $("#provinceId").combobox("getText") + 
        $("#cityId").combobox("getText") + 
        $("#areaId").combobox("getText") + 
        addrObj.receiveAddress;
    }
    $.extend(submitObj,addrObj);
    
    var invioceObj = $("#editInvoiceForm").serializeObject();
    $.extend(submitObj,invioceObj);
    
    var changedArray = [];
    var insertRows = $("#orderItemEditGrid").datagrid("getChanges","inserted");
    var updateRows = $("#orderItemEditGrid").datagrid("getChanges","updated");
    var deleteRows = $("#orderItemEditGrid").datagrid("getChanges","deleted");
    
    var insertLength = insertRows.length;
    var updateLength = updateRows.length;
    var deleteLength = deleteRows.length;

    if(insertLength > 0){
        for(var i=0;i<insertLength;i++){
            insertRows[i].orderItemId = null;
        }    
        $.merge(changedArray,insertRows);
    }
    if(updateLength > 0){
        $.merge(changedArray,updateRows);
    }
    if(deleteLength > 0){
        for(var i=0;i<deleteLength;i++){
            deleteRows[i].isDelete = "Y";
        }
        $.merge(changedArray,deleteRows);
    }
    if(changedArray.length > 0){
        submitObj.items = JSON.stringify(changedArray);
    }
    
    return submitObj;
}

/**
 * 显示订单审核对话框
 */
function showAuditDlg(){
    if(!checkUserButtonRight('audit_order')){
        if(!checkButtonRight('assign_audit_order')){
            return ;
        }
    }
    var isPaid = $("#isPaid").val();
    var paymentMode = $("#paymentMode").combobox("getValue");
    var submitObj = getSubmitObj();
    if(paymentMode == "HDFK" && submitObj.items){
        $.messager.alert('提示信息','货品信息发生变化,请先保存订单!','info');
        return ;
    }
    if(paymentMode == "HDFK" && submitObj.receiveFullAddress!=$("#receiveFullAddress").val()){
        $.messager.alert('提示信息','收货地址发生变化,请先保存订单!','info');
        return ;
    }
    if( isPaid != "Y" && paymentMode == "KDFH"){
        $.messager.alert('提示信息','该订单还未完全付款!','info');
        return ;
    }
    
    //检查订单费用
    doAjax({
        url : appPath + "/page/auditOrder/"+submitObj.orderId+"/checkFee",
        success:function(data){
            switch(data){
                case 'itemFeeErr':
                    $.messager.confirm('提示','商品金额之和与货款金额不相等,是否继续?',function(t){
                        if(t){
                            openAuditDlg();
                        }
                    },{ok:"yes",cancel:"no"});
                    break;
                case 'orderFeeErr':
                    $.messager.confirm('提示','合计的金额与订单金额不相等,是否继续?',function(t){
                        if(t){
                            openAuditDlg();
                        }
                    },{ok:"yes",cancel:"no"});
                    break;
                case 'orderPayFeeErr':
                    if(paymentMode=="HDFK"){
                        //货到付款
                        $.messager.confirm('提示','待付款金额与订单金额不相等,是否继续?',function(t){
                            if(t){
                                openAuditDlg();
                            }
                        },{ok:"yes",cancel:"no"});
                    }else{
                        //款到发货
                        openAuditDlg();
                    }
                    break;
                case 'ok':
                    openAuditDlg();
                    break;    
                default:
                    $.messager.alert('提示',data.msg,'info');
                    break;    
            }
        },
        error:function(XMLHttpRequest, textStatus, errorThrown){
            $.messager.alert('提示信息','订单费用检查未能完成,'+textStatus,'error');
        }
    });
    
}

/**
 * 审批订单通过
 */
function openAuditDlg(){
    $("#auditNotes").val("");
    $('#auditPassDlg').window({
        title:'订单审核-审核通过',
        iconCls:'icon-ok',
        modal: true,
        shadow: true,
        collapsible:false,
        minimizable:false,
        maximizable:false
    });
    $('#auditPassDlg').window('move',{top:100});
    $('#auditPassDlg').window('open');
}

/**
 * 审批订单通过
 */
function auditOrder(){
    var auditNotes = $("#auditNotes").val();
    var orderNotes = $("#orderNotes").val();
    if(!auditNotes || !orderNotes) {
        $.messager.alert('提示信息', '审批意见和订单备注都不能为空!', 'info');
        return;
    }
    $.messager.confirm('提示信息','您确定此订单审核通过?',function(r){
        if(r){
            var mod = $("<div class='panel window' style='position: absolute;text-align:center;top:50%;left:50%;z-index:1000001'>" +
                "<img src='"+appPath+"/images/common/loading.gif'><br/>审核中,请稍后.....</div>" +
                "<div class='window-mask' style='z-index:1000000'></div>");
            mod.appendTo('body');
            var submitObj = getSubmitObj();
            submitObj.auditNotes = jQuery.trim($("#auditNotes").val());
            submitObj.orderNotes = jQuery.trim($("#orderNotes").val());
            submitObj.goodsSeller = $("#goodsSeller").val();
            doAjax({
                url:appPath + "/page/auditOrder/audit",
                type:"post",
                data:submitObj,
                success:function(data){
                    mod.remove();
                    var code = data.code;
                    switch(code){
                        case -3:
                            $.messager.alert('提示','该订单已审核','info');
                            break;
                        case -2:
                            $.messager.alert('提示','以下货品库存不足:'+data.msg,'info');
                            break;    
                        case -1:
                            $.messager.alert('提示','该订单不存在','info');
                            break;
                        case 0:
                            $.messager.alert('提示',data.msg,'info');
                            break;
                        case 1:
                            $("#orderItemEditGrid").datagrid("acceptChanges");
                            if(data.rtInfo){
                                var info = data.rtInfo; 
                                $("#skuFeeSpan").text(Number(info.skuFee).toFixed(2));
                                $("#deliveryFeeSpan").text(Number(info.deliveryFee).toFixed(2));
                                $("#otherDiscounts").text(Number(info.otherDiscounts).toFixed(2));
                                $("#orderVouchers").text(Number(info.orderVouchers));
                                $("#orderPoint").text(Number(info.orderPoints));
                                $("#orderDiscountFee").text(Number(info.discountFee).toFixed(2));
                                $("#orderFee").text(Number(info.orderFee).toFixed(2));
                                $("#orderPayFee").text(Number(info.orderPayFee).toFixed(2));
                            }
                            var frameName = $(parentWindow.document).find("#frameName").val();
                            parentWindow.frames[frameName].doQuery();
                            closeAddTab(true);
                            break;
                        default:
                            $.messager.alert('提示',data,'info');
                            break;
                    }
                },
                error:function(XMLHttpRequest, textStatus, errorThrown){
                    mod.remove();
                    $.messager.alert('提示信息','订单审批未能完成,'+textStatus,'error');
                }
            });
        }
    });
}

//保存订单前判断订单是否已审核
function checkIsAudit(){
    var orderId = $("#orderId").val();
    doAjax({
        url:appPath+"/page/auditOrder/checkIsAudit",
        type:"post",
        data:{
            orderId:orderId
        },
        success:function(data){
            if(data=="Audited"){
                $.messager.alert('提示','订单已经审核无法保存!','info');
                return;
            }else{
                saveOrder();
            }
        }
    });
}

/**
 * 保存订单
 */
function saveOrder(){
    var submitObj = getSubmitObj();
    doAjax({
        url:appPath + "/page/auditOrder/save",
        type:"post",
        data:submitObj,
        success:function(data){
            var code = data.code;
            switch(code){
                case 0:
                    $.messager.alert('提示',data.msg,'info');
                    break;
                case 1:
                    $("#orderItemEditGrid").datagrid("reload");
                    if(data.rtInfo){
                        var info = data.rtInfo; 
                        $("#skuFeeSpan").text(Number(info.skuFee).toFixed(2));
                        $("#df").text(Number(info.deliveryFee).toFixed(2));
                        $("#otherDiscounts").text(Number(info.otherDiscounts).toFixed(2));
                        $("#orderVouchers").text(Number(info.orderVouchers));
                        $("#orderPoint").text(Number(info.orderPoints));
                        $("#disf").text(Number(info.discountFee).toFixed(2));
                        $("#orderFee").text(Number(info.orderFee).toFixed(2));
                        $("#orderPayFee").text(Number(info.orderPayFee).toFixed(2));
                        $("#receiveFullAddress").val(submitObj.receiveFullAddress);
                    }
                    $.messager.alert('提示信息','订单保存成功','info',function(){
                    var frameName = $(parentWindow.document).find("#frameName").val();
                    parentWindow.frames[frameName].doQuery();
                    });
                    break;
                default:
                    $.messager.alert('提示',data,'info');
                    break;
            }
        },
        error:function(XMLHttpRequest, textStatus, errorThrown){
            $.messager.alert('提示信息','订单保存未能完成,'+textStatus,'error');
        }
    });
}

/**
 * 订单解锁
 */
function unLockOrder(){
    var orderId = $("#orderId").val();
    doAjax({
        url : appPath + "/page/auditOrder/"+orderId+"/unLock",
        type:"post",
        success:function(data){
            if(data == "ok"){
                $.messager.alert('提示信息','订单解锁成功','info',function(){
                    closeAddTab(true);
                });
            }else{
                $.messager.alert('提示信息','订单解锁未能完成:'+data,'info');
            }
        },
        error:function(XMLHttpRequest, textStatus, errorThrown){
            $.messager.alert('提示信息','订单解锁失败:'+textStatus,'error');
        }
    });
}

function changeType(type){
    $("#invoiceTable tr[rel^=dny]").remove();
    var defContentType = $("#defContentType").val();
    switch(type){
        case "general":
            $("#headTr").after($("#general_table").html());
            if($("input[type=radio][name=invoiceContentType][value="+defContentType+"]").length > 0){
                $("input[type=radio][name=invoiceContentType][value="+defContentType+"]").click();    
            }else{
                $("input[type=radio][name=invoiceContentType]:eq(0)").click();
            }
            break;
        case "vat":
            $("#headTr").after($("#vat_table").html());
            break;
        default:
            $("#headTr").siblings().remove();
            break;
    }
}

function changeContentType(type){
    $("#invoiceTable tr[rel=dny_gen]").remove();
    switch(type){
        case "private":
            $("#cHeadTr").after($("#general_personal_table").html());
            break;
        case "company":
            $("#cHeadTr").after($("#general_company_table").html());
            break;
        default:
            break;
    }
}

/**
 * 取消订单
 * @param {} orderId
 */
function cancelOrder(orderId){
    if(!orderId){
        return ;
    }
    if(!checkUserButtonRight('audit_cancel_order')){
        if(!checkButtonRight('assign_audit_order')){
            return ;
        }
    }
    $.messager.prompt('取消订单', '请输入订单取消原因:', function(msg){
        if (msg){
            $.messager.confirm('提示信息','您确定要取消此订单?',function(r){
                if(r){
                    doAjax({
                        url:appPath + "/page/auditOrder/cancel",
                        type:"post",
                        data:{orderId:orderId,cancelNotes:msg},
                        success:function(data){
                            var code = data.code;
                            switch(code){
                                case -2:
                                    $.messager.alert('提示信息','该订单已付款','info');
                                    break;
                                case -1:
                                    $.messager.alert('提示','该订单不存在或已删除!','info');
                                    break;
                                case 0:
                                    $.messager.alert('提示',data.msg,'info');
                                    break;
                                case 1:
                                    $.messager.alert('提示信息','订单取消成功!','info',function(){
                                        var frameName = $(parentWindow.document).find("#frameName").val();
                                        parentWindow.frames[frameName].doQuery();
                                        closeAddTab(true);
                                    });
                                    break;
                                default:
                                    $.messager.alert('提示',data,'info');
                                    break;
                            }
                        },
                        error:function(XMLHttpRequest, textStatus, errorThrown){
                            $.messager.alert('提示信息','订单取消未能完成,'+textStatus,'error');
                        }
                    });    
                }
            });        
        }else{
            $.messager.alert('提示','订单取消原因不能为空!','info');
        }
    });
}

/**
 * 锁定订单
 */
function lockOrder(){
    var orderId = $("#orderId").val();
    doAjax({
        url : appPath + "/page/auditOrder/"+orderId+"/lockOrder",
        type:"post",
        success:function(data){
            if(data == "ok"){
                $.messager.alert('提示信息','订单锁定成功','info');
            }else{
                $.messager.alert('提示信息','订单锁定未能完成:'+data,'info');
            }
        },
        error:function(XMLHttpRequest, textStatus, errorThrown){
            $.messager.alert('提示信息','订单锁定失败:'+textStatus,'error');
        }
    });
}
package com.founder.ec.order.action;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.founder.ec.WS.model.OrderStatus;
import com.founder.ec.base.action.BaseAction;
import com.founder.ec.common.model.SysCode;
import com.founder.ec.common.service.CommonLogisticsService;
import com.founder.ec.common.service.SystemService;
import com.founder.ec.common.utils.DateUtils;
import com.founder.ec.common.utils.HttpSenderUtil;
import com.founder.ec.common.utils.StringUtil;
import com.founder.ec.order.model.EcMultiChannel;
import com.founder.ec.order.model.EcPaymentType;
import com.founder.ec.order.model.LogisticFeeRule;
import com.founder.ec.order.model.OrderInfo;
import com.founder.ec.order.model.OrderItem;
import com.founder.ec.order.model.OrderLog;
import com.founder.ec.order.model.OrderPriceChangeLog;
import com.founder.ec.order.service.OrderService;
import com.founder.ec.utils.PropertyConfigurer;
import com.j1.hessian.common.J1SOAHessianHelper;
import com.j1.pay.model.oracle.OrderPaymentLog;
import com.j1.soa.resource.pay.api.PayQueryService;

@Controller
@RequestMapping("/auditOrder")
public class OrderAuditAction extends BaseAction {
    
    private static final String url =(String)PropertyConfigurer.getContextProperty("order.url");
    private static final String payUrl =(String)PropertyConfigurer.getContextProperty("pay.url");

    @Autowired
    private OrderService orderService;

    @Autowired
    private SystemService systemService;
    
    @Autowired
    private CommonLogisticsService commonLogisticsService;
    
    /**
     * 转到审核页面
     * @param request
     * @return
     */
    @RequestMapping(value="/auditPage")
    public String toAuditPage(HttpServletRequest request){
        EcMultiChannel c = new EcMultiChannel();
        c.setIsEnable("Y");
        List<HashMap<String,Object>> orderFromList = orderService.getSimpleMultiChannel(c);
        EcPaymentType param = new EcPaymentType();
        param.setIsEnable("Y");
        List<HashMap<String,Object>> paymentTypeList = orderService.getSimplePaymentType(param);
        request.setAttribute("orderFromList", orderFromList);
        request.setAttribute("paymentTypeList", paymentTypeList);
        return "/jsp/order/order_audit.jsp";
    }
    
    /**
     * 转到货到付款审核页面
     * @param request
     * @return
     */
    @RequestMapping(value="/cashAuditPage")
    public String toCashAuditPage(HttpServletRequest request){
        EcMultiChannel c = new EcMultiChannel();
        c.setIsEnable("Y");
        List<HashMap<String,Object>> orderFromList = orderService.getSimpleMultiChannel(c);
        request.setAttribute("orderFromList", orderFromList);
        return "/jsp/order/order_audit_cash.jsp";
    }
    
    /**
     * 已提交订单列表
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping(value="/list")
    @ResponseBody
    public Map<String,Object> pagedList(HttpServletRequest request,OrderInfo orderInfo)
    {
        Integer pageNumber = 0;
        Integer pageSize = 0;
//        Integer userId=(Integer)request.getSession().getAttribute("userId");
//        Integer num=systemService.checkName(userId);
        Integer strLength=4;
//        if(num!=null&&num>0){
//            strLength=0;
//        }
        orderInfo.setStrLength(strLength);
        try {
            pageNumber = Integer.parseInt(request.getParameter("page"));
            pageSize = Integer.parseInt(request.getParameter("rows"));
        } catch (Exception e) {}
        if(StringUtil.isNotEmpty(request.getParameter("paymentModes"))){
            orderInfo.setPaymentModeArray(request.getParameter("paymentModes").split(","));
        }
        orderInfo.setStartRow((pageNumber-1) * pageSize + 1);
        orderInfo.setEndRow(orderInfo.getStartRow() + pageSize - 1);
        
        return orderService.getAuditOrders(orderInfo, pageNumber, pageSize);
    }
    
    /**
     * 锁定订单
     * @param request
     * @param orderId
     * @return
     */
    @RequestMapping(value="/{orderId}/lock")
    @ResponseBody
    public HashMap<String,Object> lockOrder(HttpServletRequest request,@PathVariable Long orderId){
        return orderService.doLockOrder(orderId, (Integer)request.getSession().getAttribute("userId"));
    }
    
    /**
     * 订单解锁
     * @param request
     * @param orderId
     * @return
     */
    @RequestMapping(value="/{orderId}/unLock")
    @ResponseBody
    public String unLockOrder(HttpServletRequest request,@PathVariable Long orderId){
        OrderInfo info = new OrderInfo();
        info.setOrderId(orderId);
        info.setIsLock("N");
        info.setEditUserId((Integer)request.getSession().getAttribute("userId"));
        info.setEditTime(DateUtils.getCurrentDateString());
        orderService.lockOrder(info);
        return "ok";
    }
    
    /**
     * 取消订单
     * @param request
     * @param orderId
     * @return
     */
    @RequestMapping(value="/cancel",method=RequestMethod.POST)
    @ResponseBody
    public HashMap<String,Object> cancelOrder(HttpServletRequest request,@RequestParam Long orderId,
            @RequestParam String cancelNotes){
        HashMap<String,Object> rs = new HashMap<String, Object>();
         if(null == orderId){
             rs.put("code", 0);
             rs.put("msg", "orderId is null");
            return rs;
        }
        Integer cancelStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_state","cancel"));
        if(null == cancelStateId){
            rs.put("code", 0);
             rs.put("msg", "orderStateId is null");
            return rs;
        }
        Integer cancelOutStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_out_state","cancel"));
        if(null == cancelOutStateId){
            rs.put("code", 0);
             rs.put("msg", "orderOutStateId is null");
            return rs;
        }
        
        
         //订单取消调用接口实时取消   modify  by lurongyu at 20140821  began
            OrderInfo newOrderInfo = orderService.getOrderInfo(orderId);
            OrderStatus   orderStatus = getReturnStatus (orderId,"1");
            if (newOrderInfo.getOrderState() != 29) {    
                if (orderStatus.getOrder_status().equals("98")){
                    rs.put("code", 0);
                    rs.put("msg", orderStatus.getOrder_remark());
                    return rs;
                }
    
                if (orderStatus.getOrder_status().equals("21")){
                    rs.put("code", 0);
                    rs.put("msg", orderStatus.getOrder_remark());
                    return rs;
                }
                if (newOrderInfo.getOrderState()== 28 && orderStatus.getOrder_status().equals("99")){
                    rs.put("code", 0);
                    rs.put("msg", "已审核订单还未进入OMS系统 请稍后再试!");
                    return rs;
                }
            }    
          //end    
        
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        String currentTime = DateUtils.getCurrentDateString();
        OrderInfo order = new OrderInfo();
        order.setOrderId(orderId);
        order.setOrderState(cancelStateId);
        order.setOrderOutState(cancelOutStateId);
        order.setCancelUserId(userId);
        order.setCancelTime(currentTime);
        order.setCancelNotes(cancelNotes);
        order.setEditUserId(userId);
        order.setEditTime(currentTime);
        return orderService.doCancelOrder(order);
    }
    
    
    /**
     * 设置线下方式支付
     * @param request
     * @param orderInfo
     * @return
     */
//    @RequestMapping("/setOfflinePayment")
//    @ResponseBody
//    public HashMap<String, Object> setOfflinePayment(HttpServletRequest request,OrderInfo orderInfo){
//        Integer userId = (Integer)request.getSession().getAttribute("userId");
//        String currentTime = DateUtils.getCurrentDateString();
//        OrderPaymentTypeList orderPaymentTypeList=new OrderPaymentTypeList();
//        orderPaymentTypeList.setAddTime(currentTime);
//        orderPaymentTypeList.setAddUserId(userId);
//        orderPaymentTypeList.setEditTime(currentTime);
//        orderPaymentTypeList.setEditUserId(userId);
//        orderPaymentTypeList.setIsDelete("N");
//        orderPaymentTypeList.setOrderId(orderInfo.getOrderId());
//        orderPaymentTypeList.setPaidFee(orderInfo.getPaidFee());
//        orderPaymentTypeList.setPaidTime(orderInfo.getPaidTime());
//        orderPaymentTypeList.setPaymentNo(orderInfo.getPaymentNo());
//        orderPaymentTypeList.setPaymentTypeId(new Long(orderInfo.getPaymentTypeId()));
//        orderService.saveOrderPaymentTypeList(orderPaymentTypeList);
//        orderInfo.setEditTime(currentTime);
//        orderInfo.setEditUserId(userId);
//        return orderService.doSetOfflinePayment(orderInfo);
//    }
    
    /**
     * 设置线下方式支付
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping("/setOfflinePayment")
    @ResponseBody
    public HashMap<String, Object> setOfflinePayment(HttpServletRequest request,OrderInfo orderInfo){
        PayQueryService payQueryService=J1SOAHessianHelper.getService(payUrl, PayQueryService.class);
        
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        String currentTime = DateUtils.getCurrentDateString();
        OrderPaymentLog  orderPaymentLog=new OrderPaymentLog();
        orderPaymentLog.setBusinessType("offline");//订单类型 线下
        orderPaymentLog.setBusinessId(orderInfo.getOrderId());//订单号
        orderPaymentLog.setPaymentTypeId(orderInfo.getPaymentTypeId());//支付方式ID
        orderPaymentLog.setPaymentNo(orderInfo.getPaymentNo());//支付流水,自己生成
        orderPaymentLog.setPaymentFee(orderInfo.getOrderFee());//支付金额(订单金额)
        
        orderPaymentLog.setPaidFee(orderInfo.getPaidFee()); //实际一次支付金额
        
        orderPaymentLog.setPaymentTime(orderInfo.getPaidTime());//支付时间
        orderPaymentLog.setMemberId(orderInfo.getMemberId());// 用户ID
        orderPaymentLog.setBackNo("");//第三方或银行返回流水号
        orderPaymentLog.setBackTime(currentTime);//第三方货银行返回的流水号
        orderPaymentLog.setBackState("SUCCESS");//支付状态,没有就SUCCESS
        orderPaymentLog.setBackNotes("SUCCESS");//同上
        orderPaymentLog.setIsDelete("N");
        orderPaymentLog.setQueryState("N");//同上
        double orderMoney=orderInfo.getOrderFee().doubleValue(); //订单金额
        double payMoney=Double.parseDouble(orderInfo.getPaymentTypeName()); //已支付金额
        double paid=orderInfo.getPaidFee().doubleValue(); //实际一次支付金额
        if((payMoney+paid)==orderMoney){
            orderPaymentLog.setPaidState("Y");//如果全部支付就Y,部分支付P,未支付N,paymentFee与paidFee的比较(比较的是支付的金额和订单金额)
        }else{
            orderPaymentLog.setPaidState("P");
        }
        payQueryService.addOrderPaymentLog(orderPaymentLog);
         //记入日志
         OrderLog log=new OrderLog();
         log.setOrderId(orderInfo.getOrderId());
         log.setLogContent("线下录入");
         log.setLogUserId(userId);
         log.setAddUserId(userId);
         log.setAddTime(currentTime);
         log.setIsDelete("N");
         orderService.saveOrderlog(log);
         
         orderInfo.setEditTime(currentTime);
         orderInfo.setEditUserId(userId);
         return orderService.doSetOfflinePaymentNew(orderInfo);
    }
    
    /**
     * 设置线下方式支付针对接口中的订单审核详情中的线下支付
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping("/setOfflinePaymentNew")
    @ResponseBody
    public HashMap<String, Object> setOfflinePaymentNew(HttpServletRequest request,OrderInfo orderInfo){
        PayQueryService payQueryService=J1SOAHessianHelper.getService(payUrl, PayQueryService.class);
        HashMap<String, Object> rslt = new HashMap<String, Object>();
        Integer userId = (Integer)request.getSession().getAttribute("userId");
          String currentTime = DateUtils.getCurrentDateString();
          OrderPaymentLog  orderPaymentLog=new OrderPaymentLog();
          orderPaymentLog.setBusinessType("offline");//订单类型 线下
          orderPaymentLog.setBusinessId(orderInfo.getOrderId());//订单号
          orderPaymentLog.setPaymentTypeId(orderInfo.getPaymentTypeId());//支付方式ID
          orderPaymentLog.setPaymentNo(orderInfo.getPaymentNo());//支付流水,自己生成
          orderPaymentLog.setPaymentFee(orderInfo.getOrderFee());//订单金额
          
          orderPaymentLog.setPaidFee(orderInfo.getPaidFee()); //实际支付金额
          
          orderPaymentLog.setPaymentTime(orderInfo.getPaidTime());//支付时间
          orderPaymentLog.setMemberId(orderInfo.getMemberId());// 用户ID
          orderPaymentLog.setBackNo("");//第三方或银行返回流水号
          orderPaymentLog.setBackTime(currentTime);//第三方货银行返回的流水号
          orderPaymentLog.setBackState("SUCCESS");//支付状态,没有就SUCCESS
          orderPaymentLog.setBackNotes("SUCCESS");//同上
          orderPaymentLog.setIsDelete("N");
          orderPaymentLog.setQueryState("N");//同上
          double  payMoney=Double.parseDouble(orderInfo.getPaymentTypeName());
          double  orderFee=orderInfo.getOrderFee().doubleValue();
          if(payMoney==orderFee){
              orderPaymentLog.setPaidState("Y");//如果全部支付就Y,部分支付P,未支付N,paymentFee与paidFee的比较(比较的是支付的金额和订单金额)
          }else{
              orderPaymentLog.setPaidState("P");
          }
//        try {
//            OrderStateUpdateService iOrderStateUpdateService = J1SOAHessianHelper.getService(url, OrderStateUpdateService.class);
//            OrderStateParam orderStateParam = new OrderStateParam();
//            //订单号(必填)
//            orderStateParam.setOrderId(orderInfo.getOrderId());
//            //操作人
//            orderStateParam.setUserId(userId);
//            orderStateParam.setPaidFee(new BigDecimal(payMoney));
//            //订单付款
//            ServiceMessage<String> result = iOrderStateUpdateService.updateOrderStatePayment(orderStateParam);
//            if(result.getStatus().equals(MsgStatus.NORMAL)){
                payQueryService.addOrderPaymentLog(orderPaymentLog);
                rslt.put("code", 1);
//            }else{
//                rslt.put("code", 0);
//            }
//        } catch (Exception e) {
//            rslt.put("code", 0);
//        }
        orderInfo.setEditTime(currentTime);
        orderInfo.setEditUserId(userId);
        orderInfo.setPaidFee(orderInfo.getPaidFee()); //一次性付款金额
        orderInfo.setOrderPayFee(new BigDecimal(orderFee-(payMoney-orderInfo.getPaidFee().doubleValue()))); //待支付金额
        //doSetOfflinePayment方法中会查出来已经付款金额加上这次付款金额是否等于待支付金额(订单金额)
        
         //记入日志
         OrderLog log=new OrderLog();
         log.setOrderId(orderInfo.getOrderId());
         log.setLogContent("线下录入");
         log.setLogUserId(userId);
         log.setAddUserId(userId);
         log.setAddTime(currentTime);
         log.setIsDelete("N");
         orderService.saveOrderlog(log);
        
        orderService.doSetOfflinePaymentNew(orderInfo);
        return rslt;
    }
    
    /**
     * 刷新订单商品价格
     * @param request
     * @param orderId
     * @return
     */
    @RequestMapping(value="/{orderId}/refreshItemGoodsPrice")
    @ResponseBody
    public String updateItemPrice(HttpServletRequest request,@PathVariable Long orderId){
        HashMap<String, Object> param = new HashMap<String, Object>();
        param.put("orderId", orderId);
        param.put("editTime", DateUtils.getCurrentDateString());
        param.put("editUserId", (Integer)request.getSession().getAttribute("userId"));
        orderService.doRefreshItemGoodsPrice(param);
        return "ok";
    }
    
    /**
     * 订单审核通过
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping(value="/audit",method=RequestMethod.POST)
    @ResponseBody
    public HashMap<String,Object> auditOrder(HttpServletRequest request,OrderInfo orderInfo){
        HashMap<String,Object> rs = new HashMap<String, Object>();
        OrderInfo newOrderInfo = orderService.getOrderInfo(orderInfo.getOrderId());
        
        
//        //检查库存
//        StringBuffer sb = new StringBuffer();
//        List<HashMap<String, Object>> stockList = orderService.doCheckOrderStock(orderInfo.getOrderId());
//        for(HashMap<String, Object> st : stockList){
//            BigDecimal stock = (BigDecimal)st.get("availableStock");
//            if(stock.compareTo(BigDecimal.valueOf(0)) <= 0){
//                sb.append((String)st.get("goodsNo")+"("+(String)st.get("goodsName")+")");
//            }
//        }
//        if(StringUtil.isNotEmpty(sb.toString())){
//            rs.put("code", -2);
//            rs.put("msg", sb.toString());
//            return rs;
//        }
        
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        String currentTime = DateUtils.getCurrentDateString();
        List<OrderItem> itemList = new ArrayList<OrderItem>();
        String itemsString = request.getParameter("items");
        if(StringUtil.isNotEmpty(itemsString)){
            try{
                ObjectMapper om = new ObjectMapper();
                itemList = om.readValue(itemsString, new TypeReference<List<OrderItem>>(){});
            }catch(Exception e){
                e.printStackTrace();
                rs.put("code", 0);
                rs.put("msg", "items json err");
                return rs;
            }
        }
        Integer auditStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_state","audit"));
        if(null == auditStateId){
            rs.put("code", 0);
             rs.put("msg", "orderStateId is null");
            return rs;
        }
        Integer auditOutStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_out_state","audit"));
        if(null == auditOutStateId){
            rs.put("code", 0);
             rs.put("msg", "orderOutStateId is null");
            return rs;
        }
        
        orderInfo.setOrderState(auditStateId);
        orderInfo.setOrderOutState(auditOutStateId);
        orderInfo.setAuditUserId(userId);
        orderInfo.setAuditTime(currentTime);
        orderInfo.setEditUserId(userId);
        orderInfo.setEditTime(currentTime);
        
        if(newOrderInfo.getMultiChannelId()!=null && newOrderInfo.getMultiChannelId()==21){
            if(orderInfo.getGoodsSeller()!=null && Integer.parseInt(orderInfo.getGoodsSeller())!=2){
                LogisticFeeRule fitRule = commonLogisticsService.getFitRule(orderInfo);
                orderInfo.setLogisticCompanyId(fitRule.getLogisticCompanyId());
            }
                
            orderService.updateOrder(orderInfo);
            rs.put("code", 1);
            return rs;
        }
        return orderService.updateOrderInfoRelation(orderInfo, itemList,"audit");
    }

    //保存订单前判断订单是否已审核
    @RequestMapping(value="/checkIsAudit",method=RequestMethod.POST)
    @ResponseBody
    public String checkIsAudit(HttpServletRequest request,OrderInfo orderInfo){
        OrderInfo o = orderService.getOrderInfo(orderInfo.getOrderId());
        if(o.getOrderState()==28){
            return "Audited";
        }
        return "NoAudit";
    }
    
    /**
     * 保存订单
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping(value="/save",method=RequestMethod.POST)
    @ResponseBody
    public HashMap<String,Object> saveOrder(HttpServletRequest request,OrderInfo orderInfo){
        HashMap<String,Object> rslt = new HashMap<String, Object>();
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        String currentTime = DateUtils.getCurrentDateString();
        List<OrderItem> itemList = new ArrayList<OrderItem>();
        String itemsString = request.getParameter("items");
        if(StringUtil.isNotEmpty(itemsString)){
            try{
                ObjectMapper om = new ObjectMapper();
                itemList = om.readValue(itemsString, new TypeReference<List<OrderItem>>(){});
            }catch(Exception e){
                e.printStackTrace();
                rslt.put("code", 0);
                rslt.put("msg", "items json err");
                return rslt;
            }
        }
        
        orderInfo.setEditUserId(userId);
        orderInfo.setEditTime(currentTime);
        //this.saveOrderPriceChangeLog(userId,orderInfo);
        //订单改价记入日志
        OrderInfo oi=null;
        try {
            oi = orderService.getOrderInfo(orderInfo.getOrderId());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        rslt = orderService.updateOrderInfoRelation(orderInfo, itemList,"save");
        try {
            OrderInfo oiNew = orderService.getOrderInfo(orderInfo.getOrderId());
            this.saveOrderPriceChangeLog(oi,oiNew);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return rslt;
    }
    /**
     * 订单改价记入日志
     * @param OrderInfo oi 原订单
     * @param OrderInfo orderInfo 新订单
     * @return
     */
    public void saveOrderPriceChangeLog(OrderInfo oi,OrderInfo orderInfo){
        
        try {
            //OrderInfo oi = orderService.getOrderInfo(orderInfo.getOrderId());
            BigDecimal orderFee = orderInfo.getOrderFee();
            if (oi.getOrderFee().compareTo(orderFee)!=0) {
                OrderPriceChangeLog op = new OrderPriceChangeLog();
                op.setOrderId(orderInfo.getOrderId());
                List<OrderPriceChangeLog> opcll = orderService.getLatestLog(op);
                if (null!=opcll&&opcll.size()>0) {
                    //日志表最新价格
                    OrderPriceChangeLog opc = opcll.get(0);
                    
                    if (oi.getOrderFee().compareTo(opc.getOrderPrice())!=0) {
                        //原订单价格
                        OrderPriceChangeLog opcl = new OrderPriceChangeLog();
                        opcl.setOrderId(orderInfo.getOrderId());
                        opcl.setOrderPrice(oi.getOrderFee());
                        opcl.setIsDelete("N");
                        opcl.setAddTime(DateUtils.getCurrentDateString());
                        opcl.setAddUserId(oi.getEditUserId());
                        opcl.setFromSite("oracle");
                        orderService.save(opcl);
                    }
                }else {
                    //原订单价格
                    OrderPriceChangeLog opcl = new OrderPriceChangeLog();
                    opcl.setOrderId(orderInfo.getOrderId());
                    opcl.setOrderPrice(oi.getOrderFee());
                    opcl.setIsDelete("N");
                    opcl.setAddTime(DateUtils.getCurrentDateString());
                    opcl.setAddUserId(oi.getEditUserId());
                    opcl.setFromSite("oracle");
                    orderService.save(opcl);
                }
                //新订单价格
                OrderPriceChangeLog opclNew = new OrderPriceChangeLog();
                opclNew.setOrderId(orderInfo.getOrderId());
                opclNew.setOrderPrice(orderInfo.getOrderFee());
                opclNew.setIsDelete("N");
                opclNew.setAddTime(DateUtils.getCurrentDateString());
                opclNew.setAddUserId(orderInfo.getEditUserId());
                opclNew.setFromSite("oracle");
                orderService.save(opclNew);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            logger.error(e.getMessage());
            e.printStackTrace();
        }
    }
    
    /**
     * 批量审核订单
     * @param request
     * @return
     */
    @RequestMapping(value="/batchAudit",method=RequestMethod.POST)
    @ResponseBody
    public HashMap<String,Object> batchAuditOrder(HttpServletRequest request){
        HashMap<String,Object> rs = new HashMap<String, Object>();
        
        String orderIdsString = request.getParameter("orderIds");
        if(StringUtil.isEmpty(orderIdsString)){
            rs.put("code", 0);
             rs.put("msg", "orderIds is null");
            return rs;
        }
        
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        String currentTime = DateUtils.getCurrentDateString();
        
        Integer auditStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_state","audit"));
        if(null == auditStateId){
            rs.put("code", 0);
             rs.put("msg", "orderStateId is null");
            return rs;
        }
        Integer auditOutStateId = systemService.getCodeIdByTypeNoAndCodeNo(new SysCode("order_out_state","audit"));
        if(null == auditOutStateId){
            rs.put("code", 0);
             rs.put("msg", "orderOutStateId is null");
            return rs;
        }
        
        String[] idStringArray = orderIdsString.split(",");
        List<OrderInfo> orderList = new ArrayList<OrderInfo>();
        StringBuffer sbb = new StringBuffer();
        for(int i=0;i<idStringArray.length;i++){
            Long orderId = Long.parseLong(idStringArray[i]);
            OrderInfo info = new OrderInfo();
            info.setOrderId(orderId);
            info.setOrderState(auditStateId);
            info.setOrderOutState(auditOutStateId);
            info.setAuditNotes(request.getParameter("auditNotes"));
            info.setAuditUserId(userId);
            info.setAuditTime(currentTime);
            info.setEditUserId(userId);
            info.setEditTime(currentTime);
            orderList.add(info);
            
//            //检查库存
//            List<HashMap<String, Object>> stockList = orderService.doCheckOrderStock(orderId);
//            StringBuffer sb = new StringBuffer();
//            for(HashMap<String, Object> st : stockList){
//                BigDecimal stock = (BigDecimal)st.get("availableStock");
//                if(stock.compareTo(BigDecimal.valueOf(0)) <= 0){
//                    sb.append((String)st.get("goodsNo")+"("+(String)st.get("goodsName")+")");
//                }
//            }
//            if(StringUtil.isNotEmpty(sb.toString())){
//                sbb.append(info.getOrderId()+"["+sb.toString()+"]");
//            }
            
        }
        if(StringUtil.isNotEmpty(sbb.toString())){
            rs.put("code", -2);
             rs.put("msg", sbb.toString());
            return rs;
        }
        
        return orderService.doBathAuditOrder(orderList);
    }
    
    /**
     * 更新订单
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping("/updateOrder")
    @ResponseBody
    public String setDeliveryFee(HttpServletRequest request,OrderInfo orderInfo){
        orderInfo.setEditTime(DateUtils.getCurrentDateString());
        orderInfo.setEditUserId((Integer)request.getAttribute("userId"));
        orderService.updateOrder(orderInfo);
        return "ok";
    }

    /**
     * 订单费用检查
     * @return
     */
    @RequestMapping(value="/{orderId}/checkFee")
    @ResponseBody
    public String checkOrderFee(@PathVariable Long orderId){
        return orderService.checkOrderFee(orderId);
    }
    
    /**
     * 添加发票抬头
     * @param request
     * @param orderInfo
     * @return
     */
    @RequestMapping("/updateOrderNotes")
    @ResponseBody
    public String updateOrderNotes(HttpServletRequest request,OrderInfo orderInfo){
        orderService.updateOrderNotes(orderInfo);
        return "ok";
    }

    
    /**
     * 锁定订单
     * @param request
     * @param orderId
     * @return
     */
    @RequestMapping(value="/{orderId}/lockOrder")
    @ResponseBody
    public String lockOrderNew(HttpServletRequest request,@PathVariable Long orderId){
        String currentTime = DateUtils.getCurrentDateString(); 
        OrderInfo oi = new OrderInfo();
        oi.setIsLock("Y");
        oi.setLockTime(currentTime);
        oi.setLockUserId((Integer)request.getSession().getAttribute("userId"));
        oi.setEditTime(currentTime);
        oi.setEditUserId((Integer)request.getSession().getAttribute("userId"));
        oi.setOrderId(orderId);
        orderService.lockOrder(oi);
        return "ok";
    }

    
    //调用eai方法获取订单取消返回结果
            public  OrderStatus getReturnStatus (long orderId,String count ){
//                  String smsUtilUrl = PropertyUtil.getPropertyValue("webservice.properties", "order.cancel.url");
                  String smsUtilUrl =(String)PropertyConfigurer.getContextProperty("order.cancel.url");
                   OrderStatus  orderStatus = null;
                 Map<String, Object> propsMap = new HashMap ();
                 propsMap.put("order_id",orderId);
                 propsMap.put("count",count);
                 try {
                    String returnstring = HttpSenderUtil.httpSend(smsUtilUrl, propsMap);
                    if (returnstring.isEmpty()){
                        orderStatus = new OrderStatus();
                        orderStatus.setOrder_status("98");
                        orderStatus.setOrder_remark("调用接口失败!");
                    }else {
                          orderStatus = new OrderStatus();
                          JSONArray returns = JSONArray.fromObject(returnstring);
                          JSONObject json=JSONObject.fromObject(returns.get(0));
                          orderStatus.setOrder_date((String) JSONObject.fromObject(json.get("orderStatus")).get("order_date"));
                          orderStatus.setOrder_id((String) JSONObject.fromObject(json.get("orderStatus")).get("order_id"));
                          orderStatus.setOrder_remark( (String) JSONObject.fromObject(json.get("orderStatus")).get("order_remark"));
                          orderStatus.setOrder_status((String) JSONObject.fromObject(json.get("orderStatus")).get("order_status")); 
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return orderStatus ;
            }

}

 


分享到: