BoxHookService.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. namespace App\Service\Box;
  3. use App\Model\Box;
  4. use App\Model\BoxDetail;
  5. use App\Model\Header_ext;
  6. use App\Model\Orders;
  7. use App\Model\OrdersProduct;
  8. use App\Service\EmployeeService;
  9. use App\Service\Service;
  10. /**
  11. * 包装相关工厂模式
  12. * @package App\Models
  13. */
  14. class BoxHookService extends Service
  15. {
  16. protected static $instance;
  17. protected static $box_header;
  18. protected static $box_detail_header;
  19. public function __construct(){
  20. self::$box_header = Header_ext::where('type','box')->pluck('value','key')->toArray();
  21. self::$box_detail_header = Header_ext::where('type','box_detail')->pluck('value','key')->toArray();
  22. }
  23. public static function getInstance(): self
  24. {
  25. if (self::$instance == null) {
  26. self::$instance = new BoxHookService();
  27. }
  28. return self::$instance;
  29. }
  30. /**
  31. * 包装单新增
  32. * @param $data
  33. * @return array
  34. */
  35. public function boxInsert($data,$user){
  36. $box = new Box();
  37. if(!isset($data['order_no'])||empty($data['order_no'])) $data['order_no'] = $this->setOrderNo();
  38. if(empty($data['order_no'])) return [false, "包装单号生成失败"];
  39. if(!isset($data['out_order_no'])) return [false,'out_order_no不存在!'];
  40. list($status,$box) = $this->dealBox($box,$data,$user);
  41. if(!$status) return [false,$box];
  42. $box->save();
  43. list($status,$msg) = $this->boxDetailInsert($data);
  44. if(!$status) return [false,$msg];
  45. return [true,$box];
  46. }
  47. public function dealBox($box,$data,$user){
  48. //包装审核
  49. $em = new EmployeeService();
  50. $auto = $em->is_auto($user, "bz_auto");
  51. $box->order_no = $data['order_no'];
  52. $box->out_order_no = $data['out_order_no'];
  53. // $box->top_id = $data['top_id'];
  54. // $box->num = $data['num'];
  55. $box->ext_1 = isset($data['ext_1']) ? $data['ext_1'] : '';
  56. $box->ext_2 = isset($data['ext_2']) ? $data['ext_2'] : '';
  57. $box->ext_3 = isset($data['ext_3']) ? $data['ext_3'] : '';
  58. $box->ext_4 = isset($data['ext_4']) ? $data['ext_4'] : '';
  59. $box->ext_5 = isset($data['ext_5']) ? $data['ext_5'] : '';
  60. $box->top_order_no = $data['top_order_no'];
  61. $box->status = $auto;
  62. $box->shipment_order_no = isset($data['shipment_order_no'])? $data['shipment_order_no'] : '';
  63. return [true,$box];
  64. }
  65. /**
  66. * 包装单详情新增
  67. * @param $data
  68. * @return array
  69. */
  70. public function boxDetailInsert($data){
  71. $order_no = $data['order_no'];
  72. $out_order_no = $data['out_order_no'];
  73. $top_order_no = $data['top_order_no'];
  74. $box_detail = new BoxDetail(['channel'=>$top_order_no]);
  75. if(!isset($data['detail'])||empty($data['detail'])) return [true,''];
  76. $insert = $data['detail'];
  77. list($status,$insert) = $this->dealBoxDetail($insert,$order_no,$out_order_no,$top_order_no);
  78. if(!$status) return [false,$insert];
  79. $box_detail->insert($insert);
  80. return [true,''];
  81. }
  82. /**
  83. * 包装单详情数据处理
  84. * @param $data
  85. * @return array
  86. */
  87. public function dealBoxDetail($data,$order_no,$out_order_no,$top_order_no){
  88. $insert = [];
  89. $time = time();
  90. foreach ($data as $v){
  91. if(!isset($v['top_id'])) return [false,'top_id不存在!'];
  92. if(!isset($v['num'])) return [false,'数量不存在!'];
  93. $insert[] = [
  94. 'order_no' => $order_no,
  95. 'out_order_no' => $out_order_no,
  96. 'top_id' => $v['top_id'],
  97. 'orders_product_id' => $v['orders_product_id'] ?? 0,
  98. 'code' => '',
  99. 'title' => '',
  100. 'num' => $v['num'],
  101. 'price' => $v['price'],
  102. 'type' => isset($v['type'])?$v['type'] : 1,
  103. 'crt_time' => $time,
  104. 'upd_time' => $time,
  105. 'top_order_no' => $top_order_no,
  106. 'box_type' => $v['box_type'],
  107. 'ext_1' => isset($v['ext_1']) ? $v['ext_1'] : '',
  108. 'ext_2' => isset($v['ext_2']) ? $v['ext_2'] : '',
  109. 'ext_3' => isset($v['ext_3']) ? $v['ext_3'] : '',
  110. 'ext_4' => isset($v['ext_4']) ? $v['ext_4'] : '',
  111. 'ext_5' => isset($v['ext_5']) ? $v['ext_5'] : '',
  112. 'ext_8' => isset($v['ext_8']) ? $v['ext_8'] : '',
  113. 'team_id' => isset($v['team_id']) ? $v['team_id'] : '',
  114. 'shipment_order_no' => isset($v['shipment_order_no']) ? $v['shipment_order_no'] : '',
  115. ];
  116. }
  117. return [true,$insert];
  118. }
  119. /**
  120. * @return string
  121. */
  122. public function setOrderNo(){
  123. $str = date('Ymd',time());
  124. $order_number = Box::where('order_no','Like','%'. $str . '%')
  125. ->max('order_no');
  126. if(empty($order_number)){
  127. $number = str_pad(1,4,'0',STR_PAD_LEFT);
  128. $number = $str . $number;
  129. }else{
  130. $tmp = substr($order_number, -4);
  131. $tmp = $tmp + 1;
  132. //超过99999
  133. if(strlen($tmp) > 4) return '';
  134. $number = str_pad($tmp,4,'0',STR_PAD_LEFT);
  135. $number = $str . $number;
  136. }
  137. return $number;
  138. // return date('YmdHis').rand(1000,9999);
  139. }
  140. /**
  141. * @param $data
  142. * @return array
  143. */
  144. public function boxDetail($data){
  145. // var_dump($data);
  146. if(isset($data['top_order_no'])) $top_order_no = $data['top_order_no'];
  147. else $top_order_no = Box::where('order_no',$data['order_no'])->where('del_time',0)->value('top_order_no');
  148. $box = new BoxDetail(['channel'=>$top_order_no]);
  149. // $list = [];
  150. $box = $box->where('del_time',0);
  151. if(isset($data['id'])) {
  152. $box = $box->where('top_id',$data['id']);
  153. }
  154. if(isset($data['order_no'])){
  155. $box = $box->where('order_no',$data['order_no']);
  156. }
  157. // var_dump($box->toSql());
  158. $box = $box->get()->toArray();
  159. // var_dump($box);die;
  160. return [true,$box];
  161. }
  162. /**
  163. * @param $order_no
  164. * @return array
  165. */
  166. public function delBox($order_no){
  167. $box = Box::where('del_time',0)->where('order_no',$order_no)->first();
  168. if(empty($box)) return [];
  169. $boxDetail = new BoxDetail(['channel' => $box->top_order_no]);
  170. $list = $boxDetail->where('order_no', $order_no)
  171. ->where('del_time',0)
  172. ->select('id','top_id','orders_product_id','num','ext_1','ext_2','ext_3','ext_4','ext_5','out_order_no','box_type')
  173. ->get()->toArray();
  174. $boxDetail->where('order_no',$order_no)
  175. ->where('del_time',0)
  176. ->update(['del_time' => time()]);
  177. $box->del_time = time();
  178. $box->save();
  179. return $list;
  180. }
  181. // /**
  182. // * @param $data
  183. // * @return array
  184. // */
  185. // public function boxDetail($data){
  186. // $order_no = $data['order_no'];
  187. //
  188. // $box = new BoxDetail(['channel'=>$order_no]);
  189. //
  190. // $list = $this->limit($box,'*',$data);
  191. //
  192. // return [true,$list];
  193. // }
  194. }