ScreenController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Model\Box;
  4. use App\Model\BoxDetail;
  5. use App\Model\DispatchSub;
  6. use App\Model\OrdersProductProcess;
  7. use App\Model\Process;
  8. use App\Model\SaleOrdersProduct;
  9. use Carbon\Carbon;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\DB;
  12. class ScreenController extends BaseController
  13. {
  14. //产值数据全览
  15. public function output_value(Request $request){
  16. $currentYear = Carbon::now()->year;
  17. $lastYear = $currentYear - 1;
  18. $currentMonth = Carbon::now()->month;
  19. $totalValueAllTime = SaleOrdersProduct::where('del_time',0)->sum('finished_num');
  20. $totalValueLastYear = SaleOrdersProduct::where('del_time',0)->whereRaw("YEAR(FROM_UNIXTIME(crt_time)) = $lastYear")->sum('finished_num');
  21. $totalValueCurrentYearMonth = SaleOrdersProduct::where('del_time',0)->whereRaw("YEAR(FROM_UNIXTIME(crt_time)) = $currentYear AND MONTH(FROM_UNIXTIME(crt_time)) = $currentMonth")->sum('finished_num');
  22. return $this->json_return(200,'',['total_time'=>$totalValueAllTime, 'total_last_year'=>$totalValueLastYear, 'total_current_month'=>$totalValueCurrentYearMonth]);
  23. }
  24. //项目进度
  25. public function order_process1(Request $request) {
  26. $result = SaleOrdersProduct::where('del_time',0)
  27. ->select(DB::raw('sum(order_quantity) as total'), DB::raw('sum(finished_num) as finished_num'),'out_order_no as Code','customer_name as CustomerName')
  28. ->groupBy('out_order_no')
  29. ->get()->toArray();
  30. if(! empty($result)){
  31. foreach ($result as $key => $value){
  32. $result[$key]['rate'] = intval($value['finished_num'] / $value['total']);
  33. unset($result[$key]['total']);
  34. unset($result[$key]['finished_num']);
  35. }
  36. }
  37. return $this->json_return(200,'',$result);
  38. }
  39. //历史项目 在手项目
  40. public function project_region(Request $request){
  41. $all = SaleOrdersProduct::where('del_time',0)
  42. ->whereColumn('order_quantity','=','finished_num')
  43. ->select('out_order_no')
  44. ->groupBy('out_order_no')
  45. ->get()
  46. ->toArray();
  47. $all = array_column($all,'out_order_no');
  48. $not_all = SaleOrdersProduct::where('del_time',0)
  49. ->whereColumn('order_quantity','<>','finished_num')
  50. ->select('out_order_no')
  51. ->groupBy('out_order_no')
  52. ->get()
  53. ->toArray();
  54. $not_all = array_column($not_all,'out_order_no');
  55. $all = array_diff($all, $not_all);
  56. $arr = [
  57. "all_num" => count($all),
  58. "num" => count($not_all),
  59. ];
  60. return $this->json_return(200,'',$arr);
  61. }
  62. //本月质量
  63. public function output_value_month1(Request $request){
  64. $date = date('Ymd',time());
  65. $startDate = strtotime(date('Y-m-01 00:00:00', time()));
  66. $endDate = strtotime(date('Y-m-t 23:59:59', time()));
  67. //工序-----------------------------
  68. $model = new OrdersProductProcess(['channel' => $date]);//当前季度的数据
  69. $data = $model->where('del_time',0)
  70. ->where('status',4)
  71. ->select('crt_time')
  72. ->where('crt_time','>=',$startDate)
  73. ->where('crt_time','<=',$endDate)
  74. ->get()->toArray();
  75. $return = [];
  76. if(! empty($data)){
  77. foreach ($data as $value){
  78. $crt_time = date('Y-m-d',$value['crt_time']);
  79. if(isset($return[$crt_time])){
  80. $return[$crt_time]['num'] += 1;
  81. }else{
  82. $return[$crt_time] = [
  83. 'num' => 1,
  84. 'value' => $crt_time
  85. ];
  86. }
  87. }
  88. }
  89. $return = array_values($return);
  90. return $this->json_return(200,'',$return);
  91. }
  92. //产量趋势图
  93. public function output_value_efficiency(Request $request){
  94. // 获取当前时间戳
  95. $currentTimestamp = time();
  96. // 输出过去两周的起止时间(包括当前日期)
  97. $timestamp = strtotime("-13 days", $currentTimestamp);
  98. $startOfDay = strtotime(date('Y-m-d 00:00:00', $timestamp));
  99. $endOfDay = strtotime(date('Y-m-d 23:59:59', $currentTimestamp));
  100. $box = Box::where('del_time',0)
  101. ->where('crt_time','>=',$startOfDay)
  102. ->where('crt_time','<=',$endOfDay)
  103. ->select('crt_time','top_order_no','order_no')
  104. ->orderBy('crt_time','desc')
  105. ->get()->toArray();
  106. $result = [];
  107. if(! empty($box)){
  108. foreach ($box as $value){
  109. $model = new BoxDetail(['channel' => $value['top_order_no']]);
  110. $map = $model->where('del_time',0)
  111. ->where('order_no',$value['order_no'])
  112. ->select('order_no',DB::raw('sum(num) as num'))
  113. ->groupBy('order_no')
  114. ->pluck('num','order_no')
  115. ->toArray();
  116. $output = $map[$value['order_no']] ?? 0;
  117. $times = date('Y-m-d',$value['crt_time']);
  118. if(isset($result[$times])){
  119. $result[$times]['output'] += $output;
  120. }else{
  121. $result[$times] = [
  122. 'crt_time' => $times,
  123. 'output' => $output
  124. ];
  125. }
  126. }
  127. }
  128. $result = array_values($result);
  129. return $this->json_return(200,'',$result);
  130. }
  131. //工序负荷全览
  132. public function capacity(Request $request){
  133. $date = date('Ymd',time());
  134. //工序-----------------------------
  135. $model = new OrdersProductProcess(['channel' => $date]);//当前季度的数据
  136. $data = $model->where('del_time',0)
  137. ->where('status',2)
  138. ->select('finished_time')
  139. ->get()->toArray();
  140. $return = [];
  141. if(! empty($data)){
  142. foreach ($data as $value){
  143. $finished_time = date('Ymd',$value['finished_time']);
  144. if(isset($return[$finished_time])){
  145. $return[$finished_time] += 1;
  146. }else{
  147. $return[$finished_time] = 1;
  148. }
  149. }
  150. }
  151. $maxValue = empty($return) ? 0 : max($return);
  152. $today = $return[$date] ?? 0;
  153. $rate = $maxValue ? intval($today/$maxValue) : 0;
  154. //工序-----------------------------
  155. //包装-----------------------------
  156. $model = new BoxDetail(['channel' => $date]);//当前季度的数据
  157. $data = $model->where('del_time',0)
  158. ->select('crt_time','num')
  159. ->get()->toArray();
  160. $return = [];
  161. if(! empty($data)){
  162. foreach ($data as $value){
  163. $crt_time = date('Ymd',$value['crt_time']);
  164. if(isset($return[$crt_time])){
  165. $return[$crt_time] += $value['num'];
  166. }else{
  167. $return[$crt_time] = $value['num'];
  168. }
  169. }
  170. }
  171. $maxValue = empty($return) ? 0 : max($return);
  172. $today = $return[$date] ?? 0;
  173. $rate2 = $maxValue ? intval($today/$maxValue) : 0;
  174. //包装-----------------------------
  175. $arr = [
  176. [
  177. [
  178. "title"=> "压贴",
  179. "rate"=> $rate
  180. ],
  181. [
  182. "title"=> "包装",
  183. "rate"=> $rate2
  184. ]
  185. ],
  186. ];
  187. return $this->json_return(200,'',['data' => $arr]);
  188. }
  189. //设备信息 暂时不做
  190. public function product_num(Request $request){
  191. $arr = [
  192. [
  193. "machine_day_num"=> "4903.69",
  194. "machine_month_num"=> "139.64",
  195. "machine_week_num"=> "47.21",
  196. "break_day_num"=> "0",
  197. "break_month_num"=> "10",
  198. "break_week_num"=> "3",
  199. "start_time"=> date("Y-m-d H:i:s",time()),
  200. "day_num"=> "766",
  201. "week_num"=> "4598",
  202. "month_num"=> "14489",
  203. "rate"=> "72"
  204. ],
  205. [
  206. "machine_day_num"=> "469591.19",
  207. "machine_month_num"=> "107.03",
  208. "machine_week_num"=> "35.23",
  209. "break_day_num"=> 0,
  210. "break_month_num"=> "210",
  211. "break_week_num"=> "18",
  212. "start_time"=> date("Y-m-d H:i:s",time()),
  213. "day_num"=> 0,
  214. "week_num"=> "2353",
  215. "month_num"=> "6255",
  216. "rate"=> 0
  217. ],
  218. [
  219. "machine_day_num"=> "0",
  220. "machine_month_num"=> "14.02",
  221. "machine_week_num"=> "6.88",
  222. "break_day_num"=> "0",
  223. "break_month_num"=> "0",
  224. "break_week_num"=> "0",
  225. "start_time"=> date("Y-m-d H:i:s",time()),
  226. "day_num"=> "0",
  227. "week_num"=> "494",
  228. "month_num"=> "3058",
  229. "rate"=> "0"
  230. ],
  231. [
  232. "machine_day_num"=> "4903.77",
  233. "machine_month_num"=> "149.14",
  234. "machine_week_num"=> "56.72",
  235. "break_day_num"=> "0",
  236. "break_month_num"=> "0",
  237. "break_week_num"=> "0",
  238. "start_time"=> date("Y-m-d H:i:s",time()),
  239. "day_num"=> "626",
  240. "week_num"=> "4460",
  241. "month_num"=> "13034",
  242. "rate"=> "48"
  243. ]
  244. ];
  245. return $this->json_return(200,'',$arr);
  246. }
  247. //在制工单
  248. public function work_order(Request $request){
  249. // 获取当前时间戳
  250. $currentTimestamp = time();
  251. $timestamp = strtotime("-3 months", $currentTimestamp);
  252. $startOfDay = strtotime(date('Y-m-d 00:00:00', $timestamp));
  253. $endOfDay = strtotime(date('Y-m-d 23:59:59', $currentTimestamp));
  254. $result = DispatchSub::where('del_time',0)
  255. ->where('crt_time',">=", $startOfDay)
  256. ->where('crt_time',"<=", $endOfDay)
  257. ->whereColumn('dispatch_quantity','>','finished_num')
  258. ->select('dispatch_no as order_no','process_id','product_title','dispatch_quantity as product_num','finished_num as finish_num')
  259. ->get()->toArray();
  260. if(! empty($result)){
  261. $process_id = array_unique(array_column($result,'process_id'));
  262. $processMap = Process::whereIn('id',$process_id)
  263. ->pluck('title','id')
  264. ->toArray();
  265. foreach ($result as $key => $value){
  266. $result[$key]['procedure'] = $processMap[$value['process_id']] ?? '';
  267. }
  268. }
  269. return $this->json_return(200,'',$result);
  270. }
  271. //待加工
  272. public function nu_work_order(Request $request){
  273. $date = date('Ymd',time());
  274. //工序-----------------------------
  275. $model = new OrdersProductProcess(['channel' => $date]);//当前季度的数据
  276. $result = $model->where('del_time',0)
  277. ->where('status',0)
  278. ->select('production_no as order_no','product_title','process_id',DB::raw('count(id) as product_num'))
  279. ->groupBy('order_product_id')
  280. ->get()->toArray();
  281. if(! empty($result)){
  282. $process_id = array_unique(array_column($result,'process_id'));
  283. $processMap = Process::whereIn('id',$process_id)
  284. ->pluck('title','id')
  285. ->toArray();
  286. foreach ($result as $key => $value){
  287. $result[$key]['procedure'] = $processMap[$value['process_id']] ?? '';
  288. }
  289. }
  290. return $this->json_return(200,'',$result);
  291. }
  292. }