导出Excel前端:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<#assign title = '订单列表' />
<#include '/new_store/common/header.html' />
<link rel="stylesheet" href="${ctx}${themes_path}/new_store/css/pages/transaction/order.css">
<script type="text/javascript" src="${ctx}${themes_path}/new_store/js/pages/transaction/order.js"></script>
<script type="text/javascript" src="${ctx}${themes_path}/js/My97DatePicker/WdatePicker.js"></script>
</head>
<body>
<#assign mainPageName = 'main_transaction' />
<#assign lowerPageName = 'lower_transaction_order' />
<#include '/new_store/common/sidebar.html' />
<div class="app-nav">
<ul class="list-nav">
<li><a href="./order.html">订单列表</a></li>
</ul>
</div>
</script>
<script type="text/javascript">
/* $(function(){
});
//checkbox 全选/取消全选
var isCheckAll = false;
function swapCheck() {
if (isCheckAll) {
$("input[type='checkbox']").each(function() {
this.checked = false;
});
isCheckAll = false;
} else {
$("input[type='checkbox']").each(function() {
this.checked = true;
});
isCheckAll = true;
obj = document.getElementsByName("ordersn");
check_val = [];
for(k in obj){
if(obj[k].checked)
check_val.push(obj[k].value);
}
alert(check_val);
$('.export-excel').click(function(){
window.open("${ctx}"+"/api/store/store-order/export-excel.do?ordersn="+check_val);
});
}
}
function oneCheck(){
obj = document.getElementsByName("ordersn");
check_val = [];
for(k in obj){
if(obj[k].checked)
check_val.push(obj[k].value);
}
$('.export-excel').click(function(){
window.open("${ctx}"+"/api/store/store-order/export-excel.do?ordersn="+check_val);
});
} */
$(function(){
(function(){
var checkAllBtn = $('.check-all'), checkBox = $('.checkbox'), checkBoxLen = checkBox.length;
checkAllBtn.unbind('click').on('click', function(){
var _this = $(this);
if(_this.is(':checked')){
checkBox.prop('checked', true);
obj = document.getElementsByName("order_id");
check_val = [];
for(i in obj){
if(obj[i].checked)
check_val.push(obj[i].value);
}
alert(check_val);
}else {
checkBox.removeAttr('checked');
};
});
checkBox.unbind('click').on('click', function(){
/* var _this = $(this);
var obj = _this.attr("order_id");
check_val = [];
for(var i = 0; i<obj.length;i++){
if(obj[i].checked){
check_val = check_val + obj[i].value+",";
}
} */
obj = document.getElementsByName("order_id");
check_val = [];
for(i in obj){
if(obj[i].checked)
check_val.push(obj[i].value);
}
alert(check_val);
});
})();
//导出订单
(function () {
var export_excel = $('.export-excel');
export_excel.unbind('click').on('click', function (e) {
var _this = $(this),
order_id=$('.checkbox').attr("order_id")
if($('.checkbox').length<1){
$.message.error('请选择要导出的订单');
return false;
};
window.open("${ctx}"+"/api/store/store-order/export-excel.do?order_id="+check_val);
});
})();
//导出订单
/* (function(){
var export_excel=$('.export-excel');
export_excel.unbind('click').on('click', function(){
var _this = $(this),
order_id = _this.attr("order_id");
alert(1111);
if($('.checkbox').length<1){
$.message.error('请选择要导出的订单');
return false;
};
select(order_id);
function select(k){
location.href="${ctx}"+"/api/store/store-order/export-excel.do?ordersn="+k;
};
})(); */
});
</script>
<!--主页面区↓-->
<div class="app-wappler">
<div class="inner-app-wappler">
<!-- 获取店铺订单标签 -->
<#assign storeorderList=newTag("storeOrderListTag")/>
<#assign orderList=storeorderList()/>
<div>
<script>
</script>
</div>
<!-- <#assign orderstatus= "com.enation.app.shop.front.tag.order.OrderStatusDirectiveModel"?new()> -->
<div class="order-wappler">
<div class="filter-tools">
<div class="filter-box filter-sn">
<span>订单编号:</span>
<input type="text" class="form-control" id="filter_sn">
</div>
<div class="filter-box filter-customer">
<span>买家姓名/手机号:</span>
<input type="text" class="form-control" id="filter_customer">
</div>
<div class="filter-box filter-goods">
<span>订单包含商品:</span>
<input type="text" class="form-control" id="filter_goods">
</div>
<div class="filter-box filter-time">
<span>下单时间:</span>
<input type="text" class="form-control" id="filter_start_time" οnclick="WdatePicker();" readonly>
<span style="float: left; "> - </span>
<input type="text" class="form-control" id="filter_end_time" οnclick="WdatePicker();" readonly>
<a href="javascript: void(0);" class="btn btn-info" id="filter_seach" style="margin-top:10px;margin-left:20px;padding:6px 20px;">搜索</a>
</div>
<!-- <div class="filter-box filter-seach">
<a href="javascript: void(0);" class="btn btn-info" id="filter_seach">搜索</a>
<a href="javascript: void(0);" class="btn btn-info" id="print_item">打印发货单</a>
<a href="javascript: void(0);" class="btn btn-info" id="export_order">导出订单</a>
</div>
-->
</div>
<div class="app-tab-tools">
<ul style="display:inline-block;">
<li <#if order_state?? && order_state=="all"> class="active" order_state="${order_state}"</#if> ><a href="javascript: void(0);" order_state="all">全部</a></li>
<li <#if order_state?? && order_state=="1"> class="active" order_state="${order_state}"</#if> ><a href="javascript: void(0);" order_state="1">待接订单</a></li>
<li <#if order_state?? && order_state=="2"> class="active" order_state="${order_state}"</#if> ><a href="javascript: void(0);" order_state="2">待出库订单</a></li>
<li <#if order_state?? && order_state=="3"> class="active" order_state="${order_state}"</#if> ><a href="javascript: void(0);" order_state="3">已发货</a></li>
<!-- <li <#if order_state?? && order_state=="wait_pay"> class="active" order_state="${order_state}"</#if> ><a href="javascript: void(0);" order_state="wait_pay" title="货到付款订单待收款">待收款</a></li> -->
<li <#if order_state?? && order_state=="5"> class="active" order_state="${order_state}"</#if> ><a href="javascript: void(0);" order_state="5">已完成</a></li>
<li <#if order_state?? && order_state=="rog"> class="active" order_state="${order_state}"</#if> ><a href="javascript: void(0);" order_state="rog">退换货中</a></li>
</ul>
<div style="display:inline-block;float:right;margin-right:55px;">
<a href="javascript: void(0);" class="btn btn-info" id="print_item">打印发货单</a>
<a class="btn btn-info export-excel" href="javascript://" >导出订单</a>
</div>
</div>
<div class="order-list">
<table class="order-table">
<thead class="thead-order-table">
<tr class="tools-thead">
<!-- 全选 -->
<th><input type="checkbox" class="check-all" /></th>
<th class="goods-price-num"><span class="goods">订单号</span><span class="price-num">单价/数量</span></th>
<!-- <th class="customer">买家</th> -->
<th class="time">下单时间</th>
<th class="state">订单状态</th>
<th class="pay-price">实付金额</th>
</tr>
</thead>
<#if orderList.totalCount != 0 >
<tbody class="order-list-item">
<#list orderList.storeOrder.result as order>
<#if order.gift_id != 0>
<#-- 获取会员订单促销活动赠品信息 -->
<#assign orderGiftDetailTag = newTag("orderGiftDetailTag")>
<#-- 调用会员订单促销活动赠品信息标签 -->
<#assign activityGift = orderGiftDetailTag("{'gift_id':${order.gift_id},'order_id':${order.order_id}}")>
</#if>
<#if order.bonus_id != 0>
<#-- 获取会员订单促销活动优惠券信息 -->
<#assign orderBonusDetailTag = newTag("orderBonusDetailTag")>
<#-- 调用会员订单促销活动优惠券信息标签 -->
<#assign bonus = orderBonusDetailTag("{'bonus_id':${order.bonus_id},'order_id':${order.order_id}}")>
</#if>
<tr class="order-list-hr"></tr>
<tr class="order-header">
<!-- 单选 -->
<td> <input type="checkbox" name="order_id" value="${order.order_id}" order_id="${order.order_id}" class="checkbox" /></td>
<td class="sn-order-header">订单编号:${order.sn}</td>
<td></td>
<td></td>
<!-- <td></td> -->
<td class="tools-order-header">
<a href="javascript: void(0);" sn="${order.sn}">查看详情</a>
</td>
</tr>
<!-- <#--创建“订单货物列表”标签-->
<#assign orderItemListTag = newTag("orderItemListTag")>
<#--调用“订单货物列表”标签,并传递参数-->
<#assign orderItemList = orderItemListTag("{'orderid':${order.order_id}}")>
<#list orderItemList as item>
<#-- 创建商品基本信息标签 -->
<#assign goodsBaseDataTag = newTag("goodsBaseDataTag") >
<#-- 调用标签获取商品基本信息 -->
<#assign goods = goodsBaseDataTag("{'goodsid':${item.goods_id}}") >
<#if goods.disabled =2>
<tr class="order-header">
<td class="sn-order-header">订单编号:${order.sn}(已失效)</td>
<td></td>
<td></td>
<td></td>
<td class="tools-order-header">
<a href="javascript: void(0);" sn="${order.sn}">查看详情</a>
</td>
</tr>
<#else>
<tr class="order-header">
<td class="sn-order-header">订单编号:${order.sn}</td>
<td></td>
<td></td>
<td></td>
<td class="tools-order-header">
<a href="javascript: void(0);" sn="${order.sn}">查看详情</a>
</td>
</tr>
</#if>
</#list> -->
<#--创建“订单货物列表”标签-->
<#assign orderItemListTag = newTag("orderItemListTag")>
<#--调用“订单货物列表”标签,并传递参数-->
<#assign orderItemList = orderItemListTag("{'orderid':${order.order_id}}")>
<tr class="order-content">
<!-- 单选 -->
<td></td>
<td class="goods-price-num">
<#list orderItemList as item>
<p class="item-goods-price-num">
<#if item.image?? >
<img src="${item.image!''}" />
<#else>
<img src="${ctx}/statics/images/no_picture.jpg" />
</#if>
<a target="_blank" href="${ctx}/goods-${item.goods_id}.html"><@substring title="${item.name}" length="48" dot="..." /></a>
<span class="price-num">${item.price?string.currency} x ${item.num}</span>
<#-- 创建商品基本信息标签 -->
<#assign goodsBaseDataTag = newTag("goodsBaseDataTag") >
<#-- 调用标签获取商品基本信息 -->
<#assign goods = goodsBaseDataTag("{'goodsid':${item.goods_id}}") >
</p>
</#list>
</td>
<!-- <td class="order-customer">
<span>${order.uname!''}</span>
</td> -->
<td class="order-time">
<span><@dateformat time="${order.create_time?c}" pattern="yyyy-MM-dd HH:mm"/></span>
</td>
<td class="order-state">
<span>
<#-- 判断是否申请取消订单 -->
<#if order.is_cancel==1>
申请取消订单
<#else>
<@orderstatus status="${order.status}" type="order" />
<#if (order.status == 5) || (order.status == 3)>
<span>(<a href="javascript: void(0);" class="order-exp-info" order_sn="${order.sn}">查看物流</a>)</span>
</#if>
</#if>
</span>
</td>
<td class="order-pay-price">
<div>
<strong style="color: red; ">${order.need_pay_money?string.currency}</strong>
<p class="other">
<span>运费(${(order.shipping_amount!0)?string.currency})</span><br>
<span style="position: relative; top: 5px;;">${order.payment_name}</span>
</p>
</div>
</td>
</tr>
</#list>
</tbody>
</table>
<div class="app-paging-tools">
<div class="demo"></div>
<div class="paging">
<@pager pageno="${orderList.page!'1'}" pagesize="${orderList.pageSize}" totalcount="${orderList.totalCount}" />
</div>
</div>
<#else>
</table>
<div style="height: 10px; background-color: #FFFFFF; "></div>
<div class="app-no-data">
<span class="a-no-data">暂无相关数据</span>
</div>
</#if>
</div>
</div>
</div>
</div>
<!--主页面区↑-->
<!--<div class="app-help">
<div class="head-help">
<span class="icomoon question-ico"></span>
<a href="javascript: void(0);" class="title-help">帮助和服务</a>
<span class="icomoon close-ico" title="关闭">x</span>
</div>
<div class="body-help">
<p>帮</p>
<p>助</p>
<p>与</p>
<p>客</p>
<p>服</p>
</div>
</div>
<div class="open-help">
<span class="icomoon question-ico"></span>
<a href="javascript: void(0);" class="title-help">帮助和服务</a>
</div>-->
</body>
</html>
controller:
package com.enation.app.b2b2c.front.api.order;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.enation.app.b2b2c.component.bonus.model.StoreBonusType;
import com.enation.app.b2b2c.component.bonus.service.IB2b2cBonusManager;
import com.enation.app.b2b2c.component.plugin.order.StoreCartPluginBundle;
import com.enation.app.b2b2c.core.goods.service.StoreCartContainer;
import com.enation.app.b2b2c.core.goods.service.StoreCartKeyEnum;
import com.enation.app.b2b2c.core.member.model.StoreMember;
import com.enation.app.b2b2c.core.member.service.IStoreMemberManager;
import com.enation.app.b2b2c.core.order.model.StoreOrder;
import com.enation.app.b2b2c.core.order.service.IStoreOrderManager;
import com.enation.app.b2b2c.core.order.service.cart.IStoreCartManager;
import com.enation.app.b2b2c.core.store.service.activity.IStoreActivityGiftManager;
import com.enation.app.base.core.model.Member;
import com.enation.app.base.core.service.IRegionsManager;
import com.enation.app.shop.component.bonus.service.IBonusManager;
import com.enation.app.shop.core.member.model.MemberAddress;
import com.enation.app.shop.core.member.service.IMemberAddressManager;
import com.enation.app.shop.core.order.model.Order;
import com.enation.app.shop.core.order.model.OrderItem;
import com.enation.app.shop.core.order.model.support.OrderPrice;
import com.enation.app.shop.core.order.service.ICartManager;
import com.enation.app.shop.core.order.service.IOrderFlowManager;
import com.enation.app.shop.core.order.service.IOrderManager;
import com.enation.app.shop.core.order.service.IOrderPrintManager;
import com.enation.app.shop.core.order.service.IOrderReportManager;
import com.enation.app.shop.core.order.service.IPaymentManager;
import com.enation.app.shop.core.other.model.ActivityDetail;
import com.enation.app.shop.core.other.service.IActivityDetailManager;
import com.enation.eop.sdk.context.UserConext;
import com.enation.framework.action.GridController;
import com.enation.framework.action.JsonResult;
import com.enation.framework.context.webcontext.ThreadContextHolder;
import com.enation.framework.util.CurrencyUtil;
import com.enation.framework.util.JsonResultUtil;
import com.enation.framework.util.StringUtil;
import com.ibm.icu.util.Region;
/**
* 店铺订单API
*
* @author LiFenlong SpringMVC改造
* @date 2016-03-04
* @since 6.0
* @author chopper
* @author Kanon 2016年7月6日;增加审核取消订单申请方法
*/
@Controller
@RequestMapping("/api/store/store-order")
public class StoreOrderApiController extends GridController {
@Autowired
private IOrderManager orderManager;
@Autowired
private IStoreOrderManager storeOrderManager;
@Autowired
private IOrderFlowManager orderFlowManager;
@Autowired
private IMemberAddressManager memberAddressManager;
@Autowired
private IOrderPrintManager orderPrintManager;
@Autowired
private IStoreCartManager storeCartManager;
@Autowired
private IStoreMemberManager storeMemberManager;
@Autowired
private ICartManager cartManager;
@Autowired
private StoreCartPluginBundle storeCartPluginBundle;
@Autowired
private IBonusManager bonusManager;
@Autowired
private IOrderReportManager orderReportManager;
/** 行政区划管理接口 add by DMRain 2016-4-26 */
@Autowired
private IRegionsManager regionsManager;
/** 支付方式管理接口 add by DMRain 2016-4-26 */
@Autowired
private IPaymentManager paymentManager;
/** 促销活动优惠详细管理接口 add by DMRain 2016-4-26 */
@Autowired
private IActivityDetailManager activityDetailManager;
/** 促销活动赠品管理接口 add by DMRain 2016-4-26 */
@Autowired
private IStoreActivityGiftManager storeActivityGiftManager;
/** 店铺促销优惠券管理接口 add by xulipeng 2017年01月05日 */
@Autowired
private IB2b2cBonusManager b2b2cBonusManager;
/**
* 创建订单,需要购物车中有商品
*
* @param address_id
* :收货地址id.int型,必填项
* @param payment_id
* :支付方式id,int型,必填项
* @param shipDay
* :配送时间,String型 ,可选项
* @param shipTime
* ,String型 ,可选项
* @param remark
* ,String型 ,可选项
*
* @return 返回json串 result 为1表示添加成功0表示失败 ,int型 message 为提示信息
*
*/
@ResponseBody
@RequestMapping(value = "create")
public JsonResult create() {
try {
// 原来没有权限校验
// 增加权限校验
/*StoreMember member = storeMemberManager.getStoreMember();*/
Member member =UserConext.getCurrentMember();
if (member == null) {
return JsonResultUtil.getErrorJson("请登录!");
}
HttpServletRequest request = ThreadContextHolder.getHttpRequest();
// 获取用户选择的支付方式ID
Integer paymentId = StringUtil.toInt(request.getParameter("paymentId"), 0);
// 通过支付ID获取支付方式类型
String payType = "";
if (paymentId.intValue() == 0) { // 支付方式为0,是在线支付。
payType = "online";
} else {
payType = this.paymentManager.get(1).getType();
}
// 获取用户选中的收货地址
MemberAddress address = StoreCartContainer.getUserSelectedAddress();
// 判断收货地址不能为空
if (address == null) {
return JsonResultUtil.getErrorJson("收货地址不能为空");
}
// 如果用户选择的是货到付款
if (payType.equals("cod")) {
// 如果用户选择的收货地区不支持货到付款(对省、市、区三级都要做判断)
if (regionsManager.get(address.getProvince_id()).getCod() != 1) {
return JsonResultUtil.getErrorJson("您选择的收货地址不支持货到付款!");
}
if (regionsManager.get(address.getCity_id()).getCod() != 1) {
return JsonResultUtil.getErrorJson("您选择的收货地址不支持货到付款!");
}
if (regionsManager.get(address.getRegion_id()).getCod() != 1) {
return JsonResultUtil.getErrorJson("您选择的收货地址不支持货到付款!");
}
}
Order order = this.innerCreateOrder();
// // 获取红包,使用红包
// Map<Integer, MemberBonus> map = (Map)
// ThreadContextHolder.getSession().getAttribute(BonusSession.B2B2C_SESSIONKEY);
// if (map != null) {
// for (MemberBonus mb : map.values()) {
// if (mb != null) {
// bonusManager.use(mb.getBonus_id(), order.getMember_id(),
// order.getOrder_id(), order.getSn(),mb.getBonus_type_id());
// }
// }
// }
return JsonResultUtil.getObjectJson(order);
} catch (RuntimeException e) {
this.logger.error("创建订单出错", e);
return JsonResultUtil.getErrorJson("创建订单出错:" + e.getMessage());
}
}
/**
* 改变店铺的配送方式以及红包<br>
* 调用此api时必须已经访问过购物车列表<br>
*
* @return 含有价格信息的json串
*/
@SuppressWarnings("rawtypes")
@ResponseBody
@RequestMapping(value = "change-args-type")
public JsonResult changeArgsType(Integer regionid, Integer store_id, Integer type_id) {
// 修改优惠券
// changeBonus(bonus_id, store_id);
// 由购物车列表中获取此店铺的相关信息
Map storeData = StoreCartContainer.getStoreData(store_id);
// 获取此店铺的购物列表
List list = (List) storeData.get(StoreCartKeyEnum.goodslist.toString());
// 配送地区
String regionid_str = regionid == null ? "" : regionid + "";
// 计算此配送方式时的店铺相关价格
OrderPrice orderPrice = this.cartManager.countPrice(list, type_id, regionid_str);
// 激发计算子订单价格事件
orderPrice = storeCartPluginBundle.countChildPrice(orderPrice);
// 获取购物车中已经选择的商品的订单价格 by_DMRain 2016-6-28
OrderPrice storePrice = (OrderPrice) storeData.get(StoreCartKeyEnum.storeprice.toString());
Double act_discount = storePrice.getActDiscount();
// 如果促销活动优惠的现金不为空 by_DMRain 2016-6-28
if (act_discount != null && act_discount != 0) {
orderPrice.setActDiscount(act_discount);
orderPrice.setNeedPayMoney(orderPrice.getNeedPayMoney() - act_discount);
}
Integer activity_id = (Integer) storeData.get("activity_id");
// 如果促销活动id不为空 by_DMRain 2016-6-28
if (activity_id != null) {
ActivityDetail detail = this.activityDetailManager.getDetail(activity_id);
// 如果促销活动包含了免运费的优惠内容 by_DMRain 2016-6-28
if (detail.getIs_free_ship() == 1) {
orderPrice.setIs_free_ship(1);
orderPrice.setAct_free_ship(orderPrice.getShippingPrice());
orderPrice.setShippingPrice(0d);
}
// 如果促销含有送积分的活动
if (detail.getIs_send_point() == 1) {
orderPrice.setPoint(detail.getPoint_value());
// xulipeng 修复促销活动赠送积分
orderPrice.setActivity_point(detail.getPoint_value());
}
// 如果促销含有送赠品的活动
if (detail.getIs_send_gift() == 1) {
// 获取赠品的可用库存
Integer enable_store = this.storeActivityGiftManager.get(detail.getGift_id()).getEnable_store();
// 如果赠品的可用库存大于0
if (enable_store > 0) {
orderPrice.setGift_id(detail.getGift_id());
}
}
// 如果促销含有送优惠券的活动
if (detail.getIs_send_bonus() == 1) {
// 获取店铺优惠券信息
StoreBonusType bonus = this.b2b2cBonusManager.getBonus(detail.getBonus_id());
// 优惠券发行量
int createNum = bonus.getCreate_num();
// 获取优惠券已被领取的数量
int count = this.b2b2cBonusManager.getCountBonus(detail.getBonus_id());
// 如果优惠券的发行量大于已经被领取的优惠券数量
if (createNum > count) {
orderPrice.setBonus_id(detail.getBonus_id());
}
}
}
// 切换配送方式时,减去当前店铺已使用的优惠券金额
orderPrice.setNeedPayMoney(CurrencyUtil.sub(orderPrice.getNeedPayMoney(), storePrice.getDiscountPrice()));
orderPrice.setDiscountPrice(storePrice.getDiscountPrice());
// 重新压入此店铺的订单价格和配送方式id
storeData.put(StoreCartKeyEnum.storeprice.toString(), orderPrice);
storeData.put(StoreCartKeyEnum.shiptypeid.toString(), type_id);
return JsonResultUtil.getObjectJson(orderPrice, "storeprice");
}
/**
* 改变收货地址<br>
* 调用此api时会更改session中的用户选中的地址
*
* @return
*/
@ResponseBody
@RequestMapping(value = "change-address")
public JsonResult changeAddress(Integer address_id) {
try {
// 根据id得到地址后压入session
MemberAddress address = this.memberAddressManager.getAddress(address_id);
StoreCartContainer.putSelectedAddress(address);
// 重新计算价格
this.storeCartManager.countPrice("yes");
// 要重新计算一遍购物车中已选择结算的商品费用,并将各种信息put进session中 add_by DMRain 2016-8-8
this.storeCartManager.countSelectPrice("yes");
// 由session中获取店铺购物车数据,已经是计算过费用的了
List<Map> storeCartList = StoreCartContainer.getSelectStoreCartListFromSession();
List newList = new ArrayList();
for (Map map : storeCartList) {
// add by jianghongyan 增加region_id字段
map.put("region_id", address.getRegion_id());
Map jsonMap = new HashMap();
jsonMap.putAll(map);
jsonMap.remove(StoreCartKeyEnum.goodslist.toString());
newList.add(jsonMap);
OrderPrice storeOrderPrice = (OrderPrice) map.get(StoreCartKeyEnum.storeprice.toString());
if (storeOrderPrice != null) {
storeOrderPrice.setNeedPayMoney(
CurrencyUtil.sub(storeOrderPrice.getNeedPayMoney(), storeOrderPrice.getDiscountPrice()));
}
// 在切换收货地址并保存时,要将session中的店铺优惠券信息去掉,这样是为了防止订单价格混乱 add_by DMRain
// 2016-8-9
Integer store_id = (Integer) map.get("store_id");
if (store_id != null) {
// BonusSession.cancelB2b2cBonus(store_id);
}
}
return JsonResultUtil.getObjectJson(newList);
} catch (Exception e) {
return JsonResultUtil.getErrorJson(e.getMessage());
}
}
/**
* 订单确认
*
* @param orderId
* 订单Id,Integer
* @return 返回json串 result 为1表示调用成功0表示失败
*/
@ResponseBody
@RequestMapping(value = "confirm")
public JsonResult confirm(Integer orderId) {
try {
// 增加权限校验
StoreMember member = storeMemberManager.getStoreMember();
if (member == null) {
return JsonResultUtil.getErrorJson("请登录!订单确认失败!");
}
StoreOrder order = storeOrderManager.get(orderId);
if (order == null || !order.getStore_id().equals(member.getStore_id())) {
return JsonResultUtil.getErrorJson("您没有权限");
}
this.orderFlowManager.confirmOrder(orderId);
// this.orderFlowManager.addCodPaymentLog(order);
return JsonResultUtil.getSuccessJson("'订单[" + order.getSn() + "]成功确认'");
} catch (RuntimeException e) {
if (logger.isDebugEnabled()) {
logger.debug(e);
}
return JsonResultUtil.getErrorJson("订单确认失败" + e.getMessage());
}
}
/**
* 编辑订单状态
*
* @param orderId
* 订单Id,Integer
* @return 返回json串 result 为1表示调用成功0表示失败
* @author lvjianjian
*/
@ResponseBody
@RequestMapping(value = "editOrder")
public JsonResult wiatOrder(Integer item_id,Integer status,Integer state,Integer id,Integer orderId) {
try {
// 增加权限校验
StoreMember member = storeMemberManager.getStoreMember();
if (member == null) {
return JsonResultUtil.getErrorJson("请登录!");
}
StoreOrder order = storeOrderManager.get(orderId);
if (order == null || !order.getStore_id().equals(member.getStore_id())) {
return JsonResultUtil.getErrorJson("您没有权限");
}
this.orderFlowManager.editOrder(item_id,status,state,id,orderId);
return JsonResultUtil.getSuccessJson("成功");
// this.orderFlowManager.addCodPaymentLog(order);
} catch (RuntimeException e) {
if (logger.isDebugEnabled()) {
logger.debug(e);
}
return JsonResultUtil.getErrorJson("失败" + e.getMessage());
}
}
/*
* 导出订单
* @param response
*
* @exception Exception
*
* @author lvjianjian
*/
@ResponseBody
@RequestMapping(value = "/export-excel")
public void exportExcel(HttpServletResponse response,Integer [] order_id) {
// 创建HSSFWorkbook对象(excel的文档对象)
HSSFWorkbook wb = new HSSFWorkbook();
try {
List<Map> get = storeOrderManager.getList(order_id);
// 建立新的sheet对象(excel的表单)
HSSFSheet sheet = wb.createSheet("导出订单");
// 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
HSSFRow row1 = sheet.createRow(0);
// 创建单元格并设置单元格内容
/*row1.createCell(1).setCellValue("订单号");*/
HSSFCell c0 = row1.createCell(0);
c0.setCellValue(new HSSFRichTextString("订单号"));
row1.createCell(2).setCellValue("数量");
row1.createCell(4).setCellValue("金额");
row1.createCell(6).setCellValue("下单时间");
row1.createCell(8).setCellValue("订单状态");
row1.createCell(10).setCellValue("实付金额");
for (int i = 0; i < get.size(); i++) {
// 在sheet里创建第三行
HSSFRow row = sheet.createRow(i + 1);
row.createCell(0).setCellValue(String.valueOf(get.get(i).get("sn")==null?"":get.get(i).get("sn")));
row.createCell(2).setCellValue(String.valueOf(get.get(i).get("num")==null?"":get.get(i).get("num")));
row.createCell(4).setCellValue(String.valueOf(get.get(i).get("price")==null?"":get.get(i).get("price")));
row.createCell(6).setCellValue(String.valueOf(get.get(i).get("time")==null?"":get.get(i).get("time")));
if ((get.get(i).get("status")==null?"":get.get(i).get("status")).equals(1) )
{
row.createCell(8).setCellValue("待接单");
}
else if((get.get(i).get("status")==null?"":get.get(i).get("status")).equals(2) )
{
row.createCell(8).setCellValue("待出库");
}
else if((get.get(i).get("status")==null?"":get.get(i).get("status")).equals(3) )
{
row.createCell(8).setCellValue("已发货");
}
else if((get.get(i).get("status")==null?"":get.get(i).get("status")).equals(7) )
{
row.createCell(8).setCellValue("已完成");
}
else{
row.createCell(8).setCellValue("");
}
row.createCell(10).setCellValue(String.valueOf(get.get(i).get("need_pay_money")==null?"":get.get(i).get("need_pay_money")));
}
// 输出Excel文件
response.reset();
response.setHeader("Content-disposition", "attachment; filename=orderDetails.xls");
response.setContentType("application/msexcel");
wb.write(response.getOutputStream());
wb.close();
} catch (Exception ex) {
this.logger.error("导出数据失败", ex);
try {
wb.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 订单支付
*
* @param orderId
* 订单Id,Integer
* @param member
* 店铺会员,StoreMember
* @param paymentId
* 结算单Id,Integer
* @param payMoney
* 付款金额,Double
* @return 返回json串 result 为1表示调用成功0表示失败
*/
@ResponseBody
@RequestMapping(value = "pay")
public JsonResult pay(Integer orderId, Double payMoney) {
try {
// 获取当前操作者
StoreMember member = storeMemberManager.getStoreMember();
Order order = this.orderManager.get(orderId);
Integer paymentId = orderReportManager.getPaymentLogId(orderId);
// 调用执行添加收款详细表
if (orderFlowManager.pay(paymentId, orderId, payMoney, member.getUname())) {
return JsonResultUtil.getSuccessJson("订单[" + order.getSn() + "]收款成功");
} else {
return JsonResultUtil.getErrorJson("订单[" + order.getSn() + "]收款失败,您输入的付款金额合计大于应付金额");
}
} catch (RuntimeException e) {
if (logger.isDebugEnabled()) {
logger.debug(e);
}
return JsonResultUtil.getErrorJson("确认付款失败:" + e.getMessage());
}
}
/**
* 订单发货
*
* @param order_id
* 订单Id,Integer[]
* @return 返回json串 result 为1表示调用成功0表示失败
*/
@ResponseBody
@RequestMapping(value = "ship")
public JsonResult ship(Integer[] order_id, String[] shipNos, Integer[] logi_id, String[] logi_name) {
try {
// 增加权限校验
StoreMember member = storeMemberManager.getStoreMember();
if (member == null) {
return JsonResultUtil.getErrorJson("请登录!订单发货失败!");
}
StoreOrder order = storeOrderManager.get(order_id[0]);
if (order == null || !order.getStore_id().equals(member.getStore_id())) {
return JsonResultUtil.getErrorJson("您没有权限");
}
storeOrderManager.saveShipNo(order_id, logi_id[0], logi_name[0], shipNos[0]);
String is_ship = orderPrintManager.ship(order_id);
if (is_ship.equals("true")) {
return JsonResultUtil.getSuccessJson("发货成功");
} else {
return JsonResultUtil.getErrorJson(is_ship);
}
} catch (Exception e) {
this.logger.error("发货出错", e);
return JsonResultUtil.getErrorJson(e.getMessage());
}
}
/**
*
* recive:(接单). <br/>
* @param order_id
* @return
* @author hanxin
* @date 2017年8月9日
*/
@ResponseBody
@RequestMapping(value = "recive")
public JsonResult recive(String orderId,Integer[] itemIds) {
try {
// 增加权限校验
StoreMember member = storeMemberManager.getStoreMember();
if (member == null) {
return JsonResultUtil.getErrorJson("请登录!订单接单失败!");
}
StoreOrder order = storeOrderManager.get(orderId);
if (order == null || !order.getStore_id().equals(member.getStore_id())) {
return JsonResultUtil.getErrorJson("您没有权限");
}
String is_ship = orderFlowManager.recive(orderId, itemIds);
if (is_ship.equals("true")) {
return JsonResultUtil.getSuccessJson("接单成功");
} else {
return JsonResultUtil.getErrorJson(is_ship);
}
} catch (Exception e) {
this.logger.error("接单出错", e);
return JsonResultUtil.getErrorJson(e.getMessage());
}
}
/**
*
* refuse:(拒绝接单). <br/>
* @param orderIds
* @param itemIds
* @return
* @author hanxin
* @date 2017年8月9日
*/
@ResponseBody
@RequestMapping(value = "refuse")
public JsonResult refuse(String orderId,Integer[] itemIds) {
try {
// 增加权限校验
StoreMember member = storeMemberManager.getStoreMember();
if (member == null) {
return JsonResultUtil.getErrorJson("请登录!拒绝接单失败!");
}
StoreOrder order = storeOrderManager.get(orderId);
if (order == null || !order.getStore_id().equals(member.getStore_id())) {
return JsonResultUtil.getErrorJson("您没有权限");
}
String is_ship = orderFlowManager.refuse(orderId, itemIds);
if (is_ship.equals("true")) {
return JsonResultUtil.getSuccessJson("拒绝接单成功");
} else {
return JsonResultUtil.getErrorJson(is_ship);
}
} catch (Exception e) {
this.logger.error("拒绝接单出错", e);
return JsonResultUtil.getErrorJson(e.getMessage());
}
}
/**
*
* ship:(通知物流). <br/>
* @param orderId
* @param itemIds
* @return
* @author hanxin
* @date 2017年8月10日
*/
@ResponseBody
@RequestMapping(value = "notice_express")
public JsonResult notice_express(String ordersn,String code, Integer[] logi_id, String[] logi_name) {
try {
// 增加权限校验
StoreMember member = storeMemberManager.getStoreMember();
if (member == null) {
return JsonResultUtil.getErrorJson("请登录!订单通知物流失败!");
}
StoreOrder order = storeOrderManager.get(ordersn);
if (order == null || !order.getStore_id().equals(member.getStore_id())) {
return JsonResultUtil.getErrorJson("您没有权限");
}
String is_ship = orderPrintManager.express(order, code, logi_id[0], logi_name[0]);
if (is_ship.equals("true")) {
return JsonResultUtil.getSuccessJson("通知物流成功");
} else {
return JsonResultUtil.getErrorJson(is_ship);
}
} catch (Exception e) {
this.logger.error("通知物流出错", e);
return JsonResultUtil.getErrorJson(e.getMessage());
}
}
@ResponseBody
@RequestMapping(value = "shipConfirm")
public JsonResult shipConfirm(Integer orderId)
{
try
{
// 增加权限校验
StoreMember member = storeMemberManager.getStoreMember();
if (member == null)
{
return JsonResultUtil.getErrorJson("请登录!订单通知物流失败!");
}
StoreOrder order = storeOrderManager.get(orderId);
if (order == null
|| !order.getStore_id().equals(member.getStore_id()))
{
return JsonResultUtil.getErrorJson("您没有权限");
}
orderFlowManager.shipconfirm(order);
return JsonResultUtil.getSuccessJson("通知物流成功");
}
catch (Exception e)
{
this.logger.error("通知物流出错", e);
return JsonResultUtil.getErrorJson(e.getMessage());
}
}
/**
* 修改配送费用
*
* @param orderId
* 订单Id,Integer
* @param currshipamount
* 修改前价格,Double
* @param member
* 店铺会员,StoreMember
* @return 返回json串 result 为1表示调用成功0表示失败
*/
@ResponseBody
@RequestMapping(value = "save-ship-price")
public JsonResult saveShipPrice(Integer orderId, Double shipmoney) {
try {
// 增加权限校验
StoreMember member = storeMemberManager.getStoreMember();
if (member == null) {
return JsonResultUtil.getErrorJson("请登录!修改费用失败!");
}
StoreOrder order = storeOrderManager.get(orderId);
if (order == null || !order.getStore_id().equals(member.getStore_id())) {
return JsonResultUtil.getErrorJson("您没有权限");
}
// 修改前价格
double currshipamount = orderManager.get(orderId).getShipping_amount();
double price = this.orderManager.saveShipmoney(shipmoney, orderId);
// 获取操作人,记录日志
this.orderManager.addLog(orderId, "运费从" + currshipamount + "修改为" + price, member.getUname());
return JsonResultUtil.getSuccessJson("保存成功");
} catch (RuntimeException e) {
this.logger.error(e.getMessage(), e);
return JsonResultUtil.getErrorJson("保存失败");
}
}
/**
* 修改订单金额
*
* @param orderId
* 订单Id,Integer
* @param amount
* 修改前价格,Double
* @param member
* 店铺会员,StoreMember
* @return 返回json串 result 为1表示调用成功0表示失败
*/
@ResponseBody
@RequestMapping(value = "save-price")
public JsonResult savePrice(Integer orderId, Double payMoney) {
try {
// 增加权限校验
StoreMember member = storeMemberManager.getStoreMember();
if (member == null) {
return JsonResultUtil.getErrorJson("请登录!修改订单金额失败!");
}
StoreOrder order = storeOrderManager.get(orderId);
if (order == null || !order.getStore_id().equals(member.getStore_id())) {
return JsonResultUtil.getErrorJson("您没有权限");
}
// 修改前价格
double amount = orderManager.get(orderId).getOrder_amount();
this.orderManager.savePrice(payMoney, orderId);
// 获取操作人,记录日志
orderManager.addLog(orderId, "运费从" + amount + "修改为" + payMoney, member.getUname());
return JsonResultUtil.getSuccessJson("修改订单价格成功");
} catch (Exception e) {
this.logger.error(e);
return JsonResultUtil.getErrorJson("修改订单价格失败");
}
}
/**
* 修改收货人信息
*
* @param orderId
* 订单Id,Integer
* @param member
* 店铺会员,StoreMember
* @param oldShip_day
* 修改前收货日期,String
* @param oldship_name
* 修改前收货人姓名,String
* @param oldship_tel
* 修改前收货人电话
* @param oldship_mobile
* 修改前收货人手机号
* @param oldship_zip
* 修改前邮编
*
* @param remark
* 订单备注,String
* @param ship_day
* 收货时间,String
* @param ship_name
* 收货人姓名,String
* @param ship_tel
* 收货人电话,String
* @param ship_mobile
* 收货人手机号,String
* @param ship_zip
* 邮政编号
* @return 返回json串 result 为1表示调用成功0表示失败
*/
@ResponseBody
@RequestMapping(value = "save-consigee")
public JsonResult saveConsigee(Integer orderId, String remark, String ship_day, String ship_name, String ship_tel,
String ship_mobile, String ship_zip, String addr) {
try {
// 增加权限校验
StoreMember member = storeMemberManager.getStoreMember();
if (member == null) {
return JsonResultUtil.getErrorJson("请登录!");
}
StoreOrder order = storeOrderManager.get(orderId);
if (order == null || !order.getStore_id().equals(member.getStore_id())) {
return JsonResultUtil.getErrorJson("您没有权限");
}
String oldship_day = order.getShip_day();
String oldship_name = order.getShip_name();
String oldship_tel = order.getShip_tel();
String oldship_mobile = order.getShip_mobile();
String oldship_zip = order.getShip_zip();
// 判断是否修改、收货日期、收件人姓名、收件人电话、收件人手机、收件人邮编
if (ship_day != null && !StringUtil.isEmpty(ship_day) && !ship_day.equals(oldship_day)) {
this.orderManager.addLog(orderId, "收货日期从['" + oldship_day + "']修改为['" + ship_day + "']",
member.getUname());
}
if (ship_name != null && !StringUtil.isEmpty(ship_name) && !ship_name.equals(oldship_name)) {
this.orderManager.addLog(orderId, "收货人姓名从['" + oldship_name + "']修改为['" + ship_name + "']",
member.getUname());
}
if (ship_tel != null && !StringUtil.isEmpty(ship_tel) && !ship_tel.equals(oldship_tel)) {
this.orderManager.addLog(orderId, "收货人电话从['" + oldship_tel + "']修改为['" + ship_tel + "']",
member.getUname());
}
if (ship_mobile != null && !StringUtil.isEmpty(ship_mobile) && !ship_mobile.equals(oldship_mobile)) {
this.orderManager.addLog(orderId, "收货人手机从['" + oldship_mobile + "']修改为['" + ship_mobile + "']",
member.getUname());
}
if (ship_zip != null && !StringUtil.isEmpty(ship_zip) && !ship_zip.equals(oldship_zip)) {
this.orderManager.addLog(orderId, "收货人邮编从['" + oldship_zip + "']修改为['" + ship_zip + "']",
member.getUname());
}
this.saveAddr(orderId, addr);
// 保存收货人信息
this.storeOrderManager.saveShipInfo(remark, ship_day, ship_name, ship_tel, ship_mobile, ship_zip, orderId);
return JsonResultUtil.getSuccessJson("修改成功");
} catch (Exception e) {
logger.error(e);
return JsonResultUtil.getSuccessJson("修改失败");
}
}
/**
* 审核取消订单申请 判断申请是否属于当前操作店铺如果是当前店铺才可进行操作
*
* @author Kanon
* @param order_id
* 订单Id
* @param status
* 状态 0,拒绝 1,通过
* @return
*/
@ResponseBody
@RequestMapping(value = "/auth-cancel-application", produces = MediaType.APPLICATION_JSON_VALUE)
public JsonResult authCancelApplication(Integer order_id, Integer status) {
try {
StoreOrder order = storeOrderManager.get(order_id);
if (!order.getStore_id().equals(storeMemberManager.getStoreMember().getStore_id())) {
return JsonResultUtil.getErrorJson("审核失败:当前操作订单非本店铺订单");
}
orderManager.authCancelApplication(order_id, status);
return JsonResultUtil.getSuccessJson("审核成功");
} catch (Exception e) {
this.logger.error("审核取消订单申请出错", e);
return JsonResultUtil.getErrorJson("审核失败:" + e.getMessage());
}
}
/**
* 支付
*
* @param orderId
* 订单Id,Integer
* @param payment_id
* 付款单Id,Integer
* @param paymoney
* 付款金额,Double
* @return
*/
@ResponseBody
@RequestMapping(value = "/cod-order-pay", produces = MediaType.APPLICATION_JSON_VALUE)
public JsonResult pay(Integer orderId, Double paymoney, Integer payment_id) {
try {
// 获取操作用户
String username = storeMemberManager.getStoreMember().getUname();
// 调用执行添加收款详细表
if (orderFlowManager.pay(payment_id, orderId, paymoney, username)) {
return JsonResultUtil.getSuccessJson("订单收款成功");
} else {
return JsonResultUtil.getErrorJson("订单收款失败,您输入的付款金额合计大于应付金额");
}
} catch (RuntimeException e) {
e.printStackTrace();
if (logger.isDebugEnabled()) {
logger.debug(e);
}
return JsonResultUtil.getErrorJson("确认付款失败:" + e.getMessage());
}
}
/**
* 修改配送地区
*
* @param province
* 省,String
* @param city
* 城市,String
* @param region
* 区,String
* @param Attr
* 详细地址,String
*
* @param province_id
* 省Id,String
* @param city_id
* 城市Id,String
* @param region_id
* 区Id,String
*
* @param oldAddr
* 修改前详细地址,String
* @param orderId
* 订单Id,Integer
* @return void
*/
private void saveAddr(Integer orderId, String addr) {
// 获取地区
HttpServletRequest request = ThreadContextHolder.getHttpRequest();
String province = request.getParameter("province");
String city = request.getParameter("city");
String region = request.getParameter("region");
String Attr = province + "-" + city + "-" + region;
// 获取地区Id
String province_id = request.getParameter("province_id");
String city_id = request.getParameter("city_id");
String region_id = request.getParameter("region_id");
// 记录日志,获取当前操作人
this.orderManager.saveAddr(orderId, StringUtil.toInt(province_id, true), StringUtil.toInt(city_id, true),
StringUtil.toInt(region_id, true), Attr);
this.orderManager.saveAddrDetail(addr, orderId);
}
/**
* 创建订单
*
* @return
*/
private Order innerCreateOrder() {
HttpServletRequest request = ThreadContextHolder.getHttpRequest();
Integer shippingId = 0; // 主订单没有配送方式
Integer paymentId = StringUtil.toInt(request.getParameter("paymentId"), 0);
Order order = new Order();
order.setShipping_id(shippingId); // 配送方式
order.setPayment_id(paymentId);// 支付方式
if (paymentId == 0) { // 如果支付方式为0,是在线支付
order.setIs_online(1);
}
// 用户选中的地址
MemberAddress address = StoreCartContainer.getUserSelectedAddress();
if (address == null) {
throw new RuntimeException("收货地址不能为空");
}
order.setShip_provinceid(address.getProvince_id());
order.setShip_cityid(address.getCity_id());
order.setShip_regionid(address.getRegion_id());
// 增加四级地区
if (address.getTown_id() != null && !address.getTown_id().equals(-1)) {
order.setShip_townid(address.getTown_id());
}
order.setShip_addr(address.getAddr());
order.setShip_mobile(address.getMobile());
order.setShip_tel(address.getTel());
order.setShip_zip(address.getZip());
if (StringUtil.isEmpty(address.getTown())) {
order.setShipping_area(address.getProvince() + "-" + address.getCity() + "-" + address.getRegion());
} else {
order.setShipping_area(address.getProvince() + "-" + address.getCity() + "-" + address.getRegion() + "-"
+ address.getTown());
}
order.setShip_name(address.getName());
order.setRegionid(address.getRegion_id());
order.setMemberAddress(address);
order.setShip_day(request.getParameter("shipDay"));
order.setShip_time(request.getParameter("shipTime"));
order.setRemark(request.getParameter("remark"));
order.setAddress_id(address.getAddr_id());
String sessionid = request.getSession().getId();
order = this.storeOrderManager.createOrder(order, sessionid);
return order;
}
}
manager:
package com.enation.app.b2b2c.core.order.service.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.enation.app.b2b2c.component.bonus.service.B2b2cBonusSession;
import com.enation.app.b2b2c.component.bonus.service.IB2b2cBonusManager;
import com.enation.app.b2b2c.core.goods.service.StoreCartContainer;
import com.enation.app.b2b2c.core.goods.service.StoreCartKeyEnum;
import com.enation.app.b2b2c.core.member.model.StoreMember;
import com.enation.app.b2b2c.core.member.service.IStoreMemberManager;
import com.enation.app.b2b2c.core.order.model.StoreOrder;
import com.enation.app.b2b2c.core.order.service.IStoreOrderManager;
import com.enation.app.b2b2c.core.order.service.cart.IStoreCartManager;
import com.enation.app.base.core.model.Member;
import com.enation.app.base.core.service.IMemberManager;
import com.enation.app.base.core.service.ISettingService;
import com.enation.app.shop.ShopApp;
import com.enation.app.shop.core.order.model.Order;
import com.enation.app.shop.core.order.model.support.CartItem;
import com.enation.app.shop.core.order.model.support.OrderPrice;
import com.enation.app.shop.core.order.plugin.cart.CartPluginBundle;
import com.enation.app.shop.core.order.plugin.order.OrderPluginBundle;
import com.enation.app.shop.core.order.service.ICartManager;
import com.enation.app.shop.core.order.service.IOrderFlowManager;
import com.enation.app.shop.core.order.service.IOrderManager;
import com.enation.app.shop.core.order.service.NewOrderStatus;
import com.enation.app.shop.core.order.service.OrderStatus;
import com.enation.eop.sdk.context.UserConext;
import com.enation.framework.database.IDaoSupport;
import com.enation.framework.database.Page;
import com.enation.framework.util.DateUtil;
import com.enation.framework.util.StringUtil;
/**
* 多店铺订单管理类<br>
* 负责多店铺订单的创建、查询
*
* @author kingapex
* @version 2.0: 对价格逻辑进行改造 2015年8月21日下午1:49:27
*
* @author xulipeng 2016年03月03日 改造springMVC
* @version 1.1 Kanon 2016年07月06日 修改会员订单列表查询方法
*/
@SuppressWarnings("rawtypes")
@Service("storeOrderManager")
public class StoreOrderManager implements IStoreOrderManager {
@Autowired
private IDaoSupport daoSupport;
@Autowired
private ICartManager cartManager;
@Autowired
private IStoreMemberManager storeMemberManager;
@Autowired
private IMemberManager memberManager;
@Autowired
private ISettingService settingService;
@Autowired
private CartPluginBundle cartPluginBundle;
@Autowired
private IOrderFlowManager OrderFlowManager;
@Autowired
private OrderPluginBundle orderPluginBundle;// 订单插件桩
@Autowired
private IB2b2cBonusManager b2b2cBonusManager;
/** 店铺购物车管理接口 add_by DMRain 2016-7-13 */
@Autowired
private IStoreCartManager storeCartManager;
@Autowired
private IOrderManager orderManager;
/*
* (non-Javadoc)
*
* @see
* com.enation.app.b2b2c.core.service.order.IStoreOrderManager#createOrder(
* com.enation.app.shop.core.model.Order, java.lang.String,
* java.lang.String[])
*/
@Override
@Transactional(propagation = Propagation.REQUIRED)
public Order createOrder(Order order, String sessionid) {
// 读取所有的购物项,用于创建主订单
List<CartItem> cartItemList = this.cartManager.listGoods(sessionid);
if (cartItemList == null || cartItemList.size() == 0) {
throw new RuntimeException("购物车不能为空");
}
// 商家能否购买自己的商品
final String CAN_BY_SELF = settingService.getSetting("store", "buy_self_auth");
if (!"1".equals(CAN_BY_SELF)) {
Member nowaMember = UserConext.getCurrentMember();
if (nowaMember != null) {
for (CartItem cartItem : cartItemList) {
if (cartItem != null && cartItem.getIs_check() == 1) {
Member belongTo = memberManager.getByGoodsId(cartItem.getGoods_id());
if (belongTo != null && belongTo.getMember_id().equals(nowaMember.getMember_id())) {
throw new RuntimeException("抱歉!您不能购买自己的商品:" + cartItem.getName() + "。");
}
}
}
}
}
// 调用核心api计算总订单的价格,商品价:所有商品,商品重量:
OrderPrice orderPrice = cartManager.countPrice(cartItemList, order.getShipping_id(), "" + order.getRegionid());
// 激发总订单价格事件
orderPrice = this.cartPluginBundle.coutPrice(orderPrice);
// 设置订单价格,自动填充好各项价格,商品价格,运费等
order.setOrderprice(orderPrice);
order.setWeight(orderPrice.getWeight());
// 调用核心api创建主订单
Order mainOrder = this.OrderFlowManager.add(order, new ArrayList<CartItem>(), sessionid);
// 创建子订单
this.createChildOrder(mainOrder, sessionid);
// 创建完子订单再清空session
cartManager.clean(sessionid);
StoreCartContainer.cleanSession();
//清空所有已使用的优惠券
B2b2cBonusSession.cleanAll();
// 返回主订单
return mainOrder;
}
/*
* (non-Javadoc)
*
* @see com.enation.app.b2b2c.core.service.order.IStoreOrderManager#
* storeOrderList(java.lang.Integer, java.lang.Integer, java.util.Map)
*/
@Override
public Page storeOrderList(Integer pageNo, Integer pageSize,Integer storeid,Map map) {
String order_state=String.valueOf(map.get("order_state"));
String keyword=String.valueOf(map.get("keyword"));
String buyerName=String.valueOf(map.get("buyerName"));
String startTime=String.valueOf(map.get("startTime"));
String endTime=String.valueOf(map.get("endTime"));
//在该处获取订单中包含商品
String goods=String.valueOf(map.get("goods"));
//由于需要多关联一张表,故在此对sql语句进行判断,判断依据为商品名称是否为空
//定义初始变量sql,并分别进行赋值
StringBuffer sql=null;
if(!StringUtil.isEmpty(goods)&&!goods.equals("null")){
sql=new StringBuffer("select o.*,m.uname from es_order o left join es_member m on o.member_id = m.member_id left join es_order_items s on s.order_id=o.order_id left join es_goods g on s.goods_id = g.goods_id where o.store_id =" + storeid +
" and o.disabled=0 and m.disabled!=1 and g.name like '%"+goods+"%' ");
}else{
sql=new StringBuffer("select o.*,m.uname from es_order o left join es_member m on o.member_id = m.member_id where o.store_id =" + storeid + " and o.disabled=0 and m.disabled!=1 ");
}
// StringBuffer sql =new StringBuffer("select o.*,m.uname from es_order o left join es_member m on o.member_id = m.member_id where o.store_id =" + storeid + " and o.disabled=0 and m.disabled!=1 "
// + "left join es_order_items s on s.order_id=o.order_id and ");
if(!StringUtil.isEmpty(order_state)&&!order_state.equals("all")){
/*if(order_state.equals("wait_ship") ){ //对待发货的处理
sql.append(" and ( ( payment_type!='cod' and payment_id!=8 and o.status="+OrderStatus.ORDER_PAY +") ");//非货到付款的,要已结算才能发货
sql.append(" or ( payment_type='cod' and status="+OrderStatus.ORDER_NOT_PAY +")) ");//货到付款的,新订单(已确认的)就可以发货
//等待收款 (货到付款)
}else if(order_state.equals("wait_pay") ){
sql.append(" and ( status="+OrderStatus.ORDER_ROG+" and payment_type='cod')");//货到付款的要发货或收货后才能结算
//等待收货
}else */if(order_state.equals("rog") ){
sql.append(" and status in("+NewOrderStatus.ORDER_ROG+","+NewOrderStatus.ORDER_COMPLETE+")" );
}else{
sql.append(" and status="+order_state);
}
}else if(!StringUtils.isNotEmpty(order_state)&&order_state.equals("all")){
sql.append(" and status in("+NewOrderStatus.ORDER_COMPLETE+","+NewOrderStatus.ORDER_CONFIRM+","+NewOrderStatus.ORDER_MAINTENANCE+","+NewOrderStatus.ORDER_ROG+","+NewOrderStatus.ORDER_SHIP+")" );
}
if(!StringUtil.isEmpty(keyword)&&!keyword.equals("null")){
sql.append(" AND o.sn like '%" + keyword + "%'");
}
if(!StringUtil.isEmpty(buyerName)&&!buyerName.equals("null")){
sql.append(" AND ((m.uname like '%"+buyerName+"%') or (m.mobile like '%"+buyerName+"%'))");
}
if(!StringUtil.isEmpty(startTime)&&!startTime.equals("null")){
sql.append(" AND o.create_time >"+DateUtil.getDateline(startTime));
}
if(!StringUtil.isEmpty(endTime)&&!endTime.equals("null")){
//2015-11-04 add by sylow
endTime += " 23:59:59";
sql.append(" AND o.create_time <"+DateUtil.getDateline(endTime, "yyyy-MM-dd HH:mm:ss"));
}
sql.append (" order by o.create_time desc");
//在该处输出sql进行测试
//System.out.println(sql.toString());
Page rpage = this.daoSupport.queryForPage(sql.toString(),pageNo, pageSize, Order.class);
return rpage;
}
/*
* (non-Javadoc)
*
* @see com.enation.app.b2b2c.core.service.order.IStoreOrderManager#
* storeOrderList(java.lang.Integer)
*/
@Override
public List storeOrderList(Integer parent_id) {
StringBuffer sql = new StringBuffer("SELECT * from es_order WHERE disabled=0 AND parent_id=" + parent_id);
return this.daoSupport.queryForList(sql.toString(), StoreOrder.class);
}
/*
* (non-Javadoc)
*
* @see
* com.enation.app.b2b2c.core.service.order.IStoreOrderManager#get(java.lang
* .Integer)
*/
@Override
public StoreOrder get(Integer orderId) {
String sql = "SELECT o.*, pd.pay_date FROM "
+ "es_order o LEFT JOIN es_payment_detail pd "
+ "ON o.payment_id = pd.payment_id WHERE order_id=?";
StoreOrder order = (StoreOrder) this.daoSupport.queryForObject(sql, StoreOrder.class, orderId);
return order;
}
/*
* (non-Javadoc)
*
* @see
* com.enation.app.b2b2c.core.service.order.IStoreOrderManager#saveShipInfo(
* java.lang.String, java.lang.String, java.lang.String, java.lang.String,
* java.lang.String, java.lang.String, int)
*/
@Override
@Transactional(propagation = Propagation.REQUIRED)
public boolean saveShipInfo(String remark, String ship_day, String ship_name, String ship_tel, String ship_mobile,
String ship_zip, int orderid) {
Order order = this.get(orderid);
try {
if (ship_day != null && !StringUtil.isEmpty(ship_day) && !ship_day.equals(order.getShip_day())) {
this.daoSupport.execute("update es_order set ship_day=? where order_id=?", ship_day, orderid);
}
if (remark != null && !remark.equals("undefined")
&& !remark.equals(order.getRemark())) {
this.daoSupport.execute("update es_order set remark= ? where order_id=?", remark, orderid);
}
if (ship_name != null && !StringUtil.isEmpty(ship_name) && !ship_name.equals(order.getShip_name())) {
this.daoSupport.execute("update es_order set ship_name=? where order_id=?", ship_name, orderid);
}
if (ship_tel != null && !StringUtil.isEmpty(ship_tel) && !ship_tel.equals(order.getShip_tel())) {
this.daoSupport.execute("update es_order set ship_tel=? where order_id=?", ship_tel, orderid);
}
if (ship_mobile != null && !StringUtil.isEmpty(ship_mobile)
&& !ship_mobile.equals(order.getShip_mobile())) {
this.daoSupport.execute("update es_order set ship_mobile=? where order_id=?", ship_mobile, orderid);
}
if (ship_zip != null && !StringUtil.isEmpty(ship_zip) && !ship_zip.equals(order.getShip_zip())) {
this.daoSupport.execute("update es_order set ship_zip=? where order_id=?", ship_zip, orderid);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/*
* (non-Javadoc)
*
* @see com.enation.app.b2b2c.core.order.service.IStoreOrderManager#
* pageBuyerOrders(int, int, java.lang.String, java.lang.String)
*/
@Override
public Page pageBuyerOrders(int pageNo, int pageSize, String status, String keyword,String checkDate) {
/**
* 准备查询的参数,将来要转换为Object[] 传给jdbc
*/
List argsList = new ArrayList();
/**
* 查询当前会员的订单
*/
StoreMember member = storeMemberManager.getStoreMember();
StringBuffer sql = new StringBuffer("SELECT * FROM es_order o ");
if(!StringUtil.isEmpty(checkDate)){
sql.append(",(SELECT order_id,from_unixtime(create_time) AS createTime FROM es_order ) m ");
}
sql.append("where o.parent_id is NOT NULL and o.member_id=?");
argsList.add(member.getMember_id());
/**
* 按状态查询
*/
if (!StringUtil.isEmpty(status)) {
// 待支付
if (status.equals("wait_notPay")) {
/*sql.append(" and ( ( payment_type!='cod' and status=" + OrderStatus.ORDER_CONFIRM + ") ");*/// 非货到付款的,未付款状态的可以结算
/*sql.append(" or ( payment_type='cod' and status=" + OrderStatus.ORDER_ROG + " ) )");*/// 货到付款的要发货或收货后才能结算
sql.append(" and o.status=" + NewOrderStatus.ORDER_NOT_PAY);
// 待发货
} else if (status.equals("wait_confirm")) {
sql.append(" and o.status=" + NewOrderStatus.ORDER_CONFIRM);
// 待收货
} else if (status.equals("wait_rog")) {
sql.append(" and o.status=" + NewOrderStatus.ORDER_SHIP);
// 已完成
} else if (status.equals("wait_complete")) {
sql.append(" and o.status=" + NewOrderStatus.ORDER_COMPLETE);
// 已取消
} else if (status.equals("wait_cancellation")) {
sql.append(" and o.status=" + NewOrderStatus.ORDER_CANCELLATION);
}
/*else {
if("2".equals(status)){
sql.append(" and ((payment_type='cod' and status=1) or status=" + status+")");
}else{
sql.append(" and o.status=" + status);
}
}*/
}
/**
* 按关键字查询
*/
if (!StringUtil.isEmpty(keyword)) {
sql.append(
" AND o.order_id in (SELECT i.order_id FROM es_order_items i INNER JOIN es_order o ON i.order_id=o.order_id WHERE o.member_id=?"
+ " AND (i.name like ? OR o.sn LIKE ?))");
argsList.add(member.getMember_id());
argsList.add("%" + keyword + "%"); // 将关键字做为name参数查询 压入参数list
argsList.add("%" + keyword + "%"); // 将关键字做为sn参数查询 压入参数list
}
/**
* 按时间查询
*/
if(!StringUtil.isEmpty(checkDate)){
sql.append(" and o.order_id = m.order_id");
// 本月
if (checkDate.equals("0")) {
sql.append(" AND date_format(m.createTime,'%Y-%m')=date_format(now(),'%Y-%m') ");
}
// 上个月
else if(checkDate.equals("1")) {
sql.append(" AND m.createTime >= (select date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract(day from now())-1 day),interval 1 month))");
sql.append(" AND m.createTime <= (select date_sub(date_sub(date_format(now(),'%y-%m-%d'),interval extract(day from now()) day),interval 0 month) as date)");
}
// 近三个月
else if(checkDate.equals("2")) {
sql.append(" AND m.createTime >= date_sub(now(),interval 3 month)");
}
// 近半年
else if(checkDate.equals("3")) {
sql.append(" AND m.createTime >= date_sub(now(),interval 6 month)");
}
// 近一年
else if(checkDate.equals("4")) {
sql.append(" AND m.createTime >= date_sub(now(),interval 1 year)");
}
// 一年以前
else if(checkDate.equals("5")) {
sql.append(" AND m.createTime < date_sub(now(),interval 1 year)");
}
}
sql.append(" order by o.create_time desc");
/**
* 将参数list 转为Object[]
*/
int size = argsList.size();
Object[] args = argsList.toArray(new Object[size]);
/**
* 分页查询买家订单
*/
Page webPage = this.daoSupport.queryForPage(sql.toString(), pageNo, pageSize, Order.class, args);
return webPage;
}
/*
* (non-Javadoc)
*
* @see
* com.enation.app.b2b2c.core.service.order.IStoreOrderManager#pageOrders(
* int, int, java.lang.String, java.lang.String)
*/
@Override
public Page pageChildOrders(int pageNo, int pageSize, String status, String keyword) {
StoreMember member = storeMemberManager.getStoreMember();
StringBuffer sql = new StringBuffer(
"select * from es_order where member_id = '" + member.getMember_id() + "' and disabled=0");
if (!StringUtil.isEmpty(status)) {
int statusNumber = -999;
statusNumber = StringUtil.toInt(status);
// 等待付款的订单 按付款状态查询
if (statusNumber == 0) {
sql.append(" AND status!=" + OrderStatus.ORDER_CANCELLATION + " AND pay_status=" + OrderStatus.PAY_NO);
} else {
sql.append(" AND status='" + statusNumber + "'");
}
}
if (!StringUtil.isEmpty(keyword)) {
sql.append(
" AND order_id in (SELECT i.order_id FROM es_order_items i LEFT JOIN es_order o ON i.order_id=o.order_id WHERE o.member_id='"
+ member.getMember_id() + "' AND i.name like '%" + keyword + "%')");
}
sql.append(" AND parent_id is NOT NULL order by create_time desc");
Page rpage = this.daoSupport.queryForPage(sql.toString(), pageNo, pageSize, Order.class);
return rpage;
}
/*
* (non-Javadoc)
*
* @see com.enation.app.b2b2c.core.service.order.IStoreOrderManager#
* getStoreOrderNum(int)
*/
@Override
public int getStoreOrderNum(Integer[] struts) {
StoreMember member = storeMemberManager.getStoreMember();
String sql ="select count(order_id) from es_order o where o.store_id ="+member.getStore_id()+" and o.disabled=0";
System.out.println("");
List<Integer> statusList=new ArrayList<Integer>(Arrays.asList(struts));
if(statusList.size()>0){
if(statusList.contains(-999)){
sql += " AND o.status != ?";
}else{
sql +=" AND (";
int i=0;
for (int status : statusList) {
sql +=" o.status=?";
if(i==struts.length-1){
sql+=")";
}else{
sql += " OR ";
}
i++;
}
}
}
if( statusList.contains(-999)){
return this.daoSupport.queryForInt(sql,OrderStatus.ORDER_COMPLETE);
}else
{
return this.daoSupport.queryForInt(sql,struts);
}
}
/*
* (non-Javadoc)
*
* @see
* com.enation.app.b2b2c.core.service.order.IStoreOrderManager#get(java.lang
* .String)
*/
@Override
public StoreOrder get(String ordersn) {
String sql = "SELECT o.*, pd.pay_date FROM "
+ "es_order o LEFT JOIN es_payment_detail pd "
+ "ON o.payment_id = pd.payment_id WHERE sn='" + ordersn + "'";
StoreOrder order = (StoreOrder) this.daoSupport.queryForObject(sql, StoreOrder.class);
return order;
}
/*
* 导出订单用
*/
/*public List<Map> getList(String ordersn) {
String sql = "SELECT o.*, pd.pay_date FROM "
+ "es_order o LEFT JOIN es_payment_detail pd "
+ "ON o.payment_id = pd.payment_id WHERE sn='" + ordersn + "'";
return this.daoSupport.queryForList(sql.toString());
}*/
public List<Map> getList(Integer [] order_id) {
String id_str = StringUtil.arrayToString(order_id, ",");
String sql = "select o.sn,from_unixtime(o.create_time,'%Y-%m-%d %H:%i:%s') as time,o.status,o.need_pay_money,oi.price,oi.num "
+ "FROM es_order o LEFT JOIN es_order_items oi "
+ "ON o.order_id = oi.order_id WHERE o.order_id in (" +id_str+ ")";
return this.daoSupport.queryForList(sql.toString());
/*String[] ordersn = (String[]) map.get("ordersn");
String sql = "select o.sn,o.create_time,o.status,o.need_pay_money,oi.price,oi.num FROM es_order o LEFT JOIN es_order_items oi ON o.order_id = oi.order_id WHERE o.sn ='" + ordersn + "'";*/
/*String[] ordersn = (String[]) map.get("ordersn");
for (int i = 0; i < ordersn.length; i++) {
String order_sn = ordersn[i] + "-thumbnail";
} */
/*if (list == null) {
return " ";
}
String str = "";
for (int i = 0; i < list.length; i++) {
if (i != list.length - 1) {
str += array[i].toString() + split;
} else {
str += array[i].toString();
}
}*/
/*String sql = "select o.sn,o.create_time,o.status,o.need_pay_money,oi.price,oi.num "
+ "FROM es_order o LEFT JOIN es_order_items oi "
+ "ON o.order_id = oi.order_id WHERE o.sn in (";
Set<String> set = map.keySet();
for (String keyName : set) {
String value = (String) map.get(keyName);
if (value != null) {
sql = sql+"'"+value+"'"+")";
}
}
return this.daoSupport.queryForList(sql.toString());*/
}
/*
* (non-Javadoc)
*
* @see
* com.enation.app.b2b2c.core.service.order.IStoreOrderManager#listOrder(
* java.util.Map, int, int, java.lang.String, java.lang.String)
*/
@Override
public Page listOrder(Map map, int page, int pageSize, String other, String order) {
String sql = createTempSql(map, other, order);
Page webPage = this.daoSupport.queryForPage(sql, page, pageSize);
orderPluginBundle.filterOrderPage(webPage);// 对订单查询结果进行过滤
return webPage;
}
@Override
public Map getStatusJson() {
Map orderStatus = new HashMap();
orderStatus.put("" + OrderStatus.ORDER_NOT_PAY, OrderStatus.getOrderStatusText(OrderStatus.ORDER_NOT_PAY));
orderStatus.put("" + OrderStatus.ORDER_PAY, OrderStatus.getOrderStatusText(OrderStatus.ORDER_PAY));
orderStatus.put("" + OrderStatus.ORDER_SHIP, OrderStatus.getOrderStatusText(OrderStatus.ORDER_SHIP));
orderStatus.put("" + OrderStatus.ORDER_ROG, OrderStatus.getOrderStatusText(OrderStatus.ORDER_ROG));
orderStatus.put("" + OrderStatus.ORDER_COMPLETE, OrderStatus.getOrderStatusText(OrderStatus.ORDER_COMPLETE));
orderStatus.put("" + OrderStatus.ORDER_CANCELLATION,
OrderStatus.getOrderStatusText(OrderStatus.ORDER_CANCELLATION));
return orderStatus;
}
@Override
public Map getpPayStatusJson() {
Map pmap = new HashMap();
pmap.put("" + OrderStatus.PAY_NO, OrderStatus.getPayStatusText(OrderStatus.PAY_NO));
pmap.put("" + OrderStatus.PAY_YES, OrderStatus.getPayStatusText(OrderStatus.PAY_YES));
pmap.put("" + OrderStatus.PAY_PARTIAL_PAYED, OrderStatus.getPayStatusText(OrderStatus.PAY_PARTIAL_PAYED));
return pmap;
}
@Override
public Map getShipJson() {
Map map = new HashMap();
map.put("" + OrderStatus.SHIP_NO, OrderStatus.getShipStatusText(OrderStatus.SHIP_NO));
map.put("" + OrderStatus.SHIP_YES, OrderStatus.getShipStatusText(OrderStatus.SHIP_YES));
map.put("" + OrderStatus.SHIP_ROG, OrderStatus.getShipStatusText(OrderStatus.SHIP_ROG));
return map;
}
/*
* (non-Javadoc)
*
* @see com.enation.app.b2b2c.core.order.service.IStoreOrderManager#
* orderStatusNum(java.lang.Integer)
*/
@Override
public Integer orderStatusNum(Integer status) {
StoreMember member = storeMemberManager.getStoreMember();
if (status == 99) {
String sql = "select count(0) from es_order where member_id=? and parent_id is not null";
return this.daoSupport.queryForInt(sql, member.getMember_id());
} else if(status == 1){
String sql = "select count(0) from es_order where status =? and member_id=? and parent_id is not null and is_online=1";
return this.daoSupport.queryForInt(sql, status, member.getMember_id());
}else {
String sql = "select count(0) from es_order where status =? and member_id=? and parent_id is not null";
return this.daoSupport.queryForInt(sql, status, member.getMember_id());
}
}
/*
* (non-Javadoc)
*
* @see com.enation.app.b2b2c.core.order.service.IStoreOrderManager#
* getStoreGoodsNum(int)
*/
@Override
public Integer getStoreGoodsNum(int store_id) {
String sql = "select count(0) from es_goods where store_id=?";
return this.daoSupport.queryForInt(sql, store_id);
}
/*
* (non-Javadoc)
*
* @see
* com.enation.app.b2b2c.core.order.service.IStoreOrderManager#saveShipNo(
* java.lang.Integer[], java.lang.Integer, java.lang.String,
* java.lang.String)
*/
@Override
public void saveShipNo(Integer[] order_id, Integer logi_id, String logi_name, String shipNo) {
Map map = new HashMap();
map.put("ship_no", shipNo);
map.put("logi_id", logi_id);
map.put("logi_name", logi_name);
this.daoSupport.update("es_order", map, "order_id=" + order_id[0]);
}
/*
* (non-Javadoc)
*
* @see
* com.enation.app.b2b2c.core.order.service.IStoreOrderManager#censusState()
*/
@Override
public Map censusState() {
// 构造一个返回值Map,并将其初始化:各种订单状态的值皆为0
Map<String, Integer> stateMap = new HashMap<String, Integer>(7);
String[] states = { "cancel_ship", "cancel_pay", "pay", "ship", "complete", "allocation_yes" };
for (String s : states) {
stateMap.put(s, 0);
}
// 分组查询、统计订单状态
String sql = "select count(0) num,status from es_order where disabled = 0 AND parent_id is NOT NULL group by status";
List<Map<String, Integer>> list = this.daoSupport.queryForList(sql, new RowMapper() {
public Object mapRow(ResultSet rs, int arg1) throws SQLException {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("status", rs.getInt("status"));
map.put("num", rs.getInt("num"));
return map;
}
});
//
// // 将list转为map
for (Map<String, Integer> state : list) {
stateMap.put(this.getStateString(state.get("status")), state.get("num"));
}
sql = "select count(0) num from es_order where disabled = 0 and status=0 AND parent_id is NOT NULL ";
int count = this.daoSupport.queryForInt(sql);
stateMap.put("wait", count);
sql = "select count(0) num from es_order where disabled = 0 AND parent_id is NOT NULL ";
sql += " and ( ( payment_type!='cod' and status=" + OrderStatus.ORDER_CONFIRM + ") ";// 非货到付款的,未付款状态的可以结算
// sql+=" or ( status!="+OrderStatus.ORDER_NOT_PAY+" and
// pay_status!="+OrderStatus.PAY_NO +")" ; //此语句会影响待结算订单的查询,暂时先注释掉 add
// by DMRain 2016-7-14
sql += " or ( payment_type='cod' and (status=" + OrderStatus.ORDER_ROG
+ " ) ) )";// 货到付款的要发货或收货后才能结算
count = this.daoSupport.queryForInt(sql);
stateMap.put("not_pay", count);
sql = "select count(0) from es_order where disabled=0 and ( ( payment_type!='cod' and payment_id!=8 and status=2) or ( payment_type='cod' and status=1)) AND parent_id is NOT NULL ";
count = this.daoSupport.queryForInt(sql);
stateMap.put("allocation_yes", count);
this.putSelfStoreStateMap(stateMap);
return stateMap;
}
private void putSelfStoreStateMap(Map<String, Integer> stateMap) {
Map<String, Integer> newStateMap = new HashMap<String, Integer>(7);
String[] states = { "self_cancel_ship", "self_cancel_pay", "self_pay", "self_ship", "self_complete", "self_allocation_yes" };
for (String s : states) {
newStateMap.put(s, 0);
}
// 分组查询、统计订单状态
String sql = "select count(0) num,status from es_order where disabled = 0 AND parent_id is NOT NULL AND store_id ="+ShopApp.self_storeid+" group by status";
List<Map<String, Integer>> list = this.daoSupport.queryForList(sql, new RowMapper() {
public Object mapRow(ResultSet rs, int arg1) throws SQLException {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("status", rs.getInt("status"));
map.put("num", rs.getInt("num"));
return map;
}
});
//
// // 将list转为map
for (Map<String, Integer> state : list) {
newStateMap.put(this.getSelfStateString(state.get("status")), state.get("num"));
}
sql = "select count(0) num from es_order where disabled = 0 and status=0 AND parent_id is NOT NULL AND store_id ="+ShopApp.self_storeid;
int count = this.daoSupport.queryForInt(sql);
newStateMap.put("self_wait", count);
sql = "select count(0) num from es_order where disabled = 0 AND parent_id is NOT NULL AND store_id ="+ShopApp.self_storeid;
sql += " and ( ( payment_type!='cod' and status=" + OrderStatus.ORDER_CONFIRM + ") ";// 非货到付款的,未付款状态的可以结算
// sql+=" or ( status!="+OrderStatus.ORDER_NOT_PAY+" and
// pay_status!="+OrderStatus.PAY_NO +")" ; //此语句会影响待结算订单的查询,暂时先注释掉 add
// by DMRain 2016-7-14
sql += " or ( payment_type='cod' and (status=" + OrderStatus.ORDER_ROG
+ " ) ) )";// 货到付款的要发货或收货后才能结算
count = this.daoSupport.queryForInt(sql);
newStateMap.put("self_not_pay", count);
sql = "select count(0) from es_order where disabled=0 and ( ( payment_type!='cod' and payment_id!=8 and status=2) or ( payment_type='cod' and status=1)) AND parent_id is NOT NULL AND store_id ="+ShopApp.self_storeid;
count = this.daoSupport.queryForInt(sql);
newStateMap.put("self_allocation_yes", count);
stateMap.putAll(newStateMap);
}
private String getSelfStateString(Integer state) {
String str = null;
switch (state.intValue()) {
case 0:
str = "self_not_pay";
break;
case 1:
str = "self_confirm";
break;
case 2:
str = "self_pay";
break;
case 3:
str = "self_ship";
break;
case 4:
str = "self_allocation_yes";
break;
case 5:
str = "self_complete";
break;
case 6:
str = "self_order_cancel";
break;
case 7:
str = "self_order_maintanance";
break;
default:
str = null;
break;
}
return str;
}
/*
* (non-Javadoc)
*
* @see com.enation.app.b2b2c.core.order.service.IStoreOrderManager#
* getStoreSellbackOrder()
*/
@Override
public int getStoreSellbackOrder(Integer[] statusArray) {
StoreMember member = storeMemberManager.getStoreMember();
//String sql = "select count(0) from es_sellback_list where store_id = ?";
StringBuffer sqlsb=new StringBuffer("select count(0) from es_sellback_list where store_id = ? ");
List paramlist=new ArrayList();
paramlist.add(member.getStore_id());
if(statusArray.length!=0){
for (int i=0;i<statusArray.length;i++) {
if (i==0){
sqlsb.append(" and ( ");
}else{
sqlsb.append(" or ");
}
sqlsb.append(" tradestatus = ?");
if(i==statusArray.length-1){
sqlsb.append(" ) ");
}
paramlist.add(statusArray[i]);
}
}
return this.daoSupport.queryForInt(sqlsb.toString(),paramlist.toArray());
}
/*
* (non-Javadoc)
*
* @see com.enation.app.b2b2c.core.order.service.IStoreOrderManager#
* getCancelApplicationList(java.lang.Integer, java.lang.Integer)
*/
@Override
public Page getCancelApplicationList(Integer pageNo, Integer pageSize) {
StoreMember member = storeMemberManager.getStoreMember();
String sql = "select * from es_order where is_cancel=1 AND parent_id is NOT NULL AND store_id = ? order by order_id desc ";
return this.daoSupport.queryForPage(sql, pageNo, pageSize, member.getStore_id());
}
/*
* (non-Javadoc)
*
* @see com.enation.app.b2b2c.core.order.service.IStoreOrderManager#
* cancelApplicationList(java.lang.Integer, java.lang.Integer,
* java.lang.Integer)
*/
@Override
public Page cancelApplicationList(Integer pageNo, Integer pageSize, Integer is_self) {
if (is_self == 1) {
String sql = "select * from es_order where is_cancel=1 AND parent_id is NOT NULL AND store_id = ? order by order_id desc ";
return this.daoSupport.queryForPage(sql, pageNo, pageSize, ShopApp.self_storeid);
} else {
String sql = "select * from es_order where is_cancel=1 AND parent_id is NOT NULL order by order_id desc ";
return this.daoSupport.queryForPage(sql, pageNo, pageSize);
}
}
/**
* 根据订单状态值获取状态字串,如果状态值不在范围内反回null。
*
* @param state
* @return
*/
private String getStateString(Integer state) {
String str = null;
switch (state.intValue()) {
case 0:
str = "not_pay";
break;
case 1:
str = "confirm";
break;
case 2:
str = "pay";
break;
case 3:
str = "ship";
break;
case 4:
str = "allocation_yes";
break;
case 5:
str = "complete";
break;
case 6:
str = "order_cancel";
break;
case 7:
str = "order_maintanance";
break;
default:
str = null;
break;
}
return str;
}
/**
* 创建店铺子订单
*
* @param order
* 主订单
* @param sessionid
* 用户sessionid
* @param shippingIds
* 配送方式数组,是按在结算页中的店铺顺序形成
*/
private void createChildOrder(Order order, String sessionid) {
// 获取以店铺id分类的购物车列表
List<Map> storeGoodsList = StoreCartContainer.getSelectStoreCartListFromSession();
//获取子订单个数
//int child_num = orderManager.getChildOrders(order.getParent_id()).size();
//int num = child_num>0?child_num : 1;
int num =1;
// 以店铺分单位循环购物车列表
for (Map map : storeGoodsList) {
// 当前店铺的配送方式
Integer shippingId = StringUtil.toInt(map.get(StringUtil.toString(StoreCartKeyEnum.shiptypeid)),false);
// 先将主订单的信息copy一份
StoreOrder storeOrder = this.copyOrder(order);
// 如果copy属性异常,则抛出异常
if (storeOrder == null) {
throw new RuntimeException("创建子订单出错,原因为:beanutils copy属性出错。");
}
// 获取此店铺id
int store_id = (Integer) map.get(StoreCartKeyEnum.store_id.toString());
// 获取店铺名称
String store_name = (String) map.get(StoreCartKeyEnum.store_name.toString());
// 设置订单为未结算
storeOrder.setBill_status(0);
// 设置店铺的id
storeOrder.setStore_id(store_id);
// 店铺名称
storeOrder.setStore_name(store_name);
// 配送方式id
storeOrder.setShipping_id(shippingId);
// 设置父订id
storeOrder.setParent_id(order.getOrder_id());
// 取得此店铺的购物列表
List itemlist = (List) map.get(StoreCartKeyEnum.goodslist.toString());
// 调用核心api计算总订单的价格,商品价:所有商品,商品重量:
OrderPrice orderPrice = (OrderPrice) map.get(StoreCartKeyEnum.storeprice.toString());
//获取优惠券张数
/*StoreBonusType bonus = this.b2b2cBonusManager.get(orderPrice.getBonus_id());
if(bonus != null){
if(bonus.getCreate_num() > bonus.getReceived_num()){
orderPrice.setBonus_id(bonus.getType_id());
}else{
//如果领取的优惠券大于创建的优惠券
orderPrice.setBonus_id(0);
}
}*/
//从session中读取此店铺已使用的优惠券的金额
/*MemberBonus memberBonus = B2b2cBonusSession.getB2b2cBonus(store_id);
if(memberBonus!=null){
orderPrice.setDiscountPrice(memberBonus.getType_money());
}*/
//如果优惠金额后订单价格小于0 by_xulipeng 2017年01月18日
if(orderPrice.getNeedPayMoney()<=0){
orderPrice.setNeedPayMoney(0d);
}
// 设置订单价格,自动填充好各项价格,商品价格,运费等
storeOrder.setOrderprice(orderPrice);
// 设置为子订单
storeOrder.setIs_child_order(true);
storeOrder.setSn(order.getSn() + "-" + num);
// 调用订单核心类创建子订单
this.OrderFlowManager.add(storeOrder, itemlist, sessionid);
num++;
}
}
/**
* copy一个订单的属性 生成新的订单
*
* @param order
* 主订单
* @return 新的子订单
*/
private StoreOrder copyOrder(Order order) {
StoreOrder store_order = new StoreOrder();
try {
BeanUtils.copyProperties(store_order, order);
} catch (Exception e) {
e.printStackTrace();
}
return store_order;
}
/**
* 生成查询sql
*
* @param map
* @param sortField
* @param sortType
* @return
*/
private String createTempSql(Map map, String sortField, String sortType) {
Integer stype = map.get("stype") == null ? null : Integer.parseInt(map.get("stype").toString());
String keyword = (String) map.get("keyword");
String sn = (String) map.get("sn");
String orderstate = (String) map.get("order_state");// 订单状态特殊查询
String start_time = (String) map.get("start_time");
String end_time = (String) map.get("end_time");
Integer status = map.get("status") == null || StringUtil.isEmpty(map.get("status").toString()) ? null
: Integer.parseInt(map.get("status").toString());
String ship_name = (String) map.get("ship_name");
Integer paystatus = map.get("paystatus") == null || StringUtil.isEmpty(map.get("paystatus").toString()) ? null
: Integer.parseInt(map.get("paystatus").toString());
Integer shipstatus = map.get("shipstatus") == null || StringUtil.isEmpty(map.get("shipstatus").toString())
? null : Integer.parseInt(map.get("shipstatus").toString());
Integer shipping_type = map.get("shipping_type") == null
|| StringUtil.isEmpty(map.get("shipping_type").toString()) ? null
: Integer.parseInt(map.get("shipping_type").toString());
Integer payment_id = map.get("payment_id") == null || StringUtil.isEmpty(map.get("payment_id").toString())
? null : Integer.parseInt(map.get("payment_id").toString());
Integer depotid = map.get("depotid") == null || StringUtil.isEmpty(map.get("depotid").toString()) ? null
: Integer.parseInt(map.get("depotid").toString());
String complete = map.get("complete") == null || StringUtil.isEmpty(map.get("complete").toString()) ? null
: (String) map.get("complete").toString();
String store_name = map.get("store_name") == null || StringUtil.isEmpty(map.get("store_name").toString()) ? null
: map.get("store_name").toString();
Integer store_id = map.get("store_id") == null || StringUtil.isEmpty(map.get("store_id").toString()) ? null
: Integer.parseInt(map.get("store_id").toString());
String parent_sn = map.get("parent_sn") == null || StringUtil.isEmpty(map.get("parent_sn").toString()) ? null
: (String) map.get("parent_sn").toString();
StringBuffer sql = new StringBuffer();
sql.append("select * from es_order o where disabled=0 and parent_id is NOT NULL "); // 只查询出子订单
if (stype != null && keyword != null) {
if (stype == 0) {
sql.append(" and (sn like '%" + keyword + "%'");
sql.append(" or ship_name like '%" + keyword + "%')");
}
}
if (status != null) {
sql.append("and status=" + status);
}
if (sn != null && !StringUtil.isEmpty(sn)) {
sql.append(" and sn like '%" + sn + "%'");
}
if (ship_name != null && !StringUtil.isEmpty(ship_name)) {
sql.append(" and ship_name like '" + ship_name + "'");
}
if (paystatus != null) {
sql.append(" and pay_status=" + paystatus);
}
if (shipstatus != null) {
sql.append(" and ship_status=" + shipstatus);
}
if (shipping_type != null) {
sql.append(" and shipping_id=" + shipping_type);
}
if (payment_id != null) {
sql.append(" and payment_id=" + payment_id);
}
if (depotid != null && depotid > 0) {
sql.append(" and depotid=" + depotid);
}
if (start_time != null && !StringUtil.isEmpty(start_time)) {
long stime = com.enation.framework.util.DateUtil.getDateline(start_time + " 00:00:00");
sql.append(" and create_time>" + stime);
}
if (end_time != null && !StringUtil.isEmpty(end_time)) {
long etime = com.enation.framework.util.DateUtil.getDateline(end_time + " 23:59:59");
sql.append(" and create_time<" + etime);
}
if (!StringUtil.isEmpty(orderstate)) {
if (orderstate.equals("wait_ship")) { // 对待发货的处理
sql.append(" and ( ( payment_type!='cod' and status=" + OrderStatus.ORDER_PAY + ") ");// 非货到付款的,要已结算才能发货
sql.append(" or ( payment_type='cod' and status=" + OrderStatus.ORDER_CONFIRM + ")) ");// 货到付款的,新订单(已确认的)就可以发货
} else if (orderstate.equals("wait_pay")) {
sql.append(" and ( ( payment_type != 'cod' and status=" + OrderStatus.ORDER_CONFIRM + ") ");// 非货到付款的,未付款状态的可以结算
sql.append(" or ( payment_type='cod' and (status=" + OrderStatus.ORDER_SHIP + " or status="
+ OrderStatus.ORDER_ROG + " ) ) )");// 货到付款的要发货或收货后才能结算
} else if (orderstate.equals("wait_rog")) {
sql.append(" and status=" + OrderStatus.ORDER_SHIP);
} else {
sql.append(" and status=" + orderstate);
}
}
if (!StringUtil.isEmpty(complete)) {
sql.append(" and status=" + OrderStatus.ORDER_COMPLETE);
}
if (!StringUtil.isEmpty(store_name)) {
sql.append(
" and o.store_id in(select store_id from es_store where store_name like '%" + store_name + "%')");
}
if (store_id != null) {
sql.append(" and o.store_id=" + store_id);
}
if (!StringUtil.isEmpty(parent_sn)) {
sql.append(" AND parent_id=(SELECT order_id FROM es_order WHERE sn='" + parent_sn + "')");
}
sql.append(" ORDER BY " + sortField + " " + sortType);
return sql.toString();
}
/*
* (non-Javadoc)
* @see com.enation.app.b2b2c.core.order.service.IStoreOrderManager#getSubOrderPayStatus(java.lang.Integer)
*/
@Override
public int getSubOrderPayStatus(Integer orderid) {
String sql = "select order_id from es_order where parent_id=? and status=?";
List list = this.daoSupport.queryForList(sql, orderid,OrderStatus.ORDER_PAY);
if(list.isEmpty()){
return 0;
}
return list.size();
}
@Override
public List<Order> getByParentId(Integer order_id) {
String sql="select * from es_order where parent_id = ?";
return this.daoSupport.queryForList(sql, Order.class, order_id);
}
@Override
public void update(Order order) {
this.daoSupport.update("es_order", order, " order_id = "+order.getOrder_id());
}
/*
* (non-Javadoc)
* @see com.enation.app.b2b2c.core.order.service.IStoreOrderManager#getSubOrderPayStatus(java.lang.Integer)
*/
@Override
public Page pageCommentOrders(int pageNo, int pageSize) {
/**
* 查询当前会员的订单
*/
StoreMember member = storeMemberManager.getStoreMember();
StringBuffer sql = new StringBuffer("SELECT * FROM es_order o where o.parent_id is NOT NULL and member_id=? "
+" AND order_id in ( SELECT i.order_id FROM es_member_order_item i LEFT JOIN es_order o "
+" ON i.order_id=o.order_id WHERE o.member_id= ? and i.commented=0 ) " );
sql.append(" order by o.create_time desc");
/**
* 分页查询买家订单
*/
Page webPage = this.daoSupport.queryForPage(sql.toString(), pageNo, pageSize, Order.class, member.getMember_id(),member.getMember_id());
return webPage;
}
}