No Description

SyncOrderToMj.php 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use DB;
  5. use App\Order;
  6. use App\OrderScript;
  7. use App\FxOrder;
  8. use App\GoodsSkus;
  9. use App\OrderGoodsSkus;
  10. use App\Goods;
  11. class SyncOrderToMj extends Command {
  12. protected $signature = 'SyncOrderToMj';
  13. /**
  14. * The console command description.
  15. *
  16. * @var string
  17. */
  18. protected $description = '同步订单到卖家云';
  19. public function handle()
  20. {
  21. $this->SyncOrder();
  22. $this->SyncFxOrder();
  23. }
  24. public function SyncOrder(){
  25. //查询需要同步到卖家云的订单
  26. $today_date = date('Y-m-d');
  27. echo "\n订单同步时间: " . date('Y-m-d H:i:s');
  28. $result = Order::where('delivery_date', '=', $today_date)->where('warehouse', 3)->where('is_del', 0)->whereIn('status', [2,3])->lists('id');
  29. if(empty($result)){
  30. return;
  31. }
  32. foreach($result as $id){
  33. $mjOrder = $this->getMjOrder($id);
  34. if(!empty($mjOrder)){
  35. if($mjOrder['status'] == '已取消'){
  36. $res = $this->updateOrderToMj($id);
  37. echo "\n订单ID:".$id." 卖家取消订单重新更新";
  38. #同步到卖家云,更新order_goods_skus状态
  39. $mj_status = array();
  40. $mj_status['mj_status'] = 1;
  41. OrderGoodsSkus::where('order_id', $id)->where('is_del', 0)->update($mj_status);
  42. }
  43. }else{
  44. $res = $this->syncOrderToMj($id);
  45. if(!$res){
  46. echo "\n订单ID:".$id." 同步失败";
  47. }else{
  48. #同步到卖家云,更新order_goods_skus状态
  49. $mj_status = array();
  50. $mj_status['mj_status'] = 1;
  51. OrderGoodsSkus::where('order_id', $id)->where('is_del', 0)->update($mj_status);
  52. echo "\n订单ID:".$id." 同步成功";
  53. }
  54. }
  55. }
  56. }
  57. public function SyncFxOrder(){
  58. //查询需要同步到卖家云的订单
  59. $today_date = date('Y-m-d');
  60. echo "\n订单同步时间: " . date('Y-m-d H:i:s');
  61. $result = FxOrder::where('delivery_date', '=', $today_date)->where('warehouse', 3)->where('is_del', 0)->whereIn('status', [2,3])->lists('id');
  62. if(empty($result)){
  63. return;
  64. }
  65. foreach($result as $id){
  66. $mjOrder = $this->getFxMjOrder($id);
  67. if(!empty($mjOrder)){
  68. if($mjOrder['status'] == '已取消'){
  69. $res = $this->updateFxOrderToMj($id);
  70. echo "\n订单ID:".$id." 卖家取消订单重新更新";
  71. }
  72. }else{
  73. $res = $this->syncFxOrderToMj($id);
  74. if(!$res){
  75. echo "\n订单ID:".$id." 同步失败";
  76. }else{
  77. echo "\n订单ID:".$id." 同步成功";
  78. }
  79. }
  80. }
  81. }
  82. /**
  83. * 订单同步到卖家云
  84. */
  85. public function syncOrderToMj($id, $order = []){
  86. if( empty($order) ){
  87. $order = Order::select('eshopCode','outerCode','status','customerName','shippingType','expressCompanyCode','expressCompanyName','receiverName','receiverMobile','receiverPhone','receiverState','receiverCity','receiverDistrict','receiverStreet','receiverAddress','buyerPostageFee','discountFee','adjustFee','serviceFee','paymentMethod','paymentType','paymentAccount','paymentTime','receivedAmount','buyerMemo','sellerMemo','createTime','modifyTime')->where('id', $id)->first();
  88. $order = json_decode(json_encode($order), true);
  89. $skus = DB::table('order_goods_skus')->where('order_id', $id)->where('is_del', 0)->get();
  90. $skus = json_decode(json_encode($skus), true);
  91. foreach($skus as $k=>$v){
  92. $sku_info = GoodsSkus::where('id', $v['sku_id'])->first();
  93. $goods_info = Goods::where('id', $v['goods_id'])->first();
  94. $params = array();
  95. $params['outerCode'] = $order['outerCode']+$k+1; //外部平台中子订单编码
  96. $params['outerParentCode'] = $order['outerCode']; //外部平台中订单编码
  97. $params['goodsCode'] = $sku_info->goodsCode;//
  98. $params['skuCode'] = $v['sku_id'];
  99. #商品名称
  100. $params['goodsName'] = $goods_info->name;
  101. $params['propertiesName'] = $sku_info->is_weigh==1 ? $sku_info->propsName.'【按半斤称重】' : $sku_info->propsName;
  102. //$params['goodsName'] = '海钓黄翅鱼';//$goods->code;
  103. $params['price'] = $sku_info->is_weigh==1 ? round($v['price']/2,2) : $v['price'];
  104. $params['quantity'] = (int)($sku_info->is_weigh==1 ? $v['num']*2 : $v['num']);
  105. $params['discountFee'] = 0;
  106. $params['adjustFee'] = 0;
  107. $params['refundStatus'] = '正常';
  108. $order['skuList'][] = $params;
  109. }
  110. }
  111. //卖家云添加订单 ->改为审核通过再同步卖家云
  112. $mj_add = OrderScript::mjOrderAdd($order);
  113. //同步卖家云订单数据到本系统
  114. if( isset($mj_add['order']['code']) ){
  115. $mjorder = array();
  116. $mjorder['orderCode'] = $mj_add['order']['code'];
  117. Order::where('id', $id)->update($mjorder);
  118. }
  119. return $mj_add;
  120. }
  121. /**
  122. * 获取订单信息,可用来判断订单是否存在,同步订单状态
  123. */
  124. public function getMjOrder($id, $outerCode=''){
  125. $order = array();
  126. $order['eshopCode'] = config('constants.ESHOP_CODE');
  127. if(!$outerCode){
  128. $outerCode = Order::where('id', $id)->pluck('outerCode');
  129. }
  130. $order['outerCode'] = $outerCode;
  131. $mjOrder = OrderScript::mjOrderGet($order);
  132. if(!isset($mjOrder['order']['code'])){
  133. return false;
  134. }
  135. return $mjOrder['order'];
  136. }
  137. /**
  138. * 订单更新同步到卖家云
  139. */
  140. public function updateOrderToMj($id, $order = []){
  141. if( empty($order) ){
  142. $order = Order::select('orderCode as code','eshopCode','outerCode','status','customerName','shippingType','expressCompanyCode','expressCompanyName','receiverName','receiverMobile','receiverPhone','receiverState','receiverCity','receiverDistrict','receiverStreet','receiverAddress','buyerPostageFee','discountFee','adjustFee','serviceFee','paymentMethod','paymentType','paymentAccount','paymentTime','receivedAmount','buyerMemo','sellerMemo','createTime','modifyTime')->where('id', $id)->first();
  143. $order = json_decode(json_encode($order), true);
  144. }
  145. $mj_add = OrderScript::mjOrderUpdate($order);
  146. return $mj_add;
  147. }
  148. /**
  149. * 订单同步到卖家云
  150. */
  151. public function syncFxOrderToMj($id, $order = []){
  152. if( empty($order) ){
  153. $order = FxOrder::select('eshopCode','outerCode','status','customerName','shippingType','expressCompanyCode','expressCompanyName','receiverName','receiverMobile','receiverPhone','receiverState','receiverCity','receiverDistrict','receiverStreet','receiverAddress','buyerPostageFee','discountFee','adjustFee','serviceFee','paymentMethod','paymentType','paymentAccount','paymentTime','receivedAmount','buyerMemo','sellerMemo','createTime','modifyTime')->where('id', $id)->first();
  154. $order = json_decode(json_encode($order), true);
  155. $skus = DB::table('fx_order_goods_skus')->where('order_id', $id)->where('is_del', 0)->get();
  156. $skus = json_decode(json_encode($skus), true);
  157. foreach($skus as $k=>$v){
  158. $sku_info = GoodsSkus::where('id', $v['sku_id'])->first();
  159. $goods_info = Goods::where('id', $v['goods_id'])->first();
  160. $params = array();
  161. $params['outerCode'] = $order['outerCode']+$k+1; //外部平台中子订单编码
  162. $params['outerParentCode'] = $order['outerCode']; //外部平台中订单编码
  163. $params['goodsCode'] = $sku_info->goodsCode;//
  164. $params['skuCode'] = $v['sku_id'];
  165. #商品名称
  166. $params['goodsName'] = $goods_info->name;
  167. $params['propertiesName'] = $sku_info->is_weigh==1 ? $sku_info->propsName.'【按半斤称重】' : $sku_info->propsName;
  168. //$params['goodsName'] = '海钓黄翅鱼';//$goods->code;
  169. $params['price'] = $sku_info->is_weigh==1 ? round($v['price']/2,2) : $v['price'];
  170. $params['quantity'] = (int)($sku_info->is_weigh==1 ? $v['num']*2 : $v['num']);
  171. $params['discountFee'] = 0;
  172. $params['adjustFee'] = 0;
  173. $params['refundStatus'] = '正常';
  174. $order['skuList'][] = $params;
  175. }
  176. }
  177. //卖家云添加订单 ->改为审核通过再同步卖家云
  178. $mj_add = OrderScript::mjOrderAdd($order);
  179. //同步卖家云订单数据到本系统
  180. if( isset($mj_add['order']['code']) ){
  181. $mjorder = array();
  182. $mjorder['orderCode'] = $mj_add['order']['code'];
  183. FxOrder::where('id', $id)->update($mjorder);
  184. }
  185. return $mj_add;
  186. }
  187. /**
  188. * 获取订单信息,可用来判断订单是否存在,同步订单状态
  189. */
  190. public function getFxMjOrder($id, $outerCode=''){
  191. $order = array();
  192. $order['eshopCode'] = config('constants.ESHOP_CODE');
  193. if(!$outerCode){
  194. $outerCode = FxOrder::where('id', $id)->pluck('outerCode');
  195. }
  196. $order['outerCode'] = $outerCode;
  197. $mjOrder = OrderScript::mjOrderGet($order);
  198. if(!isset($mjOrder['order']['code'])){
  199. return false;
  200. }
  201. return $mjOrder['order'];
  202. }
  203. /**
  204. * 订单更新同步到卖家云
  205. */
  206. public function updateFxOrderToMj($id, $order = []){
  207. if( empty($order) ){
  208. $order = FxOrder::select('orderCode as code','eshopCode','outerCode','status','customerName','shippingType','expressCompanyCode','expressCompanyName','receiverName','receiverMobile','receiverPhone','receiverState','receiverCity','receiverDistrict','receiverStreet','receiverAddress','buyerPostageFee','discountFee','adjustFee','serviceFee','paymentMethod','paymentType','paymentAccount','paymentTime','receivedAmount','buyerMemo','sellerMemo','createTime','modifyTime')->where('id', $id)->first();
  209. $order = json_decode(json_encode($order), true);
  210. }
  211. $mj_add = OrderScript::mjOrderUpdate($order);
  212. return $mj_add;
  213. }
  214. }