天天看點

【程式媛曬83行代碼】阿裡口碑平台技術部工程師,不秀美顔秀代碼

在中國程式媛中,他們的代碼有什麼樣的魅力,Aone聯合雲栖社群、餓了麼、釘釘、阿裡雲、天貓、口碑發起首屆程式媛比碼活動——不秀大長腿,秀高智商;不秀美圖照,秀代碼圖,參與曬碼互動遊戲赢“83行代碼”T恤!

我們來說說這群女工程師的第83行代碼及代碼背後的故事:

我是 阿裡口碑 基礎平台技術部的工程師-銜遠,坐标上海。

聽說還有發照騙,說好的不秀美顔呢!!

ps:團隊大量招人,歡迎加入~~ [email protected]

下面是一段商品購買時庫存扣減回補的代碼,歡迎cr

public class PurchaseProcessExecutorImpl implements PurchaseProcessExecutor {

/**
 * 外部庫存服務
 */
private OutInventoryService outInventoryService;

/**
 * 執行外部扣減流程,同時更新扣減狀态
 *
 * @param bizOrder
 * @return
 */
@Override
public void executeSubtract(InventoryOrder bizOrder, String uid) {

    List<SubtractProcessDetail> details = bizOrder.getSubtractProcess();

    //生成外部預算請求,key是outInvId
    List<OutInventoryControlRequest> outReqs = convert2OutInvReqs(details);

    //通過budgetCore進行扣減
    Map<String, BudgetControlResult> res = budgetCoreControl(outReqs, uid, ControlType.SUBTRACT);

    //更新扣減單元狀态
    updateUnitStatus(res, details);

    //更新子單扣減狀态
    updateOrderStatus(details);

    //更新主單狀态
    bizOrder.updateSubtractStatus();

}

/**
 * 執行回補流程,同時更新回補狀态
 * @param subtractOrder
 * @param rollbackOrder
 * @param uid
 */
@Override
public void executeRollback(InventoryOrder subtractOrder, InventoryOrder rollbackOrder,
                            String uid) {

    //生成外部預算請求
    List<OutInventoryControlRequest> outReqs = convert2OutInvReqs(
        rollbackOrder.getRollbackProcess());

    //通過budgetCore進行回補
    Map<String, BudgetControlResult> res = budgetCoreControl(outReqs, uid, ControlType.ROLLBACK);

    //更新回補單元狀态
    updateUnitStatus(res, rollbackOrder.getRollbackProcess());

    //更新子單狀态
    updateOrderStatus(rollbackOrder.getRollbackProcess());

    //更新主單狀态
    rollbackOrder.updateRollbackStatus();

}

/**
 * 更新扣減單元狀态
 *
 * @param res
 * @param details
 */
private <T extends PurchaseProcessDetail> void updateUnitStatus(Map<String, BudgetControlResult> res,
                                                                List<T> details) {
    if (CollectionTool.isEmpty(details)) {
        return;
    }
    //結果解析
    details.forEach(detail -> {
        //根據扣減結果更新狀态
        detail.getUnits()
            .forEach(unit -> unit.updateUnitStatus(res.get(unit.getOutInventoryId())));
    });
}

/**
 * 更新子單明細狀态
 * @param details
 * @param <T>
 */
private <T extends PurchaseProcessDetail> void updateOrderStatus(List<T> details) {
    if (CollectionTool.isEmpty(details)) {
        return;
    }
    details.forEach(detail -> detail.updateStatus());
}

/**
 * 通過budgetCore進行回補 or 扣減
 *
 * @param outReqs
 * @param uid
 */
private Map<String, BudgetControlResult> budgetCoreControl(List<OutInventoryControlRequest> outReqs,
                                                           String uid,
                                                           ControlType controlType) {

    Map<String, BudgetControlResult> budgetControlResultMap = new HashMap<>();

    if (CollectionTool.isEmpty(outReqs)) {
        return budgetControlResultMap;
    }

    //根據類型調用bc進行回補or扣減
    if (ControlType.SUBTRACT == controlType) {
        //扣減
        budgetControlResultMap = outInventoryService.batchSubtract(uid, outReqs);

    } else if (ControlType.ROLLBACK == controlType) {
        //回補
        budgetControlResultMap = outInventoryService.batchRollback(uid, outReqs);

    } else {
        InvBizLog.procWarn(InvBizType.INV_SUBTRACT, InvSecErrorCode.BC_NOT_SUPPORT, "bc控制模式不支援",
            controlType);
    }

    if (CollectionTool.isEmpty(budgetControlResultMap)) {
        
        InvBizLog.fail(InvBizType.INV_SUBTRACT, InvSecErrorCode.LOAD_BUD_CORE_RESULT_NULL,
            "budgetCore調用失敗");
        throw new InvBusinessException(InvSecErrorCode.LOAD_BUD_CORE_RESULT_NULL, true);
    }

    InvBizLog.proc(InvBizType.INV_SUBTRACT, "budgetCore調用結束,結果={0}", budgetControlResultMap);

    return budgetControlResultMap;
}
}           

與銜遠小姐姐互動,為她打call——> 點選進去銜遠曬碼

更多小姐姐,點選進入檢視代碼

有被代碼耽誤的釘釘吃貨程式媛,寫代碼寫到忘記吃飯的——采霜

她急需能把她從代碼中叫醒去吃飯的小夥伴,趕緊勾搭;

http://yq.aliyun.com/roundtable/126499/answer/170319#visit170319

有以代碼為樂的餓了麼大前端打(bei)雜(guo)工程師——敖天羽

http://yq.aliyun.com/roundtable/126499/answer/170299#visit170299

還有全棧美女工程師——前端後端一鍋端的——墨瑜女神

http://yq.aliyun.com/roundtable/126499/answer/170316#visit170316

還有阿裡雲活好碼贊,像男人一樣活着的技術專家小姐姐——清宵

http://yq.aliyun.com/roundtable/126499/answer/170296#visit170296

和天貓Java程式媛,happy(被)來(逼)的——采月

http://yq.aliyun.com/roundtable/126499/answer/170354#visit170354

阿裡口碑 搜尋推薦組的JAVA女工程師——妍霏

http://yq.aliyun.com/roundtable/126499/answer/214059#visit214059

阿裡口碑基礎平台技術部的工程師-銜遠,一個技術與馬甲線并存的mm

http://yq.aliyun.com/roundtable/126499/answer/248798#visit248798

雲栖社群聚能聊專家,具有知性溫婉氣質的——海洋的雲

http://yq.aliyun.com/roundtable/126499/answer/170290#visit170290

福州市五佰網絡科技有限公司的Java女工程師——江小白太白

http://yq.aliyun.com/roundtable/126499/answer/189332#visit189332

在下*的程式媛——cn_suqingnian

http://yq.aliyun.com/roundtable/126499/answer/170309#visit170309

交通銀行的前端女工程師——昆0830

http://yq.aliyun.com/roundtable/126499/answer/201979#visit201979