FinishedProductWarehousing.php 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. /**
  5. * 成品入仓维护接口
  6. */
  7. class FinishedProductWarehousing extends Api
  8. {
  9. protected $noNeedLogin = ['*'];
  10. protected $noNeedRight = ['*'];
  11. /**
  12. * 首页
  13. *成品入仓测试
  14. */
  15. public function index()
  16. {
  17. $this->success('请求成功');
  18. }
  19. /**
  20. * 侧边栏
  21. * @ApiMethod (GET)
  22. */
  23. public function getTab()
  24. {
  25. //get请求
  26. if(!$this->request->isGet()){
  27. $this->error('请求方式错误');
  28. }
  29. $rows = db('成品入仓')
  30. ->field('LEFT(Sys_rq, 10) as date, COUNT(*) as counts')
  31. ->group('date')
  32. ->order('UniqId desc')
  33. ->limit(50)
  34. ->select();
  35. $num = db('成品入仓')
  36. ->where('Sys_rq','>=',$rows[count($rows)-1]['date'])
  37. ->count();
  38. $arr = db('成品入仓')
  39. ->field('LEFT(Sys_rq, 10) as date, rtrim(sys_id) as sys_id, COUNT(*) as count')
  40. ->where('Sys_rq','>=',$rows[count($rows)-1]['date'])
  41. ->group('date, sys_id')
  42. ->limit($num)
  43. ->select();
  44. foreach($rows as $key=>$value){
  45. $rows[$key]['sys'] = [];
  46. foreach($arr as $k=>$v){
  47. if($value['date'] == $v['date']){
  48. unset($v['date']);
  49. array_push($rows[$key]['sys'],$v);
  50. unset($arr[$k]);
  51. }
  52. }
  53. $rows[$key]['date'] = str_replace('-', '.', $rows[$key]['date']);
  54. }
  55. $this->success('成功',$rows);
  56. }
  57. /**
  58. * 侧边栏
  59. * @ApiMethod (GET)
  60. */
  61. public function getTabByGdbh()
  62. {
  63. //get请求
  64. if(!$this->request->isGet()){
  65. $this->error('请求方式错误');
  66. }
  67. $num = db('成品入仓')->count();
  68. $rows = db('成品入仓')
  69. ->field('jjcp_gdbh, rtrim(jjcp_cpdh) as jjcp_cpdh, LEFT(Sys_rq, 10) as Sys_rq')
  70. ->order('Sys_rq desc')
  71. ->limit($num)
  72. ->select();
  73. $num = db('工单_基本资料')->count();
  74. $arr = db('工单_基本资料')
  75. ->limit($num)
  76. ->column('CONCAT(Gd_gdbh, "-", rtrim(Gd_cpdh)) AS gdcp, CONCAT(rtrim(Gd_khdh), " 【", rtrim(Gd_khmc)) AS kh');
  77. $data = [];
  78. foreach ($rows as $value) {
  79. $key = $value['jjcp_gdbh'].'-'.$value['jjcp_cpdh'];
  80. if (isset($arr[$key]) && !isset($data[$arr[$key]])) {
  81. $data[$arr[$key]] = $value['Sys_rq'];
  82. }
  83. }
  84. // 对键进行升序排序
  85. uksort($data, function($a, $b) use ($data) {
  86. if ($data[$a] == $data[$b]) {
  87. return ($a > $b) ? 1 : -1; // 在值相同的情况下,根据键进行升序排列
  88. }
  89. return ($data[$a] < $data[$b]) ? 1 : -1;
  90. });
  91. $this->success('成功',$data);
  92. }
  93. /**
  94. * 列表
  95. * @ApiMethod (GET)
  96. * @param string $date 时间
  97. * @param string $sys_id 用户
  98. */
  99. public function getList()
  100. {
  101. //get请求
  102. if(!$this->request->isGet()){
  103. $this->error('请求方式错误');
  104. }
  105. $req = $this->request->param();
  106. if (!isset($req['date'])) $this->error('参数缺失');
  107. // if (isset($req['page']) && !empty($req['page'])) $page = $req['page'];
  108. // if (isset($req['limit']) && !empty($req['limit'])) $limit = $req['limit'];
  109. if(strpos($req['date'],'-')){
  110. $where = ['c.Sys_rq'=>['like',$req['date'].'%']];
  111. $option = ['Sys_rq'=>['like',$req['date'].'%']];
  112. }else{
  113. $where = [];
  114. $option = [];
  115. }
  116. if (isset($req['sys_id']) && !empty($req['sys_id'])){
  117. $where['c.Sys_id'] = ['LIKE',$req['sys_id'].'%'];
  118. $option['Sys_id'] = ['LIKE',$req['sys_id'].'%'];
  119. }
  120. //客户编号
  121. $rows = db('成品入仓')->alias('c')
  122. ->field('rtrim(c.入仓类型) as 入仓类型, rtrim(c.仓库编号) as 仓库编号, rtrim(c.仓库名称) as 仓库名称,
  123. rtrim(c.jjcp_num) as jjcp_num, c.jjcp_gdbh,
  124. c.jjcp_yjno, c.jjcp_sl, g.订单数量, rtrim(c.jjcp_dw) as jjcp_dw, LEFT(c.jjcp_sj, 10) as jjcp_sj,
  125. rtrim(c.jjcp_smb) as jjcp_smb, rtrim(c.jjcp_cpdh) as jjcp_cpdh, rtrim(c.jjcp_cpmc) as jjcp_cpmc,
  126. rtrim(c.成品编码) as 成品编码, rtrim(c.成品名称) as 成品名称,
  127. rtrim(c.客户料号) as 客户料号, rtrim(c.jjcp_desc) as jjcp_desc, LEFT(c.成品编码,'.config('product_code_digit').') as 客户编号, rtrim(g.Gd_客户名称) as Gd_客户名称,
  128. rtrim(c.机型备注) as 机型备注, rtrim(c.Sys_id) as Sys_id, c.Sys_rq, c.Mod_rq, c.UniqId')
  129. ->where($where)
  130. ->join('工单_基本资料 g','g.Gd_gdbh=c.jjcp_gdbh AND g.行号 = c.jjcp_yjno AND g.Gd_cpdh=c.jjcp_cpdh')
  131. ->order('c.UniqId desc')
  132. ->select();
  133. $total = db('成品入仓')->where($option)->count();
  134. foreach ($rows as $key=>$value) {
  135. $row = db('成品入仓')
  136. ->field('LEFT(Sys_rq, 10) as Sys_rq,jjcp_sl')
  137. ->where(['jjcp_gdbh'=>$value['jjcp_gdbh'], 'jjcp_cpdh'=>$value['jjcp_cpdh']])
  138. ->order('Sys_rq desc')
  139. ->select();
  140. $rows[$key]['jjcp_sls'] = 0;
  141. foreach ($row as $k=>$v) {
  142. $rows[$key]['jjcp_sls'] += $v['jjcp_sl'];
  143. }
  144. if ($value['订单数量']!=0){
  145. $rows[$key]['完成率'] = number_format($rows[$key]['jjcp_sls']/$value['订单数量']/100,2);
  146. }else{
  147. $rows[$key]['完成率'] = '';
  148. }
  149. $rows[$key]['订单数量'] = floatval($value['订单数量']*10000);
  150. $rows[$key]['最近入仓日期'] = $row[0]['Sys_rq'];
  151. $rows[$key]['Mod_rq'] = $value['Mod_rq']=='1900-01-01 00:00:00' ? '' :$value['Mod_rq'];
  152. }
  153. $data = [
  154. 'total' => $total,
  155. 'rows' => $rows,
  156. ];
  157. $this->success('成功',$data);
  158. }
  159. /**
  160. * 定位
  161. * @ApiMethod (GET)
  162. * @param string $gdbh 工单编号
  163. * @param string $cpmc 产品名称
  164. * @param string $page 页码
  165. * @param string $limit 数量
  166. */
  167. public function locate()
  168. {
  169. //get请求
  170. if(!$this->request->isGet()){
  171. $this->error('请求方式错误');
  172. }
  173. $req = $this->request->param();
  174. $page = 1;
  175. $limit = 15;
  176. if (isset($req['page']) && !empty($req['page'])) $page = $req['page'];
  177. if (isset($req['limit']) && !empty($req['limit'])) $limit = $req['limit'];
  178. if (isset($req['gdbh']) && !empty($req['gdbh'])){
  179. $where = ['c.jjcp_gdbh'=>[ 'like', '%' . $req['gdbh'] . '%']];
  180. $option = ['jjcp_gdbh'=>[ 'like', '%' . $req['gdbh'] . '%']];
  181. //客户编号
  182. $rows = db('成品入仓')->alias('c')
  183. ->field('rtrim(c.入仓类型) as 入仓类型, rtrim(c.仓库编号) as 仓库编号, rtrim(c.仓库名称) as 仓库名称,
  184. rtrim(c.jjcp_num) as jjcp_num, c.jjcp_gdbh,
  185. c.jjcp_yjno, c.jjcp_sl, g.订单数量, rtrim(c.jjcp_dw) as jjcp_dw, LEFT(c.jjcp_sj, 10) as jjcp_sj,
  186. rtrim(c.jjcp_smb) as jjcp_smb, rtrim(y.yj_Yjdh) as yj_Yjdh, rtrim(y.yj_yjmc) as yj_yjmc,
  187. rtrim(c.jjcp_cpdh) as jjcp_cpdh, rtrim(c.jjcp_cpmc) as jjcp_cpmc,
  188. rtrim(c.客户料号) as 客户料号, rtrim(c.jjcp_desc) as jjcp_desc, LEFT(c.成品编码,'.config('product_code_digit').') as 客户编号, rtrim(g.Gd_客户名称) as Gd_客户名称,
  189. rtrim(c.机型备注) as 机型备注, rtrim(c.Sys_id) as Sys_id, c.Sys_rq, c.Mod_rq, c.UniqId')
  190. ->where($where)
  191. ->where('y.yj_Yjno=c.jjcp_yjno')
  192. ->where('g.Gd_cpdh=c.jjcp_cpdh')
  193. ->join('工单_基本资料 g','g.Gd_gdbh=c.jjcp_gdbh')
  194. ->join('工单_印件资料 y','y.Yj_Gdbh=c.jjcp_gdbh')
  195. ->order('c.UniqId desc')
  196. ->page($page,$limit)
  197. ->select();
  198. $total = db('成品入仓')->where($option)->count();
  199. }else{
  200. if (isset($req['cpmc']) && !empty($req['cpmc'])){
  201. //查询工单表
  202. $gd = db('工单_基本资料')
  203. ->where('Gd_cpmc', 'LIKE', '%'.$req['cpmc'].'%')
  204. ->column('Gd_gdbh');
  205. $where = ['c.jjcp_gdbh'=>['in', $gd]];
  206. $option = ['jjcp_gdbh'=>['in', $gd]];
  207. //客户编号
  208. $rows = db('成品入仓')->alias('c')
  209. ->field('rtrim(c.入仓类型) as 入仓类型, rtrim(c.仓库编号) as 仓库编号, rtrim(c.仓库名称) as 仓库名称,
  210. rtrim(c.jjcp_num) as jjcp_num, c.jjcp_gdbh,
  211. c.jjcp_yjno, c.jjcp_sl, g.订单数量, rtrim(c.jjcp_dw) as jjcp_dw, LEFT(c.jjcp_sj, 10) as jjcp_sj,
  212. rtrim(c.jjcp_smb) as jjcp_smb, rtrim(y.yj_Yjdh) as yj_Yjdh, rtrim(y.yj_yjmc) as yj_yjmc,
  213. rtrim(c.jjcp_cpdh) as jjcp_cpdh, rtrim(c.jjcp_cpmc) as jjcp_cpmc,
  214. rtrim(c.客户料号) as 客户料号, rtrim(c.jjcp_desc) as jjcp_desc, LEFT(c.成品编码,'.config('product_code_digit').') as 客户编号, rtrim(g.Gd_客户名称) as Gd_客户名称,
  215. rtrim(c.机型备注) as 机型备注, rtrim(c.Sys_id) as Sys_id, c.Sys_rq, c.Mod_rq, c.UniqId')
  216. ->where($where)
  217. ->where('y.yj_Yjno=c.jjcp_yjno')
  218. ->where('g.Gd_cpdh=c.jjcp_cpdh')
  219. ->join('工单_基本资料 g','g.Gd_gdbh=c.jjcp_gdbh')
  220. ->join('工单_印件资料 y','y.Yj_Gdbh=c.jjcp_gdbh')
  221. ->order('c.UniqId desc')
  222. ->page($page,$limit)
  223. ->select();
  224. $total = db('成品入仓')->where($option)->count();
  225. }else{
  226. $this->error('参数错误');
  227. }
  228. }
  229. foreach ($rows as $key=>$value) {
  230. $row = db('成品入仓')
  231. ->field('LEFT(Sys_rq, 10) as Sys_rq,jjcp_sl')
  232. ->where(['jjcp_gdbh'=>$value['jjcp_gdbh'], 'jjcp_cpdh'=>$value['jjcp_cpdh']])
  233. ->order('Sys_rq desc')
  234. ->select();
  235. $rows[$key]['jjcp_sls'] = 0;
  236. foreach ($row as $k=>$v) {
  237. $rows[$key]['jjcp_sls'] += $v['jjcp_sl'];
  238. }
  239. if ($value['订单数量']!=0){
  240. $rows[$key]['完成率'] = number_format($rows[$key]['jjcp_sls']/$value['订单数量']/100,2);
  241. }else{
  242. $rows[$key]['完成率'] = '';
  243. }
  244. $rows[$key]['订单数量'] = floatval($value['订单数量']*10000);
  245. $rows[$key]['最近入仓日期'] = $row[0]['Sys_rq'];
  246. $rows[$key]['Mod_rq'] = $value['Mod_rq']=='1900-01-01 00:00:00' ? '' :$value['Mod_rq'];
  247. }
  248. $data = [
  249. 'total' => $total,
  250. 'rows' => $rows,
  251. ];
  252. $this->success('成功',$data);
  253. }
  254. /**
  255. * 获取信息
  256. * @ApiMethod (GET)
  257. * @param string $UniqId UniqId
  258. */
  259. public function getInfo()
  260. {
  261. //get请求
  262. if(!$this->request->isGet()){
  263. $this->error('请求方式错误');
  264. }
  265. $req = $this->request->param();
  266. if (isset($req['UniqId']) && !empty($req['UniqId'])){
  267. $UniqId = $req['UniqId'];
  268. }else{
  269. $this->error('参数错误');
  270. }
  271. //客户编号
  272. $rows = db('成品入仓')->alias('c')
  273. ->field('rtrim(c.入仓类型) as 入仓类型, rtrim(c.仓库编号) as 仓库编号, rtrim(c.仓库名称) as 仓库名称,
  274. rtrim(c.jjcp_num) as jjcp_num,
  275. c.jjcp_gdbh, c.jjcp_yjno, rtrim(c.订单编号) as 订单编号,
  276. rtrim(c.jjcp_cpdh) as jjcp_cpdh, rtrim(c.jjcp_cpmc) as jjcp_cpmc,
  277. rtrim(c.成品编码) as 成品编码, rtrim(c.成品名称) as 成品名称,
  278. rtrim(c.客户料号) as 客户料号,
  279. rtrim(c.jjcp_smb) as jjcp_smb, LEFT(c.jjcp_sj, 10) as jjcp_sj,
  280. c.jjcp_sl, rtrim(c.jjcp_dw) as jjcp_dw,
  281. g.订单数量*10000 as 订单数量, rtrim(c.机型备注) as 机型备注, rtrim(c.jjcp_desc) as jjcp_desc,
  282. rtrim(c.Sys_id) as Sys_id, c.Sys_rq, c.Mod_rq, c.UniqId')
  283. ->where('c.UniqId',$UniqId)
  284. ->where('g.Gd_cpdh=c.jjcp_cpdh')
  285. ->join('工单_基本资料 g','g.Gd_gdbh=c.jjcp_gdbh')
  286. ->find();
  287. $rows['jjcp_sls'] = db('成品入仓')
  288. ->where(['jjcp_gdbh'=>$rows['jjcp_gdbh'], 'jjcp_cpdh'=>$rows['jjcp_cpdh']])
  289. ->sum('jjcp_sl');
  290. $this->success('成功',$rows);
  291. }
  292. /**
  293. * 获取仓库信息
  294. * @ApiMethod (GET)
  295. * @param string keyword 关键词
  296. */
  297. public function getCk()
  298. {
  299. //get请求
  300. if(!$this->request->isGet()){
  301. $this->error('请求方式错误');
  302. }
  303. $req = $this->request->param();
  304. $key_word = '';
  305. if (isset($req['key_word']) && !empty($req['key_word'])){
  306. $key_word = $req['key_word'];
  307. }
  308. $rs = db('物料_仓库信息')
  309. ->field('rtrim(编号) as 编号, rtrim(名称) as 名称')
  310. ->where('编号|名称','like','%'.$key_word.'%')
  311. ->where('名称','in',['面材仓库','主要产成品'])
  312. ->select();
  313. $this->success('成功',$rs);
  314. }
  315. /**
  316. * 查询印件工序及产品名称
  317. * @ApiMethod (GET)
  318. * @param string $gdbh 工单编号
  319. */
  320. public function getGd()
  321. {
  322. //get请求
  323. if(!$this->request->isGet()){
  324. $this->error('请求方式错误');
  325. }
  326. $req = $this->request->param();
  327. if (isset($req['gdbh']) && !empty($req['gdbh'])){
  328. $gdbh = $req['gdbh'];
  329. }else{
  330. $this->error('参数错误');
  331. }
  332. $rows = db('工单_基本资料')->alias('g')
  333. ->field('g.Gd_gdbh, j.yj_yjno, rtrim(g.销售订单号) as 销售订单号, rtrim(j.yj_Yjdh) as yj_Yjdh, rtrim(j.yj_yjmc) as yj_yjmc, rtrim(g.成品代号) as 成品代号, rtrim(g.成品名称) as 成品名称, rtrim(g.客户料号) as 客户料号')
  334. ->where(['g.Gd_gdbh'=>$gdbh])
  335. ->join(['工单_印件资料'=>'j'],'g.Gd_cpdh=j.yj_yjdh and g.Gd_gdbh=j.Yj_Gdbh')
  336. ->group('j.yj_yjno')
  337. ->order('j.yj_yjno asc')
  338. ->select();
  339. // $rows = db()->table('工单_印件资料')->alias('j')
  340. // ->field('g.Gd_gdbh, j.yj_Yjno as yj_yjno, rtrim(g.销售订单号) as 销售订单号, rtrim(j.yj_Yjdh) as yj_Yjdh,
  341. // rtrim(j.yj_yjmc) as yj_yjmc, rtrim(g.成品代号) as 成品代号, rtrim(g.成品名称) as 成品名称, rtrim(g.客户料号) as 客户料号')
  342. // ->where(['g.Gd_gdbh'=>$gdbh])
  343. // ->join(['工单_基本资料'=>'g'],'g.Gd_gdbh=j.Yj_Gdbh')
  344. // ->select();
  345. foreach ($rows as $key=>$value){
  346. $rows[$key]['gdyj'] = $value['Gd_gdbh'].' -'.sprintf("%02d", $value['yj_yjno']).'-'.$value['yj_yjmc'];
  347. }
  348. $this->success('成功',$rows);
  349. }
  350. /**
  351. * 查询工单数量
  352. * @ApiMethod (GET)
  353. * @param string $gdbh 工单编号
  354. * @param string $cpdh 产品代号
  355. * @param string $rcsl 入仓数量
  356. */
  357. public function getGdsl()
  358. {
  359. //get请求
  360. if(!$this->request->isGet()){
  361. $this->error('请求方式错误');
  362. }
  363. $req = $this->request->param();
  364. if (isset($req['gdbh']) && !empty($req['gdbh'])){
  365. $gdbh = $req['gdbh'];
  366. }else{
  367. $this->error('参数错误');
  368. }
  369. if (isset($req['cpdh']) && !empty($req['cpdh'])){
  370. $cpdh = $req['cpdh'];
  371. }else{
  372. $this->error('参数错误');
  373. }
  374. // if (isset($req['rcsl'])){
  375. // $rcsl = $req['rcsl'];
  376. // }else{
  377. // $this->error('参数错误');
  378. // }
  379. $rows = db('工单_基本资料')->alias('g')
  380. ->field('订单数量*10000 as 订单数量, gd_statu')
  381. ->where(['Gd_gdbh'=>$gdbh, 'Gd_cpdh'=>$cpdh])
  382. ->find();
  383. if (!$rows) $this->error('未查询到记录');
  384. $rows['jjcp_sls'] = db('成品入仓')
  385. ->where(['jjcp_gdbh'=>$gdbh, 'jjcp_cpdh'=>$cpdh])
  386. ->sum('jjcp_sl');
  387. // if ($rows['订单数量']<($rows['jjcp_sls']+$rcsl) || mb_substr($rows['gd_statu'],-3,3)=='已完工'){
  388. // $this->error('已完工或入仓数量超过订单数量',$rows);
  389. // }
  390. $this->success('成功',$rows);
  391. }
  392. /**
  393. * 新增
  394. * @ApiMethod (POST)
  395. * @param string
  396. */
  397. public function add()
  398. {
  399. if(!$this->request->isPost()){
  400. $this->error('请求方式错误');
  401. }
  402. $req = $this->request->param();
  403. $arr = [
  404. 'Sys_id',
  405. '入仓类型', '仓库编号', '仓库名称',
  406. 'jjcp_num',
  407. 'jjcp_gdbh', 'jjcp_yjno', '订单编号',
  408. 'jjcp_cpdh', 'jjcp_cpmc',
  409. '成品编码', '成品名称',
  410. '客户料号',
  411. 'jjcp_smb', 'jjcp_sj',
  412. 'jjcp_sl', 'jjcp_dw',
  413. '机型备注',
  414. 'jjcp_desc'
  415. ];
  416. $data = [];
  417. foreach ($arr as $key => $value){
  418. if (!isset($req[$value])){
  419. $this->error('参数错误',$value,$key+1);
  420. }
  421. $data[$value] = $req[$value];
  422. }
  423. $data['Sys_rq'] = date('Y-m-d H:i:s');
  424. //查询UniqId
  425. $UniqId = db('成品入仓')->max('UniqId');
  426. $data['UniqId'] = $UniqId < 10000000 ? 10000000 : $UniqId + 1;
  427. //开启事务
  428. db()->startTrans();
  429. try{
  430. $sql = db('成品入仓')->fetchSql(true)->insert($data);
  431. $bool = db()->query($sql);
  432. // 提交事务
  433. db()->commit();
  434. } catch (\Exception $e) {
  435. // 回滚事务
  436. db()->rollback();
  437. $this->error($e->getMessage());
  438. }
  439. if($bool===false) $this->error('失败');
  440. $this->success('成功');
  441. }
  442. /**
  443. * 修改
  444. * @ApiMethod (POST)
  445. */
  446. public function edit()
  447. {
  448. if(!$this->request->isPost()){
  449. $this->error('请求方式错误');
  450. }
  451. $req = $this->request->param();
  452. $arr = [
  453. '入仓类型', '仓库编号', '仓库名称',
  454. 'jjcp_num',
  455. 'jjcp_gdbh', 'jjcp_yjno', '订单编号',
  456. 'jjcp_cpdh', 'jjcp_cpmc',
  457. '成品编码', '成品名称',
  458. '客户料号',
  459. 'jjcp_smb', 'jjcp_sj',
  460. 'jjcp_sl', 'jjcp_dw',
  461. '机型备注',
  462. 'jjcp_desc'
  463. ];
  464. $data = [];
  465. foreach ($arr as $key => $value){
  466. if (!isset($req[$value])){
  467. continue;
  468. }
  469. $data[$value] = $req[$value];
  470. }
  471. if (!(isset($req['UniqId']) && trim($req['UniqId'])!='')){
  472. $this->error('参数错误','UniqId',100);
  473. }
  474. if (count($data)==0){
  475. $this->error('参数错误','',111);
  476. }
  477. $data['Mod_rq'] = date('Y-m-d H:i:s');
  478. //开启事务
  479. db()->startTrans();
  480. try{
  481. $sql = db('成品入仓')->where('UniqId',$req['UniqId'])->fetchSql(true)->update($data);
  482. $bool = db()->query($sql);
  483. // 提交事务
  484. db()->commit();
  485. } catch (\Exception $e) {
  486. // 回滚事务
  487. db()->rollback();
  488. $this->error($e->getMessage());
  489. }
  490. if($bool===false) $this->error('失败');
  491. $this->success('成功');
  492. }
  493. /**
  494. * 修改
  495. * @ApiMethod (POST)
  496. * @param string 'UniqId'
  497. */
  498. public function del()
  499. {
  500. if(!$this->request->isPost()){
  501. $this->error('请求方式错误');
  502. }
  503. $req = $this->request->param();
  504. if (!(isset($req['UniqId']) && trim($req['UniqId'])!='')){
  505. $this->error('参数错误','UniqId',100);
  506. }
  507. //开启事务
  508. db()->startTrans();
  509. try{
  510. $bool = db('成品入仓')->where('UniqId',$req['UniqId'])->delete();
  511. // 提交事务
  512. db()->commit();
  513. } catch (\Exception $e) {
  514. // 回滚事务
  515. db()->rollback();
  516. $this->error($e->getMessage());
  517. }
  518. if($bool===false) $this->error('失败');
  519. $this->success('成功');
  520. }
  521. /**
  522. * excel导出
  523. * @ApiMethod (POST)
  524. * @param string date
  525. * @param string sys_id
  526. * @param array fields
  527. */
  528. public function export(){
  529. if(!$this->request->isGet()){
  530. $this->error('请求方式错误');
  531. }
  532. $req = $this->request->param();
  533. if (!isset($req['date'])) $this->error('参数缺失');
  534. if (!(isset($req['fields']) && count($req['fields'])!=0)){
  535. $this->error('参数错误','fields',100);
  536. }
  537. if(strpos($req['date'],'-')){
  538. $where = ['c.Sys_rq'=>['like',$req['date'].'%']];
  539. }else if(empty($req['date'])){
  540. $where = [];
  541. }else{
  542. $where = ['c.jjcp_gdbh'=>$req['date']];
  543. }
  544. if (isset($req['sys_id']) && !empty($req['sys_id'])){
  545. $where['c.Sys_id'] = ['LIKE',$req['sys_id'].'%'];
  546. }
  547. $arr = [
  548. '入仓类型' =>['入仓类型'],
  549. '仓库编号' =>['仓库编号'],
  550. '仓库名称' =>['仓库名称'],
  551. 'jjcp_num' =>['入仓单号'],
  552. 'jjcp_gdbh' =>['工单编号'],
  553. 'jjcp_yjno' =>['印件号'],
  554. 'jjcp_sl' =>['入仓数量'],
  555. 'jjcp_sls' =>['累计入仓数量'],
  556. '订单数量' =>['订单数量'],
  557. '完成率' =>['完成率'],
  558. 'jjcp_dw' =>['单位'],
  559. 'jjcp_sj' =>['入仓时间'],
  560. 'jjcp_smb' =>['首末板'],
  561. 'jjcp_cpdh' =>['印件代号'],
  562. 'jjcp_cpmc' =>['印件名称'],
  563. '成品编码' =>['产品编号'],
  564. '成品名称' =>['产品名称'],
  565. '客户料号' =>['客户料号'],
  566. 'jjcp_desc' =>['备注'],
  567. '客户编号' =>['客户编号'],
  568. 'Gd_客户名称' =>['客户名称'],
  569. '最近入仓日期' =>['最近入仓日期'],
  570. '机型备注' =>['机型备注'],
  571. ];
  572. $data[0] = [];
  573. foreach ($req['fields'] as $k=>$v){
  574. if(array_key_exists($v,$arr)){
  575. array_push($data[0],$arr[$v][0]);
  576. }
  577. }
  578. $num = db('成品入仓')->alias('c')
  579. ->where($where)
  580. ->where('g.Gd_cpdh=c.jjcp_cpdh')
  581. ->join('工单_基本资料 g','g.Gd_gdbh=c.jjcp_gdbh')
  582. ->count();
  583. $rows = [];
  584. for($i=1;$i<=ceil($num/10000);$i++){
  585. $p = $i == ceil($num/10000) ? $num%10000 : 10000;
  586. $r = db('成品入仓')->alias('c')
  587. ->field('rtrim(c.入仓类型) as 入仓类型, rtrim(c.仓库编号) as 仓库编号, rtrim(c.仓库名称) as 仓库名称,
  588. rtrim(c.jjcp_num) as jjcp_num, c.jjcp_gdbh,
  589. c.jjcp_yjno, c.jjcp_sl, g.订单数量, rtrim(c.jjcp_dw) as jjcp_dw, LEFT(c.jjcp_sj, 10) as jjcp_sj,
  590. rtrim(c.jjcp_smb) as jjcp_smb, rtrim(c.jjcp_cpdh) as jjcp_cpdh, rtrim(c.jjcp_cpmc) as jjcp_cpmc,
  591. rtrim(c.成品编码) as 成品编码, rtrim(c.成品名称) as 成品名称,
  592. rtrim(c.客户料号) as 客户料号, rtrim(c.jjcp_desc) as jjcp_desc, LEFT(c.成品编码,'.config('product_code_digit').') as 客户编号, rtrim(g.Gd_客户名称) as Gd_客户名称,
  593. rtrim(c.机型备注) as 机型备注')
  594. ->where($where)
  595. ->where('g.Gd_cpdh=c.jjcp_cpdh')
  596. ->join('工单_基本资料 g','g.Gd_gdbh=c.jjcp_gdbh')
  597. ->order('c.UniqId desc')
  598. ->limit($i,$p)
  599. ->select();
  600. $rows = array_merge($rows,$r);
  601. }
  602. foreach ($rows as $key=>$value) {
  603. $row = db('成品入仓')
  604. ->field('LEFT(Sys_rq, 10) as Sys_rq,jjcp_sl')
  605. ->where(['jjcp_gdbh'=>$value['jjcp_gdbh'], 'jjcp_cpdh'=>$value['jjcp_cpdh']])
  606. ->order('Sys_rq desc')
  607. ->select();
  608. $subArray = [];
  609. foreach ($arr as $k=>$v){
  610. if($k=='jjcp_sls'){
  611. $subArray[$k] = 0;
  612. foreach ($row as $n) {
  613. $subArray[$k] += $n['jjcp_sl'];
  614. }
  615. }else if($k=='完成率'){
  616. if ($value['订单数量']!=0){
  617. $subArray[$k] = 0;
  618. foreach ($row as $n) {
  619. $subArray[$k] += $n['jjcp_sl'];
  620. }
  621. $subArray[$k] = number_format($subArray[$k]/$value['订单数量']/100,2);
  622. }else{
  623. $subArray[$k] = '';
  624. }
  625. }else if($k=='最近入仓日期'){
  626. $subArray[$k] = $row[0]['Sys_rq'];
  627. }else{
  628. $subArray[$k] = $rows[$key][$k];
  629. }
  630. }
  631. array_push($data,$subArray);
  632. }
  633. $this->success('成功',['file_name'=>$req['file_name'],'data'=>$data]);
  634. }
  635. /**
  636. * 月度A
  637. * @ApiMethod (POST)
  638. * @param string start_time
  639. * @param string end_time
  640. * @param string file_name
  641. * @param array fields
  642. */
  643. public function monthExportA(){
  644. if(!$this->request->isGet()){
  645. $this->error('请求方式错误');
  646. }
  647. $req = $this->request->param();
  648. $arr = [
  649. 'start_time', 'end_time', 'file_name'
  650. ];
  651. foreach ($arr as $key => $value){
  652. if (!isset($req[$value])){
  653. $this->error('参数错误',$value,$key+1);
  654. }
  655. }
  656. if (!(isset($req['fields']) && count($req['fields'])!=0)){
  657. $this->error('参数错误','fields',100);
  658. }
  659. $arr = [
  660. '入仓类型' =>['入仓类型'],
  661. '仓库编号' =>['仓库编号'],
  662. '仓库名称' =>['仓库名称'],
  663. 'jjcp_gdbh' =>['工单编号'],
  664. 'jjcp_cpdh' =>['入仓存货编号'],
  665. 'jjcp_cpmc' =>['入仓存货名称'],
  666. 'jjcp_sl' =>['入仓数量'],
  667. 'jjcp_dw' =>['单位'],
  668. 'jjcp_sj' =>['入仓时间'],
  669. 'jjcp_smb' =>['首末板'],
  670. 'jjcp_num' =>['单据编号'],
  671. '订单编号' =>['订单编号'],
  672. ];
  673. $data[0] = [];
  674. foreach ($req['fields'] as $k=>$v){
  675. if(array_key_exists($v,$arr)){
  676. array_push($data[0],$arr[$v][0]);
  677. }
  678. }
  679. //客户编号
  680. $rows = db('成品入仓')->alias('c')
  681. ->field('rtrim(c.入仓类型) as 入仓类型, rtrim(c.仓库编号) as 仓库编号, rtrim(c.仓库名称) as 仓库名称,
  682. c.jjcp_gdbh, rtrim(c.jjcp_cpdh) as jjcp_cpdh, rtrim(c.jjcp_cpmc) as jjcp_cpmc,
  683. c.jjcp_sl, rtrim(c.jjcp_dw) as jjcp_dw, c.jjcp_sj,
  684. rtrim(c.jjcp_smb) as jjcp_smb,
  685. rtrim(c.jjcp_num) as jjcp_num, rtrim(c.订单编号) as 订单编号
  686. ')
  687. ->where('c.jjcp_sj','between time',[$req['start_time'], $req['end_time']])
  688. ->order('c.jjcp_sj asc')
  689. ->join('工单_基本资料 g','g.Gd_gdbh=c.jjcp_gdbh')
  690. ->where('g.Gd_cpdh=c.jjcp_cpdh')
  691. ->select();
  692. foreach ($rows as $key=>$value) {
  693. $subArray = [];
  694. foreach ($arr as $k=>$v){
  695. $subArray[$k] = $rows[$key][$k];
  696. }
  697. array_push($data,$subArray);
  698. }
  699. $this->success('成功',['file_name'=>$req['file_name'],'data'=>$data]);
  700. }
  701. /**
  702. * 月度B
  703. * @ApiMethod (POST)
  704. * @param string start_time
  705. * @param string end_time
  706. * @param string file_name
  707. * @param array fields
  708. */
  709. public function monthExportB(){
  710. if(!$this->request->isGet()){
  711. $this->error('请求方式错误');
  712. }
  713. $req = $this->request->param();
  714. $arr = [
  715. 'start_time', 'end_time', 'file_name'
  716. ];
  717. foreach ($arr as $key => $value){
  718. if (!isset($req[$value])){
  719. $this->error('参数错误',$value,$key+1);
  720. }
  721. }
  722. if (!(isset($req['fields']) && count($req['fields'])!=0)){
  723. $this->error('参数错误','fields',100);
  724. }
  725. $arr = [
  726. '入仓类型' =>['入仓类型'],
  727. '客户编号' =>['客户编号'],
  728. '客户名称' =>['客户名称'],
  729. '产品类别' =>['产品类别'],
  730. 'jjcp_gdbh' =>['工单编号'],
  731. '成品编码' =>['成品编码'],
  732. '成品名称' =>['成品名称'],
  733. 'jjcp_sls' =>['入仓数量'],
  734. '大箱产量' =>['大箱产量'],
  735. '产品单价' =>['万张单价'],
  736. '产值万元' =>['产值万元'],
  737. ];
  738. $data[0] = [];
  739. foreach ($req['fields'] as $k=>$v){
  740. if(array_key_exists($v,$arr)){
  741. array_push($data[0],$arr[$v][0]);
  742. }
  743. }
  744. $rows1 = db('成品入仓')->alias('c')
  745. ->field('rtrim(c.入仓类型) as 入仓类型, LEFT(c.成品编码,'.config('product_code_digit').') as 客户编号, rtrim(b.客户名称) as 客户名称,
  746. rtrim(b.产品类别) as 产品类别, c.jjcp_gdbh,
  747. rtrim(c.成品编码) as 成品编码, rtrim(c.成品名称) as 成品名称
  748. ')
  749. ->where('c.jjcp_sj','between time',[$req['start_time'], $req['end_time']])
  750. ->order('客户编号 asc,b.产品类别 desc,c.成品编码 asc,c.jjcp_gdbh asc')
  751. ->join('产品_基本资料 b','b.产品编号=c.jjcp_cpdh')
  752. ->group('c.jjcp_gdbh')
  753. ->select();
  754. $rows2 = db('成品入仓')
  755. ->field('rtrim(入仓类型) as 入仓类型, rtrim(成品编码) as 客户编号,
  756. rtrim(成品编码) as 客户名称, rtrim(成品编码) as 产品类别,
  757. jjcp_gdbh,rtrim(成品编码) as 成品编码, rtrim(成品名称) as 成品名称
  758. ')
  759. ->where('jjcp_sj','between time',[$req['start_time'], $req['end_time']])
  760. ->where('成品编码','')
  761. ->order('jjcp_gdbh asc')
  762. ->group('jjcp_gdbh')
  763. ->select();
  764. $rows = array_merge($rows2,$rows1);
  765. $num = db('工单_基本资料')->count();
  766. $arr1 = db('工单_基本资料')->limit($num)
  767. ->column('CONCAT(Gd_gdbh, "-", rtrim(Gd_cpdh)) AS gdcp, 产品单价 as 万张单价');
  768. $brr = array_column($rows,'jjcp_gdbh');
  769. $brr = db('成品入仓')
  770. ->where('jjcp_gdbh', 'in', $brr)
  771. ->group('jjcp_gdbh')
  772. ->column('jjcp_gdbh, sum(jjcp_sl)');
  773. foreach ($rows as $key=>$value) {
  774. $subArray = [];
  775. foreach ($arr as $k=>$v){
  776. if($k=='jjcp_sls'){
  777. $subArray[$k] = $brr[$value['jjcp_gdbh']];
  778. }else if ($k=='大箱产量'){
  779. if($value['产品类别']=='条盒'){
  780. $subArray[$k] = $brr[$value['jjcp_gdbh']]/250;
  781. }else if($value['产品类别']=='小盒'){
  782. $subArray[$k] = $brr[$value['jjcp_gdbh']]/2500;
  783. }else{
  784. $subArray[$k] = 0;
  785. }
  786. }else if ($k=='产品单价'){
  787. if($value['产品类别']!=''){
  788. if (array_key_exists($value['jjcp_gdbh'].'-'.$value['成品编码'],$arr1)){
  789. $subArray[$k] = floatval(number_format($arr1[$value['jjcp_gdbh'].'-'.$value['成品编码']],4));
  790. }
  791. }else{
  792. $subArray[$k] = 0;
  793. }
  794. }else if ($k=='产值万元'){
  795. if($value['产品类别']!=''){
  796. if (array_key_exists($value['jjcp_gdbh'].'-'.$value['成品编码'],$arr1)){
  797. $subArray[$k] = floatval(number_format($arr1[$value['jjcp_gdbh'].'-'.$value['成品编码']]*$brr[$value['jjcp_gdbh']]/100000000,2));
  798. }
  799. }else{
  800. $subArray[$k] = 0;
  801. }
  802. }else{
  803. $subArray[$k] = $rows[$key][$k];
  804. }
  805. }
  806. array_push($data,$subArray);
  807. }
  808. $this->success('成功',['file_name'=>$req['file_name'],'data'=>$data]);
  809. }
  810. /**
  811. * 各日统计列表
  812. * @ApiMethod (GET)
  813. * @param string $date 时间
  814. * @param string $sys_id 用户
  815. */
  816. public function getDayList()
  817. {
  818. //get请求
  819. if(!$this->request->isGet()){
  820. $this->error('请求方式错误');
  821. }
  822. $req = $this->request->param();
  823. $page = 1;
  824. $limit = 15;
  825. if (isset($req['page']) && !empty($req['page'])) $page = $req['page'];
  826. if (isset($req['limit']) && !empty($req['limit'])) $limit = $req['limit'];
  827. $where = [
  828. 'c.jjcp_smb'=>['<>',''],
  829. ];
  830. if (isset($req['key_word']) && !empty($req['key_word'])){
  831. $where['c.jjcp_sj | c.jjcp_gdbh | c.jjcp_cpmc | c.jjcp_cpdh | g.实际投料'] = ['like','%'.$req['key_word'].'%'];
  832. }
  833. //客户编号
  834. $rows = db('成品入仓')->alias('c')
  835. ->field('LEFT(c.jjcp_sj, 10) as jjcp_sj, c.jjcp_gdbh, rtrim(c.jjcp_cpmc) as jjcp_cpmc,
  836. rtrim(c.jjcp_cpdh) as jjcp_cpdh, g.实际投料')
  837. ->where($where)
  838. ->where('g.Gd_cpdh=c.jjcp_cpdh')
  839. ->join('工单_基本资料 g','g.Gd_gdbh=c.jjcp_gdbh')
  840. ->order('c.jjcp_sj desc')
  841. ->group('c.jjcp_gdbh, c.jjcp_cpdh')
  842. ->page($page,$limit)
  843. ->select();
  844. $total = db('成品入仓')->alias('c')
  845. ->where($where)
  846. ->where('g.Gd_cpdh=c.jjcp_cpdh')
  847. ->join('工单_基本资料 g','g.Gd_gdbh=c.jjcp_gdbh')
  848. ->group('c.jjcp_gdbh, c.jjcp_cpdh')
  849. ->count();
  850. $brr = db('成品入仓')
  851. ->group('jjcp_gdbh,jjcp_cpdh')
  852. ->column('CONCAT(jjcp_gdbh, "-", rtrim(jjcp_cpdh)), sum(jjcp_sl)');
  853. foreach ($rows as $key=>$value) {
  854. $rows[$key]['实际投料'] = (string)floatval($value['实际投料']*10000);
  855. if(array_key_exists($value['jjcp_gdbh'].'-'.$value['jjcp_cpdh'],$brr)){
  856. $rows[$key]['入仓数量'] = $brr[$value['jjcp_gdbh'].'-'.$value['jjcp_cpdh']];
  857. if($rows[$key]['实际投料']!=0){
  858. $rows[$key]['投入产出率'] = number_format($rows[$key]['入仓数量']/$rows[$key]['实际投料']*100,2);
  859. }else{
  860. $rows[$key]['投入产出率'] = '';
  861. }
  862. }else{
  863. $rows[$key]['入仓数量'] = '';
  864. $rows[$key]['投入产出率'] = '';
  865. }
  866. }
  867. $data = [
  868. 'total' => $total,
  869. 'rows' => $rows,
  870. ];
  871. $this->success('成功',$data);
  872. }
  873. /**
  874. * 各日统计列表excel导出
  875. * @ApiMethod (POST)
  876. * @param string file_name
  877. * @param array fields
  878. */
  879. public function dayExport()
  880. {
  881. //get请求
  882. if(!$this->request->isPost()){
  883. $this->error('请求方式错误');
  884. }
  885. $req = $this->request->param();
  886. if (!isset($req['file_name'])){
  887. $this->error('参数错误','file_name');
  888. }
  889. if (!(isset($req['fields']) && count($req['fields'])!=0)){
  890. $this->error('参数错误','fields',100);
  891. }
  892. if (isset($req['key_word']) && !empty($req['key_word'])){
  893. $where['c.jjcp_sj | c.jjcp_gdbh | c.jjcp_cpmc | c.jjcp_cpdh | g.实际投料'] = ['like','%'.$req['key_word'].'%'];
  894. }
  895. $arr = [
  896. 'jjcp_gdbh' =>['jjcp_gdbh'],
  897. 'jjcp_yjno' =>['jjcp_yjno'],
  898. 'jjcp_cpmc' =>['印件名称'],
  899. '成品编码' =>['成品编码'],
  900. '成品名称' =>['成品名称'],
  901. '实际投料' =>['实际投料'],
  902. 'jjcp_sls' =>['入仓数量'],
  903. 'jjcp_sj' =>['完工日期'],
  904. ];
  905. $data[0] = [];
  906. foreach ($req['fields'] as $k=>$v){
  907. if(array_key_exists($v,$arr)){
  908. array_push($data[0],$arr[$v][0]);
  909. }
  910. }
  911. $where = [
  912. 'c.jjcp_smb'=>['<>','']
  913. ];
  914. //客户编号
  915. $rows = db('成品入仓')->alias('c')
  916. ->field('c.jjcp_gdbh, c.jjcp_yjno, rtrim(c.jjcp_cpmc) as jjcp_cpmc, rtrim(c.jjcp_cpdh) as jjcp_cpdh,
  917. rtrim(c.成品编码) as 成品编码, rtrim(c.成品名称) as 成品名称, sum(jjcp_sl) as jjcp_sls,
  918. g.实际投料, LEFT(c.jjcp_sj, 10) as jjcp_sj
  919. ')
  920. ->where($where)
  921. ->where('g.Gd_cpdh=c.jjcp_cpdh')
  922. ->join('工单_基本资料 g','g.Gd_gdbh=c.jjcp_gdbh')
  923. ->order('c.jjcp_sj desc')
  924. ->group('c.jjcp_gdbh, c.jjcp_cpdh')
  925. ->select();
  926. foreach ($rows as $key=>$value) {
  927. $subArray = [];
  928. foreach ($arr as $k=>$v){
  929. if($k=='实际投料'){
  930. $subArray[$k] = (string)floatval($value['实际投料']*10000);
  931. }else{
  932. $subArray[$k] = $rows[$key][$k];
  933. }
  934. }
  935. array_push($data,$subArray);
  936. }
  937. $this->success('成功',['file_name'=>$req['file_name'],'data'=>$data]);
  938. }
  939. /**
  940. * 入仓末板数据统计列表
  941. * @ApiMethod (GET)
  942. * @param string $date 时间
  943. * @param string $sys_id 用户
  944. */
  945. public function mbList()
  946. {
  947. //get请求
  948. if(!$this->request->isGet()){
  949. $this->error('请求方式错误');
  950. }
  951. $req = $this->request->param();
  952. // $page = 1;
  953. // $limit = 15;
  954. // if (isset($req['page']) && !empty($req['page'])) $page = $req['page'];
  955. // if (isset($req['limit']) && !empty($req['limit'])) $limit = $req['limit'];
  956. $date = date('Y-m-d',strtotime('-3 month'));
  957. $arr1 = db('db_包装产量预报')
  958. ->field('sczl_gdbh1, sczl_gdbh2, sczl_gdbh3, sczl_gdbh4, sczl_gdbh5, sczl_gdbh6,
  959. cast(substr(sczl_yjGx1,1,2) as signed) as sczl_yjGx1, cast(substr(sczl_yjGx2,1,2) as signed) as sczl_yjGx2,
  960. cast(substr(sczl_yjGx3,1,2) as signed) as sczl_yjGx3, cast(substr(sczl_yjGx4,1,2) as signed) as sczl_yjGx4,
  961. cast(substr(sczl_yjGx5,1,2) as signed) as sczl_yjGx5, cast(substr(sczl_yjGx6,1,2) as signed) as sczl_yjGx6,
  962. (sczl_cl1*sczl_PgCl1+sczl_clAdd1) as sczl_cls1,
  963. (sczl_cl2*sczl_PgCl2+sczl_clAdd2) as sczl_cls2,
  964. (sczl_cl3*sczl_PgCl3+sczl_clAdd3) as sczl_cls3,
  965. (sczl_cl4*sczl_PgCl4+sczl_clAdd4) as sczl_cls4,
  966. (sczl_cl5*sczl_PgCl5+sczl_clAdd5) as sczl_cls5,
  967. (sczl_cl6*sczl_PgCl6+sczl_clAdd6) as sczl_cls6
  968. ')
  969. ->where('sczl_rq','>=',$date)
  970. ->select();
  971. $data1 = [];
  972. foreach ($arr1 as $k=>$v){
  973. for ($i=1;$i<=6;$i++){
  974. if (!empty($v['sczl_gdbh'.$i])){
  975. $v['sczl_gdbh'.$i] = strtoupper($v['sczl_gdbh'.$i]);
  976. if(array_key_exists($v['sczl_gdbh'.$i].'-'.$v['sczl_yjGx'.$i],$data1)){
  977. $data1[$v['sczl_gdbh'.$i].'-'.$v['sczl_yjGx'.$i]] += $v['sczl_cls'.$i];
  978. }else{
  979. $data1[$v['sczl_gdbh'.$i].'-'.$v['sczl_yjGx'.$i]] = $v['sczl_cls'.$i];
  980. }
  981. }
  982. }
  983. }
  984. krsort($data1);
  985. //成品入仓中jjcp_smb不为空的工单
  986. // $rows1 = db('成品入仓')
  987. // ->where('jjcp_smb','<>','')
  988. // ->order('jjcp_gdbh desc')
  989. // ->column("CONCAT(jjcp_gdbh, '-', jjcp_yjno) AS gdyj, UniqId");
  990. $rows2 = db('成品入仓')
  991. ->where('jjcp_sj','>=',$date)
  992. ->group('jjcp_gdbh, jjcp_cpdh')
  993. ->column("CONCAT( jjcp_gdbh, '-', jjcp_yjno) AS gdyj, max(jjcp_smb) as jjcp_smb,
  994. sum(jjcp_sl) as jjcp_sls, left(max(jjcp_sj),10) as jjcp_sj,UniqId");
  995. // $rows3 = db('工单_印件资料')->cache(true,86400)
  996. // ->group('Yj_Gdbh, yj_Yjno')
  997. // ->column("CONCAT( Yj_Gdbh, '-', yj_Yjno) AS gdyj,
  998. // Yj_Gdbh, yj_Yjno, yj_yjmc, yj_成品数量, yj_实际投料");
  999. $data = [];
  1000. foreach($data1 as $key=>$value){
  1001. // if(!array_key_exists($key,$rows1)){
  1002. $subArray = [];
  1003. $gdbh = strtoupper(explode('-',$key)[0]);
  1004. $yjno = explode('-',$key)[1];
  1005. $res = db('工单_印件资料')
  1006. ->where('Yj_Gdbh',$gdbh)
  1007. ->where('yj_Yjno',$yjno)
  1008. ->field('Yj_Gdbh, yj_Yjno, yj_yjmc, yj_成品数量, (yj_平张投料 * yj_ks * yj_ls) as 投料')
  1009. ->find();
  1010. if(!empty($res)){
  1011. $subArray['Yj_Gdbh'] = $res['Yj_Gdbh'];
  1012. $subArray['yj_Yjno'] = $res['yj_Yjno'];
  1013. $subArray['yj_yjmc'] = trim($res['yj_yjmc']);
  1014. $subArray['yj_成品数量'] = (string)floatval($res['yj_成品数量']*10000);
  1015. $subArray['yj_实际投料'] = (string)floatval($res['投料']);
  1016. }else{
  1017. $subArray['Yj_Gdbh'] = '';
  1018. $subArray['yj_Yjno'] = '';
  1019. $subArray['yj_yjmc'] = '';
  1020. $subArray['yj_成品数量'] = '';
  1021. $subArray['yj_实际投料'] = '';
  1022. }
  1023. if(array_key_exists($key,$rows2)){
  1024. $subArray['jjcp_smb'] = $rows2[$key]['jjcp_smb'];
  1025. $subArray['jjcp_sls'] = $rows2[$key]['jjcp_sls'];
  1026. $subArray['jjcp_sj'] = $rows2[$key]['jjcp_sj'];
  1027. }else{
  1028. $subArray['jjcp_smb'] = '';
  1029. $subArray['jjcp_sls'] = '';
  1030. $subArray['jjcp_sj'] = '';
  1031. }
  1032. $subArray['sczl_cls'] = (string)floatval($value);
  1033. array_push($data,$subArray);
  1034. }
  1035. // }
  1036. // $rows = db('db_包装产量预报')
  1037. // ->field('sczl_rq,sczl_gdbh1,sczl_gdbh2,sczl_gdbh3,sczl_gdbh4,sczl_gdbh5,sczl_gdbh6,Sys_rq,mod_rq,UniqId')
  1038. // ->where('Sys_rq','>=','2023-10-25')
  1039. // ->select();
  1040. // $uniqueValues = [];
  1041. // foreach ($rows as $row) {
  1042. // $gdbhArray = array($row['sczl_gdbh1'], $row['sczl_gdbh2'], $row['sczl_gdbh3'], $row['sczl_gdbh4'], $row['sczl_gdbh5'], $row['sczl_gdbh6']);
  1043. // $uniqueValues = array_merge($uniqueValues, array_unique($gdbhArray));
  1044. // }
  1045. // $uniqueValues = array_values(array_unique($uniqueValues));
  1046. // halt($uniqueValues);
  1047. // $rows = db('成品入仓')->alias('c')
  1048. // ->field('c.jjcp_gdbh, c.jjcp_yjno, rtrim(c.jjcp_cpmc) as jjcp_cpmc,
  1049. // y.yj_成品数量, y.yj_实际投料, rtrim(c.jjcp_cpdh) as jjcp_cpdh, rtrim(c.jjcp_smb) as jjcp_smb,
  1050. // sum(c.jjcp_sl) as jjcp_sls, left(max(c.Sys_rq),10) as Sys_rq')
  1051. // ->where($where)
  1052. // ->where('y.yj_Yjdh=c.jjcp_cpdh')
  1053. // ->join('工单_印件资料 y','y.Yj_Gdbh=c.jjcp_gdbh')
  1054. // ->order('c.jjcp_gdbh desc, c.jjcp_yjno asc')
  1055. // ->group('c.jjcp_gdbh, c.jjcp_cpdh')
  1056. // ->page($page,$limit)
  1057. // ->select();
  1058. // $total = db('成品入仓')->alias('c')
  1059. // ->where($where)
  1060. // ->where('y.yj_Yjdh=c.jjcp_cpdh')
  1061. // ->join('工单_印件资料 y','y.Yj_Gdbh=c.jjcp_gdbh')
  1062. // ->group('c.jjcp_gdbh, c.jjcp_cpdh')
  1063. // ->count();
  1064. // $brr = db('成品入仓')
  1065. // ->group('jjcp_gdbh,jjcp_cpdh')
  1066. // ->column('CONCAT(jjcp_gdbh, "-", rtrim(jjcp_cpdh)), sum(jjcp_sl)');
  1067. // $num = db('db_包装产量预报')->count();
  1068. // $arr1 = db('db_包装产量预报')
  1069. // ->field('sczl_gdbh1, sczl_gdbh2, sczl_gdbh3, sczl_gdbh4, sczl_gdbh5, sczl_gdbh6,
  1070. // substr(sczl_yjGx1,2,1) as sczl_yjGx1, substr(sczl_yjGx2,2,1) as sczl_yjGx2,
  1071. // substr(sczl_yjGx3,2,1) as sczl_yjGx3, substr(sczl_yjGx4,2,1) as sczl_yjGx4,
  1072. // substr(sczl_yjGx5,2,1) as sczl_yjGx5, substr(sczl_yjGx6,2,1) as sczl_yjGx6,
  1073. // (sczl_cl1*sczl_PgCl1+sczl_clAdd1) as sczl_cls1,
  1074. // (sczl_cl2*sczl_PgCl2+sczl_clAdd2) as sczl_cls2,
  1075. // (sczl_cl3*sczl_PgCl3+sczl_clAdd3) as sczl_cls3,
  1076. // (sczl_cl4*sczl_PgCl4+sczl_clAdd4) as sczl_cls4,
  1077. // (sczl_cl5*sczl_PgCl5+sczl_clAdd5) as sczl_cls5,
  1078. // (sczl_cl6*sczl_PgCl6+sczl_clAdd6) as sczl_cls6
  1079. // ')
  1080. // ->limit($num)
  1081. // ->select();
  1082. // $data1 = [];
  1083. // foreach ($arr1 as $k=>$v){
  1084. // for ($i=1;$i<=6;$i++){
  1085. // if(array_key_exists($v['sczl_gdbh'.$i].'-'.$v['sczl_yjGx'.$i],$data1)){
  1086. // $data1[$v['sczl_gdbh'.$i].'-'.$v['sczl_yjGx'.$i]] += $v['sczl_cls'.$i];
  1087. // }else{
  1088. // $data1[$v['sczl_gdbh'.$i].'-'.$v['sczl_yjGx'.$i]] = $v['sczl_cls'.$i];
  1089. // }
  1090. // }
  1091. // }
  1092. // foreach ($rows as $key=>$value) {
  1093. // $rows[$key]['yj_成品数量'] = (string)floatval($value['yj_成品数量']*10000);
  1094. // $rows[$key]['yj_实际投料'] = (string)floatval($value['yj_实际投料']*10000);
  1095. // if(array_key_exists($value['jjcp_gdbh'].'-'.$value['jjcp_yjno'],$data1)){
  1096. // $rows[$key]['包装产量'] = $data1[$value['jjcp_gdbh'].'-'.$value['jjcp_yjno']];
  1097. // }else{
  1098. // $rows[$key]['包装产量'] = '';
  1099. // }
  1100. // if(array_key_exists($value['jjcp_gdbh'].'-'.$value['jjcp_cpdh'],$brr)){
  1101. // $rows[$key]['入仓数量'] = $brr[$value['jjcp_gdbh'].'-'.$value['jjcp_cpdh']];
  1102. // }else{
  1103. // $rows[$key]['入仓数量'] = '';
  1104. // }
  1105. // if($value['jjcp_smb'] !=''){
  1106. // $rows[$key]['状态'] = '完工';
  1107. // $rows[$key]['缺数'] = (int)$rows[$key]['yj_成品数量']-(int)$rows[$key]['包装产量'];
  1108. // }else{
  1109. // $rows[$key]['状态'] = '';
  1110. // $rows[$key]['缺数'] = '';
  1111. // }
  1112. // }
  1113. $data = [
  1114. 'total' => count($data),
  1115. 'rows' => $data,
  1116. ];
  1117. $this->success('成功',$data);
  1118. }
  1119. /**
  1120. * 入仓末板数据统计列表excel导出
  1121. * @ApiMethod (POST)
  1122. * @param string file_name
  1123. * @param array fields
  1124. */
  1125. public function mbExport()
  1126. {
  1127. //get请求
  1128. if(!$this->request->isPost()){
  1129. $this->error('请求方式错误');
  1130. }
  1131. $req = $this->request->param();
  1132. if (!isset($req['file_name'])){
  1133. $this->error('参数错误','file_name');
  1134. }
  1135. if (!(isset($req['fields']) && count($req['fields'])!=0)){
  1136. $this->error('参数错误','fields',100);
  1137. }
  1138. $arr = [
  1139. 'Yj_Gdbh' =>['工单编号'],
  1140. 'yj_Yjno' =>['印件号'],
  1141. 'yj_yjmc' =>['印件名称'],
  1142. 'yj_成品数量' =>['计划交货数量'],
  1143. 'yj_实际投料' =>['印件投料'],
  1144. 'sczl_cls' =>['包装产量'],
  1145. 'jjcp_sj' =>['最近入仓时间'],
  1146. 'jjcp_sls' =>['入仓产量'],
  1147. 'status' =>['完工'],
  1148. '缺数' =>['缺数'],
  1149. ];
  1150. $data[0] = [];
  1151. foreach ($req['fields'] as $k=>$v){
  1152. if(array_key_exists($v,$arr)){
  1153. array_push($data[0],$arr[$v][0]);
  1154. }
  1155. }
  1156. $date = date('Y-m-d',strtotime('-3 month'));
  1157. $arr1 = db('db_包装产量预报')
  1158. ->field('sczl_gdbh1, sczl_gdbh2, sczl_gdbh3, sczl_gdbh4, sczl_gdbh5, sczl_gdbh6,
  1159. cast(substr(sczl_yjGx1,1,2) as signed) as sczl_yjGx1, cast(substr(sczl_yjGx2,1,2) as signed) as sczl_yjGx2,
  1160. cast(substr(sczl_yjGx3,1,2) as signed) as sczl_yjGx3, cast(substr(sczl_yjGx4,1,2) as signed) as sczl_yjGx4,
  1161. cast(substr(sczl_yjGx5,1,2) as signed) as sczl_yjGx5, cast(substr(sczl_yjGx6,1,2) as signed) as sczl_yjGx6,
  1162. (sczl_cl1*sczl_PgCl1+sczl_clAdd1) as sczl_cls1,
  1163. (sczl_cl2*sczl_PgCl2+sczl_clAdd2) as sczl_cls2,
  1164. (sczl_cl3*sczl_PgCl3+sczl_clAdd3) as sczl_cls3,
  1165. (sczl_cl4*sczl_PgCl4+sczl_clAdd4) as sczl_cls4,
  1166. (sczl_cl5*sczl_PgCl5+sczl_clAdd5) as sczl_cls5,
  1167. (sczl_cl6*sczl_PgCl6+sczl_clAdd6) as sczl_cls6
  1168. ')
  1169. ->where('sczl_rq','>=',$date)
  1170. ->select();
  1171. $data1 = [];
  1172. foreach ($arr1 as $k=>$v){
  1173. for ($i=1;$i<=6;$i++){
  1174. if(array_key_exists($v['sczl_gdbh'.$i].'-'.$v['sczl_yjGx'.$i],$data1)){
  1175. $data1[$v['sczl_gdbh'.$i].'-'.$v['sczl_yjGx'.$i]] += $v['sczl_cls'.$i];
  1176. }else{
  1177. $data1[$v['sczl_gdbh'.$i].'-'.$v['sczl_yjGx'.$i]] = $v['sczl_cls'.$i];
  1178. }
  1179. }
  1180. }
  1181. krsort($data1);
  1182. //成品入仓中jjcp_smb不为空的工单
  1183. $rows1 = db('成品入仓')
  1184. ->where('jjcp_smb','<>','')
  1185. ->order('jjcp_gdbh desc')
  1186. ->column("CONCAT(jjcp_gdbh, '-', jjcp_yjno) AS gdyj, UniqId");
  1187. $rows2 = db('成品入仓')
  1188. ->where('jjcp_sj','>=',$date)
  1189. ->group('jjcp_gdbh, jjcp_cpdh')
  1190. ->column("CONCAT( jjcp_gdbh, '-', jjcp_yjno) AS gdyj, jjcp_smb,
  1191. sum(jjcp_sl) as jjcp_sls, left(max(jjcp_sj),10) as jjcp_sj");
  1192. $rows3 = db('工单_印件资料')->cache(true,86400)
  1193. ->group('Yj_Gdbh, yj_Yjno')
  1194. ->column("CONCAT( Yj_Gdbh, '-', yj_Yjno) AS gdyj,
  1195. Yj_Gdbh, yj_Yjno, yj_yjmc, yj_成品数量, yj_实际投料");
  1196. foreach($data1 as $key=>$value){
  1197. if(!array_key_exists($key,$rows1)){
  1198. $subArray = [];
  1199. foreach ($arr as $k=>$v){
  1200. if($k=='yj_成品数量' || $k=='yj_实际投料'){
  1201. if(array_key_exists($key,$rows3)){
  1202. $subArray[$k] = (string)floatval($rows3[$key][$k]*10000);
  1203. }else{
  1204. $subArray[$k] = '';
  1205. }
  1206. }else if($k=='Yj_Gdbh' || $k=='yj_Yjno'){
  1207. if(array_key_exists($key,$rows3)){
  1208. $subArray[$k] = $rows3[$key][$k];
  1209. }else{
  1210. $subArray[$k] = '';
  1211. }
  1212. }else if($k=='yj_yjmc'){
  1213. if(array_key_exists($key,$rows3)){
  1214. $subArray[$k] = trim($rows3[$key][$k]);
  1215. }else{
  1216. $subArray[$k] = '';
  1217. }
  1218. }else if($k=='sczl_cls'){
  1219. $subArray[$k] = (string)floatval($value);
  1220. }else if($k=='status'){
  1221. if(array_key_exists($key,$rows2) && $rows2[$key]['jjcp_smb'] !=''){
  1222. $subArray[$k] = '完工';
  1223. }else{
  1224. $subArray[$k] = '';
  1225. }
  1226. }else if($k=='缺数'){
  1227. if(array_key_exists($key,$rows2) && $rows2[$key]['jjcp_smb'] !=''){
  1228. $subArray[$k]['缺数'] = (int)$rows3[$key]['yj_成品数量']-(int)$value;
  1229. }else{
  1230. $subArray[$k] = '';
  1231. }
  1232. }else{
  1233. if(array_key_exists($key,$rows2)){
  1234. $subArray[$k] = $rows2[$key][$k];
  1235. $subArray[$k] = $rows2[$key][$k];
  1236. $subArray[$k] = $rows2[$key][$k];
  1237. }else{
  1238. $subArray[$k] = '';
  1239. $subArray[$k] = '';
  1240. $subArray[$k] = '';
  1241. }
  1242. }
  1243. }
  1244. array_push($data,$subArray);
  1245. }
  1246. }
  1247. $this->success('成功',['file_name'=>$req['file_name'],'data'=>$data]);
  1248. }
  1249. }