ScreenController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  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_default_timezone_set("PRC");
  65. $date = date('Ymd',time());
  66. $startDate = strtotime(date('Y-m-01 00:00:00', time()));
  67. $endDate = strtotime(date('Y-m-t 23:59:59', time()));
  68. //工序-----------------------------
  69. $model = new OrdersProductProcess(['channel' => $date]);//当前季度的数据
  70. $data = $model->where('del_time',0)
  71. ->where('status',4)
  72. ->select('crt_time')
  73. ->where('crt_time','>=',$startDate)
  74. ->where('crt_time','<=',$endDate)
  75. ->get()->toArray();
  76. $return = [];
  77. if(! empty($data)){
  78. foreach ($data as $value){
  79. $crt_time = date('Y-m-d',$value['crt_time']);
  80. if(isset($return[$crt_time])){
  81. $return[$crt_time]['num'] += 1;
  82. }else{
  83. $return[$crt_time] = [
  84. 'num' => 1,
  85. 'value' => $crt_time
  86. ];
  87. }
  88. }
  89. }
  90. $return = array_values($return);
  91. return $this->json_return(200,'',$return);
  92. }
  93. //产量趋势图
  94. public function output_value_efficiency(Request $request){
  95. date_default_timezone_set("PRC");
  96. // 获取当前时间戳
  97. $currentTimestamp = time();
  98. // 输出过去两周的起止时间(包括当前日期)
  99. $timestamp = strtotime("-13 days", $currentTimestamp);
  100. $startOfDay = strtotime(date('Y-m-d 00:00:00', $timestamp));
  101. $endOfDay = strtotime(date('Y-m-d 23:59:59', $currentTimestamp));
  102. $box = Box::where('del_time',0)
  103. ->where('crt_time','>=',$startOfDay)
  104. ->where('crt_time','<=',$endOfDay)
  105. ->select('crt_time','top_order_no','order_no')
  106. ->orderBy('crt_time','desc')
  107. ->get()->toArray();
  108. $result = [];
  109. if(! empty($box)){
  110. foreach ($box as $value){
  111. $model = new BoxDetail(['channel' => $value['top_order_no']]);
  112. $map = $model->where('del_time',0)
  113. ->where('order_no',$value['order_no'])
  114. ->select('order_no',DB::raw('sum(num) as num'))
  115. ->groupBy('order_no')
  116. ->pluck('num','order_no')
  117. ->toArray();
  118. $output = $map[$value['order_no']] ?? 0;
  119. $times = date('Y-m-d',$value['crt_time']);
  120. if(isset($result[$times])){
  121. $result[$times]['output'] += $output;
  122. }else{
  123. $result[$times] = [
  124. 'crt_time' => $times,
  125. 'output' => $output
  126. ];
  127. }
  128. }
  129. }
  130. $result = array_values($result);
  131. return $this->json_return(200,'',$result);
  132. }
  133. //工序负荷全览
  134. public function capacity(Request $request){
  135. date_default_timezone_set("PRC");
  136. $date = date('Ymd',time());
  137. //工序-----------------------------
  138. $model = new OrdersProductProcess(['channel' => $date]);//当前季度的数据
  139. $data = $model->where('del_time',0)
  140. ->where('status',2)
  141. ->select('finished_time')
  142. ->get()->toArray();
  143. $return = [];
  144. if(! empty($data)){
  145. foreach ($data as $value){
  146. $finished_time = date('Ymd',$value['finished_time']);
  147. if(isset($return[$finished_time])){
  148. $return[$finished_time] += 1;
  149. }else{
  150. $return[$finished_time] = 1;
  151. }
  152. }
  153. }
  154. $maxValue = empty($return) ? 0 : max($return);
  155. $today = $return[$date] ?? 0;
  156. $rate = $maxValue ? intval($today/$maxValue) : 0;
  157. //工序-----------------------------
  158. //包装-----------------------------
  159. $model = new BoxDetail(['channel' => $date]);//当前季度的数据
  160. $data = $model->where('del_time',0)
  161. ->select('crt_time','num')
  162. ->get()->toArray();
  163. $return = [];
  164. if(! empty($data)){
  165. foreach ($data as $value){
  166. $crt_time = date('Ymd',$value['crt_time']);
  167. if(isset($return[$crt_time])){
  168. $return[$crt_time] += $value['num'];
  169. }else{
  170. $return[$crt_time] = $value['num'];
  171. }
  172. }
  173. }
  174. $maxValue = empty($return) ? 0 : max($return);
  175. $today = $return[$date] ?? 0;
  176. $rate2 = $maxValue ? intval($today/$maxValue) : 0;
  177. //包装-----------------------------
  178. $arr = [
  179. [
  180. [
  181. "title"=> "压贴",
  182. "rate"=> $rate
  183. ],
  184. [
  185. "title"=> "包装",
  186. "rate"=> $rate2
  187. ]
  188. ],
  189. ];
  190. return $this->json_return(200,'',['data' => $arr]);
  191. }
  192. //设备信息 暂时不做
  193. public function product_num(Request $request){
  194. $arr = [
  195. [
  196. "machine_day_num"=> "4903.69",
  197. "machine_month_num"=> "139.64",
  198. "machine_week_num"=> "47.21",
  199. "break_day_num"=> "0",
  200. "break_month_num"=> "10",
  201. "break_week_num"=> "3",
  202. "start_time"=> date("Y-m-d H:i:s",time()),
  203. "day_num"=> "766",
  204. "week_num"=> "4598",
  205. "month_num"=> "14489",
  206. "rate"=> "72"
  207. ],
  208. [
  209. "machine_day_num"=> "469591.19",
  210. "machine_month_num"=> "107.03",
  211. "machine_week_num"=> "35.23",
  212. "break_day_num"=> 0,
  213. "break_month_num"=> "210",
  214. "break_week_num"=> "18",
  215. "start_time"=> date("Y-m-d H:i:s",time()),
  216. "day_num"=> 0,
  217. "week_num"=> "2353",
  218. "month_num"=> "6255",
  219. "rate"=> 0
  220. ],
  221. [
  222. "machine_day_num"=> "0",
  223. "machine_month_num"=> "14.02",
  224. "machine_week_num"=> "6.88",
  225. "break_day_num"=> "0",
  226. "break_month_num"=> "0",
  227. "break_week_num"=> "0",
  228. "start_time"=> date("Y-m-d H:i:s",time()),
  229. "day_num"=> "0",
  230. "week_num"=> "494",
  231. "month_num"=> "3058",
  232. "rate"=> "0"
  233. ],
  234. [
  235. "machine_day_num"=> "4903.77",
  236. "machine_month_num"=> "149.14",
  237. "machine_week_num"=> "56.72",
  238. "break_day_num"=> "0",
  239. "break_month_num"=> "0",
  240. "break_week_num"=> "0",
  241. "start_time"=> date("Y-m-d H:i:s",time()),
  242. "day_num"=> "626",
  243. "week_num"=> "4460",
  244. "month_num"=> "13034",
  245. "rate"=> "48"
  246. ]
  247. ];
  248. return $this->json_return(200,'',$arr);
  249. }
  250. //在制工单
  251. public function work_order(Request $request){
  252. date_default_timezone_set("PRC");
  253. // 获取当前时间戳
  254. $currentTimestamp = time();
  255. $timestamp = strtotime("-3 months", $currentTimestamp);
  256. $startOfDay = strtotime(date('Y-m-d 00:00:00', $timestamp));
  257. $endOfDay = strtotime(date('Y-m-d 23:59:59', $currentTimestamp));
  258. $result = DispatchSub::where('del_time',0)
  259. ->where('crt_time',">=", $startOfDay)
  260. ->where('crt_time',"<=", $endOfDay)
  261. ->whereColumn('dispatch_quantity','>','finished_num')
  262. ->select('dispatch_no as order_no','process_id','product_title','dispatch_quantity as product_num','finished_num as finish_num')
  263. ->get()->toArray();
  264. if(! empty($result)){
  265. $process_id = array_unique(array_column($result,'process_id'));
  266. $processMap = Process::whereIn('id',$process_id)
  267. ->pluck('title','id')
  268. ->toArray();
  269. foreach ($result as $key => $value){
  270. $result[$key]['procedure'] = $processMap[$value['process_id']] ?? '';
  271. }
  272. }
  273. return $this->json_return(200,'',$result);
  274. }
  275. //待加工
  276. public function nu_work_order(Request $request){
  277. date_default_timezone_set("PRC");
  278. $date = date('Ymd',time());
  279. //工序-----------------------------
  280. $model = new OrdersProductProcess(['channel' => $date]);//当前季度的数据
  281. $result = $model->where('del_time',0)
  282. ->where('status',0)
  283. ->select('production_no as order_no','product_title','process_id',DB::raw('count(id) as product_num'))
  284. ->groupBy('order_product_id')
  285. ->get()->toArray();
  286. if(! empty($result)){
  287. $process_id = array_unique(array_column($result,'process_id'));
  288. $processMap = Process::whereIn('id',$process_id)
  289. ->pluck('title','id')
  290. ->toArray();
  291. foreach ($result as $key => $value){
  292. $result[$key]['procedure'] = $processMap[$value['process_id']] ?? '';
  293. }
  294. }
  295. return $this->json_return(200,'',$result);
  296. }
  297. }