ImportOrderFromCAnalysisData.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <?php
  2. declare (strict_types=1);
  3. namespace app\command;
  4. use app\admin\model\OrderImportFromC as OIFCModel;
  5. use think\console\Command;
  6. use think\console\Input;
  7. use think\console\input\Argument;
  8. use think\console\input\Option;
  9. use think\console\Output;
  10. use think\Exception;
  11. use think\facade\Db;
  12. use think\facade\Validate;
  13. //C端订单导入-数据解析
  14. class ImportOrderFromCAnalysisData extends Command
  15. {
  16. protected function configure()
  17. {
  18. // 指令配置
  19. $this->setName('analysisData')
  20. ->setDescription('批量解析C端导入的订单数据');
  21. }
  22. //【脚本1】解析用户导入的数据
  23. protected function execute(Input $input, Output $output)
  24. {
  25. //解析信息存到extend表,其中customer_code字段根据订单编号去customer_info查,其他根据商品编号查询
  26. Db::startTrans();
  27. try {
  28. $order_import_from_c_db = Db::name('order_import_from_c');
  29. $order_import_from_c_extend_db = Db::name('order_import_from_c_extend');
  30. $rs = $order_import_from_c_db
  31. ->where(['is_del' => OIFCModel::$is_del_normal, 'status' => OIFCModel::$status_wait_validate])
  32. ->find();
  33. if (empty($rs)) throw new Exception('无符合条件的记录');
  34. //1.数据校验
  35. $val = Validate::rule([
  36. 'platform_code|平台订单号' => 'require',
  37. 'platform_time|平台下单时间' => 'require|date',
  38. 'sale_source|销售渠道' => 'require|checkSaleSource:',
  39. 'plat_code|平台商品编号' => 'require',
  40. 'price|单价' => 'require|float',
  41. 'num|数量' => 'require|number|gt:0',
  42. 'before_discount_all_price|总金额' => 'require|float',
  43. 'mode|收费模式' => 'require|in:卡券支付,现金支付,混合支付',
  44. 'contactor|收货人' => 'require',
  45. 'mobile|联系电话' => 'require',
  46. 'addr|联系地址' => 'require',
  47. ]);
  48. //校验销售渠道
  49. $val->extend('checkSaleSource', function ($val) {
  50. $temp = Db::name('platform_source')
  51. ->field('id')
  52. ->where(['source' => $val, 'is_del' => 0])
  53. ->find();
  54. return empty($temp) ? '销售渠道不存在' : true;
  55. });
  56. $update_c_data = [
  57. 'updatetime' => date('Y-m-d H:i:s'),
  58. 'updateid' => 0,
  59. 'updater' => 'system',
  60. ];
  61. if (!$val->check($rs)) {
  62. $update_c_data['status'] = OIFCModel::$status_wait_confirm;
  63. $update_c_data['remark'] = '数据错误,' . $val->getError();
  64. }
  65. $extend_insert_data = [
  66. 'order_import_from_c_id' => $rs['id'],
  67. 'createrid' => 0,
  68. 'creater' => 'system',
  69. 'discount_reason' => $rs['activity_name'],
  70. 'platform_code' => $rs['platform_code'],
  71. 'po_code' => $rs['po_code'],
  72. 'platform_time' => $rs['platform_time'],
  73. 'price' => $rs['price'],
  74. 'num' => $rs['num'],
  75. 'before_discount_all_price' => $rs['before_discount_all_price'],
  76. 'order_remark' => $rs['order_remark'],
  77. 'contactor' => $rs['contactor'],
  78. 'mobile' => $rs['mobile'],
  79. 'addr' => $rs['addr'],
  80. 'type' => 1,//1系统解析,2用户确认
  81. 'addtime' => date('Y-m-d H:i:s'),
  82. 'sale_source' => $rs['sale_source'],
  83. 'mode' => $rs['mode'],
  84. ];
  85. //销售渠道
  86. // $extend_insert_data['sale_source'] = Db::name('platform_source')
  87. // ->where(['source' => $rs['sale_source'], 'is_del' => 0])
  88. // ->value('source', '');
  89. //组织extend的数据
  90. $good_platform_info = Db::name('good_platform')
  91. ->field('id,spuCode,platform_code,skuCode,plat_code')
  92. ->where(['is_del' => 0])
  93. ->where('plat_code', $rs['plat_code'])
  94. ->find();
  95. //商品信息
  96. if (!empty($good_platform_info)) {
  97. $extend_insert_data['spuCode'] = $good_platform_info['spuCode'];
  98. $extend_insert_data['platform_codes'] = $good_platform_info['platform_code'];
  99. $extend_insert_data['plat_code'] = $good_platform_info['plat_code'];
  100. $good_info = Db::name('good')
  101. ->field('id,good_name,companyNo,supplierNo')
  102. ->where(['is_del' => 0])
  103. ->where('spuCode', $extend_insert_data['spuCode'])
  104. ->find();
  105. if (!empty($good_info)) {
  106. $extend_insert_data['companyNo'] = $good_info['companyNo'];
  107. $extend_insert_data['supplierNo'] = $good_info['supplierNo'];
  108. $extend_insert_data['good_name'] = $good_info['good_name'];
  109. } else {
  110. $update_c_data['status'] = OIFCModel::$status_wait_confirm;
  111. $update_c_data['remark'] = isset($update_c_data['remark']) ? $update_c_data['remark'] . ',在上线商品表中查不到spuCode对应的商品信息' : '在上线商品表中查不到spuCode对应的商品信息';
  112. }
  113. //商品价格和总价
  114. $good_ladder = Db::name("good_ladder")
  115. ->field('id,sale_price')
  116. ->where(["skuCode" => $good_platform_info['skuCode'], "is_del" => 0, "status" => 1])
  117. ->where([["min_num", "<=", $rs['num']]])
  118. ->order("min_num desc")
  119. ->find();
  120. if (empty($good_ladder)) {
  121. $update_c_data['status'] = OIFCModel::$status_wait_confirm;
  122. $update_c_data['remark'] = isset($update_c_data['remark']) ? $update_c_data['remark'] . ',找不到商品售价' : '找不到商品售价';
  123. } else {
  124. if ($rs['price'] < $good_ladder['sale_price']) {
  125. $update_c_data['status'] = OIFCModel::$status_wait_confirm;
  126. $update_c_data['remark'] = isset($update_c_data['remark']) ? $update_c_data['remark'] . ',售价低于系统标准价' . $good_ladder['sale_price'] : '售价低于系统标准价' . $good_ladder['sale_price'];
  127. }
  128. if (($rs['num'] * $rs['price']) != $rs['before_discount_all_price']) {
  129. $update_c_data['status'] = OIFCModel::$status_wait_confirm;
  130. $update_c_data['remark'] = isset($update_c_data['remark']) ? $update_c_data['remark'] . ',导入总价错误' : '导入总价错误';
  131. }
  132. }
  133. } else {
  134. $update_c_data['status'] = OIFCModel::$status_wait_confirm;
  135. $update_c_data['remark'] = isset($update_c_data['remark']) ? $update_c_data['remark'] . ',在商品平台表中查不到平台商品编号对应的spuCode' : '在商品平台表中查不到平台商品编号对应的spuCode';
  136. }
  137. //活动信息
  138. if ($rs['activity_name']) {
  139. $activity_info = Db::name('good_activity')
  140. ->field('id,activity_name,activity_code')
  141. ->where(['activity_name' => $rs['activity_name'], 'is_del' => 0])
  142. ->find();
  143. if (empty($activity_info)) {
  144. $update_c_data['status'] = OIFCModel::$status_wait_confirm;
  145. $update_c_data['remark'] = isset($update_c_data['remark']) ? $update_c_data['remark'] . ',该活动不存在' : '该活动不存在';
  146. } else {
  147. $extend_insert_data['activity_code'] = $activity_info['activity_code'];
  148. $extend_insert_data['activity_name'] = $activity_info['activity_name'];
  149. }
  150. }
  151. //收费模式
  152. // $extend_insert_data['mode'] = in_array($rs['mode'], ['卡券支付', '现金支付', '混合支付']) ? $rs['mode'] : '';
  153. //企业客户
  154. $co = Db::name('good_platform')
  155. ->alias('gp')
  156. ->leftJoin('platform p', 'p.id=gp.platform_code AND p.is_del=0')
  157. ->leftJoin('customer_org1 co', 'co.name=p.platform_name AND co.is_del=0')
  158. ->where('gp.plat_code', $rs['plat_code'])
  159. ->field('co.id,co.name')->find();
  160. if ($co) {
  161. $customer_code = Db::name('customer_info')
  162. ->where(['itemid' => $co['id'], 'companyName' => $co['name'] . '客户', 'is_del' => 0])
  163. ->value('companyNo', '');
  164. if ($customer_code) $extend_insert_data['customer_code'] = $customer_code;
  165. else {
  166. $update_c_data['status'] = OIFCModel::$status_wait_confirm;
  167. $update_c_data['remark'] = isset($update_c_data['remark']) ? $update_c_data['remark'] . ',在企业客户管理组织中找不到对应的企业' : '在企业客户管理组织中找不到对应的企业';
  168. }
  169. } else {
  170. $update_c_data['status'] = OIFCModel::$status_wait_confirm;
  171. $update_c_data['remark'] = isset($update_c_data['remark']) ? $update_c_data['remark'] . ',在企业客户管理组织中找不到平台名称对应的组织' : '在企业客户管理组织中找不到平台名称对应的组织';
  172. }
  173. //省市区
  174. if ($rs['addr']) {
  175. $p_c_a = get_address($rs['addr']);
  176. $addr[] = Db::name('province')->whereLike('name', '%' . $p_c_a['province'] . '%')->value('province_code');
  177. $addr[] = Db::name('city')->whereLike('name', '%' . $p_c_a['city'] . '%')->value('city_code');
  178. $addr[] = Db::name('area')->whereLike('name', '%' . $p_c_a['district'] . '%')->value('area_code');
  179. $extend_insert_data['addr_code'] = implode($addr, ',');
  180. }
  181. $order_import_from_c_extend_db->insertGetId($extend_insert_data);
  182. if (!isset($update_c_data['status'])) $update_c_data['status'] = OIFCModel::$status_wait_relation;
  183. $order_import_from_c_db
  184. ->where([
  185. 'id' => $rs['id'],
  186. 'is_del' => OIFCModel::$is_del_normal,
  187. 'status' => OIFCModel::$status_wait_validate
  188. ])->update($update_c_data);
  189. Db::commit();
  190. // 指令输出
  191. $output->writeln(date('Y-m-d H:i:s') . '|解析成功');
  192. } catch (Exception $exception) {
  193. Db::rollback();
  194. // 指令输出
  195. $output->writeln(date('Y-m-d H:i:s') . '|解析失败,' . $exception->getMessage() . '|' . $exception->getFile() . '|' . $exception->getLine());
  196. }
  197. }
  198. }