Order.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?php
  2. namespace Scm\Lib;
  3. use Dever;
  4. class Order
  5. {
  6. public function updateGoods($id, $name, $data)
  7. {
  8. $table = Dever::input('table');
  9. $goods = Dever::param('goods', $data);
  10. $cash = Dever::param('cash', $data);
  11. if ($table && $goods) {
  12. $temp = explode('-', $goods);
  13. $update = array();
  14. $update['where_id'] = $id;
  15. $update['goods_id'] = $temp[0];
  16. $update['sku_id'] = $temp[1];
  17. $batch = Dever::param('batch', $data);
  18. if (!$batch) {
  19. $update['batch'] = date('Ymd');
  20. }
  21. if (isset($temp[2]) && !$cash) {
  22. //$update['cash'] = $temp[2];
  23. }
  24. Dever::db($table)->update($update);
  25. Dever::config('base')->hook = false;
  26. }
  27. }
  28. public function updateOrderNum($id, $name, $data)
  29. {
  30. $table = Dever::input('table');
  31. $prefix = Dever::input('prefix');
  32. if ($table && $prefix) {
  33. $update['order_num'] = $this->getOrderNum($table, $prefix);
  34. $update['where_id'] = $id;
  35. Dever::db($table)->update($update);
  36. Dever::config('base')->hook = false;
  37. }
  38. }
  39. # 生成订单号
  40. public function getOrderNum($table, $prefix = 'C')
  41. {
  42. $prefix = $prefix . ucfirst(substr($table, 0, 1));
  43. $where['order_num'] = Dever::order($prefix);
  44. $state = Dever::db($table)->one($where);
  45. if (!$state) {
  46. return $where['order_num'];
  47. } else {
  48. return $this->getOrderNum($table);
  49. }
  50. }
  51. # 查看订单详情
  52. public function show($order_table)
  53. {
  54. $id = Dever::input('order_id');
  55. $order_db = Dever::db($order_table);
  56. $order = $order_db->one($id);
  57. $order['config'] = $order_db->config['set'];
  58. $content = array();
  59. if (isset($order['type'])) {
  60. $type = Dever::db($order_table . '_type')->one($order['type']);
  61. $content[0][] = array('订单类型', $type['name']);
  62. }
  63. $content[0][] = array('订单状态', Dever::status($order['config']['status'], $order['status']));
  64. $content[0][] = array('下单时间', date('Y-m-d H:i', $order['cdate']));
  65. $order['info'] && $content[0][] = array('订单备注', $order['info']);
  66. $content[1] = $content[2] = array();
  67. $role = $this->show_role(array
  68. (
  69. 'seller' => '经销商',
  70. 'servicer' => '配送商',
  71. 'servicer_store' => '仓库',
  72. 'supplier' => '供应商',
  73. ), $order, $content[1]);
  74. $this->show_audit($order, $content[2]);
  75. $result = array();
  76. $result[$order['order_num']] = array
  77. (
  78. 'type' => 'info',
  79. 'content' => $content
  80. );
  81. $this->show_address($order, $role, $result);
  82. $this->show_goods($order, $order_table, $result);
  83. $head = array
  84. (
  85. 'name' => '基本信息',
  86. 'btn' => $this->show_button($order, $order_table),
  87. );
  88. $html = Dever::show($head, $result);
  89. return $html;
  90. }
  91. # 显示订单角色
  92. private function show_role($role, $order, &$data)
  93. {
  94. $result = array();
  95. foreach ($role as $k => $v) {
  96. $col = $k . '_id';
  97. if (isset($order[$col]) && $order[$col] > 0) {
  98. $project = $k;
  99. $name = 'info';
  100. if (strstr($k, '_')) {
  101. $temp = explode('_', $k);
  102. $project = $temp[0];
  103. $name = $temp[1];
  104. }
  105. $table = 'scm_' . $project . '/' . $name;
  106. $result[$k] = Dever::db($table)->one($order[$col]);
  107. if ($result[$k]) {
  108. $data[] = array($v, $result[$k]['name']);
  109. }
  110. }
  111. }
  112. return $result;
  113. }
  114. # 显示审核信息
  115. private function show_audit($order, &$data)
  116. {
  117. if (isset($order['audit_admin']) && $order['audit_admin']) {
  118. $admin = Dever::db('manage/admin')->find($order['audit_admin']);
  119. $data = array
  120. (
  121. array('审核人', $admin['username']),
  122. array('审核状态', Dever::status($order['config']['audit'], $order['audit'])),
  123. array('审核备注', $order['audit_desc']),
  124. );
  125. }
  126. }
  127. # 显示订单地址
  128. private function show_address($order, $role, &$result)
  129. {
  130. if (!$order['address'] && isset($role['servicer_store']['address'])) {
  131. $order['address'] = $role['servicer_store']['address'];
  132. }
  133. if ($order['address']) {
  134. $temp = explode('、', $order['address']);
  135. $result['收货信息'] = array
  136. (
  137. 'type' => 'info',
  138. 'content' => array
  139. (
  140. array
  141. (
  142. array('联系人', $temp[1]),
  143. array('联系电话', $temp[2]),
  144. array('收货地址', $temp[0]),
  145. ),
  146. ),
  147. );
  148. }
  149. }
  150. # 显示订单商品清单
  151. private function show_goods($order, $order_table, &$result)
  152. {
  153. $data = Dever::db($order_table . '_goods')->select(array('order_id' => $order['id']));
  154. if ($data) {
  155. $table['head'] = array('商品编码', '商品名称', '商品规格', '批次', '单价', '数量', '总价', '状态');
  156. $table['body'] = array();
  157. $total_price = $total_num = 0;
  158. $status = Dever::db($order_table . '_goods')->config['status'];
  159. foreach ($data as $k => $v) {
  160. $goods_info = Dever::load('scm_product/lib/info')->getBaseInfo($v['goods_id'], $v['sku_id'], $v['unit_id']);
  161. $status_name = Dever::status($status, $v['status']);
  162. $num = $v['num'];
  163. if ($v['status'] == 2 && $v['unit_id'] != $goods_info['base_unit_id']) {
  164. if (!isset($order['supplier_id'])) {
  165. $order['supplier_id'] = false;
  166. }
  167. $unit = Dever::load('scm/lib/unit')->convertBase($v['goods_id'], $v['sku_id'], $v['unit_id'], $v['num'], $v['cash'], 0, $order['supplier_id']);
  168. if ($unit) {
  169. $base_unit = Dever::db('scm/unit')->find($unit['unit_id']);
  170. $goods_info['unit'] .= ' => '.$unit['num'].''.$base_unit['name'].'';
  171. $num = $unit['num'];
  172. }
  173. }
  174. $sdate = isset($v['sdate']) && $v['sdate'] ? '[' . date('Y-m-d', $v['sdate']) . '生产]' : '';
  175. $cash = Dever::number($v['cash'] * $v['num']);
  176. $detail = array
  177. (
  178. $goods_info['code'],
  179. $goods_info['name'],
  180. $goods_info['spec_name'],
  181. $v['batch'] . $sdate,
  182. $v['cash'],
  183. $v['num'] . $goods_info['unit'],
  184. $cash,
  185. $status_name,
  186. );
  187. if ($goods_info['goods']) {
  188. $detail['goods'] = $goods_info['goods'];
  189. }
  190. $table['body'][] = $detail;
  191. $total_price += $cash;
  192. $total_num += $num;
  193. }
  194. $result['商品清单'] = array
  195. (
  196. 'type' => 'table',
  197. 'head' => array('name' => '', 'btn' => ''),
  198. 'content' => $table,
  199. 'total' => '合计金额:' . Dever::number($total_price) . ',合计数量:' . $total_num
  200. );
  201. }
  202. }
  203. # 显示按钮
  204. private function show_button($order, $order_table)
  205. {
  206. $button = array();
  207. if ($order['status'] == 1) {
  208. list($project, $table) = explode('/', $order_table);
  209. $url = Dever::url('project/database/update?project='.$project.'&table='.$table.'&where_id='.$order['id'].'&col=audit,audit_desc', 'manage');
  210. $button[] = array
  211. (
  212. 'type' => 'edit',
  213. 'link' => $url,
  214. 'name' => '审核',
  215. );
  216. }
  217. return $button;
  218. }
  219. }