PurchaseOrderService.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <?php
  2. namespace App\Service;
  3. use App\Model\Company;
  4. use App\Model\Depart;
  5. use App\Model\Employee;
  6. use App\Model\FoursShop;
  7. use App\Model\FoursShopStorehouse;
  8. use App\Model\InOutRecord;
  9. use App\Model\MaterialOrder;
  10. use App\Model\MaterialOrderApply;
  11. use App\Model\MaterialOrderApplySub;
  12. use App\Model\MaterialOrderIn;
  13. use App\Model\MaterialOrderInSub;
  14. use App\Model\MaterialOrderSend;
  15. use App\Model\MaterialOrderSendSub;
  16. use App\Model\MaterialOrderTake;
  17. use App\Model\MaterialOrderTakeSub;
  18. use App\Model\PurchaseOrder;
  19. use App\Model\PurchaseOrderInfo;
  20. use App\Model\RollFilmCompare;
  21. use Illuminate\Support\Facades\DB;
  22. class PurchaseOrderService extends Service
  23. {
  24. public function edit($data,$user){
  25. list($status,$msg) = $this->orderRule($data,false);
  26. if(!$status) return [$status,$msg];
  27. try{
  28. DB::beginTransaction();
  29. $material_model = PurchaseOrder::where('order_number',$data['order_number'])->first();
  30. $material_model->depart_id = $data['depart_id'];
  31. $material_model->mark = $data['mark'] ?? '';
  32. $material_model->save();
  33. PurchaseOrderInfo::where('order_number',$data['order_number'])
  34. ->where('del_time',0)
  35. ->update(['del_time' => time()]);
  36. if(!empty($data['product'])){
  37. $sub = [];
  38. foreach ($data['product'] as $value){
  39. $sub[] = [
  40. 'order_number' => $data['order_number'],
  41. 'depart_id' => $data['depart_id'],
  42. 'product_id' => $value['product_id'],
  43. 'number' => $value['number'],
  44. 'mark' => $value['mark'] ?? '',
  45. ];
  46. }
  47. PurchaseOrderInfo::insert($sub);
  48. }
  49. DB::commit();
  50. }catch (\Throwable $e){
  51. DB::rollBack();
  52. return [false,$e->getMessage()];
  53. }
  54. return [true,''];
  55. }
  56. public function add($data,$user){
  57. list($status,$msg) = $this->orderRule($data);
  58. if(!$status) return [$status,$msg];
  59. try{
  60. DB::beginTransaction();
  61. $material_model = new PurchaseOrder();
  62. $material_model->order_number = $data['order_number'];
  63. $material_model->depart_id = $data['depart_id'];
  64. $material_model->mark = $data['mark'] ?? '';
  65. $material_model->crt_id = $user['id'];
  66. $material_model->save();
  67. if(!empty($data['product'])){
  68. $sub = [];
  69. foreach ($data['product'] as $value){
  70. $sub[] = [
  71. 'order_number' => $data['order_number'],
  72. 'depart_id' => $data['depart_id'],
  73. 'product_id' => $value['product_id'],
  74. 'number' => $value['number'],
  75. 'mark' => $value['mark'] ?? '',
  76. ];
  77. }
  78. PurchaseOrderInfo::insert($sub);
  79. }
  80. DB::commit();
  81. }catch (\Throwable $e){
  82. DB::rollBack();
  83. return [false,$e->getMessage()];
  84. }
  85. return [true,''];
  86. }
  87. public function detail($data){
  88. if($this->isEmpty($data,'order_number')) return [false,'请选择数据'];
  89. $order = PurchaseOrder::where('order_number',$data['order_number'])
  90. ->where('del_time',0)
  91. ->select('id','order_number','depart_id','mark','state','crt_id')
  92. ->first();
  93. if(empty($order)) return [false, '采购订单不存在或已被删除'];
  94. $info = PurchaseOrderInfo::where('del_time',0)
  95. ->where('order_number',$data['order_number'])
  96. ->select('id','order_number','depart_id','product_id','number','mark')
  97. ->get()->toArray();
  98. $order['product'] = $info;
  99. return [true, $order];
  100. }
  101. public function del($data){
  102. if($this->isEmpty($data,'order_number')) return [false,'请选择数据!'];
  103. $bool = PurchaseOrder::where('order_number',$data['order_number'])
  104. ->where('state','>',PurchaseOrder::STATE_ZERO)->exists();
  105. if($bool) return [false,'采购订单已审核,删除失败!'];
  106. try{
  107. DB::beginTransaction();
  108. PurchaseOrder::where('order_number',$data['order_number'])->update([
  109. 'del_time'=>time()
  110. ]);
  111. PurchaseOrderInfo::where('order_number',$data['order_number'])->update([
  112. 'del_time'=>time()
  113. ]);
  114. DB::commit();
  115. }catch (\Throwable $e){
  116. DB::rollBack();
  117. return [false,$e->getMessage()];
  118. }
  119. return [true,''];
  120. }
  121. public function getList($data,$user){
  122. $model = PurchaseOrder::where('del_time',0)
  123. ->select('order_number','id','depart_id','mark','crt_time','state','crt_id')
  124. ->orderby('id', 'desc');
  125. if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
  126. if(! empty($data['depart_id'])) $model->where('depart_id', $data['depart_id']);
  127. if(! empty($data['company_id'])) $model->where('company_id', $data['company_id']);
  128. if(isset($data['state'])) $model->where('state',$data['state']);
  129. if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
  130. $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
  131. $model->whereBetween('crt_time',[$return[0],$return[1]]);
  132. }
  133. $list = $this->limit($model,'',$data);
  134. $list = $this->fillListData($list);
  135. return [true, $list];
  136. }
  137. public function fillListData($data){
  138. if(empty($data['data'])) return $data;
  139. $depart_id = array_unique(array_column($data['data'],'depart_id'));
  140. $depart_map = Depart::whereIn('id',$depart_id)
  141. ->pluck('title','id')
  142. ->toArray();
  143. $emp_id = array_unique(array_column($data['data'],'crt_id'));
  144. $emp_map = Employee::whereIn('id',$emp_id)
  145. ->pluck('emp_name','id')
  146. ->toArray();
  147. foreach ($data['data'] as $key => $value){
  148. $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
  149. $data['data'][$key]['depart_name'] = $depart_map[$value['depart_id']] ?? '';
  150. $data['data'][$key]['crt_name'] = $emp_map[$value['crt_id']] ?? '';
  151. }
  152. return $data;
  153. }
  154. public function orderRule(&$data, $is_check = true){
  155. if($this->isEmpty($data,'depart_id')) return [false,'部门不能为空!'];
  156. if($this->isEmpty($data,'product')) return [false,'产品不能为空!'];
  157. foreach ($data['product'] as $value){
  158. if(empty($value['number'])) return [false,'产品数量不能为空'];
  159. if(! is_numeric($value['number']) || $value['number'] < 0) return [false,'产品数量不正确'];
  160. $formattedNumber = number_format($value['number'], 2, '.', '');
  161. if($formattedNumber != $value['number']) return [false,'产品数量请不要超过两位小数'];
  162. }
  163. if($is_check){
  164. $order_number = (new OrderNoService())->createOrderNumber(PurchaseOrder::prefix);
  165. if(empty($order_number)) return [false,'采购单号生成失败!'];
  166. $data['order_number'] = $order_number;
  167. }else{
  168. if($this->isEmpty($data,'order_number')) return [false,'采购单号不能为空!'];
  169. }
  170. return [true, ''];
  171. }
  172. }