Stats.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\report\controller;
  4. use app\model\AccountItem;use app\report\model\ConsultBids;use app\report\model\ConsultInfo;use app\report\model\ConsultOrder;
  5. use app\report\model\OrderOut;use app\report\model\OrderOutChild;use app\report\model\Purchease;
  6. use app\report\model\PurcheaseOrder;
  7. use app\report\model\Sale;
  8. use think\db\Query;use think\Request;
  9. use think\App;
  10. class Stats extends Base
  11. {
  12. private $saleDerpart=[52=>'客服部@百辰荣达',53=>'项目部@普润心堂',56=>'网络部@泓源广诚',57=>'平台部@万宇恒通',59=>'财务部@万宇恒通']; // 客服部@百辰荣达,
  13. //项目部@普润心堂,网络部@泓源广诚,平台部@万宇恒通,财务部@万宇恒通
  14. private $cgdDerpart=[58=>"万宇供应链资源部"];//万宇供应链资源部
  15. public function __construct(App $app) {parent::__construct($app);}
  16. //咨询单
  17. public function zxorder()
  18. {
  19. $param =$this->request->param(["start"=>date("Y-m-01 00:00:00"),"end"=>date("Y-m-t 23:59:59")]);
  20. $time = [$param["start"],$param['end']];
  21. $zxModel =new ConsultOrder();
  22. $temp=[];
  23. foreach ($this->saleDerpart as $departid=>$depart){
  24. $uid =$this->GetDepartId($departid);
  25. $temp[$departid]["name"] =$depart;
  26. $temp[$departid]["num"] =$zxModel->alias("a")->leftJoin("consult_info b","wsm_consult_order.zxNo=b.zxNo")
  27. ->whereBetween('b.addtime',$time)
  28. ->whereIn('createrid',$uid)
  29. ->where(["a.is_del"=>0,"b.is_del"=>0])
  30. ->count();
  31. }
  32. $this->success("获取成功",$temp);
  33. }
  34. /**
  35. * 销售单.
  36. *
  37. * @return \think\Response
  38. */
  39. public function saleOrder()
  40. {
  41. $param =$this->request->param(['start'=>date('Y-m-01 00:00:00'),'end'=>date('Y-m-t 23:59:59')]);
  42. $time = [$param['start'],$param['end']];
  43. $Model =new Sale();
  44. $temp=[];
  45. foreach ($this->saleDerpart as $departid=>$depart){
  46. $uid =$this->GetDepartId($departid);
  47. $temp[$departid]['name'] =$depart;
  48. $temp[$departid]['result'] =$Model->group("order_type")
  49. ->whereBetween('addtime',$time)
  50. ->whereIn('apply_id',$uid)
  51. ->where(['is_del'=>0])
  52. ->column("count(1) num,order_type","order_type");
  53. }
  54. $this->success('获取成功',$temp);
  55. }
  56. /**
  57. * 报备单
  58. *
  59. * @param \think\Request $request
  60. * @return \think\Response
  61. */
  62. public function bkOrder()
  63. {
  64. $param =$this->request->param(['start'=>date('Y-m-01 00:00:00'),'end'=>date('Y-m-t 23:59:59')]);
  65. $time = [$param['start'],$param['end']];
  66. $Model =new Purchease();
  67. $temp=[];
  68. foreach ($this->saleDerpart as $departid=>$depart){
  69. $uid =$this->GetDepartId($departid);
  70. $temp[$departid]['name'] =$depart;
  71. $temp[$departid]['num'] =$Model
  72. ->whereBetween('addtime',$time)
  73. ->whereIn('apply_id',$uid)
  74. ->where(['is_del'=>0,"status"=>[1,2]])
  75. ->count();
  76. }
  77. $this->success('获取成功',$temp);
  78. }
  79. /**
  80. * 采购部门采购情况
  81. */
  82. public function cgdOrder()
  83. {
  84. $param =$this->request->param(['start'=>date('Y-m-01 00:00:00'),'end'=>date('Y-m-t 23:59:59')]);
  85. $time = [$param['start'],$param['end']];
  86. $Model =new PurcheaseOrder();
  87. $temp=[];
  88. foreach ($this->cgdDerpart as $departid=>$depart){
  89. $uid =$this->GetDepartId($departid);
  90. $temp[$departid]['name'] =$depart;
  91. $data =$Model->alias("a")->leftJoin("order_num b","a.cgdNo=b.cgdNo")
  92. ->leftJoin("sale c","c.orderCode=b.orderCode and c.is_del=0")
  93. ->leftJoin("platform d","d.id=c.platform_id and d.is_del=0")
  94. ->field("a.cgder,a.cgder_id,a.order_type,d.use_type,count(1) num")
  95. ->group("a.cgder,a.cgder_id,order_type,use_type")
  96. ->whereBetween('a.addtime',$time)
  97. ->whereIn('a.cgder_id',$uid)
  98. ->where('a.is_del',0)
  99. ->select();
  100. $result=[];
  101. foreach ($data as $key=>$val){
  102. if(!isset($result[$val['cgder_id']])){
  103. $result[$val['cgder_id']]= [ 'cgder'=>$val['cgder'],
  104. 'total_cgd' => 0,//订单总量
  105. 'tag_1' => 0,//库存品
  106. 'tag_2' => 0,//非库存品
  107. 'tag_zx' => 0,//咨询采反总数
  108. 'tag_c' => 0,//to C
  109. 'tag_b' => 0,//to B
  110. ];
  111. }
  112. switch ($val['order_type']) {
  113. case 1:
  114. //库存品
  115. if ($val['order_source'] == 0) {
  116. $result[$val['cgder_id']]['tag_1']+=$val['num'];
  117. }
  118. break;
  119. case 2:
  120. //非库存品
  121. $result[$val['cgder_id']]['tag_2']+=$val['num'];
  122. break;
  123. case 3:
  124. //咨询采反
  125. $result[$val['cgder_id']]['tag_zx']+=$val['num'];
  126. break;
  127. }
  128. switch ($val['use_type']) {
  129. case 1:
  130. //to B
  131. $result[$val['cgder_id']]['tag_b']+=$val['num'];
  132. break;
  133. case 2:
  134. //to C
  135. $result[$val['cgder_id']]['tag_c']+=$val['num'];
  136. break;
  137. }
  138. }
  139. $temp[$departid]['result'] =$result;
  140. }
  141. $this->success('获取成功',$temp);
  142. }
  143. /**
  144. * 显示编辑资源表单页.
  145. *
  146. * @param int $id
  147. * @return \think\Response
  148. */
  149. public function bidsOrder()
  150. {
  151. $param =$this->request->param(['start'=>date('Y-m-01 00:00:00'),'end'=>date('Y-m-t 23:59:59')]);
  152. $time = [$param['start'],$param['end']];
  153. $model = new ConsultBids();
  154. $temp=[];
  155. foreach ($this->cgdDerpart as $departid=>$depart){
  156. $uid =$this->GetDepartId($departid);
  157. $temp[$departid]['name'] =$depart;
  158. $list = $model->whereBetween("addtime",$time)->whereIn("createrid",$uid)->where('is_del',0)->group("createrid,creater")->field
  159. ("creater,createrid,count(1) num")->select();
  160. $temp[$departid]['result'] =$list;
  161. }
  162. $this->success('获取成功',$temp);
  163. }
  164. /**
  165. * 咨询单空返数据
  166. *
  167. * @param \think\Request $request
  168. * @param int $id
  169. * @return \think\Response
  170. */
  171. public function bidsFail()
  172. {$param =$this->request->param(['start'=>date('Y-m-01 00:00:00'),'end'=>date('Y-m-t 23:59:59')]);
  173. $time = [$param['start'],$param['end']];
  174. $model = new ConsultOrder();
  175. $temp=[];
  176. $uid = (new AccountItem())->GetUidByDepartId(array_keys($this->saleDerpart));
  177. $list = $model->alias('a')
  178. ->leftJoin('consult_info b','wsm_consult_order.zxNo=b.zxNo')
  179. ->whereBetween('a.addtime',$time)
  180. ->whereIn('createrid',$uid)
  181. ->where(['a.is_del'=>0,'b.is_del'=>0])
  182. ->where('b.status','<>',5)
  183. ->group('b.status')
  184. ->column('b.status,count(1) num','b.status');
  185. $temp['result'] =$list;
  186. $this->success('获取成功',$temp);
  187. }
  188. /**
  189. * 发货工单
  190. */
  191. public function outChildOrder()
  192. {
  193. $param =$this->request->param(['start'=>date('Y-m-01 00:00:00'),'end'=>date('Y-m-t 23:59:59')]);
  194. $time = [$param['start'],$param['end']];
  195. $model = new OrderOutChild();
  196. foreach ($this->saleDerpart as $departid=>$sale){
  197. $uid = $this->GetDepartId($departid);
  198. $temp[$departid]['name'] =$sale;
  199. $build= $model->alias('a')->LeftJoin('warehouse_info b','a.wsm_code=b.wsm_code')
  200. ->whereBetween('a.addtime',$time)
  201. ->whereIn('a.apply_id',$uid)
  202. ->where('a.is_del',0)
  203. ->field('a.id,ifnull(b.contactor,"0") contactor,ifnull(b.contactor_name,"") as contactor_name ,a.addtime,DATEDIFF(ifnull( a.sendtime, NOW()), a.addtime ) as expire,"" stage')
  204. ->withAttr('stage',function ($v,$row){
  205. if($row['expire']==0) return 1;
  206. elseif($row['expire']<2) return 2;
  207. elseif($row['expire']< 7) return 3;
  208. elseif($row['expire']< 14) return 4;
  209. elseif($row['expire']< 30) return 5;
  210. else return 6;
  211. })->select();
  212. $tlist=[];
  213. foreach ($build as $item){
  214. if(!isset($tlist[$item['contactor']])){
  215. $tlist[$item['contactor']]=[$item['contactor_name'],0,0,0,0,0,0];
  216. }
  217. $tlist[$item['contactor']][$item['stage']]+=1;
  218. }
  219. $temp[$departid]['result'] =$tlist?:[];
  220. }
  221. $this->success('获取成功',$temp);
  222. }
  223. /** 发货单数据统计
  224. * @throws \think\db\exception\DataNotFoundException
  225. * @throws \think\db\exception\DbException
  226. * @throws \think\db\exception\ModelNotFoundException
  227. */
  228. public function outOrder()
  229. {
  230. $param =$this->request->param(['start'=>date('Y-m-01 00:00:00'),'end'=>date('Y-m-t 23:59:59')]);
  231. $time = [$param['start'],$param['end']];
  232. $model = new OrderOut();
  233. foreach ($this->saleDerpart as $departid=>$sale){
  234. $uid = $this->GetDepartId($departid);
  235. $temp[$departid]['name'] =$sale;
  236. $build= $model->alias('a')->LeftJoin('warehouse_info b','a.wsm_code=b.wsm_code')
  237. ->whereBetween('a.addtime',$time)
  238. ->whereIn('a.apply_id',$uid)
  239. ->where('a.is_del',0)
  240. ->field('a.id,ifnull(b.contactor,"0") contactor,ifnull(b.contactor_name,"") as contactor_name ,a.addtime,DATEDIFF(ifnull( a.sendtime, NOW()), a.addtime ) as expire,"" stage')
  241. ->withAttr('stage',function ($v,$row){
  242. if($row['expire']==0) return 1;
  243. elseif($row['expire']<2) return 2;
  244. elseif($row['expire']< 7) return 3;
  245. elseif($row['expire']< 14) return 4;
  246. elseif($row['expire']< 30) return 5;
  247. else return 6;
  248. })->select();
  249. $tlist=[];
  250. foreach ($build as $item){
  251. if(!isset($tlist[$item['contactor']])){
  252. $tlist[$item['contactor']]=[$item['contactor_name'],0,0,0,0,0,0];
  253. }
  254. $tlist[$item['contactor']][$item["stage"]]+=1;
  255. }
  256. $temp[$departid]['result'] =$tlist;
  257. }
  258. $this->success('获取成功',$temp);
  259. }
  260. //未发货数据
  261. public function wsendOrder(){
  262. $temp=[];
  263. $model =new Sale();
  264. $userArr=[];
  265. foreach ($this->saleDerpart as $departid=>$depart){
  266. $uid = $this->GetDepartId($departid);
  267. $userArr=array_merge($userArr,$uid);
  268. $temp[$departid]["name"] = $depart;
  269. $start = 1;
  270. $end = date("m");
  271. while ($start<=$end){
  272. $list = $model->whereIn('status',[0,1])
  273. ->whereIn("send_status",[1,2])
  274. ->whereIn('apply_id',$uid)
  275. ->whereMonth('addtime',date('Y').'-'.$start)
  276. ->group('send_status')->column('sum(wsend_num) num','send_status');
  277. $temp[$departid]['result'][$start]=$list;
  278. $start++;
  279. }
  280. }
  281. $noArr=[];
  282. $noArr['name'] = "无地址订单";
  283. $start = 1;
  284. $end = date('m');
  285. while ($start<=$end){
  286. // $month = $start;
  287. $list = $model->whereIn('status',[0,1])
  288. ->whereIn('send_status',[1,2])
  289. ->whereIn('apply_id',$userArr)
  290. ->whereMonth('addtime',date('Y').'-'.$start)
  291. ->field("sale_price,orderCode")
  292. ->append(["no_addr_num"=>function(Query $query,$data){
  293. $query->name('order_addr')->where(['orderCode'=>$data['orderCode'],'is_del'=>0])->sum('receipt_quantity');
  294. }])
  295. ->find();
  296. $noArr['result'][$start]['total_price']=bcmul($list['sale_price'],$list['no_addr_num'].'',2);
  297. $start++;
  298. }
  299. $this->success('获取成功',["result"=>$temp,"noAddr"=>$noArr]);
  300. }
  301. }