OrderIssueService.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <?php
  2. namespace App\Services;
  3. use App\OracleDOCASNDetail;
  4. use App\OracleDOCASNHeader;
  5. use App\OracleDOCOrderDetail;
  6. use App\OracleDOCOrderHeader;
  7. use App\OrderIssue;
  8. use App\OrderPackage;
  9. use App\Order;
  10. use App\RejectedBill;
  11. use App\Sign;
  12. use Illuminate\Http\Request;
  13. use Illuminate\Support\Facades\Auth;
  14. use Illuminate\Support\Facades\Validator;
  15. class OrderIssueService
  16. {
  17. public function __construct()
  18. {
  19. app()->bind("orderService", OrderService::class);
  20. app()->bind("rejectedService", RejectedService::class);
  21. }
  22. public function getQuery(Request $request, array $condition = null)
  23. {
  24. if (!isset($condition)) {
  25. $condition = $request->all();
  26. }
  27. $user = Auth::user();
  28. $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
  29. $orders = Order::select('id')->whereIn('owner_id', $owner_ids)->get();
  30. $order_ids = [];
  31. foreach ($orders as $order) {
  32. $order_ids[] = $order->id;
  33. }
  34. $query = OrderIssue::with(['top', 'logs' => function ($query) {
  35. return $query->orderBy('created_at');
  36. }, 'order' => function ($query) use ($order_ids) {
  37. return $query->whereIn('id', $order_ids)->with(['shop', 'logistic', 'owner', 'packages' => function ($query) {
  38. return $query->with(['commodities' => function ($query) {
  39. return $query->with('commodity');
  40. }]);
  41. }]);
  42. }])->whereIn('order_id', $order_ids);
  43. return $query;
  44. }
  45. public function getConditionQuery(Request $request, array $condition = null)
  46. {
  47. $query = $this->getQuery($request, $condition);
  48. if (!isset($condition)) {
  49. $condition = $request->all();
  50. }
  51. if (isset($condition['created_at_start'])) {
  52. $query->where('created_at', '>=', $condition['created_at_start'] . " 00:00:00");
  53. }
  54. if (isset($condition['created_at_end'])) {
  55. $query->where('created_at', '<=', $condition['created_at_end'] . " 23:59:59");
  56. }
  57. if (isset($condition['final_status'])) {
  58. $query->where('final_status', $condition['final_status']);
  59. }
  60. if (isset($condition['handle_status'])) {
  61. $query->where('handle_status', intval($condition['handle_status']));
  62. }
  63. if (isset($condition['logistic_indemnity_money'])) {
  64. $query->where('logistic_indemnity_money', $condition['logistic_indemnity_money']);
  65. }
  66. if (isset($condition['baoshi_express_remission'])) {
  67. $query->where('baoshi_express_remission', $condition['baoshi_express_remission']);
  68. }
  69. if(isset($condition['order_issue_ids'])){
  70. $orderIssuesId = $condition['order_issue_ids'];
  71. if(is_string($orderIssuesId)){
  72. $orderIssuesId = explode(',',$orderIssuesId);
  73. }
  74. $query->whereIn('id',$orderIssuesId);
  75. }
  76. return $query;
  77. }
  78. public function paginate(Request $request)
  79. {
  80. return $this->getConditionQuery($request)->paginate($request->input('paginate', 50));
  81. }
  82. // 置顶
  83. public function orderIssueOnTop(Request $request)
  84. {
  85. $mes = ['success' => false];
  86. $id = $request->input('id');
  87. $remark = $request->input('remark');
  88. if (!$request->input('id') || !$request->input('remark')) {
  89. $mes['fail_info'] = '没有输入对应的备注';
  90. $mes['fail_info'] = $request->input('id') ? $mes['fail_info'] : '没有选中问题件';
  91. return $mes;
  92. }
  93. OrderIssue::updateOrCreate(['orderIssue_id' => $id], ['remark' => $remark]);
  94. return ['success' => true];
  95. }
  96. // 标记问题件
  97. public function orderIssueTag(Request $request)
  98. {
  99. $orderNos = $request->input('orderNos');
  100. $meg = ['success' => false];
  101. if ($this->verifyOrderIssue($request)) {
  102. $meg['fail_info'] = '传入订单编号中对应的订单问题已有生成';
  103. return $meg;
  104. }
  105. foreach ($orderNos as $orderNo) {
  106. $this->createOrFind($orderNo);
  107. }
  108. $meg['success'] = '选中订单已标记为问题订单';
  109. return $meg;
  110. }
  111. public function createOrFind($orderNo)
  112. {
  113. $orderService = app('orderService');
  114. $order = $orderService->createOrFindBy($orderNo);
  115. $arr = [
  116. 'order_id' => $order->id,
  117. ];
  118. return OrderIssue::create($arr);
  119. }
  120. public function createOrderIssue(Request $request)
  121. {
  122. $orderService = app('orderService');
  123. $this->validatorCreate($request)->validate();
  124. $oracleOrderNo = $request->input('order_id');
  125. $logistic_number = $request->input('logistic_number');
  126. $order = $orderService->createOrFindBy($oracleOrderNo);
  127. $this->create($request);
  128. }
  129. public function validatorCreate(Request $request)
  130. {
  131. return Validator::make($request->input(), [
  132. 'order_issue_type_id' => ['required'],
  133. 'baoshi_indemnity_money' => ['numeric'],
  134. 'logistic_indemnity_money' => ['numeric'],
  135. ], [
  136. 'required' => ':attribute 为必填项',
  137. 'unique' => ':attribute 已存在',
  138. 'numeric' => ':attribute 为数组',
  139. ], [
  140. 'order_issue_type_id' => '问题类别',
  141. 'baoshi_indemnity_money' => '宝时赔偿金额',
  142. 'logistic_indemnity_money' => '承运商赔偿金额',
  143. ]);
  144. }
  145. public function createByRejectedBill(Request $request)
  146. {
  147. $orderService = app('orderService');
  148. $rejectedBill = RejectedBill::where(['logistic_number_return' => $request->input('logistic_number_return')])->first();
  149. $orderNo = $rejectedBill->order_number;
  150. $order = $orderService->createOrFindBy($orderNo);
  151. $arr = $request->only(
  152. ['order_issue_type_id', 'result_explain', 'second_order_id', 'rejected_bill_id', 'situation_explain',
  153. 'final_status', 'final_status', 'logistic_indemnity_money',
  154. 'logistic_express_remission', 'baoshi_indemnity_money', 'baoshi_express_remission',
  155. 'user_workgroup_id']);
  156. $arr['order_id'] = $order->id;
  157. return OrderIssue::create($arr);
  158. }
  159. public function createByOracleOrderNo(Request $request)
  160. {
  161. $orderService = app('orderService');
  162. $rejectedService = app('rejectedService');
  163. if (!$request->has('wms_order_no')) {
  164. return null;
  165. }
  166. $wms_order_no = $request->input('wms_order_no');
  167. $rejectedBill = $rejectedService->getRejectedByOrderNumber($wms_order_no);
  168. $orderIssue = $this->createOrFind($wms_order_no);
  169. $orderIssue->order_issue_type_id = $request->input('order_issue_type_id');
  170. if ($rejectedBill) {
  171. $orderIssue->rejected_bill_id = $rejectedBill->id;
  172. }
  173. $orderIssue->save();
  174. return $orderIssue;
  175. }
  176. public function createByLogisticNumber(Request $request)
  177. {
  178. $orderService = app('orderService');
  179. if (!$request->has('logistic_number')) {
  180. return null;
  181. }
  182. $order = $orderService->create($request->fill());
  183. return OrderPackage::creaed(['order_id' => $order->id, 'logistic_number' => $request->input('logistic_number')]);
  184. }
  185. public function verifyOrderIssue(Request $request)
  186. {
  187. $orderIds = $request->input('orderNos');
  188. $orders = Order::whereIn('code', $orderIds)->get();
  189. if (count($orders) == 0) {
  190. return false;
  191. }
  192. $order_ids = [];
  193. foreach ($orders as $order) {
  194. $order_ids[] = $order->id;
  195. }
  196. $count = OrderIssue::whereIn('order_id', $order_ids)->count();
  197. return $count != 0;
  198. }
  199. public function verifyOracleOrderNo(Request $request)
  200. {
  201. $meg = ['success' => false];
  202. $oracleOrderNo = $request->input('oracleOrderNo');
  203. $type = $request->input('type');
  204. $orderHeader = OracleDOCOrderHeader::where('OrderNo', trim($oracleOrderNo, "'"))->first();
  205. if ($orderHeader == null) {
  206. $meg['fail_info'] = '没有编号对应的订单信息';
  207. } else {
  208. if ($type == 'backExpressNumber') {
  209. $orderASNHeader = OracleDOCASNHeader::where('ASNReference2', $orderHeader->soreference1)->first();
  210. if ($orderASNHeader == null) {
  211. $meg['fail_info'] = '没有对应的退件信息';
  212. } else {
  213. $express_number = $orderASNHeader->asnreference3; // 快递单号
  214. $express_number == null ? $meg['fail_info'] = '没有对应的快递单号' : ($meg['success'] = true && $meg['expressNumber'] = $express_number);
  215. }
  216. } else if ($type == 'verify') {
  217. if (!$orderHeader) {
  218. $mes['fail_info'] = '编号对应的订单信息不存在';
  219. } else {
  220. $mes['success'] = true;
  221. }
  222. }
  223. }
  224. return $meg;
  225. }
  226. public function verifyLogisticNumber(Request $request)
  227. {
  228. $logisticNumber = $request->input('logisticNumber');
  229. $ASNHeader = OracleDOCASNHeader::where('ASNReference2', $logisticNumber)->first();
  230. $orderHeader = OracleDOCOrderHeader::where('soreference1', $ASNHeader->asnreference3)->first();
  231. $meg = ['success' => false];
  232. if (!$orderHeader) {
  233. $meg['fail_info'] = '快递单号没有对应的订单';
  234. }
  235. return $meg['success'] = true;
  236. }
  237. public function destroy($id)
  238. {
  239. return OrderIssue::where('id', $id)->delete();
  240. }
  241. public function getOrderHead(Request $request)
  242. {
  243. $data = ['orderHeader' => null, 'orderDetails' => null];
  244. $logisticNumberReturn = $request->input('logisticNumberReturn');
  245. $ASNOrderHeaders = OracleDOCASNHeader::where('ASNReference3', $logisticNumberReturn)->get();
  246. if (count($ASNOrderHeaders) == 0) {
  247. return $data;
  248. }
  249. $orderHeader = OracleDOCOrderHeader::where('SOReference1', $ASNOrderHeaders->asnreference3)->get();
  250. $data['orderHeader'] = $orderHeader;
  251. $orderDetails = OracleDOCASNDetail::with(['sku'])->where('OrderNo', $orderHeader)->get();
  252. $data['orderDetails'] = $orderDetails;
  253. return $data;
  254. }
  255. public function getReturnLogisticInfo(Request $request)
  256. {
  257. $logisticNumberReturn = $request->input('logisticNumberReturn');
  258. $ASNOrderHeaders = OracleDOCASNHeader::where('ASNReference3', $logisticNumberReturn)->get();
  259. $ASNNo = [];
  260. foreach ($ASNOrderHeaders as $ASNOrderHeader) {
  261. $ASNNo[] = $ASNOrderHeader->asnno;
  262. }
  263. return OracleDOCASNDetail::whereIn('asnno', $ASNNo)->get();
  264. }
  265. public function getOrderHeadByOrderNo(Request $request)
  266. {
  267. $orderNo = $request->input('orderNo');
  268. $orderHeader = OracleDOCOrderHeader::where('orderNo', $orderNo)->get();
  269. $orderDetails = OracleDOCOrderDetail::with(['sku'])->where('orderNo', $orderNo)->get();
  270. return ['orderHeader' => $orderHeader, 'orderDetails' => $orderDetails];
  271. }
  272. public function getOrderHeadByLogisticNumberReturn(Request $request)
  273. {
  274. $logisticNumberReturn = $request->input('logisticNumber');
  275. }
  276. public function exportExcel(Request $request)
  277. {
  278. $result = null;
  279. if ($request->getMethod() == 'GET') {
  280. // 所有页
  281. if ($request->has('checkAllSign')) {
  282. $result = $this->getConditionQuery($request, null)->get();
  283. }
  284. } else if ($request->getMethod() == 'POST') {
  285. // 选中
  286. $owner_id = $request->input('data');
  287. $result = $this->getConditionQuery($request, ['order_issue_ids' => $owner_id])->get();
  288. }
  289. dd($result);
  290. return $result;
  291. }
  292. }