ApiOrder.Class.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. <?php
  2. /**
  3. * 订单
  4. * Created by PhpStorm.
  5. * User: XiaoMing
  6. * Date: 2019/11/19
  7. * Time: 18:53
  8. */
  9. namespace JinDouYun\Controller\Order;
  10. use Mall\Framework\Core\StatusCode;
  11. use Mall\Framework\Core\ErrorCode;
  12. use JinDouYun\Controller\BaseController;
  13. use JinDouYun\Model\Cart\MCart;
  14. use JinDouYun\Model\Goods\MGoods;
  15. use JinDouYun\Model\Order\MOrderReturn;
  16. use JinDouYun\Model\Order\MOrder;
  17. use JinDouYun\Model\Price\MPrice;
  18. class ApiOrder extends BaseController
  19. {
  20. private $objMOrder;
  21. private $objMCart;
  22. /**
  23. * Order constructor.
  24. * @param bool $isCheckAcl
  25. * @param bool $isMustLogin
  26. * @throws \Exception
  27. */
  28. public function __construct($isCheckAcl = false, $isMustLogin = true)
  29. {
  30. parent::__construct($isCheckAcl, $isMustLogin);
  31. $this->objMOrder = new MOrder($this->onlineUserId, $this->onlineEnterpriseId, $this->onlineUserId, true);
  32. $this->objMCart = new MCart($this->onlineUserId, $this->onlineEnterpriseId, true);
  33. }
  34. /**
  35. * @return array
  36. * @throws \Exception
  37. */
  38. public function commonFieldFilter()
  39. {
  40. $params = $this->request->getRawJson();
  41. if (empty($params)) {
  42. parent::sendOutput('参数为空', ErrorCode::$paramError);
  43. }
  44. $orderData = [
  45. 'payType' => isset($params['payType']) ? $params['payType'] : '',
  46. 'source' => isset($params['source']) ? $params['source'] : 0,//订单来源
  47. 'goodsData' => isset($params['goodsData']) ? $params['goodsData'] : '',//商品数据json(包含信息有以下字段)
  48. ];
  49. foreach ($orderData as $key => $value) {
  50. if (empty($value) && $value !== 0) {
  51. parent::sendOutput($key . '参数错误', ErrorCode::$paramError);
  52. }
  53. }
  54. $objMGoods = new MGoods($this->onlineEnterpriseId,true,$this->onlineUserId);
  55. $orderData['deliveryType'] = isset($params['deliveryType']) ? $params['deliveryType'] : 0;
  56. $orderData['receiveAddressId'] = isset($params['receiveAddressId']) ? $params['receiveAddressId'] : 0;//收货地址id
  57. $orderData['version'] = isset($params['version']) ? $params['version'] : 0;
  58. $orderData['comBinId'] = isset($params['comBinId']) ? $params['comBinId'] : 0;//组合套餐id
  59. $orderData['selfRuleId'] = isset($params['selfRuleId']) ? $params['selfRuleId'] : 0;//自提点id
  60. $orderData['useCoupon'] = isset($params['useCoupon']) ? $params['useCoupon'] : '';
  61. $orderData['remark'] = isset($params['orderRemark']) ? $params['orderRemark'] : '';//订单备注
  62. $orderData['admixPayData'] = getArrayItem($params, 'admixPayData', []); // 混合支付数据
  63. $allGoodsData = [
  64. 'totalMoney' => isset($orderData['goodsData']['totalMoney']) ? $orderData['goodsData']['totalMoney'] : '',
  65. 'payMoney' => isset($orderData['goodsData']['payMoney']) ? $orderData['goodsData']['payMoney'] : '',
  66. 'preferential' => isset($orderData['goodsData']['preferential']) ? $orderData['goodsData']['preferential'] : '',
  67. 'checkNum' => isset($orderData['goodsData']['checkNum']) ? $orderData['goodsData']['checkNum'] : '',
  68. 'expressMoney' => isset($orderData['goodsData']['expressMoney']) ? $orderData['goodsData']['expressMoney'] : 0,
  69. 'goodsData' => isset($orderData['goodsData']['goodsData']) ? $orderData['goodsData']['goodsData'] : '',
  70. ];
  71. if ($allGoodsData['payMoney'] == 0) {
  72. parent::sendOutput('订单金额异常,无法下单,请联系客服!', ErrorCode::$paramError);
  73. }
  74. foreach ($allGoodsData as $key => $value) {
  75. if (empty($value) && $value !== 0) {
  76. parent::sendOutput($key . '参数错误', ErrorCode::$paramError);
  77. }
  78. }
  79. $allShopData = $allGoodsData['goodsData'];
  80. $goodsData = [];
  81. $allGoods = [];
  82. $proporties = [];
  83. foreach ($allShopData as $key => $val) {
  84. $goodsData[$key] = [
  85. 'shopId' => isset($val['shopId']) ? $val['shopId'] : '',
  86. 'shopName' => isset($val['shopName']) ? $val['shopName'] : '',
  87. 'totalMoney' => isset($val['totalMoney']) ? $val['totalMoney'] : '',
  88. 'payMoney' => isset($val['payMoney']) ? $val['payMoney'] : '',
  89. 'expressMoney' => isset($val['expressMoney']) ? $val['expressMoney'] : 0,
  90. 'shopGoodsData' => isset($val['shopGoodsData']) ? $val['shopGoodsData'] : '',
  91. ];
  92. foreach ($goodsData[$key] as $k => $v) {
  93. if (empty($v) && $v !== 0) {
  94. parent::sendOutput($k . '参数错误', ErrorCode::$paramError);
  95. }
  96. }
  97. if ($orderData['version'] == 1){
  98. if (!isset($val['deliveryType'])){
  99. parent::sendOutput('deliveryType参数错误',ErrorCode::$paramError);
  100. }
  101. if (!isset($val['selfRuleId'])){
  102. parent::sendOutput('selfRuleId参数错误',ErrorCode::$paramError);
  103. }
  104. if (!isset($val['receiveAddressId'])){
  105. parent::sendOutput('receiveAddressId参数错误',ErrorCode::$paramError);
  106. }
  107. $proporties[$val['shopId']] = [
  108. 'deliveryType' => $val['deliveryType'],
  109. 'selfRuleId' => $val['selfRuleId'],
  110. 'receiveAddressId' => $val['receiveAddressId']
  111. ];
  112. }
  113. }
  114. //活动商品验证剩余数量
  115. $orderData['proporties'] = $proporties;
  116. $dbResult = $this->objMOrder->checkLimit($allGoods);
  117. if (!$dbResult->isSuccess()) {
  118. parent::sendOutput($dbResult->getData(), $dbResult->getErrorCode());
  119. }
  120. $lists = $orderData['goodsData']['goodsData'];
  121. foreach ($lists as &$item){
  122. $shopGoodsData = $item['shopGoodsData'];
  123. foreach ($shopGoodsData as &$row){
  124. if ($row['isEq'] == StatusCode::$standard){
  125. $extends = $row['extends'];
  126. $row['skuId'] = $extends['uId'];
  127. $row['unitName'] = $extends['u'];
  128. $row['buyNum'] = bcmul($row['buyNum'],$extends['conversion'],2);
  129. $row['conversion'] = 0;
  130. $goodsResult = $objMGoods->getGoodsInfo($row['goodsId']);
  131. if (!$goodsResult->isSuccess()){
  132. parent::sendOutput($goodsResult->getData(),ErrorCode::$dberror);
  133. }
  134. $goodsInfo = $goodsResult->getData();
  135. $specMultiple = $goodsInfo['specMultiple'];
  136. $specMultipleMap = [];
  137. foreach ($specMultiple as $spec){
  138. $specMultipleMap[$spec['id']] = $spec;
  139. }
  140. $masterPrice = 0;
  141. if( isset($specMultipleMap[$extends['uId']]) ){
  142. $objMPrice = new MPrice($this->onlineUserId, $this->onlineEnterpriseId);
  143. if( isset($specMultipleMap[$extends['uId']]['memberPrice']) && !empty($specMultipleMap[$extends['uId']]['memberPrice'])){
  144. $masterPrice = $specMultipleMap[$extends['uId']]['memberPrice'];
  145. }else{
  146. $masterPrice = $objMPrice->getLadderPriceCommon($specMultipleMap[$extends['uId']]['ladderPrice'], $specMultipleMap[$extends['uId']]['salePrice'], $row['buyNum'],$specMultipleMap[$extends['uId']]['enabledLadder']);
  147. }
  148. }
  149. if ($masterPrice == 0){
  150. parent::sendOutput('抄码商品'.$row['goodsId'].'价格获取错误',ErrorCode::$paramError);
  151. }
  152. $row['price'] = $masterPrice;
  153. $item['salePrice'] = $masterPrice;
  154. }
  155. }
  156. $item['shopGoodsData'] = $shopGoodsData;
  157. }
  158. $orderData['goodsData']['goodsData'] = $lists;
  159. return $orderData;
  160. }
  161. /**
  162. * 上传银行打款凭证
  163. */
  164. public function addOrderBankData()
  165. {
  166. $params = $this->request->getRawJson();
  167. if (empty($params)) {
  168. parent::sendOutput('参数为空', ErrorCode::$paramError);
  169. }
  170. $orderBankData = [
  171. 'orderId' => isset($params['orderId']) ? $params['orderId'] : '',
  172. 'bankData' => isset($params['bankData']) ? $params['bankData'] : '',
  173. ];
  174. foreach ($orderBankData as $k => $v) {
  175. if (empty($v) && $v !== 0) {
  176. parent::sendOutput($k . '参数错误', ErrorCode::$paramError);
  177. }
  178. }
  179. if(!is_array($orderBankData['orderId'])){
  180. parent::sendOutput('orderId参数错误', ErrorCode::$paramError);
  181. }
  182. $result = $this->objMOrder->addOrderBankData($orderBankData);
  183. if ($result->isSuccess()) {
  184. parent::sendOutput($result->getData());
  185. }
  186. parent::sendOutput($result->getData(), $result->getErrorCode());
  187. }
  188. /**
  189. * 添加订单
  190. * @throws \Exception
  191. */
  192. public function addOrder()
  193. {
  194. $orderData = $this->commonFieldFilter();
  195. $ip = $this->request->get_onlineip();
  196. $result = $this->objMOrder->addOrder($orderData, $ip,$this->token,$this->authorization);
  197. if ($result->isSuccess()) {
  198. parent::sendOutput($result->getData());
  199. }
  200. parent::sendOutput($result->getData(), $result->getErrorCode());
  201. }
  202. /**
  203. * 更新订单状态,取消订单/确认订单
  204. * @throws \Exception
  205. */
  206. public function updateOrderStatus()
  207. {
  208. $id = $this->request->param('request_id');
  209. if (!$id) {
  210. $this->sendOutput('参数错误', ErrorCode::$paramError);
  211. }
  212. $params = $this->request->getRawJson();
  213. $params = [
  214. 'orderStatus' => isset($params['orderStatus']) ? $params['orderStatus'] : StatusCode::$orderStatus['close'], // 不传时为取消订单
  215. 'cancelReason' => isset($params['cancelReason']) ? $params['cancelReason'] : '',
  216. 'cancelbeforeOrderStatus' => getArrayItem($params, 'cancelbeforeOrderStatus' , '')
  217. ];
  218. if( $params['orderStatus'] == StatusCode::$orderStatus['close'] && empty($params['cancelReason']) ){
  219. parent::sendOutput('请输入取消订单原因', ErrorCode::$paramError);
  220. }
  221. $result = $this->objMOrder->updateOrderStatus($id, $params,
  222. [
  223. 'Token' => $this->token,
  224. 'Authorization' => $this->authorization
  225. ]
  226. );
  227. if ($result->isSuccess()) {
  228. parent::sendOutput($result->getData());
  229. }
  230. parent::sendOutput($result->getData(), $result->getErrorCode());
  231. }
  232. /**
  233. * 获取指定订单详情
  234. * @throws \Exception
  235. */
  236. public function getOrderInfoById()
  237. {
  238. $orderId = $this->request->param('request_id');
  239. if (!$orderId) {
  240. $this->sendOutput('参数错误', ErrorCode::$paramError);
  241. }
  242. $result = $this->objMOrder->getOrderInfoById($orderId);
  243. if ($result->isSuccess()) {
  244. parent::sendOutput($result->getData());
  245. }
  246. parent::sendOutput($result->getData(), $result->getErrorCode());
  247. }
  248. /**
  249. * 全部 {"page": 1,"pageSize": 10,"orderStatus": 0}
  250. * 待付款 {"page": 1,"pageSize": 10,"orderStatus": 2}
  251. * 待发货 {"page": 1,"pageSize": 10,"orderStatus": 3}
  252. * 待收货 {"page": 1,"pageSize": 10,"orderStatus": 4}
  253. * 待收货 {"page": 1,"pageSize": 10,"orderStatus": 5}
  254. * @throws \Exception
  255. */
  256. public function getOrderSelect()
  257. {
  258. $params = $this->request->getRawJson();
  259. $page = $this->request->param('page') ?: 1;
  260. $pageSize = $this->request->param('pageSize') ?: 10;
  261. $offset = ($page - 1) * $pageSize;
  262. $params['limit'] = $pageSize;
  263. $params['offset'] = $offset;
  264. $orderData = $this->objMOrder->getOrderSelect($params);
  265. if ($orderData->isSuccess()) {
  266. $returnData = $orderData->getData();
  267. $pageData = [
  268. 'pageIndex' => $page,
  269. 'pageSize' => $pageSize,
  270. 'pageTotal' => $returnData['total'],
  271. ];
  272. parent::sendOutput($returnData['data'], 0, $pageData);
  273. }
  274. parent::sendOutput($orderData->getData(), ErrorCode::$dberror);
  275. }
  276. /**
  277. * 订单再次支付
  278. * @throws \Exception
  279. */
  280. public function payOrder()
  281. {
  282. $paramsData = $this->request->getRawJson();
  283. if (empty($paramsData)) {
  284. $this->sendOutput('参数为空', ErrorCode::$paramError);
  285. }
  286. $params = [
  287. 'payType' => isset($paramsData['payType']) ? $paramsData['payType'] : '',
  288. 'no' => isset($paramsData['no']) ? $paramsData['no'] : '',
  289. 'source' => isset($paramsData['source']) ? $paramsData['source'] : StatusCode::$source['miniProgram'],
  290. ];
  291. foreach ($params as $key => $value) {
  292. if (empty($value) && $value !== 0) {
  293. $this->sendOutput($key . '参数错误', ErrorCode::$paramError);
  294. }
  295. }
  296. $params['bankData'] = getArrayItem($paramsData,'bankData',(object)[]);
  297. $params['admixPayData'] = getArrayItem($paramsData,'admixPayData',[]);
  298. $ip = $this->request->get_onlineip();
  299. $result = $this->objMOrder->payOrder($params, $ip);
  300. if ($result->isSuccess()) {
  301. parent::sendOutput($result->getData());
  302. }
  303. parent::sendOutput($result->getData(), $result->getErrorCode());
  304. }
  305. /**
  306. * Doc: (des="")
  307. * User: XMing
  308. * Date: 2020/9/8
  309. * Time: 7:12 下午
  310. */
  311. public function getExpressInfoByOrderId()
  312. {
  313. $orderId = $this->request->param('request_id');
  314. if (!$orderId) {
  315. $this->sendOutput('参数错误', ErrorCode::$paramError);
  316. }
  317. $result = $this->objMOrder->getExpressInfoByOrderId($orderId);
  318. if ($result->isSuccess()) {
  319. parent::sendOutput($result->getData());
  320. }
  321. parent::sendOutput($result->getData(), $result->getErrorCode());
  322. }
  323. /**
  324. * 订单退货添加
  325. * @throws \Exception
  326. */
  327. public function addOrderReturn()
  328. {
  329. $params = $this->request->getRawJson();
  330. if (empty($params)) {
  331. parent::sendOutput('参数为空', ErrorCode::$paramError);
  332. }
  333. $data = [
  334. 'originId' => isset($params['originId']) ? $params['originId'] : '',
  335. 'originNo' => isset($params['originNo']) ? $params['originNo'] : '',
  336. 'shopId' => isset($params['shopId']) ? $params['shopId'] : '',
  337. 'shopName' => isset($params['shopName']) ? $params['shopName'] : '',
  338. 'operatorName' => isset($params['operatorName']) ? $params['operatorName'] : '',
  339. 'operatorId' => $this->onlineUserId,
  340. 'userCenterId' => isset($params['userCenterId']) ? $params['userCenterId'] : '',
  341. 'customerId' => isset($params['customerId']) ? $params['customerId'] : '',
  342. 'customerName' => isset($params['customerName']) ? $params['customerName'] : '',
  343. ];
  344. foreach ($data as $key => $value) {
  345. if (empty($value)) {
  346. parent::sendOutput($key . '参数错误', ErrorCode::$paramError);
  347. }
  348. }
  349. $data['remark'] = isset($params['remark']) ? $params['remark'] : '';
  350. $data['no'] = isset($params['no']) ? $params['no'] : '';
  351. $data['auditId'] = isset($params['auditName']) ? $this->onlineUserId : null;
  352. $data['auditName'] = isset($params['auditName']) ? $params['auditName'] : null;
  353. $data['auditId'] = isset($params['auditId']) ? $params['auditId'] : null;
  354. $data['deleteArray'] = isset($params['deleteArray']) ? $params['deleteArray'] : [];
  355. if (empty($params['details']) || !isset($params['details'])) parent::sendOutput('商品数据为空', ErrorCode::$paramError);
  356. $data['num'] = 0;
  357. $data['details'] = [];
  358. foreach ($params['details'] as $key => $value) {
  359. $data['num']++;
  360. $details = [
  361. 'goodsId' => isset($value['goodsId']) ? $value['goodsId'] : '',
  362. 'goodsName' => isset($value['goodsName']) ? $value['goodsName'] : '',
  363. 'goodsCode' => isset($value['goodsCode']) ? $value['goodsCode'] : '',
  364. 'goodsBasicId' => isset($value['goodsBasicId']) ? $value['goodsBasicId'] : '',
  365. 'skuId' => isset($value['skuId']) ? $value['skuId'] : '',
  366. 'unitName' => isset($value['unitName']) ? $value['unitName'] : '',
  367. 'skuName' => isset($value['skuName']) ? $value['skuName'] : '',
  368. 'num' => isset($value['num']) ? $value['num'] : '',
  369. 'returnUnitPrice' => isset($value['returnUnitPrice']) ? $value['returnUnitPrice'] : '',
  370. 'saleUnitPrice' => isset($value['saleUnitPrice']) ? $value['saleUnitPrice'] : '',
  371. 'returnTotalPrice' => isset($value['returnTotalPrice']) ? $value['returnTotalPrice'] : '',
  372. 'saleTotalPrice' => isset($value['saleTotalPrice']) ? $value['saleTotalPrice'] : '',
  373. 'updateTime' => time(),
  374. ];
  375. (isset($value['id']) && !empty($value['id'])) && $details['id'] = $value['id'];
  376. $details['deleteStatus'] = isset($value['deleteStatus']) ? $value['deleteStatus'] : StatusCode::$standard;
  377. isset($value['saleNum']) && $details['extend'] = json_encode(['saleNum' => $value['saleNum']]);
  378. $data['details'][] = $details;
  379. }
  380. $data['updateTime'] = time();
  381. $objMOrderReturn = new MOrderReturn($this->onlineEnterpriseId, $this->onlineUserId);
  382. $modelResult = $objMOrderReturn->addOrderReturn($data);
  383. if (!$modelResult->isSuccess()) {
  384. parent::sendOutput($modelResult->getData(), $modelResult->getErrorCode());
  385. }
  386. parent::sendOutput($modelResult->getData());
  387. }
  388. // 获取售后订单
  389. public function getAllOrderReturn()
  390. {
  391. $params = $this->request->getRawJson();
  392. if( empty($params) ){
  393. $this->sendOutput('参数为空', ErrorCode::$paramError );
  394. }
  395. $pageParams = pageToOffset($params['page']?:1, $params['pageSize']?:10);
  396. $selectParams['limit'] = $pageParams['limit'];
  397. $selectParams['offset'] = $pageParams['offset'];
  398. $selectParams['userCenterId'] = $this->onlineUserId;
  399. $objMOrderReturn = new MOrderReturn($this->onlineEnterpriseId, $this->onlineUserId);
  400. $result = $objMOrderReturn->getAllOrderOut($selectParams);
  401. if ($result->isSuccess()) {
  402. $returnData = $result->getData();
  403. $pageData = [
  404. 'pageIndex' => $params['page'],
  405. 'pageSize' => $params['pageSize'],
  406. 'pageTotal' => $returnData['total'],
  407. ];
  408. parent::sendOutput($returnData['data'], 0, $pageData);
  409. } else {
  410. parent::sendOutput($result->getData(), ErrorCode::$dberror);
  411. }
  412. }
  413. /**
  414. *
  415. *用户订单状态统计
  416. */
  417. public function getOrderStatusNum(){
  418. $result = $this->objMOrder->getOrderStatusNum();
  419. if (!$result->isSuccess()) {
  420. parent::sendOutput($result->getData(), $result->getErrorCode());
  421. }
  422. parent::sendOutput($result->getData());
  423. }
  424. }