handleCxData.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. <?php
  2. namespace app\command;
  3. use think\console\Command;
  4. use think\console\Input;
  5. use think\console\Output;
  6. use think\Exception;
  7. use think\facade\Db;
  8. //将cfp_caixiao_data里面的数据,分别处理到cfp_qrd_info,cfp_cgd_info(若未对账),或者cfp_caixiao_wait(已对账)
  9. class handleCxData extends command
  10. {
  11. private $interval = 15000 * 60;//执行间隔,单位:分(每次同步前5分钟的数据)
  12. protected function configure()
  13. {
  14. parent::configure(); // TODO: Change the autogenerated stub
  15. $this->setName('handleCxData')->setDescription('处理中间表的采销数据');
  16. }
  17. protected function execute(Input $input, Output $output)
  18. {
  19. $date = date('Y-m-d H:i:s');
  20. //cfp_caixiao_data
  21. $result = Db::name('caixiao_data')
  22. ->field(true)
  23. // ->whereBetween('addtime', [date('Y-m-d H:i:s', time() - $this->interval), $date])
  24. ->where("order_type",1)
  25. ->json(["data"])->order("addtime desc")
  26. ->limit(1000)
  27. ->select()
  28. ->toArray();
  29. echo Db::name('caixiao_data')->getLastSql();
  30. if ($result) {
  31. // Db::startTrans();
  32. try {
  33. $qrd_nos = $cgd_nos = $insert_wait = $all_customer = [];
  34. foreach ($result as $value) {
  35. if(!isset($value['data']['id']) &&$value['data']['id']>0 ) continue;
  36. if ($value['order_type'] == 1) {
  37. $qrd_nos[] = $value['data']['orderCode'];
  38. $all_customer[] = $value['data']['customer_code'];
  39. } else $cgd_nos[] = $value['data']['cgdNo'];
  40. }
  41. $exists_qrd = Db::name('qrd_info')
  42. ->whereIn('sequenceNo', $qrd_nos)
  43. ->column('id,sequenceNo,status', 'sequenceNo');
  44. $exists_cgd = Db::name('cgd_info')
  45. ->whereIn('sequenceNo', $cgd_nos)
  46. ->column('id,sequenceNo,status', 'sequenceNo');
  47. //所有客户对应的分公司信息
  48. $all_branch = Db::name('customer_info')
  49. ->whereIn('companyNo', $all_customer)
  50. ->column('branch', 'companyNo');
  51. $qrd_insert_data = $cgd_insert_data = [];
  52. foreach ($result as $key=> $value) {
  53. var_dump($value['data']['id']);
  54. if(!isset($value['data']['id']) || $value['data']['id']<=0 ) continue;
  55. if ($value['order_type'] == 1) {
  56. //已存在
  57. if (isset($exists_qrd[$value['data']['orderCode']])) {
  58. if ($exists_qrd[$value['data']['orderCode']]['status'] == 0) {
  59. //未对账,更新
  60. $re= Db::name('qrd_info')
  61. ->where('id', $exists_qrd[$value['data']['orderCode']]['id'])
  62. ->update([
  63. 'name' => '',//确认单名称,
  64. 'sequenceNo' => $value['data']['orderCode'],//确认单编号,
  65. 'ownerName' => $value['data']['apply_name'],//销售员,
  66. 'ownerid' => $value['data']['apply_id'],//销售员id,
  67. 'department' => $value['data']['depart'],//部门,
  68. 'createdTime' => $value['data']['addtime'],//销售单创建时间,
  69. 'qrdType' => $value['data']['order_type'],//销售单类型,
  70. 'qrdSource' => $value['data']['order_source'],//销售单来源,
  71. 'companyNo' => $value['data']['supplierNo'],//业务企业编号,
  72. 'companyName' => $value['data']['supplier_name'],//业务企业名称,
  73. 'customerNo' => $value['data']['customer_code'],//客户编号,
  74. 'customerName' => $value['data']['customer_name'],//客户名称,
  75. 'poCode' => $value['data']['poNo'],//po编号,
  76. 'platName' => $value['data']['platform_id'],//平台名称,
  77. 'workCode' => $value['data']['workNo'],//业务编号,
  78. 'zxCode' => $value['data']['zxNo'],//咨询单编号,
  79. 'goodNo' => $value['data']['good_code'],//商品编号,
  80. 'goodName' => $value['data']['good_name'],//商品名称,
  81. 'goodBrand' => $value['data']['brand'],//商品品牌,
  82. 'firstCat' => $value['data']['cat_name'][0]['cat_name']??"",//一级分类,
  83. 'secCat' => $value['data']['cat_name'][1]['cat_name']??"",//二级分类,
  84. 'thirdCat' => $value['data']['cat_name'][2]['cat_name']??"",//三级分类,
  85. 'catInfo' => json_encode($value['data']['cat_name']),//分类详情,
  86. 'fundCode' => $value['data']['cat_name'][2]['fund_code']??"",//核算编码,
  87. 'goodMaterial' => '',//商品材质,
  88. 'goodUnit' => $value['data']['unit'],//商品单位,
  89. 'goodDesc' => $value['data']['cost_desc'],//工艺说明,
  90. 'goodType' => $value['data']['good_type'],//商品类型,
  91. 'goodModel' => '',//商品型号,
  92. 'isStock' => $value['data']['is_stock'],//是否库存品,
  93. 'metalsType' => $value['data']['noble_metal'],//贵金属种类,
  94. 'weight' => $value['data']['good_weight'],//商品重量,
  95. 'goldPrice' => $value['data']['gold_price'],//贵金属单价,
  96. 'deliveryDay' => $value['data']['delivery_day'],//物流天数,
  97. 'workDay' => $value['data']['lead_time'],//工期,
  98. 'tax' => $value['data']['tax'],//税率,
  99. 'goodNum' => $value['data']['good_num'],//销售数量,
  100. 'goodPrice' => $value['data']['origin_price'],//产品单价,
  101. 'totalPrice' => $value['data']['total_price'],//货款总额,
  102. 'sendNum' => $value['data']['send_num'],//已发货数量,
  103. 'wsendNum' => $value['data']['wsend_num'],//未发货数量,
  104. 'apay_fee' => 0,//已付款,
  105. 'pay_fee' => 0,//付款中
  106. 'wpay_fee' => $value['data']['total_price'],//未付款,
  107. 'inv_fee' => 0,//回票中
  108. 'ainv_fee' => 0,//已开票,
  109. 'winv_fee' => $value['data']['total_price'],//未开票,
  110. 'is_diff' => $value['data']['is_diff'],//是否有工差,
  111. 'sendType' => $value['data']['send_type'],//发货方式,
  112. 'sendStatus' => $value['data']['send_status'],//发货状态,
  113. 'pay_status' => 1,//收款状态,1未付,2部分,3完结
  114. 'inv_status' => 1,//开票状态,,1未付,2部分,3完结
  115. 'remark' => '',//备注,
  116. 'invtime' => null,
  117. 'paytime' => null,
  118. 'diff_weight' => $value['data']['diff_weight'],//工差重量,
  119. 'diff_fee' => $value['data']['diff_fee'],//工差金额,
  120. 'area' => '',//公司,
  121. 'customerAttr' => $value['data']['platform_id'],//客户属性,
  122. 'branch' => $all_branch[$value['data']['customer_code']] ?? '',//分公司,从客户表中查
  123. 'cgdNo' => $value['data']['cgdNo'],//采购单号,
  124. 'thNum' => $value['data']['th_num'],//退货数量,
  125. 'th_fee' => $value['data']['th_fee'],//退货金额,
  126. 'is_del' => 0,//是否删除,
  127. 'addtime' => $date,
  128. 'updatetime' => $date,
  129. 'inv_tag' => 0,//开票标签,
  130. 'pay_tag' => 0,//回款标签,
  131. 'inv_tag_fee' => 0,//开票票标签金额,
  132. 'pay_tag_fee' => 0,//回款标签金额,
  133. ]);
  134. } else {
  135. //在对账,存在wait表中
  136. $value['id'] = null;
  137. $insert_wait[] = $value;
  138. }
  139. } else {
  140. //新增
  141. $qrd_insert_data[] = [
  142. 'name' => '',//确认单名称,
  143. 'sequenceNo' => $value['data']['orderCode'],//确认单编号,
  144. 'ownerName' => $value['data']['apply_name'],//销售员,
  145. 'ownerid' => $value['data']['apply_id'],//销售员id,
  146. 'department' => $value['data']['depart'],//部门,
  147. 'createdTime' => $value['data']['addtime'],//销售单创建时间,
  148. 'qrdType' => $value['data']['order_type'],//销售单类型,
  149. 'qrdSource' => $value['data']['order_source'],//销售单来源,
  150. 'companyNo' => $value['data']['supplierNo'],//业务企业编号,
  151. 'companyName' => $value['data']['supplier_name'],//业务企业名称,
  152. 'customerNo' => $value['data']['customer_code'],//客户编号,
  153. 'customerName' => $value['data']['customer_name'],//客户名称,
  154. 'poCode' => $value['data']['poNo'],//po编号,
  155. 'platName' => $value['data']['platform_id'],//平台名称,
  156. 'workCode' => $value['data']['workNo'],//业务编号,
  157. 'zxCode' => $value['data']['zxNo'],//咨询单编号,
  158. 'goodNo' => $value['data']['good_code'],//商品编号,
  159. 'goodName' => $value['data']['good_name'],//商品名称,
  160. 'goodBrand' => $value['data']['brand'],//商品品牌,
  161. 'firstCat' => $value['data']['cat_name'][0]['cat_name']??"",//一级分类,
  162. 'secCat' => $value['data']['cat_name'][1]['cat_name']??"",//二级分类,
  163. 'thirdCat' => $value['data']['cat_name'][2]['cat_name']??"",//三级分类,
  164. 'catInfo' => json_encode($value['data']['cat_name']),//分类详情,
  165. 'fundCode' => $value['data']['cat_name'][2]['fund_code']??"",//核算编码,
  166. 'goodMaterial' => '',//商品材质,
  167. 'goodUnit' => $value['data']['unit'],//商品单位,
  168. 'goodDesc' => $value['data']['cost_desc'],//工艺说明,
  169. 'goodType' => $value['data']['good_type'],//商品类型,
  170. 'goodModel' => '',//商品型号,
  171. 'isStock' => $value['data']['is_stock'],//是否库存品,
  172. 'metalsType' => $value['data']['noble_metal'],//贵金属种类,
  173. 'weight' => $value['data']['good_weight'],//商品重量,
  174. 'goldPrice' => $value['data']['gold_price'],//贵金属单价,
  175. 'deliveryDay' => $value['data']['delivery_day'],//物流天数,
  176. 'workDay' => $value['data']['lead_time'],//工期,
  177. 'tax' => $value['data']['tax'],//税率,
  178. 'goodNum' => $value['data']['good_num'],//销售数量,
  179. 'goodPrice' => $value['data']['origin_price'],//产品单价,
  180. 'totalPrice' => $value['data']['total_price'],//货款总额,
  181. 'sendNum' => $value['data']['send_num'],//已发货数量,
  182. 'wsendNum' => $value['data']['wsend_num'],//未发货数量,
  183. 'apay_fee' => 0,//已付款,
  184. 'pay_fee' => 0,//付款中
  185. 'wpay_fee' => $value['data']['total_price'],//未付款,
  186. 'inv_fee' => 0,//回票中
  187. 'ainv_fee' => 0,//已开票,
  188. 'winv_fee' => $value['data']['total_price'],//未开票,
  189. 'is_diff' => $value['data']['is_diff'],//是否有工差,
  190. 'sendType' => $value['data']['send_type'],//发货方式,
  191. 'sendStatus' => $value['data']['send_status'],//发货状态,
  192. 'pay_status' => 1,//收款状态,1未付,2部分,3完结
  193. 'inv_status' => 1,//开票状态,,1未付,2部分,3完结
  194. 'remark' => '',//备注,
  195. 'invtime' => null,
  196. 'paytime' => null,
  197. 'diff_weight' => $value['data']['diff_weight'],//工差重量,
  198. 'diff_fee' => $value['data']['diff_fee'],//工差金额,
  199. 'area' => '',//公司,
  200. 'customerAttr' => $value['data']['platform_id'],//客户属性,
  201. 'branch' => $all_branch[$value['data']['customer_code']] ?? '',//分公司,从客户表中查
  202. 'cgdNo' => $value['data']['cgdNo'],//采购单号,
  203. 'thNum' => $value['data']['th_num'],//退货数量,
  204. 'th_fee' => $value['data']['th_fee'],//退货金额,
  205. 'is_del' => 0,//是否删除,
  206. 'addtime' => $date,
  207. 'updatetime' => $date,
  208. 'inv_tag' => 0,//开票标签,
  209. 'pay_tag' => 0,//回款标签,
  210. 'inv_tag_fee' => 0,//开票票标签金额,
  211. 'pay_tag_fee' => 0,//回款标签金额,
  212. ];
  213. }
  214. } else {
  215. //已存在
  216. if (isset($exists_cgd[$value['data']['cgdNo']])) {
  217. //未对账,更新
  218. if ($exists_cgd[$value['data']['cgdNo']]['status'] == 0) {
  219. Db::name('cgd_info')
  220. ->where('id', $exists_cgd[$value['data']['cgdNo']]['id'])
  221. ->update([
  222. 'name' => $value['data']['cgdNo'],//采购单名称',
  223. 'sequenceNo' => $value['data']['cgdNo'],//采购单编号',
  224. 'ownerName' => $value['data']['cgder'],//采购员名称',
  225. 'ownerid' => $value['data']['cgder_id'],//采购员id',
  226. 'department' => $value['data']['depart'],//部门名称',
  227. 'createdTime' => $value['data']['addtime'],//订单创建时间',
  228. 'cgdType' => $value['data']['order_type'],//采购单类型',
  229. 'cgdSource' => $value['data']['order_source'],//采购单来源',
  230. 'companyNo' => $value['data']['companyNo'],//业务公司编号',
  231. 'companyName' => $value['data']['companyName'],//业务公司',
  232. 'cgdTime' => $value['data']['addtime'],//采购下单时间',
  233. 'bkCode' => $value['data']['bkcode'],//备库单编号',
  234. 'qrdCode' => $value['data']['qrdNo'],//确认单编号',
  235. 'goodNo' => $value['data']['spuCode'],//商品编号',
  236. 'goodName' => $value['data']['good_name'],//商品名称',
  237. 'goodType' => $value['data']['good_type'],//商品类型',
  238. 'goodBrand' => $value['data']['brand'],//商品品牌',
  239. 'goodModel' => '',//商品型号',
  240. 'firstCat' => $value['data']['cat_name'][0]['cat_name'],//商品一级分类',
  241. 'secCat' => $value['data']['cat_name'][1]['cat_name'],//二级分类',
  242. 'thirdCat' => $value['data']['cat_name'][2]['cat_name'],//三级分类',
  243. 'catInfo' => json_encode($value['data']['cat_name']),//分类明细',
  244. 'fundCode' => $value['data']['cat_name'][2]['fund_code'],//NOT NULL,
  245. 'goodMaterial' => '',//商品材质',
  246. 'goodUnit' => $value['data']['unit'],//商品单位',
  247. 'goodDesc' => $value['data']['cost_desc'],//工艺说明',
  248. 'metalsType' => $value['data']['noble_metal'],//贵金属种类',
  249. 'weight' => $value['data']['weight'],//商品重量',
  250. 'goldPrice' => $value['data']['gold_price'],//贵金属实时金价',
  251. 'is_diff' => $value['data']['is_diff'],//是否有工差',
  252. 'deliveryDay' => $value['data']['delivery_day'],//物流天数',
  253. 'workDay' => $value['data']['lead_time'],//产品工期',
  254. 'tax' => $value['data']['tax'],//税点',
  255. 'barePrice' => $value['data']['nake_fee'],//裸价',
  256. 'markPrice' => $value['data']['mark_fee'],//加标费',
  257. 'packPrice' => $value['data']['pakage_fee'],//包装费',
  258. 'certPrice' => $value['data']['cert_fee'],//证书费',
  259. 'openPrice' => $value['data']['open_fee'],//开模费',
  260. 'costPrice' => $value['data']['teach_fee'],//工艺费',
  261. 'deliveryPrice' => $value['data']['delivery_fee'],//物流费',
  262. 'goodPrice' => $value['data']['total_fee'],//成本合计/单价',
  263. 'isStock' => $value['data']['is_stock'],//是否库存品',
  264. 'goodNum' => $value['data']['good_num'],//下单数量',
  265. 'totalPrice' => $value['data']['total_fee'],//采购总货款',
  266. 'supplierNo' => $value['data']['supplierNo'],//供应商编号',
  267. 'supplierName' => $value['data']['supplier_name'],//供应商名称',
  268. 'apay_fee' => 0,//已付款金额',
  269. 'wpay_fee' => $value['data']['total_fee'],//未付款金额',
  270. 'ainv_fee' => 0,//已开票金额',
  271. 'winv_fee' => $value['data']['total_fee'],//未开票金额',
  272. 'sendType' => $value['data']['send_type'],//发货方式',
  273. 'bkCreater' => $value['data']['bkcreater'],//备库申请人',
  274. 'sendStatus' => $value['data']['send_status'],//发货状态',
  275. 'wsendNum' => $value['data']['wsend_num'],//未发货数量',
  276. 'sendNum' => $value['data']['send_num'],//已发货数量',
  277. 'wareHouse' => $value['data']['wsm_code'],//仓库名称',
  278. 'wsmCode' => $value['data']['wsm_code'],//仓库编号',
  279. 'remark' => '',//备注',
  280. 'pay_status' => 0,//付款情况',
  281. 'inv_status' => 0,//开票情况',
  282. 'diff_weight' => $value['data']['diff_weight'],//工差重量',
  283. 'diff_fee' => $value['data']['diff_fee'],//工差金额',
  284. 'thNum' => $value['data']['th_num'],//退货数量',
  285. 'th_fee' => $value['data']['th_fee'],//退货金额',
  286. 'check_rate' => '',//修正后的税率',
  287. 'is_del' => 0,
  288. 'addtime' => $date,
  289. 'updatetime' => $date,
  290. ]);
  291. } else {
  292. //在对账,存在wait表中
  293. $value['id'] = null;
  294. $insert_wait[] = $value;
  295. }
  296. } else {
  297. //新增
  298. $cgd_insert_data[] = [
  299. 'name' => $value['data']['cgdNo'],//采购单名称',
  300. 'sequenceNo' => $value['data']['cgdNo'],//采购单编号',
  301. 'ownerName' => $value['data']['cgder'],//采购员名称',
  302. 'ownerid' => $value['data']['cgder_id'],//采购员id',
  303. 'department' => $value['data']['depart'],//部门名称',
  304. 'createdTime' => $value['data']['addtime'],//订单创建时间',
  305. 'cgdType' => $value['data']['order_type'],//采购单类型',
  306. 'cgdSource' => $value['data']['order_source'],//采购单来源',
  307. 'companyNo' => $value['data']['companyNo'],//业务公司编号',
  308. 'companyName' => $value['data']['companyName'],//业务公司',
  309. 'cgdTime' => $value['data']['addtime'],//采购下单时间',
  310. 'bkCode' => $value['data']['bkcode'],//备库单编号',
  311. 'qrdCode' => $value['data']['qrdNo'],//确认单编号',
  312. 'goodNo' => $value['data']['spuCode'],//商品编号',
  313. 'goodName' => $value['data']['good_name'],//商品名称',
  314. 'goodType' => $value['data']['good_type'],//商品类型',
  315. 'goodBrand' => $value['data']['brand'],//商品品牌',
  316. 'goodModel' => '',//商品型号',
  317. 'firstCat' => $value['data']['cat_name'][0]['cat_name']??"",//商品一级分类',
  318. 'secCat' => $value['data']['cat_name'][1]['cat_name'],//二级分类',
  319. 'thirdCat' => $value['data']['cat_name'][2]['cat_name'],//三级分类',
  320. 'catInfo' => json_encode($value['data']['cat_name']),//分类明细',
  321. 'fundCode' => $value['data']['cat_name'][2]['fund_code'],//NOT NULL,
  322. 'goodMaterial' => '',//商品材质',
  323. 'goodUnit' => $value['data']['unit'],//商品单位',
  324. 'goodDesc' => $value['data']['cost_desc'],//工艺说明',
  325. 'metalsType' => $value['data']['noble_metal'],//贵金属种类',
  326. 'weight' => $value['data']['weight'],//商品重量',
  327. 'goldPrice' => $value['data']['gold_price'],//贵金属实时金价',
  328. 'is_diff' => $value['data']['is_diff'],//是否有工差',
  329. 'deliveryDay' => $value['data']['delivery_day'],//物流天数',
  330. 'workDay' => $value['data']['lead_time'],//产品工期',
  331. 'tax' => $value['data']['tax'],//税点',
  332. 'barePrice' => $value['data']['nake_fee'],//裸价',
  333. 'markPrice' => $value['data']['mark_fee'],//加标费',
  334. 'packPrice' => $value['data']['pakage_fee'],//包装费',
  335. 'certPrice' => $value['data']['cert_fee'],//证书费',
  336. 'openPrice' => $value['data']['open_fee'],//开模费',
  337. 'costPrice' => $value['data']['teach_fee'],//工艺费',
  338. 'deliveryPrice' => $value['data']['delivery_fee'],//物流费',
  339. 'goodPrice' => $value['data']['total_fee'],//成本合计/单价',
  340. 'isStock' => $value['data']['is_stock'],//是否库存品',
  341. 'goodNum' => $value['data']['good_num'],//下单数量',
  342. 'totalPrice' => $value['data']['total_fee'],//采购总货款',
  343. 'supplierNo' => $value['data']['supplierNo'],//供应商编号',
  344. 'supplierName' => $value['data']['supplier_name'],//供应商名称',
  345. 'apay_fee' => 0,//已付款金额',
  346. 'wpay_fee' => $value['data']['total_fee'],//未付款金额',
  347. 'ainv_fee' => 0,//已开票金额',
  348. 'winv_fee' => $value['data']['total_fee'],//未开票金额',
  349. 'sendType' => $value['data']['send_type'],//发货方式',
  350. 'bkCreater' => $value['data']['bkcreater'],//备库申请人',
  351. 'sendStatus' => $value['data']['send_status'],//发货状态',
  352. 'wsendNum' => $value['data']['wsend_num'],//未发货数量',
  353. 'sendNum' => $value['data']['send_num'],//已发货数量',
  354. 'wareHouse' => $value['data']['wsm_code'],//仓库名称',
  355. 'wsmCode' => $value['data']['wsm_code'],//仓库编号',
  356. 'remark' => '',//备注',
  357. 'pay_status' => 0,//付款情况',
  358. 'inv_status' => 0,//开票情况',
  359. 'diff_weight' => $value['data']['diff_weight'],//工差重量',
  360. 'diff_fee' => $value['data']['diff_fee'],//工差金额',
  361. 'thNum' => $value['data']['th_num'],//退货数量',
  362. 'th_fee' => $value['data']['th_fee'],//退货金额',
  363. 'check_rate' => '',//修正后的税率',
  364. 'is_del' => 0,
  365. 'addtime' => $date,
  366. 'updatetime' => $date,
  367. ];
  368. }
  369. }
  370. }
  371. echo count($qrd_insert_data);
  372. if ($qrd_insert_data) $re= Db::name('qrd_info')->insertAll($qrd_insert_data);
  373. if ($cgd_insert_data) Db::name('cgd_info')->insertAll($cgd_insert_data);
  374. if ($insert_wait) Db::name('caixiao_wait')->insertAll($insert_wait);
  375. var_dump($re);
  376. // Db::commit();
  377. $output->writeln('处理成功');
  378. } catch (Exception $exception) {
  379. // Db::rollback();
  380. $output->writeln($exception->getMessage());
  381. }
  382. }
  383. }
  384. }