OrderService.php 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940
  1. <?php
  2. namespace App\Services;
  3. use App\Logistic;
  4. use App\OracleActAllocationDetails;
  5. use App\OracleDOCASNHeader;
  6. use App\OracleDOCOrderHeader;
  7. use App\Order;
  8. use App\OrderIssue;
  9. use App\Owner;
  10. use App\RejectedBill;
  11. use App\Services\common\BatchUpdateService;
  12. use App\Services\common\DataHandlerService;
  13. use App\Shop;
  14. use App\Warehouse;
  15. use Carbon\Carbon;
  16. use Illuminate\Support\Collection;
  17. use Illuminate\Support\Facades\App;
  18. use Illuminate\Support\Facades\DB;
  19. class OrderService
  20. {
  21. public function batchUpdate($params){
  22. return app(BatchUpdateService::class)->batchUpdate('orders',$params);
  23. }
  24. public function insert($params){
  25. app('LogService')->log(__METHOD__,__FUNCTION__,'批量创建 Order'.json_encode($params));
  26. return Order::query()->insert($params);
  27. }
  28. private function preciseQuery(array $params,$sql){
  29. $orderdate_start=$params["orderdate_start"] ?? null;
  30. $orderdate_end=$params["orderdate_end"] ?? null;
  31. $customerid=$params["customerid"] ?? null;
  32. $orderno=$params["orderno"] ?? null;
  33. $soreference5=$params["soreference5"] ?? null;
  34. $codename_c=$params["codename_c"] ?? null;
  35. $codename_c_end=$params["codename_c_end"] ?? null;
  36. $carriername=$params["carriername"] ?? null;
  37. $soreference1=$params["soreference1"] ?? null;
  38. $issuepartyname=$params["issuepartyname"] ?? null;
  39. $notes=$params["notes"] ?? null;
  40. $addtime=$params["addtime"] ?? null;
  41. $waveno=$params["waveno"] ?? null;
  42. $alternate_sku1=$params["alternate_sku1"] ?? null;
  43. $c_contact = $params["c_contact"] ?? null;
  44. $c_tel2 = $params["c_tel2"] ?? null;
  45. $c_province = $params["c_province"] ?? null;
  46. $c_city = $params["c_city"] ?? null;
  47. $c_district = $params["c_district"] ?? null;
  48. $releasestatus = $params["releasestatus"] ?? null;
  49. $ordernos = $params["ordernos"] ?? null;
  50. $edisendflag2=$params["edisendflag2"] ?? null;
  51. $edisendflag=$params["edisendflag"] ?? null;
  52. $checkAllSign = $params['checkAllSign'] ?? null;
  53. if ($ordernos){
  54. $sql .= " AND orderno IN ".$ordernos;
  55. }
  56. if ($c_contact){
  57. $sql .= " AND c_contact like '".$c_contact."'";
  58. }
  59. if ($c_tel2){
  60. $sql .= " AND (c_tel2 like '".$c_tel2."' OR c_tel1 like '".$c_tel2."')";
  61. }
  62. if ($c_province){
  63. $sql .= " AND c_province like '".$c_province."'";
  64. }
  65. if ($c_city){
  66. $sql .= " AND c_city like '".$c_city."'";
  67. }
  68. if ($c_district){
  69. $sql .= " AND c_district like '".$c_district."'";
  70. }
  71. if ($releasestatus){
  72. $sql .= " AND releasestatus = '".$releasestatus."'";
  73. }
  74. if ($alternate_sku1){
  75. if ($checkAllSign) $detailsOrderno = $this->getOrdersNo($alternate_sku1,false);
  76. else $detailsOrderno = $this->getOrdersNo($alternate_sku1,true, $request->page ?? 1, $request->paginate ?? 50);
  77. if (count($detailsOrderno)>0){
  78. $sql.=' AND orderno IN (';
  79. foreach ($detailsOrderno as $index => $no){
  80. if ($index==0){
  81. $sql.="'".$no."'";
  82. continue;
  83. }
  84. $sql.=",'".$no."'";
  85. }
  86. $sql.=')';
  87. }else{
  88. $sql .= 'AND orderno IS NULL ';
  89. }
  90. }
  91. if ($orderdate_start && $orderdate_end && $addtime){
  92. $orderdate_start=null;
  93. $orderdate_end=null;
  94. }
  95. if ($orderdate_start){
  96. if (strlen($orderdate_start)<11)$orderdate_start .= ' 00:00';
  97. $sql.=" and addtime>=to_date('".$orderdate_start.":00','yyyy-mm-dd hh24:mi:ss')";
  98. }
  99. if ($orderdate_end){
  100. if (strlen($orderdate_end)<11)$orderdate_end .= ' 23:59 ';
  101. $sql.=" and addtime<=to_date('".$orderdate_end.":59','yyyy-mm-dd hh24:mi:ss')";
  102. }
  103. if ($customerid){
  104. if (!is_array($customerid))$arr = explode(',',$customerid);
  105. else $arr = $customerid;
  106. if (count($arr)>0) {
  107. $sql.=" and customerid in (";
  108. foreach ($arr as $index=>$str){
  109. if ($index==0){
  110. $sql.="'".$str."'";
  111. continue;
  112. }
  113. $sql.=",'".$str."'";
  114. }
  115. $sql.=")";
  116. }
  117. }
  118. if ($orderno)$sql.=" and orderno like '".$orderno."%'";
  119. if ($codename_c&&$codename_c_end)$sql.=" and sostatus between '".$codename_c."' and '".$codename_c_end."'";
  120. if ($codename_c&&!$codename_c_end)$sql.=" and sostatus = '".$codename_c."'";
  121. if (!$codename_c&&$codename_c_end)$sql.=" and sostatus = '".$codename_c_end."'";
  122. if ($carriername)$sql.=" and carriername like '".$carriername."%'";
  123. if ($soreference1){
  124. $arr=array_values(array_filter(preg_split('/[,, ]+/is', $soreference1)));
  125. if (count($arr)==1){
  126. $sql.=" and soreference1 like '".$soreference1."%'";
  127. }
  128. if (count($arr)>1){
  129. $sql.=" and soreference1 in (";
  130. foreach ($arr as $index=>$str){
  131. if ($index==0){
  132. $sql.="'".$str."'";
  133. continue;
  134. }
  135. $sql.=",'".$str."'";
  136. }
  137. $sql.=")";
  138. }
  139. }
  140. if ($waveno)$sql.=" and WaveNo like '".$waveno."%'";
  141. if ($issuepartyname)$sql.=" and issuepartyname like '".$issuepartyname."%'";
  142. if ($notes){
  143. if ($addtime&&$addtime!=0)$sql.=" and addtime >= to_date('".date('Y-m-d H:i:s',strtotime("-".$addtime." day"))."','yyyy-mm-dd hh24:mi:ss')";
  144. $sql.=" and notes like '%".$notes."%'";
  145. }
  146. if ($soreference5){
  147. $arr=array_values(array_filter(preg_split('/[,, ]+/is', $soreference5)));
  148. if (count($arr)>0){
  149. $sql.=" and (soreference5 in (";
  150. foreach ($arr as $index=>$str){
  151. if ($index==0){
  152. $sql.="'".$str."'";
  153. continue;
  154. }
  155. $sql.=",'".$str."'";
  156. }
  157. $sql.=") ";
  158. /*分箱号*/
  159. $oracleActAllocationDetails=DB::connection('oracle')->table('ACT_ALLOCATION_DETAILS')->whereIn('picktotraceid',$arr)->get();
  160. $picktotraceids=array_unique(array_column($oracleActAllocationDetails->toArray(),'orderno'));
  161. if (count($picktotraceids)>0){
  162. $sql.='OR orderno IN (';
  163. foreach ($picktotraceids as $index=>$str){
  164. if ($index==0){
  165. $sql.="'".$str."'";
  166. continue;
  167. }
  168. $sql.=",'".$str."'";
  169. }
  170. $sql.=") ";
  171. }
  172. $sql.=")";
  173. }
  174. }
  175. if ($edisendflag2){
  176. $sql.=" and edisendflag2 like '".$edisendflag2."%'";
  177. }
  178. if ($edisendflag){
  179. $sql.=" and edisendflag like '".$edisendflag."%'";
  180. }
  181. return $sql;
  182. }
  183. public function getSql($params, $page = null, $paginate = null){
  184. $checktime_start = $params['checktime_start'] ?? null;
  185. $checktime_end = $params['checktime_end'] ?? null;
  186. $checkData = $params['data'] ?? null;
  187. if ($checktime_start || $checktime_end){
  188. /** @var OracleActAllocationDetailService */
  189. $ordernos = app('OracleActAllocationDetailService')
  190. ->getOrderno(['checktime_start'=>$checktime_start,'checktime_end'=>$checktime_end,
  191. 'paginate'=>$paginate,'page'=>$page]);
  192. $params['ordernos'] = $ordernos;
  193. }
  194. $sql="select ACT_ALLOCATION_DETAILS.CHECKTIME,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,DOC_ORDER_HEADER.CustomerID
  195. ,DOC_ORDER_HEADER.C_Tel2,DOC_ORDER_HEADER.C_Tel1,DOC_ORDER_HEADER.CarrierName,DOC_ORDER_HEADER.IssuePartyName,DOC_ORDER_HEADER.EDIREMARKS2,
  196. DOC_ORDER_HEADER.WaveNo,DOC_ORDER_HEADER.SOReference1
  197. ,DOC_ORDER_HEADER.soreference5,DOC_ORDER_HEADER.EDISENDFLAG2,DOC_ORDER_HEADER.EDISendTime2,DOC_ORDER_HEADER.Notes,DOC_ORDER_HEADER.ERPCANCELFLAG,
  198. DOC_ORDER_HEADER.Picking_Print_Flag,DOC_ORDER_HEADER.EDISENDFLAG
  199. ,DOC_ORDER_HEADER.ReleaseStatus,DOC_ORDER_HEADER.C_Address1,DOC_ORDER_HEADER.OrderTime,DOC_Order_Details.CustomerID,
  200. DOC_Order_Details.SKU,DOC_Order_Details.QtyOrdered,DOC_Order_Details.LineStatus,DOC_Order_Details.OrderLineNo,order_code.codename_c as orderCodeName,
  201. order_detail_code.codename_c as orderDetailCodeName,BAS_Customer.descr_c as customer_descr_c,
  202. BAS_SKU.Alternate_SKU1,BAS_SKU.Descr_C,(select count(*) from DOC_ORDER_HEADER WHERE 1=1";
  203. $sql=$this->preciseQuery($params,$sql);
  204. ;$sql.=" ) as counted from (";
  205. if ($paginate && $page)$sql.=" select * from (";
  206. $sql.=" select ROWNUM as rn,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,DOC_ORDER_HEADER.CustomerID
  207. ,DOC_ORDER_HEADER.C_Tel2,DOC_ORDER_HEADER.C_Tel1,DOC_ORDER_HEADER.CarrierName,DOC_ORDER_HEADER.IssuePartyName,
  208. DOC_ORDER_HEADER.WaveNo,DOC_ORDER_HEADER.SOReference1
  209. ,DOC_ORDER_HEADER.soreference5,DOC_ORDER_HEADER.EDISENDFLAG2,DOC_ORDER_HEADER.EDISendTime2,DOC_ORDER_HEADER.Notes,DOC_ORDER_HEADER.ERPCANCELFLAG,
  210. DOC_ORDER_HEADER.Picking_Print_Flag,DOC_ORDER_HEADER.EDISENDFLAG
  211. ,DOC_ORDER_HEADER.ReleaseStatus,DOC_ORDER_HEADER.C_Address1,DOC_ORDER_HEADER.OrderTime,DOC_ORDER_HEADER.EDIREMARKS2 from (select * from DOC_ORDER_HEADER order by ADDTIME desc )DOC_ORDER_HEADER where 1=1 ";
  212. $sql=$this->preciseQuery($params,$sql);
  213. if ($checkData){
  214. if (!is_array($checkData)) $checkData=explode(',',$checkData);
  215. if (count($checkData)>0){
  216. $sql.=" and orderno in (";
  217. foreach ($checkData as $index=>$str){
  218. if ($index==0){
  219. $sql.="'".$str."'";
  220. continue;
  221. }
  222. $sql.=",'".$str."'";
  223. }
  224. $sql.=")";
  225. }
  226. }
  227. if ($paginate && $page)$sql.=" and ROWNUM<='".$page*$paginate."')";
  228. if ($paginate && $page)$sql.=" header where header.rn>'".($page-1)*$paginate."' ";
  229. $sql.=")DOC_ORDER_HEADER left join DOC_ORDER_DETAILS on DOC_ORDER_DETAILS.ORDERNO=DOC_ORDER_HEADER.ORDERNO
  230. left join BAS_CODES order_code on order_code.CODE=DOC_ORDER_HEADER.sostatus and order_code.codeid='SO_STS'
  231. left join BAS_CODES order_detail_code on order_detail_code.CODE=DOC_ORDER_DETAILS.linestatus and order_detail_code.codeid='SO_STS'
  232. left join BAS_Customer on BAS_Customer.customerid=DOC_ORDER_HEADER.customerid
  233. left join BAS_SKU on DOC_Order_Details.CustomerID=BAS_SKU.CustomerID and DOC_Order_Details.SKU=BAS_SKU.SKU
  234. left join ACT_ALLOCATION_DETAILS on DOC_Order_Details.orderno = ACT_ALLOCATION_DETAILS.orderno
  235. and DOC_Order_Details.ORDERLINENO = ACT_ALLOCATION_DETAILS.ORDERLINENO
  236. GROUP BY ACT_ALLOCATION_DETAILS.CHECKTIME,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,
  237. DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,
  238. DOC_ORDER_HEADER.CustomerID,DOC_ORDER_HEADER.C_Tel2,DOC_ORDER_HEADER.C_Tel1,DOC_ORDER_HEADER.CarrierName,DOC_ORDER_HEADER.IssuePartyName,
  239. DOC_ORDER_HEADER.EDIREMARKS2,DOC_ORDER_HEADER.WaveNo,DOC_ORDER_HEADER.SOReference1, DOC_ORDER_HEADER.soreference5,
  240. DOC_ORDER_HEADER.EDISENDFLAG2,DOC_ORDER_HEADER.EDISendTime2,DOC_ORDER_HEADER.Notes,DOC_ORDER_HEADER.ERPCANCELFLAG,
  241. DOC_ORDER_HEADER.Picking_Print_Flag,DOC_ORDER_HEADER.EDISENDFLAG,DOC_ORDER_HEADER.ReleaseStatus,DOC_ORDER_HEADER.C_Address1,
  242. DOC_ORDER_HEADER.OrderTime,DOC_Order_Details.CustomerID,DOC_Order_Details.SKU,DOC_Order_Details.QtyOrdered,
  243. DOC_Order_Details.LineStatus,DOC_Order_Details.OrderLineNo,order_code.codename_c,order_detail_code.codename_c,BAS_Customer.descr_c,
  244. BAS_SKU.Alternate_SKU1,BAS_SKU.Descr_C ORDER BY DOC_ORDER_HEADER.ADDTIME desc";
  245. return $sql;
  246. }
  247. //通过商品条码获取订单编号
  248. public function getOrdersNo($alternate_sku1, $isPaging = true, $page = 1, $paginate = 50){
  249. if ($isPaging){
  250. $sql = "SELECT RESULT.ORDERNO FROM
  251. (SELECT ROWNUM rn,DETAIL.ORDERNO as ORDERNO FROM
  252. (SELECT ORDERNO FROM DOC_ORDER_DETAILS WHERE SKU LIKE '".$alternate_sku1."' GROUP BY ORDERNO ORDER BY ORDERNO DESC)DETAIL
  253. WHERE ROWNUM<='".$page*$paginate."')RESULT
  254. WHERE RESULT.rn>'".($page-1)*$paginate."'";
  255. }else {
  256. $sql = "SELECT ORDERNO FROM DOC_ORDER_DETAILS WHERE SKU LIKE '".$alternate_sku1."' GROUP BY ORDERNO ORDER BY ORDERNO DESC";
  257. }
  258. $orderDetails = DB::connection('oracle')->select(DB::raw($sql));
  259. return array_column($orderDetails,'orderno');
  260. }
  261. public function paginate(array $params){
  262. if (($params['is_display_all'] ?? false) && !($params['codename_c'] ?? false) && !($params['codename_c_end'] ?? false)){
  263. $params['codename_c'] = "00";
  264. $params['codename_c_end'] = "62";
  265. }
  266. $sql = $this->getSql($params,$params['page'] ?? 1, $params['paginate'] ?? 50);
  267. $orders=DB::connection('oracle')->select(DB::raw($sql));
  268. return $this->orderFormat($orders);
  269. }
  270. public function get(array $params){
  271. $sql = $this->getSql($params);
  272. $orders=DB::connection('oracle')->select(DB::raw($sql));
  273. return $this->orderFormat($orders);
  274. }
  275. private function orderFormat($orders){
  276. $commodities=[];
  277. $orderNos = "(''";
  278. $picktotraceids=[];
  279. /*
  280. * 第二种扁平化方式(节省空间): 使用快慢指针,因拿到数据正常为顺序数据,自下标1开始与上一条对比orderno唯一标识,不同则更新慢指针下标,
  281. * 相同则为指定下标map类型数组追加一个键值对属性来记录同类数量,如N条,每次追加属性时先看属性是否存在,存在+1
  282. * */
  283. foreach ($orders as $index=>$order){
  284. if (isset($commodities[$order->orderno])){
  285. array_push($commodities[$order->orderno],
  286. ["sku"=>$order->sku,"alternate_sku1"=>$order->alternate_sku1,"descr_c"=>$order->descr_c,"qtyordered"=>$order->qtyordered
  287. ,"checktime"=>$order->checktime,"orderdetailcodename"=>$order->orderdetailcodename]);
  288. unset($orders[$index]);
  289. continue;
  290. }
  291. $commodities[$order->orderno]=[["sku"=>$order->sku,"alternate_sku1"=>$order->alternate_sku1,
  292. "descr_c"=>$order->descr_c,"qtyordered"=>$order->qtyordered,"checktime"=>$order->checktime,"orderdetailcodename"=>$order->orderdetailcodename]];
  293. $orderNos .= ",'".$order->orderno."'";
  294. }
  295. $orderNos .= ")";
  296. $allocations = DB::connection("oracle")->select(DB::raw("SELECT DROPID,ORDERNO FROM ACT_ALLOCATION_DETAILS WHERE orderno IN ".$orderNos." GROUP BY (DROPID,ORDERNO)"));
  297. foreach ($allocations as $allocation){
  298. if (isset($picktotraceids[$allocation->orderno])) $picktotraceids[$allocation->orderno][] = $allocation->dropid;
  299. else $picktotraceids[$allocation->orderno] = [$allocation->dropid];
  300. }
  301. $picktotraceids=json_encode($picktotraceids);
  302. $orders=array_values($orders);
  303. $orders = new Collection($orders);
  304. $commodities=new Collection($commodities);
  305. return ['picktotraceids'=>$picktotraceids,'orders'=>$orders,'commodities'=>$commodities];
  306. }
  307. public function findOrCreateByClientCode($clientCode)
  308. {
  309. /** @var OrderPackageService $orderPackageService */
  310. $orderPackageService = app('OrderPackageService');
  311. $order = Order::query()->where('client_code', $clientCode)->first();
  312. $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
  313. if ($orderHeader == null) {
  314. return null;
  315. }
  316. $orderHeadAttr = $orderHeader->toArray();
  317. if ($order == null) {
  318. $customer_name = $orderHeadAttr['oracleBASCustomer_descr_c'];
  319. $owner = Owner::query()->where('code', $orderHeadAttr['customerid'])->first();
  320. if (!$owner) {
  321. try {
  322. $owner = Owner::query()->create(['code' => $orderHeadAttr['customerid'], 'name' => $customer_name]);
  323. app('LogService')->log(__METHOD__, __FUNCTION__, '创建货主' . json_encode($owner));
  324. } catch (\Exception $e) {
  325. app('LogService')->log(__METHOD__, __FUNCTION__, '创建货主失败' . $e->getMessage() . $e->getTraceAsString());
  326. }
  327. }
  328. $owner_id = $owner['id'];
  329. $shop_name = $orderHeadAttr['issuepartyname'];
  330. $shop_Id = null;
  331. if ($shop_name) {
  332. $shop = Shop::query()->firstOrCreate(['name' => $shop_name, 'owner_id' => $owner_id]);
  333. $shop_Id = $shop['id'];
  334. }
  335. $logistics = Logistic::query()->where(['code' => $orderHeadAttr['userdefine1']])->first();
  336. $logistics_id = null;
  337. if ($logistics) {
  338. $logistics_id = $logistics['id'];
  339. } else {
  340. try {
  341. $logistics = Logistic::query()->create(['name' => $orderHeadAttr['carriername'], 'code' => $orderHeadAttr['userdefine1']]);
  342. $logistics_id = $logistics['id'];
  343. app('LogService')->log(__METHOD__,__FUNCTION__,'创建承运商'.json_encode($logistics));
  344. } catch (\Exception $e) {
  345. app('LogService')->log(__METHOD__,__FUNCTION__,'创建承运商失败'.$e->getMessage().$e->getTraceAsString());
  346. }
  347. }
  348. $warehouse = Warehouse::query()->where('code',$orderHeadAttr['warehouseid'])->first();
  349. $arr = [
  350. 'warehouse_id' =>$warehouse->id ??'',
  351. 'code' => $orderHeadAttr['orderno'],
  352. 'owner_id' => $owner_id,
  353. 'wms_status' => $orderHeadAttr['oracleBASCode_codename_c'],
  354. 'created_at' => $orderHeadAttr['addtime'],
  355. 'logistic_id' => $logistics_id,
  356. 'shop_id' => $shop_Id,
  357. 'consignee_name' => $orderHeadAttr['c_contact'],
  358. 'consignee_phone' => empty($orderHeadAttr['c_tel2'])?$orderHeadAttr['c_tel1']:$orderHeadAttr['c_tel2'],
  359. 'province' => $orderHeadAttr['c_province'],
  360. 'city' => $orderHeadAttr['c_city'],
  361. 'district' => $orderHeadAttr['c_district'],
  362. 'address' => $orderHeadAttr['c_address1'],
  363. 'client_code' => $orderHeadAttr['soreference1'],
  364. ];
  365. $order = Order::query()->create($arr);
  366. app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order '.json_encode($order));
  367. unset($arr,$orderHeadAttr,$owner);
  368. }else{
  369. $this->updateOrderByOrderHeader($order,$orderHeader);
  370. }
  371. $orderPackageService->createdByOrder($order);unset($order);
  372. return Order::with('packages.commodities.commodity')->where('client_code', $clientCode)->first();
  373. }
  374. public function getRejectedBillOfClientCode($clientCode)
  375. {
  376. $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $clientCode)->first();
  377. if (!$orderHeader) {
  378. return null;
  379. }
  380. $ASNHeader = OracleDOCASNHeader::query()->where('ASNReference2', $orderHeader->soreference2)->first();
  381. if (!$ASNHeader) {
  382. return null;
  383. }
  384. return RejectedBill::query()->with(['owner', 'logistic', 'items'])->where('logistic_number_return', $ASNHeader->asnreference2)->first();
  385. }
  386. public function findOrCreteByLogisticNumberReturn($logisticNumberReturn)
  387. {
  388. $ASNHeader = OracleDOCASNHeader::query()->where('ASNReference3', $logisticNumberReturn)->first();
  389. if (!$ASNHeader) {
  390. return null;
  391. }
  392. $orderHeader = OracleDOCOrderHeader::query()->where('SOReference1', $ASNHeader->ASNReference2);
  393. if (!$orderHeader) {
  394. return null;
  395. }
  396. return $this->findOrCreateByClientCode($orderHeader['soreference1']);
  397. }
  398. public function first(array $params)
  399. {
  400. $order = Order::query();
  401. foreach ($params as $column => $value) {
  402. $order->where($column, $value);
  403. }
  404. return $order->first();
  405. }
  406. public function logisticNumberFirstOrCreateOrder($logistic_number)
  407. {
  408. /**
  409. * @var OracleActAllocationDetailService
  410. * @var OracleActAllocationDetails $actAllocationDetail
  411. */
  412. $actAllocationDetail = app('OracleActAllocationDetailService')->first(['picktotraceid' => $logistic_number]);
  413. if ($actAllocationDetail) {
  414. $order = $this->first(['code' => $actAllocationDetail->orderno]);
  415. if ($order) return $order;
  416. $actAllocationDetail->load(['oracleDocOrderHeader' => function ($query) {
  417. $query->with('oracleBASCode');
  418. }]);
  419. $orderHeader = $actAllocationDetail->oracleDocOrderHeader ?? null;
  420. } else {
  421. $orderHeader = app('OracleDocOrderHeaderService')->first(['soreference5' => $logistic_number]);
  422. }
  423. if ($orderHeader == null) return null;
  424. $order = $this->first(['code'=>$orderHeader->orderno]);
  425. if ($order) return $order;
  426. /** @var OwnerService */
  427. $owner = app('OwnerService')->first(['code' => $orderHeader->customerid]);
  428. if (!$owner) {
  429. $orderHeader->load('oracleBASCustomer');
  430. $customer_name = $orderHeader->oracleBASCustomer ? $orderHeader->oracleBASCustomer->descr_c : null;
  431. /** @var OwnerService */
  432. if ($customer_name) $owner = app('OwnerService')->create(['code' => $orderHeader->customerid, 'name' => $customer_name]);
  433. }
  434. $shop = null;
  435. $shop_name = $orderHeader->issuepartyname;
  436. if ($shop_name && $owner) {
  437. /** @var ShopService */
  438. $shop = app('ShopService')->firstOrCreate(['name' => $shop_name, 'owner_id' => $owner->id]);
  439. }
  440. $logistics = app('LogisticService')->firstOrCreate(['code' => $orderHeader->userdefine1],
  441. ['code' => $orderHeader->userdefine1, 'name' => $orderHeader->carriername]);
  442. $wareHouse = Warehouse::query()->firstOrCreate(['code'=>$orderHeader->warehouseid],
  443. ['name'=>$orderHeader->warehouseid,'code'=>$orderHeader->warehouseid]);
  444. $order = Order::query()->create([
  445. 'warehouse_id'=> $wareHouse->id ?? '',
  446. 'code' => $orderHeader->orderno,
  447. 'owner_id' => $owner ? $owner->id : null,
  448. 'wms_status' => $orderHeader->oracleBASCode ? $orderHeader->oracleBASCode->codename_c : null,
  449. 'created_at' => $orderHeader->addtime,
  450. 'logistic_id' => $logistics ? $logistics->id : null,
  451. 'shop_id' => $shop ? $shop->id : null,
  452. 'consignee_name' => $orderHeader->c_contact,
  453. 'consignee_phone' => empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2,
  454. 'province' => $orderHeader->c_province,
  455. 'city' => $orderHeader->c_city,
  456. 'district' => $orderHeader->c_district,
  457. 'address' => $orderHeader->c_address1,
  458. 'client_code' => $orderHeader->soreference1,
  459. ]);
  460. app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order '.json_encode($order));
  461. return $order;
  462. }
  463. /**
  464. * @param $orderHeaders
  465. * @return \Illuminate\Database\Eloquent\Builder[]|Collection|null
  466. */
  467. public function createByWmsOrder($orderHeaders)
  468. {
  469. if($orderHeaders->isEmpty())return null;
  470. /**
  471. * @var OwnerService $ownerService
  472. * @var WarehouseService $warehouseService
  473. * @var LogisticService $logisticService
  474. * @var ShopService $shopService
  475. * @var OrderPackageService $orderPackageService
  476. */
  477. $warehouseService =app(WarehouseService::class);
  478. $ownerService = app(OwnerService::class);
  479. $logisticService = app(LogisticService::class);
  480. $shopService = app(ShopService::class);
  481. $orderPackageService = app(OrderPackageService::class);
  482. $owners_code_map = [];$logistics_code_map = [];$shop_name_map=[]; $owners_id_map = [];$warehouses_code_map =[];
  483. $owners = $ownerService->getByWmsOrders($orderHeaders);
  484. $logistics = $logisticService->getByWmsOrders($orderHeaders);
  485. $shops = $shopService->getByWmsOrders($orderHeaders);
  486. $warehouses=$warehouseService->getByWmsOrders($orderHeaders);
  487. foreach ($owners as $owner) {
  488. $owners_code_map[$owner->code] = $owner;
  489. $owners_id_map[$owner->id] = $owner;
  490. }
  491. foreach ($logistics as $logistic) {
  492. $logistics_code_map[$logistic->code] = $logistic;
  493. }
  494. foreach ($shops as $shop) {
  495. $owner_code = $owners_id_map[$shop->owner_id] ? $owners_id_map[$shop->owner_id]['code'] : '';
  496. $key = ' owner_code='.$owner_code.' name='.$shop->name;
  497. $shop_name_map[$key] = $shop;
  498. }
  499. foreach ($warehouses as $warehouse) {
  500. $warehouses_code_map[$warehouse->code] = $warehouse;
  501. }
  502. $insert_params = $this->getParamsByOrderHeader($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map);
  503. $update_params = $this->getUpdateParams($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map);
  504. if(count($insert_params)> 0){
  505. $this->create($insert_params);
  506. }
  507. if(count($update_params)>1){
  508. $this->batchUpdate($update_params);
  509. }
  510. $orderPackageService->createByWmsOrder($orderHeaders);
  511. $order_nos = data_get($orderHeaders,'*.orderno');
  512. unset($orderHeaders_map,$orders_code_map,$shop_name_map,$logistics_code_map,$owners_code_map);
  513. return Order::query()->whereIn('code',$order_nos)->get();
  514. }
  515. public function getParamsByOrderHeader($orderHeaders_map,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map)
  516. {
  517. $params = [];
  518. $orders = Order::query()->whereIn('code',data_get($orderHeaders_map,'*.orderno'))->get();
  519. $order_code_map = [];
  520. foreach ($orders as $order) {
  521. $order_code_map[$order->code]= $order;
  522. }
  523. foreach ($orderHeaders_map as $orderHeader) {
  524. if($order_code_map[$orderHeader->orderno] ?? false)continue;
  525. $owner = $owners_code_map[$orderHeader->customerid] ?? null;
  526. $logistic = $logistics_code_map[$orderHeader->userdefine1] ?? null;
  527. $warehouse=$warehouses_code_map[$orderHeader->warehouseid] ?? null;
  528. $key = ' owner_code='.$orderHeader->customerid.' name='.$orderHeader->issuepartyname ?? '';
  529. $shop = $shop_name_map[$key] ?? '';
  530. $params[] = [
  531. 'code' => $orderHeader->orderno,
  532. 'owner_id' => $owner->id ?? null,
  533. 'wms_status' => $orderHeader->oracleBASCode ? $orderHeader->oracleBASCode->codename_c : null,
  534. 'created_at' => $orderHeader->addtime,
  535. 'logistic_id' => $logistic->id ?? null,
  536. 'shop_id' => $shop->id ?? null,
  537. 'consignee_name' => $orderHeader->c_contact,
  538. 'consignee_phone' => empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2,
  539. 'province' => $orderHeader->c_province,
  540. 'city' => $orderHeader->c_city,
  541. 'district' => $orderHeader->c_district,
  542. 'address' => $orderHeader->c_address1,
  543. 'client_code' => $orderHeader->soreference1,
  544. 'wms_edittime' =>$orderHeader->edittime,
  545. 'warehouse_id' =>$warehouse->id??''
  546. ];
  547. }
  548. return $params;
  549. }
  550. public function getUpdateParams($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map)
  551. {
  552. if(!$orderHeaders){[];}
  553. $orders = Order::query()->whereIn('code',data_get($orderHeaders,'*.orderno'))->get();
  554. $update_params = [[
  555. 'id','owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code','updated_at','wms_edittime','warehouse_id'
  556. ]];
  557. $orderHeaders_map = [];
  558. foreach ($orderHeaders as $orderHeader) {
  559. $orderHeaders_map[$orderHeader->orderno] = $orderHeader;
  560. }
  561. $updated_at = Carbon::now()->toDateTimeString();
  562. $orders->each(function($order)use($orderHeaders_map,&$owners_code_map,&$logistics_code_map,&$shop_name_map,&$warehouses_code_map,&$update_params,$updated_at){
  563. $order_header = $orderHeaders_map[$order->code] ?? null;
  564. if(isset($order_header)){
  565. $owner = $owners_code_map[$order_header->customerid] ?? null;
  566. $logistic = $logistics_code_map[$order_header->userdefine1] ?? null;
  567. $warehouse=$warehouses_code_map[$order_header->warehouseid] ?? null;
  568. $key = ' owner_code='.$order_header->customerid.' name='.$order_header->issuepartyname ?? null;
  569. $shop = $shop_name_map[$key] ?? null;
  570. $this->UpdateOrderParamBy($shop, $logistic, $owner, $warehouse, $order, $order_header, $updated_at, $update_params);
  571. }
  572. });
  573. return $update_params;
  574. }
  575. public function create(array $params){
  576. if(count($params) == 0) return [];
  577. try {
  578. $this->insert($params);
  579. } catch (\Exception $e) {
  580. app('LogService')->log(__METHOD__,__FUNCTION__,'批量创建 order '.json_encode($params).'||'.$e->getMessage().'||'.$e->getTraceAsString());
  581. } finally{
  582. return Order::query()->whereIn('code',data_get($params,'*.code'))->get();
  583. }
  584. }
  585. public function updateByWmsOrders($orderHeaders)
  586. {
  587. if(!$orderHeaders){return null;}
  588. /** @var DataHandlerService $dataHandlerService */
  589. $dataHandlerService = app(DataHandlerService::class);
  590. /** @var OrderPackageService $orderPackageService */
  591. $orderPackageService = app(OrderPackageService::class);
  592. if(!$orderHeaders || $orderHeaders->count() == 0){return null;}
  593. $orders = $this->getByWmsOrders($orderHeaders);
  594. $orders_code_map = $dataHandlerService->dataHeader(['code'],$orders);
  595. $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
  596. $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
  597. $logistics = app(LogisticService::class)->getByWmsOrders($orderHeaders);
  598. $logistics_code_map = $dataHandlerService->dataHeader(['code'],$logistics);
  599. $shops = app(ShopService::class)->getByWmsOrders($orderHeaders);
  600. $shops_map = $dataHandlerService->dataHeader(['owner_id','name'],$shops);
  601. $warehouses = app(WarehouseService::class)->getByWmsOrders($orderHeaders);
  602. $warehouses_map = $dataHandlerService->dataHeader(['code'],$warehouses);
  603. $updateParams = [[
  604. 'id','owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code','updated_at','wms_edittime','warehouse_id'
  605. ]];
  606. $updated_at = Carbon::now()->toDateTimeString();
  607. foreach ($orderHeaders as $orderHeader) {
  608. $order =$dataHandlerService->getKeyValue(['code'=>$orderHeader->orderno],$orders_code_map);
  609. if(!$order)continue;
  610. $logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1] ,$logistics_code_map);
  611. $owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid] ,$owner_code_map);
  612. $shop = $dataHandlerService->getKeyValue(['owner_id'=>$owner->id ?? '','name'=> $orderHeader->issuepartyname] ,$shops_map);
  613. $warehouse=$dataHandlerService->getKeyValue(['code'=>$orderHeader->warehouseid],$warehouses_map);
  614. $this->UpdateOrderParamBy($shop, $logistic, $owner, $warehouse, $order, $orderHeader, $updated_at, $updateParams);
  615. }
  616. if(count($updateParams) > 1){
  617. $this->batchUpdate($updateParams);
  618. }
  619. $this->createByWmsOrder($orderHeaders);
  620. $orderPackageService->updateOrderPackageByWmsOrder($orderHeaders);
  621. unset($updateParams,$orderHeaders);
  622. }
  623. public function getByWmsOrders($orderHeaders){
  624. if(!$orderHeaders){return null;}
  625. $order_nos = data_get($orderHeaders,'*.orderno');
  626. return Order::query()->whereIn('code',$order_nos)->get();
  627. }
  628. public function 返回有问题件的订单号($orders)
  629. {
  630. if(!isset($orders)){return [];}
  631. $orderNo = data_get($orders,'*.orderno');
  632. $orderIssues = OrderIssue::query()->with('order')
  633. ->whereHas('order',function($query)use($orderNo){
  634. $query->whereIn('code',$orderNo);
  635. })->get();
  636. return $orderIssues->map(function($orderIssue){
  637. return $orderIssue->order->code;
  638. });
  639. }
  640. public function getParamByOrderHeader($orderHeader)
  641. {
  642. $logistic = Logistic::query()->where('code',$orderHeader->userdefine1)->first();
  643. $owner = Owner::query()->where('code',$orderHeader->customerid ?? '')->first();
  644. $shop = Shop::query()->where('name',$orderHeader->issuepartyname)->where('owner_id',$owner->id)->first();
  645. $warehouse = app('WarehouseService')->firstOrCreate(["code"=>$orderHeader->warehouseid],["code"=>$orderHeader->warehouseid,"name"=>$orderHeader->warehouseid]);
  646. return [
  647. 'code' =>$orderHeader->orderno,
  648. 'owner_id' =>$owner->id,
  649. 'shop_id' =>$shop->id,
  650. 'logistic_id' => $logistic->id ??'',
  651. 'consignee_name' => $orderHeader->c_contact,
  652. 'consignee_phone' => empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2,
  653. 'province' =>$orderHeader->c_province,
  654. 'city' => $orderHeader->c_city,
  655. 'district' =>$orderHeader->c_district,
  656. 'address' =>$orderHeader->c_address1,
  657. 'client_code' =>$orderHeader->soreference1,
  658. 'wms_edittime' => $orderHeader->edittime,
  659. 'wms_status' => $orderHeader->oracleBASCode_codename_c ?? '',
  660. 'updated_at' => (string)Carbon::now()->format('Y-m-d H:i:s'),
  661. 'created_at' => $orderHeader->addtime,
  662. 'warehouse_id' => $warehouse->id ?? ''
  663. ];
  664. }
  665. /**
  666. * @param App/Order $order
  667. * @param App/OracleDOCOrderHeader $orderHeader
  668. */
  669. public function updateOrderByOrderHeader($order,$orderHeader)
  670. {
  671. if(!$orderHeader){return ;}
  672. if($orderHeader->orderno == $order->code){
  673. return ;
  674. }else if($orderHeader->soreference1 != $order->client_code){
  675. return ;
  676. }
  677. $params = $this->getParamByOrderHeader($orderHeader);
  678. $data = [
  679. 'code'=>$order->code ?? $params['code'],
  680. 'owner_id'=>$order->code ?? $params['owner_id'],
  681. 'shop_id'=>$order->code ?? $params['shop_id'],
  682. 'logistic_id'=>$order->code ?? $params['logistic_id'],
  683. 'consignee_name'=>$order->code ?? $params['consignee_name'],
  684. 'province'=>$order->code ?? $params['province'],
  685. 'city'=>$order->code ?? $params['city'],
  686. 'district'=>$order->code ?? $params['district'],
  687. 'address'=>$order->code ?? $params['address'],
  688. 'wms_edittime'=>$order->code ?? $params['wms_edittime'],
  689. 'wms_status'=>$order->code ?? $params['wms_status'],
  690. ];
  691. Order::query()->where('id',$order->id)->update($data);
  692. }
  693. public function getOrderByLogisticNumber($logisticNumber)
  694. {
  695. $order = Order::query()->with('packages.commodities.commodity')
  696. ->whereHas('packages',function($query)use($logisticNumber){
  697. $query->where('logistic_number',$logisticNumber);
  698. })->first();
  699. if($order){
  700. $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',$order->client_no)->first();
  701. $this->updateOrderByOrderHeader($order,$orderHeader);
  702. return $order;
  703. }
  704. $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails','oracleBASCode'])
  705. ->whereHas('actAllocationDetails',function($query)use($logisticNumber){
  706. $query->where('picktotraceid',$logisticNumber);
  707. })->get();
  708. app(CommodityService::class)->getByWmsOrders($orderHeaders);
  709. $orders =$this->createByWmsOrder($orderHeaders);
  710. return $orders ? $orders->first() : null ;
  711. }
  712. // TODO
  713. public function createOrderInfo(&$orderHeaders)
  714. {
  715. /** @var OrderPackageService $packageService */
  716. $packageService = app("OrderPackageService");
  717. $this->createOrderByWMSOrderHeaders($orderHeaders);
  718. $packageService->createPackageInfo($orderHeaders);
  719. }
  720. // TODO
  721. public function createOrderByWMSOrderHeaders(&$orderHeaders)
  722. {
  723. if($orderHeaders->isEmpty())return [];
  724. /**
  725. * @var OwnerService $ownerService
  726. * @var LogisticService $logisticService
  727. * @var ShopService $shopService
  728. * @var WarehouseService $warehouseService
  729. */
  730. $ownerService = app("OwnerService");
  731. $logisticService = app("LogisticService");
  732. $shopService = app('ShopService');
  733. $warehouseService = app('WarehouseService');
  734. $owners = $ownerService->getByWmsOrders($orderHeaders);
  735. $logistics = $logisticService->getByWmsOrders($orderHeaders);
  736. $shops = $shopService->getByWmsOrders($orderHeaders);
  737. $warehouses = $warehouseService->getByWmsOrders($orderHeaders);
  738. $orders = $this->getByWmsOrders($orderHeaders);
  739. $created_params = $this->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops); //3s
  740. $update_order = $this->getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops);
  741. // 转换插入 3s
  742. if(count($created_params) > 0){
  743. collect($created_params)->chunk(4000)->each(function($inner_params){
  744. $this->insert($inner_params->toArray());
  745. });
  746. }
  747. // $this->insert($created_params);
  748. // $this->insert($created_order->map(function($item){
  749. // $array = $item->toArray();
  750. // unset($array['logisticNumbers'],$array['packages'],$array['commodityPackages'],$array['amount']);
  751. // return $array;
  752. // })->toArray());
  753. $update_params = [
  754. ['id','code','warehouse_id','owner_id','shop_id','logistic_id','consignee_name','consignee_phone','province','city','district','address','client_code','wms_status','created_at','updated_at','wms_edittime']
  755. ];
  756. $update_order->map(function ($item){
  757. return $item->toArray();
  758. })->each(function($item)use(&$update_params){
  759. $update_params[] =$item;
  760. });
  761. $this->batchUpdate($update_params);
  762. }
  763. // TODO
  764. public function getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops)
  765. {
  766. /** @var DataHandlerService $dataHandlerService */
  767. $dataHandlerService = app('DataHandlerService');
  768. $warehouse_map = $dataHandlerService->dataHeader(['code'],$warehouses);
  769. $owner_map = $dataHandlerService->dataHeader(['code'],$owners);
  770. $logistic_map = $dataHandlerService->dataHeader(['code'],$logistics);
  771. $shop_map = $dataHandlerService->dataHeader(['name','owner_id'],$shops);
  772. $order_map = $dataHandlerService->dataHeader(['code'],$orders);
  773. // $collect = collect();
  774. $inner_params = [];
  775. $date = (string)Carbon::now();
  776. foreach ($orderHeaders as $orderHeader) {
  777. $order_no = $orderHeader->orderno;
  778. $order = $dataHandlerService->getKeyValue(['code'=>$order_no],$order_map);
  779. if(isset($order))continue;
  780. $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$date);
  781. $inner_params[] = $order_model;
  782. // $collect->push($order_model);
  783. }
  784. return $inner_params;
  785. }
  786. // TODO
  787. public function getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops)
  788. {
  789. /**
  790. * @var DataHandlerService $dataHandlerService
  791. * @var Order $order
  792. */
  793. $dataHandlerService = app('DataHandlerService');
  794. $orderHeader_map = $dataHandlerService->dataHeader(['orderno'],$orderHeaders);
  795. $warehouse_map = $dataHandlerService->dataHeader(['code'],$warehouses);
  796. $owner_map = $dataHandlerService->dataHeader(['code'],$owners);
  797. $logistic_map = $dataHandlerService->dataHeader(['code'],$logistics);
  798. $shop_map = $dataHandlerService->dataHeader(['name','owner_id'],$shops);
  799. $collect = collect();
  800. $date = (string)Carbon::now();
  801. foreach ($orders as $order) {
  802. $orderHeader = $dataHandlerService->getKeyValue(['orderno'=>$order->code],$orderHeader_map);
  803. if(!$orderHeader)continue;
  804. $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$date);
  805. if(!$order->isEquals($order_model)){
  806. $order->assignValueByOrder($order_model);
  807. $collect->push($order);
  808. }
  809. }
  810. return $collect;
  811. }
  812. // TODO
  813. public function getCreateOrderModels(&$orderHeader,&$warehouse_map,&$owner_map,&$logistic_map,&$shop_map,$date)
  814. {
  815. /** @var DataHandlerService $dataHandlerService */
  816. $dataHandlerService = app('DataHandlerService');
  817. $warehouse = $dataHandlerService->getKeyValue(['code'=>$orderHeader->warehouseid],$warehouse_map);
  818. $owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid],$owner_map);
  819. $logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1],$logistic_map);
  820. $shop = $dataHandlerService->getKeyValue(['name'=>$orderHeader->issuepartyname,'owner_id'=>$owner->id??null],$shop_map);
  821. return [
  822. 'code'=>$orderHeader['orderno'],
  823. 'warehouse_id' => $warehouse['id'] ?? null,
  824. 'owner_id' => $owner['id'] ?? null,
  825. 'shop_id' => $shop['id'] ?? null,
  826. 'logistic_id' =>$logistic['id'] ?? null,
  827. 'consignee_name' => $orderHeader['c_contact'],
  828. 'consignee_phone' => $orderHeader['c_tel2'] ?? $orderHeader['c_tel1'],
  829. 'province' => $orderHeader['c_province'],
  830. 'city' => $orderHeader['c_city'],
  831. 'district' => $orderHeader['c_district'],
  832. 'address' => $orderHeader['c_address1'],
  833. 'client_code' => $orderHeader['soreference1'],
  834. 'wms_edittime' => $orderHeader['edittime'],
  835. 'wms_status' => $orderHeader->oracleBASCode->codename_c??'',
  836. 'updated_at' => $date,
  837. 'created_at' => $orderHeader['addtime']
  838. ];
  839. }
  840. /**
  841. * @param $shop
  842. * @param $logistic
  843. * @param $owner
  844. * @param $warehouse
  845. * @param $order
  846. * @param $orderHeader
  847. * @param string $updated_at
  848. * @param $updateParams
  849. * @return mixed
  850. */
  851. public function UpdateOrderParamBy($shop, $logistic, $owner, $warehouse, $order, $orderHeader, string $updated_at, &$updateParams)
  852. {
  853. $shop_id = $shop->id ?? null;
  854. $logistic_id = $logistic->id ?? null;
  855. $owner_id = $owner->id ?? null;
  856. $warehouse_id = $warehouse->id ?? null;
  857. if (($order->wms_status !== $orderHeader->oracleBASCode_codename_c) ||
  858. ($order->logistic_id !== $logistic_id) ||
  859. ($order->shop_id !== $shop_id) ||
  860. ($order->owner_id !== $owner_id) ||
  861. ($order->consignee_name !== $orderHeader->c_contact) ||
  862. $order->consignee_phone !==( empty($orderHeader->c_tel2) ? $orderHeader->c_tel1 : $orderHeader->c_tel2) ||
  863. $order->province !== ($orderHeader->c_province) ||
  864. $order->city !== ($orderHeader->c_city) ||
  865. $order->district !== ($orderHeader->c_district) ||
  866. $order->address !== ($orderHeader->c_address1) ||
  867. $order->client_code !== ($orderHeader->soreference1) ||
  868. ($order->wms_edittime !== $orderHeader->edittime) ||
  869. ($order->warehouse_id !== $warehouse_id)) {
  870. $updateParams[] = ['id' => $order->id,
  871. 'owner_id' => $owner_id,
  872. 'wms_status' => $orderHeader->oracleBASCode_codename_c ?? '',
  873. 'logistic_id' => $logistic_id,
  874. 'shop_id' => $shop_id,
  875. 'consignee_name' => $orderHeader->c_contact,
  876. 'consignee_phone' => empty($orderHeader->c_tel2) ? $orderHeader->c_tel1 : $orderHeader->c_tel2,
  877. 'province' => $orderHeader->c_province,
  878. 'city' => $orderHeader->c_city,
  879. 'district' => $orderHeader->c_district,
  880. 'address' => $orderHeader->c_address1,
  881. 'client_code' => $orderHeader->soreference1,
  882. 'updated_at' => $updated_at,
  883. 'wms_edittime' => $orderHeader->edittime,
  884. 'warehouse_id' => $warehouse_id];
  885. }
  886. }
  887. }