PrintingPlate.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Request;
  5. /**
  6. * 印版库管理
  7. */
  8. class PrintingPlate extends Api
  9. {
  10. protected $noNeedLogin = ['*'];
  11. protected $noNeedRight = ['*'];
  12. /**
  13. * 印版库管理左侧菜单
  14. * @return void
  15. */
  16. public function getTab()
  17. {
  18. if (!$this->request->isGet()) {
  19. $this->error('请求错误');
  20. }
  21. $data = [
  22. 'MN印版' => $this->buildTree('05'),
  23. '翌星印版' => $this->buildTree('Y05')
  24. ];
  25. $this->success('成功', $data);
  26. }
  27. //私有方法,构建数据
  28. private function buildTree($prefix)
  29. {
  30. $list = db('物料_存货结构')
  31. ->where('编号', 'like', $prefix . '%')
  32. ->order('编号', 'asc')
  33. ->select();
  34. $map = [];
  35. $tree = [];
  36. // 创建编号映射表
  37. foreach ($list as $item) {
  38. $map[$item['编号']] = $item['名称'];
  39. }
  40. // 构建树形结构
  41. foreach ($list as $item) {
  42. $code = $item['编号'];
  43. $name = $item['名称'];
  44. $key = "{$code} {$name}";
  45. $depth = strlen($code) - strlen($prefix);
  46. switch ($depth) {
  47. case 0: // 根节点 (05/Y05)
  48. $tree[$key] = [];
  49. break;
  50. case 2: // 二级节点 (0501/Y0501)
  51. $parentCode = substr($code, 0, strlen($prefix));
  52. $parentKey = "{$parentCode} {$map[$parentCode]}";
  53. $tree[$parentKey][$key] = [];
  54. break;
  55. case 4: // 三级节点 (050100/Y050101)
  56. $parentCode = substr($code, 0, strlen($prefix) + 2);
  57. $grandCode = substr($code, 0, strlen($prefix));
  58. $grandKey = "{$grandCode} {$map[$grandCode]}";
  59. $parentKey = "{$parentCode} {$map[$parentCode]}";
  60. if (isset($tree[$grandKey][$parentKey])) {
  61. $tree[$grandKey][$parentKey][] = $key;
  62. }
  63. break;
  64. }
  65. }
  66. return $tree;
  67. }
  68. /**
  69. * 存货编码列表
  70. * @return void
  71. * @throws \think\db\exception\DataNotFoundException
  72. * @throws \think\db\exception\ModelNotFoundException
  73. * @throws \think\exception\DbException
  74. */
  75. public function MaterailCodeList()
  76. {
  77. if (!$this->request->isGet()) {
  78. $this->error('请求错误');
  79. }
  80. $params = $this->request->param();
  81. if (empty($params)) {
  82. $this->error('参数错误');
  83. }
  84. $page = intval($params['page']);
  85. $limit = intval($params['limit']);
  86. $where = [];
  87. if (!empty($params['code'])) {
  88. $code = preg_match('/[a-zA-Z]/', $params['code'])
  89. ? substr($params['code'], 0, 7)
  90. : substr($params['code'], 0, 6);
  91. $where['a.存货编码'] = ['like', $code . '%'];
  92. }
  93. if (!empty($params['search'])) {
  94. $where['b.物料名称'] = ['like', '%' . $params['search'] . '%'];
  95. }
  96. //总数
  97. $total = db('产品_印版库')
  98. ->alias('a')
  99. ->join('物料_存货编码 b', 'a.存货编码 = b.物料代码')
  100. ->join('工单_印版领用记录 c',
  101. 'a.存货编码 = c.Yb_存货编码 AND a.供方批号 = c.Yb_供方批号',
  102. 'LEFT')
  103. ->where($where)
  104. ->group('a.存货编码, a.供方批号')
  105. ->count();
  106. $list = db('产品_印版库')
  107. ->alias('a')
  108. ->join('物料_存货编码 b', 'a.存货编码 = b.物料代码')
  109. ->join('工单_印版领用记录 c',
  110. 'a.存货编码 = c.Yb_存货编码 AND a.供方批号 = c.Yb_供方批号',
  111. 'LEFT')
  112. ->where($where)
  113. ->group('a.存货编码, a.供方批号')
  114. ->order('报废日期, a.存货编码')
  115. ->field([
  116. 'rtrim(a.存货编码) as 存货编码',
  117. 'rtrim(b.物料名称) as 物料名称',
  118. 'rtrim(a.印版名称) as 印版名称',
  119. 'rtrim(a.供方批号) as 供方批号',
  120. 'DATE(a.制造日期) as 制造日期',
  121. "CASE
  122. WHEN a.报废日期 = '1900-01-01 00:00:00' THEN NULL
  123. ELSE DATE(a.报废日期)
  124. END as 报废日期",
  125. 'a.原始印数',
  126. 'a.考核印数',
  127. 'a.UniqID',
  128. 'rtrim(a.Sys_id) as 创建用户',
  129. 'a.Sys_rq as 创建日期',
  130. 'a.Mod_rq as 修改时间',
  131. 'COUNT(c.Yb_印数) as 累计印数',
  132. "MAX(CASE WHEN c.Yb_领用日期 IS NOT NULL AND c.Yb_退还日期 IS NULL THEN c.Yb_工单编号 END) as 工单编号"
  133. ])
  134. ->limit(($page - 1) * $limit, $limit)
  135. ->select();
  136. if (empty($list)) {
  137. $this->error('未找到相关记录');
  138. }
  139. $this->success('查询成功', [
  140. 'data' => $list,
  141. 'total' => $total,
  142. ]);
  143. }
  144. /**
  145. * 印版管理印版修改
  146. * @return void
  147. * @throws \think\db\exception\DataNotFoundException
  148. * @throws \think\db\exception\ModelNotFoundException
  149. * @throws \think\exception\DbException
  150. */
  151. public function MaterailDetail()
  152. {
  153. if ($this->request->isGet() === false){
  154. $this->error('请求错误');
  155. }
  156. $param = $this->request->param();
  157. if (empty($param) || !isset($param['UniqID'])){
  158. $this->error('参数错误');
  159. }
  160. $result = db('产品_印版库')
  161. ->alias('a')
  162. ->join('物料_存货编码 b', 'a.存货编码 = b.物料代码')
  163. ->where('a.UniqID', $param['UniqID'])
  164. ->order('报废日期, a.存货编码')
  165. ->field('
  166. rtrim(a.存货编码) as 存货编码,
  167. rtrim(b.物料名称) as 物料名称,
  168. rtrim(a.印版名称) as 印版备注,
  169. rtrim(a.供方批号) as 供方批号,
  170. DATE(a.制造日期) as 制造日期,
  171. CASE
  172. WHEN a.报废日期 = "1900-01-01 00:00:00" THEN NULL
  173. ELSE DATE(a.报废日期)
  174. END as 报废日期,
  175. a.原始印数,
  176. a.考核印数,
  177. a.UniqID
  178. ')
  179. ->find();
  180. if (empty($result)) {
  181. $this->error('未找到数据');
  182. }else{
  183. $this->success('成功', $result);
  184. }
  185. }
  186. /**
  187. * 印版资料新增修改
  188. * @return void
  189. * @throws \think\Exception
  190. * @throws \think\db\exception\BindParamException
  191. * @throws \think\db\exception\DataNotFoundException
  192. * @throws \think\db\exception\ModelNotFoundException
  193. * @throws \think\exception\DbException
  194. * @throws \think\exception\PDOException
  195. */
  196. public function MaterailEdit()
  197. {
  198. if ($this->request->isPost() === false){
  199. $this->error('请求错误');
  200. }
  201. $param = Request::instance()->post();
  202. if (empty($param) || !isset($param['code'])){
  203. $this->error('参数错误');
  204. }
  205. $data = [
  206. '存货编码' => $param['code'],
  207. '供方批号' => $param['batch'],
  208. '印版名称' => $param['desc'],
  209. '制造日期' => $param['Manufactur_date'],
  210. '原始印数' => $param['start_num'],
  211. '考核印数' => $param['Assessment_num'],
  212. '报废日期' => $param['Scrappe_date']?:'1900-01-01 00:00:00',
  213. 'Sys_id' => $param['sys_id']
  214. ];
  215. //查询数据是否存在,存在则修改,不存在则增加
  216. $res = db('产品_印版库')
  217. ->where('存货编码',$param['code'])
  218. ->where('供方批号',$param['batch'])
  219. ->find();
  220. if (empty($res)){
  221. $data['Sys_rq'] = date('Y-m-d H:i:s',time());
  222. $sql = db('产品_印版库')->fetchSql(true)->insert($data);
  223. }else{
  224. $UniqID = $param['UniqID'];
  225. $data['Mod_rq'] = date('Y-m-d H:i:s',time());
  226. $sql = db('产品_印版库')->where('UniqID',$UniqID)->fetchSql(true)->update($data);
  227. }
  228. $result = db()->query($sql);
  229. if ($result === false){
  230. $this->error('修改失败');
  231. }else{
  232. $this->success('修改成功');
  233. }
  234. }
  235. /**
  236. * 印版新增->存货编码获取
  237. * @return void
  238. * @throws \think\db\exception\DataNotFoundException
  239. * @throws \think\db\exception\ModelNotFoundException
  240. * @throws \think\exception\DbException
  241. */
  242. public function getInventoryCode()
  243. {
  244. if (!$this->request->isGet()) {
  245. $this->error('请求错误');
  246. }
  247. $param = $this->request->param();
  248. if (empty($param) || !isset($param['code'])) {
  249. $this->error('参数错误');
  250. }
  251. // 提取前缀
  252. $codeLength = preg_match('/[a-zA-Z]/', $param['code']) ? 5 : 4;
  253. $code = substr($param['code'], 0, $codeLength);
  254. $where['物料代码'] = ['like', $code . '%'];
  255. if (!empty($param['search'])) {
  256. $where['物料名称|物料代码'] = ['like', '%' . $param['search'] . '%'];
  257. }
  258. // 查询物料存货编码
  259. $list = db('物料_存货编码')
  260. ->where($where)
  261. ->field('rtrim(物料代码) as 物料代码, rtrim(物料名称) as 物料名称, rtrim(规格) as 规格')
  262. ->select();
  263. // 数据处理
  264. $data = [];
  265. foreach ($list as $item) {
  266. // 提取物料代码的前缀
  267. $prefixLength = preg_match('/[a-zA-Z]/', $item['物料代码']) ? [3, 5, 7] : [2, 4, 6];
  268. // 使用普通的数组映射替代箭头函数
  269. $num1 = substr($item['物料代码'], 0, $prefixLength[0]);
  270. $num2 = substr($item['物料代码'], 0, $prefixLength[1]);
  271. $num3 = substr($item['物料代码'], 0, $prefixLength[2]);
  272. // 批量查询物料结构名称
  273. $names = db('物料_存货结构')
  274. ->whereIn('编号', [$num1, $num2, $num3])
  275. ->column('名称', '编号');
  276. // 将数据组织进数组
  277. $name1 = isset($names[$num1]) ? $names[$num1] : '';
  278. $name2 = isset($names[$num2]) ? $names[$num2] : '';
  279. $name3 = isset($names[$num3]) ? $names[$num3] : '';
  280. if (!isset($data["$num1/$name1"][$num2][$num3.'/'.$name3])) {
  281. $data["$num1/$name1"][$num2][$num3.'/'.$name3] = [];
  282. }
  283. $data["$num1/$name1"][$num2][$num3.'/'.$name3][] = "{$item['物料代码']}/{$item['物料名称']}/{$item['规格']}";
  284. }
  285. $this->success('成功', $data);
  286. }
  287. /**
  288. * 印版领用
  289. * @return void
  290. * @throws \think\db\exception\BindParamException
  291. * @throws \think\exception\PDOException
  292. */
  293. public function PrintingPlateReceive()
  294. {
  295. if (!$this->request->isPost()) {
  296. $this->error('请求错误');
  297. }
  298. $param = Request::instance()->post();
  299. if (empty($param) || !isset($param['gdbh'])) {
  300. $this->error('参数错误');
  301. }
  302. $data = [
  303. 'Yb_工单编号' => $param['gdbh'],
  304. 'Yb_印件号' => $param['yjno'],
  305. 'Yb_存货编码' => $param['code'],
  306. 'Yb_供方批号' => $param['batch'],
  307. 'Yb_领用日期' => date('Y-m-d',time()),
  308. 'Yb_领用机台' => $param['machine'],
  309. 'Sys_id' => $param['sys_id'],
  310. 'Sys_rq' => date('Y-m-d H:i:s',time()),
  311. ];
  312. $sql = db('工单_印版领用记录')
  313. ->fetchSql(true)
  314. ->insert($data);
  315. $res = db('')->query($sql);
  316. if ($res === false){
  317. $this->error('领用失败');
  318. }else{
  319. $this->success('领用成功');
  320. }
  321. }
  322. /**
  323. * 印版工单领用
  324. * @return void
  325. * @throws \think\db\exception\DataNotFoundException
  326. * @throws \think\db\exception\ModelNotFoundException
  327. * @throws \think\exception\DbException
  328. */
  329. public function PrintDetailReceive()
  330. {
  331. if (!$this->request->isGet()) {
  332. $this->error('请求错误');
  333. }
  334. $param = $this->request->param();
  335. if (empty($param) || !isset($param['code'])) {
  336. $this->error('参数错误');
  337. }
  338. $list = db('工单_印版领用记录')
  339. ->alias('a')
  340. ->field('a.Yb_工单编号 as 工单编号,a.Yb_印件号 as 印件号,a.Yb_领用日期 as 领用日期,a.Yb_退还日期 as 退还日期,a.Yb_领用机台 as 领用机台,
  341. a.Yb_印数 as 印数,a.Sys_id as 创建用户,a.Sys_rq as 创建时间,a.UniqID,b.成品代号,rtrim(b.成品名称) as 成品名称')
  342. ->join('工单_基本资料 b', 'a.Yb_工单编号 = b.Gd_gdbh')
  343. ->where('a.Yb_存货编码',$param['code'])
  344. ->where('a.Yb_供方批号',$param['batch'])
  345. ->order('a.Yb_领用日期 desc')
  346. ->group('a.Yb_工单编号')
  347. ->select();
  348. if (empty($list)){
  349. $this->error('未找到领用记录');
  350. }else{
  351. $this->success('成功', $list);
  352. }
  353. }
  354. /**
  355. * 印版领用记录删除
  356. * @return void
  357. * @throws \think\Exception
  358. * @throws \think\exception\PDOException
  359. */
  360. public function PrintReceiveDelete()
  361. {
  362. if ($this->request->isGet() === false) {
  363. $this->error('请求错误');
  364. }
  365. $param = $this->request->param();
  366. if (empty($param) || !isset($param['id'])) {
  367. $this->error('参数错误');
  368. }
  369. $id = explode(',', $param['id']);
  370. if (empty($id)) {
  371. $this->error('请先选中要删除数据');
  372. }
  373. $res = db('工单_印版领用记录')
  374. ->where('UniqID','in',$id)
  375. ->delete();
  376. if ($res === false){
  377. $this->error('删除失败');
  378. }else{
  379. $this->success('删除成功');
  380. }
  381. }
  382. //印版库管理菜单下方客户产品印版管理
  383. public function PrintDetailTab()
  384. {
  385. if($this->request->isGet() === false){
  386. $this->error('请求错误');
  387. }
  388. $list = db('产品_印版资料')
  389. ->alias('a')
  390. ->field('
  391. rtrim(a.YB_Cpdh) as 产品代号,
  392. rtrim(b.产品名称) as 产品名称,
  393. rtrim(b.客户编号) as 客户编号,
  394. rtrim(b.客户名称) as 客户名称,
  395. rtrim(a.存货编码) as 存货编码,
  396. rtrim(c.名称) as 名称
  397. ')
  398. ->join('产品_基本资料 b', 'a.YB_Cpdh = b.产品编号')
  399. ->join('物料_存货结构 c',
  400. "(CASE
  401. WHEN a.存货编码 REGEXP '[A-Za-z]'
  402. THEN LEFT(rtrim(a.存货编码), 5)
  403. ELSE LEFT(rtrim(a.存货编码), 4)
  404. END) = rtrim(c.编号)"
  405. )
  406. ->group('a.YB_Cpdh,名称')
  407. ->order('a.YB_Cpdh,a.存货编码')
  408. ->select();
  409. if (empty($list)){
  410. $this->error('未找到客户数据');
  411. }
  412. foreach ($list as $item) {
  413. $customerKey = $item['客户编号'] . '【' . $item['客户名称'] . '】';
  414. $productKey = $item['产品代号'] . '【' . $item['产品名称'] . '】';
  415. if (!isset($data[$customerKey])) {
  416. $data[$customerKey] = [];
  417. }
  418. if (!isset($data[$customerKey][$productKey])) {
  419. $data[$customerKey][$productKey] = [];
  420. }
  421. if (!in_array($item['名称'], $data[$customerKey][$productKey])) {
  422. $data[$customerKey][$productKey][] = $item['名称'];
  423. }
  424. }
  425. $this->success('成功', $data);
  426. }
  427. //客户印版库右侧列表
  428. public function PrintDetail()
  429. {
  430. if ($this->request->isGet() === false) {
  431. $this->error('请求错误');
  432. }
  433. $param = $this->request->param();
  434. if (empty($param) || !isset($param['code']) || !isset($param['category'])) {
  435. $this->error('请求错误');
  436. }
  437. //获取印版库分类编号
  438. $categoryNumber = db('物料_存货');
  439. $where = [
  440. 'a.YB_Cpdh' => $param['code'],
  441. 'b.YB_Cpdh' => $param['category'],
  442. ];
  443. // $list = db('<UNK>_<UNK>')
  444. }
  445. }