FinishedProductWarehousing.php 53 KB

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