OrderPackageCommoditiesService.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <?php
  2. namespace App\Services;
  3. use App\Commodity;
  4. use App\OracleActAllocationDetails;
  5. use App\OracleBasSKU;
  6. use App\OracleDOCOrderDetail;
  7. use App\OracleDOCOrderHeader;
  8. use App\Order;
  9. use App\OrderPackage;
  10. use App\OrderPackageCommodities;
  11. use App\Owner;
  12. use Illuminate\Support\Arr;
  13. class OrderPackageCommoditiesService
  14. {
  15. public function basedOnOracleDetailsStore($orderNo, $orderPackage)
  16. {
  17. $details = OracleDOCOrderDetail::query()->where('orderNo', $orderNo)->get();
  18. $orderPackageCommodities = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
  19. $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qtyordered');
  20. }
  21. public function basedOnActAllocationDetailsStoreByOrderNo($orderNo,$orderPackage){
  22. $details = OracleActAllocationDetails::query()->where('orderno', $orderNo)->get();
  23. $orderPackageCommodities = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
  24. $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty');
  25. }
  26. public function 根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,$key){
  27. $newItems = [];
  28. foreach ($details as $detail) {
  29. $owner = Owner::query()->where(['code' => $detail['customerid']])->first(); // 货主
  30. $sku = $detail->sku; // sku
  31. $owner_id = $owner->id; // 货主id
  32. $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
  33. if ($commodity == null) {
  34. $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first(); // 没有找到对应的商品信息
  35. $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
  36. }
  37. $data = ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail[$key]];
  38. array_push($newItems,$data);
  39. }
  40. $diffarr = [];
  41. foreach ($newItems as $newItem) {
  42. $packageCommodity = $orderPackageCommodities->where('order_package_id',$newItem['order_package_id'])->where('commodity_id',$newItem['commodity_id'])->first();
  43. if($packageCommodity!=null){
  44. if($packageCommodity['amount'] != $newItem['amount']){
  45. $packageCommodity->update(['amount'=>intval($newItem['amount'])]);
  46. }
  47. $orderPackageCommodities = $orderPackageCommodities->filter(function ($item) use ($packageCommodity){
  48. if($item['id'] == $packageCommodity['id']){
  49. return false;
  50. }
  51. return true;
  52. });
  53. array_push($diffarr,$newItem);
  54. }
  55. }
  56. if($orderPackageCommodities->count() > 0){
  57. foreach ($orderPackageCommodities as $orderPackageCommodity) {
  58. $id = $orderPackageCommodity['id'];
  59. OrderPackageCommodities::destroy($id);
  60. }
  61. }
  62. $newItems = array_filter($newItems,function($newItem) use ($diffarr){
  63. foreach ($diffarr as $item) {
  64. if($item['order_package_id'] == $newItem['order_package_id'] && $item['commodity_id'] == $newItem['commodity_id'] && $item['amount'] == $newItem['amount']){
  65. return false;
  66. }
  67. }
  68. return true;
  69. });
  70. try {
  71. if(count($newItems) > 0 ){
  72. OrderPackageCommodities::query()->insert($newItems);
  73. LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息'.json_encode($newItems));
  74. }
  75. } catch (\Exception $e) {
  76. LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息异常'.json_encode($newItems).$e->getMessage(),$e->getTraceAsString());
  77. }
  78. }
  79. // public function 根据订单详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details){
  80. // $newItems = [];
  81. //// ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]
  82. // foreach ($details as $detail) {
  83. // $owner = Owner::query()->where(['code' => $detail['customerid']])->first(); // 货主
  84. // $sku = $detail->sku; // sku
  85. // $owner_id = $owner->id; // 货主id
  86. // $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
  87. // if ($commodity == null) {
  88. // $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first(); // 没有找到对应的商品信息
  89. // $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
  90. // }
  91. // $data = ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']];
  92. // array_push($newItems,$data);
  93. // }
  94. // $diffarr = [];
  95. // foreach ($newItems as $newItem) {
  96. // $packageCommodity = $orderPackageCommodities->where('sku',$newItem['sku'])->where('customerid',$newItem['customerid'])->first();
  97. // if($packageCommodity!=null){
  98. // if($packageCommodity['amount'] != $newItem['amount']){
  99. // $packageCommodity->update($packageCommodity,$newItem['amount']);
  100. // }
  101. // array_push($diffarr,$newItem);
  102. // }
  103. // }
  104. //
  105. // $newItems = array_diff($newItems,$diffarr);
  106. //
  107. // try {
  108. // if(count($newItems) > 0 ){
  109. // OrderPackageCommodities::query()->create($newItems);
  110. // LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息'.json_encode($newItems));
  111. // }
  112. // } catch (\Exception $e) {
  113. // LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息异常'.json_encode($newItems).$e->getMessage(),$e->getTraceAsString());
  114. // }
  115. //
  116. // }
  117. //
  118. // public function 根据分配详情更新更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details){
  119. //// ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']]
  120. // $newItems = [];
  121. // foreach ($details as $detail) {
  122. // $owner = Owner::query()->where(['code' => $detail['customerid']])->first(); // 货主
  123. // $sku = $detail->sku; // sku
  124. // $owner_id = $owner->id; // 货主id
  125. // $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
  126. // if ($commodity == null) {
  127. // $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first(); // 没有找到对应的商品信息
  128. // $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
  129. // }
  130. // $data = ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']];
  131. // array_push($newItems,$data);
  132. // }
  133. // $diffarr = [];
  134. // foreach ($newItems as $newItem) {
  135. // $packageCommodity = $orderPackageCommodities->where('sku',$newItem['sku'])->where('customerid',$newItem['customerid'])->first();
  136. // if($packageCommodity!=null){
  137. // if($packageCommodity['amount'] != $newItem['amount']){
  138. // $packageCommodity->update($packageCommodity,$newItem['amount']);
  139. // }
  140. // array_push($diffarr,$newItem);
  141. // }
  142. // }
  143. // $newItems = array_diff($newItems,$diffarr);
  144. // try {
  145. // if(count($newItems) > 0 ){
  146. // OrderPackageCommodities::query()->create($newItems);
  147. // LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息'.json_encode($newItems));
  148. // }
  149. // } catch (\Exception $e) {
  150. // LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息异常'.json_encode($newItems).$e->getMessage(),$e->getTraceAsString());
  151. // }
  152. //
  153. // }
  154. public function basedOnActAllocationDetailsStore($orderPackage)
  155. {
  156. $details = OracleActAllocationDetails::query()->where('picktotraceid', $orderPackage->logistic_number)->get();
  157. $orderPackageCommodities = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
  158. $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty');
  159. }
  160. public function basedOnActAllocationDetail(Order $order,OracleDOCOrderHeader $header,array $details){
  161. foreach ($details as $detail){
  162. $logistic_number = $details['picktotraceid'];
  163. if($logistic_number == '*' || $logistic_number== null || $logistic_number== ''){
  164. $logistic_number = $header['soreference5'];
  165. if($logistic_number == '*' || $logistic_number== null || $logistic_number== ''){
  166. continue;
  167. }
  168. }
  169. $orderPackage = OrderPackage::query()->firstOrCreate(['order_id'=>$order['id'],'logistic_number',$details]);
  170. $this->createByActAllocationDetail($detail, $orderPackage);
  171. }
  172. }
  173. private function createByActAllocationDetail($detail,$orderPackage)
  174. {
  175. $owner = Owner::query()->where(['code' => $detail->customerid])->first(); // 货主
  176. $sku = $detail->sku;
  177. $owner_id = $owner['id'];
  178. $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first();
  179. if ($commodity == null) {
  180. $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first();
  181. $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
  182. }
  183. try {
  184. $count = OrderPackageCommodities::query()->where(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']])->count();
  185. if($count == 0){
  186. $orderPackageCommodities = OrderPackageCommodities::query()->firstOrCreate(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]);
  187. LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹详情'.json_encode($orderPackageCommodities));
  188. }
  189. } catch (\Exception $e) {
  190. LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹失败'.$e->getMessage().$e->getTraceAsString());
  191. } finally {
  192. return $orderPackageCommodities ?? null;
  193. }
  194. }
  195. public function getOrderPackageCommoditiesByOrderId($orderId)
  196. {
  197. $order = Order::query()->where('id', $orderId)->first();
  198. if (!$order) {
  199. return null;
  200. }
  201. $orderPackageIds = OrderPackage::query()->select('id')->where('order_id', $order['id'])->get();
  202. if (!$orderPackageIds) {
  203. return null;
  204. }
  205. return OrderPackageCommodities::query()->with('commodity')->whereIn('order_package_id', $orderPackageIds)->get();
  206. }
  207. public function createByOrderDetail(OracleDOCOrderDetail $detail, OrderPackage $orderPackage)
  208. {
  209. $owner = Owner::query()->where(['code' => $detail['customerid']])->first(); // 货主
  210. $sku = $detail->sku; // sku
  211. $owner_id = $owner->id; // 货主id
  212. $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
  213. if ($commodity == null) {
  214. $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first(); // 没有找到对应的商品信息
  215. $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
  216. }
  217. try {
  218. $count = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->where('commodity_id',$commodity['id'])->where('amount' , $detail['qtyordered'])->count();
  219. if($count == 0){
  220. $orderPackageCommodities = OrderPackageCommodities::query()->first(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']]);
  221. LogService::log(__METHOD__,__FUNCTION__,'创建顶订单包裹详情'.json_encode($orderPackageCommodities));
  222. }
  223. } catch (\Exception $e) {
  224. LogService::log(__METHOD__,__FUNCTION__,'创建顶订单包裹详情'.$e->getMessage().$e->getTraceAsString());
  225. } finally {
  226. return $orderPackageCommodities ?? null;
  227. }
  228. }
  229. }