|
|
@@ -123,39 +123,42 @@ class ControlPanelController extends Controller
|
|
|
{
|
|
|
//转化为Carbon
|
|
|
$start = Carbon::parse(request("start"));
|
|
|
- $end = Carbon::parse(request("end"));
|
|
|
+ $end = Carbon::parse(request("end"));
|
|
|
|
|
|
//定义三个数组 空间换时间 避免结果集二次转换
|
|
|
$title = []; //标题
|
|
|
$data = []; //核心数据,二维数组
|
|
|
- foreach (CarbonPeriod::create($start, $end) as $date) {
|
|
|
+ foreach (CarbonPeriod::create($start,$end) as $date){
|
|
|
/** @var $date Carbon */
|
|
|
$str = $date->format("Y-m-d");
|
|
|
- $data[] = $this->getTargetData($str);
|
|
|
+ $data = $this->getTargetData($str);
|
|
|
$title[] = $str;
|
|
|
}
|
|
|
|
|
|
//大于31天转换为月份显示
|
|
|
- if ($end->diffInDays($start) > 31) {
|
|
|
+ if ($end->diffInDays($start) > 31){
|
|
|
$title = [];
|
|
|
$sign = []; //标记是否已被插入
|
|
|
$dataTemp = []; //临时存储
|
|
|
|
|
|
- foreach ($data as $datum) {
|
|
|
- $month = substr($datum["date"], 0, 7);
|
|
|
- if (!isset($sign[$month])) {
|
|
|
- $dataTemp[] = ["date" => $month, "total" => $datum["total"], "count" => $datum["count"], "value" => $datum["value"]];
|
|
|
+ foreach ($data as $datum){
|
|
|
+ $month = substr($datum["date"],0,7);
|
|
|
+ if (!isset($sign[$month])){
|
|
|
+ $dataTemp[] = ["date"=>$month,"total"=>$datum["total"],"count"=>$datum["count"],"value"=>$datum["value"]];
|
|
|
$title[] = $month;
|
|
|
- $sign[$month] = count($dataTemp) - 1;
|
|
|
- } else {
|
|
|
+ $sign[$month] = count($dataTemp)-1;
|
|
|
+ }else{
|
|
|
$dataTemp[$sign[$month]]["total"] += $datum["total"];
|
|
|
$dataTemp[$sign[$month]]["count"] += $datum["count"];
|
|
|
- $dataTemp[$sign[$month]]["value"] = (string)($dataTemp[$sign[$month]]["total"] ? intval(($dataTemp[$sign[$month]]["count"] / $dataTemp[$sign[$month]]["total"]) * 100) : 0);
|
|
|
+ $dataTemp[$sign[$month]]["value"] = (string)($dataTemp[$sign[$month]]["total"] ? intval(($dataTemp[$sign[$month]]["count"]/$dataTemp[$sign[$month]]["total"])*100) : 0);
|
|
|
}
|
|
|
}
|
|
|
$data = $dataTemp;
|
|
|
}
|
|
|
- $this->success(["title" => $title, "data" => $data]);
|
|
|
+
|
|
|
+ array_unshift($title, 'product');
|
|
|
+ array_unshift($data, $title);
|
|
|
+ $this->success(["title"=>date("Y-m-d",strtotime($start)),"data"=>$data]);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -208,22 +211,35 @@ class ControlPanelController extends Controller
|
|
|
*/
|
|
|
private function getTargetData(string $date)
|
|
|
{
|
|
|
- if ($date == date("Y-m-d")) {
|
|
|
+ $res = [];
|
|
|
+ if ($date == date("Y-m-d",1622908800)){
|
|
|
$sql = <<<sql
|
|
|
-SELECT DATE_FORMAT(order_packages.created_at,'%Y-%m-%d') date,
|
|
|
+SELECT DATE_FORMAT(order_packages.created_at,'%Y-%m-%d') date,IFNULL(mm.name,'未知') name ,
|
|
|
SUM(CASE WHEN order_packages.weighed_at IS NOT NULL THEN 1 ELSE 0 END) AS count,
|
|
|
-COUNT(1) total FROM order_packages LEFT JOIN orders ON order_packages.order_id=orders.id WHERE orders.wms_status != '订单取消'
|
|
|
-AND order_packages.created_at >= '{$date} 00:00:00' GROUP BY date
|
|
|
+COUNT(1) total FROM order_packages LEFT JOIN orders ON order_packages.order_id=orders.id
|
|
|
+LEFT JOIN measuring_machines AS mm ON mm.id = order_packages.measuring_machine_id
|
|
|
+WHERE orders.wms_status != '订单取消'
|
|
|
+AND order_packages.created_at like '{$date}%' GROUP BY date,order_packages.measuring_machine_id
|
|
|
sql;
|
|
|
-
|
|
|
- $pack = DB::selectOne(DB::raw($sql));
|
|
|
- if (!$pack) return ["date" => $date, "total" => 0, "count" => 0, "value" => 0];
|
|
|
- return ["date" => $pack->date, "total" => $pack->total, "count" => $pack->count, "value" => (string)($pack->total ? intval(($pack->count / $pack->total) * 100) : 0)];
|
|
|
+ //todo 新写
|
|
|
+ $info = DB::select(DB::raw($sql));
|
|
|
+ if (!$info) return $res;
|
|
|
+ $no_weight = isset($info[0]->name) && $info[0]->name == '未知' ? $info[0]->total - $info[0]->count : 0;
|
|
|
+ foreach ($info as $v){
|
|
|
+ $res[] = [$v->name,$v->count];
|
|
|
+ }
|
|
|
+ array_push($res, ['未称重',$no_weight]);
|
|
|
+ }else{
|
|
|
+ $info = app(CacheService::class)->getOrExecute("weight.".$date,function ()use($date){
|
|
|
+ return OrderPackageCountingRecord::query()->where("targeted_at",$date)->get()->toArray();
|
|
|
+ },config("cache.expirations.forever"));
|
|
|
+ if (array_key_exists('date',$info)) return $res;
|
|
|
+ $no_weight = isset($info[0]->name) && $info[0]->name == '未知' ? $info[0]->total - $info[0]->count : 0;
|
|
|
+ foreach ($info as $v){
|
|
|
+ $res[] = [$v->name,$v->count];
|
|
|
+ }
|
|
|
+ array_push($res, ['未称重',$no_weight]);
|
|
|
}
|
|
|
- return app(CacheService::class)->getOrExecute("weight." . $date, function () use ($date) {
|
|
|
- $count = OrderPackageCountingRecord::query()->where("targeted_at", $date)->first();
|
|
|
- if (!$count) return ["date" => $date, "total" => 0, "count" => 0, "value" => 0];
|
|
|
- return ["date" => $count->targeted_at, "total" => $count->total_count, "count" => $count->un_weigh_count, "value" => (string)($count->total_count ? intval(($count->un_weigh_count / $count->total_count) * 100) : 0)];
|
|
|
- }, config("cache.expirations.forever"));
|
|
|
+ return $res;
|
|
|
}
|
|
|
}
|