出荷プロセス, 発送負荷の平準化 20211119
受注窓口部門が注文を受付け、商品発送完了を確認できるワークフローです。
発送作業は、担当チームの未割当者に自動で割り当てられます。
納期1日前の未発送作業は、別担当者に自動で割り当てられます。
発送完了時、顧客へメール通知されます。
仕事の流れ (ワークフロー図の複雑度:17)
- 31 0.手動:受注登録
- 5 1.発送作業記録
- 13 2.着荷時 対応
- 23 件名/発送締切日セット
- ワークフロー基盤が、件名/発送締切日(納期の1日前)をセットします。
- 27 作業中リスト取得
- ワークフロー基盤が、発送作業中の案件リストを抽出します。
- 28 発送作業担当者 決定
- ワークフロー基盤が、発送担当者を決定します。作業を行っていない担当者を指定します。すべての担当者が作業中の場合、作業中の件数が最も少ない担当者を指定します。
- 43 発送担当組織に所属するユーザ一覧取得
- ワークフロー基盤が、発送担当組織に所属するユーザのメールアドレス一覧を取得します。
受け渡しされるビジネスプロセス変数 (データ項目の数:22)
- ◆受注情報
9
- 注文番号 q_contract_number
0
- 指定納期 q_deadline_datetime
15
- 注文商品ID q_merchandise_id
6
- 注文商品名 q_merchandise_name
7
- 注文個数 q_merchandise_quantity
25
- 企業名 q_corprate_name
2
- 組織名 q_customer_div_name
4
- 注文者名 q_customer_name
3
- 注文者メールアドレス q_contracted_email
8
- 送付先住所 q_post_address
11
- ◆発送情報
10
- 発送担当者 q_desk_person
23
- 発送作業締切日 q_delivery_deadline_datetime
27
- 発送完了日時 q_delivery_datetime
14
- 着荷時 注意事項 q_sending_message
16
- 完了メール差し込みメッセージ q_message_for_complete_mail
22
- 発送完了通知メールに差し込むメッセージが格納されます。
- ◆窓口情報
12
- 着荷時対応記録 q_arrival_record
17
- ◆システム情報
13
- 現在発送作業リスト q_current_working_information
1
- 発送作業 割当対象者リスト q_offer_users_for_deliery
26
- 発送作業担当組織に所属するメンバーのメールアドレス一覧が格納されます。
フィールド名, Num
, 初期値
Download
This archive contains the BPMN icon, which is only available in the Professional edition.
Notes
- インポート時に組織構造に合わせて、処理担当者設定の関連付けを行います
- 「発送担当者 決定」自動処理タスク の処理
- 「発送作業 担当者リスト」の担当者毎に作業中の件数を集計します。
- 最も作業中件数が少ない担当者が作業者として割当たります。
- 作業中件数が同数の場合、「発送作業 担当者リスト」の並び順に割り当てられます。
「発送担当者 決定」自動工程 スクリプト (click to open)
const usersInfo = engine.findDataByVarName("q_offer_users_for_deliery");
const tasksInfo = engine.findDataByVarName("q_current_working_information");
main();
function main(){
engine.log("Target Qusers Existence Check");
if (usersInfo === null){
engine.log("Users are not found.");
return;
}
engine.log("Array Initial");
let targetUsers = usersInfo.split("\n");
let targetUsersInfos = new Array(targetUsers.length);
// targetUsersInfos Format: [0] mail Address [1] count of working tasks
for (var i=0; i < targetUsersInfos.length; i++){
targetUsersInfos[i] = new Array(2);
targetUsersInfos[i][0] = targetUsers[i];
targetUsersInfos[i][1] = 0;
}
engine.log("Proccesses Existance Check");
if (tasksInfo === null){
engine.log("Current tasks are not found.");
engine.setDataByVarName("q_desk_person", quserDao.findByEmail( targetUsers[0] ));
return;
}
engine.log("Search Worker");
const targetTasks = tasksInfo.split("\n");
for (var i=0; i < targetUsersInfos.length; i++){
for (var j=0; j < targetTasks.length; j++){
let cols = targetTasks[j].split("\t");
if ((cols[8].indexOf("<" + targetUsersInfos[i][0] + ">")) != -1){
targetUsersInfos[i][1] += 1;
}
}
if (targetUsersInfos[i][1] === 0){
engine.log("current task 0: " + targetUsersInfos[i][0]);
engine.setDataByVarName("q_desk_person", quserDao.findByEmail( targetUsersInfos[i][0] ));
return;
}
}
engine.log("Array Sort");
targetUsersInfos.sort(function(a,b){return(a[1] - b[1]);});
for (var i=0; i < targetUsersInfos.length; i++){
engine.log("targetUsersInfos[" + i + "]: " + targetUsersInfos[i][0] + " : " + targetUsersInfos[i][1]);
}
engine.setDataByVarName("q_desk_person", quserDao.findByEmail( targetUsersInfos[0][0] ));
}
Capture
See also
Related