CacheRepository.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\common\repositories\system;
  12. use app\common\dao\system\CacheDao;
  13. use app\common\repositories\BaseRepository;
  14. use think\db\exception\DbException;
  15. use think\exception\ValidateException;
  16. use think\facade\Cache;
  17. /**
  18. * Class CacheRepository
  19. * @package app\common\repositories\system
  20. * @author xaboy
  21. * @day 2020-04-24
  22. * @mixin CacheDao
  23. */
  24. class CacheRepository extends BaseRepository
  25. {
  26. //积分说明
  27. const INTEGRAL_RULE = 'sys_integral_rule';
  28. //商户入驻申请协议
  29. const INTEGRAL_AGREE = 'sys_intention_agree';
  30. //预售协议
  31. const PRESELL_AGREE = 'sys_product_presell_agree';
  32. //微信菜单
  33. const WECHAT_MENUS = 'wechat_menus';
  34. //发票说明
  35. const RECEIPT_AGREE = 'sys_receipt_agree';
  36. //佣金说明
  37. const EXTENSION_AGREE = 'sys_extension_agree';
  38. //商户类型说明
  39. const MERCHANT_TYPE = 'sys_merchant_type';
  40. //分销等级规则
  41. const SYS_BROKERAGE = 'sys_brokerage';
  42. //用户协议
  43. const USER_AGREE = 'sys_user_agree';
  44. //用户隐私协议
  45. const USER_PRIVACY = 'sys_userr_privacy';
  46. //免费会员
  47. const SYS_MEMBER = 'sys_member';
  48. //关于我们
  49. const ABOUT_US = 'sys_about_us';
  50. //资质证照
  51. const SYS_CERTIFICATE = 'sys_certificate';
  52. //注销声明
  53. const CANCELLATION_MSG = 'the_cancellation_msg';
  54. //注销重要提示
  55. const CANCELLATION_PROMPT = 'the_cancellation_prompt';
  56. //平台规则
  57. const PLATFORM_RULE = 'platform_rule';
  58. //优惠券说明
  59. const COUPON_AGREE = 'sys_coupon_agree';
  60. //付费会员协议
  61. const SYS_SVIP = 'sys_svip';
  62. //分销说明
  63. const PROMOTER_EXPLAIN = 'promoter_explain';
  64. public function getAgreeList($type)
  65. {
  66. $data = [
  67. ['label' => '用户协议', 'key' => self::USER_AGREE],
  68. ['label' => '隐私政策', 'key' => self::USER_PRIVACY],
  69. ['label' => '平台规则', 'key' => self::PLATFORM_RULE],
  70. ['label' => '注销重要提示', 'key' => self::CANCELLATION_PROMPT],
  71. ['label' => '商户入驻申请协议', 'key' => self::INTEGRAL_AGREE],
  72. ];
  73. if (!$type) {
  74. $data[] = ['label' => '注销声明', 'key' => self::CANCELLATION_MSG];
  75. $data[] = ['label' => '关于我们', 'key' => self::ABOUT_US];
  76. $data[] = ['label' => '资质证照', 'key' => self::SYS_CERTIFICATE];
  77. }
  78. return $data;
  79. }
  80. /**
  81. * 获取协议键值集合
  82. * 该方法用于返回一个包含所有协议键值的数组。这些键值代表了用户在使用服务前需要同意的各种协议。
  83. *
  84. * @return array 返回一个数组,数组中的每个元素都是一个代表协议类型的常量。
  85. */
  86. public function getAgreeKey(){
  87. // 返回包含所有协议键值的数组
  88. return [
  89. self::INTEGRAL_RULE, // 积分规则
  90. self::INTEGRAL_AGREE, // 积分协议
  91. self::PRESELL_AGREE, // 预售协议
  92. self::WECHAT_MENUS, // 微信菜单协议
  93. self::RECEIPT_AGREE, // 发票协议
  94. self::EXTENSION_AGREE, // 扩展协议
  95. self::MERCHANT_TYPE, // 商家类型协议
  96. self::SYS_BROKERAGE, // 系统佣金协议
  97. self::USER_AGREE, // 用户协议
  98. self::USER_PRIVACY, // 用户隐私协议
  99. self::SYS_MEMBER, // 会员系统协议
  100. self::ABOUT_US, // 关于我们协议
  101. self::SYS_CERTIFICATE, // 系统证书协议
  102. self::CANCELLATION_MSG, // 取消消息协议
  103. self::CANCELLATION_PROMPT, // 取消提示协议
  104. self::PLATFORM_RULE, // 平台规则协议
  105. self::COUPON_AGREE, // 优惠券协议
  106. self::SYS_SVIP, // SVIP系统协议
  107. self::PROMOTER_EXPLAIN, // 推广说明协议
  108. ];
  109. }
  110. /**
  111. * CacheRepository constructor.
  112. * @param CacheDao $dao
  113. */
  114. public function __construct(CacheDao $dao)
  115. {
  116. $this->dao = $dao;
  117. }
  118. /**
  119. * 保存结果到数据存储
  120. *
  121. * 本函数用于根据给定的键值对结果进行保存。如果键不存在,则创建一个新的记录;
  122. * 如果键已存在,则更新该记录的相关信息。保存的信息包括键、结果和过期时间。
  123. *
  124. * @param string $key 存储的键名,用于唯一标识一条记录。
  125. * @param mixed $result 要保存的结果数据,可以是任意类型。
  126. * @param int $expire_time 记录的过期时间,0表示永不过期。
  127. */
  128. public function save(string $key, $result, int $expire_time = 0)
  129. {
  130. // 检查键是否已存在
  131. if (!$this->dao->fieldExists('key', $key)) {
  132. // 如果键不存在,则创建新记录
  133. $this->dao->create(compact('key', 'result', 'expire_time'));
  134. } else {
  135. // 如果键已存在,则更新记录的结果和过期时间
  136. $this->dao->keyUpdate($key, compact('result', 'expire_time'));
  137. }
  138. }
  139. /**
  140. * 根据给定的关键字获取结果数据。
  141. *
  142. * 本函数旨在通过提供的关键字,从预定义的同意列表中查找对应的标签,并从数据访问对象(DAO)中获取该关键字对应的数据。
  143. * 如果关键字在同意列表中找到,将设置标题为对应的标签。然后,从DAO获取关键字对应的结果数据,如果数据不存在,则设置为空字符串。
  144. * 最后,返回包含标题和结果数据的数组。
  145. *
  146. * @param string $key 需要查询结果的关键字。
  147. * @return array 包含标题和查询结果的数据数组。
  148. */
  149. public function getResult($key)
  150. {
  151. // 初始化标题为空字符串
  152. $data['title'] = '';
  153. // 遍历同意列表中所有项目,寻找与关键字匹配的标签
  154. foreach ($this->getAgreeList(1) as $item) {
  155. if ($item['key'] == $key) {
  156. // 如果找到匹配的关键字,设置标题为对应的标签
  157. $data['title'] = $item['label'];
  158. }
  159. }
  160. // 从数据访问对象中获取关键字对应的结果数据,如果不存在则设置为空字符串
  161. $data[$key] = $this->dao->getResult($key) ?? '';
  162. // 返回包含标题和结果数据的数组
  163. return $data;
  164. }
  165. /**
  166. * 通过键值获取结果
  167. *
  168. * 本函数旨在通过指定的键值从数据访问对象(DAO)中获取对应的结果数据。
  169. * 它是类中的一个公共方法,可供类的外部调用,以获取特定键值对应的数据。
  170. *
  171. * @param string $key 需要获取结果的键值
  172. * @return mixed 返回与键值对应的结果数据,数据类型取决于具体实现
  173. */
  174. public function getResultByKey($key)
  175. {
  176. // 通过DAO对象的getResult方法,根据键值获取结果数据
  177. return $this->dao->getResult($key);
  178. }
  179. /**
  180. * 保存数组中的所有数据
  181. *
  182. * 该方法通过遍历给定的数组,并调用save方法来逐个保存数组中的键值对。
  183. * 主要用于一次性处理多个数据项的保存操作,减少代码重复和提高效率。
  184. *
  185. * @param array $data 包含需要保存的数据的键值对数组。数组的每个元素都是一个键值对,
  186. * 其中键代表数据的唯一标识,值为要保存的具体数据。
  187. */
  188. public function saveAll(array $data)
  189. {
  190. // 遍历数组,对每个元素调用save方法进行保存
  191. foreach ($data as $k => $v) {
  192. $this->save($k, $v);
  193. }
  194. }
  195. /**
  196. * 设置用户协议内容
  197. * @return mixed
  198. */
  199. public function setUserAgreement($content)
  200. {
  201. $html = <<<HTML
  202. <!doctype html>
  203. <html class="x-admin-sm">
  204. <head>
  205. <meta charset="UTF-8">
  206. <title>隐私协议</title>
  207. <meta name="renderer" content="webkit|ie-comp|ie-stand">
  208. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  209. <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
  210. <meta http-equiv="Cache-Control" content="no-siteapp" />
  211. </head>
  212. <body class="index">
  213. $content
  214. </body>
  215. </html>
  216. HTML;
  217. file_put_contents(public_path() . 'protocol.html', $html);
  218. }
  219. public function setUserRegister($content)
  220. {
  221. $html = <<<HTML
  222. <!doctype html>
  223. <html class="x-admin-sm">
  224. <head>
  225. <meta charset="UTF-8">
  226. <title>用户协议</title>
  227. <meta name="renderer" content="webkit|ie-comp|ie-stand">
  228. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  229. <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
  230. <meta http-equiv="Cache-Control" content="no-siteapp" />
  231. </head>
  232. <body class="index">
  233. $content
  234. </body>
  235. </html>
  236. HTML;
  237. file_put_contents(public_path() . 'register.html', $html);
  238. }
  239. /**
  240. * 整理城市数据用的方法
  241. * @return array
  242. * @author wuhaotian
  243. * @email 442384644@qq.com
  244. * @date 2024/7/24
  245. */
  246. public function addres()
  247. {
  248. return [];
  249. $re = (Cache::get('AAAAAA'));
  250. unset($re['省市编码']);
  251. if (!$re) throw new ValidateException('无数据');
  252. $shen = [];
  253. $shi = [];
  254. $qu = [];
  255. foreach ($re as $key => $value) {
  256. $item = explode(',', $value);
  257. $cout = count($item);
  258. //省
  259. if ($cout == 2) {
  260. $shen[$item[1]] = [
  261. 'value' => $key,
  262. 'label' => $item[1],
  263. ];
  264. }
  265. //市
  266. if ($cout == 3) {
  267. if ($item[1] == '') {
  268. $shen[$item[2]] = [
  269. 'value' => $key,
  270. 'label' => $item[2],
  271. ];
  272. $item[1] = $item[2];
  273. }
  274. $_v = [
  275. 'value' => $key,
  276. 'label' => $item[2]
  277. ];
  278. $shi[$item[1]][] = $_v;
  279. }
  280. //区
  281. if ($cout == 4) {
  282. $_v = [
  283. 'value' => $key,
  284. 'label' => $item[3]
  285. ];
  286. $qu[$item[2]][] = $_v;
  287. }
  288. }
  289. $data = [];
  290. foreach ($shen as $s => $c) {
  291. foreach ($shi as $i => $c_) {
  292. if ($c['label'] == $i) {
  293. if ($c['label'] == $i) {
  294. $san = [];
  295. foreach ($c_ as $key => $value) {
  296. if (isset($qu[$value['label']])) {
  297. $value['children'] = $qu[$value['label']];
  298. }
  299. $san[] = $value;
  300. }
  301. }
  302. $c['children'] = $san;
  303. }
  304. }
  305. $zls[$s] = $c;
  306. }
  307. $data = array_values($zls);
  308. file_put_contents('address.js', json_encode($data, JSON_UNESCAPED_UNICODE));
  309. //$this->save('applyments_addres',$data);
  310. }
  311. }