|
|
@@ -7,6 +7,7 @@ use App\Filters\OrderPackageReceivedSyncRecordFilters;
|
|
|
use App\OrderPackageCountingRecord;
|
|
|
use App\OrderPackageReceivedSyncRecord;
|
|
|
use App\Owner;
|
|
|
+use App\MeasuringMachine;
|
|
|
use App\Services\CacheService;
|
|
|
use App\Services\CheckActiveMenuService;
|
|
|
use App\Services\LaborReportsCountingRecordService;
|
|
|
@@ -124,41 +125,49 @@ class ControlPanelController extends Controller
|
|
|
//转化为Carbon
|
|
|
$start = Carbon::parse(request("start"));
|
|
|
$end = Carbon::parse(request("end"));
|
|
|
+ $owner = request("owner_ids");
|
|
|
|
|
|
//定义三个数组 空间换时间 避免结果集二次转换
|
|
|
$title = []; //标题
|
|
|
$data = []; //核心数据,二维数组
|
|
|
- foreach (CarbonPeriod::create($start,$end) as $date){
|
|
|
- /** @var $date Carbon */
|
|
|
- $str = $date->format("Y-m-d");
|
|
|
- $data = $this->getTargetData($str);
|
|
|
- $title[] = $str;
|
|
|
- }
|
|
|
-
|
|
|
//大于31天转换为月份显示
|
|
|
if ($end->diffInDays($start) > 31){
|
|
|
+ $time1 = strtotime($start);
|
|
|
+ $time2 = strtotime($end);
|
|
|
$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"]];
|
|
|
- $title[] = $month;
|
|
|
- $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);
|
|
|
- }
|
|
|
+ do{
|
|
|
+ $str = date('Y-m',$time1); // 取得递增月;
|
|
|
+ $data[] = $this->getTargetData($str, $owner);
|
|
|
+ $title[] = $str;
|
|
|
+ }while( ($time1 = strtotime('+1 month', $time1)) <= $time2);
|
|
|
+ $start = $title[0];
|
|
|
+ }else{
|
|
|
+ foreach (CarbonPeriod::create($start,$end) as $date){
|
|
|
+ /** @var $date Carbon */
|
|
|
+ $str = $date->format("Y-m-d");
|
|
|
+ $data[] = $this->getTargetData($str, $owner);
|
|
|
+ $title[] = $str;
|
|
|
}
|
|
|
- $data = $dataTemp;
|
|
|
+ $start = date('Y-m-d', strtotime($start));
|
|
|
}
|
|
|
|
|
|
+ $machines = MeasuringMachine::query()->select('id')->get()->toArray();
|
|
|
+ array_unshift($machines, ['id' => 0]);
|
|
|
+ array_unshift($machines, ['id' => '未称重']);
|
|
|
+
|
|
|
+ //data数据处理
|
|
|
+ $real_data = [];
|
|
|
+ foreach ($machines as $v){
|
|
|
+ $temp = [$v['id'] === 0 ? 'ID_未知' : 'ID_'.$v['id']];
|
|
|
+ foreach ($data as $val){
|
|
|
+ array_push($temp, array_column($val, $v['id'])? array_sum( array_column($val, $v['id'])) : 0);
|
|
|
+ }
|
|
|
+ array_push($real_data,$temp);
|
|
|
+ }
|
|
|
array_unshift($title, 'product');
|
|
|
- array_unshift($data, $title);
|
|
|
- $this->success(["title"=>date("Y-m-d",strtotime($start)),"data"=>$data]);
|
|
|
+ array_unshift($real_data, $title);
|
|
|
+
|
|
|
+ $this->success(["title"=> $start,"data"=>$real_data]);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -209,36 +218,45 @@ class ControlPanelController extends Controller
|
|
|
* @param string $date
|
|
|
* @return array|null
|
|
|
*/
|
|
|
- private function getTargetData(string $date)
|
|
|
+ private function getTargetData(string $date, array $owner = [])
|
|
|
{
|
|
|
- $res = [];
|
|
|
+ $res = [];$where='';$no_weight = 0;
|
|
|
+ if ($owner) $where = " and order_packages.owner_id in (".implode(',',$owner).")";
|
|
|
if ($date == date("Y-m-d")){
|
|
|
$sql = <<<sql
|
|
|
-SELECT DATE_FORMAT(order_packages.created_at,'%Y-%m-%d') date,IFNULL(mm.name,'未知') name ,
|
|
|
+SELECT DATE_FORMAT(order_packages.created_at,'%Y-%m-%d') date,IFNULL(order_packages.measuring_machine_id, 0) measuring_machine_id,
|
|
|
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
|
|
|
-LEFT JOIN measuring_machines AS mm ON mm.id = order_packages.measuring_machine_id
|
|
|
-WHERE orders.wms_status != '订单取消'
|
|
|
+WHERE orders.wms_status != '订单取消' {$where}
|
|
|
AND order_packages.created_at like '{$date}%' GROUP BY date,order_packages.measuring_machine_id
|
|
|
sql;
|
|
|
//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;
|
|
|
+ if (empty($info)) return $res;
|
|
|
foreach ($info as $v){
|
|
|
- $res[] = [$v->name,$v->count];
|
|
|
+ $res[] = [$v->measuring_machine_id,(int)$v->count];
|
|
|
+ $no_weight += (int)($v->total_count - $v->un_weigh_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();
|
|
|
+ $info = app(CacheService::class)->getOrExecute("weight.".$date.($owner?implode(',',$owner):''),function ()use($date,$owner){
|
|
|
+ return OrderPackageCountingRecord::query()
|
|
|
+ ->where(function ($query)use($date, $owner){
|
|
|
+ if($owner)return $query->whereIn('owner_id',$owner);
|
|
|
+ if ( strlen($date) > 8 ) {
|
|
|
+ return $query->where('targeted_at',$date);
|
|
|
+ }else{
|
|
|
+ return $query->where('targeted_at', 'like',$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;
|
|
|
+ if (empty($info)) return $res;
|
|
|
foreach ($info as $v){
|
|
|
- $res[] = [$v->name,$v->count];
|
|
|
+ $res[] = [$v['measuring_machine_id']=>(int)$v['un_weigh_count']];
|
|
|
+ $no_weight += (int)($v['total_count'] - $v['un_weigh_count']);
|
|
|
}
|
|
|
- array_push($res, ['未称重',$no_weight]);
|
|
|
+ array_push($res, ['未称重'=>$no_weight]);
|
|
|
}
|
|
|
return $res;
|
|
|
}
|