<WRAP group><WRAP 10 column>
评价 |
一、订单递交前的准备工作:(I_DL_INIT)
1.读取订单递交需要的各种配置(eg:订单进入待审核后是否根据备注提取物流等等),是否需要从原始单货品生成api_goodsspec 2.原始单货品跟系统平台货品的映射以及自动匹配系统货品(库存同步的变化) 1)初次更新表结构 (1) 批量更新已存在的平台货品(shop_id,goods_id,spec_id) 条件:待递交,初次进入系统,货品ID不为空 更新标记modify_flag|1 条件:货品编号或者商家编码发生变化(平台货品发生变化) 商家编码,货品编号,货品名称,规格名称,类目,is_new=0(订单上辨别是新进系统的标记) (2) 批量添加平台货品 条件:订单中全部货品在平台货品中都找不到 待递交 新进入系统 货品ID不为空 2)是否是自动匹配 (1)对新增和变化的平台货品进行自动匹配 条件: 标记发生变化; 匹配方式:自动匹配;平台货品状态:非已删除(gs.modify_flag>0 AND gs.is_manual_match=0 AND gs.status>0) 更新匹配系统货品(match_target_type,match_target_id,match_code),is_stock_change 改为1(通知匹配发生变化,需要重新库存同步) 更新品牌分类、刷新无效货品(将标记为无效货品的订单货品根据已经匹配上的货品刷新成非无效的货品)、刷新默认同步策略 3)将modify标记恢复原状
二、递交过程:(处理待递交,未发货,非异常,线上的订单)
处理新增的原始单 1.递交的类型: 1)如果已发货(trade_status>=40 or is_external > 0):直接将原始单对应的系统状态改为已取消 2)订单货品判断无:bad_reason 设置为 8 离开 3)订单特殊值处理 非款到发货的订单(delivery_term <> 1),设置为不可拆分合并(is_sealed=1) 订单状态已付款,支付时间为0000-00-00 将支付时间改为交易时间
2.客户(无网名时的处理):如果没有插入系统表 1)客户昵称为空或者'': --1手机号不为空 昵称=MOB+手机号 --2电话号码不为空 昵称=TEL+电话号码 --3 昵称=未知卖家 2)客户网名在平台客户中不存在(crm_platform_customer:platform_id,account):网名在系统中不存在 检查线下的网名是否存在(platform_id=0) 存在时--(电话至少有一个相符合 或者 地址相符合) -- customerID使用线下 否则-- customerID=0 客户ID=0 新建客户 新建平台客户 客户ID<>0 新建平台客户 存在 取得客户类型(customerType) 3)更新地址库(累增 insert ignore) 4)更新电话库(累增 insert ignore 1 手机 2 电话) 创建手机,电话的索引(I_CRM_TELNO_CREATE_IDX)
3.映射货品(先放入临时表中记录佣金等,体积,单品属性等):I_DL_MAP_TRADE_GOODS(0(系统ID), 原始单ID, 1(是否标记无效货品), 货品总数(出), 货品种类数(出)) 创建临时订单货品表tmp_sales_trade_order(包含创建订单所需所有信息) tmp_sales_trade_order(spec_id(系统商品ID),platform_id(平台ID),src_oid(子订单编号),src_tid(原始单号),refund_status(退款状态),guarantee_mode(支付方式:担保,非担保), delivery_term(发货方式:款到发货/货到付款),bind_oid(关联子单号),num(下单数量),price(单价),actual_num(实发数量),paid(已付金额),order_price(成交价), share_amount(分摊后总价),share_post(分摊后邮资),share_price(分摊后单价),adjust(调整价格),discount(折扣),goods_name(货品名称),goods_id(货品ID),goods_no(货品编号), spec_name(规格名称),spec_no(商家编码),spec_code(规格码),api_goods_name(平台货品名称),api_spec_name(平台规格名称),weight(重量),volume(体积),commission(佣金), tax_rate(税率),large_type(大件),invoice_type(发票类型),invoice_content(发票内容),from_mask(订单内部来源),gift_type(赠品类型),cid(类目),is_zero_cost(0成本), is_not_use_air(航空禁运),remark(备注)) 1)从原始单获取信息: 平台,店铺,原始单号,发货方式(delivery_term),订单标记(trade_mask) 2) n(游标) 校验货品数量若为0 -- 标记原始单:bad_reson|1 失败 计算货品总数和种类数(累加) 标记无效货品 线下: 通过原始子单的商家编码获取对应的系统商家编码ID 线上: 类目不为空时 通过佣金类目取得对应类目的佣金系数(api_goods_category -- cid,shop_id)--commission_factor 开启动态匹配以及是自动匹配时 通过原始子订单的商家编码和货品编号根据系统配置的自动匹配规则的商家编码重新获取对应的系统商家编码ID 未找到系统ID或者匹配关系为无或者空: 开启标记无效货品(P_UseTran=1) 标记无效货品(I_DL_MARK_INVALID_TRADE) 从原始单出发左连接平台货品表,发现未匹配的记录或者平台货品表不存在的记录 设置无效货品标记--is_invalid_goods=1 往平台货品添加不存在的货品信息 开启动态匹配且匹配方式为自动匹配 未找到通过原始子订单的商家编码和货品编号根据系统配置的自动匹配规则的商家编码重新获取对应的系统商家编码ID时 组合装不存在或者所包含的单品存在已删除 设置无效货品标记--is_invalid_goods=1
以上有任何一种满足设置原始单异常原因bad_reason=1; 记录日志--订单包含无效货品 -- 失败 子单状态若为已退款或者已关闭(80,90) 设置退款状态 V_RefundStatus=5 判断是否需要创建退款单 V_RefundStatus >1 @tmp_refund_occur = V_RefundStatus; 处理单品 获得系统货品相关信息(货品名字,货品编号,规格名称,商家编码,规格码,重量,税率,大件类型,0成本,航空禁运,体积) 若找不到则标记无效货品(P_UseTran=1 && I_DL_MARK_INVALID_TRADE),记录包含无效货品的日志 若钱付了 已付>=分摊总金额+分摊邮资 --将发货方式改为款到发货(delivery_term =1) 计算分摊后价格=分摊后总价/下单个数 根据以上得到的货品信息插入货品临时表: 细节注意 实发数量=IF(V_RefundStatus>2,0,下单数量) 优惠 = 原始子单优惠-调整金额+分摊后优惠 找一个未退款的,金额最大的子订单作主订单
处理组合装 获取系统组合装信息(商家编码,组合装名称,不可拆分,打印方式) 若找不到则标记无效货品(P_UseTran=1 && I_DL_MARK_INVALID_TRADE),记录包含无效组合装的日志 若打印方式非打印组合装明细则---设置为不可拆分类型 若不可拆分且关联子订单号为空--设为当前的子订单号bind_oid = v_src_oid 获取组合装内部的货品总量和总金额 数量为0 -- 标记无效货品--提示组合装不包含货品 分摊成交价,已付,邮资,优惠
根据以上得到的信息插入到临时表中 找一个未退款的,金额最大的子订单作主订单 标记主子订单号
3) 若传入系统订单ID 则直接通过临时表生成系统订单明细
若得到有错误结果 -- 离开
比较生成货品表得到的货品数量和货品种类数与原始单取到的 --不一致 bad_reason = 2 -- 订单货品数量不一致 离开
wms_type < 0 set wms_type = 0 --处于升级过渡(仓库类型)
4.配置读取顺序: 1)通过店铺信息读取是否开启转预定单和抢单策略 提前:开启备注提取 2)客服备注提取(I_DL_EXTRACT_REMARK) :传入的是trim(备注),备注前后空格不在内 传出 业务员 -- 根据设置的业务员的前缀和后缀进行提取 循环备注提取策略(cfg_trade_remark_extract class = 1)排序创建时间desc 物流公司 订单标记 业务员 仓库 是否转预订单 订单冻结 3)判断是否需要转预订单 V_IsPreOrder =1 记录不同方式转预订单的日志 4)客户备注提取(I_DL_EXTRACT_CLIENT_REMARK):传入客户备注 -- 开启提取备注 传出 订单标记 仓库 冻结 5)根据货品关键字转预订单处理-- 条件:待发货,开启转预订单配置,以上流程未设置转预订单 根据货品关键词的策略来 --若只设置货品,匹配的是平台货品名称(部分匹配--设置的关键词在平台货品中能找到) 只设置规格,匹配的是平台规格名称 同时设置货品和规格,匹配的是平台货品名称和平台规格名称同时满足 记录转预订单的日志--平台名称(货品或者规格)包含关键词 6)决定是否开启抢单(待发货,非转预订单,开启抢单,店铺设置抢单属性) 7)选仓策略(I_DL_DECIDE_WAREHOUSE) 原始单指定仓库编号 -- 选择该仓库类型的系统仓库ID 未指定仓库编号 按货品选择仓库(系统配置开启按货品选仓,店铺开启货品设置,货品指定店铺仓库) 货品设置为指定仓库 --按照货品指定店铺仓库选择出所有满足条件的仓库 货品设置为指定仓库地址 -- 按照货品指定店铺仓库,订单地址的省市区和满足条件的仓库的省市区相同的仓库 判断店铺是否指定仓库 --无--从仓库列表中取出一个满足指定仓库类型的仓库 --1个-- 看该仓库是否满足指定仓库类型 -- 满足--选中离开 --多个 仓库覆盖范围 根据订单指定的省市区和仓库覆盖范围到达的省市区相比较,取得所有满足的仓库(优先级从高到低) -- 若选择仓库为无 店铺指定仓库 根据店铺指定仓库按优先级排序,取得满足条件的仓库(优先级从高到低 仓库类型)
对于所有得到多个仓库的选仓策略: 全部库存充足 -- 按优先级从高到低 部分库存充足 -- 按优先级从高到低去库存充足的仓库 全部库存不足 -- 按缺货库存*订单金额算出每个仓库订单总的缺货金额是多少,取最小金额的仓库 库存的计算方式 -- 系统库存 = IF(库存(外部库存)-待发货量-待订购量<0,0,库存(外部库存)-待发货量-待订购量))-实发数量 <0,0,库存(外部库存)-待发货量-待订购量) 实际库存 = 系统库存-实发数量(如果大于0,取0) 缺货金额 = sum(实际库存*单品平均价格) 缺货金额最大也就是负的最小的仓库会被优先选择 细节:若设置校验库存 则尽量选择库存充足的仓库 若开启指定货品仓库时--更改仓库发生变化,则需要把选择好的仓库记录到表中,以便后续方便查找
若按货品指定仓库地址选择出了仓库 则需要把订单物流指给指定的物流(E速宝) ps:当前指定仓库地址适用于极速达业务 非极速达业务的情况下自动转入库存不存在,标记无效订单-- bad_reason |4 若客服备注提取到了仓库,以客服备注为主 判断选择到的抢单仓库是否可以去抢单(库存充足)
8)根据货品临时表还原订单表所需信息 (货品总量,种类数,总重量,支付金额,发货方式,货款金额,邮资,优惠,款到发货金额,货到付款金额,赠品标记,佣金,体积,航空禁运) -- 条件:货品未完成退款,实发数量大于0 判断订单是否有实发货品 --无 -- bad_reason |8 --订单无货品 标记订单退款状态 --若全退款 --则退款状态:全部退款 -- 订单状态:已取消 --若只有申请退款 -- 则退款状态:申请退款 --若存在退款 -- 则退款状态:部分退款 计算原始订单包含货品数量(货品种类数,货品总数) --种类数=1 -- 记下商家编码(便于在订单表中显示货品商家编码) 9)选择包装 --根据包装策略选择包装 1 重量 2 体积 (I_DL_DECIDE_PACKAGE) 开启选择包装策略 --重量 --根据包装策略设置好的重量区间,按传入的重量选 择策略中满足重量的包装ID --体积 --按照货品长*宽*高计算出包装物的体积,按从小到大顺序,选择离订单最接近的体积 将选择的包装重量加入订单总重量 10)选择物流(I_DL_DECIDE_LOGISTICS) --前提:经过前面流程仍未选择到物流 货到付款单 按仓库 使用该订单对应仓库里面的货到付款物流 --无 --使用对应店铺的货到付款物流 按店铺 使用店铺对应的货到付款物流 --无 -- 使用仓库对应的货到付款物流 若当前物流为无 使用指定的货到付款物流(物流策略界面) --无 -- 从物流公司里面选取一个支持货到付款的物流 非货到付款单 从店铺选择指定物流 --无 使用物流策略(全局,按仓库,按店铺) --涉及到不到达的处理 开启按重量匹配物流 校验获取到的物流是否满足要求(物流类型是否与指定物流相同) --无 校验是否开启配置 物流为无不启用默认物流 且物流类型为自定义 --离开 否则从物流公司列表中取得一个满足指定物流类型的物流公司 11)计算物流资费(I_DL_DECIDE_LOGISTICS_FEE) 根据设置的指定物流公司的物流资费来计算,若未设置则离开 依据订单重量区间和设置的区间资费已经取整方式来计算
12)设置大头笔/区县别名(I_DL_DECIDE_AREA_ALIAS) 根据区县别名策略来获取别名 --无 -- 区县别名= 市+区 13)估算货品成本 -- 通过实发数量和当前库存成本价
14)库存不足转预订单策略( 条件:待发货,开启转预订单策略,开启库存不足转策略,无预订单标记,非抢单标记,不自动转入外部仓储,仓库存在) 不同选择库存计算方式不一样,选择的库存计算方式低于实发数量 记录转预订单的日志
5.订单状态处理 已取消 不处理 5 开启自动转外部仓库且是外部仓库类型 转入订单已审核 55 记录日志 -- 委外订单 平台状态 未付款 未付款 10 待尾款 待尾款 12 待发货 if 仓库为空且为货品指定仓库地址 待选仓 13 elseif有预订单标记 预订单前处理 19 else if开启抢单且有选择到仓库 抢单状态 27 抢单订单物流必须是无单号物流 else 订单审核前处理 20 款到发货订单: 当前时间 < 支付时间+延迟时间 时 延迟审核状态 16 设置延迟时间 :支付时间+延迟审核时间 货到付款订单: 当前时间 < 交易时间+延时时间(系统设置) 时 延迟审核状态 16 设置延迟时间 :交易时间+延时时间 else 已取消 5 6.刷新标记(未付款,等未付,同名未合并) 未付款 标记有未付款订单(更新同一客户网名的订单状态>=10,<=95)--unmerge_mask|1 已付款(13,16,19,20,27) 标记同名未合并订单(更新同一客户网名的订单状态>=10,<=95) -- unmerge_mask|2 根据上面的更新其他单的状态判断给自己设置标记 重新计算标记 存在订单状态为10 -- 设置成有未付款 unmerge_mask|1 存在订单状态>10 <=95 -- 设置成同名未合并 unmerge_mask|2 设置等未付时间 当前状态为未付款 如果有同名未合并订单,且当前时间<=交易时间+等未付时间 将处于16,20的该网名的订单设置成等未付状态(15),延迟时间 = 交易时间+等未付时间 (to_delay_time) 当前状态为已付款(16,20,27) 如果有未付款订单 取得最近的一单未付款订单的交易时间 且 当前时间<= 交易时间+等未付时间 设置当前订单的状态为等未付状态(15),延迟时间 = 交易时间+等未付时间 (to_delay_time) 记录日志--等未付
7.生成系统订单 根据以上流程得到的订单信息生成系统订单(sales_trade) 根据货品临时表生成系统订单详情(sales_trade_detail)
8.占用库存(方法是先把之前占用的库存清掉,然后在重新占用) 未付款(10) --占用未付款量 已付款(15,16,20,27) -- 占用订购量 预订单(19) -- 占用预订单量 转到物流宝(55) -- 生成出库单 9.生成退款单 若前面生成货品临时表时判断有退款货品,则需生成原始退款单 查找退款单是否已经存在,如果已存在,就不需要创建临时退款单,直接更新退款单状态 临时退款单会在原始退款单递交时处理 10.记录客服备注变化(方便以后查看) 11.保存抢单库存 12.记录日志 下单,付款,递交 13.处理冻结订单 经前面备注提取要求冻结订单的冻结一下 14.更新原始单(记录下变化需要提示的仓库,备注提取非策略取得的物流ID,备注提取的业务员,冻结原因,记录下客户ID和递交ID)
15. 改原始单的系统状态为已递交,modify_flag = 0
16. 原始单处于待发货和已发货之间 同步订单全链路(开启才行)
二)处理变化的原始单 (-)处理主单变化(api_trade modify_flag>0 bad_reason = 0) 未递交(deliver_trade_id=0)和外部流程(is_external)的不处理 modify_flag 变化(原始单状态变化 1 支付状态变化 2 退款状态变化 4 客服备注变化 8 地址变化 16 发票变化 32 仓库变化 64 客户备注变化 128) <1> 状态发生变化 modify_flag & 1 根据递交的deliver_trade_id 找到系统订单的信息(订单状态,仓库,物流,客户ID,冻结原因) 1.原始单状态:待发货 30 1)当前系统订单状态为未付款或者待尾款 (1)客服备注变化(modify_flag&8) 记录备注,插入日志 (2)释放占用库存(未付款量) (3)重新生成货品 删除系统订单详情后面重新生成(更新原始子订单为待递交状态) 映射系统货品(I_DL_MAP_TRADE_GOODS 传入系统ID) (4)重新走订单递交的相关策略 店铺转预订单 客服备注提取 客户备注提取 关键词转预订单 选择仓库 选择包装 选择物流 计算资费 计算区县别名 库存不足转预订单 设置订单状态 (5)刷新标记 (6)解除之前的等未付订单 当前订单处于已付款状态(13,16,19,20,27) 有同名未合并标记没有未付款标记 将同一网名(customer_id)处于等未付状态的订单转入延迟审核状态, 设置延时时间 = IF(款到发货,支付时间,交易时间)+延迟时间 (7)解除未付款的标记 如果有同名未合并标记没有未付款标记,则同一网名的订单去掉未付款的标记(>=15 <95) (8)估计货品成本 (9)更新订单信息 (10)重新占用库存 (11)创建退款单 (12)保存抢单库存 (13)清除属于原始单Tid的所有子订单的modify_flag.process_status 改为已递交状态 (14)更新原始单 (15)处理冻结订单 (16)订单全链路 (17)记录日志
2)当前系统处于其他状态 modify_flag=0 记录日志--异常状态+系统状态
2.原始单状态:待尾款 20 1)系统状态 待支付 10 更新系统订单支付状态 取消等未付标记(如果没有未付款订单 同一网名>15 <=95) 记录日志 -- 首付款 2)当前系统处于其他状态 记录日志--异常状态2:+系统状态 3.原始单状态:整单退款 80 或者 整单关闭 90 =80 创建退款单 1)循环处理单(同一Tid 对应多个系统订单) (1)历史订单不处理 (2) 处理订单同名未合并标记(unmerge_mask) 系统订单 未付款 或者等未付 解除等未付订单(取最近的一单未付款订单的交易时间,判断是否超过了等未付的时间) -- 将改网名其他等未付的订单转入延迟审核状态 设置延时时间 = IF(款到发货,支付时间,交易时间)+延迟时间 -- 解除待审核订单的未付款标记(>15 <=95) 系统订单已付款(>=15) 解除同名未合并标记(系统订单同一网名除这单之外只有一单) (3)处理拦截标记 系统订单已审核(>=40 <95) 查看客户是否已经处理系统订单,-- 如果用户已经处理退款,就不需要拦截了 如果未处理退款,则需拦截 block_reason|2 标记退款 记录日志 标记出库单的拦截字段和订单的异常状态bad_reason |64 系统订单>=95 记录日志
(4)更新平台货品库存变化 因为订单退款会回收库存,然后更新库存同步 (5)回收库存 (6)扣减今日销量(>=25 <=55) (7)更新系统订单详情(actual_num = 0,标记退款状态等) (8)查看订单是否还有非赠品的单品 有 --刷新订单--记录日志:部分退款/关闭 无 取消赠品 2)开启拦截赠品配置 拦截同一网名的订单状态>=25 <95 包含赠品的订单 3)清除对应原始子订单的标记modify_flag 更改原始单的系统状态为已取消
4.原始单状态:已发货 更新系统订单的 是否发货字段为1(is_consigned) 更新原始单对应的系统状态为已发货
5.原始单状态:已完成 循环处理单: 1)处理打款(涉及账款) 还存在未打款货品 --系统已发货:客户打款,Tid --系统未发货:客户打款,未发货 不存在未打款货品 --系统已发货:客户打款,交易完成 --系统未发货:客户打款,未发货 清除对应原始子订单的标记modify_flag 更改原始单的系统状态为已完成 6.modify_flag& ~3 <2>退款状态变化 -- 属于部分退款 留给子订单处理 modify_flag&~4
<3>客服备注发生变化 modify_flag&8 1.记录备注 2.提取客服备注策略(提取到业务员的情况下,更新原始单的业务员,物流,冻结,标记) 3.计算备注(主要是处理多个原始单合并起来的备注,标旗) 4.更新订单信息(业务员(<55),备注,标旗,备注数量,备注变化标记) 5.处理物流 订单状态 :未审核或者是审核前开启备注提取 -- 更改物流,添加日志记录 待递交仓库 -- 记录日期,记录订单异常标记 bad_reason | 16 已审核待发货且开启备注变化拦截操作 -- 拦截出库单,记录拦截日志 block_reason |64 已发货且开启备注变化拦截操作 -- 记录备注变化日志 6.modify_flag& ~8
<4>客户留言变化 modify_flag&128 1.计算客户备注 2.更新订单客户备注 3.modify_flag& ~128 <5>订单地址发生变化 modify_flag&16 1.更新系统地址库,电话 (crm_customer_address,crm_customer_telno) 2.比较系统订单是否已经处理地址信息,若处理记录日志(以后程序不再走) 3.订单状态: 订单已审核 -- 拦截出库单(block_reason|4),记录订单和出库单日志 订单未审核 -- 直接修改订单地址信息,记录日志,重新计算物流,大头笔,包装) 其他情况 -- bad_reason | 2,记录日志 4.modify_flag& ~16
<6>发票信息发生变化 modify_flag&32 1.订单状态: 订单已审核 -- 拦截出库单(block_reason|8),记录订单和出库单日志 订单未审核 -- 直接修改订单发票信息,记录日志 其他情况 -- bad_reason | 4,记录日志 2.modify_flag& ~32
<7>仓库发生变化 modify_flag&64 1.订单状态: 订单已审核待发货 -- 拦截出库单(block_reason|8),记录日志 订单未审核 -- 重新选仓 仓库发生变化,库存重新占用,重新计算销量,记录日志 已发货未完成 -- 记录异常原因(bad_reason|8),记录日志 2.modify_flag& ~64 modify_flag=0 (二)处理子单变化(api_trade_order modify_flag>0) <1>子订单状态发生变化 modify_flag&1 1.已退款 或者已关闭: 判断是否存在主子订单 如果是已退款--递交退款单(处理退款) 1)循环找到该子单在系统中对应的订单 (1)系统订单状态: 已发货 -- 记录日志 已审核 -- 客户尚未处理退款 出库单存在 -- 拦截(block_reason|2),记录出库订单日志,记录订单日志,更新订单异常原因(bad_reason|64) (2)更新平台库存变化(往sys_process_background表插入记录) (3)回收库存,更新销量 (4)更新系统订单详情(actual_num=0,stock_reserved=0,refund_status=5/6) (5)看当前订单还有没非赠品货品 有--重新计算订单信息 无-- 取消赠品,回收库存,更新销量,更新系统订单信息 (6)依据子单的状态不同记录不同日志 2)退款拦截赠品(若开启拦截赠品) 3)重新分配邮费 2.已发货: 更新订单详情里面的是否发货状态 is_consigned = 1 更新原始单的系统状态(部分发货) 3.已完成: 处理打款(涉及账款) 更新原始单的系统状态(已完成) 4.modify_flag & ~1 <2>处理退款(处理售前申请退款和售后退款) modify_flag&2 1)非取消退款(申请退款、等待退货、等待收货) 1.订单状态: 已审核未发货 -- 拦截出库单(block_reason | 1),记录订单日志 2.标记系统子单的退款状态 3.标记系统订单的退款状态 4.开启拦截赠品配置下拦截包含赠品的订单 2)取消退款 查看系统是否已经处理了退款 若已经处理退款单而且系统订单已审核 -- 拦截出库单(block_reason | 256),记录日志 若已经处理退款单且系统订单未审核 -- 恢复订单明细,若订单是已取消状态还原到待审核状态 恢复货品数量和金额 重新占用库存 重新刷新销量 其他情况 将申请退款状态改为取消退款状态 3)重新分配邮费 4)记录日志 5)modify_flag & ~4 <3>更换货品(modify_flag & 16) 1)循环找到对应的系统订单 1.订单状态: 已审核 -- 拦截出库单(block_reason|128) 2.记录订单异常(bad_reason|32) 记录订单日志 2)modify_flag & ~16 <4>更新原始子单的标记modify_flag=0
三)处理中间状态的订单(预订单、待审核订单) (一)处于审核前处理的订单 转移等未付到延时审核(delay_to_time<curtime and 不到延时审核的时间) 转移等未付到前处理队列(delay_to_time<当前时间) 转移延时审核到前处理队列(delay_to_time<当前时间)
(二)循环处理前处理的订单 <1> 查看店铺信息(合并,拆分,货品指定仓库,分组) <2> 查看当前订单状态 <3> 订单自动合并(合并条件,包括仓库不同的处理,同名未合并处理,未拆分)-- 前提店铺设置允许拆分合并,款到发货单, 1.前处理订单自动合并 若仓库不同 开启配置(修改按货品选择仓库的时候提示) 若有锁定仓库,则不能自动合并 否则 释放当前占用库存 合并货品到到主订单 删除被合并的订单 合并订单日志 判断同名未合并 2.处理不需要合并后重新赠送赠品的赠品策略 订单中不包含自动赠送赠品时,赠送赠品。(赠品策略的具体内容参见赠品策略文档) 3.和订单(审核/预订单)进行合并(非冻结,未拆分,非独立大件) 从系统订单中找到一个满足合并策略的订单作为待合并的单子 释放占用库存 释放今日销量 如果合并订单需要重新计算赠品,则删除原来的赠品(原始单和订单) 删除新的订单 合并新单的货品到待合并的订单上去 合并日志 合并便签 记录日志--自动合并 刷新同名未合并标记 找不到时记录进入订单(待审核/预订单)的日志 4.更新订单信息--订单进入应该进入的状态(预订单/待审核) 5.处理合并后重新计算赠品
<4> 处理销量 <5> 按不同仓库进行拆分(开启策略,允许拆分合并,未拆分过,款到发货单) 1.将订单中指定最高优先级的仓库货品选出仓库和货品放到临时表中 2.按照库存选择最终的仓库(库存充足优先,其次是优先级) 3.判断是否开启不允许拆分后的订单全是赠品 开启--订单不允许拆出全是赠品的订单 否则--全是赠品的订单会被单独拆出来 4.重新占用库存 5.刷新销量 6.更新订单信息 <6> 拆分大件(分别计算出可拆分的独立大件和普通大件的个数) 若大件数量大于允许拆分的最大次数则退出不进行大件拆分 拆分独立大件 -- ceil(Num) 如果包含小数需要向上取整 能拆分(总数量大于1 而且 独立大件大于0) 拆分(一个货品一个订单) 如果是处于预订单查看 <7> 预订单拆分转审核 按照拆分预订单的配置来处理 <8> 占用库存 <9> 刷新同名未合并标记