Skip to content

Instantly share code, notes, and snippets.

@fatmind
Created November 7, 2012 07:59
Show Gist options
  • Save fatmind/4030105 to your computer and use it in GitHub Desktop.
Save fatmind/4030105 to your computer and use it in GitHub Desktop.
坏代码的味道
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