InventoryAccountController.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Exports\Export;
  4. use App\InventoryAccount;
  5. use App\InventoryAccountMission;
  6. use App\Services\InventoryAccountService;
  7. use App\Services\OwnerService;
  8. use Exception;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\Gate;
  12. use Illuminate\Support\Facades\Http;
  13. use Maatwebsite\Excel\Facades\Excel;
  14. class InventoryAccountController extends Controller
  15. {
  16. public function __construct()
  17. {
  18. app()->singleton('inventoryAccountService',InventoryAccountService::class);
  19. }
  20. //创建盘点任务
  21. public function createStockInventoryMission(Request $request){
  22. if(!Gate::allows("库存管理-盘点")){ return redirect(url('/')); }
  23. // $date_start=$request->input('formData.date_start');
  24. // $date_end=$request->input('formData.date_end');
  25. // $ownerId=$request->input('formData.owner_id')[0];
  26. $date_start=$request->input('date_start');
  27. $date_end=$request->input('date_end');
  28. $ownerId=$request->input('owner_id');
  29. $location=$request->input('location');
  30. $inventoryAccount=app('inventoryAccountService')->createMission($date_start,$date_end,$ownerId,$location);
  31. $inventoryAccount=InventoryAccount::with('owner')->find($inventoryAccount->id);
  32. if (is_null($inventoryAccount)) return ['success'=>false,'data'=>'参数错误!'];
  33. return ['success'=>true,'data'=>$inventoryAccount];
  34. }
  35. //删除盘点任务
  36. public function deleteStockInventoryMission($id){
  37. if(!Gate::allows('库存管理-盘点')){return['success'=>0,'status'=>'没有权限'];}
  38. if(is_null($id)){return ['success'=>false,'data'=>'传入id为空'];}
  39. $inventoryAccount=InventoryAccount::where('id',$id)->delete();
  40. return ['success'=>true,'data'=>$inventoryAccount];
  41. }
  42. //盘点-任务页面
  43. public function mission(Request $request,OwnerService $ownerService){
  44. if(!Gate::allows("库存管理-盘点")){ return redirect(url('/')); }
  45. $paginateParams = $request->input();
  46. $queryParam=$request->all();
  47. $inventoryAccounts=app('inventoryAccountService')->paginate($queryParam);
  48. $owners=$ownerService->getSelection();
  49. return view('inventory.stockInventory.mission',compact('owners','inventoryAccounts','paginateParams'));
  50. }
  51. //进入盘点中或复盘页面
  52. public function enterStockInventory($id,Request $request){
  53. if (!Gate::allows('库存管理-盘点-查看')&&!Gate::allows('库存管理-盘点')){return redirect(url('/')); }
  54. if (!$id) return ['success'=>false,'data'=>'参数错误!'];
  55. $inventoryAccount=InventoryAccount::with('owner')->find($id);
  56. $inventoryAccountMissions=InventoryAccountMission::with(['commodity.barcodes','stockInventoryPersons'])->where('inventory_account_id',$id)->orderBy('difference_amount','desc')->get();
  57. return view('inventory.stockInventory.inventoryMission',compact('inventoryAccount','inventoryAccountMissions'));
  58. }
  59. //依据盘点任务id进行 --盘点
  60. public function stockInventory(Request $request){
  61. if (!Gate::allows('库存管理-盘点')){return redirect(url('/')); }
  62. $location=$request->input('location');
  63. $barcode=$request->input('barcode');
  64. $inventoryId=$request->input('inventoryId');
  65. $count=$request->input('count');
  66. $id=$request->input('id');
  67. if (is_null($count)) return ['success'=>false,'data'=>'盘点数不能为空!'];
  68. /** @var InventoryAccountService $inventoryAccountMission */
  69. $inventoryAccountService=app('inventoryAccountService');
  70. $inventoryAccountMission=$inventoryAccountService->stockInventory($id,$location,$barcode,$count,$inventoryId);
  71. if (!$inventoryAccountMission)return ['success'=>false,'data'=>'参数错误!'];
  72. /** @var InventoryAccountService $inventoryService */
  73. $inventoryService=app('inventoryAccountService');
  74. $inventoryAccount=$inventoryService->updateInventory($inventoryId);
  75. $stockInventoryPersons=$inventoryAccountMission->stockInventoryPersons;
  76. return ['success'=>true,'inventoryMission'=>$inventoryAccountMission,'inventory'=>$inventoryAccount,'stockInventoryPersons'=>$stockInventoryPersons];
  77. }
  78. //根据该库存和产品条码查询该条盘点记录
  79. public function searchStockInventoryRecord(Request $request){
  80. if (!Gate::allows('库存管理-盘点')){return redirect(url('/')); }
  81. $location=$request->input('location');
  82. $barcode=$request->input('barcode');
  83. $inventoryId=$request->input('inventoryId');
  84. /** @var InventoryAccountService $application */
  85. $application = app('inventoryAccountService');
  86. $inventoryAccountMissions= $application->searchStockInventoryRecord($location,$barcode,$inventoryId);
  87. if ($inventoryAccountMissions->isEmpty())return ['success'=>false,'data'=>'没有找到相应记录!'];
  88. // $stockInventoryPersons=$inventoryAccountMissions->stockInventoryPersons;
  89. // return ['success'=>true,'data'=>$inventoryAccountMissions,'stockInventoryPersons'=>$stockInventoryPersons];
  90. return ['success'=>true,'data'=>$inventoryAccountMissions];
  91. }
  92. //盘点任务导出
  93. public function stockInventoryExport(Request $request){
  94. if (!Gate::allows('库存管理-盘点')){return redirect(url('/')); }
  95. ini_set('max_execution_time',3500);
  96. ini_set('memory_limit','3526M');
  97. if ($request->checkAllSign){
  98. $request->offsetUnset('checkAllSign');
  99. $queryParam=$request->all();
  100. $inventoryAccounts=app('inventoryAccountService')->get($queryParam);
  101. }else{
  102. $queryParam=$request->all();
  103. $inventoryAccounts=app('inventoryAccountService')->some($queryParam);
  104. }
  105. $row=[[
  106. 'id'=>'盘点编号',
  107. 'status'=>'盘点状态',
  108. 'created_at'=>'创建时间',
  109. 'owner_id'=>'货主',
  110. 'type'=>'任务类型',
  111. 'start_at'=>'起始时间',
  112. 'end_at'=>'结束时间',
  113. 'total'=>'记录数',
  114. 'processed'=>'已盘数',
  115. 'surplus'=>'剩余数',
  116. 'difference'=>'复盘差异',
  117. 'returned'=>'复盘归位',
  118. ]];
  119. $list=[];
  120. for ($i=0; $i<count($inventoryAccounts);$i++){
  121. $inventoryAccount=$inventoryAccounts[$i];
  122. $w=[
  123. 'id'=>isset($inventoryAccount->id)?$inventoryAccount->id:'',
  124. 'status'=>isset($inventoryAccount->status)?$inventoryAccount->status:'',
  125. 'created_at'=>isset($inventoryAccount->created_at)?$inventoryAccount->created_at:'',
  126. 'owner_id'=>isset($inventoryAccount->owner->name)?$inventoryAccount->owner->name:'',
  127. 'type'=>isset($inventoryAccount->type)?$inventoryAccount->type:'',
  128. 'start_at'=>isset($inventoryAccount->start_at)?$inventoryAccount->start_at:'',
  129. 'end_at'=>isset($inventoryAccount->end_at)?$inventoryAccount->end_at:'',
  130. 'total'=>isset($inventoryAccount->total)?$inventoryAccount->total:'',
  131. 'processed'=>isset($inventoryAccount->processed)?$inventoryAccount->processed:'',
  132. 'surplus'=>isset($inventoryAccount->surplus)?$inventoryAccount->surplus:'',
  133. 'difference'=>isset($inventoryAccount->difference)?$inventoryAccount->difference:'',
  134. 'returned'=>isset($inventoryAccount->returned)?$inventoryAccount->returned:'',
  135. ];
  136. $list[$i]=$w;
  137. }
  138. return Excel::download(new Export($row,$list),date('YmdHis', time()).'-盘点任务记录单.xlsx');
  139. }
  140. public function stockInventoryEnd(Request $request){
  141. if (!Gate::allows('库存管理-盘点')){return redirect(url('/')); }
  142. $id=$request->input('id');
  143. if (!$id) return ['success'=>false,'data'=>'参数错误!'];
  144. $inventoryAccount=InventoryAccount::query()->where('id',$id)->update(['status'=>'复盘中']);
  145. $this->log(__METHOD__,'结束初盘任务'.__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
  146. if ($inventoryAccount>0) return ['success'=>true,'data'=>'复盘中'];
  147. return ['success'=>false,'data'=>'参数错误!'];
  148. }
  149. public function syncOwners(OwnerService $ownerService){
  150. if (!Gate::allows('库存管理-盘点')){return redirect(url('/')); }
  151. $owners=$ownerService->syncOwnersData();
  152. if (!$owners)return ['success'=>false,'data'=>'同步货主失败!'];
  153. return ['success'=>true,'data'=>$owners];
  154. }
  155. public function 修改质量状态(Request $request){
  156. if (!Gate::allows('库存管理-盘点')){return redirect(url('/')); }
  157. $id=$request->input('id');
  158. $location=$request->location;
  159. $sku=$request->sku;
  160. $quality=$request->quality;
  161. $ownerCode=$request->ownerCode;
  162. $inventoryAccountMission=app('inventoryAccountService')->修改质量状态($id,$location,$sku,$quality,$ownerCode);
  163. $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
  164. if ($inventoryAccountMission==null) return ['success'=>false,'data'=>'WMS中不存在该条记录!'];
  165. return ['success'=>true,'data'=>'质量状态修改成功'];
  166. }
  167. public function 完结盘点任务($id){
  168. if(!Gate::allows('库存管理-盘点-完结')){return['success'=>false,'status'=>'没有权限'];}
  169. if (!$id)return['success'=>false,'status'=>'参数错误!'];
  170. $inventoryAccount=app('inventoryAccountService')->完结盘点任务($id);
  171. if (!$inventoryAccount)return['success'=>false,'status'=>'修改完结状态失败!'];
  172. return['success'=>true,'data'=>$inventoryAccount];
  173. }
  174. public function 增加系统之外的盘点记录(Request $request){
  175. if(!Gate::allows('库存管理-盘点')){return['success'=>false,'data'=>'没有权限'];}
  176. $location=$request->input('location');
  177. $barcode=$request->input('barcode');
  178. $inventoryId=$request->input('inventoryId');
  179. $count=$request->input('count');
  180. $owner_code=$request->input('owner_code');
  181. $param=$request->input('param');
  182. if (is_null($count)) return ['success'=>false,'data'=>'盘点数不能为空!'];
  183. $inventoryAccountMission=app('inventoryAccountService')->增加系统之外的盘点记录($location,$barcode,$inventoryId,$count,$owner_code,$param);
  184. if (!$inventoryAccountMission)return ['success'=>false,'data'=>'添加系统之外的库位记录失败!'];
  185. $inventoryAccountMission=InventoryAccountMission::with(['commodity.barcodes','stockInventoryPersons'])->where('id',$inventoryAccountMission->id)->first();
  186. $stockInventoryPersons=$inventoryAccountMission->stockInventoryPersons;
  187. return ['success'=>true,'inventoryAccountMission'=>$inventoryAccountMission,'stockInventoryPersons'=>$stockInventoryPersons];
  188. }
  189. public function 盘点选中任务(Request $request){
  190. if(!Gate::allows('库存管理-盘点')){return['success'=>false,'data'=>'没有权限'];}
  191. $id=$request->input('id');
  192. $count=$request->count;
  193. $inventoryId=$request->input('inventoryId');
  194. $produced_at=$request->input('produced_at');
  195. $valid_at=$request->input('valid_at');
  196. $batch_number=$request->input('batch_number');
  197. if (is_null($count)) return ['success'=>false,'data'=>'盘点数不能为空!'];
  198. if ($produced_at||$valid_at||$batch_number){
  199. /** @var InventoryAccountService $inventoryAccountMission */
  200. $inventoryAccountService=app('inventoryAccountService');
  201. $inventoryAccountMission=$inventoryAccountService ->盘点生产日期_失效日期_批号有改动任务($id,$count,$inventoryId,$produced_at,$valid_at,$batch_number);
  202. if (!$inventoryAccountMission)return ['success'=>false,'data'=>'盘点生产日期_失效日期_批号有改动任务失败!'];
  203. /** @var InventoryAccountService $inventoryService */
  204. $inventoryService=app('inventoryAccountService');
  205. $inventoryAccount=$inventoryService->updateInventory($inventoryId);
  206. return ['success'=>true,'inventoryMission'=>$inventoryAccountMission,'inventory'=>$inventoryAccount];
  207. }else{
  208. /** @var InventoryAccountService $inventoryAccountMission */
  209. $inventoryAccountService=app('inventoryAccountService');
  210. $inventoryAccountMission=$inventoryAccountService ->盘点选中任务($id,$count,$inventoryId);
  211. if (!$inventoryAccountMission)return ['success'=>false,'data'=>'盘点选中任务失败!'];
  212. /** @var InventoryAccountService $inventoryService */
  213. $inventoryService=app('inventoryAccountService');
  214. $inventoryAccount=$inventoryService->updateInventory($inventoryId);
  215. $stockInventoryPersons=$inventoryAccountMission->stockInventoryPersons;
  216. return ['success'=>true,'inventoryMission'=>$inventoryAccountMission,'inventory'=>$inventoryAccount,'stockInventoryPersons'=>$stockInventoryPersons];
  217. }
  218. }
  219. public function 删除盘点记录(Request $request){
  220. if(!Gate::allows('库存管理-盘点-删除')){return['success'=>false,'data'=>'没有权限'];}
  221. $inventoryAccountMissionId=$request->input('inventoryAccountMissionId');
  222. $inventoryAccountId=$request->input('inventoryAccountId');
  223. if(is_null($inventoryAccountMissionId)){return ['success'=>false,'data'=>'传入id为空'];}
  224. /** @var InventoryAccountService $inventoryService */
  225. $inventoryService=app('inventoryAccountService');
  226. $inventoryAccountMission=$inventoryService->删除盘点记录($inventoryAccountMissionId,$inventoryAccountId);
  227. return ['success'=>true,'data'=>$inventoryAccountMission];
  228. }
  229. public function 跳过盘点记录(Request $request){
  230. if(!Gate::allows('库存管理-盘点')){return['success'=>false,'data'=>'没有权限'];}
  231. $inventoryAccountMissionId=$request->inventoryAccountMissionId;
  232. $inventoryAccountId=$request->input('inventoryAccountId');
  233. if(is_null($inventoryAccountMissionId)){return ['success'=>false,'data'=>'传入id为空'];}
  234. /** @var InventoryAccountService $inventoryService */
  235. $inventoryService=app('inventoryAccountService');
  236. $inventoryAccountMission=$inventoryService->跳过盘点记录($inventoryAccountMissionId,$inventoryAccountId);
  237. return ['success'=>true,'inventoryAccountMission'=>$inventoryAccountMission];
  238. }
  239. public function exportInventoryAccountMission(Request $request){
  240. if(!Gate::allows("库存管理-盘点")){ return redirect(url('/')); }
  241. $post = Http::post(config('go.export.url'),['type'=>'inventoryAccountMission','data'=>$request->data]);
  242. if ($post->status() == 500){
  243. throw new Exception($post->header("Msg"));
  244. }
  245. return response($post,200, [
  246. "Content-type"=>"application/octet-stream",
  247. "Content-Disposition"=>"attachment; filename=库存盘点记录-".date('ymdHis').'.xlsx',
  248. ]);
  249. }
  250. public function searchCommodityByBarcode(Request $request){
  251. if(!Gate::allows('库存管理-盘点')){return['success'=>false,'data'=>'没有权限'];}
  252. $barcode=$request->input('barcode');
  253. $owner_code=$request->input('owner_code');
  254. /** @var InventoryAccountService $inventoryService */
  255. $inventoryService=app('inventoryAccountService');
  256. $commodity=$inventoryService->searchCommodityByBarcode($barcode,$owner_code);
  257. if ($commodity){
  258. return ['success'=>true,'data'=>$commodity];
  259. }else{
  260. return ['success'=>false,'data'=>'输入的条码没有对应商品!'];
  261. }
  262. }
  263. }