RiskControlModelJob.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace app\jobs;
  3. use app\constants\OptionSetting;
  4. use app\models\Goods;
  5. use app\models\Option;
  6. use app\models\Store;
  7. use app\modules\admin\models\PlatformForm;
  8. use yii\base\BaseObject;
  9. use yii\queue\JobInterface;
  10. //风控规则
  11. class RiskControlModelJob extends BaseObject implements JobInterface
  12. {
  13. public $goods_id;
  14. //获取所有的云仓商品 使用云仓商品id去云仓中查询商品 如果查询的商品协议价大于商品售价 就执行风控规则 目前只有商品下架以及恢复成平台协议价
  15. public function execute($queue)
  16. {
  17. try {
  18. $platform_profit_strategy = Option::get('platform_profit_strategy', 0, 'store')['value'];
  19. $platform_profit_strategy = json_decode($platform_profit_strategy, true);
  20. if (empty($platform_profit_strategy)) {
  21. throw new \Exception('未配置风控规则');
  22. }
  23. if (!intval($platform_profit_strategy['is_risk_control']) ) {
  24. throw new \Exception('未开启风控规则');
  25. }
  26. //风控规则start
  27. $risk_control_model = intval($platform_profit_strategy['risk_control_model']);
  28. $goods_list = Goods::find()->alias('g')->leftJoin(['s' => Store::tableName()], 'g.store_id = s.id')
  29. ->where(['g.is_delete' => 0, 'g.status' => 1, 's.is_delete' => 0])->andWhere(['IS NOT', 'g.cloud_goods_id', NULL]);
  30. if ($this->goods_id) {
  31. $goods_list->andWhere(['g.id' => $this->goods_id]);
  32. }
  33. $goods_list = $goods_list->select('g.id, g.price, g.attr, g.cloud_goods_id')->asArray()->all();
  34. foreach ($goods_list as $item) {
  35. //获取云仓商品
  36. $cloud_url = "/goods/getGoodsInfo";
  37. $cloud_data = [];
  38. $cloud_data['goods_id'] = $item['cloud_goods_id'];
  39. $domain = (new OptionSetting)->getCloudDomainName();
  40. $cloud_info = cloud_post($domain . $cloud_url, $cloud_data);
  41. $cloud_info = json_decode($cloud_info, true);
  42. if($cloud_info['code'] != 0){
  43. debug_log($cloud_info, 'risk_control_result.log');
  44. }else{
  45. $goods = Goods::findOne($item['id']);
  46. //云仓商品协议价大于商品售价
  47. $cloud_goods = $cloud_info['data']['goods'];
  48. if ($item['price'] < $cloud_goods['platform_negotiated_price']) {
  49. if ($risk_control_model) {
  50. //原始协议价
  51. $goods->price = $cloud_goods['platform_negotiated_price'];
  52. } else {
  53. //商品下架
  54. $goods->status = 0;
  55. }
  56. }
  57. //规格中的云仓商品协议价大于商品售价处理
  58. $item['attr'] = json_decode($item['attr'], true);
  59. $cloud_goods['attrs'] = json_decode($cloud_goods['attrs'], true);
  60. foreach ($cloud_goods['attrs'] as $cloud_attr_item) {
  61. $cloud_no = $cloud_attr_item['no'];
  62. foreach ($item['attr'] as &$attr_item) {
  63. $_no = $attr_item['no'];
  64. if (!empty($cloud_no) && !empty($_no)) {
  65. if (strval($cloud_no) === strval($_no) && $attr_item['price'] < (!empty($cloud_attr_item['platform_negotiated_price']) ? $cloud_attr_item['platform_negotiated_price'] : $cloud_attr_item['price'])) {
  66. if ($risk_control_model) {
  67. //原始协议价
  68. $attr_item['price'] = (!empty($cloud_attr_item['platform_negotiated_price']) ? $cloud_attr_item['platform_negotiated_price'] : $cloud_goods['price']);
  69. } else {
  70. //商品下架
  71. $goods->status = 0;
  72. }
  73. }
  74. }
  75. }
  76. }
  77. $goods->attr = json_encode($item['attr'], JSON_UNESCAPED_UNICODE);
  78. if (!$goods->save()) {
  79. debug_log($goods->errors, 'risk_control_result.log');
  80. }
  81. }
  82. }
  83. } catch (\Exception $e) {
  84. debug_log([
  85. 'line' => $e->getLine(),
  86. 'file' => $e->getFile(),
  87. 'message' => $e->getMessage()
  88. ], 'risk_control_result.log');
  89. }
  90. }
  91. }