Share.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <?php
  2. namespace app\api\controller;
  3. use app\model\Miniprogram;
  4. use app\model\QrcodeQuery;
  5. use app\model\ShareLog;
  6. use app\model\ShortUrl;
  7. use think\facade\Cache;
  8. use wx\miniprogram\Qrcode;
  9. use wx\miniprogram\UrlScheme;
  10. use think\facade\Db;
  11. use app\model\CreditsLog;
  12. use app\model\MaterialCase;
  13. use app\model\CreditsSetting;
  14. use app\model\Credits;
  15. use app\model\AgentUser;
  16. use wx\offiaccount\client\TmpMsg;
  17. use app\model\Setting;
  18. class Share extends Base
  19. {
  20. /**
  21. * 用户分享记录(接口废弃)
  22. */
  23. public function usercontentlist($type, $page = 1)
  24. {
  25. $data = ShareLog::where([
  26. ['type', '=', $type]
  27. ])->with(['content'])->page($page, 10)->order('share_time desc')->select();
  28. return json(['code' => self::success, 'data' => $data, 'page' => $page]);
  29. }
  30. /**
  31. * 分享成功回调
  32. */
  33. public function addlog($type, $id, $other_data = '')
  34. {
  35. $old_type = $type;
  36. $strpos = strpos($type,'_vr');
  37. if ($strpos){
  38. $type = str_replace('_vr', '', $type);
  39. }
  40. //通过谈单工具、老客户转介绍整个板块分享的不进行验证
  41. if (!in_array($type, ['toolAll', 'customerJsAll', 'weiwang', 'card','company', 'buildingProgress'])) {
  42. $class = 'app\\model\\' . ucfirst($type);
  43. if (!class_exists($class)) return json(['code' => self::error_msg, 'msg' => '类型不存在']);
  44. }
  45. $token = $this->request->token;
  46. $saveData = [];
  47. // 判断分享操作人
  48. // 1,员工分享
  49. if (isset($token['employee_id'])) {
  50. $saveData['employee_id'] = $token['employee_id'];
  51. }
  52. // 2,经纪人/用户 分享
  53. else {
  54. // 经纪人查询
  55. $agent_data = AgentUser::where([['uid', '=', $token['uid']], ['root_id', '=', $token['root_org']]])->find();
  56. // 经纪人分享
  57. if (!empty($agent_data)) {
  58. $saveData['employee_id'] = $agent_data['agent_employee_id'];
  59. $saveData['agent_id'] = $agent_data['id'];
  60. }
  61. // 被员工分享后的客户
  62. elseif (isset($token['share_employee'])) {
  63. $saveData['employee_id'] = $token['share_employee'];
  64. }
  65. }
  66. $saveData['data_id'] = $id ?? 0;
  67. $saveData['type'] = ucfirst($old_type);
  68. $saveData['other_data'] = $other_data;
  69. ShareLog::create($saveData);
  70. // 添加分享数量
  71. if (!in_array($type, ['toolAll', 'customerJsAll', 'weiwang', 'card','company','employeeCard','housetype', 'buildingProgress'])) {
  72. (new $class())->where(['id' => $id])->inc('shared_times')->update();
  73. // 发送通知消息
  74. $c = (new $class())->find($id);
  75. // 发送管理层模板消息
  76. if($c){
  77. $c = $c->toArray();
  78. $title = '';
  79. if(isset($c['title']))
  80. $title = $c['title'];
  81. elseif (isset($c['name']))
  82. $title = $c['name'];
  83. $msg = ['first'=>'行为通知', 'keyword1'=>'转发素材
  84. ', 'keyword2'=>'员工'.$token['name'] . "转发素材《".$title.'》', 'keyword3'=>date('Y/m/d'), 'remark'=>'请悉知'];
  85. TmpMsg::sendMsgToLeader($msg, $token['org_id']);
  86. }
  87. }
  88. if (ucfirst($type) == 'MaterialCase') {
  89. $this->use_talkskill($id);
  90. }
  91. return json(['code' => self::success, 'msg' => '记录添加成功']);
  92. }
  93. /**
  94. * 小程序分享链接 url_scheme
  95. */
  96. public function urlscheme()
  97. {
  98. $param = $this->request->param();
  99. // 存储参数
  100. $data = [
  101. 'content' => json_encode($param),
  102. 'type' => 'share'
  103. ];
  104. $shortUrl = ShortUrl::create($data);
  105. // 将ID进行
  106. $uri = dec52($shortUrl->id);
  107. $shortUrl->uri = $uri;
  108. $shortUrl->save();
  109. $domain = $this->request->domain();
  110. return json(['code' => self::success, 'data' => $domain . '/' . $uri]);
  111. }
  112. /*
  113. * 分享员工上传的案例
  114. */
  115. public function use_talkskill($id)
  116. {
  117. $token = $this->request->token;
  118. $condition = ['id' => $id, 'root_id' => $token['root_org']];
  119. $obj = MaterialCase::where($condition)->find();
  120. if ($obj['from'] == 0) return; //如果是后台上传的直接返回
  121. if ($obj['employee_id'] == $token['employee_id']) return; //如果转发的是自己上传的案例直接返回
  122. Db::startTrans();
  123. try {
  124. $end = true;
  125. $type = 2;
  126. $where = [];
  127. $where[] = ['type', '=', $type];
  128. $where[] = ['talkskill_id', '=', $id];
  129. $where[] = ['root_id', '=', $token['root_org']];
  130. $where[] = ['employee_id', '=', $token['employee_id']];
  131. $credits_log = CreditsLog::where($where)->select()->toArray();
  132. if (!$credits_log) {
  133. $save['talkskill_id'] = $id;
  134. $save['root_id'] = $token['root_org'];
  135. $save['employee_id'] = $token['employee_id'];
  136. $save['type'] = $type;
  137. $save['addtime'] = date('Y-m-d H:i:s', time());
  138. CreditsLog::insert($save);
  139. } else {
  140. $end = false;
  141. }
  142. if ($end) {
  143. //未计算积分的被使用次数
  144. $where1[] = ['status', '=', 0];
  145. $where1[] = ['type', '=', $type];
  146. $where1[] = ['talkskill_id', '=', $id];
  147. $where1[] = ['root_id', '=', $token['root_org']];
  148. $credits_log = CreditsLog::where($where1)->select()->toArray();
  149. $count = count($credits_log);
  150. if ($count == 0) {
  151. $end = false;
  152. }
  153. }
  154. if ($end) {
  155. //查询规则
  156. $rule = CreditsSetting::where([['root_id', '=', $token['root_org']], ['code', '=', 'material_case_integral']])->value('value');
  157. $rule = $rule ? json_decode($rule, true) : ['case_num' => 1, 'case_integral' => 2];
  158. $rule = ['person' => $rule['case_num'], 'credits' => $rule['case_integral']];
  159. //计算积分
  160. if ($count >= $rule['person']) {
  161. $credits = new Credits();
  162. $save = [];
  163. $credits->employee_id = $obj['employee_id'];
  164. $credits->root_id = $token['root_org'];
  165. $credits->credits = $rule['credits'];
  166. $credits->type = 0;
  167. $credits->json = 'upcaseid=' . $id;
  168. $credits->remark = '上传案例被转发使用';
  169. $credits->save();
  170. $id = $credits->id;
  171. $c_where[] = ['employee_id', '=', $obj['employee_id']];
  172. $c_where[] = ['root_id', '=', $token['root_org']];
  173. $c_where[] = ['type', '=', 0];
  174. $sum = Credits::where($c_where)->sum('credits');
  175. Credits::where([['root_id','=',$token['root_org']],['id', '=', $id],['employee_id', '=', $obj['employee_id']]])->update(['sum' => $sum]);
  176. CreditsLog::where([['id', 'in', array_column($credits_log, 'id')]])->update(['status' => 1]);
  177. }
  178. }
  179. Db::commit();
  180. } catch (\Exception $e) {
  181. // 回滚事务
  182. Db::rollback();
  183. }
  184. }
  185. private function getTicket() {
  186. $ticket = time() . rand(1000, 9999);
  187. $find = QrcodeQuery::where('ticket', '=', $ticket)->findOrEmpty();
  188. if (!$find->isEmpty()) {
  189. return $this->getTicket();
  190. }
  191. return $ticket;
  192. }
  193. /**
  194. * 朋友圈分享二维码
  195. */
  196. public function qrcode()
  197. {
  198. $param = $this->request->param();
  199. $token = $this->request->token;
  200. // 获取小程序二维码
  201. $mini = Miniprogram::where([['root_id', '=', $token['root_org']]])->find();
  202. $qrObj = new Qrcode;
  203. if ($param['path'] == 'pages/other/other'){
  204. $qr_query['ticket'] = $this->getTicket();
  205. $qr_query['content'] = $param['query'];
  206. QrcodeQuery::create($qr_query);
  207. $param['query'] = 'ticket=' . $qr_query['ticket'];
  208. }
  209. $qrdata = [
  210. 'scene' => $param['query'],
  211. 'page' => $param['path'],
  212. 'width' => '280px',
  213. ];
  214. $qr = $qrObj->getUnlimited($mini->accesstoken, $qrdata);
  215. $rs = json_decode($qr, true);
  216. if (!is_null($rs)) {
  217. trace('名片二维码生成失败' . ';error:' . $qr, 'error');
  218. }
  219. $path = 'share_qr_unlimit' . DIRECTORY_SEPARATOR . uniqid() . '.jpeg';
  220. ossContentUpload($path, $qr);
  221. return json(['code' => 0, 'data' => 'https://' . config('app.ali_oss_bindurl') . '/' . $path]);
  222. }
  223. public function getQueryByTicket($ticket){
  224. $query = QrcodeQuery::where('ticket', '=', $ticket)->value('content');
  225. return json(['code'=> 0, 'data'=> $query]);
  226. }
  227. }