Created
November 7, 2012 07:59
-
-
Save fatmind/4030105 to your computer and use it in GitHub Desktop.
坏代码的味道
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public boolean process(Map<String, Object> context) throws Exception { | |
BizOrderDO tcOrderDO = (BizOrderDO) context | |
.get(FlowConstants.TC_BIZ_ORDER); | |
FullOrderTO fullOrderTO = (FullOrderTO) context | |
.get(FlowConstants.FULL_ORDER_TO); | |
boolean redo=true; | |
boolean isWarehouseStore = false; | |
boolean isCom = false; | |
// 是否找到库存记录 | |
boolean isQuantity = false; | |
long taobaoTradeId = 0; | |
try { | |
// 淘宝卖家ID | |
Long sellerId = tcOrderDO.getSellerId(); | |
taobaoTradeId = tcOrderDO.getBizOrderId(); | |
// 是虚拟仓,减库存失败 需要让notify重发 | |
// 是否存在虚拟仓的库存 | |
boolean reduce = true; | |
OrderDO orderDO = fullOrderTO.getOrder(); | |
Long areaId = orderDO.getReceiverCountryId(); | |
List<BizOrderDO> orderList = tcOrderDO.getDetailOrderList(); | |
if (CollectionUtil.isNotEmpty(orderList)) { | |
for (BizOrderDO bizOrder : orderList) { | |
WlbTcOrderLogDO wlbTcOrderLogDO = new WlbTcOrderLogDO(); | |
wlbTcOrderLogDO.setUserNick(tcOrderDO.getSellerNick()); | |
String wlblnv = bizOrder | |
.getAttribute(BizOrderDO.ATTRIBUTE_HAS_WLB_INVENTORY); | |
// regionlogger.error(tcOrderDO.getBizOrderId(), | |
// LogKeyType.tradeCode, FlowConstants.FLOW_PAY_ROUTE, | |
// LogParams.set("订单标记是否存在物流宝分仓", wlblnv)); | |
Long icItemId = bizOrder.getAuctionId(); | |
int buyAmount = bizOrder.getBuyAmount(); | |
// 对于付款减库存 | |
boolean afterPay = bizOrder.isMinusStockAfterPay(); | |
String sku = bizOrder.getAttribute("sku"); | |
boolean isSku = false; | |
long skuId = 0; | |
if (StringUtil.isNotBlank(sku)) { | |
int num = sku.indexOf('|'); | |
String skuStr = sku.substring(0, num); | |
if (null != skuStr && !"".equals(skuStr)) { | |
isSku = true; | |
skuId = Long.valueOf(skuStr); | |
} | |
} | |
if (icItemId == null || icItemId.intValue() == 0 | |
|| buyAmount == 0 || areaId == null | |
|| areaId.intValue() == 0) { | |
// regionlogger.error( | |
// tcOrderDO.getBizOrderId(), | |
// LogKeyType.tradeCode, | |
// FlowConstants.FLOW_PAY_ROUTE, | |
// LogParams.set( | |
// "推荐物流的商品记录有问题", | |
// LogParams.set("用户", sellerId) | |
// .set("商品数量", buyAmount) | |
// .set("地区编码", areaId) | |
// .set("商品信息", icItemId) | |
// .set("sku信息", skuId))); | |
} else { | |
int type = 0; | |
if (chinaDivisionManager.checkRegionDivision(areaId | |
.intValue())) { | |
type = 2; | |
} else if (chinaDivisionManager | |
.checkCityDivision(areaId.intValue())) { | |
type = 1; | |
} else if (chinaDivisionManager | |
.checkProvDivision(areaId.intValue())) { | |
type = 0; | |
} | |
Long ownUserId = sellerId; | |
// 如果指定的订单已经处理过了,就不需要再次减库存 | |
if (!this.getTradIdForTair(bizOrder.getBizOrderId())) { | |
Result<List<InventoryDTO>> resultInventory = inventoryCacheService | |
.getInventory(icItemId, skuId, | |
areaId.intValue(), type, sellerId); | |
if (resultInventory.isSuccess()) { | |
List<InventoryDTO> list = resultInventory | |
.getData(); | |
if (resultInventory.getOtherModel("quantity") != null | |
&& list != null && list.size() > 0) { | |
int quantity = (Integer) resultInventory | |
.getOtherModel("quantity"); | |
if (quantity <= 0) { | |
// 如果查询库存不存在,就不减库存,但是需要记日志 | |
// regionlogger | |
// .error(tcOrderDO | |
// .getBizOrderId(), | |
// LogKeyType.tradeCode, | |
// FlowConstants.FLOW_PAY_ROUTE, | |
// LogParams | |
// .set("TC下单减库存错误:订单被付款拍下,但是实际库存为0调用接口为: inventoryCacheService.getInventory", | |
// LogParams | |
// .set("用户", | |
// sellerId) | |
// .set("地区编码", | |
// areaId) | |
// .set("商品信息", | |
// icItemId) | |
// .set("sku信息", | |
// skuId))); | |
} else { | |
// 判断是否是实体仓的商品,如果是,不做只记lock库存数据量 | |
isWarehouseStore = (Boolean) resultInventory | |
.getOtherModel("isWarehouseStore"); | |
if (isWarehouseStore) { | |
// 只处理实体仓 | |
Object object = resultInventory | |
.getOtherModel("itemMapDTOMap"); | |
if (object != null) { | |
// 存在组合商品,不考虑 | |
isCom = true; | |
Map<Long, Integer> itemMapDTOMap = (Map<Long, Integer>) object; | |
} | |
InventoryDTO inventoryDTO = list | |
.get(0); | |
wlbTcOrderLogDO | |
.setItemId(inventoryDTO | |
.getItemId()); | |
wlbTcOrderLogDO | |
.setStoreCode(inventoryDTO | |
.getStoreCode()); | |
Object tgtUserIdObject = resultInventory | |
.getOtherModel("tgtUserId"); | |
if (tgtUserIdObject != null) { | |
ownUserId = Long | |
.valueOf(tgtUserIdObject | |
.toString()); | |
} | |
} | |
// 如果区域销售的宝贝,进行减库存操作 | |
if (BizOrderDO.ATTRIBUTE_VALUE_TRUE | |
.equals(wlblnv)) { | |
// 如果是实体仓的库存就不需要操作 | |
if (isWarehouseStore) { | |
// 如果是付款减库存,就记lock | |
if (afterPay) { | |
} | |
} else { | |
Object object = resultInventory | |
.getOtherModel("itemMapDTOMap"); | |
Map<Long, Integer> itemMapDTOMap = null; | |
if (object != null) { | |
itemMapDTOMap = (Map<Long, Integer>) object; | |
} | |
String remarks = "tc=" | |
+ bizOrder | |
.getBizOrderId() | |
+ ",lg=" | |
+ orderDO | |
.getOrderCode(); | |
//Add by jiumu 2012-09-24 经路由到仓库了,就不需要在路由了,当当网模式接入,路由自由仓 | |
context.put("List<InventoryDTO>", list); | |
// 检查是否在wlb_tc_order_log中有记录,如果没有,执行减库存,否则返回 | |
WlbTcOrderLogDO checkRepeat = new WlbTcOrderLogDO(); | |
checkRepeat.setOrderTcCode(String.valueOf(bizOrder.getParentId())); | |
checkRepeat.setOrderTc2Code(String.valueOf(bizOrder.getBizOrderId())); | |
checkRepeat.setItemId(list.get(0).getItemId()); | |
List<WlbTcOrderLogDO> lists = wlbTcOrderLogDAO.selectByQueryMap(QueryUtils.getQueryMap(checkRepeat)); | |
if(lists.size() > 0){ | |
// 重复减库存 | |
reduce = false; | |
} | |
// 只有减成功了,下次就不需要再减 | |
if (reduceOwnQuantity(list, | |
sellerId, | |
itemMapDTOMap, | |
buyAmount, remarks)) { | |
// 减库存成功后,需要在wlb_tc_order_log中插入记录 | |
WlbTcOrderLogDO tcOrderLog = new WlbTcOrderLogDO(); | |
tcOrderLog.setUserNick(tcOrderDO.getSellerNick()); | |
tcOrderLog.setItemId(list.get(0).getItemId()); | |
tcOrderLog.setOrderTcCode(String.valueOf(bizOrder.getParentId())); | |
tcOrderLog.setOrderTc2Code(String.valueOf(bizOrder.getBizOrderId())); | |
tcOrderLog.setUserId(sellerId); | |
tcOrderLog.setItemEntityType(1); | |
tcOrderLog.setTcOrderStatus(TcOrderStatus.paid); | |
tcOrderLog.setTcQuantity(bizOrder.getBuyAmount()); | |
tcOrderLog.setWlQuantity(bizOrder.getBuyAmount()); | |
tcOrderLog.setItemEntityType(1); | |
tcOrderLog.setInventoryId(0L); | |
StringBuffer freature = new StringBuffer(); | |
freature.append("icItem="); | |
freature.append(icItemId + ";"); | |
if (skuId > 0) { | |
freature.append("icSku="); | |
freature.append(skuId + ";"); | |
} | |
tcOrderLog.setFreature(freature.toString()); | |
tcOrderLog.setVersion(0); | |
tcOrderLog.setInventoryType(InventoryConstants.TYPE.UNFILLED); | |
tcOrderLog.setWlbOrderStatus(InventoryConstants.WlbOrderStatus.wlbOrderNull); | |
wlbTcOrderLogDAO.insert(tcOrderLog); | |
this.putTCtradId(bizOrder | |
.getBizOrderId()); | |
} else { | |
// 其中有一次减虚拟仓库存失败 | |
reduce = false; | |
// 保证其他的可以测试 | |
} | |
} | |
} | |
} | |
} else { | |
// regionlogger | |
// .error(tcOrderDO.getBizOrderId(), | |
// LogKeyType.tradeCode, | |
// FlowConstants.FLOW_PAY_ROUTE, | |
// LogParams | |
// .set("库存不存在,严重错误", | |
// LogParams | |
// .set("用户", | |
// sellerId) | |
// .set("地区编码", | |
// areaId) | |
// .set("商品信息", | |
// icItemId) | |
// .set("sku信息", | |
// skuId))); | |
isQuantity = true; | |
Object object = resultInventory | |
.getOtherModel("wlbItemId"); | |
if (object != null) { | |
wlbTcOrderLogDO.setItemId(Long | |
.valueOf(object.toString())); | |
} | |
} | |
} else { | |
reduce = false; | |
} | |
} | |
// 纪录未发货库存数,暂时不影响主流程 | |
// 只记实体仓的库存未发货 | |
// 1.找到仓库,如果是实体仓的处理 | |
// 2没有找到库存记录,也处理 | |
// logger.error("((isWarehouseStore&&!isCom)||isQuantity)="+((isWarehouseStore&&!isCom)||isQuantity)); | |
if ((isWarehouseStore && !isCom) || isQuantity) { | |
wlbTcOrderLogDO.setTcQuantity(buyAmount); | |
if (!addUnfilledInventory(wlbTcOrderLogDO, | |
ownUserId, icItemId, skuId, taobaoTradeId, | |
bizOrder)) { | |
return redo; | |
} | |
} | |
} | |
} | |
}// end isSubWareHouse | |
if (!reduce) { | |
// regionlogger.error(tcOrderDO.getBizOrderId(), | |
// LogKeyType.tradeCode, | |
// FlowConstants.FLOW_PAY_ROUTE, | |
// "虚拟仓减库存失败"); | |
return redo; | |
} | |
} catch (Exception e) { | |
// regionlogger.error(tcOrderDO.getBizOrderId(), | |
// LogKeyType.tradeCode, | |
// FlowConstants.FLOW_PAY_ROUTE, | |
// "区域销售发生错误",e); | |
} | |
return false; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment