FinishedProductWarehousing.php 54 KB

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