SupplierPurchaseCron.Class.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. namespace JinDouYun\Controller\Cron;
  3. use JinDouYun\Dao\Department\DStaff;
  4. use JinDouYun\Dao\Enterprise\DEnterprise;
  5. use JinDouYun\Dao\Order\DSupplierOrderDetails;
  6. use JinDouYun\Dao\Order\DSupplierOrderIndex;
  7. use JinDouYun\Model\Order\MSupplierOrderDetails;
  8. use JinDouYun\Model\Order\TStdOrder;
  9. use JinDouYun\Model\Purchase\MPurchase;
  10. use JinDouYun\Model\System\MBasicSetup;
  11. use Mall\Framework\Core\StatusCode;
  12. class SupplierPurchaseCron
  13. {
  14. use Cron;
  15. private $enterprises = [];
  16. use TStdOrder;
  17. public function __construct()
  18. {
  19. self::sendOutput('start-创建采购单');
  20. }
  21. public function __destruct()
  22. {
  23. // TODO: Implement __destruct() method.
  24. self::sendOutput('end-创建采购单');
  25. }
  26. /**
  27. * Doc: (des="")
  28. * User: XMing
  29. * Date: 2020/12/24
  30. * Time: 2:13 下午
  31. */
  32. public function getEnterprise()
  33. {
  34. //获取企业
  35. $time = time();
  36. $fault = 120;
  37. $fields = "e.id,e.enterpriseName,b.basicData";
  38. $sql = 'SELECT ' . $fields . ' FROM qianniao_enterprise_1 as e
  39. LEFT JOIN qianniao_basic_setup as b ON e.id=b.enterpriseId
  40. WHERE b.id IS NOT NULL';
  41. $objDEnterprise = new DEnterprise();
  42. $enterprises = $objDEnterprise->query($sql);
  43. if ($enterprises === false) {
  44. self::sendOutput('sql错误', $objDEnterprise->error(), true);
  45. }
  46. foreach ($enterprises as $val) {
  47. $json = json_decode($val['basicData'], true);
  48. $supplierSet = getArrayItem($json, 'supplierSet', []);
  49. $auto_ctime = getArrayItem($supplierSet, 'auto_ctime', 0);
  50. if (empty($auto_ctime)) {
  51. continue;
  52. }
  53. $auto_ctime = self::todayTime($auto_ctime);
  54. //测试的时候注释
  55. if (!($time - $auto_ctime > 0 && $time - $auto_ctime < $fault)) {
  56. continue;
  57. }
  58. $this->enterprises[] = [
  59. 'enterpriseId' => $val['id'],
  60. 'enterpriseName' => $val['enterpriseName'],
  61. 'auto_ctime' => getArrayItem($supplierSet, 'auto_ctime', 0),
  62. 'enable_istrue' => getArrayItem($supplierSet, 'enable_istrue', StatusCode::$delete),
  63. ];
  64. }
  65. if (empty($this->enterprises)) {
  66. self::sendOutput('data null', '没有企业数据', true);
  67. }
  68. }
  69. /**
  70. * Doc: (des="将任意某天的时间戳转化为对应今日的时间戳,保留时分秒")
  71. * User: XMing
  72. * Date: 2020/12/24
  73. * Time: 10:49 上午
  74. * @param $ctime
  75. */
  76. function todayTime($ctime)
  77. {
  78. $arr = explode(':', $ctime);
  79. return mktime(
  80. getArrayItem($arr, 0, 1),
  81. getArrayItem($arr, 1, 0),
  82. getArrayItem($arr, 2, 0)
  83. );
  84. }
  85. /**
  86. * Doc: (des=)
  87. * User: XMing
  88. * Date: 2020/12/23
  89. * Time: 10:58 上午
  90. * @throws \Exception
  91. */
  92. public function create()
  93. {
  94. self::getEnterprise();
  95. $beginYesterday = mktime(0, 0, 0, date('m'), date('d') - 1, date('Y'));
  96. $endYesterday = mktime(0, 0, 0, date('m'), date('d'), date('Y')) - 1;
  97. $objDSupplierOrderIndex = new DSupplierOrderIndex();
  98. $objDSupplierOrderDetails = new DSupplierOrderDetails();
  99. foreach ($this->enterprises as $item) {
  100. $enterpriseId = getArrayItem($item, 'enterpriseId', 0);
  101. if (empty($enterpriseId)) {
  102. continue;
  103. }
  104. $objMPurchase = new MPurchase('', $enterpriseId);
  105. $objMSupplierOrderDetails = new MSupplierOrderDetails($enterpriseId, '');
  106. $objDSupplierOrderIndex->setTable('qianniao_supplier_order_index_' . $enterpriseId);
  107. $objDStaff = new DStaff();
  108. $objDStaff->setTable('qianniao_staff_'.$enterpriseId);
  109. $staff = $objDStaff->get(['departmentId' => 1],'userCenterId,staffName,departmentId');
  110. if ($staff === false){
  111. self::sendOutput('sql error', $objDStaff->error());
  112. }
  113. $fields = ' o.id as orderId,s.* ';
  114. /*$sql = 'SELECT ' . $fields . ' FROM qianniao_supplier_order_index_' . $enterpriseId . ' AS s
  115. LEFT JOIN qianniao_order_index_' . $enterpriseId . ' AS o
  116. ON o.id = s.orderId WHERE s.purchaseStatus = ' . StatusCode::$delete . '
  117. AND o.auditStatus = ' . StatusCode::$auditStatus['auditPass'] . '
  118. AND s.createTime BETWEEN ' . $beginYesterday . ' AND ' . $endYesterday;*/
  119. $sql = 'SELECT ' . $fields . ' FROM qianniao_supplier_order_index_' . $enterpriseId . ' AS s
  120. LEFT JOIN qianniao_order_index_' . $enterpriseId . ' AS o
  121. ON o.id = s.orderId WHERE s.purchaseStatus = ' . StatusCode::$delete . '
  122. AND o.auditStatus = ' . StatusCode::$auditStatus['auditPass'];//TODO(测试的时候用这个sql)
  123. $indexLists = $objDSupplierOrderIndex->query($sql);
  124. if ($indexLists === false) {
  125. self::sendOutput('sql error', $objDSupplierOrderIndex->error());
  126. continue;
  127. }
  128. if (empty($indexLists)) {
  129. continue;
  130. }
  131. $allGroupData = [];
  132. $detailsData = [];
  133. $ids = [];
  134. foreach ($indexLists as $list) {
  135. $tableNum = ceil($list['orderId'] / MSupplierOrderDetails::$cutTable);
  136. $allGroupData[$tableNum][] = $list['id'];
  137. $ids[] = $list['id'];
  138. }
  139. foreach ($allGroupData as $k => $ids) {
  140. $objDSupplierOrderDetails->setTable('qianniao_supplier_order_details_' . $enterpriseId . '_' . $k);
  141. $dbResult = $objDSupplierOrderDetails->select(['id' => $ids]);
  142. if ($dbResult === false) {
  143. self::sendOutput('sql error', $objDSupplierOrderDetails->error());
  144. continue;
  145. }
  146. $detailsData = array_merge($dbResult, $detailsData);
  147. }
  148. //将数据按照供应商分组
  149. $supplierDetailsGroupData = [];
  150. $supplierMap = [];
  151. foreach ($detailsData as $datum) {
  152. $supplierDetailsGroupData[$datum['supplierId']][] = $datum;
  153. $supplierMap[$datum['supplierId']] = [
  154. 'shopId' => $datum['shopId'],
  155. 'shopName' => $datum['shopName'],
  156. 'supplierId' => $datum['supplierId'],
  157. 'supplierName' => $datum['supplierName']
  158. ];
  159. }
  160. foreach ($supplierMap as $supplierId => $common) {
  161. $lists = getArrayItem($supplierDetailsGroupData, $supplierId, []);
  162. if (empty($lists)) {
  163. self::sendOutput('data is empty', '');
  164. continue;
  165. }
  166. $common['operatorId'] = getArrayItem($staff,'userCenterId',0);
  167. $common['operatorName'] = getArrayItem($staff,'staffName','');
  168. $common['buyerId'] = getArrayItem($staff,'userCenterId',0);
  169. $common['buyerName'] = getArrayItem($staff,'staffName','');
  170. $common['departmentPath'] = getArrayItem($staff,'departmentId','');
  171. $buildInsert = self::buildPurchase($common, $lists);
  172. print_r($buildInsert);
  173. $result = $objMPurchase->addPurchase($buildInsert);
  174. if (!$result->isSuccess()) {
  175. self::sendOutput('sql error', $result->getData());
  176. continue;
  177. }
  178. }
  179. $updateResult = $objMSupplierOrderDetails->updatePurchaseStatus($ids);
  180. if (!$updateResult->isSuccess()) {
  181. self::sendOutput('sql error', $updateResult->getData());
  182. continue;
  183. }
  184. self::sendOutput('success', '创建采购单成功');
  185. }
  186. }
  187. }