RejectedBillItemController.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Commodity;
  4. use App\Owner;
  5. use App\Rejected;
  6. use App\RejectedBill;
  7. use App\RejectedBillItem;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Collection;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\Gate;
  12. use Illuminate\Support\Facades\Validator;
  13. use Zttp\Zttp;
  14. class RejectedBillItemController extends Controller
  15. {
  16. /**
  17. * Display a listing of the resource.
  18. *
  19. * @return \Illuminate\Http\Response
  20. */
  21. public function index()
  22. {
  23. //
  24. }
  25. /**
  26. * Show the form for creating a new resource.
  27. *
  28. * @return \Illuminate\Http\Response
  29. */
  30. public function create()
  31. {
  32. //
  33. }
  34. /**
  35. * Store a newly created resource in storage.
  36. *
  37. * @param \Illuminate\Http\Request $request
  38. * @return \Illuminate\Http\Response
  39. */
  40. public function store(Request $request)
  41. {
  42. //
  43. }
  44. public function apiStore(Request $request)
  45. {
  46. if(!Gate::allows('退货管理-录入')){
  47. return ['success'=>'false','failure_info'=>'没有权限'];
  48. }
  49. $errorFields= $this->validator($request->all())->errors()->getMessages();
  50. if(!empty($errorFields)){
  51. return ['success'=>'false','error_fields'=>$errorFields,'failure_info'=>'fileds error'];
  52. }
  53. $rejectedBillItem=RejectedBillItem::where('barcode_goods',$request->input('barcode_goods'))
  54. ->where('id_quality_label',$request->input('id_quality_label'))
  55. ->where('id_rejected_bill',$request->input('id_rejected_bill'))->first();
  56. if($rejectedBillItem){
  57. $rejectedBillItem['amount']+=$request->input('amount');
  58. if($request->input('name_goods')){
  59. $rejectedBillItem['name_goods']=$request->input('name_goods');
  60. }
  61. $rejectedBillItem->update();
  62. }else{
  63. $rejectedBillItem=new RejectedBillItem($request->all());
  64. $rejectedBillItem->save();
  65. }
  66. $rejectedBillItem->injectCommodityName();
  67. $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
  68. return ['success'=>'true','id'=>$rejectedBillItem['id']];
  69. }
  70. public function apiUpdate(Request $request)
  71. {
  72. if(!Gate::allows('退货管理-编辑')){
  73. return ['success'=>'false','failure_info'=>'没有权限'];
  74. }
  75. $errorFields= $this->validator($request->all())->errors()->getMessages();
  76. if(!empty($errorFields)){
  77. return ['success'=>'false','error_fields'=>$errorFields,'failure_info'=>'fileds error'];
  78. }
  79. $rejectedBillItem=RejectedBillItem::where('id',$request->input('id'))->first();
  80. if(!$rejectedBillItem){
  81. return ['success'=>'false','failure_info'=>'数据库没有相应记录,请刷新后重加'];
  82. }else{
  83. $rejectedBillItem->fill($request->all());
  84. $rejectedBillItem->update();
  85. $rejectedBillItem->injectCommodityName();
  86. $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
  87. return ['success'=>'true','id'=>$rejectedBillItem['id']];
  88. }
  89. }
  90. public function collectionsToPackConfirm(Collection $rejectedBillItems)
  91. {
  92. $ids=[];
  93. $rejectedBillItems->each(function ($item)use(&$ids){
  94. $ids[]=$item->id;
  95. });
  96. if(!$ids)return ['success'=>'false','fail_info'=>'没有内容'];
  97. $collections=new Collection($ids);
  98. $i=0;
  99. $collections->each(function ($id)use(&$i,$ids){
  100. $rejectedBillItems=RejectedBillItem::whereIn('id', [$ids[$i]]);
  101. $rejectedBillItems->each(function(RejectedBillItem $rejectedBillItem)use(&$havingFail){
  102. $rejectedBill=RejectedBill::find($rejectedBillItem['id_rejected_bill']);
  103. $owner = Owner::find($rejectedBill['id_owner']);
  104. if(strstr($owner->name??'','笕尚')){
  105. $rejected=new Rejected();
  106. $rejected->fill($rejectedBill->toArray());
  107. $rejected->fill($rejectedBillItem->toArray());
  108. $rejectedJianshang=new api\jianshang\RejectedController();
  109. $sended=$rejectedJianshang->sendRejected($rejected);
  110. if(!$sended){
  111. echo '<h1>数据发送给笕尚失败,请通知IT相关负责人</h1>';
  112. $this->log(__METHOD__,'error','数据发送给笕尚失败');
  113. $havingFail++;
  114. return false;
  115. }
  116. }
  117. });
  118. $i++;
  119. if($i%30==0)
  120. sleep(1);
  121. });
  122. return 'yes'.$i;
  123. }
  124. public function apiPackConfirm(Request $request)
  125. {
  126. if(!Gate::allows('退货管理-录入')){
  127. return ['success'=>'false','fail_info'=>'没有权限'];
  128. }
  129. $ids=$request->input('ids');
  130. if(!$ids)return ['success'=>'false','fail_info'=>'没有内容'];
  131. $rejectedBillItems=RejectedBillItem::whereIn('id', $ids);
  132. //TODO: 发送给笕尚,应该单独抽出然后做出可配置流程
  133. $havingFail=0;
  134. $rejectedBill=null;
  135. if(!config('api.API_FAKING'))
  136. $rejectedBillItems->each(function(RejectedBillItem $rejectedBillItem)use(&$havingFail){
  137. $rejectedBill=RejectedBill::find($rejectedBillItem['id_rejected_bill']);
  138. if($rejectedBill['is_loaded']){
  139. return false;
  140. }
  141. $owner = Owner::find($rejectedBill['id_owner']);
  142. if(strstr($owner->name??'','笕尚')){
  143. $rejected=new Rejected();
  144. $rejected->fill($rejectedBill->toArray());
  145. $rejected->fill($rejectedBillItem->toArray());
  146. $rejectedJianshang=new api\jianshang\RejectedController();
  147. $sended=$rejectedJianshang->sendRejected($rejected);
  148. if(!$sended){
  149. echo '<h1>数据发送给笕尚失败,请通知IT相关负责人</h1>';
  150. $this->log(__METHOD__,'error'.__FUNCTION__.'_'.$rejectedBillItem['id'],'数据发送给笕尚失败');
  151. $havingFail++;
  152. return false;
  153. }
  154. }
  155. });
  156. if($havingFail>0)return ['success'=>'false','fail_info'=>"$havingFail/{$rejectedBillItems->count()} 条记录没有发送成功"];
  157. $this->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
  158. return ['success'=>'true'];
  159. }
  160. public function apiPackDestroy(Request $request)
  161. {
  162. if(!(Gate::allows('退货管理-录入')||Gate::allows('退货管理-编辑'))){
  163. return ['success'=>'false','failure_info'=>'没有权限'];
  164. }
  165. $ids=$request->input('ids');
  166. if(!$ids)return ['success'=>'false','fail_info'=>'没有内容'];
  167. $rejectedBillItems=RejectedBillItem::whereIn('id', $ids);
  168. $rejectedBillItems->each(function(RejectedBillItem $rejectedBillItem){
  169. $rejectedBillItem->delete();
  170. });
  171. $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
  172. return ['success'=>'true'];
  173. }
  174. protected function validator(array $data,$isUpdate=false)
  175. {
  176. return Validator::make($data, [
  177. 'id_rejected_bill' => ['required', 'numeric', 'exists:rejected_bills,id'],
  178. 'barcode_goods' => ['required', 'string','max:60'],
  179. 'name_goods' => ['nullable', 'string','max:50'],
  180. 'amount' => ['numeric','nullable', 'max:99999'],
  181. 'id_quality_label' => ['required','numeric', 'max:11'],
  182. 'batch_number' => ['string', 'nullable',],
  183. 'validity_at' => ['nullable','date_format:Y-m-d'],
  184. 'remark' => ['nullable','string','max:191'],
  185. ],[],[
  186. 'id_rejected_bill' =>'退单头',
  187. 'barcode_goods' => '商品条码',
  188. 'name_goods' => '商品名称',
  189. 'amount' => '数量',
  190. 'id_quality_label' => '品质',
  191. 'batch_number' => '批次',
  192. 'validity_at' => '效期',
  193. 'remark' => '备注'
  194. ]);
  195. }
  196. public function apiGet(Request $request)
  197. {
  198. if(!Gate::allows('退货管理-查询')){
  199. return ['success'=>'false','failure_info'=>'没有权限'];}
  200. if(!$request->input('id_rejected_bill')){
  201. return ['success'=>'false','failure_info'=>'表头id不能为空'];
  202. }
  203. $rejectedBillItems = RejectedBillItem::where('id_rejected_bill',$request->input('id_rejected_bill'))->get();
  204. return ['success'=>'true','items'=>$rejectedBillItems->toArray()];
  205. }
  206. public function apiDelete(Request $request)
  207. {
  208. if(!Gate::allows('退货管理-删除')){
  209. return ['success'=>'false','failure_info'=>'没有权限'];}
  210. if(!$request->input('id')){
  211. return ['success'=>'false','failure_info'=>'传入id不能为空'];
  212. }
  213. $rejectedBillItem = RejectedBillItem::find($request->input('id'));
  214. $rejectedBillItem->forceDelete();
  215. return ['success'=>'true','id'=>$request->input('id')];
  216. }
  217. /**
  218. * Display the specified resource.
  219. *
  220. * @param \App\RejectedBillItem $rejectedBillItem
  221. * @return \Illuminate\Http\Response
  222. */
  223. public function show(RejectedBillItem $rejectedBillItem)
  224. {
  225. //
  226. }
  227. /**
  228. * Show the form for editing the specified resource.
  229. *
  230. * @param \App\RejectedBillItem $rejectedBillItem
  231. * @return \Illuminate\Http\Response
  232. */
  233. public function edit(RejectedBillItem $rejectedBillItem)
  234. {
  235. //
  236. }
  237. /**
  238. * Update the specified resource in storage.
  239. *
  240. * @param \Illuminate\Http\Request $request
  241. * @param \App\RejectedBillItem $rejectedBillItem
  242. * @return \Illuminate\Http\Response
  243. */
  244. public function update(Request $request, RejectedBillItem $rejectedBillItem)
  245. {
  246. //
  247. }
  248. /**
  249. * Remove the specified resource from storage.
  250. *
  251. * @param \App\RejectedBillItem $rejectedBillItem
  252. * @return \Illuminate\Http\Response
  253. */
  254. public function destroy(RejectedBillItem $rejectedBillItem)
  255. {
  256. //
  257. }
  258. }