FinishedProductWarehousing.php 53 KB

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