FinishedProductWarehousing.php 56 KB

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