Statistics.php 93 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: my
  5. * Date: 2021/4/12
  6. * Time: 16:04
  7. */
  8. namespace app\admin\controller;
  9. use app\common\util\ExcelUtil;
  10. use think\App;
  11. use think\Db;
  12. class Statistics extends Auth{
  13. public function __construct(App $app) {
  14. parent::__construct($app);
  15. }
  16. /**
  17. * 订单统计
  18. *
  19. * @author wst
  20. * @date 2021/4/12 16:05
  21. */
  22. public function OrderTotal(){
  23. $data = (new Wyorders())->OrderTotal(cur_org_id());
  24. $this->assign('data',$data);
  25. $this->assign('meta_title','订单统计');
  26. return $this->fetch();
  27. }
  28. /**
  29. * 完成工时统计
  30. *
  31. * @author wst
  32. * @date 2021/4/12 16:05
  33. */
  34. public function duration(){
  35. $month = request()->get('month')?request()->get('month'):date('Y-m');
  36. $data = (new \app\model\Todo())->duration(cur_org_id(),$month);
  37. $this->assign('data',$data);
  38. $this->assign('month',$month);
  39. $this->assign('meta_title','完成工时统计');
  40. return $this->fetch();
  41. }
  42. /**
  43. * 巡更工作量统计
  44. *
  45. * @author wst
  46. * @date 2021/4/12 18:13
  47. */
  48. public function PatrolWork(){
  49. $data = (new \app\model\PatrolAddr())->PatrolWork(cur_org_id(),1);
  50. $this->assign('data',$data);
  51. $this->assign('meta_title','巡检巡查工作量统计');
  52. return $this->fetch();
  53. }
  54. /**
  55. * 设备台账工作量统计
  56. *
  57. * @author wst
  58. * @date 2021/4/12 18:13
  59. */
  60. public function DeviceWork(){
  61. $data = (new \app\common\model\Device())->DeviceWork(cur_org_id());
  62. $this->assign('data',$data);
  63. $this->assign('meta_title','设备维保工作量统计');
  64. return $this->fetch();
  65. }
  66. /**
  67. * 日常工作工作量统计
  68. *
  69. * @author wst
  70. * @date 2021/4/12 18:13
  71. */
  72. public function DailyWork(){
  73. $data = (new \app\common\model\Daily())->DailyWork(cur_org_id());
  74. $this->assign('data',$data);
  75. $this->assign('meta_title','日常工作量统计');
  76. return $this->fetch();
  77. }
  78. /**
  79. * 巡更人员工作量统计
  80. *
  81. * @author wst
  82. * @date 2021/4/12 18:13
  83. */
  84. public function WorkerPatrol(){
  85. $search['start'] = request()->get('start');
  86. $search['end'] = request()->get('end');
  87. if(empty($search['start'])){ // 未传时间默认近7天的
  88. $search['start'] = date('Y-m-d',time()-(6*24*60*60));
  89. $search['end'] = date('Y-m-d');
  90. }
  91. $data = (new \app\model\PatrolTask())->WorkerPatrol(cur_org_id(),$search,1);
  92. $this->assign('data',$data);
  93. $this->assign('month',$search);
  94. $this->assign('meta_title','巡检巡查人员工作量统计');
  95. return $this->fetch();
  96. }
  97. //预约统计
  98. public function ServiceCount(){
  99. $type=input('type');
  100. $start=input('start');
  101. $end=input('end');
  102. if($type == 1){
  103. $meta_title = '餐饮预约统计';
  104. }elseif ($type == 2){
  105. $meta_title = '美发预约统计';
  106. }elseif ($type == 3){
  107. $meta_title = '洗衣预约统计';
  108. }elseif ($type == 4){
  109. $meta_title = '医疗预约统计';
  110. }elseif ($type == 5){
  111. $meta_title = '活动室预约统计';
  112. }
  113. //获取服务id
  114. $serviceId = Db::name('service')->where('org_id',$this->org_id)->where('type',$type)->value('id');
  115. if(!$serviceId){
  116. $data = [];
  117. $this->assign('data',$data);
  118. }
  119. if(!$start && !$end){
  120. $end = date('Y-m-d H:i:s');
  121. $start = date('Y-m-d H:i:s',strtotime("$start -1 month"));
  122. }
  123. if($start >= $end){
  124. $this->error('开始时间不能大于结束时间');
  125. }
  126. if($type == 1 || $type == 2){
  127. $map[] = ['service_id','=',$serviceId];
  128. $cateList = Db::name('service_cate')->where($map)->order('id asc')->select()->toArray();
  129. $map[] = ['del','=',0];
  130. $itemList = Db::name('service_item')->where($map)->order('id asc')->select()->toArray();
  131. $this->assign('itemList',$itemList);
  132. $this->assign('cateList',$cateList);
  133. if($start && $end){
  134. $where[] = ['sb.create_time','>=',$start];
  135. $where[] = ['sb.create_time','<=',$end];
  136. }
  137. $where[] = ['sb.service_id','=',$serviceId];
  138. $where[] = ['sb.org_id','=',$this->org_id];
  139. $data = [];
  140. foreach ($itemList as $k=>$v){
  141. $data[$k]['title']= $v['title'];
  142. foreach ($cateList as $kk=>$vv){
  143. $bookList = Db::name('service_book')
  144. ->alias('sb')
  145. ->field('sb.*')
  146. ->join('service_book_cate sbc','sbc.service_book_id=sb.id')
  147. ->where('sb.service_item_id',$v['id'])
  148. ->where('sbc.service_cate_id',$vv['id'])
  149. ->where($where)
  150. ->select()
  151. ->toArray();
  152. $total = 0;
  153. foreach ($bookList as $kay=>$val){
  154. $total +=$val['nums'];
  155. }
  156. $data[$k]['list'][$kk] = $total;
  157. }
  158. }
  159. $count = [];
  160. foreach ($cateList as $k=>$v){
  161. $bookList = Db::name('service_book')
  162. ->alias('sb')
  163. ->field('sb.*')
  164. ->join('service_book_cate sbc','sbc.service_book_id=sb.id')
  165. ->where('sbc.service_cate_id',$v['id'])
  166. ->where($where)
  167. ->select()
  168. ->toArray();
  169. $countNum = 0;
  170. foreach ($bookList as $kk=>$vv){
  171. $countNum +=$vv['nums'];
  172. }
  173. $count[$k]['count'] = $countNum;
  174. }
  175. $this->assign('count',$count);
  176. }
  177. if($type == 3){
  178. $where[] = ['service_id','=',$serviceId];
  179. $where[] = ['org_id','=',$this->org_id];
  180. if($start && $end){
  181. $where[] = ['create_time','>=',$start];
  182. $where[] = ['create_time','<=',$end];
  183. }
  184. $data = [];
  185. $bookList = Db::name('service_book')->where($where)->select()->toArray();
  186. $total = 0;
  187. foreach ($bookList as $k=>$v){
  188. $total +=$v['nums'];
  189. }
  190. $data['k'] = 1;
  191. $data['count'] = $total;
  192. }
  193. if($type == 4 || $type == 5){
  194. $map[] = ['service_id','=',$serviceId];
  195. $map[] = ['del','=',0];
  196. $itemList = Db::name('service_item')->where($map)->order('id asc')->select()->toArray();
  197. $this->assign('itemList',$itemList);
  198. $where[] = ['create_time','>=',$start];
  199. $where[] = ['create_time','<=',$end];
  200. $where[] = ['service_id','=',$serviceId];
  201. $where[] = ['org_id','=',$this->org_id];
  202. $data = [];
  203. foreach ($itemList as $k=>$v){
  204. $data[$k]['id']= $v['id'];
  205. $data[$k]['title']= $v['title'];
  206. $bookList = Db::name('service_book')
  207. ->where('service_item_id',$v['id'])
  208. ->where($where)
  209. ->select()
  210. ->toArray();
  211. $total = 0;
  212. foreach ($bookList as $kay=>$val){
  213. $total +=$val['nums'];
  214. }
  215. $data[$k]['count'] = $total;
  216. }
  217. $countNum = 0;
  218. foreach ($data as $kay =>$val){
  219. $countNum += $val['count'];
  220. }
  221. $this->assign('countNum',$countNum);
  222. }
  223. $this->assign('start',$start);
  224. $this->assign('end',$end);
  225. $this->assign('data',$data);
  226. $this->assign('type',$type);
  227. $this->assign('meta_title',$meta_title);
  228. return $this->fetch();
  229. }
  230. public function serviceCountDetails(){
  231. $month = input('month');
  232. $itemId = input('itemId',0);
  233. $serviceId = input('serviceId',0);
  234. if(!$month && !$itemId){
  235. $this->error('参数错误');
  236. }
  237. $startMonth = $month.'-1 00:00:00';
  238. $endMonth = $month.'-31 23:59:59';
  239. $sWeek = date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600));
  240. $eWeek = date('Y-m-d', (time() + (7 - (date('w') == 0 ? 7 : date('w'))) * 24 * 3600));
  241. $startWeek = $sWeek.' 00:00:00';
  242. $endWeek = $eWeek.' 23:59:59';
  243. $day = date('Y-m-d');
  244. $startDay= $day.' 00:00:00';
  245. $endDay= $day.' 23:59:59';
  246. $cateList = Db::name('service_cate')->where('service_id',$serviceId)->where('enable',1)->select()->toArray();
  247. foreach ($cateList as $k=>$v){
  248. $bookCate = Db::name('service_book_cate')
  249. ->where('service_book_cate_id',$v['id'])
  250. ->select()
  251. ->toArray();
  252. $ids = [];
  253. foreach ($bookCate as $kay=>$val){
  254. $ids[] = $val['service_book_id'];
  255. }
  256. $newIds = array_unique($ids);
  257. $bookList = Db::name('service_book')
  258. ->whereIn('id',$newIds)
  259. ->where('service_item_id',$itemId)
  260. ->where('service_id',$serviceId)
  261. ->where('org_id',$this->org_id)
  262. ->whereTime('create_time', 'between', [$startMonth, $endMonth])
  263. ->select()->toArray();
  264. $nums = 0;
  265. foreach ($bookList as $kk=>$vv){
  266. $nums +=$vv['nums'];
  267. }
  268. $bookList1 = Db::name('service_book')
  269. ->whereIn('id',$newIds)
  270. ->where('service_item_id',$itemId)
  271. ->where('service_id',$serviceId)
  272. ->where('org_id',$this->org_id)
  273. ->whereTime('create_time', 'between', [$startWeek, $endWeek])
  274. ->select()->toArray();
  275. $nums1 = 0;
  276. foreach ($bookList1 as $kk=>$vv){
  277. $nums1 +=$vv['nums'];
  278. }
  279. $bookList2 = Db::name('service_book')
  280. ->whereIn('id',$newIds)
  281. ->where('service_item_id',$itemId)
  282. ->where('service_id',$serviceId)
  283. ->where('org_id',$this->org_id)
  284. ->whereTime('create_time', 'between', [$startDay, $endDay])
  285. ->select()->toArray();
  286. $nums2 = 0;
  287. foreach ($bookList2 as $kk=>$vv){
  288. $nums2 +=$vv['nums'];
  289. }
  290. $cateList[$k]['count'] = $nums;
  291. $cateList[$k]['week'] = $nums1;
  292. $cateList[$k]['day'] = $nums2;
  293. }
  294. $this->assign('meta_title','餐厅统计');
  295. $this->assign('data',$cateList);
  296. return $this->fetch();
  297. }
  298. public function userWork()
  299. {
  300. if(request()->isAjax()){
  301. //分页参数
  302. $length = input('rows',10,'intval'); //每页条数
  303. $page = input('page',1,'intval'); //第几页
  304. $start = ($page - 1) * $length; //分页开始位置
  305. //排序
  306. $sortRow = input('sidx','id','trim'); //排序列
  307. $sort = input('sord','desc','trim'); //排序方式
  308. $order = $sortRow.' '.$sort;
  309. $title = input('title','','trim');
  310. if($title){
  311. $map[] = ['u.nickname','like','%'.$title.'%'];
  312. }
  313. $map= empty($map) ? true: $map;
  314. $ret = Db::name('user')
  315. ->alias('u')
  316. ->field('u.id,u.nickname')
  317. ->join('user_org uo', 'uo.user_id=u.id')
  318. ->where('uo.org_id', $this->org_id)
  319. ->where('u.enable', 1)
  320. ->where('u.del', 0)
  321. ->where($map)
  322. ->limit($start,$length)
  323. ->order($order)
  324. ->select()
  325. ->toArray();
  326. foreach ($ret as $k => $v) {
  327. //获取本月开始时间结束时间
  328. $smonth = date('Y-m') . '-1 00:00:00';
  329. $emonth = date('Y-m') . '-31 23:59:59';
  330. $where[] = ['update_time','>=',$smonth];
  331. $where[] = ['update_time','<=',$emonth];
  332. $userWork = Db::name('user_work')
  333. ->where('user_id', $v['id'])
  334. ->where($where)
  335. ->whereNotNull('start_time')
  336. ->whereNotNull('end_time')
  337. ->select()
  338. ->toArray();
  339. $num = 0;
  340. foreach ($userWork as $kk => $vv) {
  341. $stime = strtotime($vv['start_time']);
  342. $etime = strtotime($vv['end_time']);
  343. $newTime = $etime - $stime;
  344. $num += $newTime;
  345. }
  346. $ret[$k]['month'] = $num;
  347. //获取本周开始时间 结束时间
  348. $sweek = date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)) . ' 00:00:00';
  349. $eweek = date('Y-m-d', (time() + (7 - (date('w') == 0 ? 7 : date('w'))) * 24 * 3600)) . ' 23:59:59';
  350. $where2[] = ['update_time','>=',$sweek];
  351. $where2[] = ['update_time','<=',$eweek];
  352. $userWork2 = Db::name('user_work')
  353. ->where('user_id', $v['id'])
  354. ->where($where2)
  355. ->whereNotNull('start_time')
  356. ->whereNotNull('end_time')
  357. ->select()->toArray();
  358. $num2 = 0;
  359. foreach ($userWork2 as $kk => $vv) {
  360. $stime = strtotime($vv['start_time']);
  361. $etime = strtotime($vv['end_time']);
  362. $newTime = $etime - $stime;
  363. $num2 += $newTime;
  364. }
  365. $ret[$k]['week'] = $num2;
  366. //获取今天开始时间 结束时间
  367. $sday = date('Y-m-d') . ' 00:00:00';
  368. $eday = date('Y-m-d') . ' 23:59:59';
  369. $where3[] = ['update_time','>=',$sday];
  370. $where3[] = ['update_time','<=',$eday];
  371. $userWork3 = Db::name('user_work')
  372. ->where('user_id', $v['id'])
  373. ->where($where3)
  374. ->whereNotNull('start_time')
  375. ->whereNotNull('end_time')
  376. ->select()->toArray();
  377. $num3 = 0;
  378. foreach ($userWork3 as $kk => $vv) {
  379. $stime = strtotime($vv['start_time']);
  380. $etime = strtotime($vv['end_time']);
  381. $newTime = $etime - $stime;
  382. $num3 += $newTime;
  383. }
  384. $ret[$k]['day'] = $num3;
  385. }
  386. //数据返回
  387. $totalCount = Db::name('user')
  388. ->alias('u')
  389. ->field('u.id,u.nickname')
  390. ->join('user_org uo', 'uo.user_id=u.id')
  391. ->where('uo.org_id', $this->org_id)
  392. ->where('u.enable', 1)
  393. ->where('u.del', 0)
  394. ->where($map)
  395. ->count();;
  396. $totalPage = ceil($totalCount/$length);
  397. $result['page'] = $page;
  398. $result['total'] = $totalPage;
  399. $result['records'] = $totalCount;
  400. $result['rows'] = $ret;
  401. return json($result);
  402. }else{
  403. $this->assign('meta_title','用户工作时长统计');
  404. return $this->fetch();
  405. }
  406. }
  407. //耗材统计
  408. public function mateItems(){
  409. $month = input('month','','trim');
  410. if($month){
  411. $smonth = $month.'-01 :00:00:00';
  412. $emonth = $month.'-31 :23:59:59';
  413. $where[] = ['t.done_time','>=',$smonth];
  414. $where[] = ['t.done_time','<=',$emonth];
  415. }else{
  416. //本月
  417. $month = date('Y-m');
  418. $sdate = date('Y-m').'-01 :00:00:00';
  419. $edate = date('Y-m').'-31 :23:59:59';
  420. $where[] = ['t.done_time','>=',$sdate];
  421. $where[] = ['t.done_time','<=',$edate];
  422. //本周
  423. $sweek = date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)) . ' 00:00:00';
  424. $eweek = date('Y-m-d', (time() + (7 - (date('w') == 0 ? 7 : date('w'))) * 24 * 3600)) . ' 23:59:59';
  425. $where2[] = ['t.done_time','>=',$sweek];
  426. $where2[] = ['t.done_time','<=',$eweek];
  427. //当天
  428. $sday = date('Y-m-d') . ' 00:00:00';
  429. $eday = date('Y-m-d') . ' 23:59:59';
  430. $where3[] = ['t.done_time','>=',$sday];
  431. $where3[] = ['t.done_time','<=',$eday];
  432. }
  433. $map[] = ['enable','=',1];
  434. $map[] = ['org_id','=',$this->org_id];
  435. $map= empty($map) ? true: $map;
  436. $ret = Db::name('dep')->where($map)->select()->toArray();
  437. foreach ($ret as $k=>$v){
  438. //本月
  439. $todo = Db::name('todo')
  440. ->alias('t')
  441. ->field('t.id,t.to_user_id,t.mate_price')
  442. ->join('user_dep ud','ud.user_id=t.to_user_id')
  443. ->where('ud.dep_id',$v['id'])
  444. ->where('t.todo_mode',3)
  445. ->where('t.del',0)
  446. ->where('t.org_id',$this->org_id)
  447. ->where($where)
  448. ->select()
  449. ->toArray();
  450. $total = 0;
  451. foreach ($todo as $kk=>$vv){
  452. $total +=$vv['mate_price'];
  453. }
  454. $ret[$k]['month'] = $total;
  455. //本周
  456. $ret[$k]['week'] = 0;
  457. if(!empty($where2)){
  458. $todo = Db::name('todo')
  459. ->alias('t')
  460. ->field('t.id,t.to_user_id,t.mate_price')
  461. ->join('user_dep ud','ud.user_id=t.to_user_id')
  462. ->where('ud.dep_id',$v['id'])
  463. ->where('t.todo_mode',3)
  464. ->where('t.del',0)
  465. ->where('t.org_id',$this->org_id)
  466. ->where($where2)
  467. ->select()
  468. ->toArray();
  469. $total2 = 0;
  470. foreach ($todo as $kk=>$vv){
  471. $total2 +=$vv['mate_price'];
  472. }
  473. $ret[$k]['week'] = $total2;
  474. }
  475. $ret[$k]['day'] = 0;
  476. if(!empty($where3)){
  477. //当天
  478. $todo = Db::name('todo')
  479. ->alias('t')
  480. ->field('t.id,t.to_user_id,t.mate_price')
  481. ->join('user_dep ud','ud.user_id=t.to_user_id')
  482. ->where('ud.dep_id',$v['id'])
  483. ->where('t.todo_mode',3)
  484. ->where('t.del',0)
  485. ->where('t.org_id',$this->org_id)
  486. ->where($where3)
  487. ->select()
  488. ->toArray();
  489. $total3 = 0;
  490. foreach ($todo as $kk=>$vv){
  491. $total3 +=$vv['mate_price'];
  492. }
  493. $ret[$k]['day'] = $total3;
  494. }
  495. }
  496. $this->assign('data',$ret);
  497. $this->assign('month',$month);
  498. $this->assign('meta_title','耗材统计列表');
  499. return $this->fetch();
  500. }
  501. public function mateItemsDetails($id,$month){
  502. $sdate = $month.'-1 00:00:00';
  503. $edate = $month.'-31 23:59:59';
  504. $map[] = ['t.done_time','>=',$sdate];
  505. $map[] = ['t.done_time','<=',$edate];
  506. if(request()->isAjax()){
  507. //分页参数
  508. $length = input('rows',10,'intval'); //每页条数
  509. $page = input('page',1,'intval'); //第几页
  510. $start = ($page - 1) * $length; //分页开始位置
  511. //排序
  512. $sortRow = input('sidx','id','trim'); //排序列
  513. $sort = input('sord','desc','trim'); //排序方式
  514. $order = $sortRow.' '.$sort;
  515. $ret = Db::name('todo')
  516. ->alias('t')
  517. ->field('t.to_user_id,tmi.*')
  518. ->join('user_dep ud','ud.user_id=t.to_user_id')
  519. ->join('todo_mate_item tmi','tmi.todo_id=t.id')
  520. ->where('ud.dep_id',$id)
  521. ->where('t.todo_mode',3)
  522. ->where('t.del',0)
  523. ->where('t.org_id',$this->org_id)
  524. ->where($map)
  525. ->limit($start,$length)
  526. ->order($order)
  527. ->select()
  528. ->toArray();
  529. foreach ($ret as $k=>$v){
  530. $ret[$k]['title']=Db::name('mate_items')
  531. ->where('id',$v['items_id'])
  532. ->value('title');
  533. $ret[$k]['nickname']=Db::name('user')
  534. ->where('id',$v['to_user_id'])
  535. ->value('nickname');
  536. }
  537. //数据返回
  538. $totalCount = Db::name('todo')
  539. ->alias('t')
  540. ->field('tmi.*')
  541. ->join('user_dep ud','ud.user_id=t.to_user_id')
  542. ->join('todo_mate_item tmi','tmi.todo_id=t.id')
  543. ->where('ud.dep_id',$id)
  544. ->where('t.todo_mode',3)
  545. ->where('t.del',0)
  546. ->where('t.org_id',$this->org_id)
  547. ->where($map)
  548. ->count();
  549. $totalPage = ceil($totalCount/$length);
  550. $result['page'] = $page;
  551. $result['total'] = $totalPage;
  552. $result['records'] = $totalCount;
  553. $result['rows'] = $ret;
  554. return json($result);
  555. }else{
  556. $this->assign('meta_title','部门使用耗材列表');
  557. $this->assign('id',$id);
  558. $this->assign('month',$month);
  559. return $this->fetch();
  560. }
  561. }
  562. //报修科室使用材料统计
  563. public function cltj(){
  564. $cur = date('Y-m-d');
  565. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  566. $end = input('end', date('Y-m-d'));
  567. $start1 = $start . ' 00:00:00';
  568. $end1 = $end . ' 23:59:59';
  569. $data = $this->cltjData($start1,$end1);
  570. $this->assign('data', $data);
  571. $this->assign('start', $start);
  572. $this->assign('end', $end);
  573. return $this->fetch();
  574. }
  575. public function cltjData($start,$end){
  576. $orgId = $this->orgId;
  577. $ret = Db::name('order_repair')
  578. ->alias('a')
  579. ->join('orders b','a.order_id=b.id')
  580. ->where('b.org_id',$orgId)
  581. ->where('a.address_id','>',0)
  582. ->field('a.address_id')
  583. ->distinct(true)
  584. ->select();
  585. $map = [];
  586. if(!empty($start)){
  587. $map[] = ['t.done_time','>=',$start];
  588. }
  589. if(!empty($end)){
  590. $map[] = ['t.done_time','<',$end];
  591. }
  592. $map[] = ['t.del','=',0];
  593. $map[] = ['t.org_id','=',$orgId];
  594. foreach ($ret as $k=>$v){
  595. $map1 = [];
  596. $todo = Db::name('todo_mate_item')
  597. ->alias('tmi')
  598. ->join('todo_mate tm','tm.id = tmi.todo_mate_id')
  599. ->join('todo t','tm.todo_id = t.id')
  600. ->join('orders o','o.id = t.order_id')
  601. ->join('order_repair r','o.id = r.order_id')
  602. ->where('r.address_id',$v['address_id'])
  603. ->where($map)
  604. ->sum('tmi.total_money');
  605. $num =$todo?round($todo,2):0;
  606. if($num<=0){
  607. unset($ret[$k]);
  608. }else{
  609. $ret[$k]['month'] = $num;
  610. if(!empty($start)){
  611. $map1[] = ['t.done_time','>=',$start];
  612. }
  613. if(!empty($end)){
  614. $map1[] = ['t.done_time','<',$end];
  615. }
  616. $map1[] = ['t.del','=',0];
  617. $map1[] = ['t.org_id','=',$orgId];
  618. $map1[] = ['r.address_id','=',$v['address_id']];
  619. $lists =Db::name('todo_mate_item')
  620. ->alias('tmi')
  621. ->join('todo_mate tm','tm.id = tmi.todo_mate_id')
  622. ->join('todo t','tm.todo_id = t.id')
  623. ->join('orders o','o.id = t.order_id')
  624. ->join('user u','u.id = t.to_user_id')
  625. ->join('order_repair r','o.id = r.order_id')
  626. ->join('mate_goods ma','ma.id = tmi.items_id')
  627. ->field('tmi.*,u.real_name,ma.title')
  628. ->where($map1)
  629. ->select();
  630. if(empty($lists)){
  631. unset($ret[$k]);
  632. continue;
  633. }
  634. $ret[$k]['rows'] = count($lists);
  635. $ret[$k]['items'] = $lists;
  636. $ret[$k]['title'] =Db::name('address')
  637. ->where('id',$v['address_id'])
  638. ->value('title');
  639. }
  640. }
  641. return $ret;
  642. }
  643. //耗材统计导出
  644. public function cltjExport()
  645. {
  646. set_time_limit(0);
  647. ini_set("memory_limit", "1024M");
  648. $cur = date('Y-m-d');
  649. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  650. $end = input('end', date('Y-m-d'));
  651. $start1 = $start . ' 00:00:00';
  652. $end1 = $end . ' 23:59:59';
  653. $data = $this->cltjData($start1,$end1);
  654. $title = '报修科室使用材料统计报表';
  655. header("Content-type: application/vnd.ms-excel");
  656. header("Content-Type: application/force-download");
  657. header("Content-Disposition: attachment; filename=".$title.".xls");
  658. header('Expires:0');
  659. header('Pragma:public');
  660. $res = '';
  661. $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
  662. $res.='<tr style="background: #ffffff;">';
  663. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">科室名称</th>';
  664. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">材料名称</th>';
  665. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">数量</th>';
  666. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">单价</th>';
  667. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">总价</th>';
  668. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">小计</th>';
  669. $res.='</tr>';
  670. foreach ($data as $k=>$v){
  671. $res.='<tr style="background: #ffffff;">';
  672. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="'.$v['rows'].'">'.$v['title'].'</td>';
  673. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['title'].'</td>';
  674. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['total'].'</td>';
  675. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['money'].'</td>';
  676. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['total_money'].'</td>';
  677. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="'.$v['rows'].'">'.$v['month'].'</td>';
  678. $res.='</tr>';
  679. if(count($v['items']) >=2){
  680. foreach ($v['items'] as $k1=>$v1){
  681. if($k1>0){
  682. $res.='<tr style="background: #ffffff;">';
  683. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['title'].'</td>';
  684. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['total'].'</td>';
  685. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['money'].'</td>';
  686. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['total_money'].'</td>';
  687. $res.='</tr>';
  688. }
  689. }
  690. }
  691. }
  692. echo $res;
  693. }
  694. //员工维修工作量
  695. public function finishTime(){
  696. $cur = date('Y-m-d');
  697. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  698. $end = input('end', date('Y-m-d'));
  699. $start1 = $start . ' 00:00:00';
  700. $end1 = $end . ' 23:59:59';
  701. $data = $this->finishTimeData($start1,$end1);
  702. $this->assign('data', $data);
  703. $this->assign('start', $start);
  704. $this->assign('end', $end);
  705. return $this->fetch();
  706. }
  707. public function finishTimeData($start,$end) {
  708. $org_id = $this->orgId;
  709. $list = (new \app\common\model\WorkTypeMode())->getRolesUser(1,$this->orgId);
  710. $a = [];
  711. foreach ($list as $k=>$v){
  712. if($v['user']){
  713. foreach ($v['user'] as $k1=>$v1){
  714. $a[] = $v1;
  715. }
  716. }
  717. }
  718. $accepted = $nFinish=0;
  719. $list = $a;
  720. $map = [];
  721. if(!empty($start)){
  722. $map[] = ['todo.create_yyyymmdd','>=',date('Ymd',strtotime($start))];
  723. }
  724. if(!empty($end)){
  725. $map[] = ['todo.create_yyyymmdd','<=',date('Ymd',strtotime($end))];
  726. }
  727. foreach ($list as $k=>$v){
  728. $hs = 0;
  729. $orderList = Db::name('todo')
  730. ->alias('todo')
  731. ->where('todo.org_id',$org_id)
  732. ->where('todo.todo_mode',3)
  733. ->where('todo.to_user_id',$v['id'])
  734. ->where('todo.work_type_mode',1)
  735. ->where($map)
  736. ->select();
  737. foreach ($orderList as $k1=>$v1){
  738. $hs += strtotime($v1['done_time'])-strtotime($v1['create_time']);
  739. }
  740. $hszj = $hs >0?round($hs/3600,2):0;
  741. $list[$k]['hszj'] = $hszj;
  742. $wc_time = Db::name('todo')
  743. ->alias('todo')
  744. ->where('todo.org_id',$org_id)
  745. ->where('todo.todo_mode',3)
  746. ->where('todo.to_user_id',$v['id'])
  747. ->where('todo.work_type_mode',1)
  748. ->where($map)
  749. ->sum('todo.wc_time');
  750. $total = $wc_time?round($wc_time/3600,2):0;
  751. $list[$k]['total'] = $total;
  752. $nums = Db::name('todo')
  753. ->alias('todo')
  754. ->where('todo.org_id',$org_id)
  755. ->where('todo.todo_mode',3)
  756. ->where('todo.to_user_id',$v['id'])
  757. ->where('todo.work_type_mode',1)
  758. ->where($map)
  759. ->count();
  760. $list[$k]['num'] =$nums;
  761. if($nums>0){
  762. $avg = round($total/$nums,2);
  763. }else{
  764. $avg = 0;
  765. }
  766. $list[$k]['avg'] = $avg;
  767. $dep = Db::name('user_dep')
  768. ->alias('a')
  769. ->join('dep o','a.dep_id=o.id')
  770. ->where('a.user_id',$v['id'])
  771. ->field('o.title')
  772. ->find();
  773. $list[$k]['dep'] = $dep?$dep['title']:'';
  774. // 已接工
  775. $list[$k]['accepted'] = Db::name('todo')
  776. ->alias('todo')
  777. ->where('todo.org_id',$org_id)
  778. ->where('todo.todo_mode','>',1)
  779. ->where('todo.to_user_id',$v['id'])
  780. ->where('todo.work_type_mode',1)
  781. ->where($map)
  782. ->count();
  783. $accepted += $list[$k]['accepted'];
  784. // 未完工
  785. $list[$k]['nFinish'] = Db::name('todo')
  786. ->alias('todo')
  787. ->where('todo.org_id',$org_id)
  788. ->where('todo.todo_mode','in',[2,4,5,6,7,8])
  789. ->where('todo.to_user_id',$v['id'])
  790. ->where('todo.work_type_mode',1)
  791. ->where($map)
  792. ->count();
  793. $nFinish += $list[$k]['nFinish'];
  794. }
  795. return $list;
  796. }
  797. //excel导出
  798. public function finishTimeExport() {
  799. $meta_title = '维修人员工作时长';
  800. $cur = date('Y-m-d');
  801. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  802. $end = input('end', date('Y-m-d'));
  803. $start1 = $start . ' 00:00:00';
  804. $end1 = $end . ' 23:59:59';
  805. $ret = $this->finishTimeData($start1,$end1);
  806. include_once env('root_path').'/extend/phpexcel/Classes/PHPExcel.php';
  807. //实例化PHPExcel类
  808. $objPHPExcel = new \PHPExcel();
  809. //激活当前的sheet表
  810. $objPHPExcel->setActiveSheetIndex(0);
  811. //设置表格头(即excel表格的第一行)
  812. $objPHPExcel->setActiveSheetIndex(0)
  813. ->setCellValue('A1', '姓名')
  814. ->setCellValue('B1', '班组名称')
  815. ->setCellValue('C1', '接工量')
  816. ->setCellValue('D1', '完工量')
  817. ->setCellValue('E1', '未完工量')
  818. ->setCellValue('F1', '维修耗时')
  819. ->setCellValue('G1', '工时总计');
  820. // 设置表格头水平居中
  821. $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()
  822. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  823. $objPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getAlignment()
  824. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  825. $objPHPExcel->setActiveSheetIndex(0)->getStyle('C1')->getAlignment()
  826. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  827. $objPHPExcel->setActiveSheetIndex(0)->getStyle('D1')->getAlignment()
  828. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  829. $objPHPExcel->setActiveSheetIndex(0)->getStyle('E1')->getAlignment()
  830. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  831. $objPHPExcel->setActiveSheetIndex(0)->getStyle('F1')->getAlignment()
  832. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  833. $objPHPExcel->setActiveSheetIndex(0)->getStyle('G1')->getAlignment()
  834. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  835. $objPHPExcel->setActiveSheetIndex(0)->getStyle('H1')->getAlignment()
  836. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  837. //设置列水平居中
  838. $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()
  839. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  840. $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment()
  841. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  842. $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()
  843. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  844. $objPHPExcel->setActiveSheetIndex(0)->getStyle('D')->getAlignment()
  845. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  846. $objPHPExcel->setActiveSheetIndex(0)->getStyle('E')->getAlignment()
  847. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  848. $objPHPExcel->setActiveSheetIndex(0)->getStyle('F')->getAlignment()
  849. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  850. $objPHPExcel->setActiveSheetIndex(0)->getStyle('G')->getAlignment()
  851. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  852. $objPHPExcel->setActiveSheetIndex(0)->getStyle('H')->getAlignment()
  853. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  854. //设置单元格宽度
  855. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10);
  856. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(20);
  857. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20);
  858. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('D')->setWidth(20);
  859. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(20);
  860. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(50);
  861. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('G')->setWidth(20);
  862. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('H')->setWidth(20);
  863. //循环刚取出来的数组,将数据逐一添加到excel表格。
  864. for ($i = 0; $i < count($ret); $i++) {
  865. $objPHPExcel->getActiveSheet()->setCellValue('A' . ($i + 2), $ret[$i]['real_name']);
  866. $objPHPExcel->getActiveSheet()->setCellValue('B' . ($i + 2), $ret[$i]['dep']);
  867. $objPHPExcel->getActiveSheet()->setCellValue('C' . ($i + 2), $ret[$i]['accepted']);
  868. $objPHPExcel->getActiveSheet()->setCellValue('D' . ($i + 2), $ret[$i]['num']);
  869. $objPHPExcel->getActiveSheet()->setCellValue('E' . ($i + 2), $ret[$i]['nFinish']);
  870. $objPHPExcel->getActiveSheet()->setCellValue('F' . ($i + 2), $ret[$i]['hszj']);
  871. $objPHPExcel->getActiveSheet()->setCellValue('G' . ($i + 2), $ret[$i]['total']);
  872. }
  873. //设置保存的Excel表格名称
  874. $filename = '维修人员工作时长' . date('YmdHis', time()) . '.xls';
  875. //设置当前激活的sheet表格名称
  876. $objPHPExcel->getActiveSheet()->setTitle('维修人员工作时长');
  877. //设置浏览器窗口下载表格
  878. ob_end_clean();
  879. header("Content-Type: application/force-download");
  880. header("Content-Type: application/octet-stream");
  881. header("Content-Type: application/download");
  882. header('Content-Disposition:inline;filename="' . $filename);
  883. //生成excel文件
  884. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  885. //下载文件在浏览器窗口
  886. return $objWriter->save('php://output');
  887. }
  888. //班组维修工作量
  889. public function bzwx(){
  890. $cur = date('Y-m-d');
  891. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  892. $end = input('end', date('Y-m-d'));
  893. $title = input('title','');
  894. $start1 = $start . ' 00:00:00';
  895. $end1 = $end . ' 23:59:59';
  896. $data = $this->bzwxData($start1,$end1,$title);
  897. $this->assign('data', $data);
  898. $this->assign('start', $start);
  899. $this->assign('end', $end);
  900. $this->assign('title', $title);
  901. return $this->fetch();
  902. }
  903. public function bzwxData($start,$end,$title){
  904. $org_id = $this->orgId;
  905. $m = [];
  906. if(!empty($title)){
  907. $m[] =['title','like','%'.$title.'%'];
  908. }
  909. $list = Db::name('dep')
  910. ->where('del',0)
  911. ->where('enable',1)
  912. ->where('org_id',$org_id)
  913. ->select();
  914. $map = [];
  915. if(!empty($start)){
  916. $map[] = ['create_yyyymmdd','>=',date('Ymd',strtotime($start))];
  917. }
  918. if(!empty($end)){
  919. $map[] = ['create_yyyymmdd','<=',date('Ymd',strtotime($end))];
  920. }
  921. $accepted = $nFinish=0;
  922. foreach ($list as $k=>$v){
  923. $user = Db::name('user_dep')
  924. ->alias('b')
  925. ->join('user a','b.user_id=a.id')
  926. ->where('a.del',0)
  927. ->where('a.enable',1)
  928. ->where('b.dep_id',$v['id'])
  929. ->field('b.user_id')
  930. ->select();
  931. $ids = $user?array_column($user,'user_id'):[];
  932. $list[$k]['num'] =0;
  933. $list[$k]['accepted'] =0;
  934. $list[$k]['nFinish'] =0;
  935. if(!empty($ids)){
  936. $nums =Db::name('todo')
  937. ->where('org_id',$org_id)
  938. ->where('to_user_id','in',$ids)
  939. ->where('work_type_mode',1)
  940. ->where('todo_mode','in',[2,3,9])
  941. ->where($map)
  942. ->count();
  943. $list[$k]['num'] =$nums;
  944. // 已接工
  945. $list[$k]['accepted'] = Db::name('todo')
  946. ->where('org_id',$org_id)
  947. ->where('to_user_id','in',$ids)
  948. ->where('work_type_mode',1)
  949. ->where('todo_mode','>',1)
  950. ->where($map)
  951. ->count();
  952. $accepted += $list[$k]['accepted'];
  953. // 未完工
  954. $list[$k]['nFinish'] = Db::name('todo')
  955. ->where('org_id',$org_id)
  956. ->where('to_user_id','in',$ids)
  957. ->where('work_type_mode',1)
  958. ->where('todo_mode','in',[2,4,5,6,7])
  959. ->where($map)
  960. ->count();
  961. $nFinish += $list[$k]['nFinish'];
  962. if($nums==0 && $list[$k]['accepted']==0 && $list[$k]['nFinish']==0){
  963. unset($list[$k]);
  964. }
  965. }else{
  966. unset($list[$k]);
  967. }
  968. }
  969. return $list;
  970. }
  971. //excel导出
  972. public function bzwxExport() {
  973. $meta_title = '班组维修工作量统计表';
  974. $cur = date('Y-m-d');
  975. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  976. $end = input('end', date('Y-m-d'));
  977. $start1 = $start . ' 00:00:00';
  978. $end1 = $end . ' 23:59:59';
  979. $title = input('title','');
  980. $ret = $this->bzwxData($start1,$end1,$title);
  981. include_once env('root_path').'/extend/phpexcel/Classes/PHPExcel.php';
  982. //实例化PHPExcel类
  983. $objPHPExcel = new \PHPExcel();
  984. //激活当前的sheet表
  985. $objPHPExcel->setActiveSheetIndex(0);
  986. //设置表格头(即excel表格的第一行)
  987. $objPHPExcel->setActiveSheetIndex(0)
  988. ->setCellValue('A1', '班组名称')
  989. ->setCellValue('B1', '接工量')
  990. ->setCellValue('C1', '完工量')
  991. ->setCellValue('D1', '未完工量');
  992. // 设置表格头水平居中
  993. $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()
  994. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  995. $objPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getAlignment()
  996. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  997. $objPHPExcel->setActiveSheetIndex(0)->getStyle('C1')->getAlignment()
  998. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  999. $objPHPExcel->setActiveSheetIndex(0)->getStyle('D1')->getAlignment()
  1000. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1001. $objPHPExcel->setActiveSheetIndex(0)->getStyle('E1')->getAlignment()
  1002. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1003. $objPHPExcel->setActiveSheetIndex(0)->getStyle('F1')->getAlignment()
  1004. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1005. $objPHPExcel->setActiveSheetIndex(0)->getStyle('G1')->getAlignment()
  1006. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1007. $objPHPExcel->setActiveSheetIndex(0)->getStyle('H1')->getAlignment()
  1008. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1009. //设置列水平居中
  1010. $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()
  1011. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1012. $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment()
  1013. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1014. $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()
  1015. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1016. $objPHPExcel->setActiveSheetIndex(0)->getStyle('D')->getAlignment()
  1017. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1018. $objPHPExcel->setActiveSheetIndex(0)->getStyle('E')->getAlignment()
  1019. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1020. $objPHPExcel->setActiveSheetIndex(0)->getStyle('F')->getAlignment()
  1021. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1022. $objPHPExcel->setActiveSheetIndex(0)->getStyle('G')->getAlignment()
  1023. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1024. $objPHPExcel->setActiveSheetIndex(0)->getStyle('H')->getAlignment()
  1025. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1026. //设置单元格宽度
  1027. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10);
  1028. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(20);
  1029. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20);
  1030. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('D')->setWidth(20);
  1031. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(20);
  1032. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(50);
  1033. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('G')->setWidth(20);
  1034. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('H')->setWidth(20);
  1035. //循环刚取出来的数组,将数据逐一添加到excel表格。
  1036. for ($i = 0; $i < count($ret); $i++) {
  1037. $objPHPExcel->getActiveSheet()->setCellValue('A' . ($i + 2), $ret[$i]['title']);
  1038. $objPHPExcel->getActiveSheet()->setCellValue('B' . ($i + 2), $ret[$i]['accepted']);
  1039. $objPHPExcel->getActiveSheet()->setCellValue('C' . ($i + 2), $ret[$i]['num']);
  1040. $objPHPExcel->getActiveSheet()->setCellValue('D' . ($i + 2), $ret[$i]['nFinish']);
  1041. }
  1042. //设置保存的Excel表格名称
  1043. $filename = '班组维修工作量统计表' . date('YmdHis', time()) . '.xls';
  1044. //设置当前激活的sheet表格名称
  1045. $objPHPExcel->getActiveSheet()->setTitle('班组维修工作量统计表');
  1046. //设置浏览器窗口下载表格
  1047. ob_end_clean();
  1048. header("Content-Type: application/force-download");
  1049. header("Content-Type: application/octet-stream");
  1050. header("Content-Type: application/download");
  1051. header('Content-Disposition:inline;filename="' . $filename);
  1052. //生成excel文件
  1053. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  1054. //下载文件在浏览器窗口
  1055. return $objWriter->save('php://output');
  1056. }
  1057. public function bxks(){
  1058. $cur = date('Y-m-d');
  1059. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  1060. $end = input('end', date('Y-m-d'));
  1061. $title = input('title','');
  1062. $start1 = $start . ' 00:00:00';
  1063. $end1 = $end . ' 23:59:59';
  1064. $data = $this->bxksData($start1,$end1,$title);
  1065. $this->assign('data', $data);
  1066. $this->assign('start', $start);
  1067. $this->assign('end', $end);
  1068. $this->assign('title', $title);
  1069. return $this->fetch();
  1070. }
  1071. public function bxksData($start,$end,$title){
  1072. $org_id = $this->orgId;
  1073. $map = [];
  1074. if(!empty($title)){
  1075. $ks = Db::name('dep')
  1076. ->where('org_id',$org_id)
  1077. ->where('del',0)
  1078. ->where('enable',1)
  1079. ->where('title','like','%'.$title.'%')
  1080. ->select();
  1081. if(empty($ks)){
  1082. // $map[] = ['a.address_id','=',-1];
  1083. $map[] = ['b.dep_id','=',-1];
  1084. }else{
  1085. // $map[] = ['a.address_id','in',array_column($ks,'id')];
  1086. $map[] = ['b.dep_id','in',array_column($ks,'id')];
  1087. }
  1088. }
  1089. $ret =Db::name('order_repair')
  1090. ->alias('a')
  1091. ->join('orders b','a.order_id=b.id')
  1092. ->where('b.org_id',$org_id)
  1093. // ->where('a.address_id','>',0)
  1094. ->where($map)
  1095. ->field('b.dep_id')
  1096. ->distinct(true)
  1097. ->select();
  1098. if(!empty($start)){
  1099. $map1[] = ['a.create_yyyymmdd','>=',date('Ymd',strtotime($start))];
  1100. }
  1101. if(!empty($end)){
  1102. $map1[] = ['a.create_yyyymmdd','<=',date('Ymd',strtotime($end))];
  1103. }
  1104. $map1[] = ['a.del','=',0];
  1105. $map1[] = ['a.org_id','=',$org_id];
  1106. foreach ($ret as $k=>$v){
  1107. $num = Db::name('orders')
  1108. ->alias('a')
  1109. ->join('order_repair t','t.order_id = a.id')
  1110. ->where('a.dep_id',$v['dep_id'])
  1111. ->where($map1)
  1112. ->count();
  1113. $ret[$k]['num'] = $num;
  1114. $ret[$k]['title'] = Db::name('dep')
  1115. ->where('id',$v['dep_id'])
  1116. ->value('title');
  1117. }
  1118. return $ret;
  1119. }
  1120. //excel导出
  1121. public function bxksExport() {
  1122. $meta_title = '报修科室统计';
  1123. $cur = date('Y-m-d');
  1124. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  1125. $end = input('end', date('Y-m-d'));
  1126. $start1 = $start . ' 00:00:00';
  1127. $end1 = $end . ' 23:59:59';
  1128. $title = input('title','');
  1129. $ret = $this->bxksData($start1,$end1,$title);
  1130. include_once env('root_path').'/extend/phpexcel/Classes/PHPExcel.php';
  1131. //实例化PHPExcel类
  1132. $objPHPExcel = new \PHPExcel();
  1133. //激活当前的sheet表
  1134. $objPHPExcel->setActiveSheetIndex(0);
  1135. //设置表格头(即excel表格的第一行)
  1136. $objPHPExcel->setActiveSheetIndex(0)
  1137. ->setCellValue('A1', '科室名称')
  1138. ->setCellValue('B1', '报修订单数量');
  1139. // 设置表格头水平居中
  1140. $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()
  1141. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1142. $objPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getAlignment()
  1143. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1144. $objPHPExcel->setActiveSheetIndex(0)->getStyle('C1')->getAlignment()
  1145. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1146. $objPHPExcel->setActiveSheetIndex(0)->getStyle('D1')->getAlignment()
  1147. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1148. $objPHPExcel->setActiveSheetIndex(0)->getStyle('E1')->getAlignment()
  1149. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1150. $objPHPExcel->setActiveSheetIndex(0)->getStyle('F1')->getAlignment()
  1151. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1152. $objPHPExcel->setActiveSheetIndex(0)->getStyle('G1')->getAlignment()
  1153. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1154. $objPHPExcel->setActiveSheetIndex(0)->getStyle('H1')->getAlignment()
  1155. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1156. //设置列水平居中
  1157. $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()
  1158. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1159. $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment()
  1160. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1161. $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()
  1162. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1163. $objPHPExcel->setActiveSheetIndex(0)->getStyle('D')->getAlignment()
  1164. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1165. $objPHPExcel->setActiveSheetIndex(0)->getStyle('E')->getAlignment()
  1166. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1167. $objPHPExcel->setActiveSheetIndex(0)->getStyle('F')->getAlignment()
  1168. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1169. $objPHPExcel->setActiveSheetIndex(0)->getStyle('G')->getAlignment()
  1170. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1171. $objPHPExcel->setActiveSheetIndex(0)->getStyle('H')->getAlignment()
  1172. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  1173. //设置单元格宽度
  1174. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10);
  1175. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(20);
  1176. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20);
  1177. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('D')->setWidth(20);
  1178. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(20);
  1179. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(50);
  1180. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('G')->setWidth(20);
  1181. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('H')->setWidth(20);
  1182. //循环刚取出来的数组,将数据逐一添加到excel表格。
  1183. for ($i = 0; $i < count($ret); $i++) {
  1184. $objPHPExcel->getActiveSheet()->setCellValue('A' . ($i + 2), $ret[$i]['title']);
  1185. $objPHPExcel->getActiveSheet()->setCellValue('B' . ($i + 2), $ret[$i]['num']);
  1186. }
  1187. //设置保存的Excel表格名称
  1188. $filename = '报修科室统计' . date('YmdHis', time()) . '.xls';
  1189. //设置当前激活的sheet表格名称
  1190. $objPHPExcel->getActiveSheet()->setTitle('报修科室统计');
  1191. //设置浏览器窗口下载表格
  1192. ob_end_clean();
  1193. header("Content-Type: application/force-download");
  1194. header("Content-Type: application/octet-stream");
  1195. header("Content-Type: application/download");
  1196. header('Content-Disposition:inline;filename="' . $filename);
  1197. //生成excel文件
  1198. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  1199. //下载文件在浏览器窗口
  1200. return $objWriter->save('php://output');
  1201. }
  1202. public function grcltj(){
  1203. $cur = date('Y-m-d');
  1204. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  1205. $end = input('end', date('Y-m-d'));
  1206. $start1 = $start . ' 00:00:00';
  1207. $end1 = $end . ' 23:59:59';
  1208. $data = $this->grcltjData($start1,$end1);
  1209. $this->assign('data', $data);
  1210. $this->assign('start', $start);
  1211. $this->assign('end', $end);
  1212. return $this->fetch();
  1213. }
  1214. public function grcltjData($start,$end){
  1215. $orgId = $this->orgId;
  1216. $ret = Db::name('todo_mate')
  1217. ->alias('a')
  1218. ->join('todo b','a.todo_id=b.id')
  1219. ->field('a.*')
  1220. ->where('a.org_id',$orgId)
  1221. ->where('a.type',0)
  1222. ->where('b.del',0)
  1223. ->group('a.user_id')
  1224. ->select();
  1225. $map = [];
  1226. if(!empty($start)){
  1227. $map[] = ['tmi.create_time','>=',$start];
  1228. }
  1229. if(!empty($end)){
  1230. $map[] = ['tmi.create_time','<',$end];
  1231. }
  1232. $map[] = ['t.del','=',0];
  1233. $map[] = ['tm.org_id','=',$orgId];
  1234. foreach ($ret as $k=>$v){
  1235. $map1 = [];
  1236. $todo = Db::name('todo_mate_item')
  1237. ->alias('tmi')
  1238. ->join('todo_mate tm','tm.id = tmi.todo_mate_id')
  1239. ->join('todo t','tm.todo_id = t.id')
  1240. ->join('orders o','o.id = t.order_id')
  1241. ->where('tmi.user_id',$v['user_id'])
  1242. ->where($map)
  1243. ->sum('tmi.total_money');
  1244. $num =$todo?round($todo,2):0;
  1245. if($num<=0){
  1246. unset($ret[$k]);
  1247. }else{
  1248. $ret[$k]['month'] = $num;
  1249. if(!empty($start)){
  1250. $map1[] = ['t.create_time','>=',$start];
  1251. }
  1252. if(!empty($end)){
  1253. $map1[] = ['t.create_time','<',$end];
  1254. }
  1255. $map1[] = ['t.del','=',0];
  1256. $map1[] = ['t.org_id','=',$orgId];
  1257. $map1[] = ['tm.user_id','=',$v['user_id']];
  1258. $lists =Db::name('todo_mate_item')
  1259. ->alias('tmi')
  1260. ->join('todo_mate tm','tm.id = tmi.todo_mate_id')
  1261. ->join('todo t','tm.todo_id = t.id')
  1262. ->join('orders o','o.id = t.order_id')
  1263. ->join('user u','u.id = t.to_user_id')
  1264. ->join('mate_goods ma','ma.id = tmi.items_id')
  1265. ->field('tmi.*,u.real_name,ma.title')
  1266. ->where($map1)
  1267. ->select();
  1268. if(empty($lists)){
  1269. unset($ret[$k]);
  1270. continue;
  1271. }
  1272. $ret[$k]['rows'] = count($lists);
  1273. $ret[$k]['items'] = $lists;
  1274. $ret[$k]['real_name'] = Db::name('user')
  1275. ->where('id',$v['user_id'])
  1276. ->value('real_name');
  1277. }
  1278. }
  1279. return $ret;
  1280. }
  1281. public function grcltjExport()
  1282. {
  1283. set_time_limit(0);
  1284. ini_set("memory_limit", "1024M");
  1285. $cur = date('Y-m-d');
  1286. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  1287. $end = input('end', date('Y-m-d'));
  1288. $start1 = $start . ' 00:00:00';
  1289. $end1 = $end . ' 23:59:59';
  1290. $data = $this->grcltjData($start1,$end1);
  1291. $title = '工人耗材用量统计';
  1292. header("Content-type: application/vnd.ms-excel");
  1293. header("Content-Type: application/force-download");
  1294. header("Content-Disposition: attachment; filename=".$title.".xls");
  1295. header('Expires:0');
  1296. header('Pragma:public');
  1297. $res = '';
  1298. $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
  1299. $res.='<tr style="background: #ffffff;">';
  1300. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">工人名称</th>';
  1301. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">材料名称</th>';
  1302. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">数量</th>';
  1303. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">单价</th>';
  1304. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">总价</th>';
  1305. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">使用时间</th>';
  1306. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">小计</th>';
  1307. $res.='</tr>';
  1308. foreach ($data as $k=>$v){
  1309. $res.='<tr style="background: #ffffff;">';
  1310. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="'.$v['rows'].'">'.$v['real_name'].'</td>';
  1311. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['title'].'</td>';
  1312. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['total'].'</td>';
  1313. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['money'].'</td>';
  1314. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['total_money'].'</td>';
  1315. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['create_time'].'</td>';
  1316. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="'.$v['rows'].'">'.$v['month'].'</td>';
  1317. $res.='</tr>';
  1318. if(count($v['items']) >=2){
  1319. foreach ($v['items'] as $k1=>$v1){
  1320. if($k1>0){
  1321. $res.='<tr style="background: #ffffff;">';
  1322. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['title'].'</td>';
  1323. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['total'].'</td>';
  1324. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['money'].'</td>';
  1325. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['total_money'].'</td>';
  1326. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['create_time'].'</td>';
  1327. $res.='</tr>';
  1328. }
  1329. }
  1330. }
  1331. }
  1332. echo $res;
  1333. }
  1334. public function bxrcltj(){
  1335. $cur = date('Y-m-d');
  1336. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  1337. $end = input('end', date('Y-m-d'));
  1338. $start1 = $start . ' 00:00:00';
  1339. $end1 = $end . ' 23:59:59';
  1340. $data = $this->bxrcltjData($start1,$end1);
  1341. $this->assign('data', $data);
  1342. $this->assign('start', $start);
  1343. $this->assign('end', $end);
  1344. return $this->fetch();
  1345. }
  1346. public function bxrcltjData($start,$end){
  1347. $orgId = $this->orgId;
  1348. $ret = Db::name('orders')
  1349. ->alias('a')
  1350. ->where('org_id',$orgId)
  1351. ->where('del',0)
  1352. ->where('finish_time','>=',$start)
  1353. ->where('finish_time','<',$end)
  1354. ->group('user_id')
  1355. ->select();
  1356. $map = [];
  1357. if(!empty($start)){
  1358. $map[] = ['t.done_time','>=',$start];
  1359. }
  1360. if(!empty($end)){
  1361. $map[] = ['t.done_time','<',$end];
  1362. }
  1363. $map[] = ['t.del','=',0];
  1364. $map[] = ['t.org_id','=',$orgId];
  1365. foreach ($ret as $k=>$v){
  1366. $map1 = [];
  1367. $todo = Db::name('todo_mate_item')
  1368. ->alias('tmi')
  1369. ->join('todo_mate tm','tm.id = tmi.todo_mate_id')
  1370. ->join('todo t','tm.todo_id = t.id')
  1371. ->join('orders o','o.id = t.order_id')
  1372. ->where('o.user_id',$v['user_id'])
  1373. ->where($map)
  1374. ->sum('tmi.total_money');
  1375. $num =$todo?round($todo,2):0;
  1376. if($num<=0){
  1377. unset($ret[$k]);
  1378. }else{
  1379. $ret[$k]['month'] = $num;
  1380. if(!empty($start)){
  1381. $map1[] = ['t.done_time','>=',$start];
  1382. }
  1383. if(!empty($end)){
  1384. $map1[] = ['t.done_time','<',$end];
  1385. }
  1386. $map1[] = ['t.del','=',0];
  1387. $map1[] = ['t.org_id','=',$orgId];
  1388. $map1[] = ['o.user_id','=',$v['user_id']];
  1389. $lists =Db::name('todo_mate_item')
  1390. ->alias('tmi')
  1391. ->join('todo_mate tm','tm.id = tmi.todo_mate_id')
  1392. ->join('todo t','tm.todo_id = t.id')
  1393. ->join('orders o','o.id = t.order_id')
  1394. ->join('user u','u.id = t.to_user_id')
  1395. ->join('mate_goods ma','ma.id = tmi.items_id')
  1396. ->field('tmi.*,u.real_name,ma.title')
  1397. ->where($map1)
  1398. ->select();
  1399. if(empty($lists)){
  1400. unset($ret[$k]);
  1401. continue;
  1402. }
  1403. $ret[$k]['rows'] = count($lists);
  1404. $ret[$k]['items'] = $lists;
  1405. $ret[$k]['title'] =Db::name('user')
  1406. ->where('id',$v['user_id'])
  1407. ->value('real_name');
  1408. }
  1409. }
  1410. return $ret;
  1411. }
  1412. //耗材统计导出
  1413. public function bxrcltjExport()
  1414. {
  1415. set_time_limit(0);
  1416. ini_set("memory_limit", "1024M");
  1417. $cur = date('Y-m-d');
  1418. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  1419. $end = input('end', date('Y-m-d'));
  1420. $start1 = $start . ' 00:00:00';
  1421. $end1 = $end . ' 23:59:59';
  1422. $data = $this->bxrcltjData($start1,$end1);
  1423. $title = '报修人耗材统计报表';
  1424. header("Content-type: application/vnd.ms-excel");
  1425. header("Content-Type: application/force-download");
  1426. header("Content-Disposition: attachment; filename=".$title.".xls");
  1427. header('Expires:0');
  1428. header('Pragma:public');
  1429. $res = '';
  1430. $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
  1431. $res.='<tr style="background: #ffffff;">';
  1432. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">报修人</th>';
  1433. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">材料名称</th>';
  1434. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">数量</th>';
  1435. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">单价</th>';
  1436. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">使用人</th>';
  1437. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">使用时间</th>';
  1438. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">总价</th>';
  1439. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">小计</th>';
  1440. $res.='</tr>';
  1441. foreach ($data as $k=>$v){
  1442. $res.='<tr style="background: #ffffff;">';
  1443. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="'.$v['rows'].'">'.$v['title'].'</td>';
  1444. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['title'].'</td>';
  1445. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['total'].'</td>';
  1446. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['money'].'</td>';
  1447. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['real_name'].'</td>';
  1448. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['create_time'].'</td>';
  1449. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['total_money'].'</td>';
  1450. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="'.$v['rows'].'">'.$v['month'].'</td>';
  1451. $res.='</tr>';
  1452. if(count($v['items']) >=2){
  1453. foreach ($v['items'] as $k1=>$v1){
  1454. if($k1>0){
  1455. $res.='<tr style="background: #ffffff;">';
  1456. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['title'].'</td>';
  1457. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['total'].'</td>';
  1458. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['money'].'</td>';
  1459. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['real_name'].'</td>';
  1460. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['create_time'].'</td>';
  1461. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['total_money'].'</td>';
  1462. $res.='</tr>';
  1463. }
  1464. }
  1465. }
  1466. }
  1467. echo $res;
  1468. }
  1469. public function wlflcltj(){
  1470. $cur = date('Y-m-d');
  1471. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  1472. $end = input('end', date('Y-m-d'));
  1473. $start1 = $start . ' 00:00:00';
  1474. $end1 = $end . ' 23:59:59';
  1475. $data = $this->wlflcltjData($start1,$end1);
  1476. $this->assign('data', $data);
  1477. $this->assign('start', $start);
  1478. $this->assign('end', $end);
  1479. return $this->fetch();
  1480. }
  1481. public function wlflcltjData($start,$end){
  1482. $orgId = $this->orgId;
  1483. $ret = Db::name('mate_cate')
  1484. ->where('org_id',$orgId)
  1485. ->where('del',0)
  1486. ->where('enable',1)
  1487. ->select();
  1488. $map = [];
  1489. if(!empty($start)){
  1490. $map[] = ['t.done_time','>=',$start];
  1491. }
  1492. if(!empty($end)){
  1493. $map[] = ['t.done_time','<',$end];
  1494. }
  1495. $map[] = ['t.del','=',0];
  1496. $map[] = ['t.org_id','=',$orgId];
  1497. foreach ($ret as $k=>$v){
  1498. $map1 = [];
  1499. $todo = Db::name('todo_mate_item')
  1500. ->alias('tmi')
  1501. ->join('todo_mate tm','tm.id = tmi.todo_mate_id')
  1502. ->join('mate_goods mg','tmi.items_id=mg.id')
  1503. ->join('mate_cate mc','mg.cate_id = mc.id')
  1504. ->join('todo t','tm.todo_id = t.id')
  1505. ->join('orders o','o.id = t.order_id')
  1506. ->where('mc.id',$v['id'])
  1507. ->where($map)
  1508. ->sum('tmi.total_money');
  1509. $num =$todo?round($todo,2):0;
  1510. if($num<=0){
  1511. unset($ret[$k]);
  1512. }else{
  1513. $ret[$k]['month'] = $num;
  1514. if(!empty($start)){
  1515. $map1[] = ['t.done_time','>=',$start];
  1516. }
  1517. if(!empty($end)){
  1518. $map1[] = ['t.done_time','<',$end];
  1519. }
  1520. $map1[] = ['t.del','=',0];
  1521. $map1[] = ['t.org_id','=',$orgId];
  1522. $map1[] = ['mc.id','=',$v['id']];
  1523. $lists =Db::name('todo_mate_item')
  1524. ->alias('tmi')
  1525. ->join('todo_mate tm','tm.id = tmi.todo_mate_id')
  1526. ->join('mate_goods mg','tmi.items_id=mg.id')
  1527. ->join('mate_cate mc','mg.cate_id = mc.id')
  1528. ->join('todo t','tm.todo_id = t.id')
  1529. ->join('orders o','o.id = t.order_id')
  1530. ->join('user u','u.id = t.to_user_id')
  1531. ->join('mate_goods ma','ma.id = tmi.items_id')
  1532. ->field('tmi.*,u.real_name,ma.title')
  1533. ->where($map1)
  1534. ->select();
  1535. if(empty($lists)){
  1536. unset($ret[$k]);
  1537. continue;
  1538. }
  1539. $ret[$k]['rows'] = count($lists);
  1540. $ret[$k]['items'] = $lists;
  1541. }
  1542. }
  1543. return $ret;
  1544. }
  1545. //耗材统计导出
  1546. public function wlflcltjExport()
  1547. {
  1548. set_time_limit(0);
  1549. ini_set("memory_limit", "1024M");
  1550. $cur = date('Y-m-d');
  1551. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  1552. $end = input('end', date('Y-m-d'));
  1553. $start1 = $start . ' 00:00:00';
  1554. $end1 = $end . ' 23:59:59';
  1555. $data = $this->wlflcltjData($start1,$end1);
  1556. $title = '物料分类统计报表';
  1557. header("Content-type: application/vnd.ms-excel");
  1558. header("Content-Type: application/force-download");
  1559. header("Content-Disposition: attachment; filename=".$title.".xls");
  1560. header('Expires:0');
  1561. header('Pragma:public');
  1562. $res = '';
  1563. $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
  1564. $res.='<tr style="background: #ffffff;">';
  1565. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">分类名称</th>';
  1566. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">材料名称</th>';
  1567. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">数量</th>';
  1568. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">单价</th>';
  1569. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">使用人</th>';
  1570. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">使用时间</th>';
  1571. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">总价</th>';
  1572. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">小计</th>';
  1573. $res.='</tr>';
  1574. foreach ($data as $k=>$v){
  1575. $res.='<tr style="background: #ffffff;">';
  1576. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="'.$v['rows'].'">'.$v['title'].'</td>';
  1577. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['title'].'</td>';
  1578. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['total'].'</td>';
  1579. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['money'].'</td>';
  1580. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['real_name'].'</td>';
  1581. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['create_time'].'</td>';
  1582. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['items'][0]['total_money'].'</td>';
  1583. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="'.$v['rows'].'">'.$v['month'].'</td>';
  1584. $res.='</tr>';
  1585. if(count($v['items']) >=2){
  1586. foreach ($v['items'] as $k1=>$v1){
  1587. if($k1>0){
  1588. $res.='<tr style="background: #ffffff;">';
  1589. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['title'].'</td>';
  1590. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['total'].'</td>';
  1591. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['money'].'</td>';
  1592. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['real_name'].'</td>';
  1593. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['create_time'].'</td>';
  1594. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1['total_money'].'</td>';
  1595. $res.='</tr>';
  1596. }
  1597. }
  1598. }
  1599. }
  1600. echo $res;
  1601. }
  1602. public function wxOrderTj(){
  1603. $cur = date('Y-m-d');
  1604. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  1605. $end = input('end', date('Y-m-d'));
  1606. $title = input('title','');
  1607. $cateId = input('cateId','');
  1608. $goodsId = input('goodsId','');
  1609. $start1 = $start . ' 00:00:00';
  1610. $end1 = $end . ' 23:59:59';
  1611. $data = $this->wxOrderTjData($start1,$end1,$title,$cateId);
  1612. $cateList = model('WxGoodsCate')->lists($this->orgId);
  1613. $this->assign('cateList', $cateList);
  1614. $this->assign('data', $data);
  1615. $this->assign('start', $start);
  1616. $this->assign('end', $end);
  1617. $this->assign('title', $title);
  1618. $this->assign('cateId', $cateId?explode(',',$cateId):"");
  1619. $this->assign('goodsId', $goodsId?explode(',',$goodsId):"");
  1620. $glist = Db::name('wx_goods')->where('org_id',$this->orgId)->where('enable',1)->where('del',0)->select();
  1621. $this->assign('glist', $glist);
  1622. return $this->fetch();
  1623. }
  1624. public function wxOrderTjData($start,$end,$title,$cateId){
  1625. $org_id = $this->orgId;
  1626. $map = [];
  1627. $goodsId = input('goodsId','');
  1628. if(!empty($title)){
  1629. $map[] = ['g.title','like','%'.$title.'%'];
  1630. }
  1631. if(!empty($cateId)){
  1632. $map[] = ['g.cate_id','in',explode(',',$cateId)];
  1633. }
  1634. if(!empty($goodsId)){
  1635. $map[] = ['g.id','in',explode(',',$goodsId)];
  1636. }
  1637. if(!empty($start)){
  1638. $map[] = ['a.create_time','>=',$start];
  1639. }
  1640. if(!empty($end)){
  1641. $map[] = ['a.create_time','<=',$end];
  1642. }
  1643. $map[] = ['a.status','in',[1,2,3,5]];
  1644. $map[] = ['a.del','=',0];
  1645. $map[] = ['a.org_id','=',$org_id];
  1646. $ret =Db::name('wx_orders')
  1647. ->alias('a')
  1648. ->join('wx_orders_goods b','a.id=b.order_id')
  1649. ->join('wx_goods g','b.goods_id=g.id')
  1650. ->join('wx_goods_cate ca','g.cate_id=ca.id')
  1651. ->where($map)
  1652. ->field('b.goods_id,a.id,sum(b.nums) as num,b.price,g.title,ca.title as cateName')
  1653. ->group('b.goods_id')
  1654. ->select();
  1655. $total = 0;
  1656. foreach ($ret as $k=>$v){
  1657. $refund = Db::name('wx_orders_refund')
  1658. ->where('order_id',$v['id'])
  1659. ->where('goods_id',$v['goods_id'])
  1660. ->where('del',0)
  1661. ->where('status','in',[0,1])
  1662. ->find();
  1663. $num = $v['num'];
  1664. if($refund){
  1665. $num = $v['num']-$refund['num'];
  1666. }
  1667. if($num==0){
  1668. unset($ret[$k]);
  1669. }else{
  1670. $t = $num*$v['price'];
  1671. $total+=$t;
  1672. $ret[$k]['total'] = $num*$v['price'];
  1673. $ret[$k]['num'] = $num;
  1674. }
  1675. }
  1676. array_push($ret,[
  1677. 'title'=>'合计:',
  1678. 'cateName'=>'',
  1679. 'num'=>'',
  1680. 'price'=>'',
  1681. 'total'=>$total,
  1682. ]);
  1683. return $ret;
  1684. }
  1685. public function wxOrderTjExport(){
  1686. $cur = date('Y-m-d');
  1687. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  1688. $end = input('end', date('Y-m-d'));
  1689. $title = input('title','');
  1690. $cateId = input('cateId','');
  1691. $start1 = $start . ' 00:00:00';
  1692. $end1 = $end . ' 23:59:59';
  1693. $data = $this->wxOrderTjData($start1,$end1,$title,$cateId);
  1694. $header = [
  1695. ['title' => '商品名称', 'name' => 'title','width'=>'30'],
  1696. ['title' => '分类', 'name' => 'cateName','width'=>'30'],
  1697. ['title' => '数量', 'name' => 'num','width'=>'30'],
  1698. ['title' => '单价', 'name' => 'price','width'=>'80'],
  1699. ['title' => '总金额', 'name' => 'total','width'=>'30'],
  1700. ];
  1701. $filename = '销售统计';
  1702. ExcelUtil::export($filename,$header,$data);
  1703. }
  1704. public function wxOrderView(){
  1705. $startY = beginYear();
  1706. $zjygy = date('Y-m-d 00:00:00',time()-(30*86400));
  1707. $type = input('type/d',0);
  1708. if(request()->isPost()){
  1709. $dataTitle = [];
  1710. $dataValue = [];
  1711. $dataValue1 = [];
  1712. $map[] = ['org_id','=',$this->orgId];
  1713. $map[] = ['del','=',0];
  1714. $map[] = ['status','in',[1,2,3,5]];
  1715. $ddzs = 0;
  1716. $ddbl=0;
  1717. $ddzt=0;//0持平1上升2下降
  1718. $yzfdd=0;
  1719. $yzfbl=0;
  1720. $yzfzt=0;//0持平1上升2下降
  1721. $ddze=0;
  1722. $ddzebl=0;
  1723. $ddzezt=0;//0持平1上升2下降
  1724. $map1[] = ['org_id','=',$this->orgId];
  1725. $map1[] = ['del','=',0];
  1726. $cateList = model('WxGoodsCate')->lists($this->orgId);
  1727. $refund = Db::name('wx_orders_refund')
  1728. ->where('org_id','=',$this->orgId)
  1729. ->where('del',0)
  1730. ->where('status','in',[0,1])
  1731. ->column('goods_id');
  1732. $rMap = [];
  1733. if($refund){
  1734. $rMap[] = ['b.goods_id','not in',$refund];
  1735. }
  1736. if($type==0){
  1737. $title = getMinFromRange(date('Y-m-d 00:00:00'),date('Y-m-d H:i:s'));
  1738. foreach ($title as $k=>$v){
  1739. $dataTitle[] = date('H点',strtotime($v));
  1740. $dataValue[] = Db::name('wx_orders')
  1741. ->where($map)
  1742. ->where('create_yyyymmddhh','=',date('YmdH',strtotime($v)))
  1743. ->count();
  1744. $dataValue1[] = Db::name('wx_orders')
  1745. ->where($map)
  1746. ->where('create_yyyymmddhh','=',date('YmdH',strtotime($v)))
  1747. ->sum('amount');
  1748. }
  1749. $zt = date("Ymd",strtotime("-1 day"));
  1750. $ddzs =Db::name('wx_orders')
  1751. ->where($map1)
  1752. ->where('create_yyyymmdd','=',date('Ymd'))
  1753. ->count();
  1754. $ztzs = Db::name('wx_orders')
  1755. ->where($map1)
  1756. ->where('create_yyyymmdd','=',$zt)
  1757. ->count();
  1758. if($ztzs==$ddzs){
  1759. $ddzt = 0;
  1760. }elseif ($ztzs>$ddzs){
  1761. $ddzt = 2;
  1762. $ddbl = $ztzs>0?round((($ztzs-$ddzs)/$ztzs),2)*100:0;
  1763. }elseif ($ztzs<$ddzs){
  1764. $ddzt = 1;
  1765. $ddbl = $ddzs>0?round((($ddzs-$ztzs))/$ddzs,2)*100:0;
  1766. }
  1767. $yzfdd =Db::name('wx_orders')
  1768. ->where($map1)
  1769. ->where('status','in',[1,2,3,5])
  1770. ->where('create_yyyymmdd','=',date('Ymd'))
  1771. ->count();
  1772. $ztyzfdd = Db::name('wx_orders')
  1773. ->where($map1)
  1774. ->where('status','in',[1,2,3,5])
  1775. ->where('create_yyyymmdd','=',$zt)
  1776. ->count();
  1777. if($ztyzfdd==$yzfdd){
  1778. $yzfzt = 0;
  1779. }elseif ($ztyzfdd>$yzfdd){
  1780. $yzfzt = 2;
  1781. $yzfbl = $ztyzfdd>0?round((($ztyzfdd-$yzfdd)/$ztyzfdd),2)*100:0;
  1782. }elseif ($ztyzfdd<$yzfdd){
  1783. $yzfzt = 1;
  1784. $yzfbl = $yzfdd>0?round((($yzfdd-$ztyzfdd))/$yzfdd,2)*100:0;
  1785. }
  1786. $ddze =Db::name('wx_orders')
  1787. ->where($map1)
  1788. ->where('status','in',[1,2,3,5])
  1789. ->where('create_yyyymmdd','=',date('Ymd'))
  1790. ->sum('amount');
  1791. $ztddze = Db::name('wx_orders')
  1792. ->where($map1)
  1793. ->where('status','in',[1,2,3,5])
  1794. ->where('create_yyyymmdd','=',$zt)
  1795. ->sum('amount');
  1796. if($ztddze==$ddze){
  1797. $ddzezt = 0;
  1798. }elseif ($ztddze>$ddze){
  1799. $ddzezt = 2;
  1800. $ddzebl = $ztddze>0?round((($ztddze-$ddze)/$ztddze),2)*100:0;
  1801. }elseif ($ztddze<$ddze){
  1802. $ddzezt = 1;
  1803. $ddzebl = $ddze>0?round((($ddze-$ztddze))/$ddze,2)*100:0;
  1804. }
  1805. foreach ($cateList as $k=>$v){
  1806. $a = Db::name('wx_orders')
  1807. ->alias('a')
  1808. ->join('wx_orders_goods b','a.id=b.order_id')
  1809. ->join('wx_goods c','b.goods_id=c.id')
  1810. ->where('a.del','=',0)
  1811. ->where('a.org_id','=',$this->orgId)
  1812. ->where('c.cate_id','=',$v['id'])
  1813. ->where('a.status','in',[1,2,3,5])
  1814. ->where($rMap)
  1815. ->where('a.create_yyyymmdd','=',date('Ymd'))
  1816. ->sum('b.nums*b.price');
  1817. $cateList[$k]['total'] = $a?$a:0;
  1818. }
  1819. }elseif ($type==1){
  1820. $title = getDateFromRange(date('Y-m-01'),date('Y-m-d'));
  1821. foreach ($title as $k=>$v){
  1822. $dataTitle[] = date('Y-m-d',strtotime($v));
  1823. $dataValue[] = Db::name('wx_orders')
  1824. ->where($map)
  1825. ->where('create_yyyymmdd','=', date('Ymd',strtotime($v)))
  1826. ->count();
  1827. $dataValue1[] = Db::name('wx_orders')
  1828. ->where($map)
  1829. ->where('create_yyyymmdd','=', date('Ymd',strtotime($v)))
  1830. ->sum('amount');
  1831. }
  1832. $zt = date("Ym",strtotime("-1 month"));
  1833. $ddzs =Db::name('wx_orders')
  1834. ->where($map1)
  1835. ->where('create_yyyymm','=',date('Ym'))
  1836. ->count();
  1837. $ztzs = Db::name('wx_orders')
  1838. ->where($map1)
  1839. ->where('create_yyyymm','=',$zt)
  1840. ->count();
  1841. if($ztzs==$ddzs){
  1842. $ddzt = 0;
  1843. }elseif ($ztzs>$ddzs){
  1844. $ddzt = 2;
  1845. $ddbl = $ztzs>0?round((($ztzs-$ddzs)/$ztzs),2)*100:0;
  1846. }elseif ($ztzs<$ddzs){
  1847. $ddzt = 1;
  1848. $ddbl = $ddzs>0?round((($ddzs-$ztzs))/$ddzs,2)*100:0;
  1849. }
  1850. $yzfdd =Db::name('wx_orders')
  1851. ->where($map1)
  1852. ->where('status','in',[1,2,3,5])
  1853. ->where('create_yyyymm','=',date('Ym'))
  1854. ->count();
  1855. $ztyzfdd = Db::name('wx_orders')
  1856. ->where($map1)
  1857. ->where('status','in',[1,2,3,5])
  1858. ->where('create_yyyymm','=',$zt)
  1859. ->count();
  1860. if($ztyzfdd==$yzfdd){
  1861. $yzfzt = 0;
  1862. }elseif ($ztyzfdd>$yzfdd){
  1863. $yzfzt = 2;
  1864. $yzfbl = $ztyzfdd>0?round((($ztyzfdd-$yzfdd)/$ztyzfdd),2)*100:0;
  1865. }elseif ($ztyzfdd<$yzfdd){
  1866. $yzfzt = 1;
  1867. $yzfbl = $yzfdd>0?round((($yzfdd-$ztyzfdd))/$yzfdd,2)*100:0;
  1868. }
  1869. $ddze =Db::name('wx_orders')
  1870. ->where($map1)
  1871. ->where('status','in',[1,2,3,5])
  1872. ->where('create_yyyymm','=',date('Ym'))
  1873. ->sum('amount');
  1874. $ztddze = Db::name('wx_orders')
  1875. ->where($map1)
  1876. ->where('status','in',[1,2,3,5])
  1877. ->where('create_yyyymm','=',$zt)
  1878. ->sum('amount');
  1879. if($ztddze==$ddze){
  1880. $ddzezt = 0;
  1881. }elseif ($ztddze>$ddze){
  1882. $ddzezt = 2;
  1883. $ddzebl = $ztddze>0?round((($ztddze-$ddze)/$ztddze),2)*100:0;
  1884. }elseif ($ztddze<$ddze){
  1885. $ddzezt = 1;
  1886. $ddzebl = $ddze>0?round((($ddze-$ztddze))/$ddze,2)*100:0;
  1887. }
  1888. foreach ($cateList as $k=>$v){
  1889. $a = Db::name('wx_orders')
  1890. ->alias('a')
  1891. ->join('wx_orders_goods b','a.id=b.order_id')
  1892. ->join('wx_goods c','b.goods_id=c.id')
  1893. ->where('a.del','=',0)
  1894. ->where('a.org_id','=',$this->orgId)
  1895. ->where('c.cate_id','=',$v['id'])
  1896. ->where($rMap)
  1897. ->where('a.status','in',[1,2,3,5])
  1898. ->where('a.create_yyyymm','=',date('Ym'))
  1899. ->sum('b.nums*b.price');
  1900. $cateList[$k]['total'] = $a?$a:0;
  1901. }
  1902. }elseif ($type==2){
  1903. $title = getMonthFromRange($startY,date('Y-m-d H:i:s'));
  1904. foreach ($title as $k=>$v){
  1905. $dataTitle[] = date('Y-m',strtotime($v));
  1906. $dataValue[] = Db::name('wx_orders')
  1907. ->where($map)
  1908. ->where('create_yyyymm','=', date('Ym',strtotime($v)))
  1909. ->count();
  1910. $dataValue1[] = Db::name('wx_orders')
  1911. ->where($map)
  1912. ->where('create_yyyymm','=', date('Ym',strtotime($v)))
  1913. ->sum('amount');
  1914. }
  1915. $zt = date ( "Y" , strtotime ( "-1 year" ));
  1916. $ddzs =Db::name('wx_orders')
  1917. ->where($map1)
  1918. ->where('create_yyyy','=',date('Y'))
  1919. ->count();
  1920. $ztzs = Db::name('wx_orders')
  1921. ->where($map1)
  1922. ->where('create_yyyy','=',$zt)
  1923. ->count();
  1924. if($ztzs==$ddzs){
  1925. $ddzt = 0;
  1926. }elseif ($ztzs>$ddzs){
  1927. $ddzt = 2;
  1928. $ddbl = $ztzs>0?round((($ztzs-$ddzs)/$ztzs),2)*100:0;
  1929. }elseif ($ztzs<$ddzs){
  1930. $ddzt = 1;
  1931. $ddbl = $ddzs>0?round((($ddzs-$ztzs))/$ddzs,2)*100:0;
  1932. }
  1933. $yzfdd =Db::name('wx_orders')
  1934. ->where($map1)
  1935. ->where('status','in',[1,2,3,5])
  1936. ->where('create_yyyy','=',date('Y'))
  1937. ->count();
  1938. $ztyzfdd = Db::name('wx_orders')
  1939. ->where($map1)
  1940. ->where('status','in',[1,2,3,5])
  1941. ->where('create_yyyy','=',$zt)
  1942. ->count();
  1943. if($ztyzfdd==$yzfdd){
  1944. $yzfzt = 0;
  1945. }elseif ($ztyzfdd>$yzfdd){
  1946. $yzfzt = 2;
  1947. $yzfbl = $ztyzfdd>0?round((($ztyzfdd-$yzfdd)/$ztyzfdd),2)*100:0;
  1948. }elseif ($ztyzfdd<$yzfdd){
  1949. $yzfzt = 1;
  1950. $yzfbl = $yzfdd>0?round((($yzfdd-$ztyzfdd))/$yzfdd,2)*100:0;
  1951. }
  1952. $ddze =Db::name('wx_orders')
  1953. ->where($map1)
  1954. ->where('status','in',[1,2,3,5])
  1955. ->where('create_yyyy','=',date('Y'))
  1956. ->sum('amount');
  1957. $ztddze = Db::name('wx_orders')
  1958. ->where($map1)
  1959. ->where('status','in',[1,2,3,5])
  1960. ->where('create_yyyy','=',$zt)
  1961. ->sum('amount');
  1962. if($ztddze==$ddze){
  1963. $ddzezt = 0;
  1964. }elseif ($ztddze>$ddze){
  1965. $ddzezt = 2;
  1966. $ddzebl = $ztddze>0?round((($ztddze-$ddze)/$ztddze),2)*100:0;
  1967. }elseif ($ztddze<$ddze){
  1968. $ddzezt = 1;
  1969. $ddzebl = $ddze>0?round((($ddze-$ztddze))/$ddze,2)*100:0;
  1970. }
  1971. foreach ($cateList as $k=>$v){
  1972. $a = Db::name('wx_orders')
  1973. ->alias('a')
  1974. ->join('wx_orders_goods b','a.id=b.order_id')
  1975. ->join('wx_goods c','b.goods_id=c.id')
  1976. ->where('a.del','=',0)
  1977. ->where('a.org_id','=',$this->orgId)
  1978. ->where('c.cate_id','=',$v['id'])
  1979. ->where($rMap)
  1980. ->where('a.status','in',[1,2,3,5])
  1981. ->where('a.create_yyyy','=',date('Y'))
  1982. ->sum('b.nums*b.price');
  1983. $cateList[$k]['total'] = $a?$a:0;
  1984. }
  1985. }
  1986. if($cateList){
  1987. $vol = array_column($cateList,'total');
  1988. array_multisort($vol,SORT_DESC,$cateList);
  1989. }
  1990. $p = [
  1991. 'title'=>$dataTitle,
  1992. 'value'=>$dataValue,
  1993. 'value1'=>$dataValue1,
  1994. 'ddzs' => $ddzs,
  1995. 'ddbl' => $ddbl,
  1996. 'ddzt' => $ddzt,
  1997. 'yzfdd' => $yzfdd,
  1998. 'yzfbl' => $yzfbl,
  1999. 'yzfzt' => $yzfzt,
  2000. 'ddze' => $ddze,
  2001. 'ddzebl' => $ddzebl,
  2002. 'ddzezt' => $ddzezt,
  2003. 'cateList' => $cateList,
  2004. ];
  2005. $this->success('操作成功','',$p);
  2006. }else{
  2007. $map[] = ['org_id','=',$this->orgId];
  2008. $map[] = ['del','=',0];
  2009. $data['orderAmount'] = Db::name('wx_orders')
  2010. ->where($map)
  2011. ->where('status','in',[1,2,3,5])
  2012. ->where('create_yyyymm','=',date('Ym'))
  2013. ->sum('amount');
  2014. $data['orderCount'] = Db::name('wx_orders')
  2015. ->where($map)
  2016. ->where('status','in',[1,2,3,5])
  2017. ->where('create_yyyy','=',date('Y'))
  2018. ->count();
  2019. $data['orderUser'] = Db::name('wx_orders')
  2020. ->where($map)
  2021. ->where('status','in',[1,2,3,5])
  2022. ->where('create_yyyymmdd','=',date('Ymd'))
  2023. ->group('user_id')
  2024. ->count();
  2025. $beginMonth = beginMonth();
  2026. $data['refundCount'] = Db::name('wx_orders_refund')
  2027. ->where('org_id',$this->orgId)
  2028. ->where('status',1)
  2029. ->where('del',0)
  2030. ->where('create_time','>=',$beginMonth)
  2031. ->where('create_time','<=',getTime())
  2032. ->sum('money');
  2033. $this->assign('data',$data);
  2034. return $this->fetch();
  2035. }
  2036. }
  2037. }