OperateLogRepository.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834
  1. <?php
  2. namespace app\common\repositories\system\operate;
  3. use app\common\dao\system\operate\OperateLogDao;
  4. use app\common\repositories\BaseRepository;
  5. use app\common\repositories\system\auth\RoleRepository;
  6. use app\Request;
  7. use think\exception\ValidateException;
  8. use function Symfony\Component\String\s;
  9. class OperateLogRepository extends BaseRepository
  10. {
  11. /**
  12. * 操作端
  13. */
  14. const PLATFORM_OPERATE = 1; // 平台操作
  15. const MERCHANT_OPERATE = 2; // 商户操作
  16. const RELEVANCE_PRODUCT = 'product'; // 操作商品
  17. const RELEVANCE_MERCHANT = 'merchant'; // 操作商户
  18. const RELEVANCE_MERCHANT_TYPE = 'merchant_type'; // 操作商户类别
  19. const ACTION_CREATE = 'create'; // 创建操作
  20. const ACTION_EDIT = 'edit'; // 编辑操作
  21. const ACTION_DELETE = 'delete'; // 删除操作
  22. /**
  23. * 商户端商品操作类型
  24. */
  25. // 商品添加
  26. const MERCHANT_CREATE_PRODUCT = 'create_product';
  27. // 编辑商品
  28. const MERCHANT_EDIT_PRODUCT = 'edit_product';
  29. // 价格增加
  30. const MERCHANT_INC_PRODUCT_PRICE = 'inc_product_price';
  31. // 价格减少
  32. const MERCHANT_DEC_PRODUCT_PRICE = 'dec_product_price';
  33. // 库存增
  34. const MERCHANT_INC_PRODUCT_STOCK = 'inc_product_stock';
  35. // 库存减
  36. const MERCHANT_DEC_PRODUCT_STOCK = 'dec_product_stock';
  37. // 商品上架
  38. const MERCHANT_EDIT_PRODUCT_ON_SALE = 'edit_product_on_sale';
  39. // 商品下架
  40. const MERCHANT_EDIT_PRODUCT_OFF_SALE = 'edit_product_off_sale';
  41. const MERCHANT_EDIT_AUDIT_STATUS = 'edit_audit_status';
  42. /**
  43. * 商户端商户操作类型
  44. */
  45. /**
  46. * 平台端商户操作类型
  47. */
  48. // 商户创建
  49. const PLATFORM_CREATE_MERCHANT = 'create_merchant';
  50. // 编辑商户
  51. const PLATFORM_EDIT_MERCHANT = 'edit_merchant';
  52. // 编辑:手续费变化
  53. const PLATFORM_EDIT_MERCHANT_COMMISSION = 'edit_merchant_commission';
  54. // 编辑:审核权限变化
  55. const PLATFORM_EDIT_MERCHANT_AUDIT_AUTH = 'edit_merchant_audit_auth';
  56. // 编辑:店铺开启关闭
  57. const PLATFORM_EDIT_MERCHANT_AUDIT_STATUS = 'edit_merchant_audit_status';
  58. // 编辑:店铺保证金变动
  59. const PLATFORM_EDIT_MERCHANT_AUDIT_MARGIN = 'edit_merchant_audit_margin';
  60. /**
  61. * 平台端商品操作类型
  62. */
  63. // 商品审核通过
  64. const PLATFORM_AUDIT_PRODUCT_PASS = 'audit_product_pass';
  65. // 商品审核未通过
  66. const PLATFORM_AUDIT_PRODUCT_REFUSE = 'audit_product_refuse';
  67. // 平台强制下架
  68. const PLATFORM_AUDIT_PRODUCT_OFF_SALE = 'audit_product_refuse_off_sale';
  69. // 商品显示
  70. const PLATFORM_EDIT_PRODUCT_SHOW = 'edit_product_show';
  71. // 商品关闭
  72. const PLATFORM_EDIT_PRODUCT_HIDE = 'edit_product_hide';
  73. protected $mer_id = 0;
  74. protected $title = '';
  75. protected $relevance_id;
  76. protected $relevance_type;
  77. protected $relevance_title;
  78. protected $type;
  79. protected $category;
  80. protected $action;
  81. protected $operator_uid;
  82. protected $operator_nickname;
  83. protected $operator_role_id;
  84. protected $operator_role_nickname;
  85. protected $mark;
  86. /**
  87. * 管理员用户信息
  88. * @var
  89. */
  90. protected $admin_info;
  91. /**
  92. * CacheRepository constructor.
  93. * @param OperateLogDao $dao
  94. */
  95. public function __construct(OperateLogDao $dao)
  96. {
  97. $this->dao = $dao;
  98. }
  99. /**
  100. * 获取类型列表
  101. * @param string $type
  102. * @return \string[][]
  103. *
  104. * @date 2023/10/16
  105. * @author yyw
  106. */
  107. public function getCategoryList(string $type)
  108. {
  109. $operate_list = [
  110. self::PLATFORM_OPERATE => [
  111. ['label' => '商品添加', 'value' => self::MERCHANT_CREATE_PRODUCT],
  112. ['label' => '价格增加', 'value' => self::MERCHANT_INC_PRODUCT_PRICE],
  113. ['label' => '价格减少', 'value' => self::MERCHANT_DEC_PRODUCT_PRICE],
  114. ['label' => '库存增', 'value' => self::MERCHANT_INC_PRODUCT_STOCK],
  115. ['label' => '库存减', 'value' => self::MERCHANT_DEC_PRODUCT_STOCK],
  116. ['label' => '商品上架', 'value' => self::MERCHANT_EDIT_PRODUCT_ON_SALE],
  117. ['label' => '商品下架', 'value' => self::MERCHANT_EDIT_PRODUCT_OFF_SALE],
  118. ['label' => '店铺开启关闭', 'value' => self::MERCHANT_EDIT_AUDIT_STATUS],
  119. ],
  120. self::MERCHANT_OPERATE => [
  121. ['label' => '商户创建', 'value' => self::PLATFORM_CREATE_MERCHANT],
  122. ['label' => '编辑:手续费变化', 'value' => self::PLATFORM_EDIT_MERCHANT_COMMISSION],
  123. ['label' => '编辑:审核权限变化', 'value' => self::PLATFORM_EDIT_MERCHANT_AUDIT_AUTH],
  124. ['label' => '编辑:店铺开启关闭', 'value' => self::PLATFORM_EDIT_MERCHANT_AUDIT_STATUS],
  125. ['label' => '编辑:店铺保证金变动', 'value' => self::PLATFORM_EDIT_MERCHANT_AUDIT_MARGIN],
  126. ['label' => '商品审核通过', 'value' => self::PLATFORM_AUDIT_PRODUCT_PASS],
  127. ['label' => '商品审核未通过', 'value' => self::PLATFORM_AUDIT_PRODUCT_REFUSE],
  128. ['label' => '商品强制下架', 'value' => self::PLATFORM_AUDIT_PRODUCT_OFF_SALE],
  129. ['label' => '商品显示', 'value' => self::PLATFORM_EDIT_PRODUCT_SHOW],
  130. ['label' => '商品关闭', 'value' => self::PLATFORM_EDIT_PRODUCT_HIDE],
  131. ],
  132. ];
  133. return $operate_list[$type];
  134. }
  135. /**
  136. * 获取类型
  137. * @param string $category
  138. * @return int
  139. *
  140. * @date 2023/10/16
  141. * @author yyw
  142. */
  143. public function getCategory(string $category)
  144. {
  145. if (in_array($category, [
  146. self::MERCHANT_CREATE_PRODUCT,
  147. self::MERCHANT_EDIT_PRODUCT,
  148. self::MERCHANT_INC_PRODUCT_PRICE,
  149. self::MERCHANT_DEC_PRODUCT_PRICE,
  150. self::MERCHANT_INC_PRODUCT_STOCK,
  151. self::MERCHANT_DEC_PRODUCT_STOCK,
  152. self::MERCHANT_EDIT_PRODUCT_ON_SALE,
  153. self::MERCHANT_EDIT_PRODUCT_OFF_SALE,
  154. self::MERCHANT_EDIT_AUDIT_STATUS,
  155. ])) {
  156. return self::MERCHANT_OPERATE;
  157. }
  158. if (in_array($category, [
  159. self::PLATFORM_CREATE_MERCHANT,
  160. self::PLATFORM_EDIT_MERCHANT,
  161. self::PLATFORM_EDIT_MERCHANT_COMMISSION,
  162. self::PLATFORM_EDIT_MERCHANT_AUDIT_AUTH,
  163. self::PLATFORM_EDIT_MERCHANT_AUDIT_STATUS,
  164. self::PLATFORM_EDIT_MERCHANT_AUDIT_MARGIN,
  165. self::PLATFORM_AUDIT_PRODUCT_PASS,
  166. self::PLATFORM_AUDIT_PRODUCT_REFUSE,
  167. self::PLATFORM_AUDIT_PRODUCT_OFF_SALE,
  168. self::PLATFORM_EDIT_PRODUCT_SHOW,
  169. self::PLATFORM_EDIT_PRODUCT_HIDE,
  170. ])) {
  171. return self::PLATFORM_OPERATE;
  172. }
  173. throw new ValidateException('操作类型异常');
  174. }
  175. /**
  176. * 操作类型转换
  177. * @param string $type
  178. * @return string
  179. *
  180. * @date 2023/10/16
  181. * @author yyw
  182. */
  183. public static function getTypeName(string $type)
  184. {
  185. $type_list = [
  186. self::PLATFORM_OPERATE => '平台操作',
  187. self::MERCHANT_OPERATE => '商户操作',
  188. ];
  189. return $type_list[$type] ?? '异常操作平台类型';
  190. }
  191. /**
  192. * 被操作类型转换
  193. * @param string $relevance_type
  194. * @return string
  195. *
  196. * @date 2023/10/16
  197. * @author yyw
  198. */
  199. public static function getRelevanceTypeName(string $relevance_type)
  200. {
  201. $relevance_type_list = [
  202. self::RELEVANCE_MERCHANT => '商户',
  203. self::RELEVANCE_PRODUCT => '商品',
  204. self::RELEVANCE_MERCHANT_TYPE => '店铺类型',
  205. ];
  206. return $relevance_type_list[$relevance_type] ?? '异常关联类型';
  207. }
  208. /**
  209. * 创建方法转换
  210. * @param string $action
  211. * @return string
  212. *
  213. * @date 2023/10/16
  214. * @author yyw
  215. */
  216. public static function getActionName(string $action)
  217. {
  218. $action_list = [
  219. self::ACTION_CREATE => '创建',
  220. self::ACTION_EDIT => '编辑',
  221. self::ACTION_DELETE => '删除',
  222. ];
  223. return $action_list[$action] ?? '异常操作类型';
  224. }
  225. /**
  226. * 类别转换
  227. * @param string $category
  228. * @return string
  229. *
  230. * @date 2023/10/16
  231. * @author yyw
  232. */
  233. public static function getCategoryName(string $category)
  234. {
  235. $category_list = [
  236. self::MERCHANT_CREATE_PRODUCT => '商品添加',
  237. self::MERCHANT_EDIT_PRODUCT => '编辑商品',
  238. self::MERCHANT_INC_PRODUCT_PRICE => '价格增加',
  239. self::MERCHANT_DEC_PRODUCT_PRICE => '价格减少',
  240. self::MERCHANT_INC_PRODUCT_STOCK => '库存增',
  241. self::MERCHANT_DEC_PRODUCT_STOCK => '库存减',
  242. self::MERCHANT_EDIT_PRODUCT_ON_SALE => '商品上架',
  243. self::MERCHANT_EDIT_PRODUCT_OFF_SALE => '商品下架',
  244. self::MERCHANT_EDIT_AUDIT_STATUS => '店铺开启关闭',
  245. self::PLATFORM_CREATE_MERCHANT => '商户创建',
  246. self::PLATFORM_EDIT_MERCHANT => '编辑商户',
  247. self::PLATFORM_EDIT_MERCHANT_COMMISSION => '手续费变化',
  248. self::PLATFORM_EDIT_MERCHANT_AUDIT_AUTH => '审核权限变化',
  249. self::PLATFORM_EDIT_MERCHANT_AUDIT_STATUS => '店铺开启关闭',
  250. self::PLATFORM_EDIT_MERCHANT_AUDIT_MARGIN => '店铺保证金变动',
  251. self::PLATFORM_AUDIT_PRODUCT_PASS => '商品审核通过',
  252. self::PLATFORM_AUDIT_PRODUCT_REFUSE => '商品审核未通过',
  253. self::PLATFORM_AUDIT_PRODUCT_OFF_SALE => '商品强制下架',
  254. self::PLATFORM_EDIT_PRODUCT_SHOW => '商品显示',
  255. self::PLATFORM_EDIT_PRODUCT_HIDE => '商品关闭',
  256. ];
  257. return $category_list[$category] ?? '异常类型';
  258. }
  259. /**
  260. * 创建日志(入口)
  261. * @param string $type
  262. * @param int $category
  263. * @param array $data
  264. * @param int $mer_id
  265. *
  266. * @date 2023/10/11
  267. * @author yyw
  268. */
  269. public function recordLog(string $category, array $data = [], int $mer_id = 0)
  270. {
  271. if (!in_array($category, [
  272. self::MERCHANT_CREATE_PRODUCT,
  273. self::MERCHANT_EDIT_PRODUCT,
  274. self::MERCHANT_INC_PRODUCT_PRICE,
  275. self::MERCHANT_DEC_PRODUCT_PRICE,
  276. self::MERCHANT_INC_PRODUCT_STOCK,
  277. self::MERCHANT_DEC_PRODUCT_STOCK,
  278. self::MERCHANT_EDIT_PRODUCT_ON_SALE,
  279. self::MERCHANT_EDIT_PRODUCT_OFF_SALE,
  280. self::MERCHANT_EDIT_AUDIT_STATUS,
  281. self::PLATFORM_CREATE_MERCHANT,
  282. self::PLATFORM_EDIT_MERCHANT,
  283. self::PLATFORM_EDIT_MERCHANT_COMMISSION,
  284. self::PLATFORM_EDIT_MERCHANT_AUDIT_AUTH,
  285. self::PLATFORM_EDIT_MERCHANT_AUDIT_STATUS,
  286. self::PLATFORM_EDIT_MERCHANT_AUDIT_MARGIN,
  287. self::PLATFORM_AUDIT_PRODUCT_PASS,
  288. self::PLATFORM_AUDIT_PRODUCT_REFUSE,
  289. self::PLATFORM_AUDIT_PRODUCT_OFF_SALE,
  290. self::PLATFORM_EDIT_PRODUCT_SHOW,
  291. self::PLATFORM_EDIT_PRODUCT_HIDE,
  292. ])) {
  293. throw new ValidateException('操作类型异常');
  294. }
  295. // 赋值属性
  296. $this->type = $this->getCategory($category);
  297. $this->category = $category;
  298. if ($mer_id) $this->mer_id = $mer_id;
  299. $this->processLogCategory($data);
  300. return true;
  301. }
  302. /**
  303. * 设置商品
  304. * @param $product
  305. * @return $this
  306. *
  307. * @date 2023/10/16
  308. * @author yyw
  309. */
  310. public function setProductInfo($product)
  311. {
  312. $this->relevance_type = self::RELEVANCE_PRODUCT;
  313. $this->relevance_id = $product['product_id'];
  314. $this->relevance_title = $product['store_name'] ?? '未知商品';
  315. $this->mer_id = $product['mer_id'];
  316. if ($this->type == self::PLATFORM_OPERATE) {
  317. $this->mer_id = 0;
  318. }
  319. return $this;
  320. }
  321. /**
  322. * 设置商户
  323. * @param $merchant
  324. * @return $this
  325. *
  326. * @date 2023/10/16
  327. * @author yyw
  328. */
  329. public function setMerchantInfo($merchant)
  330. {
  331. $this->relevance_type = self::RELEVANCE_MERCHANT;
  332. $this->relevance_id = $merchant['mer_id'];
  333. $this->relevance_title = $merchant['mer_name'] ?? '未知商户';
  334. $this->mer_id = $merchant['mer_id'];
  335. if ($this->type == self::PLATFORM_OPERATE) {
  336. $this->mer_id = 0;
  337. }
  338. return $this;
  339. }
  340. /**
  341. * 设置商家类型信息
  342. *
  343. * 本方法用于为当前对象设置与商家类型相关的属性,包括类型ID、类型名称和关联的ID等。
  344. * 这些信息通常用于后续的商家类型检索或分类操作。
  345. *
  346. * @param array $merchant_type 商家类型数据数组
  347. * @param int $merchant_type['mer_type_id'] 商家类型的ID
  348. * @param string $merchant_type['type_name'] 商家类型的名称
  349. *
  350. * @return object 返回当前对象,支持链式调用
  351. */
  352. public function setMerchantTypeInfo($merchant_type)
  353. {
  354. // 设置相关类型为商家类型
  355. $this->relevance_type = self::RELEVANCE_MERCHANT_TYPE;
  356. // 设置商家类型ID
  357. $this->relevance_id = $merchant_type['mer_type_id'];
  358. // 设置商家类型名称,如果未提供,则默认为'未知店铺类别'
  359. $this->relevance_title = $merchant_type['type_name'] ?? '未知店铺类别';
  360. // 初始化商家ID为0,表示尚未关联具体商家
  361. $this->mer_id = 0;
  362. // 返回当前对象,支持链式调用
  363. return $this;
  364. }
  365. /**
  366. * 设置操作员信息
  367. * @param $admin_info
  368. * @return $this
  369. *
  370. * @date 2023/10/13
  371. * @author yyw
  372. */
  373. protected function setOperatorInfo($admin_info)
  374. {
  375. if (empty($admin_info)) {
  376. throw new ValidateException('操作员信息为空');
  377. }
  378. if ($this->type == self::PLATFORM_OPERATE) {
  379. $this->operator_uid = $admin_info['admin_id'];
  380. } else {
  381. $this->operator_uid = $admin_info['merchant_admin_id'];
  382. }
  383. $this->operator_nickname = empty($admin_info['real_name']) ? $admin_info['account'] : $admin_info['real_name'];
  384. /** @var RoleRepository $roleRepository */
  385. $roleRepository = app()->make(RoleRepository::class);
  386. // 查找角色
  387. if (!empty($admin_info['roles'])) {
  388. $roles_list = $roleRepository->getRolesListByIds($admin_info['roles']);
  389. $role_nickname = '';
  390. foreach ($roles_list as $role) {
  391. $role_nickname .= $role['role_name'] . ',';
  392. }
  393. $this->operator_role_id = implode(',', $admin_info['roles']);
  394. $this->operator_role_nickname = $role_nickname ? rtrim($role_nickname, ',') : '超级管理员';
  395. }
  396. return $this;
  397. }
  398. /**
  399. * 处理日志
  400. * @param array $data
  401. * @return bool
  402. *
  403. * @date 2023/10/16
  404. * @author yyw
  405. */
  406. protected function processLogCategory(array $data = [])
  407. {
  408. $this->setOperatorInfo($data['admin_info']);
  409. switch ($this->category) {
  410. case self::MERCHANT_CREATE_PRODUCT:
  411. $this->createProductLog($data);
  412. break;
  413. case self::MERCHANT_EDIT_PRODUCT:
  414. $this->editProductLog($data);
  415. break;
  416. case self::MERCHANT_EDIT_PRODUCT_ON_SALE:
  417. $this->editProductOnSaleLog($data);
  418. break;
  419. case self::MERCHANT_EDIT_PRODUCT_OFF_SALE:
  420. $this->editProductOffSaleLog($data);
  421. break;
  422. case self::PLATFORM_CREATE_MERCHANT:
  423. $this->createMerchantLog($data);
  424. break;
  425. case self::PLATFORM_EDIT_MERCHANT:
  426. $this->editMerchantLog($data);
  427. break;
  428. case self::MERCHANT_EDIT_AUDIT_STATUS:
  429. case self::PLATFORM_EDIT_MERCHANT_AUDIT_STATUS:
  430. $this->editMerchantAuditStatusLog($data);
  431. break;
  432. case self::PLATFORM_EDIT_MERCHANT_AUDIT_MARGIN:
  433. $this->editMerchantAuditMarginLog($data);
  434. break;
  435. case self::PLATFORM_AUDIT_PRODUCT_PASS:
  436. $this->auditProductPassLog($data);
  437. break;
  438. case self::PLATFORM_AUDIT_PRODUCT_REFUSE:
  439. $this->auditProductRefuseLog($data);
  440. break;
  441. case self::PLATFORM_AUDIT_PRODUCT_OFF_SALE:
  442. $this->auditProductRefuseOffSale($data);
  443. break;
  444. case self::PLATFORM_EDIT_PRODUCT_SHOW:
  445. $this->editProductShowLog($data);
  446. break;
  447. case self::PLATFORM_EDIT_PRODUCT_HIDE:
  448. $this->editProductHideLog($data);
  449. break;
  450. default:
  451. throw new ValidateException('类型异常');
  452. }
  453. // 设置标题
  454. if (empty($this->title)) {
  455. $this->title = self::getActionName($this->action) . ':' . self::getCategoryName($this->category);
  456. }
  457. return true;
  458. }
  459. /**
  460. * 创建商品
  461. * @param array $data
  462. * @return \app\common\dao\BaseDao|\think\Model
  463. *
  464. * @date 2023/10/13
  465. * @author yyw
  466. */
  467. public function createProductLog(array $data)
  468. {
  469. $this->setProductInfo($data['product']);
  470. $this->action = self::ACTION_CREATE;
  471. $this->mark = $this->buildLogMark('创建了');
  472. return $this->createLog();
  473. }
  474. /**
  475. * 编辑商品
  476. * @param array $data
  477. * @return array
  478. *
  479. * @date 2023/10/16
  480. * @author yyw
  481. */
  482. public function editProductLog(array $data)
  483. {
  484. $this->setProductInfo($data['product']);
  485. if (empty($data['update_infos'])) {
  486. throw new ValidateException('数据异常,商品编辑日志记录失败');
  487. }
  488. $this->action = self::ACTION_EDIT;
  489. $update_infos = $data['update_infos'];
  490. $res = [];
  491. foreach ($update_infos as $key => $item) {
  492. if (empty($item)) {
  493. continue;
  494. }
  495. $this->category = $key;
  496. $this->mark = $this->buildLogMark('编辑了', '-' . $item);
  497. $res[] = $this->createLog();
  498. }
  499. return $res;
  500. }
  501. /**
  502. * 商品上架
  503. * @param array $data
  504. * @return \app\common\dao\BaseDao|\think\Model
  505. *
  506. * @date 2023/10/16
  507. * @author yyw
  508. */
  509. public function editProductOnSaleLog(array $data)
  510. {
  511. $this->setProductInfo($data['product']);
  512. $this->action = self::ACTION_EDIT;
  513. $this->mark = $this->buildLogMark('上架了');
  514. return $this->createLog();
  515. }
  516. /**
  517. * 商品下架
  518. * @param array $data
  519. * @return \app\common\dao\BaseDao|\think\Model
  520. *
  521. * @date 2023/10/16
  522. * @author yyw
  523. */
  524. public function editProductOffSaleLog(array $data)
  525. {
  526. $this->setProductInfo($data['product']);
  527. $this->action = self::ACTION_EDIT;
  528. $this->mark = $this->buildLogMark('下架了');
  529. return $this->createLog();
  530. }
  531. /**
  532. * 创建商户
  533. * @param array $data
  534. * @return \app\common\dao\BaseDao|\think\Model
  535. *
  536. * @date 2023/10/16
  537. * @author yyw
  538. */
  539. public function createMerchantLog(array $data)
  540. {
  541. $this->setMerchantInfo($data['merchant']);
  542. $this->action = self::ACTION_CREATE;
  543. $this->mark = $this->buildLogMark('创建了');
  544. return $this->createLog();
  545. }
  546. /**
  547. * 商户编辑日志记录
  548. * @param array $data
  549. * @return bool
  550. *
  551. * @date 2023/10/13
  552. * @author yyw
  553. */
  554. public function editMerchantLog(array $data)
  555. {
  556. $merchant = $data['merchant'] ?? [];
  557. $update_infos = $data['update_infos'] ?? [];
  558. if (empty($merchant) || empty($update_infos)) {
  559. throw new ValidateException('参数异常');
  560. }
  561. $this->setMerchantInfo($merchant);
  562. $this->action = self::ACTION_EDIT;
  563. // 对比参数 判断商户修改了什么
  564. if ($merchant['commission_switch'] != $update_infos['commission_switch'] || $merchant['commission_rate'] != $update_infos['commission_rate']) {
  565. $this->category = self::PLATFORM_EDIT_MERCHANT_COMMISSION;
  566. $mark = '商户手续费单独设置开关';
  567. if ($merchant['commission_rate'] != $update_infos['commission_rate']) {
  568. $mark .= '商户手续费单独设置为' . $update_infos['commission_rate'];
  569. }
  570. $this->mark = $this->buildLogMark(($update_infos['commission_switch'] == 1 ? '打开了' : '关闭了'), $mark);
  571. $this->createLog();
  572. }
  573. if ($merchant['is_audit'] != $update_infos['is_audit'] || $merchant['is_bro_room'] != $update_infos['is_bro_room'] || $merchant['is_bro_goods'] != $update_infos['is_bro_goods']) {
  574. $this->category = self::PLATFORM_EDIT_MERCHANT_AUDIT_AUTH;
  575. $this->mark = '';
  576. if ($merchant['is_audit'] != $update_infos['is_audit']) {
  577. $this->mark .= $this->buildLogMark(($update_infos['is_audit'] == 1 ? '打开了' : '关闭了'), '商品审核');
  578. }
  579. if ($merchant['is_bro_room'] != $update_infos['is_bro_room']) {
  580. $this->mark .= $this->buildLogMark(($update_infos['is_bro_room'] == 1 ? '打开了' : '关闭了'), '直播间审核');
  581. }
  582. if ($merchant['is_bro_goods'] != $update_infos['is_bro_goods']) {
  583. $this->mark .= $this->buildLogMark(($update_infos['is_bro_goods'] == 1 ? '打开了' : '关闭了'), '直播间商品审核');
  584. }
  585. $this->createLog();
  586. }
  587. if ($merchant['status'] != $update_infos['status']) {
  588. $this->category = self::PLATFORM_EDIT_MERCHANT_AUDIT_STATUS;
  589. $this->mark = $this->buildLogMark(($update_infos['status'] == 1 ? '打开了' : '关闭了'), '商户');
  590. $this->createLog();
  591. }
  592. return true;
  593. }
  594. /**
  595. * 编辑商户状态
  596. * @param array $data
  597. * @return true
  598. *
  599. * @date 2023/10/16
  600. * @author yyw
  601. */
  602. public function editMerchantAuditStatusLog(array $data)
  603. {
  604. $merchant = $data['merchant'] ?? [];
  605. $update_infos = $data['update_infos'] ?? [];
  606. if (empty($merchant) || empty($update_infos)) {
  607. throw new ValidateException('参数异常');
  608. }
  609. $this->setMerchantInfo($merchant);
  610. $this->action = self::ACTION_EDIT;
  611. $this->title = $update_infos['status'] == 1 ? '开启' : '关闭';
  612. $this->mark = $this->buildLogMark(($update_infos['status'] == 1 ? '打开了' : '关闭了'), '商户');
  613. $this->createLog();
  614. return true;
  615. }
  616. /**
  617. * 编辑:店铺保证金变动
  618. * @param array $data
  619. * @return \app\common\dao\BaseDao|false|\think\Model
  620. *
  621. * @date 2023/10/13
  622. * @author yyw
  623. */
  624. public function editMerchantAuditMarginLog(array $data)
  625. {
  626. $merchant = $data['merchant'] ?? [];
  627. $update_infos = $data['update_infos'] ?? [];
  628. if (empty($merchant) || empty($update_infos)) {
  629. throw new ValidateException('参数异常');
  630. }
  631. $this->setMerchantInfo($merchant);
  632. $this->action = self::ACTION_EDIT;
  633. $this->mark = $this->buildLogMark('编辑了', $update_infos['action'] . ':' . $update_infos['number']);
  634. return $this->createLog();
  635. }
  636. /**
  637. * 商品审核通过
  638. * @param array $data
  639. * @return \app\common\dao\BaseDao|\think\Model
  640. *
  641. * @date 2023/10/16
  642. * @author yyw
  643. */
  644. public function auditProductPassLog(array $data)
  645. {
  646. $this->setProductInfo($data['product']);
  647. $this->action = self::ACTION_EDIT;
  648. $this->mark = $this->buildLogMark('审核通过了');
  649. return $this->createLog();
  650. }
  651. /**
  652. * 商品审核拒绝
  653. * @param array $data
  654. * @return \app\common\dao\BaseDao|\think\Model
  655. *
  656. * @date 2023/10/16
  657. * @author yyw
  658. */
  659. public function auditProductRefuseLog(array $data)
  660. {
  661. $this->setProductInfo($data['product']);
  662. $this->action = self::ACTION_EDIT;
  663. $this->mark = $this->buildLogMark('审核拒绝了');
  664. return $this->createLog();
  665. }
  666. /**
  667. * 商品审核拒绝
  668. * @param array $data
  669. * @return \app\common\dao\BaseDao|\think\Model
  670. *
  671. * @date 2023/10/16
  672. * @author yyw
  673. */
  674. public function auditProductRefuseOffSale(array $data)
  675. {
  676. $this->setProductInfo($data['product']);
  677. $this->action = self::ACTION_EDIT;
  678. $this->mark = $this->buildLogMark('强制下架');
  679. return $this->createLog();
  680. }
  681. /**
  682. * 商品显示
  683. * @param array $data
  684. * @return \app\common\dao\BaseDao|\think\Model
  685. *
  686. * @date 2023/10/16
  687. * @author yyw
  688. */
  689. public function editProductShowLog(array $data)
  690. {
  691. $this->setProductInfo($data['product']);
  692. $this->action = self::ACTION_EDIT;
  693. $this->mark = $this->buildLogMark('开启了');
  694. return $this->createLog();
  695. }
  696. /**
  697. * 商品隐藏
  698. * @param array $data
  699. * @return \app\common\dao\BaseDao|\think\Model
  700. *
  701. * @date 2023/10/16
  702. * @author yyw
  703. */
  704. public function editProductHideLog(array $data)
  705. {
  706. $this->setProductInfo($data['product']);
  707. $this->action = self::ACTION_EDIT;
  708. $this->mark = $this->buildLogMark('关闭了');
  709. return $this->createLog();
  710. }
  711. /**
  712. * 构建日志标记
  713. * @param string $action_desc
  714. * @return string
  715. */
  716. protected function buildLogMark(string $action_desc, string $title = ''): string
  717. {
  718. $title = $title ?: self::getRelevanceTypeName($this->relevance_type);
  719. return "{$this->operator_nickname}(ID:{$this->operator_uid}){$action_desc}{$this->relevance_title}(ID:{$this->relevance_id}){$title}";
  720. }
  721. /**
  722. * 创建日志
  723. * @return \app\common\dao\BaseDao|\think\Model
  724. *
  725. * @date 2023/10/16
  726. * @author yyw
  727. */
  728. protected function createLog()
  729. {
  730. $this->mark = mb_substr($this->mark, 0, 1990);
  731. $save_data = [
  732. 'mer_id' => $this->mer_id,
  733. "title" => $this->title,
  734. 'relevance_id' => $this->relevance_id,
  735. 'relevance_title' => $this->relevance_title,
  736. 'relevance_type' => $this->relevance_type,
  737. 'type' => $this->type,
  738. 'category' => $this->category,
  739. 'action' => $this->action,
  740. 'operator_role_id' => $this->operator_role_id,
  741. 'operator_role_nickname' => $this->operator_role_nickname,
  742. 'operator_uid' => $this->operator_uid,
  743. 'operator_nickname' => $this->operator_nickname,
  744. 'mark' => $this->mark,
  745. ];
  746. return $this->dao->create($save_data);
  747. }
  748. /**
  749. * 获取日志
  750. * @param array $where
  751. * @param $page
  752. * @param $limit
  753. * @return array
  754. * @throws \think\db\exception\DataNotFoundException
  755. * @throws \think\db\exception\DbException
  756. * @throws \think\db\exception\ModelNotFoundException
  757. *
  758. * @date 2023/10/11
  759. * @author yyw
  760. */
  761. public function lst(array $where, $page, $limit, int $mer_id = 0)
  762. {
  763. if ($mer_id) $where['mer_Id'] = $mer_id;
  764. $query = $this->dao->search($where)->append(['category_name']);
  765. $count = $query->count();
  766. $list = $query->page($page, $limit)->order('create_time DESC')->select()->toArray();
  767. return compact('count', 'list');
  768. }
  769. }