package com.ishop.merchant.service; import com.ishop.merchant.OrderConstants; import com.ishop.model.po.EbMerchantOrder; import com.ishop.model.po.EbOrder; import com.ishop.model.po.EbOrderDetail; import com.ishop.model.po.EbOrderInvoice; import com.ishop.model.po.EbOrderInvoiceDetail; import com.walker.db.page.GenericPager; import com.walker.infrastructure.time.TimeRange; import com.walker.infrastructure.utils.StringUtils; import com.walker.jdbc.service.BaseServiceImpl; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class OrderServiceImpl extends BaseServiceImpl { private static final String SQL_PAGE_USER_LIST = "select * from eb_order where uid=:uid"; private static final String SQL_PAGE_PLATFORM_ORDER = "select id,mer_id,order_no,uid,pay_price,pay_type,paid,status" + ",refund_status,is_user_del,is_merchant_del,cancel_status,level,type,create_time from eb_order where 1=1"; /** * 发货(express)数据库更新。 * @param orderInvoice * @param orderInvoiceDetailList * @param orderDetailUpdateList * @param updateOrder * @date 2023-08-21 */ public void execSendExpress(EbOrderInvoice orderInvoice , List orderInvoiceDetailList, List orderDetailUpdateList, EbOrder updateOrder){ // 1:写入发货单 // 2:写入发货单明细 // 3:更新订单明细表中,邮递数量(delivery_num)字段 // 4:更新商户订单快递方式为(express),暂时无需设置,默认就是 // 5:更新平台订单为:已发货 this.insert(orderInvoice); this.insert(orderInvoiceDetailList); this.update(orderDetailUpdateList); this.update(updateOrder); } /** * 分页查询平台订单 * @param merId 商户ID,可选 * @param orderNo 订单编号,可选 * @param type 订单类型,可选 * @param timeRange 时间范围,可选 * @param status 订单状态,可选 * @return * @date 2023-07-20 */ public GenericPager queryPagePlatformOrderList(Integer merId, String orderNo, Integer type, TimeRange timeRange, String status){ Map param = new HashMap<>(4); StringBuilder sql = new StringBuilder(SQL_PAGE_PLATFORM_ORDER); if(merId != null && merId > 0){ sql.append(" and mer_id=:merId"); param.put("merId", merId); } if(StringUtils.isNotEmpty(orderNo)){ sql.append(" and order_no=:orderNo"); param.put("orderNo", orderNo); } if(type != null && type >= 0){ sql.append(" and type=:type"); param.put("type", type); } if(timeRange != null){ if(timeRange.getStartTime() != null){ sql.append(" and create_time >= :startTime"); param.put("startTime", timeRange.getStartTime()); } if(timeRange.getEndTime() != null){ sql.append(" and create_time <= :endTime"); param.put("endTime", timeRange.getEndTime()); } } if(StringUtils.isNotEmpty(status)){ this.setupStatusCondition(sql, status); } sql.append(" order by id desc"); return this.selectSplit(sql.toString(), param, new EbOrder()); } private void setupStatusCondition(StringBuilder sql, String status){ //未支付 if(status.equals(OrderConstants.MERCHANT_ORDER_STATUS_UNPAID)){ sql.append(" and paid=0"); sql.append(" and status=").append(OrderConstants.ORDER_STATUS_WAIT_PAY); sql.append(" and cancel_status=").append(OrderConstants.ORDER_CANCEL_STATUS_NORMAL); sql.append(" and is_user_del=0"); } else if(status.equals(OrderConstants.MERCHANT_ORDER_STATUS_NOT_SHIPPED)){ // 未发货 sql.append(" and (status=").append(OrderConstants.ORDER_STATUS_WAIT_SHIPPING) .append(" or status=").append(OrderConstants.ORDER_STATUS_PART_SHIPPING).append(")"); sql.append(" and cancel_status=").append(OrderConstants.ORDER_CANCEL_STATUS_NORMAL); sql.append(" and refund_status<>").append(OrderConstants.ORDER_REFUND_STATUS_REFUND); sql.append(" and is_user_del=0"); } else if(status.equals(OrderConstants.MERCHANT_ORDER_STATUS_SPIKE)){ //待收货 sql.append(" and status=").append(OrderConstants.ORDER_STATUS_WAIT_RECEIPT); sql.append(" and cancel_status=").append(OrderConstants.ORDER_CANCEL_STATUS_NORMAL); sql.append(" and refund_status<>").append(OrderConstants.ORDER_REFUND_STATUS_REFUND); sql.append(" and is_user_del=0"); } else if(status.equals(OrderConstants.MERCHANT_ORDER_STATUS_RECEIVING)){ //已收货 sql.append(" and status=").append(OrderConstants.ORDER_STATUS_TAKE_DELIVERY); sql.append(" and cancel_status=").append(OrderConstants.ORDER_CANCEL_STATUS_NORMAL); sql.append(" and refund_status<>").append(OrderConstants.ORDER_REFUND_STATUS_REFUND); sql.append(" and is_user_del=0"); } else if(status.equals(OrderConstants.MERCHANT_ORDER_STATUS_COMPLETE)){ //交易完成 sql.append(" and status=").append(OrderConstants.ORDER_STATUS_COMPLETE); sql.append(" and cancel_status=").append(OrderConstants.ORDER_CANCEL_STATUS_NORMAL); sql.append(" and refund_status<>").append(OrderConstants.ORDER_REFUND_STATUS_REFUND); sql.append(" and is_user_del=0"); } else if(status.equals(OrderConstants.MERCHANT_ORDER_STATUS_AWAIT_VERIFICATION)){ //待核销 sql.append(" and status=").append(OrderConstants.ORDER_STATUS_AWAIT_VERIFICATION); sql.append(" and cancel_status=").append(OrderConstants.ORDER_CANCEL_STATUS_NORMAL); sql.append(" and refund_status<>").append(OrderConstants.ORDER_REFUND_STATUS_REFUND); sql.append(" and is_user_del=0"); } else if(status.equals(OrderConstants.MERCHANT_ORDER_STATUS_REFUNDED)){ //已退款 sql.append(" and paid=1"); sql.append(" and cancel_status=").append(OrderConstants.ORDER_CANCEL_STATUS_NORMAL); sql.append(" and refund_status=").append(OrderConstants.ORDER_REFUND_STATUS_REFUND); sql.append(" and is_user_del=0"); } else if(status.equals(OrderConstants.MERCHANT_ORDER_STATUS_DELETED)){ sql.append(" and is_user_del=1"); } } /** * 根据主订单编号,返回一个商户订单信息。 *

原:(支付完成进行商户拆单后可用)

* @param orderNo * @return * @date 2023-07-20 */ public EbMerchantOrder queryMerchantOrderOne(String orderNo){ List list = this.select("select * from eb_merchant_order where order_no=? limit 1", new Object[]{orderNo}, new EbMerchantOrder()); if(StringUtils.isEmptyList(list)){ return null; } return list.get(0); } /** * 根据平台订单编号,查询商户订单列表,商户订单(可能多商品)对应一个平台订单。 * @param orderNo * @return * @date 2023-07-13 */ public List queryMerchantOrderList(String orderNo){ EbMerchantOrder param = new EbMerchantOrder(); param.setOrderNo(orderNo); return this.select(param); } /** * 根据订单编号,返回订单信息。 * @param orderNo * @return * @date 2023-07-12 */ public EbOrder queryOrder(String orderNo){ EbOrder order = new EbOrder(); order.setOrderNo(orderNo); List list = this.select(order); if(StringUtils.isEmptyList(list)){ return null; } return list.get(0); } /** * 平台订单,如果用订单编号(不用主键),还要配合商户ID才能确定一条记录。 * @param orderNo * @param merId * @return * @date 2023-08-18 */ public EbOrder queryPlatformOrder(String orderNo, int merId){ EbOrder order = new EbOrder(); order.setOrderNo(orderNo); order.setMerId(merId); List list = this.select(order); if(StringUtils.isEmptyList(list)){ return null; } return list.get(0); } public List queryOrderDetailList(String orderNo){ EbOrderDetail detail = new EbOrderDetail(); detail.setOrderNo(orderNo); return this.select(detail); } /** * 根据平台订单ID,查询对应商品ID集合。 * @param orderNo * @return * @date 2023-09-09 */ public List queryOrderProductIds(String orderNo){ List> list = this.select(SQL_ORDER_PRODUCT_ID, new Object[]{orderNo}); if(StringUtils.isEmptyList(list)){ return null; } List data = new ArrayList<>(2); for(Map map : list){ data.add(Long.parseLong(map.get("product_id").toString())); } return data; } private static final String SQL_ORDER_PRODUCT_ID = "select product_id from eb_order_detail where order_no=?"; /** * 订单发货获取订单详情列表 * @param orderNo * @return * @date 2023-08-21 */ public List queryShipmentList(String orderNo){ return this.select(SQL_SHIP_ORDER_DETAIL, new Object[]{orderNo}, new EbOrderDetail()); } private static final String SQL_SHIP_ORDER_DETAIL = "select id,product_name,image,sku,pay_num,delivery_num,refund_num from eb_order_detail where order_no=?"; /** * 分页返回用户订单列表 * @param userId * @param status 订单状态(-1:全部,0:待支付,1:待发货,2:部分发货, 3:待核销,4:待收货,5:已收货,6:已完成,9:已取消) * @return * @date 2023-07-07 */ public GenericPager queryUserOrderList(long userId, Integer status){ StringBuilder sql = new StringBuilder(SQL_PAGE_USER_LIST); Map param = new HashMap<>(8); param.put("uid", userId); if(status != null && status.intValue() >= 0){ if(status.intValue() == 1){ sql.append(" and (status=").append(OrderConstants.ORDER_STATUS_WAIT_SHIPPING); sql.append(" or status=").append(OrderConstants.ORDER_STATUS_PART_SHIPPING).append(")"); } else { sql.append(" and status=:status"); param.put("status", status); } } // 退款状态 sql.append(" and refund_status<").append(OrderConstants.ORDER_REFUND_STATUS_REFUND); sql.append(" and is_user_del=0"); sql.append(" and is_merchant_del=0"); sql.append(" and (type=").append(OrderConstants.ORDER_TYPE_NORMAL) .append(" or type=").append(OrderConstants.ORDER_TYPE_SECKILL).append(")"); sql.append(" and is_del=0"); sql.append(" order by id desc"); return this.selectSplit(sql.toString(), param, new EbOrder()); } }