GluFinishedProductWarehousing.php 57 KB

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