Synchronization.php 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. use Overtrue\Pinyin;
  6. /**
  7. * 中间表数据同步
  8. */
  9. class Synchronization extends Api
  10. {
  11. protected $noNeedLogin = ['*'];
  12. protected $noNeedRight = ['*'];
  13. /**
  14. * 工单资料数据同步
  15. */
  16. public function WorkOrderData()
  17. {
  18. if ($this->request->isGet() === false){
  19. $this->error('请求错误');
  20. }
  21. $db3 = Db::connect(config('database.db3'));
  22. $workOrderList = $db3->name('U8_06工单资料')
  23. ->where('MES接收时间',null)
  24. ->where('MES接收状态','0')
  25. ->where('U8插入类型','<>','关闭')
  26. ->select();
  27. if (empty($workOrderList)){
  28. $this->success('未获取新工单');
  29. }
  30. $j = $m = $n =0;
  31. foreach ($workOrderList as $key=>$value){
  32. $code = substr($value['成品编号'],0,5);
  33. $client = \db('物料_存货结构')->where('编号',$code)->value('名称');
  34. //插入产品资料
  35. $processData = \db('产品_基本资料')
  36. ->where('产品编号',$value['成品编号'])
  37. ->count();
  38. $detail = \db('物料_存货编码')->where('物料代码',$value['成品编号'])->find();
  39. if ($processData === 0){
  40. $product = [
  41. '客户编号' => $code,
  42. '客户名称' => $client,
  43. '产品编号' => $value['成品编号'],
  44. '产品名称' => $value['成品名称'],
  45. '计量单位' => $detail['领用单位'],
  46. '状态' => '',
  47. 'U8UID' => $detail['U8UID'],
  48. '产品类别' => $detail['规格'],
  49. 'Sys_id' => '[272/超级用户]',
  50. 'Sys_rq' => date('Y-m-d H:i:s',time()),
  51. 'Mod_rq' => date('Y-m-d H:i:s',time()),
  52. ];
  53. $product['UniqID'] = \db('产品_基本资料')->order('UniqID desc')->value('UniqID')+1;
  54. $productSql = \db('产品_基本资料')->fetchSql(true)->insert($product);
  55. \db()->query($productSql);
  56. }
  57. //插入产品印件资料
  58. $PrintData = \db('产品_印件资料')
  59. ->where('yj_cpdh',$value['成品编号'])
  60. ->where('yj_yjdh',$value['产品编号'])
  61. ->count();
  62. if ($PrintData === 0){
  63. $print = [
  64. 'yj_cpdh' => $value['成品编号'],
  65. 'yj_yjno' => $value['行号'],
  66. 'yj_yjdh' => $value['产品编号'],
  67. 'yj_yjmc' => $value['产品名称'],
  68. 'sys_id' => '[1012/开单员]',
  69. 'sys_rq' => date('Y-m-d H:i:s',time()),
  70. 'UniqId' =>\db('产品_印件资料')->order('UniqID desc')->value('UniqID')+1,
  71. ];
  72. $printSql = \db('产品_印件资料')->fetchSql(true)->insert($print);
  73. \db()->query($printSql);
  74. }
  75. //插入工单资料
  76. if (preg_match("/[A-Za-z]/",$value['工单编号'])){
  77. $workcode = $value['工单编号'];
  78. }else{
  79. $workcode = 'Y'.$value['工单编号'];
  80. }
  81. $data = [
  82. 'Gd_gdbh' => $workcode,
  83. '行号' => $value['行号'],
  84. 'Gd_客户代号' => $code,
  85. 'Gd_客户名称' => $client,
  86. 'Gd_khdh' => $value['客户编号'],
  87. 'Gd_khmc' => $value['客户名称'],
  88. '客户料号' => $value['客户料号'],
  89. '成品代号' => $value['成品编号'],
  90. '成品名称' => $value['成品名称'],
  91. 'Gd_cpdh' => $value['产品编号'],
  92. 'Gd_cpmc' => $value['产品名称'],
  93. '产品版本号' => $value['版本号'],
  94. '销售订单号' => $value['销售订单号'],
  95. '警语版面' => $value['警语版面'],
  96. '码源数量' => substr(str_replace('.','',$value['投料数量']),0,-2),
  97. 'Gd_desc' => $value['备注'],
  98. '接单日期' => $value['接单日期'],
  99. '开单日期' => $value['开单日期'],
  100. '交货日期' => $value['交货日期'],
  101. '订单数量' => $value['订单数量'],
  102. '实际投料' => $value['投料数量'],
  103. '产品单价' => $value['产品单价'],
  104. '计量单位' => '万张',
  105. '成本考核_胶印' => 1,
  106. '成本考核_凹印' => 1,
  107. '成本考核_丝印' => 1,
  108. '成本考核_模切' => 1,
  109. '成本考核_检验' => 1,
  110. 'gd_statu' => '3-计划中',
  111. 'Sys_id' => '[1012/开单员]',
  112. 'Sys_rq' => date('Y-m-d H:i:s',time()),
  113. 'Mod_rq' => date('Y-m-d H:i:s',time()),
  114. 'U8UID' => $value['U8_UID'],
  115. 'Uniqid' => $value['UniqId']
  116. ];
  117. $workOrderdata = \db('工单_基本资料')
  118. ->where('U8UID',$value['U8_UID'])
  119. ->count();
  120. if ($workOrderdata === 0){
  121. $addSql = \db('工单_基本资料')->fetchSql(true)->insert($data);
  122. $result = \db()->query($addSql);
  123. if ($result === false){
  124. $m++;
  125. }else{
  126. $sqlString = $db3->name('U8_06工单资料')
  127. ->where('UniqId', $value['UniqId'])
  128. ->fetchSql(true)
  129. ->update([
  130. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  131. 'MES接收状态' => '1'
  132. ]);
  133. $db3->execute($sqlString);
  134. }
  135. }else{
  136. unset($data['Uniqid']);
  137. $updateSql = \db('工单_基本资料')->where('U8UID',$value['U8_UID'])->fetchSql(true)->update($data);
  138. $updateRes = \db()->query($updateSql);
  139. if ($updateRes === false){
  140. $j++;
  141. }else{
  142. $sqlString = $db3->name('U8_06工单资料')
  143. ->where('UniqId', $value['UniqId'])
  144. ->fetchSql(true)
  145. ->update([
  146. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  147. 'MES接收状态' => '1'
  148. ]);
  149. $db3->execute($sqlString);
  150. }
  151. }
  152. }
  153. if ($j !== 0 || $m !==0 || $n !== 0){
  154. $this->error('工单资料同步失败');
  155. }else{
  156. $this->success('工单资料同步成功');
  157. }
  158. }
  159. /**
  160. * 工单bom资料同步
  161. */
  162. public function WorkOrderBomData()
  163. {
  164. if ($this->request->isGet() === false){
  165. $this->error('请求错误');
  166. }
  167. $db3 = Db::connect(config('database.db3'));
  168. $BomDataList = $db3->name('U8_09工单bom')
  169. ->where('MES接收时间',null)
  170. ->where('MES接收状态','0')
  171. ->order('U8传递时间 desc')
  172. ->select();
  173. if (empty($BomDataList)){
  174. $this->success('未找到新工单BOM');
  175. }
  176. $j = $m = 0;
  177. foreach ($BomDataList as $key=>$value){
  178. $res = \db('工单_bom资料')->where('U8UID',$value['U8_UID'])->count();
  179. if (preg_match("/[A-Za-z]/",$value['BOM_工单编号'])){
  180. $workcode = $value['BOM_工单编号'];
  181. }else{
  182. $workcode = 'Y'.$value['BOM_工单编号'];
  183. }
  184. $data = [
  185. 'BOM_方案' => '工单评审定案',
  186. 'BOM_工单编号' => $workcode,
  187. 'BOM_版本' => $value['BOM_版本'],
  188. 'BOM_工单行号' => $value['BOM_工单行号'],
  189. 'BOM_行号' => $value['BOM_行号'],
  190. 'BOM_产品编号' => $value['BOM_产品编号'],
  191. 'BOM_物料编码' => $value['BOM_物料编码'],
  192. 'BOM_物料名称' => $value['BOM_物料名称'],
  193. 'BOM_投料单位' => $value['BOM_投料单位'],
  194. 'BOM_投入数' => $value['BOM_投入数'],
  195. 'BOM_产出数' => $value['BOM_产出数'],
  196. 'BOM_产出单位' => $value['BOM_产出单位'],
  197. 'BOM_标准用量' => $value['BOM_标准用量'],
  198. 'BOM_实际用量' => $value['BOM_实际用量'],
  199. 'BOM_计划用量' => $value['BOM_计划用量'],
  200. 'BOM_核算价格' => 0,
  201. 'Bom_领用工序' => '01-01',
  202. 'BOM_备注' => $value['BOM_备注'],
  203. 'Mod_rq' => date('Y-m-d H:i:s',time()),
  204. 'U8UID' => $value['U8_UID'],
  205. 'UNIQID' => $value['UNIQID']
  206. ];
  207. if ($res === 0){
  208. $addSql = \db('工单_bom资料')->fetchSql(true)->insert($data);
  209. $addRes = \db()->query($addSql);
  210. if ($addRes === false){
  211. $m++;
  212. }else{
  213. $sqlString = $db3->name('U8_09工单bom')
  214. ->where('UNIQID', $value['UNIQID'])
  215. ->fetchSql(true)
  216. ->update([
  217. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  218. 'MES接收状态' => '1'
  219. ]);
  220. $db3->execute($sqlString);
  221. }
  222. }else{
  223. unset($data['UNIQID']);
  224. $updateSql = \db('工单_bom资料')
  225. ->where('U8UID',$value['U8_UID'])
  226. ->fetchSql(true)
  227. ->update($data);
  228. $updateRes = \db()->query($updateSql);
  229. if ($updateRes === false){
  230. $j++;
  231. }else{
  232. $sqlString = $db3->name('U8_09工单bom')
  233. ->where('UNIQID', $value['UNIQID'])
  234. ->fetchSql(true)
  235. ->update([
  236. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  237. 'MES接收状态' => '1'
  238. ]);
  239. $db3->execute($sqlString);
  240. }
  241. }
  242. }
  243. if ($j !== 0 || $m !== 0){
  244. $this->error('工单BOM资料同步失败');
  245. }else{
  246. $this->success('工单BOM资料同步成功');
  247. }
  248. }
  249. /**
  250. * 存货结构数据同步
  251. */
  252. public function MaterialRequisitionData()
  253. {
  254. if ($this->request->isGet() === false){
  255. $this->error('请求错误');
  256. }
  257. $db3 = \db()->connect(config('database.db3'));
  258. $MaterialDataList = $db3->name('U8_11存货结构')
  259. ->where('MES接收时间',null)
  260. ->where('MES接收状态','0')
  261. ->select();
  262. if (empty($MaterialDataList)){
  263. $this->success('未找到新的物料存货结构');
  264. }
  265. $i = 0;
  266. foreach ($MaterialDataList as $key=>$value){
  267. $data = [
  268. '编号' => $value['编号'],
  269. '名称' => $value['名称'],
  270. 'Sys_id' => '[272/超级用户]',
  271. 'Sys_rq' => date('Y-m-d H:i:s',time()),
  272. 'Mod_rq' => date('Y-m-d H:i:s',time()),
  273. 'U8UID' => $value['U8_UID'],
  274. 'UniqId' => $value['UniqId']
  275. ];
  276. if ($value['U8插入类型'] === '新增'){
  277. $sql = \db('物料_存货结构')->fetchSql(true)->insert($data);
  278. $res = \db()->query($sql);
  279. if ($res === false){
  280. $i++;
  281. }else{
  282. $sqlString = $db3->name('U8_11存货结构')
  283. ->where('UniqId', $value['UniqId'])
  284. ->fetchSql(true)
  285. ->update([
  286. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  287. 'MES接收状态' => '1'
  288. ]);
  289. $db3->execute($sqlString);
  290. }
  291. }else{
  292. $sql = \db('物料_存货结构')
  293. ->fetchSql(true)
  294. ->where('U8UID',$value['U8_UID'])
  295. ->update($data);
  296. $res = \db()->query($sql);
  297. if ($res === false){
  298. $i++;
  299. }else{
  300. $sqlString = $db3->name('U8_11存货结构')
  301. ->where('UniqId', $value['UniqId'])
  302. ->fetchSql(true)
  303. ->update([
  304. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  305. 'MES接收状态' => '1'
  306. ]);
  307. $db3->execute($sqlString);
  308. }
  309. }
  310. }
  311. if ($i !== 0){
  312. $this->error('存货结构同步失败');
  313. }else{
  314. $this->success('存货结构同步成功');
  315. }
  316. }
  317. /**
  318. * 人事基本资料同步
  319. * @return void
  320. * @throws \think\Exception
  321. * @throws \think\db\exception\BindParamException
  322. * @throws \think\db\exception\DataNotFoundException
  323. * @throws \think\db\exception\ModelNotFoundException
  324. * @throws \think\exception\DbException
  325. * @throws \think\exception\PDOException
  326. */
  327. public function PersonnelData()
  328. {
  329. //拼音类
  330. $pinyin = new Pinyin\Pinyin();
  331. if ($this->request->isGet() === false){
  332. $this->error('请求错误');
  333. }
  334. $db3 = \db()->connect(config('database.db3'));
  335. $PersonnelDataList = $db3->name('U8_02人事资料')
  336. ->where('MES接收时间',null)
  337. ->where('MES接收状态','0')
  338. ->select();
  339. if (empty($PersonnelDataList)){
  340. $this->success('未找到新的人事资料');
  341. }
  342. $i = 0;
  343. foreach ($PersonnelDataList as $key=>$value){
  344. //获取姓名首字母
  345. $pycode = $pinyin->abbr($value['员工姓名']);
  346. $nameCode = strtoupper($pycode);
  347. $data = [
  348. '工卡编号'=>'',
  349. '卡钟设定'=>'',
  350. '打卡设置'=>'',
  351. '员工编号'=>$value['员工编号'],
  352. '员工姓名'=>$value['员工姓名'],
  353. '性别'=>$value['性别'],
  354. '聘用日期'=>$value['聘用日期'],
  355. '转正日期'=>$value['转正日期'],
  356. 'U8离职日期'=>$value['离职日期'],
  357. 'MES离职日期'=>$value['离职日期'],
  358. '扣减司龄'=>0,
  359. '部门编码'=>$value['部门编码'],
  360. '所在部门'=>$value['所在部门'],
  361. '人员类别'=>$value['人员类别'],
  362. '人员性质'=>$value['人员性质'],
  363. '班次类型'=>'',
  364. '标准工时制'=>'',
  365. '职称职务'=>$value['职称职务'],
  366. '薪资级别'=>$value['级别'],
  367. '工资表类别'=>'',
  368. '基本工资'=>'',
  369. '绩效工资1'=>'',
  370. '绩效工资2'=>'',
  371. '技能工资'=>'',
  372. '岗位津贴'=>'',
  373. '竞业补贴'=>'',
  374. '专业技术津贴'=>'',
  375. '技工技师津贴'=>'',
  376. '特殊工种津贴'=>'',
  377. '各类奖项津贴'=>'',
  378. '职危津贴'=>'',
  379. '夜班津贴'=>'',
  380. '全勤津贴'=>'',
  381. '住房津贴'=>'',
  382. '高温津贴'=>'',
  383. '用餐津贴'=>'',
  384. '司龄津贴'=>'',
  385. '联系电话'=>$value['联系电话'],
  386. '合同类型'=>'',
  387. '合同起始日期'=>'1900-01-01 00:00:00',
  388. '合同终止日期'=>'1900-01-01 00:00:00',
  389. '合同备注'=>'',
  390. '出生日期'=>$value['出生日期'],
  391. 'pycode'=>$nameCode,
  392. '籍贯'=>'',
  393. '民族'=>'',
  394. '身份证号'=>$value['身份证号'],
  395. '证件有效日期'=>'1900-01-01 00:00:00',
  396. '发证机关'=>'',
  397. '家庭住址'=>'',
  398. '学历'=>'',
  399. '婚姻状况'=>'',
  400. '社保开始日期'=>'1900-01-01 00:00:00',
  401. '开户银行'=>$value['开户银行'],
  402. '开户账号'=>$value['开户账号'],
  403. '存折办理日期'=>'1900-01-01 00:00:00',
  404. '紧急电话'=>'',
  405. '照片ID'=>'',
  406. '在职状态'=>$value['在职状态'],
  407. 'U8在职'=>$value['在职状态'],
  408. '薪酬核算分组'=>'',
  409. '考勤类型'=>'',
  410. '班组代号'=>'',
  411. 'sys_id'=>'[272/超级用户]',
  412. 'sys_rq'=>date('Y-m-d H:i:s',time()),
  413. 'mod_rq'=>'1900-01-01 00:00:00',
  414. 'U8UID'=>$value['U8_UID'],
  415. 'UniqID'=>$value['UniqId']
  416. ];
  417. $number = \db('人事_基本资料')
  418. ->where('U8UID',$value['U8_UID'])
  419. ->count();
  420. if ($number === 0){
  421. $sql = \db('人事_基本资料')->fetchSql(true)->insert($data);
  422. $res = \db()->query($sql);
  423. if ($res === false){
  424. $i++;
  425. }else{
  426. $sqlString = $db3->name('U8_02人事资料')
  427. ->where('UniqId', $value['UniqId'])
  428. ->fetchSql(true)
  429. ->update([
  430. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  431. 'MES接收状态' => '1'
  432. ]);
  433. $db3->execute($sqlString);
  434. }
  435. }else{
  436. $sql = \db('人事_基本资料')
  437. ->fetchSql(true)
  438. ->where('U8UID',$value['U8_UID'])
  439. ->update($data);
  440. $res = \db()->query($sql);
  441. if ($res === false){
  442. $i++;
  443. }else{
  444. $sqlString = $db3->name('U8_02人事资料')
  445. ->where('UniqId', $value['UniqId'])
  446. ->fetchSql(true)
  447. ->update([
  448. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  449. 'MES接收状态' => '1'
  450. ]);
  451. $db3->execute($sqlString);
  452. }
  453. }
  454. }
  455. if ($i !== 0){
  456. $this->error('人事资料同步失败');
  457. }else{
  458. $this->success('人事资料同步成功');
  459. }
  460. }
  461. /**
  462. * 人事组织结构
  463. * @return void
  464. * @throws \think\Exception
  465. * @throws \think\db\exception\BindParamException
  466. * @throws \think\db\exception\DataNotFoundException
  467. * @throws \think\db\exception\ModelNotFoundException
  468. * @throws \think\exception\DbException
  469. * @throws \think\exception\PDOException
  470. */
  471. public function OrganizationalStructureData()
  472. {
  473. if ($this->request->isGet() === false){
  474. $this->error('请求错误');
  475. }
  476. $db3 = \db()->connect(config('database.db3'));
  477. $OrganizationalDataList = $db3->name('U8_01组织结构')
  478. ->where('MES接收时间',null)
  479. ->where('MES接收状态','0')
  480. ->select();
  481. if (empty($OrganizationalDataList)){
  482. $this->success('未找到新的组织结构');
  483. }
  484. $i = 0;
  485. foreach ($OrganizationalDataList as $key=>$value){
  486. $data = [
  487. '编号'=>$value['编号'],
  488. '名称'=>$value['名称'],
  489. '状态'=>$value['状态'],
  490. 'Sys_id'=>'[272/超级用户]',
  491. 'Sys_rq'=>date('Y-m-d H:i:s',time()),
  492. 'Mod_rq'=>'1900-01-01 00:00:00',
  493. 'U8UID'=>$value['U8_UID'],
  494. 'UNIQID'=>$value['UniqId'],
  495. ];
  496. $number = \db('人事_组织结构')
  497. ->where('U8UID',$value['U8_UID'])
  498. ->count();
  499. if ($number === 0){
  500. $sql = \db('人事_组织结构')->fetchSql(true)->insert($data);
  501. $res = \db()->query($sql);
  502. if ($res === false){
  503. $i++;
  504. }else{
  505. $sqlString = $db3->name('U8_01组织结构')
  506. ->where('UniqId', $value['UniqId'])
  507. ->fetchSql(true)
  508. ->update([
  509. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  510. 'MES接收状态' => '1'
  511. ]);
  512. $db3->execute($sqlString);
  513. }
  514. }else{
  515. $sql = \db('人事_组织结构')
  516. ->fetchSql(true)
  517. ->where('U8UID',$value['U8_UID'])
  518. ->update($data);
  519. $res = \db()->query($sql);
  520. if ($res === false){
  521. $i++;
  522. }else{
  523. $sqlString = $db3->name('U8_01组织结构')
  524. ->where('UniqId', $value['UniqId'])
  525. ->fetchSql(true)
  526. ->update([
  527. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  528. 'MES接收状态' => '1'
  529. ]);
  530. $db3->execute($sqlString);
  531. }
  532. }
  533. }
  534. if ($i !== 0){
  535. $this->error('人事组织结构同步失败');
  536. }else{
  537. $this->success('人事组织结构同步成功');
  538. }
  539. }
  540. /**
  541. * 物料存货编码数据同步
  542. * @return void
  543. * @throws \think\Exception
  544. * @throws \think\db\exception\BindParamException
  545. * @throws \think\db\exception\DataNotFoundException
  546. * @throws \think\db\exception\ModelNotFoundException
  547. * @throws \think\exception\DbException
  548. * @throws \think\exception\PDOException
  549. */
  550. public function InventoryCodeData()
  551. {
  552. if ($this->request->isGet() === false){
  553. $this->error('请求错误');
  554. }
  555. $db3 = \db()->connect(config('database.db3'));
  556. $OrganizationalDataList = $db3->name('U8_04物料编码')
  557. ->where('MES接收时间',null)
  558. ->where('MES接收状态','0')
  559. ->select();
  560. if (empty($OrganizationalDataList)){
  561. $this->success('未找到新的物料编码');
  562. }
  563. $i = 0;
  564. foreach ($OrganizationalDataList as $key=>$value){
  565. $code = substr($value['物料代码'],0,3);
  566. if ($code === 'Y10' || $code === 'Y14' || $code === 'Y12'){
  567. //插入产品资料
  568. $productData = \db('产品_基本资料')
  569. ->where('产品编号',$value['物料代码'])
  570. ->count();
  571. $clientCode = substr($value['物料代码'],0,5);
  572. $clientName = \db('物料_存货结构')->where('编号',$clientCode)->value('rtrim(名称)');
  573. $product = [
  574. '客户编号' => $clientCode,
  575. '客户名称' => $clientName,
  576. '产品编号' => $value['物料代码'],
  577. '产品名称' => $value['物料名称'],
  578. '计量单位' => $value['领用单位'],
  579. '状态' => '',
  580. 'U8UID' => $value['U8_UID'],
  581. '产品类别' => $value['规格'],
  582. 'Sys_id' => '[272/超级用户]',
  583. 'Sys_rq' => date('Y-m-d H:i:s',time()),
  584. 'Mod_rq' => date('Y-m-d H:i:s',time()),
  585. ];
  586. if ($productData === 0){
  587. $product['UniqID'] = \db('产品_基本资料')->order('UniqID desc')->value('UniqID')+1;
  588. $productSql = \db('产品_基本资料')->fetchSql(true)->insert($product);
  589. }else{
  590. $productSql = \db('产品_基本资料')->where('产品编号',$value['物料代码'])->fetchSql(true)->update($product);
  591. }
  592. $productRes = \db()->query($productSql);
  593. }
  594. $data = [
  595. '物料代码'=>$value['物料代码'],
  596. '物料名称'=>$value['物料名称'],
  597. '规格'=>$value['规格'],
  598. '采购单位'=>$value['采购单位'],
  599. '领用单位'=>$value['领用单位'],
  600. '单位换算率'=>$value['单位换算率'],
  601. '单价'=>$value['单价'],
  602. '币种'=>$value['币种'],
  603. '物料备注'=>$value['物料备注'],
  604. '状态'=>$value['状态'],
  605. 'Sys_id'=>'[272/超级用户]',
  606. 'Sys_rq'=>date('Y-m-d H:i:s',time()),
  607. 'Mod_rq'=>'1900-01-01 00:00:00',
  608. 'U8UID'=>$value['U8_UID'],
  609. 'UniqId'=>$value['UniqId'],
  610. ];
  611. $number = \db('物料_存货编码')
  612. ->where('U8UID',$value['U8_UID'])
  613. ->count();
  614. if ($number === 0){
  615. $sql = \db('物料_存货编码')->fetchSql(true)->insert($data);
  616. $res = \db()->query($sql);
  617. if ($res === false){
  618. $i++;
  619. }else{
  620. $sqlString = $db3->name('U8_04物料编码')
  621. ->where('UniqId', $value['UniqId'])
  622. ->fetchSql(true)
  623. ->update([
  624. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  625. 'MES接收状态' => '1'
  626. ]);
  627. $db3->execute($sqlString);
  628. }
  629. }else{
  630. $sql = \db('物料_存货编码')
  631. ->fetchSql(true)
  632. ->where('U8UID',$value['U8_UID'])
  633. ->update($data);
  634. $res = \db()->query($sql);
  635. if ($res === false){
  636. $i++;
  637. }else{
  638. $sqlString = $db3->name('U8_04物料编码')
  639. ->where('UniqId', $value['UniqId'])
  640. ->fetchSql(true)
  641. ->update([
  642. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  643. 'MES接收状态' => '1'
  644. ]);
  645. $db3->execute($sqlString);
  646. }
  647. }
  648. }
  649. if ($i !== 0){
  650. $this->error('物料编码同步失败');
  651. }else{
  652. $this->success('物料编码同步成功');
  653. }
  654. }
  655. /**
  656. * 客户供应商数据同步
  657. * @return void
  658. * @throws \think\Exception
  659. * @throws \think\db\exception\BindParamException
  660. * @throws \think\db\exception\DataNotFoundException
  661. * @throws \think\db\exception\ModelNotFoundException
  662. * @throws \think\exception\DbException
  663. * @throws \think\exception\PDOException
  664. */
  665. public function CustomerSupplierData()
  666. {
  667. if ($this->request->isGet() === false){
  668. $this->error('请求错误');
  669. }
  670. $db3 = \db()->connect(config('database.db3'));
  671. $OrganizationalDataList = $db3->name('U8_03客户供应商')
  672. ->where('MES接收时间',null)
  673. ->where('MES接收状态','0')
  674. ->select();
  675. if (empty($OrganizationalDataList)){
  676. $this->success('未找到新的客户供应商');
  677. }
  678. $i = 0;
  679. foreach ($OrganizationalDataList as $key=>$value){
  680. $data = [
  681. '类型'=>$value['类型'],
  682. '编号'=>$value['编号'],
  683. '名称'=>$value['名称'],
  684. '简称'=>$value['简称'],
  685. '地址'=>$value['地址'],
  686. '对口部门'=>$value['对口部门'],
  687. '联系人'=>$value['联系人'],
  688. '电话'=>$value['电话'],
  689. '业务员'=>$value['业务员'],
  690. '币种'=>$value['币种'],
  691. 'Sys_id'=>'[272/超级用户]',
  692. 'Sys_rq'=>date('Y-m-d H:i:s',time()),
  693. 'Mod_rq'=>'1900-01-01 00:00:00',
  694. 'U8UID'=>$value['U8_UID'],
  695. 'UniqId'=>$value['UniqId'],
  696. ];
  697. $number = \db('erp_客户供应商')
  698. ->where('U8UID',$value['U8_UID'])
  699. ->count();
  700. if ($number === 0){
  701. $sql = \db('erp_客户供应商')->fetchSql(true)->insert($data);
  702. $res = \db()->query($sql);
  703. if ($res === false){
  704. $i++;
  705. }else{
  706. $sqlString = $db3->name('U8_03客户供应商')
  707. ->where('UniqId', $value['UniqId'])
  708. ->fetchSql(true)
  709. ->update([
  710. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  711. 'MES接收状态' => '1'
  712. ]);
  713. $db3->execute($sqlString);
  714. }
  715. }else{
  716. $sql = \db('erp_客户供应商')
  717. ->fetchSql(true)
  718. ->where('U8UID',$value['U8_UID'])
  719. ->update($data);
  720. $res = \db()->query($sql);
  721. if ($res === false){
  722. $i++;
  723. }else{
  724. $sqlString = $db3->name('U8_03客户供应商')
  725. ->where('UniqId', $value['UniqId'])
  726. ->fetchSql(true)
  727. ->update([
  728. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  729. 'MES接收状态' => '1'
  730. ]);
  731. $db3->execute($sqlString);
  732. }
  733. }
  734. }
  735. if ($i !== 0){
  736. $this->error('客户供应商同步失败');
  737. }else{
  738. $this->success('客户供应商同步成功');
  739. }
  740. }
  741. /**
  742. * 物料领用记录数据同步
  743. * @return void
  744. * @throws \think\Exception
  745. * @throws \think\db\exception\BindParamException
  746. * @throws \think\db\exception\DataNotFoundException
  747. * @throws \think\db\exception\ModelNotFoundException
  748. * @throws \think\exception\DbException
  749. * @throws \think\exception\PDOException
  750. */
  751. public function ReceiptRecordData()
  752. {
  753. if ($this->request->isGet() === false){
  754. $this->error('请求错误');
  755. }
  756. $db3 = \db()->connect(config('database.db3'));
  757. $OrganizationalDataList = $db3->name('U8_07物料领用')
  758. ->where('MES接收时间',null)
  759. ->where('MES接收状态','0')
  760. ->select();
  761. if (empty($OrganizationalDataList)){
  762. $this->success('未找到新的物料领用记录');
  763. }
  764. $i = 0;
  765. foreach ($OrganizationalDataList as $key=>$value){
  766. if (preg_match("/[A-Za-z]/",$value['工单编号'])){
  767. $workcode = $value['工单编号'];
  768. }else{
  769. $workcode = 'Y'.$value['工单编号'];
  770. }
  771. $data = [
  772. 'st_rq'=>$value['日期'],
  773. 'st_jylb'=>$value['交易类别'],
  774. 'st_gdbh'=>$workcode,
  775. '采购单号'=>$value['采购单号'],
  776. '供方批次'=>$value['供方批次'],
  777. 'st_wlbh'=>$value['物料编号'],
  778. 'st_sl'=>$value['领用数量'],
  779. 'st_dw'=>$value['领用单位'],
  780. '领用单价'=>$value['领用单价'],
  781. 'st_desc'=>$value['备注'],
  782. '仓库编号'=>$value['仓库编号'],
  783. 'st_dpt'=>$value['采购单号'],
  784. 'st_jtbh'=>$value['机台编号'],
  785. 'sys_id'=>'[272/超级用户]',
  786. 'sys_rq'=>date('Y-m-d H:i:s',time()),
  787. 'mod_rq'=>'1900-01-01 00:00:00',
  788. 'U8UID'=>$value['U8_UID'],
  789. 'Uniqid'=>$value['UniqId'],
  790. ];
  791. $number = \db('物料_收发记录')
  792. ->where('U8UID',$value['U8_UID'])
  793. ->count();
  794. if ($number === 0){
  795. $sql = \db('物料_收发记录')->fetchSql(true)->insert($data);
  796. $res = \db()->query($sql);
  797. if ($res === false){
  798. $i++;
  799. }else{
  800. $sqlString = $db3->name('U8_07物料领用')
  801. ->where('UniqId', $value['UniqId'])
  802. ->fetchSql(true)
  803. ->update([
  804. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  805. 'MES接收状态' => '1'
  806. ]);
  807. $db3->execute($sqlString);
  808. }
  809. }else{
  810. $sql = \db('物料_收发记录')
  811. ->fetchSql(true)
  812. ->where('U8UID',$value['U8_UID'])
  813. ->update($data);
  814. $res = \db()->query($sql);
  815. if ($res === false){
  816. $i++;
  817. }else{
  818. $sqlString = $db3->name('U8_07物料领用')
  819. ->where('UniqId', $value['UniqId'])
  820. ->fetchSql(true)
  821. ->update([
  822. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  823. 'MES接收状态' => '1'
  824. ]);
  825. $db3->execute($sqlString);
  826. }
  827. }
  828. }
  829. if ($i !== 0){
  830. $this->error('物料领用记录同步失败');
  831. }else{
  832. $this->success('物料领用记录同步成功');
  833. }
  834. }
  835. /**
  836. * 仓库信息数据同步
  837. * @return void
  838. * @throws \think\Exception
  839. * @throws \think\db\exception\BindParamException
  840. * @throws \think\db\exception\DataNotFoundException
  841. * @throws \think\db\exception\ModelNotFoundException
  842. * @throws \think\exception\DbException
  843. * @throws \think\exception\PDOException
  844. */
  845. public function WarehouseInformationData()
  846. {
  847. if ($this->request->isGet() === false){
  848. $this->error('请求错误');
  849. }
  850. $db3 = \db()->connect(config('database.db3'));
  851. $OrganizationalDataList = $db3->name('U8_12仓库信息')
  852. ->where('MES接收时间',null)
  853. ->where('MES接收状态','0')
  854. ->select();
  855. if (empty($OrganizationalDataList)){
  856. $this->success('未找到新的仓库信息');
  857. }
  858. $i = 0;
  859. foreach ($OrganizationalDataList as $key=>$value){
  860. $data = [
  861. '编号'=>$value['编号'],
  862. '名称'=>$value['名称'],
  863. 'Sys_id'=>'[272/超级用户]',
  864. 'Sys_rq'=>date('Y-m-d H:i:s',time()),
  865. 'Mod_rq'=>'1900-01-01 00:00:00',
  866. 'U8UID'=>$value['U8_UID'],
  867. 'UniqId'=>$value['UniqId'],
  868. ];
  869. $number = \db('物料_仓库信息')
  870. ->where('U8UID',$value['U8_UID'])
  871. ->count();
  872. if ($number === 0){
  873. $sql = \db('物料_仓库信息')->fetchSql(true)->insert($data);
  874. $res = \db()->query($sql);
  875. if ($res === false){
  876. $i++;
  877. }else{
  878. $sqlString = $db3->name('U8_12仓库信息')
  879. ->where('UniqId', $value['UniqId'])
  880. ->fetchSql(true)
  881. ->update([
  882. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  883. 'MES接收状态' => '1'
  884. ]);
  885. $db3->execute($sqlString);
  886. }
  887. }else{
  888. $sql = \db('物料_仓库信息')
  889. ->fetchSql(true)
  890. ->where('U8UID',$value['U8_UID'])
  891. ->update($data);
  892. $res = \db()->query($sql);
  893. if ($res === false){
  894. $i++;
  895. }else{
  896. $sqlString = $db3->name('U8_12仓库信息')
  897. ->where('UniqId', $value['UniqId'])
  898. ->fetchSql(true)
  899. ->update([
  900. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  901. 'MES接收状态' => '1'
  902. ]);
  903. $db3->execute($sqlString);
  904. }
  905. }
  906. }
  907. if ($i !== 0){
  908. $this->error('仓库信息同步失败');
  909. }else{
  910. $this->success('仓库信息同步成功');
  911. }
  912. }
  913. /**
  914. * 职位编码数据同步
  915. * @return void
  916. * @throws \think\Exception
  917. * @throws \think\db\exception\BindParamException
  918. * @throws \think\db\exception\DataNotFoundException
  919. * @throws \think\db\exception\ModelNotFoundException
  920. * @throws \think\exception\DbException
  921. * @throws \think\exception\PDOException
  922. */
  923. public function PositionData()
  924. {
  925. if ($this->request->isGet() === false){
  926. $this->error('请求错误');
  927. }
  928. $db3 = \db()->connect(config('database.db3'));
  929. $OrganizationalDataList = $db3->name('U8_13职位编码')
  930. ->where('MES接收时间',null)
  931. ->where('MES接收状态','0')
  932. ->select();
  933. if (empty($OrganizationalDataList)){
  934. $this->success('未找到新的职位编码');
  935. }
  936. $i = 0;
  937. foreach ($OrganizationalDataList as $key=>$value){
  938. $data = [
  939. '职位编码'=>$value['职位编码'],
  940. '职位名称'=>$value['职位名称'],
  941. '定编人数'=>0,
  942. '备注说明'=>'',
  943. 'sys_id'=>'[272/超级用户]',
  944. 'sys_rq'=>date('Y-m-d H:i:s',time()),
  945. 'Mod_rq'=>'1900-01-01 00:00:00',
  946. 'U8UID'=>$value['U8_UID'],
  947. 'UniqID'=>$value['UniqID'],
  948. ];
  949. $number = \db('人事_职位编码')
  950. ->where('U8UID',$value['U8_UID'])
  951. ->count();
  952. if ($number === 0){
  953. $sql = \db('人事_职位编码')->fetchSql(true)->insert($data);
  954. $res = \db()->query($sql);
  955. if ($res === false){
  956. $i++;
  957. }else{
  958. $sqlString = $db3->name('U8_13职位编码')
  959. ->where('UniqID', $value['UniqID'])
  960. ->fetchSql(true)
  961. ->update([
  962. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  963. 'MES接收状态' => '1'
  964. ]);
  965. $db3->execute($sqlString);
  966. }
  967. }else{
  968. $sql = \db('人事_职位编码')
  969. ->fetchSql(true)
  970. ->where('U8UID',$value['U8_UID'])
  971. ->update($data);
  972. $res = \db()->query($sql);
  973. if ($res === false){
  974. $i++;
  975. }else{
  976. $sqlString = $db3->name('U8_13职位编码')
  977. ->where('UniqID', $value['UniqID'])
  978. ->fetchSql(true)
  979. ->update([
  980. 'MES接收时间' => date('Y-m-d H:i:s', time()),
  981. 'MES接收状态' => '1'
  982. ]);
  983. $db3->execute($sqlString);
  984. }
  985. }
  986. }
  987. if ($i !== 0){
  988. $this->error('职位编码同步失败');
  989. }else{
  990. $this->success('职位编码同步成功');
  991. }
  992. }
  993. /**
  994. * 设备产量计酬云中间表数据库同步
  995. * @return void
  996. * @throws \think\db\exception\BindParamException
  997. * @throws \think\db\exception\DataNotFoundException
  998. * @throws \think\db\exception\ModelNotFoundException
  999. * @throws \think\exception\DbException
  1000. * @throws \think\exception\PDOException
  1001. */
  1002. public function ProductionData()
  1003. {
  1004. if ($this->request->isGet() === false){
  1005. $this->error('请求错误');
  1006. }
  1007. if(is_dir(ROOT_PATH.'public/'.date('Y-m-d',time())) == null)
  1008. {
  1009. mkdir(ROOT_PATH.'public/'.date('Y-m-d',time()),0777,true);
  1010. }
  1011. $db5 = \db()->connect(config('database.db5'));
  1012. $where = [
  1013. 'sczl_rq' => ['>=','2024-04-01 00:00:00']
  1014. ];
  1015. $productData = $db5->name('设备_产量计酬')
  1016. ->where($where)
  1017. ->select();
  1018. var_dump($productData);
  1019. //获取机台信息
  1020. $machineData = \db('设备_基本资料')
  1021. ->where('mn_设备编号','<>','')
  1022. ->field('rtrim(设备编号) as 设备编号,rtrim(mn_设备编号) as 美浓设备编号')
  1023. ->select();
  1024. //获取员工资料
  1025. $employeeData = \db('人事_基本资料')
  1026. ->where('mn_员工编号','<>','')
  1027. ->field('rtrim(mn_员工编号) as 美浓员工编号')
  1028. ->select();
  1029. $employee = array_column($employeeData,'美浓员工编号');
  1030. //循环判断机台、员工编号
  1031. $j = 0;
  1032. $data = [];
  1033. foreach ($productData as $key=>$value){
  1034. //判断机台编号
  1035. foreach ($machineData as $v){
  1036. if ($value['sczl_jtbh'] === $v['美浓设备编号']){
  1037. $productData[$key]['sczl_jtbh'] = $v['设备编号'];
  1038. array_push($data,$productData[$key]);
  1039. }
  1040. }
  1041. }
  1042. if (empty($data)){
  1043. $this->error('未找到新的生产数据');
  1044. }
  1045. foreach ($data as $key=>$value){
  1046. $name = [];
  1047. //判断员工编号,如果不存在写入日志文件
  1048. for($i=1;$i<=10;$i++){
  1049. if (in_array($data[$key]['sczl_bh'.$i],$employee)){
  1050. $data[$key]['sczl_bh'.$i] = \db('人事_基本资料')
  1051. ->where('mn_员工编号',$data[$key]['sczl_bh'.$i])
  1052. ->value('员工编号');
  1053. }else{
  1054. array_push($name,$value['sczl_bh'.$i]);
  1055. $data[$key]['sczl_bh'.$i] = '';
  1056. }
  1057. }
  1058. $name = array_unique($name);
  1059. $filename = ROOT_PATH.'public/'.date('Y-m-d',time()).'/'.$value['sczl_jtbh'].'日志文件.txt';
  1060. $handle = fopen($filename, 'w');
  1061. foreach ($name as $v){
  1062. fwrite($handle, $v);
  1063. }
  1064. fclose($handle);
  1065. //修改工单编号
  1066. if (preg_match("/[A-Za-z]/",$value['sczl_gdbh'])){
  1067. $workcode = $value['sczl_gdbh'];
  1068. }else{
  1069. $workcode = 'Y'.$value['sczl_gdbh'];
  1070. }
  1071. $data[$key]['sczl_gdbh'] = $workcode;
  1072. }
  1073. //插入设备产量计酬数据
  1074. \db('设备_产量计酬')->delete(true);
  1075. $sql = \db('设备_产量计酬')->fetchSql(true)->insertAll($data);
  1076. $res = \db()->query($sql);
  1077. if ($res !== false){
  1078. $this->success('同步成功');
  1079. }else{
  1080. $this->error('同步失败');
  1081. }
  1082. }
  1083. }