Aac.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. <?php
  2. defined('BASEPATH') OR exit('No direct script access allowed');
  3. class Aac extends Start_Controller {
  4. public function __construct(){
  5. parent::__construct();
  6. $this->load->library('session');
  7. $this->load->_model('Model_user','user');
  8. $this->load->_model('Model_transfer','transfer');
  9. $this->load->_model('Model_typeclass','typeclass');
  10. $this->load->_model('Model_warehouse','warehouse');
  11. $this->load->_model('Model_systemtransfer','systemtransfer');
  12. $this->load->_model('Model_excel','excel');
  13. $this->load->_model('Model_fullorder','fullorder');
  14. $this->load->_model('Model_fullordertt','fullordertt');
  15. $this->load->_model('Model_fullordersmt','fullordersmt');
  16. $this->load->_model('Model_purchase','purchase');
  17. $this->load->_model('Model_classid','classid');
  18. $this->load->_model('Model_express','express');
  19. $this->load->_model('Model_shop','shop');
  20. $this->load->_model('Model_systemtransfer_cr','systemtransfer_cr');
  21. $this->load->_model("Model_logic_ding","logic_ding");
  22. }
  23. //定义方法的调用规则 获取URI第二段值
  24. public function _remap($arg,$arg_array)
  25. {
  26. var_dump(123);
  27. die;
  28. // if($arg == 'out')
  29. // {
  30. // $this->_out($arg_array);
  31. // }
  32. }
  33. public function _out($arg_array)
  34. {
  35. $label = $arg_array[1];
  36. $cz = $arg_array[0];
  37. $transfer = 13;
  38. if(isset($label))
  39. {
  40. $time = time();
  41. // $label = $this->input->post('label',true);
  42. // $cz = $this->input->post('cz',true);
  43. if(!$label)
  44. {
  45. echo json_encode(array('msg'=>'未扫入数据!','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  46. }
  47. if(!$transfer)
  48. {
  49. echo json_encode(array('msg'=>'请选择需对应的部门!','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  50. }
  51. $lb = $this->systemtransfer->get_label($label);
  52. if(!$lb)
  53. {
  54. echo json_encode(array('msg'=>'错误!未找到此条码','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  55. }
  56. if($lb['number']!='')
  57. {
  58. $nu = $this->fullorder->get_number($lb['number']);
  59. if(!$nu)
  60. {
  61. $nu = $this->fullordersmt->get_number($lb['number']);
  62. if(!$nu)
  63. {
  64. $nu = $this->fullordertt->get_number($lb['number']);
  65. }
  66. }
  67. //取消的订单还是要继续生产的 所以还允许继续扫入扫出 只是后续的出入库中不在限定时间
  68. // if($nu['state'] == '214' || $nu['state'] == '217')
  69. // {
  70. // echo json_encode(array('msg'=>'错误,此单已取消!请联系店员核实','success'=>false));exit;
  71. // }
  72. }
  73. $tdata = $this->transfer->find_all();
  74. $t = array();
  75. foreach ($tdata as $v)
  76. {
  77. $t[$v['id']] = $v['title'];
  78. }
  79. /**
  80. if($cz == 1 && stripos($lb['rk'],'|'.$transfer.'|') !== false)
  81. {
  82. echo json_encode(array('msg'=>'此条码已有入库操作!','success'=>false));exit;
  83. }
  84. if($cz == 2 && stripos($lb['ck'],'|'.$transfer.'|') !== false)
  85. {
  86. echo json_encode(array('msg'=>'此条码已有出库操作!','success'=>false));exit;
  87. }
  88. **/
  89. // if(stripos($lb['ck'],'|1|') === false && $transfer != 1 && stripos($nu['fpdata'],'-128-') !== false)
  90. // {
  91. // echo json_encode(array('msg'=>'必须有配货出库才可后续操作!','success'=>false));exit;
  92. // }
  93. //重新定义配货的原则问题
  94. //先检测订单是否含有 128 头套 或者配件 如果有 133 进行下一步检测
  95. $sku_arr = explode("-",$lb['features']);
  96. if(in_array(128,$sku_arr)||in_array(133,$sku_arr)){
  97. // 145 Full Lace Wig
  98. // 1170 HDFullLaceWig
  99. // 1249 FullLaceBobwithBang
  100. // 1484 FullLaceBob
  101. //如果是这4中全蕾丝那么配货就不处理
  102. if(in_array(145,$sku_arr) || in_array(1170,$sku_arr) || in_array(1249,$sku_arr) || in_array(1484,$sku_arr)){
  103. }else{
  104. if(stripos($lb['ck'],'|1|') === false && $transfer != 1 )
  105. {
  106. echo json_encode(array('msg'=>'头套和配件除了全蕾丝外必须走配货!','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  107. }
  108. }
  109. }
  110. if($cz == 2 && stripos($lb['rk'],'|'.$transfer.'|') === false)
  111. {
  112. echo json_encode(array('msg'=>'此条码还未入库!','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  113. }
  114. $lbrk = array_reverse(explode('|',trim($lb['rk'],'|')));
  115. $lbck = array_reverse(explode('|',trim($lb['ck'],'|')));
  116. if($transfer != 3 && $transfer != 11 && $transfer != 2)
  117. {
  118. if($cz == 1)
  119. {
  120. if($lb['rk'] != $lb['ck'])//判断是否没走完流程就拿到下一步奏
  121. {
  122. echo json_encode(array('msg'=>$t[$lbrk[0]].'还未出库,无法入库!','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  123. }
  124. }
  125. if($cz == 2 && $lbrk[0] != $transfer)//判断是否没走完流程就拿到下一步奏
  126. {
  127. echo json_encode(array('msg'=>$t[$transfer].'还未入库,无法出库!','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  128. }
  129. }
  130. if($cz == 1)
  131. {
  132. $lb['rk'] .= $transfer.'|';
  133. $lb['rktime'] .= $time.'|';
  134. if($lbrk[0] == $transfer)
  135. {
  136. echo json_encode(array('msg'=>'已有入库记录,不可连续重复录入!','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  137. }
  138. }
  139. else if($cz == 2)
  140. {
  141. $lb['ck'] .= $transfer.'|';
  142. $lb['cktime'] .= $time.'|';
  143. if($lbck[0] == $transfer)
  144. {
  145. echo json_encode(array('msg'=>'已有出库记录,不可连续重复录入!','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  146. }
  147. }
  148. $cztime = 'ctime'.$transfer;
  149. $this->logic_ding->sendToDing("检测货物流转打印情况".$transfer."|".$cz."|".$lb['number']."|".$lb['id']);
  150. if(($transfer == 3 && $lb['dbapi'] < 99 && $cz == 2) || ($transfer == 13 && $lb['dbapi'] < 99 && $cz == 1))//出入库用这个
  151. //if(($transfer == 8 || $transfer == 13) && $lb['dbapi'] < 99 && $cz == 1)//单入库
  152. {
  153. if($lb['type'] == 0)
  154. {
  155. $s = $this->shop->read($nu['shop']);
  156. $lb['kh'] = $s['yyid'];
  157. $lb['ts'] = 1;
  158. //$rk = $this->apiyy->_newrk($lb);
  159. $rk = [
  160. 'c'=>0,
  161. 'scid'=>"",
  162. ];
  163. if($rk['c'] == 0)
  164. {
  165. $this->db->trans_begin();
  166. $this->systemtransfer->save(array('rk'=>$lb['rk'],'rktime'=>$lb['rktime'],'ck'=>$lb['ck'],'cktime'=>$lb['cktime'],'time'=>$time,'gtime'=>date('YmdH',$time),'dbapi'=>99,'scid'=>$rk['scid'].time(),$cztime=>$time),$lb['id']);
  167. $this->systemtransfer_cr->insert(array('fid'=>$lb['id'],'lx'=>$transfer,'type'=>$cz,'time'=>$time));
  168. //处理定时任务每三分钟 执行一次的bug 在出库的时候直接同步相关信息
  169. if($cz == 2){
  170. $this->_doCheckIsOverTime($lb['id'],$transfer);
  171. }
  172. if ($this->db->trans_status() === TRUE)
  173. {
  174. $this->db->trans_commit();
  175. if($nu['state'] == '216')
  176. {
  177. echo json_encode(array('msg'=>'数据已录入成功!提示:此订单已出库,可选择终止生产。','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  178. }
  179. elseif(($nu['state'] == '217') || ($nu['state'] == '214')){
  180. //标记订单已经取消
  181. $this->_doCheckCancelFlag($lb['id']);
  182. echo json_encode(array('msg'=>'数据已录入成功!提示:【该单已取消】,可选择终止生产。','success'=>false),JSON_UNESCAPED_UNICODE);exit;
  183. }
  184. else
  185. {
  186. if($lb['is_jiaji'] == 2){
  187. echo json_encode(array('music'=>'1','is_jiaji'=>2,'success'=>true));exit;
  188. }else{
  189. echo json_encode(array('music'=>'1','success'=>true));exit;
  190. }
  191. }
  192. }
  193. else
  194. {
  195. $this->db->trans_rollback();
  196. echo json_encode(array('msg'=>'数据写入失败,请重试!','success'=>false));exit;
  197. }
  198. }
  199. else
  200. {
  201. if(stripos($rk['error'],'DocNo') !== false)
  202. {
  203. $rk['error'] = '未找到对应的生产订单 '.$lb['scid'];
  204. }
  205. $this->systemtransfer->save(array('dbapi'=>$rk['dbapi'],'scid'=>$rk['scid']),$lb['id']);
  206. echo json_encode(array('msg'=>'订单号:'.$lb['number'].' 用友报错:'.$rk['error'],'success'=>false));exit;
  207. }
  208. }
  209. else
  210. {
  211. $scid = explode('~',$lb['scid']);
  212. $rkdata = array('od'=>$scid[1],'ts'=>1,'title'=>$lb['title']);
  213. $rk = [
  214. 'Data'=>[
  215. [
  216. 'IsSucess'=>1,
  217. 'Code'=>1,
  218. ]
  219. ]
  220. ] ;
  221. if(isset($rk['Data'][0]))
  222. {
  223. if($rk['Data'][0]['IsSucess'] == 1)
  224. {
  225. $this->db->trans_begin();
  226. $this->systemtransfer->save(array('rk'=>$lb['rk'],'rktime'=>$lb['rktime'],'ck'=>$lb['ck'],'cktime'=>$lb['cktime'],'time'=>$time,'gtime'=>date('YmdH',$time),'dbapi'=>99,'scid'=>$lb['scid'].'~'.$rk['Data'][0]['Code'],$cztime=>$time),$lb['id']);
  227. $this->systemtransfer_cr->insert(array('fid'=>$lb['id'],'lx'=>$transfer,'type'=>$cz,'time'=>$time));
  228. //处理定时任务每三分钟 执行一次的bug 在出库的时候直接同步相关信息
  229. if($cz == 2){
  230. $this->_doCheckIsOverTime($lb['id'],$transfer);
  231. }
  232. if ($this->db->trans_status() === TRUE)
  233. {
  234. $this->db->trans_commit();
  235. if($nu['state'] == '216')
  236. {
  237. echo json_encode(array('msg'=>'数据已录入成功!提示:此订单已出库,可选择终止生产。','success'=>false));exit;
  238. }
  239. elseif(($nu['state'] == '217') || ($nu['state'] == '214')){
  240. //标记订单已经取消
  241. $this->_doCheckCancelFlag($lb['id']);
  242. echo json_encode(array('msg'=>'数据已录入成功!提示:【该单已取消】,可选择终止生产。','success'=>false));exit;
  243. }
  244. else
  245. {
  246. if($lb['is_jiaji'] == 2){
  247. echo json_encode(array('music'=>'1','is_jiaji'=>2,'success'=>true));exit;
  248. }else{
  249. echo json_encode(array('music'=>'1','success'=>true));exit;
  250. }
  251. }
  252. }
  253. else
  254. {
  255. $this->db->trans_rollback();
  256. echo json_encode(array('msg'=>'数据写入失败,请重试!','success'=>false));exit;
  257. }
  258. }
  259. else
  260. {
  261. echo json_encode(array('msg'=>$rk['Data'][0]['ErrorMsg'],'success'=>false));exit;
  262. }
  263. }
  264. else
  265. {
  266. echo json_encode(array('msg'=>$rk,'success'=>false));exit;
  267. }
  268. }
  269. }
  270. //if($transfer == 11 && stripos($lb['rk'],'|8|') === false && stripos($lb['ck'],'|3|') === false && stripos($lb['rk'],'|13|') === false)//只入库
  271. if($transfer == 11 && stripos($lb['ck'],'|3|') === false && stripos($lb['rk'],'|13|') === false)//改出入库
  272. {
  273. echo json_encode(array('msg'=>'工厂未出库,请退回工厂!','success'=>false));exit;
  274. }
  275. $this->systemtransfer->save(array('rk'=>$lb['rk'],'rktime'=>$lb['rktime'],'ck'=>$lb['ck'],'cktime'=>$lb['cktime'],'time'=>$time,'gtime'=>date('YmdH',$time),$cztime=>$time),$lb['id']);
  276. $this->systemtransfer_cr->insert(array('fid'=>$lb['id'],'lx'=>$transfer,'type'=>$cz,'time'=>$time));
  277. //处理定时任务每三分钟 执行一次的bug 在出库的时候直接同步相关信息
  278. if($cz == 2){
  279. $this->_doCheckIsOverTime($lb['id'],$transfer);
  280. }
  281. if ($this->db->trans_status() === TRUE)
  282. {
  283. $this->db->trans_commit();
  284. if($nu['state'] == '216')
  285. {
  286. echo json_encode(array('msg'=>'数据已录入成功!提示:此订单已出库,可选择终止生产。','success'=>false));exit;
  287. }
  288. elseif(($nu['state'] == '217') || ($nu['state'] == '214')){
  289. //标记订单已经取消
  290. $this->_doCheckCancelFlag($lb['id']);
  291. echo json_encode(array('msg'=>'数据已录入成功!提示:【该单已取消】,可选择终止生产。','success'=>false));exit;
  292. }
  293. else
  294. {
  295. if($lb['is_jiaji'] == 2){
  296. echo json_encode(array('music'=>'1','is_jiaji'=>2,'success'=>true));exit;
  297. }else{
  298. echo json_encode(array('music'=>'1','success'=>true));exit;
  299. }
  300. }
  301. }
  302. else
  303. {
  304. $this->db->trans_rollback();
  305. echo json_encode(array('msg'=>'数据写入失败,请重试!','success'=>false));exit;
  306. }
  307. }
  308. }
  309. //检测取消标记是否添加 同时也检查下 该流转单是否被标记为取消单
  310. private function _doCheckCancelFlag($fid){
  311. $info = $this->systemtransfer->read($fid);
  312. if($info['status'] != 11){
  313. $this->systemtransfer->save(['status'=>11],$fid);
  314. }
  315. $list = $this->systemtransfer_cr->find_all("fid = ".$fid,'*','id desc');
  316. if(empty($list)){
  317. return;
  318. }
  319. $is_cancel = false;
  320. foreach($list as $val){
  321. if($val['orver_flag'] == 3){
  322. $is_cancel = true;
  323. }
  324. }
  325. if($is_cancel){
  326. return ;
  327. }
  328. $this->systemtransfer_cr->save(['orver_flag'=>3],$list[0]['id']);
  329. }
  330. //检测是否超时 车间流转环节
  331. private function _doCheckIsOverTime($fid,$transfer){
  332. $list = $this->systemtransfer_cr->find_all("fid = ".$fid." and lx = ".$transfer." and is_over = 0","*",'id desc',0,2);
  333. if(count($list) < 2){
  334. return ;
  335. }
  336. if($list[0]['type'] != 2){
  337. return;
  338. }
  339. if($list[1]['type'] != 1){
  340. return;
  341. }
  342. if($list[1]['orver_flag'] == 2){
  343. $this->systemtransfer_cr->save(array('is_over'=>1,'orver_flag'=>2),$list[0]['id']);
  344. }else{
  345. $this->systemtransfer_cr->save(array('is_over'=>1),$list[0]['id']);
  346. }
  347. $this->systemtransfer_cr->save(array('is_over'=>1),$list[1]['id']);
  348. }
  349. }