O2oApp.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. <?php
  2. /**
  3. * 微信企业号o2o应用拓展
  4. * @author 2015-12-02
  5. */
  6. class O2oApp {
  7. private $user; // 后台用户ID
  8. private $userid; // 微信管理端UserId
  9. private $username; // 后台用户姓名
  10. /**
  11. * 微信跳转URI验证
  12. */
  13. public static function checkURI($agentid) {
  14. $state = isset($_GET['state']) ? $_GET['state'] : '';
  15. $data = array();
  16. if ($state != '5e2b4706179f774e94903e1213d2222e' || !isset($_GET['code'])) {
  17. $data['success'] = false;
  18. $data['msg'] = '验证失败,请重试';
  19. $data['userid'] = '';
  20. $data['wechat'] = array();
  21. return $data;
  22. }
  23. $wechat = self::getWechatObj();
  24. $code = $_GET['code'];
  25. $user = $wechat->getUserId($code, $agentid);
  26. $userid = isset($user['UserId']) ? $user['UserId'] : '';
  27. if (empty($userid)) {
  28. $data['success'] = false;
  29. $data['msg'] = '无法获取您的用户信息,请关闭页面后重试';
  30. $data['userid'] = '';
  31. $data['wechat'] = $wechat;
  32. return $data;
  33. }
  34. $data['success'] = true;
  35. $data['msg'] = 'success';
  36. $data['userid'] = $userid;
  37. $data['wechat'] = $wechat;
  38. return $data;
  39. }
  40. /**
  41. * 获取微信SDK的实例化,并设置必要的参数
  42. * @param Array $option : 企业号回调模式配置参数
  43. * @param String $secret : 企业号管理组secret_key
  44. * @return Object $wechat : 基本设置后的Wechat对象,并已获得access_key
  45. */
  46. public static function getWechatObj($option=array(), $secret='') {
  47. if (empty($option)) {
  48. $option = WechatConfig::getLinkOption();
  49. }
  50. if ($secret == '') {
  51. $secret = WechatConfig::getSecret('admin_dev');
  52. }
  53. $wechat = new QyWechat($option);
  54. $echostr = $wechat->valid(true);
  55. $wechat->checkAuth($option['appid'], $secret);
  56. return $wechat;
  57. }
  58. /**
  59. * 获取微信SDK实例化,但是不经过valide()
  60. * @param Array $option : 企业号回调模式配置参数
  61. * @param String $secret : 企业号管理组secret_key
  62. * @return Object $wechat : 基本设置后的Wechat对象,并已获得access_key
  63. */
  64. public static function getWechatActive($option=array(), $secret='') {
  65. if (empty($option)) {
  66. $option = WechatConfig::getLinkOption();
  67. }
  68. if ($secret == '') {
  69. $secret = WechatConfig::getSecret('admin_dev');
  70. }
  71. $wechat = new QyWechat($option);
  72. $wechat->checkAuth($option['appid'], $secret);
  73. return $wechat;
  74. }
  75. /**
  76. * 获取时间列表
  77. * 返回最近六个月的时间列表
  78. * @param Int $number : 需要的时间列表itam数量,默认为6,最大为12
  79. * @return Array $data
  80. * array(
  81. * 0 => array(
  82. * 'text' => '2015年12月', // 前端显示的文本
  83. * 'value' => '2015-12', // select中option的值
  84. * 'start' => 1448899200, // 该月开始的时间戳
  85. * 'end' => 1452232157, // 该月结束的时间戳
  86. * ),
  87. * );
  88. */
  89. public static function getTimeList($number=6) {
  90. $number = $number > 12 ? 12 : $number;
  91. // 2015年的订单不可查看
  92. if (intval(date('Ym')) < 201606 && intval(date('Y')) == 2016) {
  93. $number = intval(date('m'));
  94. }
  95. $time = strtotime(date('Y-m-01', time()));
  96. $data = array();
  97. for ($index=0; $index < $number; $index++) {
  98. $text = date('Y年m月', $time);
  99. $value = date('Y-m', $time);
  100. $start = strtotime($value);
  101. $end = strtotime('+1 month', $start);
  102. $data[] = array(
  103. 'text' => $text,
  104. 'value' => $value,
  105. 'start' => $start,
  106. 'end' => $end,
  107. );
  108. $time = strtotime('-1 month', $time);
  109. }
  110. // echo json_encode($data);die;
  111. $data[0]['text'] = '本月';
  112. return $data;
  113. }
  114. /**
  115. * 将数据返回给前端
  116. * @param Boolean $success : 返回是否成功数据
  117. * @param String $msg : 若返回flag为false则填写该参数
  118. * @param Array $content : 需要传递给前端的数据
  119. */
  120. public static function response($success, $msg='', $content=array()) {
  121. $data = array(
  122. 'success' => $success,
  123. 'msg' => $msg,
  124. 'content' => $content
  125. );
  126. echo json_encode($data);exit();
  127. }
  128. /**
  129. * 构造函数
  130. * @param String $userid : 用户UserId
  131. */
  132. public function __construct($userid='') {
  133. $this->userid = $userid;
  134. $user = TechInfo::getByUserId($userid);
  135. if (!empty($user)) {
  136. $this->user = $user->_id;
  137. $this->username = $user->name;
  138. } else {
  139. $this->user = -1;
  140. $this->username = '';
  141. }
  142. }
  143. /**
  144. * 获取时间范围内总提成以及提成列表
  145. * @param NumberInt $start : 查询条件,开始时间
  146. * @param NumberInt $end : 查询条件,结束时间,默认为当前时间
  147. * @param Boolean $page : 是否应用分页设置
  148. * @return Array $data : 返回的结果,包括总提成数、总订单数、主订单数、附加订单数
  149. */
  150. public function getCommision($start, $end = 0, $page = false) {
  151. $end = $end == 0 ? time() : $end;
  152. if ($page) {
  153. $params = CommonFn::getPageParams();
  154. $criteria = new EMongoCriteria($params);
  155. } else {
  156. $criteria = new EMongoCriteria();
  157. }
  158. $criteria_user = new EMongoCriteria();
  159. $criteria_user->_id('==',intval($this->user));
  160. $techinfo = TechInfo::model()->find($criteria_user);
  161. $criteria->user('==', $techinfo->name);
  162. $criteria->booking_time('>=', intval($start));
  163. $criteria->booking_time('<', intval($end));
  164. $cursor = Commision::model()->findAll($criteria);
  165. $rows = CommonFn::getRowsFromCursor($cursor);
  166. $count = $cursor->count();
  167. $sum = 0.0; // 总提成数
  168. $order = 0; // 主订单数
  169. $append = 0; // 附加订单数
  170. // group生成统计数据
  171. $mongo = new MongoClient(DB_CONNETC);
  172. $db = $mongo->fuwu;
  173. $collection = $db->selectCollection('commision');
  174. $keys = array('user' => 1);
  175. $initial = array('sum' => 0.0, 'order' => 0, 'append' => 0);
  176. $reduce = 'function (obj, prev) {';
  177. $reduce .= 'prev.sum += obj.commision;';
  178. $reduce .= 'if(obj.type == 0){prev.order++};';
  179. $reduce .= 'if(obj.type == 1){prev.append++};';
  180. $reduce .= '}';
  181. $condition = array(
  182. 'condition' => array(
  183. 'booking_time' => array(
  184. '$gte' => intval($start),
  185. '$lt' => intval($end)
  186. ),
  187. 'user' => array(
  188. '$eq' => $this->user
  189. ),
  190. ));
  191. $g = $collection->group($keys, $initial, $reduce, $condition);
  192. $group_data = $g['retval'];
  193. if (!empty($group_data)) {
  194. $group_data = $group_data[0];
  195. $sum = $group_data['sum'];
  196. $order = $group_data['order'];
  197. $append = $group_data['append'];
  198. }
  199. $parsedRows = Commision::model()->parse($rows);
  200. foreach ($parsedRows as $data) {
  201. $sum += floatval($data['commision']);
  202. }
  203. $data = array(
  204. 'userid' => $this->userid, // 用户企业号内ID
  205. 'sum' => $sum, // 总提成数
  206. 'list' => $parsedRows, // 提成列表
  207. 'count' => $count, // 总订单数
  208. 'append' => $append, // 追加订单数
  209. 'order' => $order, // 普通订单数
  210. );
  211. return $data;
  212. }
  213. /**
  214. * 获取时间范围内评价统计及评价列表
  215. * @param NumberInt $start : 查询条件,开始时间
  216. * @param NumberInt $end : 查询条件,结束时间,默认为当前时间
  217. * @param Boolean $page : 是否分页
  218. * @return Array $data : 返回结果,包括总评价数、评价列表
  219. */
  220. public function getComment($start, $end=0, $page=false) {
  221. $end = $end == 0 ? time() : $end;
  222. if ($page) {
  223. $params = CommonFn::getPageParams();
  224. $criteria = new EMongoCriteria($params);
  225. } else {
  226. $criteria = new EMongoCriteria();
  227. }
  228. //$criteria->technician('==', intval($this->user));
  229. $criteria->time('>=', intval($start));
  230. $criteria->time('<', intval($end));
  231. $cursor = Comment::model()->findAll($criteria);
  232. $rows = CommonFn::getRowsFromCursor($cursor);
  233. $rows_new = array();
  234. foreach($rows as $key => $value){
  235. //判断是否为当前保洁师订单
  236. foreach($value['technicians'] as $v) {
  237. if($v['technician_id'] == intval($this->user)){
  238. $rows_new[] = $rows[$key];
  239. }
  240. }
  241. }
  242. $rows = $rows_new;
  243. $count = count($rows);
  244. //$count = $cursor->count();
  245. $parsedRows = Comment::model()->parse($rows);
  246. $data = array(
  247. 'count' => $count,
  248. 'list' => $parsedRows
  249. );
  250. return $data;
  251. }
  252. public function getOrder($start, $end=0, $page=false) {
  253. $end = $end == 0 ? time() : $end;
  254. if ($page) {
  255. $params = CommonFn::getPageParams();
  256. $criteria = new EMongoCriteria($params);
  257. } else {
  258. $criteria = new EMongoCriteria();
  259. }
  260. $criteria->addCond('technicians.technician_id','==',intval($this->user));
  261. $criteria->booking_time('>=', intval($start));
  262. $criteria->booking_time('<', intval($end));
  263. $cursor = ROrder::model()->findAll($criteria);
  264. $rows = CommonFn::getRowsFromCursor($cursor);
  265. $rows_new = array();
  266. foreach($rows as $key => $value){
  267. //判断是否为当前保洁师订单
  268. foreach($value['technicians'] as $v) {
  269. if($v['technician_id'] == intval($this->user)){
  270. $rows_new[] = $rows[$key];
  271. }
  272. }
  273. }
  274. $rows = $rows_new;
  275. $count = count($rows);
  276. $parsedRows = ROrder::model()->parse($rows);
  277. $data = array(
  278. 'count' => $count,
  279. 'list' => $parsedRows
  280. );
  281. return $data;
  282. }
  283. /**
  284. * 获取user的值
  285. */
  286. public function getUser() {
  287. return $this->user;
  288. }
  289. /**
  290. * 获取username
  291. */
  292. public function getUsername() {
  293. return $this->username;
  294. }
  295. }