FinishedProductWarehousing.php 48 KB

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