GluFinishedProductWarehousing.php 55 KB

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